311 lines
14 KiB
Plaintext
311 lines
14 KiB
Plaintext
# i3 config file (v4), written by the mesh (module i3, novox/hq ADR 0208). Replaced at every push;
|
|
# change the module instead. i3's user guide is the reference.
|
|
#
|
|
# Other modules add to this configuration as contributions to node-display-session (novox/hq ADR
|
|
# 0212): the mesh places their lines near the end, each module's under a line naming it, where every
|
|
# variable set here ($mod, $ws1 … $ws10) is in scope. A file of yours in ~/.config/i3/config.d/ is read
|
|
# after them, by the include at the very end, and is yours.
|
|
#
|
|
# The reload watcher of this module reloads i3 when this file or a drop-in changes, after checking the
|
|
# result with i3 -C; it never reloads into a configuration with errors.
|
|
|
|
# Font for window titles, and the bars below: the mesh's monospace face (research 026/04).
|
|
font pango:JetBrainsMono Nerd Font 11
|
|
|
|
# XDG autostart entries (~/.config/autostart, /etc/xdg/autostart), started once at login.
|
|
exec --no-startup-id dex --autostart --environment i3
|
|
|
|
#########################################
|
|
###### Keys ####
|
|
#########################################
|
|
# To find key symbols: xmodmap -pke / xmodmap -pm
|
|
set $mod Mod4
|
|
set $alt Mod1
|
|
set $shift Shift
|
|
set $ctrl Control
|
|
|
|
# use these keys for focus, movement, and resize directions when reaching for
|
|
# the arrows is not convenient
|
|
set $left h
|
|
set $down j
|
|
set $up k
|
|
set $right l
|
|
|
|
# use Mouse+$mod to drag floating windows to their wanted position
|
|
floating_modifier $mod
|
|
|
|
# move tiling windows via drag & drop by left-clicking into the title bar,
|
|
# or left-clicking anywhere into the window while holding the floating modifier.
|
|
tiling_drag modifier titlebar
|
|
|
|
# start a terminal: whichever the terminal module names in $TERMINAL
|
|
bindsym $mod+Return exec i3-sensible-terminal
|
|
|
|
# kill focused window
|
|
bindsym $mod+$shift+q kill
|
|
|
|
# change focus
|
|
bindsym $mod+$left focus left
|
|
bindsym $mod+$down focus down
|
|
bindsym $mod+$up focus up
|
|
bindsym $mod+$right focus right
|
|
|
|
bindsym $mod+Left focus left
|
|
bindsym $mod+Down focus down
|
|
bindsym $mod+Up focus up
|
|
bindsym $mod+Right focus right
|
|
|
|
# move focused window
|
|
bindsym $mod+$shift+$left move left
|
|
bindsym $mod+$shift+$down move down
|
|
bindsym $mod+$shift+$up move up
|
|
bindsym $mod+$shift+$right move right
|
|
|
|
bindsym $mod+$shift+Left move left
|
|
bindsym $mod+$shift+Down move down
|
|
bindsym $mod+$shift+Up move up
|
|
bindsym $mod+$shift+Right move right
|
|
|
|
# split in horizontal orientation
|
|
bindsym $mod+c split h
|
|
# split in vertical orientation
|
|
bindsym $mod+v split v
|
|
|
|
# enter fullscreen mode for the focused container
|
|
bindsym $mod+f fullscreen toggle
|
|
|
|
# change container layout (stacked, tabbed, toggle split)
|
|
bindsym $mod+s layout stacking
|
|
bindsym $mod+w layout tabbed
|
|
bindsym $mod+e layout toggle split
|
|
|
|
# toggle tiling / floating
|
|
bindsym $mod+$shift+space floating toggle
|
|
|
|
# change focus between tiling / floating windows
|
|
bindsym $mod+space focus mode_toggle
|
|
|
|
# focus the parent container
|
|
bindsym $mod+a focus parent
|
|
|
|
# alt-tab functionality
|
|
bindsym $mod+Tab workspace back_and_forth
|
|
|
|
#########################################
|
|
###### Workspace mgmt ####
|
|
#########################################
|
|
set $ws1 "1"
|
|
set $ws2 "2"
|
|
set $ws3 "3"
|
|
set $ws4 "4"
|
|
set $ws5 "5"
|
|
set $ws6 "6"
|
|
set $ws7 "7"
|
|
set $ws8 "8"
|
|
set $ws9 "9"
|
|
set $ws10 "10"
|
|
|
|
bindsym $mod+1 workspace number $ws1
|
|
bindsym $mod+2 workspace number $ws2
|
|
bindsym $mod+3 workspace number $ws3
|
|
bindsym $mod+4 workspace number $ws4
|
|
bindsym $mod+5 workspace number $ws5
|
|
bindsym $mod+6 workspace number $ws6
|
|
bindsym $mod+7 workspace number $ws7
|
|
bindsym $mod+8 workspace number $ws8
|
|
bindsym $mod+9 workspace number $ws9
|
|
bindsym $mod+0 workspace number $ws10
|
|
|
|
bindsym $mod+$shift+1 move container to workspace number $ws1
|
|
bindsym $mod+$shift+2 move container to workspace number $ws2
|
|
bindsym $mod+$shift+3 move container to workspace number $ws3
|
|
bindsym $mod+$shift+4 move container to workspace number $ws4
|
|
bindsym $mod+$shift+5 move container to workspace number $ws5
|
|
bindsym $mod+$shift+6 move container to workspace number $ws6
|
|
bindsym $mod+$shift+7 move container to workspace number $ws7
|
|
bindsym $mod+$shift+8 move container to workspace number $ws8
|
|
bindsym $mod+$shift+9 move container to workspace number $ws9
|
|
bindsym $mod+$shift+0 move container to workspace number $ws10
|
|
|
|
#########################################
|
|
###### Window mgmt ####
|
|
#########################################
|
|
set $resize_px 10 px
|
|
bindsym $mod+$ctrl+$left resize shrink width $resize_px
|
|
bindsym $mod+$ctrl+$down resize grow height $resize_px
|
|
bindsym $mod+$ctrl+$up resize shrink height $resize_px
|
|
bindsym $mod+$ctrl+$right resize grow width $resize_px
|
|
|
|
#########################################
|
|
###### Session mgmt ####
|
|
#########################################
|
|
bindsym $mod+$shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
|
|
|
|
# Lock the screen through logind, so the one locker the lock screen's module runs handles it (and
|
|
# suspend and lid close too).
|
|
bindsym $mod+Delete exec --no-startup-id loginctl lock-session
|
|
|
|
# reload the configuration file
|
|
bindsym $mod+$shift+c reload
|
|
|
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
|
bindsym $mod+$shift+r restart
|
|
|
|
#########################################
|
|
###### Borders ####
|
|
#########################################
|
|
default_border pixel 1
|
|
smart_borders on
|
|
|
|
#########################################
|
|
###### Gaps ####
|
|
#########################################
|
|
gaps inner 0
|
|
gaps outer 0
|
|
|
|
# Only the accent-bearing slots are themed; background and text keep i3's own defaults. Borders are
|
|
# `pixel`, so no title bar shows: the colour says which window has focus.
|
|
# border background text indicator child_border
|
|
client.focused #de5200 #de5200 #1E2127 #de5200 #de5200
|
|
client.urgent #900000 #900000 #ffffff #900000 #900000
|
|
|
|
#########################################
|
|
###### Until their modules carry them ##
|
|
#########################################
|
|
# Each line below belongs to something other than i3, named on its line. When that module is written
|
|
# it contributes the line to node-display-session, and the line goes from here in the same change.
|
|
# The launcher, the clipboard, the wallpaper, the bars, a machine model's keys and the peripherals'
|
|
# tray already contribute theirs (rofi, clipmenu, feh, i3status-rust, asus-zephyrus-g14,
|
|
# polychromatic).
|
|
|
|
# the operator's scripts: volume, games volume, sessions, screenshot
|
|
bindsym XF86AudioRaiseVolume exec --no-startup-id volume-notify up
|
|
bindsym XF86AudioLowerVolume exec --no-startup-id volume-notify down
|
|
bindsym XF86AudioMute exec --no-startup-id volume-notify mute
|
|
bindsym XF86AudioMicMute exec --no-startup-id mic-notify
|
|
bindsym $ctrl+XF86AudioRaiseVolume exec --no-startup-id set-games-volume 5
|
|
bindsym $ctrl+XF86AudioLowerVolume exec --no-startup-id set-games-volume -5
|
|
bindsym $mod+$shift+Return exec --no-startup-id ~/scripts/i3-sessions/launcher.sh
|
|
bindsym --release $ctrl+$shift+x exec --no-startup-id $XDG_CONFIG_HOME/i3/scripts/screenshot.sh
|
|
|
|
#########################################
|
|
###### Other modules' lines ####
|
|
#########################################
|
|
# Placed by the mesh from every other module's contribution (novox/hq ADR 0212): the launcher, the
|
|
# clipboard, the wallpaper, the bars, a machine model's keys, the peripherals' tray. Each module's
|
|
# under a line naming it.
|
|
# asus-zephyrus-g14
|
|
# The laptop's own lines in i3 (module asus-zephyrus-g14, novox/hq ADR 0208, ADR 0210). Owned by the
|
|
# mesh: replaced at every push. Once the controller places contributions to node-display-session
|
|
# (ADR 0210), these become the module's contribution instead of a file in i3's directory.
|
|
#
|
|
# The keys the firmware turns into ordinary key presses. The vendor keys that reach no X client are
|
|
# triggerhappy's (/etc/triggerhappy/triggers.d/asus-g14.conf): M4 and Fn+F4/F5 for media, Fn+F7/F8 for
|
|
# the panel, Fn+F10 for the touchpad. The keyboard backlight (Fn+F2/F3) is the firmware's and asusd's.
|
|
|
|
# Fn+F6, the screenshot key: the firmware sends Super+Shift+S. Released before it runs, because the
|
|
# screenshot grabs the pointer to select a region, which fails while the key is still held.
|
|
bindsym --release $mod+Shift+s exec --no-startup-id $XDG_CONFIG_HOME/i3/scripts/screenshot.sh
|
|
|
|
# Fn+F9, the display key: the firmware sends Super+P. Odd workspaces to the panel, even ones to the
|
|
# external output.
|
|
bindsym $mod+p exec --no-startup-id @ASUS_LIB@/bin/zephyrus-display order
|
|
|
|
# The keyboard backlight's level, shown when it changes.
|
|
exec --no-startup-id @ASUS_LIB@/bin/zephyrus-kbd-notify
|
|
# The laptop's own lines in i3 (module asus-zephyrus-g14, novox/hq ADR 0208, ADR 0210). Owned by the
|
|
# mesh: replaced at every push. Once the controller places contributions to node-display-session
|
|
# (ADR 0210), these become the module's contribution instead of a file in i3's directory.
|
|
#
|
|
# The model's panel and touchpad.
|
|
|
|
# The internal panel is the primary output, where the bars' tray goes. Which monitors are on and where
|
|
# is the display server's (autorandr, run at every session start).
|
|
exec --no-startup-id @ASUS_LIB@/bin/zephyrus-display primary
|
|
|
|
# The touchpad's settings again, by hand. X applies them itself whenever the device appears.
|
|
bindsym $mod+Shift+x exec --no-startup-id @ASUS_LIB@/bin/zephyrus-touchpad reset
|
|
# clipmenu
|
|
# The clipboard's history key (module clipmenu, novox/hq ADR 0208). Owned by the mesh: replaced at
|
|
# every push. clipmenu shows the history through `dmenu`, the node's dmenu-compatible command, which
|
|
# the holder of node-launcher answers (rofi on the workstations); the chosen entry is put back on the
|
|
# clipboard.
|
|
bindsym $mod+period exec --no-startup-id clipmenu -p Clipboard
|
|
# dunst
|
|
# The notifications' key (module dunst, novox/hq ADR 0208). Owned by the mesh: replaced at every push.
|
|
# Super+N opens the menu (rofi) of the actions and links of every notification on screen, so one is
|
|
# chosen from the keyboard as a tap chooses it on the notification.
|
|
bindsym $mod+n exec --no-startup-id dunstctl context
|
|
# feh
|
|
# The wallpaper's key (module feh, novox/hq ADR 0208). Owned by the mesh: replaced at every push.
|
|
# It puts the declared wallpaper back, after a monitor change or a wallpaper set for the session.
|
|
bindsym $mod+Shift+b exec --no-startup-id ~/.fehbg
|
|
# i3status-rust
|
|
# The bars (module i3status-rust, novox/hq ADR 0208). Owned by the mesh: replaced at every push.
|
|
# i3 reads this file through its configuration's `include ~/.config/i3/config.d/*.conf`. The bottom
|
|
# bar shows the machine; the top bar the focused window and the tray, on the primary output. The
|
|
# face is the monospace one every desktop module names.
|
|
bar {
|
|
font pango:JetBrainsMono Nerd Font 11
|
|
position bottom
|
|
status_command i3status-rs ~/.config/i3status-rust/bottom-bar.toml
|
|
tray_output none
|
|
colors {
|
|
separator #ffffff
|
|
background #000000
|
|
statusline #ffffff
|
|
# The text on an accent-coloured button is dark: light text on the accent was barely
|
|
# legible.
|
|
focused_workspace #de5200 #de5200 #000000
|
|
active_workspace #de5200 #de5200 #000000
|
|
inactive_workspace #000000 #000000 #ffffff
|
|
urgent_workspace #2f343a #900000 #ffffff
|
|
}
|
|
}
|
|
|
|
bar {
|
|
font pango:JetBrainsMono Nerd Font 11
|
|
position top
|
|
status_command i3status-rs ~/.config/i3status-rust/top-bar.toml
|
|
workspace_buttons no
|
|
tray_output primary
|
|
colors {
|
|
separator #ffffff
|
|
background #000000
|
|
statusline #ffffff
|
|
}
|
|
}
|
|
# polychromatic
|
|
# The Razer peripherals' tray (module polychromatic, novox/hq ADR 0208, ADR 0212). Owned by the mesh:
|
|
# replaced at every push. This line is the tray's one start, at the session's start (exec, not
|
|
# exec_always, so a reload starts nothing). The package's own login helper starts it too while the
|
|
# application's setting "Start the tray applet when I log on" is ticked; polychromatic_check names
|
|
# that as a second start.
|
|
exec --no-startup-id polychromatic-tray-applet
|
|
# rofi
|
|
# The launcher's key bindings (module rofi, novox/hq ADR 0208). Owned by the mesh: replaced at every
|
|
# push. i3 reads this file through its configuration's `include ~/.config/i3/config.d/*.conf`, after
|
|
# the variables it sets, so $mod is i3's.
|
|
bindsym $mod+d exec --no-startup-id ~/.local/bin/rofi-launch drun
|
|
bindsym $mod+t exec --no-startup-id ~/.local/bin/rofi-launch run
|
|
bindsym $mod+Shift+t exec --no-startup-id ~/.local/bin/rofi-launch sudo
|
|
bindsym $mod+Shift+w exec --no-startup-id ~/.local/bin/rofi-launch window
|
|
bindsym $mod+Escape exec --no-startup-id ~/.local/bin/rofi-powermenu
|
|
# slack
|
|
# Slack (module slack, novox/hq ADR 0208, ADR 0212). Owned by the mesh: replaced at every push.
|
|
# Its one start: at login, to the tray (-s), with the arguments of the package's own desktop entry.
|
|
# No XDG autostart entry starts it as well; slack_check names one if it appears.
|
|
exec --no-startup-id /usr/bin/slack --gtk-version=3 -s
|
|
# The chat window. Slack owns four X windows, and the only one i3 manages has the class "slack" in
|
|
# lower case; the three of class "Slack" (the packaged entry's StartupWMClass) are its unmanaged
|
|
# helpers and its tray icon, so a rule on class="Slack" matches nothing. window_role keeps a call or
|
|
# screen-share window out of the rules. $ws3 is i3's, in scope here.
|
|
for_window [class="(?i)^slack$" window_role="browser-window"] move to workspace $ws3
|
|
for_window [class="(?i)^slack$" window_role="browser-window"] floating disable
|
|
for_window [class="(?i)^slack$" window_role="browser-window"] border pixel 2
|
|
|
|
#########################################
|
|
###### Your own files ####
|
|
#########################################
|
|
include ~/.config/i3/config.d/*.conf
|