diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 2ef8684d7f9..b271ca0f355 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -201,6 +201,7 @@ ./services/desktops/dleyna-renderer.nix ./services/desktops/dleyna-server.nix ./services/desktops/geoclue2.nix + ./services/desktops/pipewire.nix ./services/desktops/gnome3/at-spi2-core.nix ./services/desktops/gnome3/chrome-gnome-shell.nix ./services/desktops/gnome3/evolution-data-server.nix diff --git a/nixos/modules/services/desktops/pipewire.nix b/nixos/modules/services/desktops/pipewire.nix new file mode 100644 index 00000000000..263a06156f8 --- /dev/null +++ b/nixos/modules/services/desktops/pipewire.nix @@ -0,0 +1,23 @@ +# pipewire service. +{ config, lib, pkgs, ... }: + +with lib; + +{ + ###### interface + options = { + services.pipewire = { + enable = mkEnableOption "pipewire service"; + }; + }; + + + ###### implementation + config = mkIf config.services.pipewire.enable { + environment.systemPackages = [ pkgs.pipewire ]; + + systemd.packages = [ pkgs.pipewire ]; + }; + + meta.maintainers = with lib.maintainers; [ jtojnar ]; +} diff --git a/pkgs/desktops/gnome-3/core/mutter/default.nix b/pkgs/desktops/gnome-3/core/mutter/default.nix index 39b2438a8f0..e1343d9977d 100644 --- a/pkgs/desktops/gnome-3/core/mutter/default.nix +++ b/pkgs/desktops/gnome-3/core/mutter/default.nix @@ -1,7 +1,7 @@ { fetchurl, stdenv, pkgconfig, gnome3, intltool, gobjectIntrospection, upower, cairo , pango, cogl, clutter, libstartup_notification, zenity, libcanberra_gtk3 , libtool, makeWrapper, xkeyboard_config, libxkbfile, libxkbcommon, libXtst, libinput -, libgudev, libwacom, xwayland, autoreconfHook }: +, pipewire, libgudev, libwacom, xwayland, autoreconfHook }: stdenv.mkDerivation rec { inherit (import ./src.nix fetchurl) name src; @@ -9,6 +9,7 @@ stdenv.mkDerivation rec { configureFlags = [ "--with-x" "--disable-static" + "--enable-remote-desktop" "--enable-shape" "--enable-sm" "--enable-startup-notification" @@ -18,6 +19,15 @@ stdenv.mkDerivation rec { "--with-xwayland-path=${xwayland}/bin/Xwayland" ]; + patches = [ + # Pipewire 0.1.8 compatibility + (fetchurl { + name = "mutter-pipewire-0.1.8-compat.patch"; + url = https://bugzilla.gnome.org/attachment.cgi?id=367356; + sha256 = "10bx5zf11wwhhy686w11ggikk56pbxydpbk9fbd947ir385x92cz"; + }) + ]; + propagatedBuildInputs = [ # required for pkgconfig to detect mutter-clutter libXtst @@ -30,7 +40,7 @@ stdenv.mkDerivation rec { gnome_desktop cairo pango cogl clutter zenity libstartup_notification gnome3.geocode_glib libinput libgudev libwacom libcanberra_gtk3 zenity xkeyboard_config libxkbfile - libxkbcommon + libxkbcommon pipewire ]; preFixup = '' diff --git a/pkgs/development/libraries/pipewire/default.nix b/pkgs/development/libraries/pipewire/default.nix new file mode 100644 index 00000000000..3bd94c977e8 --- /dev/null +++ b/pkgs/development/libraries/pipewire/default.nix @@ -0,0 +1,47 @@ +{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, doxygen, graphviz, valgrind +, glib, dbus, gst_all_1, v4l_utils, alsaLib, ffmpeg, libjack2, libudev, libva, xlibs +, sbc, SDL2 +}: + +let + version = "0.1.8"; +in stdenv.mkDerivation rec { + name = "pipewire-${version}"; + + src = fetchFromGitHub { + owner = "PipeWire"; + repo = "pipewire"; + rev = version; + sha256 = "1nim8d1lsf6yxk97piwmsz686w84b09lk6cagbyjr9m3k2hwybqn"; + }; + + outputs = [ "out" "dev" "doc" ]; + + nativeBuildInputs = [ + meson ninja pkgconfig doxygen graphviz valgrind + ]; + buildInputs = [ + glib dbus gst_all_1.gst-plugins-base gst_all_1.gstreamer v4l_utils + alsaLib ffmpeg libjack2 libudev libva xlibs.libX11 sbc SDL2 + ]; + + patches = [ + ./fix-paths.patch + ]; + + mesonFlags = [ + "-Denable_docs=true" + "-Denable_gstreamer=true" + ]; + + doCheck = true; + checkPhase = "meson test"; + + meta = with stdenv.lib; { + description = "Server and user space API to deal with multimedia pipelines"; + homepage = http://pipewire.org/; + license = licenses.lgpl21; + platforms = platforms.linux; + maintainers = with maintainers; [ jtojnar ]; + }; +} diff --git a/pkgs/development/libraries/pipewire/fix-paths.patch b/pkgs/development/libraries/pipewire/fix-paths.patch new file mode 100644 index 00000000000..5a07c6271e1 --- /dev/null +++ b/pkgs/development/libraries/pipewire/fix-paths.patch @@ -0,0 +1,8 @@ +--- a/src/daemon/systemd/user/meson.build ++++ b/src/daemon/systemd/user/meson.build +@@ -1,4 +1,4 @@ +-systemd_user_services_dir = systemd.get_pkgconfig_variable('systemduserunitdir') ++systemd_user_services_dir = join_paths(get_option('prefix'), 'etc', 'systemd', 'user') + + install_data(sources : 'pipewire.socket', install_dir : systemd_user_services_dir) + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 83c2855ad48..cd66f2c9048 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -7034,6 +7034,8 @@ with pkgs; pew = callPackage ../development/tools/pew {}; pipenv = callPackage ../development/tools/pipenv {}; + pipewire = callPackage ../development/libraries/pipewire {}; + pyrex = pyrex095; pyrex095 = callPackage ../development/interpreters/pyrex/0.9.5.nix { };