pipewire: migrate services to sane.programs to completely disable socket activation

see: https://github.com/NixOS/nixpkgs/issues/291318
This commit is contained in:
Colin 2024-02-25 10:36:21 +00:00
parent 0745e9fc06
commit 0b4efd2ab2
3 changed files with 80 additions and 14 deletions

View File

@ -101,6 +101,7 @@
./waylock.nix
./wike.nix
./wine.nix
./wireplumber.nix
./wireshark.nix
./wob
./xarchiver.nix

View File

@ -5,23 +5,63 @@ let
in
{
sane.programs.pipewire = {
persist.byStore.plaintext = [
# persist per-device volume levels
".local/state/wireplumber"
];
suggestedPrograms = [ "wireplumber" ];
# sandbox.method = "bwrap";
# sandbox.wrapperType = "inplace"; #< its config files refer to its binaries by full path
# # needs to *create* the various device files, so needs write access to the /run/user/$uid directory itself
# # sandbox.extraRuntimePaths = [ "/" ];
# sandbox.extraPaths = [ "/" ]; #< TODO: narrow this down
services.pipewire = {
description = "pipewire: multimedia service";
after = [ "graphical-session.target" ];
wantedBy = [ "graphical-session.target" ];
serviceConfig = {
ExecStart = "${cfg.package}/bin/pipewire";
Type = "simple";
Restart = "always";
RestartSec = "5s";
};
};
services.pipewire-pulse = {
description = "pipewire-pulse: Pipewire compatibility layer for PulseAudio clients";
after = [ "pipewire.service" ];
wantedBy = [ "pipewire.service" ];
serviceConfig = {
ExecStart = "${cfg.package}/bin/pipewire-pulse";
Type = "simple";
Restart = "always";
RestartSec = "5s";
};
};
};
services.pipewire = lib.mkIf cfg.enabled {
enable = true;
package = cfg.package;
alsa.enable = true;
alsa.support32Bit = true; # ??
# emulate pulseaudio for legacy apps (e.g. sxmo-utils)
pulse.enable = true;
socketActivation = false;
# taken from nixos/modules/services/desktops/pipewire/pipewire.nix
# removed 32-bit compatibility stuff
environment.etc = lib.mkIf cfg.enabled {
"alsa/conf.d/49-pipewire-modules.conf".text = ''
pcm_type.pipewire {
libs.native = ${cfg.package}/lib/alsa-lib/libasound_module_pcm_pipewire.so ;
}
ctl_type.pipewire {
libs.native = ${cfg.package}/lib/alsa-lib/libasound_module_ctl_pipewire.so ;
}
'';
"alsa/conf.d/50-pipewire.conf".source = "${cfg.package}/share/alsa/alsa.conf.d/50-pipewire.conf";
"alsa/conf.d/99-pipewire-default.conf".source = "${cfg.package}/share/alsa/alsa.conf.d/99-pipewire-default.conf";
};
systemd.user.services."pipewire".wantedBy = lib.optionals cfg.enabled [ "graphical-session.target" ];
systemd.user.services."pipewire-pulse".wantedBy = lib.optionals cfg.enabled [ "graphical-session.target" ];
services.udev.packages = lib.mkIf cfg.enabled [
cfg.package
];
# systemd.packages = lib.mkIf cfg.enabled [
# cfg.package
# ];
# environment.systemPackages = lib.mkIf cfg.enabled [
# cfg.package
# ];
# rtkit/RealtimeKit: allow applications which want realtime audio (e.g. Dino? Pulseaudio server?) to request it.
# this might require more configuration (e.g. polkit-related) to work exactly as desired.

View File

@ -0,0 +1,25 @@
{ config, ... }:
let
cfg = config.sane.programs.wireplumber;
in
{
sane.programs.wireplumber = {
persist.byStore.plaintext = [
# persist per-device volume levels
".local/state/wireplumber"
];
services.wireplumber = {
description = "wireplumber: pipewire Multimedia Service Session Manager";
after = [ "pipewire.service" ];
bindsTo = [ "pipewire.service" ];
wantedBy = [ "pipewire.service" ];
serviceConfig = {
ExecStart = "${cfg.package}/bin/wireplumber";
Type = "simple";
Restart = "always";
RestartSec = "5s";
};
};
};
}