82 lines
2 KiB
Nix
82 lines
2 KiB
Nix
{ config, pkgs, ... }:
|
|
|
|
let
|
|
rclone-webdav-start = pkgs.writeShellScript "rclone-webdav-start.sh" ''
|
|
#!/bin/bash
|
|
|
|
# Configuration
|
|
CREDS_FILE="/run/agenix/webdav"
|
|
SERVE_DIR="/data/webdav"
|
|
SOCKET_PATH="/run/rclone-webdav/webdav.sock"
|
|
|
|
# Check if credentials file exists
|
|
if [ ! -f "$CREDS_FILE" ]; then
|
|
echo "Error: Credentials file $CREDS_FILE not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Read credentials from file (format: username:password)
|
|
CREDENTIALS=$(cat "$CREDS_FILE")
|
|
USERNAME=$(echo "$CREDENTIALS" | cut -d':' -f1)
|
|
PASSWORD=$(echo "$CREDENTIALS" | cut -d':' -f2)
|
|
|
|
# Validate credentials
|
|
if [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then
|
|
echo "Error: Invalid credentials format. Expected username:password"
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure serve directory exists
|
|
mkdir -p "$SERVE_DIR"
|
|
|
|
# Remove existing socket if it exists
|
|
rm -f "$SOCKET_PATH"
|
|
|
|
# Start rclone serve webdav
|
|
exec ${pkgs.rclone}/bin/rclone serve webdav "$SERVE_DIR" \
|
|
--addr unix://"$SOCKET_PATH" \
|
|
--user "$USERNAME" \
|
|
--pass "$PASSWORD" \
|
|
--config="" \
|
|
--baseurl "/webdav" \
|
|
--verbose
|
|
'';
|
|
in
|
|
|
|
{
|
|
age.secrets.webdav = {
|
|
file = ../../secrets/webdav.age;
|
|
owner = "user";
|
|
group = "users";
|
|
};
|
|
|
|
systemd.services.rclone-webdav = {
|
|
description = "RClone WebDAV Server";
|
|
after = [ "network.target" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig = {
|
|
Type = "exec";
|
|
User = "user";
|
|
Group = "nginx";
|
|
ExecStart = "${rclone-webdav-start}";
|
|
Restart = "always";
|
|
RestartSec = "10";
|
|
NoNewPrivileges = true;
|
|
PrivateTmp = true;
|
|
ProtectSystem = "strict";
|
|
ProtectHome = true;
|
|
ReadWritePaths = [
|
|
"/data/webdav"
|
|
"/run"
|
|
];
|
|
RuntimeDirectory = "rclone-webdav";
|
|
RuntimeDirectoryMode = "0750";
|
|
UMask = "0002";
|
|
};
|
|
preStart = ''
|
|
mkdir -p /data/webdav
|
|
chown user:users /data/webdav
|
|
chmod 755 /data/webdav
|
|
'';
|
|
};
|
|
}
|