nixos-config/home-manager/modules/river/default.nix

218 lines
7.3 KiB
Nix

{
pkgs,
config,
lib,
...
}:
with lib;
let
cfg = config.eboskma.programs.river;
mod = "Mod4";
lockcmd = "${pkgs.swaylock}/bin/swaylock --ignore-empty-password --daemonize --show-failed-attempts --indicator-caps-lock --image ${cfg.wallpaper} --scaling fill";
rofiPower = pkgs.writeShellScriptBin "rofi-power" (
builtins.replaceStrings [ "{WALLPAPER}" ] [ (builtins.toString cfg.wallpaper) ] (
builtins.readFile ./powermenu.sh
)
);
menu = "${config.programs.anyrun.package}/bin/anyrun";
directions = {
left = "n";
down = "e";
up = "i";
right = "o";
};
catppuccin = {
rosewater = "0xf5e0dc";
flamingo = "0xf2cdcd";
pink = "0xf5c2e7";
mauve = "0xcba6f7";
red = "0xf38ba8";
maroon = "0xeba0ac";
peach = "0xfab387";
yellow = "0xf9e2af";
green = "0xa6e3a1";
teal = "0x94e2d5";
sky = "0x89dceb";
sapphire = "0x74c7ec";
blue = "0x89b4fa";
lavender = "0xb4befe";
text = "0xcdd6f4";
subtext1 = "0xbac2de";
subtext0 = "0xa6adc8";
overlay2 = "0x9399b2";
overlay1 = "0x7f849c";
overlay0 = "0x6c7086";
surface2 = "0x585b70";
surface1 = "0x45475a";
surface0 = "0x313244";
base = "0x1e1e2e";
mantle = "0x181825";
crust = "0x11111b";
};
bit = b: (foldl (x: _: x * 2) 1 (builtins.genList (n: n + 1) b));
tags = map (num: {
value = bit num;
index = toString (num + 1);
}) (builtins.genList (n: n) 9);
in
{
options.eboskma.programs.river = {
enable = mkEnableOption "river";
package = mkPackageOption pkgs "river" { };
wallpaper = mkOption {
description = "Desired wallpaper";
type = types.path;
};
};
config = mkIf cfg.enable {
wayland.windowManager.river = {
enable = true;
settings = {
declare-mode = [
"normal"
"locked"
"passthrough"
];
input = {
pointer-1390-268-ELECOM_TrackBall_Mouse_HUGE_TrackBall = {
accel-profile = "adaptive";
natural-scroll = "enabled";
};
};
hide-cursor = "when-typing enabled";
set-cursor-warp = "on-output-change";
keyboard-layout-file = toString ./keyboard-layout;
map = {
normal =
{
"${mod} Return" = "spawn ${pkgs.foot}/bin/foot";
"${mod}+Shift q" = "close";
"${mod} s" = "spawn ${menu}";
"${mod} ${directions.left}" = "focus-view left";
"${mod} ${directions.right}" = "focus-view right";
"${mod} ${directions.up}" = "focus-view up";
"${mod} ${directions.down}" = "focus-view down";
"${mod}+Shift ${directions.left}" = "move left";
"${mod}+Shift ${directions.right}" = "move right";
"${mod}+Shift ${directions.up}" = "move up";
"${mod}+Shift ${directions.down}" = "move down";
"${mod}+Control ${directions.left}" = "snap left";
"${mod}+Control ${directions.right}" = "snap right";
"${mod}+Control ${directions.up}" = "snap up";
"${mod}+Control ${directions.down}" = "snap down";
"${mod}+Shift Space" = "toggle-float";
"${mod} t" = "toggle-fullscreen";
# Scratchpad
"${mod}+Shift minus" = "toggle-view-tags ${toString (bit 20)}";
"${mod} minus" = "toggle-focused-tags ${toString (bit 20)}";
"${mod} Print" = "spawn '${pkgs.grim}/bin/grim'";
"${mod} l" = "spawn '${lockcmd}'";
# Enable passthrough mode
"${mod} Pause" = "enter-mode passthrough";
"None XF86AudioRaiseVolume" = "spawn '${pkgs.pamedia}/bin/pamedia up'";
"None XF86AudioLowerVolume" = "spawn '${pkgs.pamedia}/bin/pamedia down'";
"None XF86AudioMute" = "spawn '${pkgs.pamedia}/bin/pamedia mute'";
"None XF86Calculator" = "spawn ${pkgs.gnome.gnome-calculator}/bin/gnome-calculator";
"${mod} c" = mkIf config.eboskma.programs.emacs.enable "spawn '${config.eboskma.programs.emacs.package}/bin/emacsclient -c'";
"${mod} d" = "spawn '${pkgs.swaynotificationcenter}/bin/swaync-client --toggle-panel --skip-wait'";
"${mod}+Shift d" = "spawn '${pkgs.swaynotificationcenter}/bin/swaync-client --toggle-dnd --skip-wait'";
"${mod}+Shift f" = "spawn ${rofiPower}";
"${mod}+Shift+Alt ${directions.left}" = "send-layout-cmd rivertile 'main-ratio -0.05'";
"${mod}+Shift+Alt ${directions.right}" = "send-layout-cmd rivertile 'main-ratio +0.05'";
"${mod}+Shift+Control ${directions.left}" = "send-layout-cmd rivertile 'main-location left'";
"${mod}+Shift+Control ${directions.right}" = "send-layout-cmd rivertile 'main-location right'";
"${mod}+Shift+Control ${directions.up}" = "send-layout-cmd rivertile 'main-location top'";
"${mod}+Shift+Control ${directions.down}" = "send-layout-cmd rivertile 'main-location bottom'";
}
// builtins.listToAttrs (
map (tag: {
name = "${mod} ${toString tag.index}";
value = "set-focused-tags ${toString tag.value}";
}) tags
)
// builtins.listToAttrs (
map (tag: {
name = "${mod}+Control ${toString tag.index}";
value = "toggle-view-tags ${toString tag.value}";
}) tags
)
// builtins.listToAttrs (
map (tag: {
name = "${mod}+Shift ${toString tag.index}";
value = "set-view-tags ${toString tag.value}";
}) tags
);
passthrough = {
"${mod} Pause" = "enter-mode normal";
};
};
map-pointer = {
normal = {
"${mod} BTN_LEFT" = "move-view";
"${mod} BTN_RIGHT" = "resize-view";
};
};
spawn-tagmask = toString (builtins.bitXor ((bit 32) - 1) (bit 20));
spawn = [
# "'${ewwDaemon} --restart open bar-home'"
"'${pkgs.swaybg}/bin/swaybg --image ${cfg.wallpaper} --mode fill'"
];
rule-add = {
"-app-id" = {
foot = "tags ${toString (bit 1)}";
firefox = "tags ${toString (bit 0)}";
emacs = "tags ${toString (bit 2)}";
gnome-calculator = "float";
};
};
default-layout = "rivertile";
border-width = 1;
border-color-focused = catppuccin.lavender;
border-color-unfocused = catppuccin.overlay0;
border-color-urgent = catppuccin.peach;
# target title bg text indicator border
# client.focused $lavender $base $text $rosewater $lavender
# client.focused_inactive $overlay0 $base $text $rosewater $overlay0
# client.unfocused $overlay0 $base $text $rosewater $overlay0
# client.urgent $peach $base $peach $overlay0 $peach
# client.placeholder $overlay0 $base $text $overlay0 $overlay0
# client.background $base
};
extraConfig = ''
${cfg.package}/bin/rivertile -view-padding 10 -outer-padding 5 &
'';
};
};
}