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 {
|
autolaunch = mkOption {
|
||||||
type = types.listOf (types.either types.str types.package);
|
type = types.listOf (types.either types.nonEmptyStr types.package);
|
||||||
default = [ ];
|
default = [ ];
|
||||||
description = "set of commands to be run at sway startup";
|
description = "set of commands to be run at sway startup";
|
||||||
};
|
};
|
||||||
|
|
|
@ -58,13 +58,31 @@
|
||||||
server = "cloud.grimmauld.de";
|
server = "cloud.grimmauld.de";
|
||||||
passwordFile = config.age.secrets.nextcloud_pass.path;
|
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 = {
|
age.secrets.nextcloud_pass = {
|
||||||
file = ./secrets/nextcloud_pass.age;
|
file = ./secrets/nextcloud_pass.age;
|
||||||
mode = "777";
|
mode = "777";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
age.secrets.spotify_pass = {
|
||||||
|
file = ./secrets/spotify_pass.age;
|
||||||
|
owner = "spotifyd";
|
||||||
|
group = "spotifyd";
|
||||||
|
mode = "700";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
environment.sessionVariables = {
|
environment.sessionVariables = {
|
||||||
NIXPKGS_ALLOW_UNFREE = "1";
|
NIXPKGS_ALLOW_UNFREE = "1";
|
||||||
MOZ_ENABLE_WAYLAND = "1";
|
MOZ_ENABLE_WAYLAND = "1";
|
||||||
|
|
|
@ -38,10 +38,8 @@
|
||||||
nix-gaming.nixosModules.pipewireLowLatency
|
nix-gaming.nixosModules.pipewireLowLatency
|
||||||
./load_common.nix
|
./load_common.nix
|
||||||
./specific/grimm-nixos-laptop/configuration.nix
|
./specific/grimm-nixos-laptop/configuration.nix
|
||||||
|
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
./modules/users.nix
|
./modules/users.nix
|
||||||
./modules/spotify-tui.nix
|
|
||||||
./modules/system-packages.nix
|
./modules/system-packages.nix
|
||||||
./modules/kvm.nix
|
./modules/kvm.nix
|
||||||
{ environment.systemPackages = [ agenix.packages.${system}.default ]; }
|
{ environment.systemPackages = [ agenix.packages.${system}.default ]; }
|
||||||
|
|
|
@ -19,5 +19,6 @@ with lib;
|
||||||
./common/cloudsync.nix
|
./common/cloudsync.nix
|
||||||
./common/security.nix
|
./common/security.nix
|
||||||
./common/qt.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