#!/bin/env fish begin set -l dir (status dirname) set -l user jellyfin set -l domain media set -l server "$domain" "" set -l servarr radarr sonarr lidarr prowlarr set -l flood flood set -l service $user source "$dir/../service.fish" function installSW -V dir -V domain -V server -V service set -l root (getServiceRoot $argv) set -l overrides (getServiceOverrides $argv) set -l source "$dir/$(basename "$overrides")" set -l port (getRandomPort) set -l servarrKeys initializeServiceInstallation $argv sudo cp "$dir/docker-compose.base.yml" "$root" sudo cp "$dir/.dockerignore" "$root" sudo cp "$dir/pvpn-cli.py" "$root" sudo cp "$dir/rtorrent.Dockerfile" "$root" sudo cp "$source" "$overrides" installDockerService $argv end function configureSW -V dir -V user -V domain -V service -V servarr -V flood set -l uid set -l gid set -l port set -l file (mktemp) set -l root (getServiceRoot $argv) set -l bin /usr/local/bin/forgejo set -l config "$root/docker-compose.base.yml" set -l overrides (getServiceOverrides $argv) set -l envKey "$(getServiceKey "$service").environment" configureDockerService $argv and sudo useradd \ --system \ --shell /bin/false \ --comment 'Jellyfin server' \ --create-home \ $user set uid (id -u $user) set gid (id -g $user) for name in $service $flood set -l userKey "$(getServiceKey "$name").user" cp "$config" "$file" USER=$uid:$gid yq "$userKey = env(USER)" "$file" | sudo tee "$config" >/dev/null end for name in $servarr rtorrent set -l envKey "$(getServiceKey "$name").environment" sudo cp "$config" "$file" and yq "$envKey.PUID = $uid" "$file" | yq "$envKey.PGID = $gid" | sudo tee "$config" >/dev/null end cp "$overrides" "$file" URL="https://$(getServiceDomain "$domain" "")/" yq "$(getServiceKey "$service").environment.JELLYFIN_PublishedServerUrl = env(URL)" "$file" | sudo tee "$overrides" >/dev/null for dir in "$root"/data/{downloads,config/{,jellyfin,flood,radarr,sonarr,lidarr,prowlarr},media/{,movies,series,music}} sudo mkdir -p "$dir" and chown -R $uid:$gid "$dir" end rm "$file" begin printf "%s\n" \ "#!/bin/sh" \ "ssh -p $port -o StrictHostKeyChecking=no git@127.0.0.1 \"SSH_ORIGINAL_COMMAND=\\\"$SSH_ORIGINAL_COMMAND\\\" \$0 \$@\"" end | sudo tee "$bin" >/dev/null chmod +x "$bin" end function getServiceServers -V server printf "%s\0" $server end function getServiceLocations -V servarr -V flood argparse -i "name=" -- $argv printf "%s\0" \ "$_flag_name" / ( for app in $servarr printf "%s\n" "$app" "/$app" "" end) \ flood "~ ^/flood.*" end function getServiceLocationConfig -a domain s location -V service -V flood if [ "$s" = "$service" ] set -l argv $argv[4..] printf "%s\n" \ "location = / {" \ 'return 302 $scheme://$host/web/;' \ "}" getServiceDefaultProxy $domain $s "$location" --comment "Proxy main Jellyfin traffic" $argv getServiceDefaultProxy $domain $s "= /web/" --path "/web/index.html" --comment "Proxy main Jellyfin traffic" $argv getServiceDefaultProxy $domain $s /socket --comment "Proxy Jellyfin Websockets traffic" $argv else if [ "$s" = "$flood" ] getServiceDefaultProxy $argv printf "%s\n" \ "location = /flood {" \ 'return 302 $scheme://$host$uri/$is_args$args;' \ "}" else getServiceDefaultProxy $argv --path "$location" end end function getExtraLocationSettings -a domain s location -V service if [ "$s" = "$service" ] if [ "$location" = / ] printf "%s\n" \ "# Disable buffering when the nginx proxy gets very resource heavy upon streaming" \ "proxy_buffering off;" else if [ "$location" = /socket ] printf "%s\n" \ '# Websocket' \ "proxy_http_version 1.1;" \ 'proxy_set_header Upgrade $http_upgrade;' \ 'proxy_set_header Connection "upgrade";' end end end function getExtraBackupPatterns echo "^proton\.env\$" end runInstaller --force $argv end