mirror of
https://github.com/nix-community/home-manager.git
synced 2024-12-14 11:57:55 +00:00
wayfire: add module
This commit is contained in:
parent
d00c6f6d0a
commit
bc8870f3fa
9 changed files with 281 additions and 0 deletions
|
@ -1861,6 +1861,21 @@ in {
|
|||
Some plugins require this to be set to 'false' to function correctly.
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
time = "2024-12-07T16:33:00+00:00";
|
||||
condition = hostPlatform.isLinux;
|
||||
message = ''
|
||||
A new module is available: 'wayland.windowManager.wayfire'.
|
||||
|
||||
Wayfire is a 3D Wayland compositor, inspired by Compiz and based on
|
||||
wlroots. It aims to create a customizable, extendable and lightweight
|
||||
environment without sacrificing its appearance.
|
||||
|
||||
This Home Manager module allows you to configure both wayfire itself,
|
||||
as well as wf-shell.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -402,6 +402,7 @@ let
|
|||
./services/window-managers/i3-sway/swaynag.nix
|
||||
./services/window-managers/river.nix
|
||||
./services/window-managers/spectrwm.nix
|
||||
./services/window-managers/wayfire.nix
|
||||
./services/window-managers/xmonad.nix
|
||||
./services/wlsunset.nix
|
||||
./services/wob.nix
|
||||
|
|
200
modules/services/window-managers/wayfire.nix
Normal file
200
modules/services/window-managers/wayfire.nix
Normal file
|
@ -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" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -297,6 +297,7 @@ in import nmtSrc {
|
|||
./modules/services/window-managers/river
|
||||
./modules/services/window-managers/spectrwm
|
||||
./modules/services/window-managers/sway
|
||||
./modules/services/window-managers/wayfire
|
||||
./modules/services/wlsunset
|
||||
./modules/services/wob
|
||||
./modules/services/xsettingsd
|
||||
|
|
|
@ -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
|
|
@ -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}"
|
||||
'';
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
wayfire-configuration = ./configuration.nix;
|
||||
wayfire-wf-shell = ./wf-shell.nix;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
[panel]
|
||||
autohide=true
|
||||
widgets_left=menu spacing4 launchers window-list
|
25
tests/modules/services/window-managers/wayfire/wf-shell.nix
Normal file
25
tests/modules/services/window-managers/wayfire/wf-shell.nix
Normal file
|
@ -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}"
|
||||
'';
|
||||
}
|
Loading…
Reference in a new issue