nixos-dots

nixos dots
git clone git://popovic.xyz/nixos-dots.git
Log | Files | Refs

niri.nix (10239B)


      1 {
      2   lib,
      3   inputs,
      4   pkgs,
      5   ...
      6 }:
      7 {
      8   imports = [
      9     inputs.niri.homeModules.niri
     10   ];
     11 
     12   programs.niri = {
     13     enable = true;
     14     package = pkgs.niri-unstable;
     15     settings =
     16       let
     17         terminalCmd = lib.getExe pkgs.alacritty;
     18       in
     19       {
     20         prefer-no-csd = true;
     21         hotkey-overlay.skip-at-startup = true;
     22         overview = {
     23           backdrop-color = "#000000";
     24         };
     25 
     26         window-rules = [
     27           {
     28             matches = [ { app-id = "spotify"; } ];
     29             open-on-workspace = "r9";
     30             open-maximized = true;
     31           }
     32           {
     33             matches = [ { app-id = "Alacritty"; } ];
     34             opacity = 0.92;
     35           }
     36           {
     37             matches = [ { app-id = "firefox"; } ];
     38             open-maximized = true;
     39           }
     40           {
     41             matches = [ { app-id = "telegram"; } ];
     42             open-maximized = true;
     43           }
     44         ];
     45 
     46         workspaces = {
     47           "l1" = { };
     48           "l2" = { };
     49           "l3" = { };
     50           "l4" = { };
     51           "l5" = { };
     52           "l6" = { };
     53           "l7" = { };
     54           "l8" = { };
     55           "l9" = { };
     56           "r1" = { };
     57           "r2" = { };
     58           "r3" = { };
     59           "r4" = { };
     60           "r5" = { };
     61           "r6" = { };
     62           "r7" = { };
     63           "r8" = { };
     64           "r9" = { };
     65         };
     66         binds =
     67           let
     68             nshic = "noctalia-shell ipc call notifications";
     69           in
     70           {
     71             "Mod+Return".action.spawn = "${terminalCmd}";
     72             "Mod+C".action.spawn = "firefox";
     73             "Mod+D".action.spawn = "dmenu-niri_run";
     74             "Mod+P".action.spawn = "passmenu-otp";
     75             "Mod+B".action.spawn = "dmenu-bluetooth";
     76             "Mod+Alt+L".action.spawn = "swaylock -f -c 000000";
     77             "Mod+W".action.spawn = "spotify";
     78             "Mod+Shift+P".action.spawn = "pavucontrol";
     79             "Mod+Shift+B".action.spawn = "nautilus";
     80             "Mod+Shift+W".action.spawn-sh = "${terminalCmd} -e nmtui";
     81             "Mod+M".action.spawn-sh = "TZ=Europe/Berlin ${terminalCmd} -e neomutt";
     82             "Mod+Shift+R".action.spawn-sh = "background";
     83             "Mod+Shift+Slash".action.show-hotkey-overlay = { };
     84             "Mod+Ctrl+Space".action.spawn-sh = "${nshic} removeOldestHistory";
     85             "Ctrl+Space".action.spawn-sh = "${nshic} dismissOldest";
     86             "Mod+Space".action.spawn-sh = "${nshic} toggleHistory";
     87 
     88             "Mod+Shift+E".action.quit.skip-confirmation = true;
     89             "Mod+Shift+Q".action.close-window = { };
     90             "Mod+F".action.maximize-column = { };
     91             "Mod+G".action.fullscreen-window = { };
     92             "Mod+Shift+F".action.toggle-window-floating = { };
     93             "Mod+Shift+C".action.center-column = { };
     94 
     95             "Mod+K".action.focus-column-right = { };
     96             "Mod+J".action.focus-column-left = { };
     97             "Alt+K".action.focus-workspace-up = { };
     98             "Alt+J".action.focus-workspace-down = { };
     99 
    100             "Mod+H".action.focus-monitor-left = { };
    101             "Mod+L".action.focus-monitor-right = { };
    102 
    103             "Mod+Ctrl+WheelScrollDown".action.focus-column-left = { };
    104             "Mod+Ctrl+WheelScrollUp".action.focus-column-right = { };
    105             "Mod+WheelScrollDown".action.focus-workspace-down = { };
    106             "Mod+WheelScrollUp".action.focus-workspace-up = { };
    107 
    108             "Mod+Shift+K".action.move-column-right = { };
    109             "Mod+Shift+J".action.move-column-left = { };
    110             "Alt+Shift+K".action.move-window-to-workspace-up = { };
    111             "Alt+Shift+J".action.move-window-to-workspace-down = { };
    112 
    113             "Mod+Shift+H".action.move-window-to-monitor-left = { };
    114             "Mod+Shift+L".action.move-window-to-monitor-right = { };
    115             "Mod+Tab".action.toggle-overview = { };
    116 
    117             "Mod+1".action.focus-workspace = "l1";
    118             "Mod+2".action.focus-workspace = "l2";
    119             "Mod+3".action.focus-workspace = "l3";
    120             "Mod+4".action.focus-workspace = "l4";
    121             "Mod+5".action.focus-workspace = "l5";
    122             "Mod+6".action.focus-workspace = "l6";
    123             "Mod+7".action.focus-workspace = "l7";
    124             "Mod+8".action.focus-workspace = "l8";
    125             "Mod+9".action.focus-workspace = "l9";
    126 
    127             "Alt+1".action.focus-workspace = "r1";
    128             "Alt+2".action.focus-workspace = "r2";
    129             "Alt+3".action.focus-workspace = "r3";
    130             "Alt+4".action.focus-workspace = "r4";
    131             "Alt+5".action.focus-workspace = "r5";
    132             "Alt+6".action.focus-workspace = "r6";
    133             "Alt+7".action.focus-workspace = "r7";
    134             "Alt+8".action.focus-workspace = "r8";
    135             "Alt+9".action.focus-workspace = "r9";
    136 
    137             "Mod+Shift+1".action.move-window-to-workspace = "l1";
    138             "Mod+Shift+2".action.move-window-to-workspace = "l2";
    139             "Mod+Shift+3".action.move-window-to-workspace = "l3";
    140             "Mod+Shift+4".action.move-window-to-workspace = "l4";
    141             "Mod+Shift+5".action.move-window-to-workspace = "l5";
    142             "Mod+Shift+6".action.move-window-to-workspace = "l6";
    143             "Mod+Shift+7".action.move-window-to-workspace = "l7";
    144             "Mod+Shift+8".action.move-window-to-workspace = "l8";
    145             "Mod+Shift+9".action.move-window-to-workspace = "l9";
    146 
    147             "Alt+Shift+1".action.move-window-to-workspace = "r1";
    148             "Alt+Shift+2".action.move-window-to-workspace = "r2";
    149             "Alt+Shift+3".action.move-window-to-workspace = "r3";
    150             "Alt+Shift+4".action.move-window-to-workspace = "r4";
    151             "Alt+Shift+5".action.move-window-to-workspace = "r5";
    152             "Alt+Shift+6".action.move-window-to-workspace = "r6";
    153             "Alt+Shift+7".action.move-window-to-workspace = "r7";
    154             "Alt+Shift+8".action.move-window-to-workspace = "r8";
    155             "Alt+Shift+9".action.move-window-to-workspace = "r9";
    156 
    157             "Mod+F1".action.spawn-sh = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
    158             "Mod+F2".action.spawn-sh = "wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-";
    159             "Mod+F3".action.spawn-sh = "wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+";
    160             "Mod+F4".action.spawn-sh = "sudo xbacklight -dec 1";
    161             "Mod+F5".action.spawn-sh = "sudo xbacklight -inc 1";
    162 
    163             "Mod+Ctrl+H".action.set-column-width = "-5%";
    164             "Mod+Ctrl+L".action.set-column-width = "+5%";
    165             "Mod+Ctrl+K".action.set-window-height = "-5%";
    166             "Mod+Ctrl+J".action.set-window-height = "+5%";
    167 
    168             "Shift+Alt+C".action.spawn-sh = "${lib.getExe pkgs.grim} -l 0 - | ${pkgs.wl-clipboard}/bin/wl-copy";
    169 
    170             "Shift+Alt+V".action.spawn-sh =
    171               "${pkgs.wl-clipboard}/bin/wl-paste | ${lib.getExe pkgs.swappy} -f -";
    172 
    173             "Shift+Alt+S".action.spawn-sh = lib.getExe (
    174               pkgs.writeShellApplication {
    175                 name = "screenshot";
    176                 text = ''
    177                   ${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp} -w 0)" - \
    178                   | ${pkgs.wl-clipboard}/bin/wl-copy
    179                 '';
    180               }
    181             );
    182           };
    183         layout = {
    184           default-column-width.proportion = 0.5;
    185           border = {
    186             enable = true;
    187             width = 4;
    188             active = {
    189               color = "#A96C8A";
    190             };
    191             inactive = {
    192               color = "#263238";
    193             };
    194           };
    195           gaps = 10;
    196           focus-ring = {
    197             enable = false;
    198           };
    199         };
    200         cursor = {
    201           size = 16;
    202           theme = "Adwaita";
    203         };
    204 
    205         xwayland-satellite.path = lib.getExe pkgs.xwayland-satellite;
    206 
    207         spawn-at-startup = [
    208           { command = [ "noctalia-shell" ]; }
    209           { command = [ "background" ]; }
    210           #          { command = [ "dunst" ]; }
    211           { command = [ "check-mail" ]; }
    212           {
    213             command = [
    214               "dbus-update-activation-environment"
    215               "--systemd DISPLAY XDG_CURRENT_DESKOP=niri"
    216             ];
    217           }
    218           {
    219             command = [
    220               "systemctl"
    221               " --user"
    222               "import-environment DISPLAY XDG_CURRENT_DESKTOP=niri"
    223             ];
    224           }
    225 
    226           {
    227             command = [
    228               "sh"
    229               "niri-monitors"
    230             ];
    231           }
    232           {
    233             command = [
    234               "nextcloud"
    235               "--background"
    236             ];
    237           }
    238           {
    239             command = [
    240               "${lib.getExe pkgs.swayidle}"
    241               "-w"
    242               "timeout"
    243               "300"
    244               "swaylock -f -c 000000"
    245               "timeout"
    246               "900"
    247               "systemctl suspend-then-hibernate"
    248               "before-sleep"
    249               "swaylock -f -c 000000"
    250             ];
    251           }
    252         ];
    253 
    254         outputs = {
    255           "PNP(BNQ) BenQ GL2760 H3E04203019" = {
    256             enable = true;
    257             scale = 1;
    258             mode = {
    259               width = 1920;
    260               height = 1080;
    261             };
    262             position = {
    263               x = 0;
    264               y = 0;
    265             };
    266           };
    267           "PNP(BNQ) BenQ GL2760 SCF04101019" = {
    268             enable = true;
    269             scale = 1;
    270             mode = {
    271               width = 1920;
    272               height = 1080;
    273             };
    274             position = {
    275               x = 1920;
    276               y = 0;
    277             };
    278           };
    279           "BOE 0x0BCA Unknown" = {
    280             enable = true;
    281             mode = {
    282               width = 2256;
    283               height = 1504;
    284             };
    285             position = {
    286               x = 3840;
    287               y = 0;
    288             };
    289           };
    290         };
    291         input = {
    292           focus-follows-mouse.enable = false;
    293           keyboard = {
    294             xkb = {
    295               layout = "us,de";
    296               model = "pc104";
    297               options = "grp:shifts_toggle";
    298             };
    299             repeat-rate = 50;
    300             repeat-delay = 200;
    301           };
    302           touchpad = {
    303             natural-scroll = false;
    304             tap = true;
    305           };
    306           mouse = {
    307             accel-profile = "flat";
    308           };
    309         };
    310       };
    311   };
    312 }