{
  lib,
  pkgs,
  config,
  ...
}:
with lib;
let
  cfg = config.luj.navidrome;
  port = 4533;
in
{

  options.luj.navidrome = {

    enable = mkEnableOption "activate navidrome service";

    user = mkOption {
      type = types.str;
      default = "navidrome";
      description = "User account under which Navidrome runs.";
    };

    group = mkOption {
      type = types.str;
      default = "navidrome";
      description = "Group under which Navidrome runs.";
    };

    nginx.enable = mkEnableOption "activate nginx";
    nginx.subdomain = mkOption { type = types.str; };
  };

  config = mkIf cfg.enable (mkMerge [
    {

      systemd.services.navidrome = {

        description = "Navidrome Media Server";
        after = [ "network.target" ];
        wantedBy = [ "multi-user.target" ];
        serviceConfig = {
          User = cfg.user;
          Group = cfg.group;
          ExecStart = ''
            ${pkgs.navidrome}/bin/navidrome --configfile /run/secrets/navidrome.json
          '';
          StateDirectory = "navidrome";
          WorkingDirectory = "/var/lib/navidrome";
        };
      };
    }

    (mkIf cfg.nginx.enable (mkSubdomain cfg.nginx.subdomain port))

    (mkIf cfg.nginx.enable (mkVPNSubdomain cfg.nginx.subdomain port))
  ]);
}