wayfire: add plugin support

The top-level "wayfire" attribute is a Wayfire with wf-shell installed
and nothing else.  But wayfireApplications.withPlugins can be used to
create a Wayfire with arbitrary plugins, or no plugins at all.
This commit is contained in:
Alyssa Ross 2020-05-02 18:08:22 +00:00
parent e2243140f9
commit c898defdbf
4 changed files with 80 additions and 3 deletions

View file

@ -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

View file

@ -0,0 +1,12 @@
{ newScope, wayfire }:
let
self = with self; {
inherit wayfire;
callPackage = newScope self;
wf-shell = callPackage ./wf-shell.nix { };
};
in
self

View file

@ -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 ';'
''

View file

@ -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 { };