From c7bd5289d67278ac6b82614deaef94940f89de96 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Mon, 15 May 2023 13:45:09 +0200 Subject: [PATCH 1/2] nixos/programs: factor out wayland-session common options --- nixos/modules/module-list.nix | 5 +- nixos/modules/programs/{ => wayland}/sway.nix | 62 +++++++++---------- .../modules/programs/{ => wayland}/waybar.nix | 0 .../programs/wayland/wayland-session.nix | 26 ++++++++ 4 files changed, 57 insertions(+), 36 deletions(-) rename nixos/modules/programs/{ => wayland}/sway.nix (71%) rename nixos/modules/programs/{ => wayland}/waybar.nix (100%) create mode 100644 nixos/modules/programs/wayland/wayland-session.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index ff06a72ff9d..2a34c01b999 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -241,7 +241,6 @@ ./programs/starship.nix ./programs/steam.nix ./programs/streamdeck-ui.nix - ./programs/sway.nix ./programs/sysdig.nix ./programs/system-config-printer.nix ./programs/systemtap.nix @@ -256,7 +255,8 @@ ./programs/usbtop.nix ./programs/vim.nix ./programs/wavemon.nix - ./programs/waybar.nix + ./programs/wayland/sway.nix + ./programs/wayland/waybar.nix ./programs/weylus.nix ./programs/wireshark.nix ./programs/xastir.nix @@ -1308,7 +1308,6 @@ ./services/x11/window-managers/default.nix ./services/x11/window-managers/fluxbox.nix ./services/x11/window-managers/icewm.nix - ./services/x11/window-managers/bspwm.nix ./services/x11/window-managers/katriawm.nix ./services/x11/window-managers/metacity.nix ./services/x11/window-managers/nimdow.nix diff --git a/nixos/modules/programs/sway.nix b/nixos/modules/programs/wayland/sway.nix similarity index 71% rename from nixos/modules/programs/sway.nix rename to nixos/modules/programs/wayland/sway.nix index 3b2e69bd37c..897166058c5 100644 --- a/nixos/modules/programs/sway.nix +++ b/nixos/modules/programs/wayland/sway.nix @@ -123,41 +123,37 @@ in { }; - config = mkIf cfg.enable { - assertions = [ + config = mkIf cfg.enable + (mkMerge [ { - assertion = cfg.extraSessionCommands != "" -> cfg.wrapperFeatures.base; - message = '' - The extraSessionCommands for Sway will not be run if - wrapperFeatures.base is disabled. - ''; + assertions = [ + { + assertion = cfg.extraSessionCommands != "" -> cfg.wrapperFeatures.base; + message = '' + The extraSessionCommands for Sway will not be run if + wrapperFeatures.base is disabled. + ''; + } + ]; + environment = { + systemPackages = optional (cfg.package != null) cfg.package ++ cfg.extraPackages; + # Needed for the default wallpaper: + pathsToLink = optionals (cfg.package != null) [ "/share/backgrounds/sway" ]; + etc = { + "sway/config.d/nixos.conf".source = pkgs.writeText "nixos.conf" '' + # Import the most important environment variables into the D-Bus and systemd + # user environments (e.g. required for screen sharing and Pinentry prompts): + exec dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP + ''; + } // optionalAttrs (cfg.package != null) { + "sway/config".source = mkOptionDefault "${cfg.package}/etc/sway/config"; + }; + }; + # To make a Sway session available if a display manager like SDDM is enabled: + services.xserver.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ]; } - ]; - environment = { - systemPackages = optional (cfg.package != null) cfg.package ++ cfg.extraPackages; - # Needed for the default wallpaper: - pathsToLink = optionals (cfg.package != null) [ "/share/backgrounds/sway" ]; - etc = { - "sway/config.d/nixos.conf".source = pkgs.writeText "nixos.conf" '' - # Import the most important environment variables into the D-Bus and systemd - # user environments (e.g. required for screen sharing and Pinentry prompts): - exec dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP - ''; - } // optionalAttrs (cfg.package != null) { - "sway/config".source = mkOptionDefault "${cfg.package}/etc/sway/config"; - }; - }; - security.polkit.enable = true; - security.pam.services.swaylock = {}; - hardware.opengl.enable = mkDefault true; - fonts.enableDefaultFonts = mkDefault true; - programs.dconf.enable = mkDefault true; - # To make a Sway session available if a display manager like SDDM is enabled: - services.xserver.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ]; - programs.xwayland.enable = mkDefault true; - # For screen sharing (this option only has an effect with xdg.portal.enable): - xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-wlr ]; - }; + (import ./wayland-session.nix { inherit lib; }) + ]); meta.maintainers = with lib.maintainers; [ primeos colemickens ]; } diff --git a/nixos/modules/programs/waybar.nix b/nixos/modules/programs/wayland/waybar.nix similarity index 100% rename from nixos/modules/programs/waybar.nix rename to nixos/modules/programs/wayland/waybar.nix diff --git a/nixos/modules/programs/wayland/wayland-session.nix b/nixos/modules/programs/wayland/wayland-session.nix new file mode 100644 index 00000000000..d58eb39b79a --- /dev/null +++ b/nixos/modules/programs/wayland/wayland-session.nix @@ -0,0 +1,26 @@ +{ lib, ... }: with lib; { + + security = { + polkit.enable = true; + pam.services.swaylock = {}; + }; + + hardware.opengl.enable = mkDefault true; + + fonts.enableDefaultFonts = mkDefault true; + + programs = { + dconf.enable = mkDefault true; + xwayland.enable = mkDefault true; + }; + + + xdg.portal = { + enable = mkDefault true; + + extraPortals = [ + # For screen sharing + pkgs.xdg-desktop-portal-wlr + ]; + }; +} From 8f421acbc5916f627761ccbc050bcbf39358c2e4 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Mon, 15 May 2023 13:45:23 +0200 Subject: [PATCH 2/2] nixos/river: init module --- .../manual/release-notes/rl-2311.section.md | 2 + nixos/modules/module-list.nix | 1 + nixos/modules/programs/wayland/river.nix | 59 +++++++++++++++++++ nixos/modules/programs/wayland/sway.nix | 5 +- .../programs/wayland/wayland-session.nix | 5 +- 5 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 nixos/modules/programs/wayland/river.nix diff --git a/nixos/doc/manual/release-notes/rl-2311.section.md b/nixos/doc/manual/release-notes/rl-2311.section.md index d99f4c6ce11..e20fc0ea29c 100644 --- a/nixos/doc/manual/release-notes/rl-2311.section.md +++ b/nixos/doc/manual/release-notes/rl-2311.section.md @@ -10,6 +10,8 @@ +- [river](https://github.com/riverwm/river), A dynamic tiling wayland compositor. Available as [programs.river](#opt-programs.river.enable). + ## Backward Incompatibilities {#sec-release-23.11-incompatibilities} - The latest version of `clonehero` now stores custom content in `~/.clonehero`. See the [migration instructions](https://clonehero.net/2022/11/29/v23-to-v1-migration-instructions.html). Typically, these content files would exist along side the binary, but the previous build used a wrapper script that would store them in `~/.config/unity3d/srylain Inc_/Clone Hero`. diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 2a34c01b999..e5b66619f97 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -255,6 +255,7 @@ ./programs/usbtop.nix ./programs/vim.nix ./programs/wavemon.nix + ./programs/wayland/river.nix ./programs/wayland/sway.nix ./programs/wayland/waybar.nix ./programs/weylus.nix diff --git a/nixos/modules/programs/wayland/river.nix b/nixos/modules/programs/wayland/river.nix new file mode 100644 index 00000000000..20a786ba3c6 --- /dev/null +++ b/nixos/modules/programs/wayland/river.nix @@ -0,0 +1,59 @@ +{ + config, + pkgs, + lib, + ... +}: +with lib; let + cfg = config.programs.river; +in { + options.programs.river = { + enable = mkEnableOption (lib.mdDoc "river, a dynamic tiling Wayland compositor"); + + package = mkOption { + type = with types; nullOr package; + default = pkgs.river; + defaultText = literalExpression "pkgs.river"; + description = lib.mdDoc '' + River package to use. + Set to `null` to not add any River package to your path. + This should be done if you want to use the Home Manager River module to install River. + ''; + }; + + extraPackages = mkOption { + type = with types; listOf package; + default = with pkgs; [ + swaylock + foot + dmenu + ]; + defaultText = literalExpression '' + with pkgs; [ swaylock foot dmenu ]; + ''; + example = literalExpression '' + with pkgs; [ + termite rofi light + ] + ''; + description = lib.mdDoc '' + Extra packages to be installed system wide. See + [Common X11 apps used on i3 with Wayland alternatives](https://github.com/swaywm/sway/wiki/i3-Migration-Guide#common-x11-apps-used-on-i3-with-wayland-alternatives) + for a list of useful software. + ''; + }; + }; + + config = + mkIf cfg.enable (mkMerge [ + { + environment.systemPackages = optional (cfg.package != null) cfg.package ++ cfg.extraPackages; + + # To make a river session available if a display manager like SDDM is enabled: + programs.xwayland.enable = mkDefault true; + } + (import ./wayland-session.nix { inherit lib pkgs; }) + ]); + + meta.maintainers = with lib.maintainers; [ GaetanLepage ]; +} diff --git a/nixos/modules/programs/wayland/sway.nix b/nixos/modules/programs/wayland/sway.nix index 897166058c5..c699c21bd10 100644 --- a/nixos/modules/programs/wayland/sway.nix +++ b/nixos/modules/programs/wayland/sway.nix @@ -150,9 +150,8 @@ in { }; }; # To make a Sway session available if a display manager like SDDM is enabled: - services.xserver.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ]; - } - (import ./wayland-session.nix { inherit lib; }) + services.xserver.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ]; } + (import ./wayland-session.nix { inherit lib pkgs; }) ]); meta.maintainers = with lib.maintainers; [ primeos colemickens ]; diff --git a/nixos/modules/programs/wayland/wayland-session.nix b/nixos/modules/programs/wayland/wayland-session.nix index d58eb39b79a..3cbfef4d61d 100644 --- a/nixos/modules/programs/wayland/wayland-session.nix +++ b/nixos/modules/programs/wayland/wayland-session.nix @@ -1,12 +1,10 @@ -{ lib, ... }: with lib; { - +{ lib, pkgs, ... }: with lib; { security = { polkit.enable = true; pam.services.swaylock = {}; }; hardware.opengl.enable = mkDefault true; - fonts.enableDefaultFonts = mkDefault true; programs = { @@ -14,7 +12,6 @@ xwayland.enable = mkDefault true; }; - xdg.portal = { enable = mkDefault true;