104 lines
2.6 KiB
Nix
104 lines
2.6 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
let
|
|
cfg = config.local.window-manager.river;
|
|
|
|
pow = n: exp:
|
|
if exp == 1 then n
|
|
else if exp == 0 then 1
|
|
else n * pow n (exp - 1);
|
|
|
|
tile-cmd = c: ''send-layout-cmd rivertile "${c}"'';
|
|
in
|
|
{
|
|
options.local.window-manager.river = with lib; {
|
|
enable = mkEnableOption "river window manager";
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
home.packages = with pkgs.unstable; [
|
|
wl-clipboard
|
|
dmenu-wayland
|
|
];
|
|
|
|
wayland.windowManager.river = {
|
|
enable = true;
|
|
package = pkgs.unstable.river;
|
|
systemd.enable = true;
|
|
xwayland.enable = true;
|
|
|
|
settings = {
|
|
background-color = "0x002b36";
|
|
border-color-focused = "0x93a1a1";
|
|
border-color-unfocused = "0x586e75";
|
|
|
|
default-attach-mode = "below";
|
|
focus-follows-cursor = "disabled";
|
|
hide-cursor = "when-typing enabled";
|
|
|
|
set-repeat = "35 200";
|
|
|
|
map.normal = lib.mkMerge (lib.flatten [
|
|
{
|
|
"Alt+Shift Return" = "spawn foot";
|
|
"Alt+Shift B" = "spawn librewolf";
|
|
"Alt P" = "spawn dmenu-wl_run";
|
|
|
|
"Alt Space" = "toggle-fullscreen";
|
|
"Super+Shift C" = "close";
|
|
|
|
# system
|
|
"Super L" = "spawn waylock";
|
|
"Super+Shift Q" = "exit";
|
|
}
|
|
|
|
(lib.flip lib.mapAttrsToList { K = "previous"; J = "next"; } (k: d:
|
|
{
|
|
# focus window
|
|
"Alt ${k}" = "focus-view ${d}";
|
|
# swap windows
|
|
"Alt+Shift ${k}" = "swap ${d}";
|
|
}
|
|
))
|
|
|
|
# decrease/increase the main ration
|
|
{
|
|
"Alt H" = tile-cmd "main-ratio -0.01";
|
|
"Alt L" = tile-cmd "main-ratio +0.01";
|
|
|
|
"Alt Comma" = tile-cmd "main-count +1";
|
|
"Alt Period" = tile-cmd "main-count -1";
|
|
}
|
|
|
|
(lib.flip map [ 1 2 3 4 5 6 7 8 9 ] (i:
|
|
let wid = i - 1; in
|
|
let wtag = pow 2 wid; in
|
|
{
|
|
"Alt ${toString i}" = "set-focused-tags ${toString wtag}";
|
|
# set-view-tags ${wtag}
|
|
# toggle-focused-tags ${wtag}
|
|
# toggle-view-tags ${wtag}
|
|
}
|
|
))
|
|
]);
|
|
};
|
|
|
|
extraConfig = (
|
|
let kb = config.home.keyboard; in ''
|
|
riverctl keyboard-layout \
|
|
-model ${kb.model} \
|
|
-variant ${kb.variant} \
|
|
-options ${lib.head kb.options} \
|
|
${kb.layout}
|
|
|
|
riverctl default-layout rivertile
|
|
rivertile \
|
|
-main-location top \
|
|
-view-padding 6 \
|
|
-outer-padding 6 \
|
|
&
|
|
''
|
|
);
|
|
};
|
|
};
|
|
}
|