{ pkgs, config, lib, niri, ... }: { nixpkgs.overlays = [ niri.overlays.niri ]; programs.niri = { enable = true; package = pkgs.niri-unstable; # provided by the flake 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 = "0%"; }; warp-mouse-to-focus.enable = true; mouse.natural-scroll = false; touchpad = { natural-scroll = false; dwt = true; # disable when typing }; }; spawn-at-startup = [ { argv = ["kitty"]; } { argv = ["owncloud"]; } ]; 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"; name = "Main"; }; "comms" = { open-on-output = "Lenovo Group Limited LEN G24-10 U5B4KL78"; name = "Communication"; }; "bg_noise" = { open-on-output = "Lenovo Group Limited LEN G24-10 U5B4ZAM2"; name = "Media"; }; }; 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 #"Super".action = toggle-overview; # this doesnt work without release binds, the PR for which is my first bookmark in ~/bookmarks.html "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+Ctrl+j".action = focus-workspace-down; "Mod+Ctrl+k".action = focus-workspace-up; "Mod+Ctrl+Shift+j".action = move-window-to-workspace-down; "Mod+Ctrl+Shift+k".action = move-window-to-workspace-up; "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 "XF86AudioPause".action = spawn "playerctl play-pause"; }; 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; }; }; }; }