Files
azrdev 8cc95767a2 nixos/spotifyd: add package option
Spotify service changes frequently break spotifyd. Using newer releases
from upstream requires overlaying the module too, even though it rarely
changes package. This change should allow using newer spotifyd builds (e.g.
from nixos-unstable) without having to overlay the module in the current
(e.g. nixos stable) system.
2026-02-04 21:32:51 +01:00

82 lines
2.1 KiB
Nix

{
config,
lib,
pkgs,
...
}:
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
lib.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 = lib.mkEnableOption "spotifyd, a Spotify playing daemon";
package = lib.mkPackageOption pkgs "spotifyd" { };
config = lib.mkOption {
default = "";
type = lib.types.lines;
description = ''
(Deprecated) Configuration for Spotifyd. For syntax and directives, see
<https://docs.spotifyd.rs/configuration/index.html#config-file>.
'';
};
settings = lib.mkOption {
default = { };
type = toml.type;
example = {
global.bitrate = 320;
};
description = ''
Configuration for Spotifyd. For syntax and directives, see
<https://docs.spotifyd.rs/configuration/index.html#config-file>.
'';
};
};
};
config = lib.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" ];
wants = [ "network-online.target" ];
after = [
"network-online.target"
"sound.target"
];
description = "spotifyd, a Spotify playing daemon";
environment.SHELL = "/bin/sh";
serviceConfig = {
ExecStart = "${cfg.package}/bin/spotifyd --no-daemon --cache-path /var/cache/spotifyd --config-path ${spotifydConf}";
Restart = "always";
RestartSec = 12;
DynamicUser = true;
CacheDirectory = "spotifyd";
SupplementaryGroups = [ "audio" ];
};
};
};
meta.maintainers = [ lib.maintainers.anderslundstedt ];
}