nixfiles/hosts/koi/containers/navidrome/default.nix

77 lines
2 KiB
Nix
Raw Normal View History

{ config, pkgs, ... }:
2024-08-03 07:09:55 +03:00
let
UID = 1102;
feishin = pkgs.callPackage ./feishin.nix {};
feishinConfig = builtins.replaceStrings [ "\n" ] [ "" ] ''
window.SERVER_URL="https://navi.stupid.fish";
window.SERVER_NAME="stupid.fish";
window.SERVER_TYPE="navidrome";
window.SERVER_LOCK=true;
2024-12-12 07:42:58 +03:00
const style = document.createElement("style");
style.innerHTML = `
#sidebar-queue .mantine-Stack-root:has([class^=TitleWrapper]) { display: none; }
`;
document.head.appendChild(style);
'';
2024-08-03 07:09:55 +03:00
in {
2024-11-23 16:37:34 +03:00
desu.secrets.navidrome-env.owner = "navidrome";
2024-08-03 07:09:55 +03:00
users.users.navidrome = {
isNormalUser = true;
uid = UID;
extraGroups = [ "geesefs" ];
2024-08-03 07:09:55 +03:00
};
virtualisation.oci-containers.containers.navidrome = {
image = "deluan/navidrome:0.53.3";
2024-08-03 07:09:55 +03:00
volumes = [
"${./navidrome.toml}:/navidrome.toml"
];
environment = {
ND_CONFIGFILE = "/navidrome.toml";
};
environmentFiles = [
2024-11-23 16:37:34 +03:00
config.desu.secrets.navidrome-env.path
2024-08-03 07:09:55 +03:00
];
user = "${builtins.toString UID}:${builtins.toString UID}";
extraOptions = [
"--group-add=${builtins.toString config.users.groups.geesefs.gid}"
2024-12-11 09:11:31 +03:00
"--mount=type=bind,source=/mnt/s3-desu-priv-encrypted/music,target=/music/s3,readonly"
"--mount=type=bind,source=/srv/navidrome,target=/data"
];
2024-08-03 07:09:55 +03:00
};
2024-12-07 06:52:47 +03:00
systemd.services.docker-navidrome.requires = [ "gocryptfs.service" ];
2024-08-03 07:09:55 +03:00
systemd.tmpfiles.rules = [
"d /srv/navidrome 0755 ${builtins.toString UID} ${builtins.toString UID} -"
2024-08-03 07:09:55 +03:00
];
services.nginx.virtualHosts."navi.stupid.fish" = {
forceSSL = true;
useACMEHost = "stupid.fish";
locations."/" = {
2024-08-03 22:33:50 +03:00
proxyPass = "http://navidrome.docker:4533$request_uri";
2024-08-03 07:09:55 +03:00
extraConfig = ''
proxy_buffering off;
'';
};
locations."/feishin/" = {
extraConfig = ''
alias ${feishin}/;
try_files $uri $uri/ /index.html;
'';
};
locations."/feishin/settings.js" = {
extraConfig = ''
add_header 'Content-Type' 'application/javascript';
return 200 '${feishinConfig}';
'';
};
2024-08-03 07:09:55 +03:00
};
}