# i3 config file (v4) # Please see http://i3wm.org/docs/userguide.html for a complete reference! ################## ### Autostart: ### ################## # exec --no-startup-id sh ~/.xprofile # exec_always xrdb ~/.Xresources # important for fonts and anti aliasing # exec --no-startup-id xsettingsd & # pulseaudio system tray # exec --no-startup-id pasystray exec st -c dropdown_tmuxdd -e tmux ################################ ### Commonly Used Variables: ### ################################ # - Below defined are some of the very common variables that users like to customise # - For Keybindings search: Commonly Used Keybindings in this document # - Make sure that you give the absolute path to the binary / program / executable # - You may specify any additional arguments required by the binary / executable ### Wallpaper: ### # - You need to specify homescreen wallpaper using azote set $lockScreenWallpaper '/usr/share/wallpapers/garuda-wallpapers/Garuda-Desert.png' set $homeScreenWallpaper '/usr/share/wallpapers/garuda-wallpapers/background.jpg' ### Applications: ### set $preferredTerminalEmulator $TERMINAL set $preferredBrowser torbrowser open set $preferredFileManager thunar set $preferredMailClient $MAIL set $preferredTextEditor $EDITOR set $preferredScreenCaptureTool flameshot gui ### Movement keys ### set $left h set $down j set $up k set $right l # set modifier set $super Mod4 set $alt Mod1 ########################################### ### Commonly Used Application Keybinds: ### ########################################### bindsym $super+F2 exec --no-startup-id dmenu-unicode bindsym $super+Shift+F2 exec --no-startup-id dmenu-unicode get-code bindsym $super+F3 exec --no-startup-id st -c "dropdown_sender" -e fsend bindsym $super+F4 exec --no-startup-id passmenu bindsym $super+Shift+F4 exec --no-startup-id passmenu --type bindsym $super+F5 exec --no-startup-id dmenu-zeal bindsym $super+F7 exec --no-startup-id sh -c 'find ~/.librewolf -mindepth 1 -maxdepth 1 -type d -name '????????.*' -printf "%f\n" | cut -d. -f2- | dmenu -p "LibreWolf Profile" | xargs -I{} setsid -f librewolf -P "{}"' bindsym $super+b exec --no-startup-id librewolf-open bindsym $super+c exec --no-startup-id edit-graphical-buffer bindsym $super+x exec --no-startup-id toggle-xeyes bindsym $super+i exec --no-startup-id sh -c 'xdotool type "$(grep -v "^#\|^\s*$" ~/Documents/Notes/bookmarks.txt | tac | dmenu -i -l 50 | cut -d\ -f1)"' bindsym $super+Shift+z exec --no-startup-id dmenu-zeal bindsym $super+Shift+b exec --no-startup-id librewolf-open "$(xprint)" bindsym $super+period exec --no-startup-id sh -c 'xdotool click --clearmodifiers 1 && xdotool keyup super' bindsym $super+slash exec --no-startup-id sh -c 'xdotool click --clearmodifiers 3 && xdotool keyup super' bindsym $super+comma exec --no-startup-id scrcpy-k bindsym $super+$alt+s exec --no-startup-id sh -c 'bm="$(xprint)" && echo "$bm" >> ~/Documents/Notes/bookmarks.txt && notify-send " Bookmark added" "$bm" || notify-send "❌ Failed to add bookmark" "$bm"' bindsym $super+$alt+F1 exec --no-startup-id _macro_F1 bindsym $super+$alt+F2 exec --no-startup-id _macro_F2 bindsym $super+$alt+F3 exec --no-startup-id _macro_F3 bindsym $super+$alt+F4 exec --no-startup-id _macro_F4 bindsym $super+$alt+F5 exec --no-startup-id _macro_F5 bindsym $super+$alt+F6 exec --no-startup-id _macro_F6 bindsym $super+$alt+F7 exec --no-startup-id _macro_F7 bindsym $super+$alt+F8 exec --no-startup-id _macro_F8 bindsym $super+$alt+F9 exec --no-startup-id _macro_F9 bindsym $super+$alt+F10 exec --no-startup-id _macro_F10 bindsym $super+$alt+F11 exec --no-startup-id _macro_F11 bindsym $super+$alt+F12 exec --no-startup-id _macro_F12 ### Screen Capturing & Print Screen: ### bindsym $super+F9 exec $preferredScreenCaptureTool bindsym Print exec --no-startup-id flameshot screen bindsym Ctrl+Print exec --no-startup-id $preferredScreenCaptureTool ### Start a Terminal Emulator: ### # - You can change the preferredTerminalEmulator variable # - $TERMINAL & xfce4-terminal can also be started using their individual keybindings bindsym $super+Return exec --no-startup-id $preferredTerminalEmulator bindsym $super+t exec --no-startup-id xfce4-terminal font pango: source code pro 16 # Use Mouse+$super to drag floating windows to their wanted position floating_modifier $super # hide/unhide i3status bar bindsym $super+m bar mode toggle # start dmenu (a program launcher) set $i3dmenu i3-dmenu-desktop --dmenu="dmenu -i" bindsym $super+Shift+d exec --no-startup-id $i3dmenu bindsym $super+d exec --no-startup-id dmenu_run ################### ### Media Keys: ### ################### # Screen brightness controls set $brightnessUp brightness up set $brightnessDown brightness down # set $brightnessUp brightnessctl set +5% && notify-send -r 4023423 "brightness: $(( $(brightnessctl g) / 1200 ))%" # set $brightnessDown brightnessctl set 5%- && notify-send -r 4023423 "brightness: $(( $(brightnessctl g) / 1200 ))%" # Use pactl to adjust volume in PulseAudio. set $refresh_i3status killall -SIGUSR1 i3status set $raiseVolume volctl up && pkill -SIGRTMIN+4 i3block set $lowerVolume volctl down && pkill -SIGRTMIN+4 i3block # pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status # pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status set $muteOutput pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status set $muteInput pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status # music control set $nextAudio playerctl next set $prevAudio playerctl previous set $playAudio playerctl play-pause set $stopAudio playerctl stop bindsym XF86MonBrightnessUp exec $brightnessUp bindsym XF86MonBrightnessDown exec $brightnessDown bindsym XF86AudioRaiseVolume exec --no-startup-id $raiseVolume bindsym XF86AudioLowerVolume exec --no-startup-id $lowerVolume bindsym XF86AudioMute exec --no-startup-id $muteOutput bindsym XF86AudioMicMute exec --no-startup-id $muteInput #change volume #bindsym XF86AudioRaiseVolume exec pulseaudio-ctl up #bindsym XF86AudioLowerVolume exec pulseaudio-ctl down #bindsym XF86AudioMute exec pulseaudio-ctl mute bindsym XF86AudioNext exec $nextAudio bindsym XF86AudioPrev exec $prevAudio bindsym XF86AudioPlay exec $playAudio bindsym XF86AudioStop exec $stopAudio bindsym $super+Ctrl+Right exec $brightnessUp bindsym $super+Ctrl+Left exec $brightnessDown bindsym $super+Ctrl+Up exec --no-startup-id $raiseVolume bindsym $super+Ctrl+Down exec --no-startup-id $lowerVolume bindsym $super+Ctrl+Insert exec --no-startup-id $muteOutput bindsym $super+Ctrl+Del exec --no-startup-id $muteInput bindsym $super+Ctrl+Next exec $nextAudio bindsym $super+Ctrl+Prior exec $prevAudio bindsym $super+Ctrl+Home exec $playAudio bindsym $super+Ctrl+End exec $stopAudio # bindsym XF86TouchpadToggle exec ~/bin/toggletouchpad.sh bindsym XF86PowerOff exec --no-startup-id notify-send "Power Off" bindsym XF86PowerDown exec --no-startup-id notify-send "Power Down" # Print screen bindsym $super+Print --release exec --no-startup-id i3-scrot -w bindsym $super+Shift+Print --release exec --no-startup-id i3-scrot -s ######################### ### window management ### ######################### # kill focused window bindsym $super+q kill # split in horizontal orientation # bindsym $super+apostrophe split h # split in vertical orientation # bindsym $super+v split v bindsym $super+apostrophe split toggle # change container layout (stacked, tabbed, toggle split) bindsym $super+s layout stacking bindsym $super+w layout tabbed bindsym $super+e layout toggle split # try 'layout default' here # enter fullscreen mode for the focused container bindsym $super+f fullscreen toggle bindsym $super+Shift+f fullscreen toggle global # change focus between tiling / floating windows bindsym $super+space focus mode_toggle # toggle tiling / floating bindsym $super+Shift+space floating toggle # toggle sticky bindsym $super+Shift+s sticky toggle # focus the parent container bindsym $super+a focus parent # focus the child container bindsym $super+Shift+a focus child # move the currently focused window to the scratchpad bindsym $super+Shift+minus move scratchpad # Show the next scratchpad window or hide the focused scratchpad window. # If there are multiple scratchpad windows, this command cycles through them. bindsym $super+minus scratchpad show # reload the configuration file bindsym $super+Shift+c reload # restart i3 inplace (preserves your layout/session, can be used to upgrade i3) bindsym $super+Shift+r restart bindsym $super+Shift+e exec --no-startup-id $TERMINAL -e nvim ~/.config/i3/config # resize window (you can also use the mouse for that) mode "resize" { bindsym $left resize shrink width 30 px or 5 ppt bindsym $down resize grow height 30 px or 5 ppt bindsym $up resize shrink height 30 px or 5 ppt bindsym $right resize grow width 30 px or 5 ppt bindsym Left resize shrink width 1 px or 1 ppt bindsym Down resize grow height 1 px or 1 ppt bindsym Up resize shrink height 1 px or 1 ppt bindsym Right resize grow width 1 px or 1 ppt bindsym Return mode "default" bindsym Escape mode "default" } bindsym $super+r mode "resize" # change focus bindsym $super+$left focus left bindsym $super+$down focus down bindsym $super+$up focus up bindsym $super+$right focus right # alternatively, you can use the cursor keys: bindsym $super+Left focus left bindsym $super+Down focus down bindsym $super+Up focus up bindsym $super+Right focus right # move focused window bindsym $super+Shift+$left move container left 30 bindsym $super+Shift+$down move container down 30 bindsym $super+Shift+$up move container up 30 bindsym $super+Shift+$right move container right 30 # alternatively, you can use the cursor keys: bindsym $super+Shift+Left move left bindsym $super+Shift+Down move down bindsym $super+Shift+Up move up bindsym $super+Shift+Right move right ################## ### Workspaces ### ################## # navigate workspaces bindsym $super+bracketleft workspace $ws1 bindsym $super+n workspace next bindsym $super+p workspace prev bindsym $super+bracketright workspace $ws10 bindsym $super+Home workspace $ws1 bindsym $super+Prior workspace prev bindsym $super+Next workspace next bindsym $super+End workspace $ws10 bindsym $super+Tab workspace back_and_forth bindsym $super+Shift+Tab move container to workspace back_and_forth; workspace back_and_forth bindsym $super+$alt+Tab move container to workspace back_and_forth bindsym $super+o focus output right bindsym $super+Shift+o move container to output right; focus output right bindsym $super+$alt+o move container to output right bindsym $super+semicolon workspace back_and_forth bindsym $super+Shift+semicolon move container to workspace back_and_forth; focus output right bindsym $super+$alt+semicolon move container to workspace back_and_forth bindsym $super+Ctrl+semicolon workspace back_and_forth bindsym $super+Ctrl+Shift+semicolon move container to workspace back_and_forth; workspace back_and_forth bindsym $super+Ctrl+$alt+semicolon move container to workspace back_and_forth # move containers bindsym $super+Shift+bracketleft move container to workspace $ws1 ; workspace $ws1 bindsym $super+Shift+n move container to workspace next ; workspace next bindsym $super+Shift+p move container to workspace prev ; workspace prev bindsym $super+Shift+bracketright move container to workspace $ws10; workspace $ws10 bindsym $super+Shift+Home move container to workspace $ws1 ; workspace $ws1 bindsym $super+Shift+Prior move container to workspace prev ; workspace prev bindsym $super+Shift+Next move container to workspace next ; workspace next bindsym $super+Shift+End move container to workspace $ws10; workspace $ws10 # send containers bindsym $super+$alt+bracketleft move container to workspace $ws1 bindsym $super+$alt+n move container to workspace next bindsym $super+$alt+p move container to workspace prev bindsym $super+$alt+bracketright move container to workspace $ws10 bindsym $super+$alt+Home move container to workspace $ws1 bindsym $super+$alt+Prior move container to workspace prev bindsym $super+$alt+Next move container to workspace next bindsym $super+$alt+End move container to workspace $ws10 # 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  " 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 $super+1 workspace $ws1 bindsym $super+2 workspace $ws2 bindsym $super+3 workspace $ws3 bindsym $super+4 workspace $ws4 bindsym $super+5 workspace $ws5 bindsym $super+6 workspace $ws6 bindsym $super+7 workspace $ws7 bindsym $super+8 workspace $ws8 bindsym $super+9 workspace $ws9 bindsym $super+0 workspace $ws10 # Move to workspace with focused container bindsym $super+Shift+1 move container to workspace $ws1; workspace $ws1 bindsym $super+Shift+2 move container to workspace $ws2; workspace $ws2 bindsym $super+Shift+3 move container to workspace $ws3; workspace $ws3 bindsym $super+Shift+4 move container to workspace $ws4; workspace $ws4 bindsym $super+Shift+5 move container to workspace $ws5; workspace $ws5 bindsym $super+Shift+6 move container to workspace $ws6; workspace $ws6 bindsym $super+Shift+7 move container to workspace $ws7; workspace $ws7 bindsym $super+Shift+8 move container to workspace $ws8; workspace $ws8 bindsym $super+Shift+9 move container to workspace $ws9; workspace $ws9 bindsym $super+Shift+0 move container to workspace $ws10; workspace $ws10 # move focused container to workspace bindsym $super+$alt+1 move container to workspace $ws1 bindsym $super+$alt+2 move container to workspace $ws2 bindsym $super+$alt+3 move container to workspace $ws3 bindsym $super+$alt+4 move container to workspace $ws4 bindsym $super+$alt+5 move container to workspace $ws5 bindsym $super+$alt+6 move container to workspace $ws6 bindsym $super+$alt+7 move container to workspace $ws7 bindsym $super+$alt+8 move container to workspace $ws8 bindsym $super+$alt+9 move container to workspace $ws9 bindsym $super+$alt+0 move container to workspace $ws10 workspace $ws1 output "eDP-1-1" workspace $ws2 output "eDP-1-1" workspace $ws3 output "eDP-1-1" workspace $ws4 output "eDP-1-1" workspace $ws5 output "eDP-1-1" workspace $ws6 output "HDMI-0" workspace $ws7 output "HDMI-0" workspace $ws8 output "HDMI-0" workspace $ws9 output "HDMI-0" workspace $ws10 output "HDMI-0" workspace "12: W " output "HDMI-0" #################### ### Window rules ### #################### # assign [class="Tor Browser"] $ws6 # assign [class="librewolf"] $ws7 # assign [class="Zeal"] $ws8 # window rules, you can find the window class using xprop for_window [class=".*"] border pixel 4 assign [class=URxvt] 1 for_window [class=Viewnior|feh|Audacious|File-roller|Lxappearance|Lxtask|Pavucontrol|upgrade2ultimate.sh] floating enable for_window [class=URxvt|firedragon|Geany|Evince|Soffice|libreoffice*|mpv|Ghb|Xfburn|Gimp*|Inkscape|Vlc|Lxappearance|Audacity] focus for_window [class=Xfburn|GParted|System-config-printer.py|Lxtask|Pavucontrol|Exo-helper*|Lxrandr|Arandr] focus # Open specific applications in floating mode for_window [title="alsamixer"] floating enable border pixel 1 for_window [class="calamares"] floating enable border normal for_window [class="Clipgrab"] floating enable for_window [title="File Transfer*"] floating enable for_window [class="bauh"] floating enable for_window [class="Galculator"] floating enable border pixel 1 for_window [class="GParted"] floating enable border normal for_window [title="i3_help"] floating enable sticky enable border normal for_window [class="Lightdm-settings"] floating enable for_window [class="Lxappearance"] floating enable border normal for_window [class="Garuda Settings Manager"] floating enable border normal for_window [title="MuseScore: Play Panel"] floating enable for_window [class="azote"] floating enable sticky enable border normal for_window [class="Oblogout"] fullscreen enable for_window [class="octopi"] floating enable for_window [title="About Pale Moon"] floating enable for_window [class="Pamac-manager"] floating enable for_window [class="Pamac-updater"] floating enable for_window [class="Pavucontrol"] floating enable for_window [class="Qtconfig-qt4"] floating enable border normal for_window [class="qt5ct"] floating enable sticky enable border normal #for_window [title="sudo"] floating enable border normal for_window [class="Simple-scan"] floating enable border normal for_window [class="(?i)System-config-printer.py"] floating enable border normal for_window [class="Skype"] floating enable border normal for_window [class="Timeshift-gtk"] floating enable border normal for_window [class="(?i)virtualbox"] floating enable border normal for_window [class="Xfburn"] floating enable for_window [class="garuda-welcome"] floating enable for_window [class="Artha"] floating enable for_window [class="Tk"] floating enable border normal for_window [title="Swing"] floating enable move position center for_window [class="copyq"] floating enable for_window [class="tabbed"] floating enable border normal for_window [class="Yad"] floating enable border normal for_window [class="Dialog"] move position center for_window [class="KeePassXC"] move position center for_window [class="sun-applet-Main"] floating enable move position center for_window [window_type='dialog'] move position center for_window [title="Android Emulator - *"] floating enable border none sticky enable for_window [title="Emulator"] floating enable border none sticky enable for_window [class="mpv"] floating enable # for_window [class="Zeal"] floating enable move position below # #---Dropdown Windows---# # # General dropdown window traits. The order can matter. for_window [class="dropdown_*|tridactyl_*"] floating enable for_window [class="dropdown_*|tridactyl_*"] move scratchpad for_window [class="dropdown_*|tridactyl_*"] sticky enable for_window [class="dropdown_*|tridactyl_*"] scratchpad show for_window [class="dropdown_*"] move position center for_window [class="dropdown_tmuxdd"] scratchpad hide # for_window [class="dropdown_tmuxdd"] resize set 625 450 # for_window [class="dropdown_dropdowncalc"] resize set 800 300 # for_window [class="dropdown_tmuxdd"] border pixel 3 # for_window [class="dropdown_dropdowncalc"] border pixel 2 # setup xeyes rules for_window [class="XEyes"] floating enable for_window [class="XEyes"] sticky enable for_window [class="XEyes"] border pixel 0 for_window [class="XEyes"] resize set 500 400 for_window [class="XEyes"] move position 700 300 # for_window [class="XEyes"] resize set 125 100 # for_window [class="XEyes"] move position 1789 6 # colour of border, background, text, indicator, and child_border client.focused #bf616a #2f343f #d8dee8 #bf616a #d8dee8 client.focused_inactive #2f343f #2f343f #d8dee8 #2f343f #2f343f client.unfocused #2f343f #2f343f #d8dee8 #2f343f #2f343f client.urgent #2f343f #2f343f #d8dee8 #2f343f #2f343f client.placeholder #2f343f #2f343f #d8dee8 #2f343f #2f343f client.background #2f343f # change borders ?Convert this into a mode # bindsym $super+u border none # bindsym $super+y border pixel 1 # bindsym $super+i border normal # panel # Start i3bar to display a workspace bar bar { output primary status_command exec i3blocks bindsym --release button3 exec jgmenu --at-pointer workspace_min_width 40 strip_workspace_numbers yes #strip_workspace_name yes|no # defaults #colors { #background #2f343f #statusline #FFFFFF #separator #666666 #focused_workspace #4C7899 #285577 #FFFFFF #active_workspace #333333 #222222 #FFFFFF #inactive_workspace #333333 #222222 #888888 #urgent_workspace #2F343A #900000 #FFFFFF ##binding_mode #2F343A #900000 #FFFFFF ## colour of border, background, and text #} colors { background #2f343f statusline #EEEEEE separator #666666 focused_workspace #2f343f #2f343f #CCFFFF active_workspace #2f343f #2f343f #EEEEEE inactive_workspace #2f343f #2f343f #888888 urgent_workspace #AAFFFF #2f343f #AAFFFF #binding_mode #2f343f #2f343f #EEEEEE # colour of border, background, and text } } bar { output nonprimary bindsym --release button3 exec jgmenu --at-pointer workspace_min_width 40 strip_workspace_numbers yes #strip_workspace_name yes|no colors { background #2f343f statusline #EEEEEE separator #666666 focused_workspace #2f343f #2f343f #AAFFFF active_workspace #2f343f #2f343f #CCCCCC inactive_workspace #2f343f #2f343f #888888 urgent_workspace #AACCFF #2f343f #AACCFF #binding_mode #2f343f #2f343f #EEEEEE # colour of border, background, and text } } ############################# ### settings for i3-gaps: ### ############################# # Set inner/outer gaps gaps inner 0 gaps outer -2 # Additionally, you can issue commands with the following syntax. This is useful to bind keys to changing the gap size. # gaps inner|outer current|all set|plus|minus # gaps inner all set 10 # gaps outer all plus 5 # Smart gaps (gaps used if only more than one container on the workspace) smart_gaps on # Smart borders (draw borders around container only if it is not the only container on this workspace) # on|no_gaps (on=always activate and no_gaps=only activate if the gap size to the edge of the screen is 0) smart_borders on # Press $super+Shift+g to enter the gap mode. Choose o or i for modifying outer/inner gaps. Press one of + / - (in-/decrement for current workspace) or 0 (remove gaps for current workspace). If you also press Shift with these keys, the change will be global for all workspaces. set $mode_gaps Gaps: (o) outer, (i) inner set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global) set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global) bindsym $super+Shift+g mode "$mode_gaps" mode "$mode_gaps" { bindsym o mode "$mode_gaps_outer" bindsym i mode "$mode_gaps_inner" bindsym Return mode "default" bindsym Escape mode "default" } mode "$mode_gaps_inner" { bindsym plus gaps inner current plus 5 bindsym minus gaps inner current minus 5 bindsym 0 gaps inner current set 0 bindsym Shift+plus gaps inner all plus 5 bindsym Shift+minus gaps inner all minus 5 bindsym Shift+0 gaps inner all set 0 bindsym Return mode "default" bindsym Escape mode "default" } mode "$mode_gaps_outer" { bindsym plus gaps outer current plus 5 bindsym minus gaps outer current minus 5 bindsym 0 gaps outer current set 0 bindsym Shift+plus gaps outer all plus 5 bindsym Shift+minus gaps outer all minus 5 bindsym Shift+0 gaps outer all set 0 bindsym Return mode "default" bindsym Escape mode "default" } # Set shut down, restart and locking features bindsym $super+BackSpace mode "$mode_system" set $mode_system (l)ock (e)xit switch_(u)ser (s)uspend (h)ibernate (r)eboot (Shift+s)hutdown mode "$mode_system" { bindsym l exec --no-startup-id i3exit lock, mode "default" bindsym e exec --no-startup-id i3exit logout, mode "default" bindsym u exec --no-startup-id i3exit switch_user, mode "default" bindsym s exec --no-startup-id i3exit suspend, mode "default" bindsym h exec --no-startup-id i3exit hibernate, mode "default" bindsym r exec --no-startup-id i3exit reboot, mode "default" bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default" # exit system mode: "Enter" or "Escape" bindsym Return mode "default" bindsym Escape mode "default" } # TODO: create your own i3exit script as ?syst-power # Lock screen bindsym $super+Escape exec i3lock -t -i $lockScreenWallpaper # exec_always xrandr --output eDP-1-1-1 --auto --primary