refactor: move spotify and spotifyd to common
This commit is contained in:
parent
e96da4ea8a
commit
7ab6e16fca
7 changed files with 137 additions and 99 deletions
24
common/spotify.nix
Normal file
24
common/spotify.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
cfg = config.grimmShared;
|
||||
in
|
||||
{
|
||||
config = with cfg; lib.mkIf (enable && spotify.enable) {
|
||||
environment.systemPackages = [
|
||||
pkgs.ncspot
|
||||
] ++ lib.optional graphical pkgs.spotify;
|
||||
|
||||
grimmShared = {
|
||||
sound = true;
|
||||
network = true;
|
||||
};
|
||||
};
|
||||
|
||||
options.grimmShared.spotify = {
|
||||
enable = lib.mkEnableOption "grimm-spotify";
|
||||
};
|
||||
|
||||
imports = [
|
||||
./spotifyd.nix
|
||||
];
|
||||
}
|
93
common/spotifyd.nix
Normal file
93
common/spotifyd.nix
Normal file
|
@ -0,0 +1,93 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
spotifyd_cache_dir = "/tmp/spotifyd";
|
||||
cfg = config.grimmShared;
|
||||
spotifyd-dbus = pkgs.writeTextDir "share/dbus-1/system.d/org.mpris.MediaPlayer2.spotifyd.conf" ''
|
||||
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
|
||||
|
||||
<!DOCTYPE busconfig PUBLIC
|
||||
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
||||
<busconfig>
|
||||
<policy user="spotifyd">
|
||||
<allow own_prefix="org.mpris.MediaPlayer2.spotifyd"/>
|
||||
<allow send_destination_prefix="org.mpris.MediaPlayer2.spotifyd"/>
|
||||
<allow receive_sender="org.mpris.MediaPlayer2"/>
|
||||
</policy>
|
||||
<policy context="default">
|
||||
<allow send_destination_prefix="org.mpris.MediaPlayer2.spotifyd"/>
|
||||
<allow receive_sender="org.mpris.MediaPlayer2"/>
|
||||
</policy>
|
||||
</busconfig>
|
||||
'';
|
||||
in
|
||||
{
|
||||
config = with cfg; lib.mkIf (enable && spotify.enable && spotify.spotifyd.enable) {
|
||||
environment.systemPackages = with pkgs; [
|
||||
spotifyd
|
||||
spotifyd-dbus
|
||||
];
|
||||
|
||||
systemd.services.init-spotifyd-cache-dir = {
|
||||
description = "Create the spotifyd cache dir";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig.Type = "oneshot";
|
||||
script = ''
|
||||
mkdir -p ${spotifyd_cache_dir}
|
||||
chown spotifyd:spotifyd -R ${spotifyd_cache_dir}
|
||||
'';
|
||||
};
|
||||
|
||||
# spotifyd config
|
||||
services.spotifyd = {
|
||||
enable = true;
|
||||
settings.global = {
|
||||
bitrate = 320;
|
||||
username = cfg.spotify.spotifyd.username;
|
||||
device_name = "grimm_laptop";
|
||||
password_cmd = let pass = cfg.spotify.spotifyd.pass; in with lib; if (lib.isPath pass || lib.isString pass) then "${pkgs.coreutils-full}/bin/cat ${pass}" else (getExe pass);
|
||||
device_type = "computer";
|
||||
dbus_type = "system";
|
||||
device = "default";
|
||||
control = "default";
|
||||
volume_controller = "softvol";
|
||||
# no_audio_cache = true;
|
||||
spotifyd_cache_dir = spotifyd_cache_dir;
|
||||
max_cache_size = 10000000000;
|
||||
initial_volume = "90";
|
||||
backend = "alsa"; # fixme
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
services.dbus.packages = with pkgs; [
|
||||
spotifyd-dbus
|
||||
];
|
||||
|
||||
# spotifyd has access to global pipewire
|
||||
users.users.spotifyd = {
|
||||
isSystemUser = true;
|
||||
group = "spotifyd";
|
||||
extraGroups = [ "audio" "pipewire" ];
|
||||
};
|
||||
|
||||
# spotifyd is also a group
|
||||
users.groups = { spotifyd = { }; };
|
||||
};
|
||||
|
||||
options.grimmShared.spotify.spotifyd = with lib; {
|
||||
enable = mkEnableOption "grimm-spotify-tui";
|
||||
|
||||
username = mkOption {
|
||||
type = types.nonEmptyStr;
|
||||
description = "spotify username";
|
||||
};
|
||||
|
||||
|
||||
pass = mkOption {
|
||||
type = types.either types.nonEmptyStr (types.either types.package types.path);
|
||||
description = "command to execute to obtain login information or readable path to a file containing them";
|
||||
};
|
||||
};
|
||||
}
|
|
@ -10,7 +10,7 @@ let
|
|||
};
|
||||
|
||||
autolaunch = mkOption {
|
||||
type = types.listOf (types.either types.str types.package);
|
||||
type = types.listOf (types.either types.nonEmptyStr types.package);
|
||||
default = [ ];
|
||||
description = "set of commands to be run at sway startup";
|
||||
};
|
||||
|
|
|
@ -58,13 +58,31 @@
|
|||
server = "cloud.grimmauld.de";
|
||||
passwordFile = config.age.secrets.nextcloud_pass.path;
|
||||
};
|
||||
|
||||
spotify = {
|
||||
enable = true;
|
||||
spotifyd = {
|
||||
enable = true;
|
||||
pass = config.age.secrets.spotify_pass.path;
|
||||
username = "3tyhk4i01l54w7co7xm7jvu32";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
age.identityPaths = [ "/home/grimmauld/.ssh/id_rsa" ];
|
||||
age.secrets.nextcloud_pass = {
|
||||
file = ./secrets/nextcloud_pass.age;
|
||||
mode = "777";
|
||||
};
|
||||
|
||||
age.secrets.spotify_pass = {
|
||||
file = ./secrets/spotify_pass.age;
|
||||
owner = "spotifyd";
|
||||
group = "spotifyd";
|
||||
mode = "700";
|
||||
};
|
||||
|
||||
|
||||
environment.sessionVariables = {
|
||||
NIXPKGS_ALLOW_UNFREE = "1";
|
||||
MOZ_ENABLE_WAYLAND = "1";
|
||||
|
|
|
@ -38,10 +38,8 @@
|
|||
nix-gaming.nixosModules.pipewireLowLatency
|
||||
./load_common.nix
|
||||
./specific/grimm-nixos-laptop/configuration.nix
|
||||
|
||||
./configuration.nix
|
||||
./modules/users.nix
|
||||
./modules/spotify-tui.nix
|
||||
./modules/system-packages.nix
|
||||
./modules/kvm.nix
|
||||
{ environment.systemPackages = [ agenix.packages.${system}.default ]; }
|
||||
|
|
|
@ -19,5 +19,6 @@ with lib;
|
|||
./common/cloudsync.nix
|
||||
./common/security.nix
|
||||
./common/qt.nix
|
||||
./common/spotify.nix
|
||||
];
|
||||
}
|
||||
|
|
|
@ -1,96 +0,0 @@
|
|||
{ config, pkgs, ... }:
|
||||
let
|
||||
spotifyd_cache_dir = "/tmp/spotifyd";
|
||||
in
|
||||
{
|
||||
nixpkgs.overlays = [
|
||||
(final: prev: {
|
||||
spotifyd = prev.spotifyd.overrideAttrs (old: {
|
||||
postInstall = ''
|
||||
mkdir -p $out/share/dbus-1/system.d/
|
||||
tee $out/share/dbus-1/system.d/org.mpris.MediaPlayer2.spotifyd.conf <<END
|
||||
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
|
||||
|
||||
<!DOCTYPE busconfig PUBLIC
|
||||
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
||||
<busconfig>
|
||||
<policy user="spotifyd">
|
||||
<allow own_prefix="org.mpris.MediaPlayer2.spotifyd"/>
|
||||
<allow send_destination_prefix="org.mpris.MediaPlayer2.spotifyd"/>
|
||||
<allow receive_sender="org.mpris.MediaPlayer2"/>
|
||||
</policy>
|
||||
<policy context="default">
|
||||
<allow send_destination_prefix="org.mpris.MediaPlayer2.spotifyd"/>
|
||||
<allow receive_sender="org.mpris.MediaPlayer2"/>
|
||||
</policy>
|
||||
</busconfig>
|
||||
END
|
||||
'';
|
||||
});
|
||||
})
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
ncspot
|
||||
spotifyd
|
||||
];
|
||||
|
||||
# decrypt spotify password
|
||||
age.identityPaths = [ "/home/grimmauld/.ssh/id_rsa" ];
|
||||
|
||||
# spotify pass
|
||||
age.secrets.spotify_pass = {
|
||||
file = ../secrets/spotify_pass.age;
|
||||
owner = "spotifyd";
|
||||
group = "spotifyd";
|
||||
mode = "700";
|
||||
};
|
||||
|
||||
systemd.services.init-spotifyd-cache-dir = {
|
||||
description = "Create the spotifyd cache dir";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig.Type = "oneshot";
|
||||
script = ''
|
||||
mkdir -p ${spotifyd_cache_dir}
|
||||
chown spotifyd:spotifyd -R ${spotifyd_cache_dir}
|
||||
'';
|
||||
};
|
||||
|
||||
# spotifyd config
|
||||
services.spotifyd = {
|
||||
enable = true;
|
||||
settings.global = {
|
||||
bitrate = 320;
|
||||
username = "3tyhk4i01l54w7co7xm7jvu32";
|
||||
device_name = "grimm_laptop";
|
||||
password_cmd = "${pkgs.coreutils-full}/bin/cat ${config.age.secrets.spotify_pass.path}"; # read password secret
|
||||
device_type = "computer";
|
||||
dbus_type = "system";
|
||||
device = "default";
|
||||
control = "default";
|
||||
volume_controller = "softvol";
|
||||
# no_audio_cache = true;
|
||||
spotifyd_cache_dir = spotifyd_cache_dir;
|
||||
max_cache_size = 10000000000;
|
||||
initial_volume = "90";
|
||||
backend = "alsa"; # fixme
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
services.dbus.packages = with pkgs; [
|
||||
spotifyd # add above dbus code to the config
|
||||
];
|
||||
|
||||
# spotifyd has access to global pipewire
|
||||
users.users.spotifyd = {
|
||||
isSystemUser = true;
|
||||
group = "spotifyd";
|
||||
extraGroups = [ "audio" "pipewire" ];
|
||||
};
|
||||
|
||||
# spotifyd is also a group
|
||||
users.groups = { spotifyd = { }; };
|
||||
}
|
Loading…
Reference in a new issue