Merge pull request #232011 from GaetanLepage/river

nixos/river: init module
This commit is contained in:
Ryan Lahfa 2023-05-27 22:30:51 +02:00 committed by GitHub
commit 77a1c48cca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 116 additions and 37 deletions

View file

@ -10,6 +10,8 @@
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. --> <!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
- [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} ## 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`. - 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`.

View file

@ -241,7 +241,6 @@
./programs/starship.nix ./programs/starship.nix
./programs/steam.nix ./programs/steam.nix
./programs/streamdeck-ui.nix ./programs/streamdeck-ui.nix
./programs/sway.nix
./programs/sysdig.nix ./programs/sysdig.nix
./programs/system-config-printer.nix ./programs/system-config-printer.nix
./programs/systemtap.nix ./programs/systemtap.nix
@ -256,7 +255,9 @@
./programs/usbtop.nix ./programs/usbtop.nix
./programs/vim.nix ./programs/vim.nix
./programs/wavemon.nix ./programs/wavemon.nix
./programs/waybar.nix ./programs/wayland/river.nix
./programs/wayland/sway.nix
./programs/wayland/waybar.nix
./programs/weylus.nix ./programs/weylus.nix
./programs/wireshark.nix ./programs/wireshark.nix
./programs/xastir.nix ./programs/xastir.nix
@ -1310,7 +1311,6 @@
./services/x11/window-managers/default.nix ./services/x11/window-managers/default.nix
./services/x11/window-managers/fluxbox.nix ./services/x11/window-managers/fluxbox.nix
./services/x11/window-managers/icewm.nix ./services/x11/window-managers/icewm.nix
./services/x11/window-managers/bspwm.nix
./services/x11/window-managers/katriawm.nix ./services/x11/window-managers/katriawm.nix
./services/x11/window-managers/metacity.nix ./services/x11/window-managers/metacity.nix
./services/x11/window-managers/nimdow.nix ./services/x11/window-managers/nimdow.nix

View file

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

View file

@ -123,41 +123,36 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable
assertions = [ (mkMerge [
{ {
assertion = cfg.extraSessionCommands != "" -> cfg.wrapperFeatures.base; assertions = [
message = '' {
The extraSessionCommands for Sway will not be run if assertion = cfg.extraSessionCommands != "" -> cfg.wrapperFeatures.base;
wrapperFeatures.base is disabled. 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: environment = {
pathsToLink = optionals (cfg.package != null) [ "/share/backgrounds/sway" ]; systemPackages = optional (cfg.package != null) cfg.package ++ cfg.extraPackages;
etc = { # Needed for the default wallpaper:
"sway/config.d/nixos.conf".source = pkgs.writeText "nixos.conf" '' pathsToLink = optionals (cfg.package != null) [ "/share/backgrounds/sway" ];
# Import the most important environment variables into the D-Bus and systemd etc = {
# user environments (e.g. required for screen sharing and Pinentry prompts): "sway/config.d/nixos.conf".source = pkgs.writeText "nixos.conf" ''
exec dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP # Import the most important environment variables into the D-Bus and systemd
''; # user environments (e.g. required for screen sharing and Pinentry prompts):
} // optionalAttrs (cfg.package != null) { exec dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP
"sway/config".source = mkOptionDefault "${cfg.package}/etc/sway/config"; '';
}; } // 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; # To make a Sway session available if a display manager like SDDM is enabled:
fonts.enableDefaultFonts = mkDefault true; services.xserver.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ]; }
programs.dconf.enable = mkDefault true; (import ./wayland-session.nix { inherit lib pkgs; })
# 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 ];
};
meta.maintainers = with lib.maintainers; [ primeos colemickens ]; meta.maintainers = with lib.maintainers; [ primeos colemickens ];
} }

View file

@ -0,0 +1,23 @@
{ lib, pkgs, ... }: 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
];
};
}