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 ];
}