From c5349029ab4b71aa3b244b1060c951e9b40651dc Mon Sep 17 00:00:00 2001 From: busti Date: Tue, 18 Jan 2022 21:28:52 +0100 Subject: [PATCH] fix spotifyd service config and firewall setup --- common/default.nix | 1 + modules/spotifyd.nix | 68 ++++++++++++++++++++++++++++++++++++ shared-services/spotifyd.nix | 11 ++++-- 3 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 modules/spotifyd.nix diff --git a/common/default.nix b/common/default.nix index f8638ea..73f681d 100644 --- a/common/default.nix +++ b/common/default.nix @@ -38,6 +38,7 @@ vim wget jq + lsof ]; programs.bash.shellAliases = { diff --git a/modules/spotifyd.nix b/modules/spotifyd.nix new file mode 100644 index 0000000..2e72596 --- /dev/null +++ b/modules/spotifyd.nix @@ -0,0 +1,68 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.spotifyd; + toml = pkgs.formats.toml {}; + warnConfig = + if cfg.config != "" + then lib.trace "Using the stringly typed .config attribute is discouraged. Use the TOML typed .settings attribute instead." + else id; + spotifydConf = + if cfg.settings != {} + then toml.generate "spotify.conf" cfg.settings + else warnConfig (pkgs.writeText "spotifyd.conf" cfg.config); +in +{ + options = { + services.spotifyd = { + enable = mkEnableOption "spotifyd, a Spotify playing daemon"; + + config = mkOption { + default = ""; + type = types.lines; + description = '' + (Deprecated) Configuration for Spotifyd. For syntax and directives, see + . + ''; + }; + + settings = mkOption { + default = {}; + type = toml.type; + example = { global.bitrate = 320; }; + description = '' + Configuration for Spotifyd. For syntax and directives, see + . + ''; + }; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + { + assertion = cfg.config == "" || cfg.settings == {}; + message = "At most one of the .config attribute and the .settings attribute may be set"; + } + ]; + + systemd.services.spotifyd = { + wantedBy = [ "multi-user.target" ]; + after = [ "network-online.target" "sound.target" ]; + description = "spotifyd, a Spotify playing daemon"; + environment.SHELL = "/bin/sh"; + serviceConfig = { + ExecStart = "${pkgs.spotifyd}/bin/spotifyd --no-daemon --config-path ${spotifydConf}"; + Restart = "always"; + RestartSec = 12; + DynamicUser = true; + CacheDirectory = "spotifyd"; + SupplementaryGroups = ["audio"]; + }; + }; + }; + + meta.maintainers = [ maintainers.anderslundstedt ]; +} \ No newline at end of file diff --git a/shared-services/spotifyd.nix b/shared-services/spotifyd.nix index 801c835..0b8a9be 100644 --- a/shared-services/spotifyd.nix +++ b/shared-services/spotifyd.nix @@ -1,11 +1,18 @@ { config, ... }: { + disabledModules = [ "services/audio/spotifyd.nix" ]; + imports = [ ../modules/spotifyd.nix ]; + + services.spotifyd = { enable = true; - settings.zeroconf_port = 18572; + settings.global = { + bitrate = 320; + zeroconf_port = 18572; + }; }; - networking.firewall.allowedTCPPorts = [ 4070 config.services.spotifyd.settings.zeroconf_port ]; + networking.firewall.allowedTCPPorts = [ 4070 config.services.spotifyd.settings.global.zeroconf_port ]; networking.firewall.allowedUDPPorts = [ 5353 ]; }