Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions maintainers/maintainer-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6049,6 +6049,13 @@
github = "k4leg";
githubId = 39882583;
};
k900 = {
name = "Ilya K.";
email = "me@0upti.me";
github = "K900";
githubId = 386765;
matrix = "@k900:0upti.me";
};
kaction = {
name = "Dmitry Bogatov";
email = "KAction@disroot.org";
Expand Down
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,7 @@
./services/desktops/malcontent.nix
./services/desktops/pipewire/pipewire.nix
./services/desktops/pipewire/pipewire-media-session.nix
./services/desktops/pipewire/wireplumber.nix
./services/desktops/gnome/at-spi2-core.nix
./services/desktops/gnome/chrome-gnome-shell.nix
./services/desktops/gnome/evolution-data-server.nix
Expand Down
41 changes: 41 additions & 0 deletions nixos/modules/services/desktops/pipewire/wireplumber.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{ config, lib, pkgs, ... }:

let
cfg = config.services.pipewire.wireplumber;
in
{
meta.maintainers = [ lib.maintainers.k900 ];

options = {
services.pipewire.wireplumber = {
enable = lib.mkEnableOption "A modular session / policy manager for PipeWire";

package = lib.mkOption {
type = lib.types.package;
default = pkgs.wireplumber;
defaultText = lib.literalExpression "pkgs.wireplumber";
description = ''
The wireplumber derivation to use.
'';
};
};
};

config = lib.mkIf cfg.enable {
assertions = [
{
assertion = !config.services.pipewire.media-session.enable;
message = "WirePlumber and pipewire-media-session can't be enabled at the same time.";
}
];

environment.systemPackages = [ cfg.package ];
systemd.packages = [ cfg.package ];

systemd.services.wireplumber.enable = config.services.pipewire.systemWide;
systemd.user.services.wireplumber.enable = !config.services.pipewire.systemWide;

systemd.services.wireplumber.wantedBy = [ "pipewire.service" ];
systemd.user.services.wireplumber.wantedBy = [ "pipewire.service" ];
};
}
82 changes: 82 additions & 0 deletions pkgs/development/libraries/pipewire/wireplumber.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
{ lib
, stdenv
, fetchFromGitLab
, nix-update-script
, # base build deps
meson
, pkg-config
, ninja
, # docs build deps
python3
, doxygen
, graphviz
, # GI build deps
gobject-introspection
, # runtime deps
glib
, systemd
, lua5_4
, pipewire
, # options
enableDocs ? true
, enableGI ? stdenv.hostPlatform == stdenv.buildPlatform
}:
let
mesonEnableFeature = b: if b then "enabled" else "disabled";
in
stdenv.mkDerivation rec {
pname = "wireplumber";
version = "0.4.6";

outputs = [ "out" "dev" ] ++ lib.optional enableDocs "doc";

src = fetchFromGitLab {
domain = "gitlab.freedesktop.org";
owner = "pipewire";
repo = "wireplumber";
rev = version;
sha256 = "sha256-y+Gj9EZn67W3U81zXgp+6JAFxZSZTwwT0TB3Kueb/Tw=";
};

nativeBuildInputs = [
meson
pkg-config
ninja
] ++ lib.optionals enableDocs [
graphviz
] ++ lib.optionals enableGI [
gobject-introspection
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This likely needs to be optional on stdenv.hostPlatform == stdenv.buildPlatform due to longstanding issues wrt cross-compiling gobject-introspection.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a separate enableGI argument that defaults to this, if someone really wants to shoot themselves in the foot, they can go ahead and override.

] ++ lib.optionals (enableDocs || enableGI) [
doxygen
(python3.withPackages (ps: with ps;
lib.optionals enableDocs [ sphinx sphinx_rtd_theme breathe ] ++
lib.optionals enableGI [ lxml ]
))
];

buildInputs = [
glib
systemd
lua5_4
pipewire
];

mesonFlags = [
"-Dsystem-lua=true"
"-Delogind=disabled"
"-Ddoc=${mesonEnableFeature enableDocs}"
"-Dintrospection=${mesonEnableFeature enableGI}"
];

passthru.updateScript = nix-update-script {
attrPath = pname;
};

meta = with lib; {
description = "A modular session / policy manager for PipeWire";
homepage = "https://pipewire.org";
license = licenses.mit;
platforms = platforms.linux;
maintainers = with maintainers; [ k900 ];
};
}
1 change: 1 addition & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13777,6 +13777,7 @@ with pkgs;
pipewire = callPackage ../development/libraries/pipewire {};
pipewire-media-session = callPackage ../development/libraries/pipewire/media-session.nix {};
pipewire_0_2 = callPackage ../development/libraries/pipewire/0.2.nix {};
wireplumber = callPackage ../development/libraries/pipewire/wireplumber.nix {};

pyradio = callPackage ../applications/audio/pyradio {};

Expand Down