diff options
Diffstat (limited to '')
-rw-r--r-- | modules/workstation/graphics/i3/compton.conf (renamed from gui/i3/compton.conf) | 0 | ||||
-rw-r--r-- | modules/workstation/graphics/i3/config.nix | 166 | ||||
-rw-r--r-- | modules/workstation/graphics/i3/default.nix | 22 | ||||
-rwxr-xr-x | modules/workstation/graphics/i3/dynamic-tags/move.sh (renamed from gui/i3/dynamic-tags/move.sh) | 0 | ||||
-rwxr-xr-x | modules/workstation/graphics/i3/dynamic-tags/switch.sh (renamed from gui/i3/dynamic-tags/switch.sh) | 0 | ||||
-rw-r--r-- | modules/workstation/graphics/i3/i3status.conf (renamed from gui/i3/i3status.conf) | 0 | ||||
-rw-r--r-- | modules/workstation/graphics/i3/locker (renamed from gui/i3/locker) | 0 |
7 files changed, 188 insertions, 0 deletions
diff --git a/gui/i3/compton.conf b/modules/workstation/graphics/i3/compton.conf index a632c022593..a632c022593 100644 --- a/gui/i3/compton.conf +++ b/modules/workstation/graphics/i3/compton.conf diff --git a/modules/workstation/graphics/i3/config.nix b/modules/workstation/graphics/i3/config.nix new file mode 100644 index 00000000000..746c2a47698 --- /dev/null +++ b/modules/workstation/graphics/i3/config.nix @@ -0,0 +1,166 @@ +{ pkgs, wallpaper }: + +{ + enable = true; + package = pkgs.i3; + config = rec { + modifier = "Mod4"; + + # Use iosevka as default font + fonts = [ "iosevka-term-ss09 10" ]; + + keybindings = { + + # Start a terminal + "${modifier}+Return" = "exec kitty"; + + # Close individual windows + "${modifier}+Shift+q" = "kill"; + + # Full-screen window + "${modifier}+f" = "fullscreen"; + + # Start software on <this> or <other> workspace + "${modifier}+d" = "exec dmenu_run"; + "${modifier}+Shift+d" = "exec ~/.config/i3/dynamic-tags/move.sh"; + + # Move focus around - vim style + "${modifier}+h" = "focus left"; + "${modifier}+j" = "focus down"; + "${modifier}+k" = "focus up"; + "${modifier}+l" = "focus right"; + + # Move focus around - boring style + "${modifier}+Up" = "focus up"; + "${modifier}+Down" = "focus down"; + "${modifier}+Left" = "focus left"; + "${modifier}+Right" = "focus right"; + + # Move windows - vim style + "${modifier}+Shift+k" = "move up"; + "${modifier}+Shift+j" = "move down"; + "${modifier}+Shift+h" = "move left"; + "${modifier}+Shift+l" = "move right"; + + # Move windows - boring style + "${modifier}+Shift+Up" = "move up"; + "${modifier}+Shift+Down" = "move down"; + "${modifier}+Shift+Left" = "move left"; + "${modifier}+Shift+Right" = "move right"; + + # Move workspaces between multi-monitor setups + "${modifier}+Ctrl+Shift+Up" = "move workspace to output up"; + "${modifier}+Ctrl+Shift+Down" = "move workspace to output down"; + "${modifier}+Ctrl+Shift+Left" = " move workspace to output left"; + "${modifier}+Ctrl+Shift+Right" = "move workspace to output right"; + + # Define split behaviours + "${modifier}+2" = "split h"; + "${modifier}+1" = "split v"; + + # A very fortunate lockscreen + "${modifier}+Ctrl+l" = "exec --no-startup-id i3lock -c 333333"; + "${modifier}+Ctrl+Shift+l" = "exec --no-startup-id systemctl hibernate"; + + # Rename workspaces + "${modifier}+Ctrl+r" = "exec i3-input -F 'rename workspace to \"%s\"' -P 'New name: '"; + + # Switch to workspace (optionally dragging windows with) + "${modifier}+s" = "exec ~/.config/i3/dynamic-tags/switch.sh -fn '$dfont'"; + "${modifier}+Shift+s" = "exec ~/.config/i3/dynamic-tags/move.sh -fn '$dfont'"; + + # Some layout modifiers + "${modifier}+e" = "layout default"; + "${modifier}+w" = "layout tabbed"; + "${modifier}+q" = "layout stacked"; + + # Do I even use this?! + "${modifier}+Shift+space" = "floating toggle"; + "${modifier}+space" = "focus mode_toggle"; + + # Focus the parent containers + "${modifier}+a" = "focus parent"; + + # Audio is good actually + "XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume 0 +5%"; + "XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume 0 -5%"; + "XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute 0 toggle"; + + # Reload, restart and quit i3 + "${modifier}+Shift+c" = "reload"; + "${modifier}+Shift+r" = "restart"; + "${modifier}+Shift+e" = '' + exec i3-nagbar -t warning -m "Workspaces are sentient, you know. \ + We just have a lot of them" "i3-msg exit" + ''; + + # Switch to resize mode (defined below) + "${modifier}+r" = "mode \"resize\""; + + # FIXME: What was this again?! + "button4" = "nop"; + "button5" = "nop"; + }; + + modes = { + + # Explicitly handle the resize mode + resize = { + "h" = "resize shrink width 5 px or 5 ppt"; + "j" = "resize grow height 5 px or 5 ppt"; + "k" = "resize shrink height 5 px or 5 ppt"; + "l" = "resize grow width 5 px or 5 ppt"; + + # same bindings, but for the arrow keys + "Left" = "resize shrink width 5 px or 5 ppt"; + "Down" = "resize grow height 5 px or 5 ppt"; + "Up" = "resize shrink height 5 px or 5 ppt"; + "Right" = "resize grow width 5 px or 5 ppt"; + + # back to normal: Enter or Escape or $mod+r + "Return" = "mode \"default\""; + "Escape" = "mode \"default\""; + "${modifier}+r" = "mode \"default\""; + } ; + }; + + # The `bars` module does weird stuff so we init it ourselves + bars = []; + }; + + extraConfig = with pkgs; '' + # Compton + exec_always --no-startup-id "pkill compton; ${compton}/bin/compton \ + --config ~/.config/i3/compton.conf" + + # Make CAPSLOCK into ESC because it's 2018 + # + # Okay actually this is slightly more complicated than that. Actually I'm + # binding CAPSLOCK to HYPER, so that I can use it as a modifier in emacs, + # but then using xcape(1) to also make short CAPSLOCK presses into ESCAPE. + + exec_always --no-startup-id "${xorg.xmodmap}/bin/setxkbmap \ + -layout us -variant altgr-intl -option caps:hyper" + exec ${xcape}/bin/xcape -e "#66=Escape" -t 150 + + # Always set a wallpaper + exec_always --no-startup-id ${feh}/bin/feh --bg-fill ${wallpaper} + + bar { + status_command i3status -c ~/.config/i3/i3status.conf + position bottom + bindsym button4 nop + bindsym button5 nop + colors { + background #0F0F0F + statusline #D5D5D5 + }k + } + + focus_follows_mouse no + + # Layout and design settings that should _really_ be in the module + default_border pixel 3 + client.focused #4c7899 #285577 #ffffff #F73E5F #666666 + ''; +} diff --git a/modules/workstation/graphics/i3/default.nix b/modules/workstation/graphics/i3/default.nix new file mode 100644 index 00000000000..251b04ec202 --- /dev/null +++ b/modules/workstation/graphics/i3/default.nix @@ -0,0 +1,22 @@ +{ pkgs, ... }: + +let + wallpaper = "~/pictures/wallpaper/my-cyber-city-4k-28-2560x1440.jpg"; +in +{ + xsession.windowManager.i3 = import ./config.nix { inherit pkgs wallpaper; }; + + xdg.configFile."i3/dynamic-tags/" = { + recursive = true; + executable = true; + source = ./dynamic-tags; + }; + + xdg.configFile."i3/compton.conf" = { + source = ./compton.conf; + }; + + xdg.configFile."i3/i3status.conf" = { + source = ./i3status.conf; + }; +} diff --git a/gui/i3/dynamic-tags/move.sh b/modules/workstation/graphics/i3/dynamic-tags/move.sh index 84f39fdc3ac..84f39fdc3ac 100755 --- a/gui/i3/dynamic-tags/move.sh +++ b/modules/workstation/graphics/i3/dynamic-tags/move.sh diff --git a/gui/i3/dynamic-tags/switch.sh b/modules/workstation/graphics/i3/dynamic-tags/switch.sh index 9c50eb48083..9c50eb48083 100755 --- a/gui/i3/dynamic-tags/switch.sh +++ b/modules/workstation/graphics/i3/dynamic-tags/switch.sh diff --git a/gui/i3/i3status.conf b/modules/workstation/graphics/i3/i3status.conf index fb36d20e7a0..fb36d20e7a0 100644 --- a/gui/i3/i3status.conf +++ b/modules/workstation/graphics/i3/i3status.conf diff --git a/gui/i3/locker b/modules/workstation/graphics/i3/locker index af64e74eb6b..af64e74eb6b 100644 --- a/gui/i3/locker +++ b/modules/workstation/graphics/i3/locker |