dotfiles/modules/services/spotify_player.nix

62 lines
1.5 KiB
Nix

{ lib, config, pkgs, ... }:
with lib;
let
toml = pkgs.formats.toml { };
cfg = config.my.services.spotify-player;
tomlConfig =
if cfg.configFile != null
then cfg.configFile
else toml.generate "app.toml" cfg.config;
configFolder = pkgs.runCommand "spotify-player-config" { } ''
mkdir $out
ln -s "${tomlConfig}" $out/app.toml
'';
in
{
options.my.services.spotify-player = {
enable = mkEnableOption "spotify_player";
config = mkOption {
inherit (toml) type;
default = { };
};
configFile = mkOption {
type = with types; nullOr path;
default = null;
};
package = mkOption {
type = types.package;
default = pkgs.spotify-player;
};
target = mkOption {
type = types.str;
default = "graphical-session.target";
};
};
config = mkIf cfg.enable {
assertions = [
{
assertion = cfg.config == { } || cfg.configFile == null;
message = "At least one of the options 'config' or 'configFile' must be set.";
}
{
assertion = cfg.config != { } || cfg.configFile != null;
message = "Only one of the options 'config' or 'configFile' may be set.";
}
];
systemd.user.services.spotify-player = {
after = [ cfg.target "network.target" ];
wantedBy = [ cfg.target ];
serviceConfig = {
Type = "forking";
Restart = "always";
RestartSec = "1s";
ExecStart = "${getExe cfg.package} --daemon --config-folder ${configFolder}";
};
};
};
}