-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds a Module for the Wayfire Compositor. Also allows managing the wf-shell configuration.
- Loading branch information
Showing
9 changed files
with
280 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,200 @@ | ||
{ lib, pkgs, config, ... }: { | ||
meta.maintainers = [ lib.maintainers._0x5a4 ]; | ||
|
||
options.wayland.windowManager.wayfire = let | ||
types = lib.types; | ||
|
||
configIniType = with types; | ||
let | ||
primitiveType = either str (either bool number); | ||
sectionType = attrsOf primitiveType; | ||
in attrsOf sectionType; | ||
in { | ||
enable = | ||
lib.mkEnableOption "Wayfire, a wayland compositor based on wlroots"; | ||
|
||
package = lib.mkPackageOption pkgs "wayfire" { | ||
nullable = true; | ||
extraDescription = '' | ||
Set to `null` to not add any wayfire package to your path. | ||
This should be done if you want to use the NixOS wayfire module to install wayfire. | ||
''; | ||
}; | ||
|
||
plugins = lib.mkOption { | ||
type = lib.types.listOf lib.types.package; | ||
default = with pkgs.wayfirePlugins; [ wf-shell ]; | ||
defaultText = | ||
lib.literalExpression "with pkgs.wayfirePlugins; [ wf-shell ]"; | ||
example = lib.literalExpression '' | ||
with pkgs.wayfirePlugins; [ | ||
wcm | ||
wf-shell | ||
wayfire-plugins-extra | ||
]; | ||
''; | ||
description = '' | ||
Additional plugins to use with wayfire | ||
''; | ||
}; | ||
|
||
xwayland.enable = lib.mkEnableOption "XWayland" // { default = true; }; | ||
|
||
settings = lib.mkOption { | ||
type = types.submodule { | ||
freeformType = configIniType; | ||
|
||
options.core.plugins = lib.mkOption { | ||
type = types.separatedString " "; | ||
description = "Load the specified plugins"; | ||
}; | ||
}; | ||
default = { }; | ||
description = '' | ||
Wayfire configuration written in Nix. | ||
See <https://github.com/WayfireWM/wayfire/wiki/Configuration> | ||
''; | ||
example = lib.literalExpression '' | ||
{ | ||
core.plugins = "command expo cube"; | ||
command = { | ||
binding_terminal = "alacritty"; | ||
command_terminal = "alacritty"; | ||
}; | ||
} | ||
''; | ||
}; | ||
|
||
wf-shell = { | ||
enable = lib.mkEnableOption "Manage wf-shell Configuration"; | ||
|
||
package = lib.mkPackageOption pkgs.wayfirePlugins "wf-shell" { }; | ||
|
||
settings = lib.mkOption { | ||
type = configIniType; | ||
default = { }; | ||
description = '' | ||
Wf-shell configuration written in Nix. | ||
See <https://github.com/WayfireWM/wf-shell/blob/master/wf-shell.ini.example> | ||
''; | ||
example = lib.literalExpression '' | ||
{ | ||
panel = { | ||
widgets_left = "menu spacing4 launchers window-list"; | ||
autohide = true; | ||
}; | ||
} | ||
''; | ||
}; | ||
}; | ||
|
||
systemd = { | ||
enable = lib.mkEnableOption null // { | ||
default = true; | ||
description = '' | ||
Whether to enable {file}`wayfire-session.target` on | ||
wayfire startup. This links to {file}`graphical-session.target`}. | ||
Some important environment variables will be imported to systemd | ||
and D-Bus user environment before reaching the target, including | ||
- `DISPLAY` | ||
- `WAYLAND_DISPLAY` | ||
- `XDG_CURRENT_DESKTOP` | ||
- `NIXOS_OZONE_WL` | ||
- `XCURSOR_THEME` | ||
- `XCURSOR_SIZE` | ||
''; | ||
}; | ||
|
||
variables = lib.mkOption { | ||
type = types.listOf types.str; | ||
default = [ | ||
"DISPLAY" | ||
"WAYLAND_DISPLAY" | ||
"XDG_CURRENT_DESKTOP" | ||
"NIXOS_OZONE_WL" | ||
"XCURSOR_THEME" | ||
"XCURSOR_SIZE" | ||
]; | ||
example = [ "-all" ]; | ||
description = '' | ||
Environment variables to be imported in the systemd & D-Bus user | ||
environment. | ||
''; | ||
}; | ||
|
||
extraCommands = lib.mkOption { | ||
type = types.listOf types.str; | ||
default = [ | ||
"systemctl --user stop wayfire-session.target" | ||
"systemctl --user start wayfire-session.target" | ||
]; | ||
description = "Extra commands to be run after D-Bus activation."; | ||
}; | ||
}; | ||
}; | ||
|
||
config = let | ||
cfg = config.wayland.windowManager.wayfire; | ||
|
||
variables = builtins.concatStringsSep " " cfg.systemd.variables; | ||
extraCommands = builtins.concatStringsSep " " | ||
(map (f: "&& ${f}") cfg.systemd.extraCommands); | ||
systemdActivation = | ||
"${pkgs.dbus}/bin/dbus-update-activation-environment --systemd ${variables} ${extraCommands}"; | ||
|
||
finalPackage = pkgs.wayfire-with-plugins.override { | ||
wayfire = cfg.package; | ||
plugins = cfg.plugins; | ||
}; | ||
in lib.mkIf cfg.enable { | ||
assertions = [ | ||
(lib.hm.assertions.assertPlatform "wayland.windowManager.wayfire" pkgs | ||
lib.platforms.linux) | ||
]; | ||
|
||
home.packages = lib.mkIf (cfg.package != null) (lib.concatLists [ | ||
(lib.singleton finalPackage) | ||
(lib.optional (cfg.xwayland.enable) pkgs.xwayland) | ||
]); | ||
|
||
wayland.windowManager.wayfire = { | ||
settings = { | ||
autostart = lib.mkIf cfg.systemd.enable { inherit systemdActivation; }; | ||
core = { | ||
plugins = lib.concatStringsSep " " (lib.concatLists [ | ||
(lib.optional (cfg.systemd.enable) "autostart") | ||
(lib.optional (cfg.wf-shell.enable) "wayfire-shell") | ||
]); | ||
xwayland = cfg.xwayland.enable; | ||
}; | ||
}; | ||
|
||
plugins = lib.optional cfg.wf-shell.enable cfg.wf-shell.package; | ||
}; | ||
|
||
xdg.configFile."wayfire.ini".text = lib.generators.toINI { } cfg.settings; | ||
|
||
xdg.configFile."wf-shell.ini" = lib.mkIf cfg.wf-shell.enable { | ||
text = lib.generators.toINI { } cfg.wf-shell.settings; | ||
}; | ||
|
||
systemd.user.targets.wayfire-session = lib.mkIf cfg.systemd.enable { | ||
Unit = { | ||
Description = "wayfire compositor session"; | ||
Documentation = [ "man:systemd.special(7)" ]; | ||
BindsTo = [ "graphical-session.target" ]; | ||
Wants = [ "graphical-session-pre.target" ]; | ||
After = [ "graphical-session-pre.target" ]; | ||
}; | ||
}; | ||
|
||
systemd.user.targets.tray = { | ||
Unit = { | ||
Description = "Home Manager System Tray"; | ||
Requires = [ "graphical-session-pre.target" ]; | ||
}; | ||
}; | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 10 additions & 0 deletions
10
tests/modules/services/window-managers/wayfire/configuration.ini
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
[autostart] | ||
systemdActivation=/nix/store/00000000000000000000000000000000-dbus/bin/dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP NIXOS_OZONE_WL XCURSOR_THEME XCURSOR_SIZE && systemctl --user stop wayfire-session.target && systemctl --user start wayfire-session.target | ||
|
||
[command] | ||
binding_terminal=alacritty | ||
command_terminal=alacritty | ||
|
||
[core] | ||
plugins=command expo cube autostart | ||
xwayland=true |
22 changes: 22 additions & 0 deletions
22
tests/modules/services/window-managers/wayfire/configuration.nix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
{ ... }: { | ||
wayland.windowManager.wayfire = { | ||
enable = true; | ||
package = null; | ||
settings = { | ||
core.plugins = "command expo cube"; | ||
command = { | ||
binding_terminal = "alacritty"; | ||
command_terminal = "alacritty"; | ||
}; | ||
}; | ||
}; | ||
|
||
nmt.script = '' | ||
wayfireConfig=home-files/.config/wayfire.ini | ||
assertFileExists "$wayfireConfig" | ||
normalizedConfig=$(normalizeStorePaths "$wayfireConfig") | ||
assertFileContent "$normalizedConfig" "${./configuration.ini}" | ||
''; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
wayfire-configuration = ./configuration.nix; | ||
wayfire-wf-shell = ./wf-shell.nix; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
[panel] | ||
autohide=true | ||
widgets_left=menu spacing4 launchers window-list |
25 changes: 25 additions & 0 deletions
25
tests/modules/services/window-managers/wayfire/wf-shell.nix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
{ pkgs, ... }: { | ||
wayland.windowManager.wayfire = { | ||
enable = true; | ||
package = null; | ||
wf-shell = { | ||
enable = true; | ||
package = pkgs.mkStubPackage { }; | ||
settings = { | ||
panel = { | ||
widgets_left = "menu spacing4 launchers window-list"; | ||
autohide = true; | ||
}; | ||
}; | ||
}; | ||
}; | ||
|
||
nmt.script = '' | ||
wfShellConfig=home-files/.config/wf-shell.ini | ||
assertFileExists "$wfShellConfig" | ||
normalizedConfig=$(normalizeStorePaths "$wfShellConfig") | ||
assertFileContent "$normalizedConfig" "${./wf-shell.ini}" | ||
''; | ||
} |