{ pkgs, config, lib, ... }: { programs.niri = { enable = true; package = pkgs.niri; # follows nixpkgs version because i am lazy, probably more stable to use the flake one, TODO settings = { prefer-no-csd = true; # no client-side-decorations hotkey-overlay = { skip-at-startup = true; }; input = { mod-key = "SUPER"; focus-follows-mouse = { enable = true; max-scroll-amount = "95%"; }; warp-mouse-to-focus.enable = true; mouse.natural-scroll = false; }; outputs = { "eDP-2" = { focus-at-startup = true; #name = "laptop_monitor"; position = { x = 0; y = 0; }; }; "Lenovo Group Limited LEN G24-10 U5B4ZAM2" = { #name = "right_monitor"; position = { x = 960; y = -1080; }; }; "Lenovo Group Limited LEN G24-10 U5B4KL78" = { #name = "left_monitor"; position = { x = -960; y = -1080; }; }; }; workspaces = { "main".open-on-output = "eDP-2"; "comms".open-on-output = "Lenovo Group Limited LEN G24-10 U5B4KL78"; "bg_noise".open-on-output = "Lenovo Group Limited LEN G24-10 U5B4ZAM2"; }; layout = { gaps = 5; struts = let r = 5; in { left = r; right = r; bottom = r; top = r; }; preset-column-widths = [ { proportion = 1. / 2.; } { proportion = 1. / 1.; } ]; }; binds = with config.lib.niri.actions; { # keybinds for spawning apps "Mod+1".action = spawn "kitty"; "Mod+F".action = spawn "librewolf"; "Mod+D".action = spawn "vesktop"; "Mod+Space".action = spawn "fuzzel"; "Mod+Alt+L".action = spawn "hyprlock"; "Print".action = screenshot; "Mod+2".action = show-hotkey-overlay; # window controls #"Mod".action = toggle-overview; # i really want this but i dont know how to make it work TODO "Mod+F11".action = fullscreen-window; "Mod+x".action = close-window; "Mod+Tab".action = toggle-window-floating; "Mod+h".action = focus-column-or-monitor-left; "Mod+j".action = focus-window-or-monitor-down; "Mod+k".action = focus-window-or-monitor-up; "Mod+l".action = focus-column-or-monitor-right; "Mod+Shift+h".action = move-column-left-or-to-monitor-left; "Mod+Shift+j".action = move-window-down; "Mod+Shift+k".action = move-window-up; "Mod+Shift+l".action = move-column-right-or-to-monitor-right; "Mod+Comma".action = consume-or-expel-window-left; "Mod+Period".action = consume-or-expel-window-right; "Mod+Return".action = switch-preset-column-width; "Mod+WheelScrollUp".action = focus-workspace-up; "Mod+WheelScrollDown".action = focus-workspace-down; "Mod+Up".action = focus-workspace-up; "Mod+Down".action = focus-workspace-down; # not sure how to do the "send window to workspace" keybinds from the hyprland config }; window-rules = [ { geometry-corner-radius = let r = 10.0; in { top-left = r; top-right = r; bottom-left = r; bottom-right = r; }; clip-to-geometry = true; } { excludes = [ { is-active = true; } ]; opacity = 0.8; draw-border-with-background = false; } ]; xwayland-satellite = { enable = true; path = lib.getExe pkgs.xwayland-satellite; }; }; }; # home.packages = with pkgs; [ # xwayland-satellite-unstable # ]; }