nixconf

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

niri.nix (10088B)


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