diff --git a/nixos/modules/services/audio/navidrome.nix b/nixos/modules/services/audio/navidrome.nix
index a5a7e805e3d6..65efbea51aac 100644
--- a/nixos/modules/services/audio/navidrome.nix
+++ b/nixos/modules/services/audio/navidrome.nix
@@ -1,11 +1,22 @@
-{ config, lib, pkgs, ... }:
-
-with lib;
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
let
+ inherit (lib)
+ mkEnableOption
+ mkPackageOption
+ mkOption
+ recursiveUpdate
+ ;
+ inherit (lib.types) bool;
cfg = config.services.navidrome;
- settingsFormat = pkgs.formats.json {};
-in {
+ settingsFormat = pkgs.formats.json { };
+in
+{
options = {
services.navidrome = {
@@ -23,62 +34,72 @@ in {
example = {
MusicFolder = "/mnt/music";
};
- description = ''
- Configuration for Navidrome, see for supported values.
- '';
+ description = "Configuration for Navidrome, see for supported values.";
};
openFirewall = mkOption {
- type = types.bool;
+ type = bool;
default = false;
description = "Whether to open the TCP port in the firewall";
};
};
};
- config = mkIf cfg.enable {
- networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [cfg.settings.Port];
-
- systemd.services.navidrome = {
- description = "Navidrome Media Server";
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
- serviceConfig = {
- ExecStart = ''
- ${cfg.package}/bin/navidrome --configfile ${settingsFormat.generate "navidrome.json" cfg.settings}
- '';
- DynamicUser = true;
- StateDirectory = "navidrome";
- WorkingDirectory = "/var/lib/navidrome";
- RuntimeDirectory = "navidrome";
- RootDirectory = "/run/navidrome";
- ReadWritePaths = "";
- BindPaths = lib.optional (cfg.settings ? DataFolder) cfg.settings.DataFolder;
- BindReadOnlyPaths = [
- # navidrome uses online services to download additional album metadata / covers
- "${config.environment.etc."ssl/certs/ca-certificates.crt".source}:/etc/ssl/certs/ca-certificates.crt"
- builtins.storeDir
- "/etc"
- ] ++ lib.optional (cfg.settings ? MusicFolder) cfg.settings.MusicFolder;
- CapabilityBoundingSet = "";
- RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" "AF_INET6" ];
- RestrictNamespaces = true;
- PrivateDevices = true;
- PrivateUsers = true;
- ProtectClock = true;
- ProtectControlGroups = true;
- ProtectHome = true;
- ProtectKernelLogs = true;
- ProtectKernelModules = true;
- ProtectKernelTunables = true;
- SystemCallArchitectures = "native";
- SystemCallFilter = [ "@system-service" "~@privileged" ];
- RestrictRealtime = true;
- LockPersonality = true;
- MemoryDenyWriteExecute = true;
- UMask = "0066";
- ProtectHostname = true;
+ config =
+ let
+ inherit (lib) mkIf optional;
+ in
+ mkIf cfg.enable {
+ systemd.services.navidrome = {
+ description = "Navidrome Media Server";
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ ExecStart = ''
+ ${cfg.package}/bin/navidrome --configfile ${settingsFormat.generate "navidrome.json" cfg.settings}
+ '';
+ DynamicUser = true;
+ StateDirectory = "navidrome";
+ WorkingDirectory = "/var/lib/navidrome";
+ RuntimeDirectory = "navidrome";
+ RootDirectory = "/run/navidrome";
+ ReadWritePaths = "";
+ BindPaths = optional (cfg.settings ? DataFolder) cfg.settings.DataFolder;
+ BindReadOnlyPaths = [
+ # navidrome uses online services to download additional album metadata / covers
+ "${
+ config.environment.etc."ssl/certs/ca-certificates.crt".source
+ }:/etc/ssl/certs/ca-certificates.crt"
+ builtins.storeDir
+ "/etc"
+ ] ++ optional (cfg.settings ? MusicFolder) cfg.settings.MusicFolder;
+ CapabilityBoundingSet = "";
+ RestrictAddressFamilies = [
+ "AF_UNIX"
+ "AF_INET"
+ "AF_INET6"
+ ];
+ RestrictNamespaces = true;
+ PrivateDevices = true;
+ PrivateUsers = true;
+ ProtectClock = true;
+ ProtectControlGroups = true;
+ ProtectHome = true;
+ ProtectKernelLogs = true;
+ ProtectKernelModules = true;
+ ProtectKernelTunables = true;
+ SystemCallArchitectures = "native";
+ SystemCallFilter = [
+ "@system-service"
+ "~@privileged"
+ ];
+ RestrictRealtime = true;
+ LockPersonality = true;
+ MemoryDenyWriteExecute = true;
+ UMask = "0066";
+ ProtectHostname = true;
+ };
};
+ networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.settings.Port ];
};
- };
}