From d467c59825b94185eef55765ee78d9350cec3472 Mon Sep 17 00:00:00 2001 From: Elyhaka <57923898+Elyhaka@users.noreply.github.com> Date: Sun, 8 Dec 2019 13:56:56 +0100 Subject: sway: refactor with a wrapper --- pkgs/applications/window-managers/sway/default.nix | 12 +++--- pkgs/applications/window-managers/sway/wrapper.nix | 50 ++++++++++++++++++++++ 2 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 pkgs/applications/window-managers/sway/wrapper.nix (limited to 'pkgs/applications/window-managers') diff --git a/pkgs/applications/window-managers/sway/default.nix b/pkgs/applications/window-managers/sway/default.nix index 215a576a578..6b4c33dc077 100644 --- a/pkgs/applications/window-managers/sway/default.nix +++ b/pkgs/applications/window-managers/sway/default.nix @@ -3,11 +3,11 @@ , pkgconfig, scdoc , wayland, libxkbcommon, pcre, json_c, dbus, libevdev , pango, cairo, libinput, libcap, pam, gdk-pixbuf -, wlroots, wayland-protocols, swaybg +, wlroots, wayland-protocols }: stdenv.mkDerivation rec { - pname = "sway"; + pname = "sway-unwrapped"; version = "1.2"; src = fetchFromGitHub { @@ -22,7 +22,9 @@ stdenv.mkDerivation rec { ./load-configuration-from-etc.patch ]; - nativeBuildInputs = [ pkgconfig meson ninja scdoc makeWrapper ]; + nativeBuildInputs = [ + pkgconfig meson ninja scdoc + ]; buildInputs = [ wayland libxkbcommon pcre json_c dbus libevdev @@ -37,10 +39,6 @@ stdenv.mkDerivation rec { "-Dtray=enabled" "-Dman-pages=enabled" ]; - postInstall = '' - wrapProgram $out/bin/sway --prefix PATH : "${swaybg}/bin" - ''; - meta = with stdenv.lib; { description = "i3-compatible tiling Wayland compositor"; homepage = https://swaywm.org; diff --git a/pkgs/applications/window-managers/sway/wrapper.nix b/pkgs/applications/window-managers/sway/wrapper.nix new file mode 100644 index 00000000000..bd59ac5fa45 --- /dev/null +++ b/pkgs/applications/window-managers/sway/wrapper.nix @@ -0,0 +1,50 @@ +{ lib, stdenv +, sway-unwrapped, swaybg +, makeWrapper, symlinkJoin, writeShellScriptBin +, withBaseWrapper ? true, extraSessionCommands ? "", dbus +, withGtkWrapper ? false, wrapGAppsHook, gdk-pixbuf +}: + +assert extraSessionCommands != "" -> withBaseWrapper; + +with lib; + +let + baseWrapper = writeShellScriptBin "sway" '' + set -o errexit + if [ ! "$_SWAY_WRAPPER_ALREADY_EXECUTED" ]; then + export _SWAY_WRAPPER_ALREADY_EXECUTED=1 + ${extraSessionCommands} + fi + if [ "$DBUS_SESSION_BUS_ADDRESS" ]; then + export DBUS_SESSION_BUS_ADDRESS + exec ${sway-unwrapped}/bin/sway "$@" + else + exec ${dbus}/bin/dbus-run-session ${sway-unwrapped}/bin/sway "$@" + fi + ''; +in symlinkJoin { + name = "sway-${sway-unwrapped.version}"; + + paths = (optional withBaseWrapper baseWrapper) + ++ [ sway-unwrapped ]; + + nativeBuildInputs = [ makeWrapper ] + ++ (optional withGtkWrapper wrapGAppsHook); + + buildInputs = optional withGtkWrapper gdk-pixbuf; + + postBuild = '' + # We want to run wrapProgram manually to only wrap sway and add swaybg: + export dontWrapGApps=true + ${optionalString withGtkWrapper "wrapGAppsHook"} + wrapProgram $out/bin/sway \ + --prefix PATH : "${swaybg}/bin" ${optionalString withGtkWrapper ''\ + "''${gappsWrapperArgs[@]}" + ''} + ''; + + passthru.providedSessions = [ "sway" ]; + + inherit (sway-unwrapped) meta; +} -- cgit 1.4.1