aboutsummaryrefslogtreecommitdiffstats
path: root/modules/desktop/window-manager
diff options
context:
space:
mode:
Diffstat (limited to 'modules/desktop/window-manager')
-rw-r--r--modules/desktop/window-manager/bspwm/bspwmrc3
-rw-r--r--modules/desktop/window-manager/bspwm/default.nix38
-rw-r--r--modules/desktop/window-manager/default.nix8
-rw-r--r--modules/desktop/window-manager/sxhkd/default.nix79
-rw-r--r--modules/desktop/window-manager/sxhkd/scripts/show-keybindings.sh13
5 files changed, 141 insertions, 0 deletions
diff --git a/modules/desktop/window-manager/bspwm/bspwmrc b/modules/desktop/window-manager/bspwm/bspwmrc
new file mode 100644
index 0000000..8a3a35a
--- /dev/null
+++ b/modules/desktop/window-manager/bspwm/bspwmrc
@@ -0,0 +1,3 @@
+for monitor in $(xrandr -q | grep -w 'connected' | cut -d' ' -f1); do
+ bspc monitor "$monitor" -d '1' '2' '3' '4' '5' '6'
+done
diff --git a/modules/desktop/window-manager/bspwm/default.nix b/modules/desktop/window-manager/bspwm/default.nix
new file mode 100644
index 0000000..643d78b
--- /dev/null
+++ b/modules/desktop/window-manager/bspwm/default.nix
@@ -0,0 +1,38 @@
+{ config, lib, ... }:
+
+{
+ options = {
+ bspwm.enable = lib.mkEnableOption "Enables bspwm.";
+ };
+
+ config = lib.mkIf config.bspwm.enable {
+ xsession.windowManager.bspwm.enable = true;
+
+ xsession.windowManager.bspwm.settings = with config.scheme.withHashtag; {
+ window_gap = 5;
+ split_ratio = 0.5;
+ single_monocle = true;
+ borderless_monocle = false;
+ gapless_monocle = false;
+ focus_follows_pointer = true;
+ pointer_follows_focus = false;
+ pointer_motion_interval = 40;
+ pointer_modifier = "mod1"; # alt key
+ pointer_action1 = "resize_side";
+ pointer_action2 = "move";
+ pointer_action3 = "resize_corner";
+ normal_border_color = base02;
+ active_border_color = base02;
+ focused_border_color = base03;
+ };
+
+ xsession.windowManager.bspwm.rules = {
+ "popup" = {
+ state = "floating";
+ sticky = true;
+ };
+ };
+
+ xsession.windowManager.bspwm.extraConfig = builtins.readFile ./bspwmrc;
+ };
+}
diff --git a/modules/desktop/window-manager/default.nix b/modules/desktop/window-manager/default.nix
new file mode 100644
index 0000000..6e9b9f8
--- /dev/null
+++ b/modules/desktop/window-manager/default.nix
@@ -0,0 +1,8 @@
+{ lib, ... }:
+
+{
+ imports = [
+ ./bspwm
+ ./sxhkd
+ ];
+}
diff --git a/modules/desktop/window-manager/sxhkd/default.nix b/modules/desktop/window-manager/sxhkd/default.nix
new file mode 100644
index 0000000..29261b9
--- /dev/null
+++ b/modules/desktop/window-manager/sxhkd/default.nix
@@ -0,0 +1,79 @@
+{ pkgs, config, lib, ... }:
+
+{
+ options = {
+ sxhkd.enable = lib.mkEnableOption "Enables sxhkd.";
+ };
+
+ config = lib.mkIf config.sxhkd.enable {
+ services.sxhkd.enable = true;
+
+ services.sxhkd.keybindings =
+ let
+ modKey = "alt";
+ createKeybinding = keybinding: description: "# ${description}\n${modKey} + ${keybinding}";
+ in {
+ ${(createKeybinding
+ "s"
+ "Show keybindings.")}
+ = pkgs.writeShellScript
+ "show-keybindings.sh"
+ (builtins.readFile ./scripts/show-keybindings.sh);
+
+ ${(createKeybinding
+ "r"
+ "Launch rofi.")}
+ = "rofi -show run";
+
+ ${(createKeybinding
+ "t"
+ "Launch terminal.")}
+ = "alacritty";
+
+ ${(createKeybinding
+ "f"
+ "Launch File Explorer.")}
+ = "alacritty -t 'File Explorer' --class 'popup' -e lf";
+
+ ${(createKeybinding
+ "q"
+ "Kill current window.")}
+ = "bspc node -c";
+
+ ${(createKeybinding
+ "{1-9,0}"
+ "Switch workspace.")}
+ = "bspc desktop -f {1-9,10}";
+
+ ${(createKeybinding
+ "shift + {1-9,0}"
+ "Move window to workspace.")}
+ = "bspc node -d {1-9,10} --follow";
+
+ ${(createKeybinding
+ "{n,d,m}"
+ "Set current window mode (tiled, floating, fullscreen).")}
+ = "bspc node focused -t {tiled,floating,fullscreen}";
+
+ ${(createKeybinding
+ "{_,shift + }{h,j,k,l}"
+ "Navigate between windows.")}
+ = "bspc node --{focus,swap} {west,south,north,east}";
+
+ # the indentation for each line is required to work with the help prompt
+ ${(createKeybinding
+ "ctrl + {h,j,k,l}"
+ "Resize current window.")}
+ = ''
+ {bspc node @parent/second -z left -20 0; \
+ bspc node @parent/first -z right -20 0, \
+ bspc node @parent/second -z top 0 +20; \
+ bspc node @parent/first -z bottom 0 +20, \
+ bspc node @parent/first -z bottom 0 -20; \
+ bspc node @parent/second -z top 0 -20, \
+ bspc node @parent/first -z right +20 0; \
+ bspc node @parent/second -z left +20 0}
+ '';
+ };
+ };
+}
diff --git a/modules/desktop/window-manager/sxhkd/scripts/show-keybindings.sh b/modules/desktop/window-manager/sxhkd/scripts/show-keybindings.sh
new file mode 100644
index 0000000..db7863d
--- /dev/null
+++ b/modules/desktop/window-manager/sxhkd/scripts/show-keybindings.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+SXHKD_CONFIG="$HOME/.config/sxhkd/sxhkdrc"
+
+awk '
+ /^#/ {
+ desc = substr($0, 3)
+ }
+ /^[[:alnum:]]/ {
+ cmd = $0
+ getline
+ print cmd " : " desc
+ }
+' "$SXHKD_CONFIG" | rofi -dmenu -i -p "Keybindings"