diff --git a/pkgs/applications/window-managers/wayfire/applications.nix b/pkgs/applications/window-managers/wayfire/applications.nix new file mode 100644 index 000000000000..6c22227c0c51 --- /dev/null +++ b/pkgs/applications/window-managers/wayfire/applications.nix @@ -0,0 +1,23 @@ +{ newScope, wayfirePlugins }: + +let + self = with self; { + inherit wayfirePlugins; + + callPackage = newScope self; + + wayfire = callPackage ./. { }; + + wcm = callPackage ./wcm.nix { + inherit (wayfirePlugins) wf-shell; + }; + + wrapWayfireApplication = callPackage ./wrapper.nix { }; + + withPlugins = selector: self // { + wayfire = wrapWayfireApplication wayfire selector; + wcm = wrapWayfireApplication wcm selector; + }; + }; +in +self diff --git a/pkgs/applications/window-managers/wayfire/plugins.nix b/pkgs/applications/window-managers/wayfire/plugins.nix new file mode 100644 index 000000000000..830a918fcb7e --- /dev/null +++ b/pkgs/applications/window-managers/wayfire/plugins.nix @@ -0,0 +1,12 @@ +{ newScope, wayfire }: + +let + self = with self; { + inherit wayfire; + + callPackage = newScope self; + + wf-shell = callPackage ./wf-shell.nix { }; + }; +in +self diff --git a/pkgs/applications/window-managers/wayfire/wrapper.nix b/pkgs/applications/window-managers/wayfire/wrapper.nix new file mode 100644 index 000000000000..622928985471 --- /dev/null +++ b/pkgs/applications/window-managers/wayfire/wrapper.nix @@ -0,0 +1,39 @@ +{ runCommandNoCC, lib, makeWrapper, wayfirePlugins }: + +let + inherit (lib) escapeShellArg makeBinPath; + + xmlPath = plugin: "${plugin}/share/wayfire/metadata/wf-shell"; + + makePluginPath = lib.makeLibraryPath; + makePluginXMLPath = lib.concatMapStringsSep ":" xmlPath; +in + +application: + +choosePlugins: + +let + plugins = choosePlugins wayfirePlugins; +in + +runCommandNoCC "${application.name}-wrapped" { + nativeBuildInputs = [ makeWrapper ]; + + passthru = application.passthru // { + unwrapped = application; + }; + + inherit (application) meta; +} '' + mkdir -p $out/bin + for bin in ${application}/bin/* + do + makeWrapper "$bin" $out/bin/''${bin##*/} \ + --suffix PATH : ${escapeShellArg (makeBinPath plugins)} \ + --suffix WAYFIRE_PLUGIN_PATH : ${escapeShellArg (makePluginPath plugins)} \ + --suffix WAYFIRE_PLUGIN_XML_PATH : ${escapeShellArg (makePluginXMLPath plugins)} + done + find ${application} -mindepth 1 -maxdepth 1 -not -name bin \ + -exec ln -s '{}' $out ';' +'' diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cef016947626..2554f3584e43 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -24755,10 +24755,13 @@ in way-cooler = throw ("way-cooler is abandoned by its author: " + "https://way-cooler.org/blog/2020/01/09/way-cooler-post-mortem.html"); - wayfire = callPackage ../applications/window-managers/wayfire { }; - wcm = callPackage ../applications/window-managers/wayfire/wcm.nix { }; + wayfireApplications = wayfireApplications-unwrapped.withPlugins (plugins: [ plugins.wf-shell ]); + inherit (wayfireApplications) wayfire wcm; + wayfireApplications-unwrapped = callPackage ../applications/window-managers/wayfire/applications.nix { }; + wayfirePlugins = callPackage ../applications/window-managers/wayfire/plugins.nix { + inherit (wayfireApplications-unwrapped) wayfire; + }; wf-config = callPackage ../applications/window-managers/wayfire/wf-config.nix { }; - wf-shell = callPackage ../applications/window-managers/wayfire/wf-shell.nix { }; waypipe = callPackage ../applications/networking/remote/waypipe { };