Some checks failed
CI / check (push) Failing after 12m14s
Add a new system-level role for mounting WebDAV filesystems via rclone. Includes rclone-torbox-setup helper script that uses rbw to bootstrap credentials from Bitwarden. Key features: - Configurable WebDAV URL, username, mount point - VFS cache mode and buffer size tuning for media streaming - RequiresMountsFor option for ZFS pool dependencies - Obscured password storage via environment file Enable on john-endesktop for TorBox WebDAV access by rdt-client and Jellyfin. Mount waits for /media ZFS pool before starting. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
99 lines
3.0 KiB
Nix
99 lines
3.0 KiB
Nix
{ pkgs, ... }:
|
|
|
|
pkgs.writeShellScriptBin "rclone-torbox-setup" ''
|
|
set -euo pipefail
|
|
|
|
# Default values
|
|
RBW_ENTRY="''${1:-torbox}"
|
|
ENV_FILE="''${2:-/etc/rclone/torbox.env}"
|
|
|
|
usage() {
|
|
echo "Usage: rclone-torbox-setup [rbw-entry] [env-file]"
|
|
echo ""
|
|
echo "Sets up rclone credentials for TorBox WebDAV mount."
|
|
echo "Retrieves password from rbw (Bitwarden), obscures it for rclone,"
|
|
echo "and writes it to the environment file for the systemd service."
|
|
echo ""
|
|
echo "Arguments:"
|
|
echo " rbw-entry Name of the Bitwarden entry containing the password (default: torbox)"
|
|
echo " env-file Path to write the environment file (default: /etc/rclone/torbox.env)"
|
|
echo ""
|
|
echo "The Bitwarden entry should contain your TorBox password as the password field."
|
|
echo ""
|
|
echo "Example:"
|
|
echo " rclone-torbox-setup torbox-password /etc/rclone/torbox.env"
|
|
exit 1
|
|
}
|
|
|
|
if [[ "''${1:-}" == "-h" ]] || [[ "''${1:-}" == "--help" ]]; then
|
|
usage
|
|
fi
|
|
|
|
echo "rclone TorBox credential setup"
|
|
echo "=============================="
|
|
echo ""
|
|
|
|
# Check if rbw is available
|
|
if ! command -v rbw &> /dev/null; then
|
|
echo "Error: rbw is not available. Please ensure rbw is installed and configured."
|
|
exit 1
|
|
fi
|
|
|
|
# Check if rclone is available
|
|
if ! command -v rclone &> /dev/null; then
|
|
echo "Error: rclone is not available. Please ensure rclone is installed."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Retrieving password from rbw entry: $RBW_ENTRY"
|
|
|
|
# Retrieve password from Bitwarden
|
|
if ! TORBOX_PASS=$(rbw get "$RBW_ENTRY" 2>/dev/null); then
|
|
echo ""
|
|
echo "Error: Failed to retrieve password from rbw entry '$RBW_ENTRY'"
|
|
echo ""
|
|
echo "Please ensure:"
|
|
echo " 1. The entry '$RBW_ENTRY' exists in Bitwarden"
|
|
echo " 2. rbw is unlocked: rbw unlock"
|
|
echo " 3. rbw is synced: rbw sync"
|
|
echo ""
|
|
echo "To create the entry in Bitwarden:"
|
|
echo " - Name: $RBW_ENTRY"
|
|
echo " - Password: Your TorBox password"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Password retrieved successfully"
|
|
|
|
# Obscure the password for rclone
|
|
echo "Obscuring password for rclone..."
|
|
if ! OBSCURED_PASS=$(echo -n "$TORBOX_PASS" | rclone obscure -); then
|
|
echo "Error: Failed to obscure password with rclone"
|
|
exit 1
|
|
fi
|
|
|
|
# Create the directory if needed (requires sudo)
|
|
ENV_DIR=$(dirname "$ENV_FILE")
|
|
if [[ ! -d "$ENV_DIR" ]]; then
|
|
echo "Creating directory $ENV_DIR (requires sudo)..."
|
|
sudo mkdir -p "$ENV_DIR"
|
|
fi
|
|
|
|
# Write the environment file
|
|
echo "Writing environment file to $ENV_FILE (requires sudo)..."
|
|
echo "RCLONE_WEBDAV_PASS=$OBSCURED_PASS" | sudo tee "$ENV_FILE" > /dev/null
|
|
sudo chmod 600 "$ENV_FILE"
|
|
|
|
echo ""
|
|
echo "Setup complete!"
|
|
echo ""
|
|
echo "The environment file has been created at: $ENV_FILE"
|
|
echo "The rclone-mount-torbox systemd service will use this file."
|
|
echo ""
|
|
echo "To activate the mount after NixOS rebuild:"
|
|
echo " sudo systemctl start rclone-mount-torbox"
|
|
echo ""
|
|
echo "To check status:"
|
|
echo " sudo systemctl status rclone-mount-torbox"
|
|
''
|