{ config, lib, pkgs, ... }: { options = { server.media.navidrome = { enable = lib.mkEnableOption "enable navidrome"; port = lib.mkOption { default = 4533; description = "navidrome port"; }; public = lib.mkEnableOption "make navidrome public"; subdomain = lib.mkOption { default = "music"; description = "navidrome subdomain"; }; }; }; config = { services = { navidrome = { enable = config.server.media.navidrome.enable; user = config.user.userName; group = "users"; settings = { Address = "0.0.0.0"; Port = config.server.media.navidrome.port; MusicFolder = "/mnt/Data/Media/Music"; Agents = "lastfm"; AlbumPlayCountMode = "normalized"; EnableDownloads = true; EnableFavourites = true; EnableNowPlaying = true; EnableStarRating = true; EnableUserEditing = true; LastFM.Enabled = true; LastFM.Language = "en"; LastFM.ScrobbleFirstArtistOnly = false; ListenBrainz.Enabled = true; Scanner.Enabled = true; Scanner.Schedule = "1h"; Subsonic.ArtistParticipations = true; }; }; nginx = { virtualHosts = { "${config.server.media.navidrome.subdomain}.${config.networking.domain}" = if config.server.media.navidrome.public then { enableACME = true; forceSSL = true; locations."/" = { proxyPass = "http://127.0.0.1:${toString config.server.media.navidrome.port}"; }; } else { }; }; }; }; }; }