vincentbernat.i3wm-configur.../config
Vincent Bernat b103a0d628 i3: when switching workspace, focus tiling instead of last one
Otherwise, new floating widgets may get focus. See previous commit.
2025-06-09 16:13:42 +02:00

177 lines
7.1 KiB
Text

# i3 config file (v4)
set $mod Mod4
set $up l
set $down k
set $left j
set $right semicolon
set $term vbeterm
set $mediaplayer spotify
set $borderpx 3
font pango:Iosevka Aile 9
# style and colors
default_border pixel $borderpx
default_floating_border pixel $borderpx
# class border backgr. text indicator child_border
client.focused #cc5c00 #cc5c00 #ffffff #ee9c31 #cc5c00
client.focused_inactive #5f676a #5f676a #ffffff #484e50 #5f676a
client.unfocused #222222 #222222 #888888 #292d2e #222222
client.urgent #d00000 #d00000 #ffffff #d00000 #d00000
client.placeholder #0c0c0c #0c0c0c #ffffff #000000 #0c0c0c
client.background #ffffff
# gaps
gaps inner 10
# smart_gaps on
# audio
bindsym XF86AudioRaiseVolume exec --no-startup-id exec pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym $mod+Up exec --no-startup-id exec pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec --no-startup-id exec pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym $mod+Down exec --no-startup-id exec pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym XF86AudioMute exec --no-startup-id exec ~/.config/i3/bin/toggle-mute sink
bindsym XF86AudioMicMute exec --no-startup-id exec ~/.config/i3/bin/toggle-mute source
bindsym XF86AudioPlay exec --no-startup-id exec playerctl -p $mediaplayer play-pause
bindsym $mod+Left exec --no-startup-id exec playerctl -p $mediaplayer play-pause
bindsym XF86AudioPause exec --no-startup-id exec playerctl -p $mediaplayer pause
bindsym XF86AudioStop exec --no-startup-id exec playerctl -p $mediaplayer stop
bindsym XF86AudioNext exec --no-startup-id exec playerctl -p $mediaplayer next
bindsym $mod+Right exec --no-startup-id exec playerctl -p $mediaplayer next
bindsym XF86AudioPrev exec --no-startup-id exec playerctl -p $mediaplayer previous
bindsym $mod+s exec --no-startup-id exec ~/.config/i3/bin/rofi-mediaplayer $mediaplayer
# brightness
bindsym XF86MonBrightnessUp exec --no-startup-id exec brightnessctl -q set +5%
bindsym XF86MonBrightnessDown exec --no-startup-id exec brightnessctl -q set 5%-
# use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
floating_minimum_size 55 x 30
# start a terminal
bindsym $mod+Return exec exec $term
# kill focused window
bindsym $mod+x kill
# execute command
set $rofi exec rofi -modi drun -show drun -show-icons -drun-match-fields name
bindsym $mod+r exec --no-startup-id $rofi
bindsym XF86LaunchA exec --no-startup-id $rofi
# change focus
bindsym $mod+$left focus left
bindsym $mod+$down focus down
bindsym $mod+$up focus up
bindsym $mod+$right focus right
focus_follows_mouse no
# 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+o move container to output next ; focus output next
# resize focused window
bindsym $mod+Ctrl+$left resize shrink width 10 px or 4 ppt
bindsym $mod+Ctrl+$down resize grow height 10 px or 4 ppt
bindsym $mod+Ctrl+$up resize shrink height 10 px or 4 ppt
bindsym $mod+Ctrl+$right resize grow width 10 px or 4 ppt
# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle
bindsym $mod+Shift+f fullscreen toggle global
# change container layout (tabbed, toggle split)
bindsym $mod+w layout toggle splitv splith tabbed
bindsym $mod+v split toggle
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# toggle sticky
bindsym $mod+period sticky toggle
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
# focus the parent container
bindsym $mod+a focus parent
# default workspace layout: tabbed
workspace_layout tabbed
# switch to workspace
bindsym $mod+1 workspace number 1 ; focus tiling
bindsym $mod+2 workspace number 2 ; focus tiling
bindsym $mod+3 workspace number 3 ; focus tiling
bindsym $mod+4 workspace number 4 ; focus tiling
bindsym $mod+5 workspace number 5 ; focus tiling
bindsym $mod+6 workspace number 6 ; focus tiling
bindsym $mod+7 workspace number 7 ; focus tiling
bindsym $mod+8 workspace number 8 ; focus tiling
bindsym $mod+9 workspace number 9 ; focus tiling
bindsym $mod+0 workspace number 10 ; focus tiling
bindsym $mod+Tab nop "previous-workspace"
bindsym $mod+Ctrl+o focus output next ; focus tiling
bindsym $mod+n nop "new-workspace"
focus_wrapping no
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number 1
bindsym $mod+Shift+2 move container to workspace number 2
bindsym $mod+Shift+3 move container to workspace number 3
bindsym $mod+Shift+4 move container to workspace number 4
bindsym $mod+Shift+5 move container to workspace number 5
bindsym $mod+Shift+6 move container to workspace number 6
bindsym $mod+Shift+7 move container to workspace number 7
bindsym $mod+Shift+8 move container to workspace number 8
bindsym $mod+Shift+9 move container to workspace number 9
bindsym $mod+Shift+0 move container to workspace number 10
bindsym $mod+Shift+o move workspace to output next
bindsym $mod+Ctrl+Shift+o nop "move-all-workspaces-to-next-output"
bindsym $mod+Shift+n nop "move-to-new-workspace"
# lock screen
bindsym XF86ScreenSaver exec --no-startup-id exec loginctl lock-session
bindsym $mod+Delete exec --no-startup-id exec loginctl lock-session
# print screen
bindsym Print exec --no-startup-id exec ~/.config/i3/bin/screenshot window
bindsym $mod+Print exec --no-startup-id exec ~/.config/i3/bin/screenshot desktop
bindsym $mod+F12 exec --no-startup-id exec ~/.config/i3/bin/screenshot window
# Quake window
bindsym $mod+grave nop "quake-console:$term:QuakeConsole:0.3"
# get info about container/workspace
bindsym $mod+i nop "container-info"
bindsym $mod+Shift+i nop "workspace-info"
# random rules
focus_on_window_activation smart
no_focus [window_type="splash"]
for_window [tiling] border pixel $borderpx
for_window [class="Nm-connection-editor"] floating enable
for_window [class="Shadow"] fullscreen enable
for_window [window_role="PictureInPicture"] floating enable, resize set 1280 720
for_window [class="pavucontrol"] floating enable
# Firefox sharing indicator
for_window [floating title="Firefox — Sharing Indicator"] border none, sticky enable, move position 15 ppt -5 px
# Chromium sharing indicator
for_window [floating title=" is sharing your screen.$"] border none, sticky enable, move position 15 ppt -5 px
# Jitsi sharing indicator
for_window [floating title="Screen Sharing Tracker" instance="jitsi meet"] border none, sticky enable, move position 15 ppt -5 px
# Zoom (😱?)
for_window [class="^zoom$" title="^Zoom($|\s)"] floating disable, border pixel $borderpx
for_window [class="^zoom$" title="^zoom"] floating enable, border none
# start stuff
exec_always --no-startup-id exec systemctl --user start --no-block i3-session.target
exec --no-startup-id exec i3-msg "\
workspace number 1; append_layout ~/.config/i3/ws-emacs.json; exec exec emacs; exec exec $term; exec exec $term; \
workspace number 2; exec nm-online -q -t 5 && exec firefox; \
workspace number 3; exec test -d ~/.thunderbird && exec thunderbird; \
workspace number 1"