summaryrefslogtreecommitdiff
path: root/modules/home-manager/personal/gui/x/i3/keybindings.nix
blob: 26af10f65fa5328e4cea3076cdf6b1d13558b0d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
{ config, lib, pkgs, ... }:

let
  # i3 pretty-printing
  exec = script: ''exec "${script}";'';
  execRofiShow = modi: exec "${rofiShow} ${modi}";
  modifier = "Mod4";
  mkTempMode = lib.mapAttrs (_: value: "mode default; ${value}");

  # scripts
  brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl";
  brightnessctlKbd = "${brightnessctl} --device dell:kbd_backlight";
  volumectl = "${pkgs.pulseaudio}/bin/pactl";
  screenshot = "${pkgs.shutter}/bin/shutter";
  rofiShow = "rofi -show";
  rofiPulseSelect = "${pkgs.rofi-pulse-select}/bin/rofi-pulse-select";
  rofiBluetooth = "${pkgs.rofi-bluetooth}/bin/rofi-bluetooth";
  rofiPowerMenu = "${pkgs.rofi-power-menu}/bin/rofi-power-menu";
in {
  xsession.windowManager.i3.config = {
    inherit modifier;

    modes = lib.mkOptionDefault {
      # launching apps
      launch = mkTempMode ({
        "e" = exec "emacsclient --create-frame";
        "b" = exec "$BROWSER";
      } // lib.optionalAttrs config.programs.rofi.enable {
        "c" = execRofiShow "calc";
        "d" = execRofiShow "drun";
        "f" = execRofiShow "filebrowser";
        "m" = execRofiShow "emoji";
        "r" = execRofiShow "run";
        "t" = execRofiShow "top";
        "w" = execRofiShow "window";
        "Escape" = "";
      });
    };

    keybindings = lib.mkOptionDefault ({
      "${modifier}+space" = "mode launch";
    } // lib.optionalAttrs config.programs.rofi.enable {
      "${modifier}+F1" = exec "${rofiPulseSelect} sink";
      "${modifier}+F4" = exec "${rofiPulseSelect} source";
      "${modifier}+Print" = exec rofiBluetooth;
      "${modifier}+Delete" =
        exec "${rofiShow} menu -modi menu:${rofiPowerMenu}";
    } // {

      # exiting
      "${modifier}+Shift+e" = exec "i3-msg exit";
      "${modifier}+l" = exec config.personal.home.lockscreen;

      # media keys
      "XF86MonBrightnessUp" = exec "${brightnessctl} set 5%+";
      "XF86MonBrightnessDown" = exec "${brightnessctl} set 5%-";
      "XF86AudioRaiseVolume" =
        exec "${volumectl} set-sink-volume @DEFAULT_SINK@ +5%";
      "XF86AudioLowerVolume" =
        exec "${volumectl} set-sink-volume @DEFAULT_SINK@ -5%";
      "XF86AudioMute" = "exec ${volumectl} set-sink-mute @DEFAULT_SINK@ toggle";
      "Shift+XF86AudioRaiseVolume" =
        exec "${volumectl} set-source-volume @DEFAULT_SOURCE@ +5%";
      "Shift+XF86AudioLowerVolume" =
        exec "${volumectl} set-source-volume @DEFAULT_SOURCE@ -5%";
      "XF86AudioMicMute" =
        exec "${volumectl} set-source-mute @DEFAULT_SOURCE@ toggle";
      "XF86KbdBrightnessUp" = ''
        exec {brightnessctlKbd} set \
                             $(( $(${brightnessctlKbd} max) - $(${brightnessctlKbd} get) ))
      '';
      "Print" = exec screenshot;
    });
  };
}