#!/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 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 sudo chown -R $uid:$gid "$dir" end rm "$file" 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" "" printf "%s\n" "$app" "/$app/signalr" "" 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 end end function getExtraLocationSettings -a domain s location -V service -V servarr set -l wsConfig ( printf "%s\n" \ '# Websocket' \ "proxy_http_version 1.1;" \ 'proxy_set_header Upgrade $http_upgrade;' \ 'proxy_set_header Connection "upgrade";') 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 ] echo "$wsConfig" end else if contains "$s" $servarr if string match --regex ".*/signalr^" "$location" >/dev/null echo "$wsConfig" end end end function getExtraBackupPatterns echo "^proton\.env\$" end runInstaller --force $argv end