feat(spotify_player): add service/program module
This commit is contained in:
parent
2e4ac37bc6
commit
b6b76a0e7d
3 changed files with 123 additions and 1 deletions
|
@ -36,7 +36,25 @@ in
|
||||||
nix-edit.enable = mkDefault true;
|
nix-edit.enable = mkDefault true;
|
||||||
nvim.enable = mkDefault true;
|
nvim.enable = mkDefault true;
|
||||||
python.versions."311".enable = mkDefault true;
|
python.versions."311".enable = mkDefault true;
|
||||||
spotify.enable = mkDefault true;
|
spotify-player = {
|
||||||
|
enable = mkDefault true;
|
||||||
|
package = pkgs.spotify-player.overrideAttrs (old: {
|
||||||
|
buildFeatures = lib.lists.remove "notify" (old.buildFeatures or [ ]);
|
||||||
|
});
|
||||||
|
config = {
|
||||||
|
client_id = "3172dbeaf64949728920c58b823bc24b";
|
||||||
|
copy_command = {
|
||||||
|
command = "wl-copy";
|
||||||
|
args = [ ];
|
||||||
|
};
|
||||||
|
enable_cover_image_cache = true;
|
||||||
|
default_device = "spotify-player-daemon";
|
||||||
|
enable_streaming = false;
|
||||||
|
playback_window_position = "Bottom";
|
||||||
|
cover_img_length = 20;
|
||||||
|
cover_img_width = 10;
|
||||||
|
};
|
||||||
|
};
|
||||||
ssh.enable = mkDefault true;
|
ssh.enable = mkDefault true;
|
||||||
thunar.enable = mkDefault true;
|
thunar.enable = mkDefault true;
|
||||||
wallpaper.enable = mkDefault true;
|
wallpaper.enable = mkDefault true;
|
||||||
|
@ -47,6 +65,19 @@ in
|
||||||
gammastep.enable = true;
|
gammastep.enable = true;
|
||||||
kdeconnect.enable = mkDefault true;
|
kdeconnect.enable = mkDefault true;
|
||||||
printing.enable = true;
|
printing.enable = true;
|
||||||
|
spotify-player = {
|
||||||
|
enable = mkDefault true;
|
||||||
|
config = {
|
||||||
|
client_id = "3172dbeaf64949728920c58b823bc24b";
|
||||||
|
device = {
|
||||||
|
name = "spotify-player-daemon";
|
||||||
|
device_type = "computer";
|
||||||
|
volume = 70;
|
||||||
|
bitrate = 320;
|
||||||
|
audio_cache = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
wireguard.enable = true;
|
wireguard.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
33
modules/programs/spotify_player.nix
Normal file
33
modules/programs/spotify_player.nix
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{ config
|
||||||
|
, lib
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.my.programs.spotify-player;
|
||||||
|
toml = pkgs.formats.toml { };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.my.programs.spotify-player = {
|
||||||
|
enable = mkEnableOption "spotify-player";
|
||||||
|
package = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.spotify-player;
|
||||||
|
};
|
||||||
|
config = mkOption {
|
||||||
|
inherit (toml) type;
|
||||||
|
default = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home-manager.users.moritz = {
|
||||||
|
xdg.configFile."spotify-player/app.toml" = {
|
||||||
|
source = toml.generate "app.toml" cfg.config;
|
||||||
|
};
|
||||||
|
home.packages = [ cfg.package ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
58
modules/services/spotify_player.nix
Normal file
58
modules/services/spotify_player.nix
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
{ 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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
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 = [ "graphical-session.target" "network.target" ];
|
||||||
|
partOf = [ "graphical-session.target" ];
|
||||||
|
wantedBy = [ "graphical-session.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "forking";
|
||||||
|
Restart = "always";
|
||||||
|
RestartSec = "1s";
|
||||||
|
ExecStart = "${getExe cfg.package} --daemon --config-folder ${configFolder}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue