diff --git a/hosts/servers/hosting-02.nix b/hosts/servers/hosting-02.nix index 8b2399b..265b82d 100644 --- a/hosts/servers/hosting-02.nix +++ b/hosts/servers/hosting-02.nix @@ -58,6 +58,7 @@ name = "storage"; gid = 491729; members = [ + config.services.navidrome.user "slskd" "wrtagweb" "bandcamp-collection-downloader" @@ -73,20 +74,27 @@ }; }; - services.gonic = { + services.navidrome = { enable = true; settings = { - music-path = [ "/data/music" ]; - podcast-path = [ "/data/podcast" ]; - playlists-path = [ "/data/playlists" ]; + BaseUrl = "https://music.escapeangle.com"; + MusicFolder = "/data/music"; + DataFolder = "/data/navidrome"; + EnableInsightsCollector = false; + AutoTranscodeDownload = true; + EnableGravatar = true; + EnableTranscodingConfig = true; + FFmpegPath = pkgs.ffmpeg; + IgnoredArticles = "The El La Los Las Le Les Os As O A De"; }; + environmentFile = config.sops.secrets.navidromeSecrets.path; }; services.nginx.virtualHosts."music.escapeangle.com" = { forceSSL = true; enableACME = true; locations."/" = { - proxyPass = "http://localhost:4747"; + proxyPass = "http://localhost:${toString config.services.navidrome.settings.Port}"; proxyWebsockets = true; }; }; @@ -97,10 +105,7 @@ services.wrtagweb = { enable = true; - envFile = config.sops.secrets.wrtagwebEnvFile.path; - settings = { - log-level = "DEBUG"; - }; + settingsFile = config.sops.secrets.wrtagwebConfigFile.path; }; services.nginx.virtualHosts."tag.escapeangle.com" = { @@ -133,7 +138,10 @@ slskdEnvFile = { owner = config.services.slskd.user; }; - wrtagwebEnvFile = { + navidromeSecrets = { + owner = config.services.navidrome.user; + }; + wrtagwebConfigFile = { owner = "wrtagweb"; }; bandcampcdCookieFile = { diff --git a/hosts/servers/hosting-02.yaml b/hosts/servers/hosting-02.yaml index 0cbe3ba..d263e8b 100644 --- a/hosts/servers/hosting-02.yaml +++ b/hosts/servers/hosting-02.yaml @@ -3,7 +3,8 @@ storageboxKey: ENC[AES256_GCM,data:uWDkiWIk3OePRfoaqjllVlRVzW5+ryE4sIOs8qm6cS8JN storageboxCryptKey: ENC[AES256_GCM,data:ryYOzFvdPaVkOHmypYbqw+KU6aB2OQutLw==,iv:FL4c7P36qxYR1KJlg7t0dvFHlKGMIrTlQG+CDkeJu9U=,tag:Ia4mhV9Ed/m1rRMCNnHqXw==,type:str] slskdEnvFile: ENC[AES256_GCM,data:K1S1PXQMiBoEdbuM/NTBUYRrUSnAC/KBhm/PFzoCJATiLLPsstzgqzbe9vG8tnULb2driAH4Ytd03cmROp30V+9vW6J9eyCofWySWZNEYriRfY1y7y5AR8W13zQL0FGZOewUy/1T7YRvN8FjZFh4n7S3c0GREX3FSSNrmaHwOqgueDs=,iv:VziNMRpC2clhFyOMG8LRReMGUxhYqjUaZeA8gh599aM=,tag:H1tQBZ8nSgATSJB6nFSdlA==,type:str] bandcampcdCookieFile: ENC[AES256_GCM,data:vHw7utB2mAUiys+zBNpGDW9URdSMkWbvv0bZyNUgbDwHkg0ZkbxHBbnspbU4gM5AmUc0OPKjgoqaLEfy+mrylfyXxdKyVlLWGVDwH/9SjsgLjNWBnZOfS0/JN0h8nD9DDfQ9+KVKwfnndIBDwc3Qr+/uQe88JOWeN27ZZoqMXAA7y92aHAn/cdjV9opJL3zq2Gk9ZSjW6pX0W382/+P2d+n5pvnJCGaVcz6NqYj36V7eu+jqtCdpN0ugb7bEQLBEPxN6vDkB1EaWiuI+JXUqPyAlyRqH/9D9IKFu+HWVjryz6WILkJ8rpAEKUtgr4DUDgW/ukTp8/gCe/w126YljuGYj283WYZOTJQHnNdqZFur1qmIosSRLzw4atnD1CAEpZzHFXGz19wMk5+U3OkPQkC/PxmzhqQlyKw7JQ8rNu+WTcHmF3YqYZjtPj1aayXxLqQ9IbZOwXwa0BLRZX7FOFJz/znQa7kR2VE5/Q8vbYA3sz0gBQiIcl8VSzGtQlVM7K+TtkiUSA4DwKH+deSlUnjauIsLldENlbOWwDdm+ckdIRUUuIXiHRq9VM+1UPJdxLGScsPUgsIMZckIkdcEXDyBo3HPdwvQ0lX2msqTIyJxgBMyvSC37Frb0l7hiE6j5HndLv0nfT8krik12WpfR9PKjJqy6kIl3fwSwTqNHA7yPeQKHR8QizGXmkwxEBtsYufKE0Oi1u7VUwwyJe9IU2Gkr0TQYiHo7Glg0lNtkrpPIM+hOjxJJE2MVRe+S117RluvvfEjAmEhyb9cjW+TAw3kQttwO2vMk+RHV3mFF5G2/0tmRbvpbou68eFDDOBQ8ILrUo35GuR8ziPXJeJ+5EuCgePGavEP4qX4FX/GpnMEo85b6m5Vow5EOu8dakHX4fcFTPQeCZ0FoLTGYzGxqUsMG4E8upsPZMw4xBxeVjQO35l4FVhwNyrsIaep1mZWf5vBgAN4q2FYyfJ7jnClJkSrNxg0zW8sEgqEZXIZcFfhPYC1DWZZRMII5n8zJXoeGHDLEIuT4zeIpoXRN3+S4X3AFL4I/gm6mAbFQv3IJ8+g/EOThTZh0PRl70v0Imd3EDetjy4rKphPDpeb6QJWPQkWnIcIeE7Nkg19VoOcWmL8UDxUpsD0NIL1QSZ5ElBuoFVsKuOlkBD5UucLOGZgF01n4BXQjZ9DIW1xBm3lWDDxzuwh4F1rf2MvgesZCEGVn/Y3VF3YMGgdhxLht4IHo4w6z7Rzuh53acf6TH+uZ+iOmFaBETlxA17n6YyaCVzjCuyBNxAxTvX0y+49saYctF9PExYwoKtKL2X9u8NR2OoZJi+TPVfLwBxSrrr9et7Kxhlqu2zxqzWRt7xQXUxWL28HqZljBZxpOxdhy9XLCr3Aj2aZa1mH7zFX5hincsT/RiHEMdOXNUtJoQvBFe/HZ+uquM42Q90qf0alO+VT7kpa5anHLMfzwRKub6W7eFbTe5CD9SybwRDnB503WyreTUmDgIJNwoqePC+WYrW1RnBhI8ebdGl+34ou5CuJldqa1UTEzJNeNqCWLzrP/ThAcJRqmZJ945na6mmQqxhRp2edGu5+tIP3FzoHK2hUOlPyv5CgWGwXLCE0E1kP9Acpex53Wz/NxEa5eTB3ZlwsXNeI2fx4rwyAgtTVMQbzvuf3bVgIAN73I5mRfHRdTeKyQqgShtbEIoz2Q5TGvFNl2ALJ4bJzOVRo2LkUYTGHHH2x623o29fN8Ij35DRabVJyt1y5QGwVNWco=,iv:dgV9d8sRSwyNlW3lWZ6ldWw9+Fxs0Wmn1jhRxg5Pkfs=,tag:ZY3frrrk5/bBgx5lRMYvGg==,type:str] -wrtagwebEnvFile: ENC[AES256_GCM,data:tWJT4ZnjqyudbH4oD6VDTmv86vrPESGG2Qx8x+bg61msIiaS1t6fHU8vTCL5WiJ3c7K1Hlr8zu4Ss9Xgru469uduzXHaX8DbPfSpBekit4MpJQ4l3sRpxn2ss5uzApxgxTUH/vEf07+oijDSICNeGbSbNl/6imJ+JhmDb8MqP6h3uvEOZB7Boyx0M8La8EWN3db3OmSkeFM+QQ9Jseni5ucKKw==,iv:sD5P5ZbNwlmxRb7iPs5MKtiPgQVrZ78IkmVuxQQLKkw=,tag:RJTZy9ruwx0MGawTE8NgdQ==,type:str] +wrtagwebConfigFile: ENC[AES256_GCM,data:9VEUB08AJl9RsnyLFLguEAd83TcSAH6F4R+msK5jEKmpY5JVOKWOnBHhQU1egL4imP7NYepC2dvUcfPnypvqwX10KKEOuEVNVXoiJSbgonHiG6SCFd6Xvfk5GKgSNt+OXdSKWO8GMBfZqZhHrTEsA/+7o1C8PiAHFTjTZWMfRb4c6Ou4Bs3iQuDsZ4PE7fXkq5SmrqMlghbzrrfWCMz+L12oQcv1lBsAknYro2u6zrLZ7grtkG+NE+q9XGfdIaG2E7wAuF+SW5fO82GvYNb5w8QT9CB4nBgsgSw+2ASf+TdqpgyOq7djCaddbk7Fmjr8YIsCumdSXII5+w1VnXGMfq33J+M2uFH/hNAqIsgueQmUbOBLDQqPso11GqSOSWfy9avAjihQzwpyh8SK4nOaczgtyWeCvJOzdXMh1mzcOoj2HlLy63mXDWCmb0nCd4VKBUXYVz9FUB2/07IftPB8LjpX+NkjSYXH8njCUf0idDJYhUCGBBxCFvtDgQzyAXxIhKc8+AZV6sMoQ3ehoP/C8PNTenDjxKA4r8Uu8H9hj2o0sxLKqGMyyLeznn1sKq9pcIpj9wFrAxeK6kvFKWklHORIakgdd2EaT/tnnZc6AqgAaThroxQDUQ8tT3N8LuONcY73vxWsX86ugzCTsFOyK8iOWsXuDu6UWhyCemLaGuwWtUJPvNHe3CPRvgXVytaNZt0+X4/LTzVDfCt5BQBk364vqzjG2/i2WWnXiwWVr6FFXZu8UeONBpoQDF1FwCH8yCEa6C33y6ObB4eDhWFbdvrexORA4ZXc6UFf6GR/g7IA5B4Hk4RjEWpiyHtzYo+FFowRSzp3m96mIIYcBLanwnI0q6t3Ab0haUuuagGvG23nNKNWogermmvqlZMkUuwisqqwanE=,iv:FezjWLrrIsmihl0IwoCtrkReTyS28hW4kfIhLtRE4P4=,tag:uprF35tn1YOO53BfiqMgVg==,type:str] +navidromeSecrets: ENC[AES256_GCM,data:kWk8+jh766yXzDHM5ZnZC+L9Qe1FrcaEjmTyidQ8n0QhcciYFEuV6XCwzYHQUICajv9q1+fggmDJqjcFiMvACFUvUrKrNlV4hKsIdoOBKn4a6P5V5Fw1UudcZRw3zJ6yX9n7yQ==,iv:nrSe5cPIq7PJRtxe6s5icyFKRRBlgTb9keXou8JT2dE=,tag:cMf8cinvsV94MV7YKm3AvQ==,type:str] sops: age: - recipient: age1hvrssz7k9akz66evj4kja53zvdtrss8k2ljxsh5myh2mru62sggqznlzrt @@ -15,8 +16,8 @@ sops: b1ZqUzZLUkFwNHJyVlhmK0FOZ1JFYUEKDU4NmBCHRY+ZK+RFK/LioGzjJTaOE1ky MC6jxt7Y5RkCk0BBqeoEVLaNXNViPjwakbvyfH0w0P6l0KDJ4mNlYQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-10-07T14:48:18Z" - mac: ENC[AES256_GCM,data:q/1KjSsLTUsTVCdMevgF4FkLeTJCVpjVOv6xRJOYcV0+Ib5FQnGDtzcD8PJHvd1AO9jW91iXufYsPfJXEKeuuCbZDRz+q97yIVQJgWCUk9LS1gZB9HbBkzEecqZM5ULkgh+xqAlGIdYrPe0MADahctzJBDiLtV6EeoVS6dRbQDA=,iv:kRRbtzqgRy5IJ2Y6FR2nfzB7fAEGO++biZjqwfURn3g=,tag:eR7FPIZ6M1TvpOsA1Zw77w==,type:str] + lastmodified: "2025-10-07T20:13:08Z" + mac: ENC[AES256_GCM,data:KCtVQVoUovw/dKm75ttidOCydoVduJxiefPAN5X/MdqPVgfFdUHJgzk8I320OLAyLpj+IClUPhYalUkRZz/91bcUkOIEg1gvY15SyO6O0uMEh82G+lSigMaZkGotg3oFCLRxNvMsIBNISHMDY6sXeGRzZuKhbL3mzVMF7j8zpfA=,iv:Tc5157euWgH1LuRsun0YqKY50Q8j+RAL/6hVmhJVXW4=,tag:u9R1/kPRvj9VfdzMjp6Cfg==,type:str] pgp: - created_at: "2025-09-18T21:32:42Z" enc: |- diff --git a/modules/nixos/wrtagweb.nix b/modules/nixos/wrtagweb.nix index 1a389b5..f94b236 100644 --- a/modules/nixos/wrtagweb.nix +++ b/modules/nixos/wrtagweb.nix @@ -6,10 +6,6 @@ }: let cfg = config.services.wrtagweb; - settingsFormat = pkgs.formats.keyValue { - mkKeyValue = lib.generators.mkKeyValueDefault { } " "; - listsAsDuplicateKeys = true; - }; in { options = { @@ -17,25 +13,12 @@ in enable = lib.mkEnableOption "wrtag web"; - settings = lib.mkOption rec { - type = settingsFormat.type; - apply = lib.recursiveUpdate default; - default = { - web-listen-addr = "127.0.0.1:7373"; - path-format = "/data/music/{{ artists .Release.Artists | sort | join \"; \" | safepath }}/({{ .Release.ReleaseGroup.FirstReleaseDate.Year }}) {{ .Release.Title | safepath }}{{ if not (eq .ReleaseDisambiguation \"\") }} ({{ .ReleaseDisambiguation | safepath }}){{ end }}/{{ pad0 2 .TrackNum }}.{{ len .Tracks | pad0 2 }} {{ if .IsCompilation }}{{ artistsString .Track.Artists | safepath }} - {{ end }}{{ .Track.Title | safepath }}{{ .Ext }}"; - }; - description = '' - Configuration for wrtagweb - ''; - }; - - envFile = lib.mkOption { + settingsFile = lib.mkOption { type = lib.types.path; description = '' - File with environment variables for wrtagweb + Configuration file for wrtagweb ''; }; - }; }; @@ -47,14 +30,17 @@ in }; users.groups.wrtagweb = { }; + environment.systemPackages = with pkgs; [ + rsgain + ]; + systemd.services.wrtagweb = { description = "wrtagweb"; after = [ "network.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { User = "wrtagweb"; - ExecStart = "${pkgs.unstable.wrtag}/bin/wrtagweb -config-path ${settingsFormat.generate "wrtagweb" cfg.settings}"; - EnvironmentFile = cfg.envFile; + ExecStart = "${pkgs.unstable.wrtag}/bin/wrtagweb -config-path ${cfg.settingsFile}"; }; }; };