Starting a new kitty process is quite slow. With --single-instance "new invocations will instead create a new top-level window in the existing kitty instance"[^1] to allow "kitty to share a single sprite cache on the GPU"[^1], so that startup is almost instant. For this to work best, launch one hidden "daemon" instance at startup so that the kitty process is always running, even when no OS windows exists. [^1]: kitty(1) Link: https://github.com/kovidgoyal/kitty/issues/330
289 lines
8.8 KiB
Plaintext
289 lines
8.8 KiB
Plaintext
# i3 Settings ##################################################################
|
|
set $mod Mod4
|
|
|
|
# This font is widely installed, provides lots of unicode glyphs, right-to-left
|
|
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
|
font pango:DejaVu Sans Mono 10
|
|
|
|
# Use Mouse+$mod to drag floating windows to their wanted position
|
|
floating_modifier $mod
|
|
|
|
default_border pixel 1
|
|
hide_edge_borders smart
|
|
|
|
# Use --single-instance for faster startup. See the "daemon" exec below
|
|
set $TERMINAL kitty --single-instance
|
|
set $TERM_CLASS kitty
|
|
set $TERM_DIR_FLAG -d
|
|
set $TERM_TITLE_FLAG -T
|
|
set $TERM_TRANSPARENCY_FLAG -o background_opacity=
|
|
set $TERM_SCRATCHPAD_TRANS 0.45
|
|
set $TERM_CMD_FLAG
|
|
|
|
# Focus should not follow mouse
|
|
# focus_follows_mouse no
|
|
|
|
# Gaps #########################################################################
|
|
|
|
# gaps inner 10
|
|
# gaps outer 7
|
|
|
|
# Execs ########################################################################
|
|
|
|
# Starting a new kitty process is quite slow. With --single-instance (see
|
|
# $TERMINAL definition above) "new invocations will instead create a new
|
|
# top-level window in the existing kitty instance"[^1] to allow "kitty to share
|
|
# a single sprite cache on the GPU"[^1], so that startup is almost instant.
|
|
#
|
|
# For this to work best, launch one hidden "daemon" instance at startup so that
|
|
# the kitty process is always running, even when no OS windows exists.
|
|
#
|
|
# [^1]: kitty(1)
|
|
exec --no-startup-id $TERMINAL --start-as hidden --detach
|
|
|
|
# Multi monitor support
|
|
exec_always --no-startup-id ~/.config/i3/monitor-setup.sh &
|
|
|
|
# Keybindins ###################################################################
|
|
|
|
# Terminal
|
|
bindsym $mod+Return exec $TERMINAL $TERM_DIR_FLAG "$(xcwd)"
|
|
bindsym $mod+Shift+Return exec $TERMINAL
|
|
|
|
# Program launcher
|
|
bindsym $mod+d exec rofi -show drun
|
|
bindsym $mod+Shift+d exec dmenu_run
|
|
|
|
# kill focused window
|
|
bindsym $mod+Shift+q kill
|
|
|
|
# change focus
|
|
focus_wrapping no
|
|
bindsym $mod+h focus left
|
|
bindsym $mod+j focus down
|
|
bindsym $mod+k focus up
|
|
bindsym $mod+l focus right
|
|
|
|
# move focused window
|
|
bindsym $mod+Shift+h move left
|
|
bindsym $mod+Shift+j move down
|
|
bindsym $mod+Shift+k move up
|
|
bindsym $mod+Shift+l move right
|
|
|
|
# set split orientation
|
|
bindsym $mod+v split vertical
|
|
bindsym $mod+Shift+v split horizontal
|
|
|
|
# enter fullscreen mode for the focused container
|
|
bindsym $mod+f fullscreen toggle
|
|
|
|
# change container layout (stacked, tabbed, toggle split)
|
|
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
|
|
|
|
# Set workspace names
|
|
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"
|
|
|
|
# switch to workspace
|
|
bindsym $mod+1 workspace $ws1
|
|
bindsym $mod+2 workspace $ws2
|
|
bindsym $mod+3 workspace $ws3
|
|
bindsym $mod+4 workspace $ws4
|
|
bindsym $mod+5 workspace $ws5
|
|
bindsym $mod+6 workspace $ws6
|
|
bindsym $mod+7 workspace $ws7
|
|
bindsym $mod+8 workspace $ws8
|
|
bindsym $mod+9 workspace $ws9
|
|
bindsym $mod+0 workspace $ws10
|
|
|
|
# switch back to the previous workspace
|
|
workspace_auto_back_and_forth yes
|
|
bindsym $mod+Tab exec i3-msg workspace "$( \
|
|
i3-msg -t get_workspaces | \
|
|
jq -r '.[] | select(.focused).name')"
|
|
|
|
# Switch visible workspaces (e.g. multi monitor setup)
|
|
bindsym $mod+Shift+Tab exec i3-msg workspace "$( \
|
|
i3-msg -t get_workspaces | \
|
|
jq -r '.[] | select(.visible and (.focused | not)).name' | \
|
|
head -1)"
|
|
|
|
# move focused container to workspace
|
|
bindsym $mod+Shift+1 move container to workspace $ws1
|
|
bindsym $mod+Shift+2 move container to workspace $ws2
|
|
bindsym $mod+Shift+3 move container to workspace $ws3
|
|
bindsym $mod+Shift+4 move container to workspace $ws4
|
|
bindsym $mod+Shift+5 move container to workspace $ws5
|
|
bindsym $mod+Shift+6 move container to workspace $ws6
|
|
bindsym $mod+Shift+7 move container to workspace $ws7
|
|
bindsym $mod+Shift+8 move container to workspace $ws8
|
|
bindsym $mod+Shift+9 move container to workspace $ws9
|
|
bindsym $mod+Shift+0 move container to workspace $ws10
|
|
|
|
# move focused container and switch to workspace
|
|
bindsym Mod1+Shift+1 move container to workspace $ws1; workspace $ws1
|
|
bindsym Mod1+Shift+2 move container to workspace $ws2; workspace $ws2
|
|
bindsym Mod1+Shift+3 move container to workspace $ws3; workspace $ws3
|
|
bindsym Mod1+Shift+4 move container to workspace $ws4; workspace $ws4
|
|
bindsym Mod1+Shift+5 move container to workspace $ws5; workspace $ws5
|
|
bindsym Mod1+Shift+6 move container to workspace $ws6; workspace $ws6
|
|
bindsym Mod1+Shift+7 move container to workspace $ws7; workspace $ws7
|
|
bindsym Mod1+Shift+8 move container to workspace $ws8; workspace $ws8
|
|
bindsym Mod1+Shift+9 move container to workspace $ws9; workspace $ws9
|
|
bindsym Mod1+Shift+0 move container to workspace $ws10; workspace $ws10
|
|
|
|
# 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
|
|
# exit i3 (logs you out of your X session)
|
|
bindsym $mod+Shift+e exec \
|
|
i3-nagbar \
|
|
-t warning \
|
|
-m 'Do you really want to exit i3? This will end your X session.' \
|
|
-b 'Yes' \
|
|
'i3-msg exit'
|
|
|
|
# resize window (you can also use the mouse for that)
|
|
mode "resize" {
|
|
bindsym h resize grow left
|
|
bindsym j resize grow down
|
|
bindsym k resize grow up
|
|
bindsym l resize grow right
|
|
|
|
bindsym Shift+h resize shrink right
|
|
bindsym Shift+j resize shrink up
|
|
bindsym Shift+k resize shrink down
|
|
bindsym Shift+l resize shrink left
|
|
|
|
# Set window size to predefined values
|
|
# firefox anti fingerprinting
|
|
bindsym p resize set 1920 1080
|
|
# scratchpad-terminal default size
|
|
bindsym s resize set 1600 900
|
|
# "fullscreen"
|
|
bindsym f resize set 3200 1770
|
|
# "reader" - terminal with vim without line numbers fitting 80 characters
|
|
bindsym r resize set 1170
|
|
|
|
# Move window to center
|
|
bindsym c move position center
|
|
|
|
# back to normal: Enter or Escape
|
|
bindsym Return mode "default"
|
|
bindsym Escape mode "default"
|
|
bindsym $mod+r mode "default"
|
|
}
|
|
|
|
bindsym $mod+r mode "resize"
|
|
|
|
# Brightness controls (/etc/X11/xorg.conf necessary)
|
|
bindsym XF86MonBrightnessDown exec xbacklight -dec 5
|
|
bindsym XF86MonBrightnessUp exec xbacklight -inc 5
|
|
|
|
# Volume controls
|
|
# See: https://faq.i3wm.org/question/125/how-to-change-the-systems-volume.1.html
|
|
bindsym XF86AudioRaiseVolume exec --no-startup-id \
|
|
amixer -q -D pulse sset Master 5%+
|
|
bindsym XF86AudioLowerVolume exec --no-startup-id \
|
|
amixer -q -D pulse sset Master 5%-
|
|
bindsym XF86AudioMute exec --no-startup-id \
|
|
amixer -q -D pulse sset Master toggle-mute
|
|
|
|
# Lock
|
|
bindsym $mod+mod1+l exec xset s activate
|
|
# Start powermenu
|
|
bindsym $mod+p exec ~/.config/rofi/powermenu.sh &
|
|
|
|
# Notify when toggling airplane mode
|
|
bindsym XF86RFKill exec --no-startup-id ~/.config/i3/airplane-mode-notify.sh
|
|
|
|
bindsym $mod+Shift+m move scratchpad
|
|
bindsym $mod+Shift+o scratchpad show
|
|
|
|
# scratchpad-terminal
|
|
for_window [class="^$TERM_CLASS$" title="^scratchpad-terminal$"] \
|
|
move scratchpad, \
|
|
scratchpad show, \
|
|
sticky enable, \
|
|
border none, \
|
|
resize set 1600 900, \
|
|
move position center
|
|
# Toggle the scratchpad-terminal or create a new one if none exists.
|
|
bindsym $mod+comma exec \
|
|
i3-msg '[class="^$TERM_CLASS$" title="^scratchpad-terminal$"] \
|
|
scratchpad show' \
|
|
|| $TERMINAL $TERM_TRANSPARENCY_FLAG$TERM_SCRATCHPAD_TRANS \
|
|
$TERM_DIR_FLAG "$(xcwd)" \
|
|
$TERM_TITLE_FLAG scratchpad-terminal
|
|
|
|
for_window [class="^TelegramDesktop$"] \
|
|
move scratchpad, \
|
|
scratchpad show
|
|
bindsym $mod+Shift+t exec \
|
|
i3-msg '[class="^TelegramDesktop$"] scratchpad show' \
|
|
|| telegram-desktop
|
|
|
|
for_window [class="^Signal$"] \
|
|
move scratchpad, \
|
|
scratchpad show
|
|
bindsym $mod+Shift+s exec \
|
|
i3-msg '[class="^Signal$"] scratchpad show' \
|
|
|| signal-desktop
|
|
|
|
for_window [class="^Bitwarden$"] \
|
|
move scratchpad, \
|
|
scratchpad show
|
|
bindsym $mod+Shift+b exec \
|
|
i3-msg '[class="^Bitwarden$"] scratchpad show' \
|
|
|| bitwarden-desktop
|
|
|
|
for_window [class="^$TERM_CLASS$" title="^polybar-datetime-calendar$"] \
|
|
floating enable, \
|
|
border pixel 3, \
|
|
resize set 378 300, \
|
|
move position 1411 32
|
|
|
|
for_window [class="^$TERM_CLASS$" title="^polybar-wlan$"] \
|
|
floating enable, \
|
|
border pixel 3, \
|
|
resize set 1125 750, \
|
|
move position 2075 32
|
|
|
|
bindsym $mod+c exec ~/.config/polybar/scripts/calendar.sh -t &
|
|
|
|
# screenshots
|
|
bindsym --release Print exec cd ~/media/pics/screens/ && scrot
|
|
bindsym --release Shift+Print exec cd ~/media/pics/screens/ && scrot -s -f
|
|
|
|
# Zoom links in private browser
|
|
bindsym $mod+z exec ~/.local/bin/zoom-links
|
|
|
|
# Monitor selection with fzf
|
|
for_window [class="^$TERM_CLASS$" title="^fzf-monitor-setup$"] \
|
|
floating enable, \
|
|
border pixel 3, \
|
|
resize set 378 300, \
|
|
move position 1 32
|
|
bindsym $mod+m exec \
|
|
pkill -f fzf-monitor-setup -O 1 \
|
|
|| $TERMINAL $TERM_TITLE_FLAG fzf-monitor-setup $TERM_CMD_FLAG \
|
|
sh -c "~/.local/bin/monitor-setup && ~/.config/polybar/launch.sh"
|