2024-02-21 23:23:52 +00:00
|
|
|
# administer with pw-cli, pw-mon, pw-top commands
|
|
|
|
{ config, lib, ... }:
|
|
|
|
let
|
|
|
|
cfg = config.sane.programs.pipewire;
|
|
|
|
in
|
|
|
|
{
|
2024-02-21 23:26:25 +00:00
|
|
|
sane.programs.pipewire = {
|
2024-02-25 10:36:21 +00:00
|
|
|
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";
|
|
|
|
};
|
|
|
|
};
|
2024-02-21 23:26:25 +00:00
|
|
|
};
|
|
|
|
|
2024-02-25 10:36:21 +00:00
|
|
|
# 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";
|
2024-02-21 23:23:52 +00:00
|
|
|
};
|
2024-02-25 10:36:21 +00:00
|
|
|
|
|
|
|
services.udev.packages = lib.mkIf cfg.enabled [
|
|
|
|
cfg.package
|
|
|
|
];
|
2024-02-21 23:26:25 +00:00
|
|
|
|
|
|
|
# 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.
|
|
|
|
# - readme outlines requirements: <https://github.com/heftig/rtkit>
|
|
|
|
# XXX(2023/10/12): rtkit does not play well on moby. any application sending audio out dies after 10s.
|
|
|
|
# security.rtkit.enable = lib.mkIf cfg.enabled true;
|
2024-02-21 23:23:52 +00:00
|
|
|
}
|