Configuration for my NixOS based systems and Home Manager
1# This file has been auto-generated by i3-config-wizard(1).
2# It will not be overwritten, so edit it as you like.
3#
4# Should you change your keyboard layout some time, delete
5# this file and re-run i3-config-wizard(1).
6#
7
8# i3 config file (v4)
9#
10# Please see https://i3wm.org/docs/userguide.html for a complete reference!
11
12set $mod Mod4
13
14# Font for window titles. Will also be used by the bar unless a different font
15# is used in the bar {} block below.
16font pango:monospace 8
17
18# This font is widely installed, provides lots of unicode glyphs, right-to-left
19# text rendering and scalability on retina/hidpi displays (thanks to pango).
20#font pango:DejaVu Sans Mono 8
21
22# Start XDG autostart .desktop files using dex. See also
23# https://wiki.archlinux.org/index.php/XDG_Autostart
24exec --no-startup-id dex --autostart --environment i3
25
26# The combination of xss-lock, nm-applet and pactl is a popular choice, so
27# they are included here as an example. Modify as you see fit.
28
29# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
30# screen before suspend. Use loginctl lock-session to lock your screen.
31exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
32
33# NetworkManager is the most popular way to manage wireless networks on Linux,
34# and nm-applet is a desktop environment-independent system tray GUI for it.
35exec --no-startup-id nm-applet
36
37# Use pactl to adjust volume in PulseAudio.
38set $refresh_i3status killall -SIGUSR1 i3status
39bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
40bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
41bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
42bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
43
44# Use Mouse+$mod to drag floating windows to their wanted position
45floating_modifier $mod
46
47# move tiling windows via drag & drop by left-clicking into the title bar,
48# or left-clicking anywhere into the window while holding the floating modifier.
49tiling_drag modifier titlebar
50
51# start a terminal
52bindsym $mod+Return exec kitty
53
54# kill focused window
55bindsym $mod+Shift+q kill
56
57# start dmenu (a program launcher)
58bindsym $mod+d exec --no-startup-id dmenu_run
59# A more modern dmenu replacement is rofi:
60# bindcode $mod+40 exec "rofi -modi drun,run -show drun"
61# There also is i3-dmenu-desktop which only displays applications shipping a
62# .desktop file. It is a wrapper around dmenu, so you need that installed.
63# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop
64
65# change focus
66bindsym $mod+h focus left
67bindsym $mod+j focus down
68bindsym $mod+k focus up
69bindsym $mod+l focus right
70
71
72# alternatively, you can use the cursor keys:
73bindsym $mod+Left focus left
74bindsym $mod+Down focus down
75bindsym $mod+Up focus up
76bindsym $mod+Right focus right
77
78# move focused window
79bindsym $mod+Shift+h move left
80bindsym $mod+Shift+j move down
81bindsym $mod+Shift+k move up
82bindsym $mod+Shift+l move right
83
84# alternatively, you can use the cursor keys:
85bindsym $mod+Shift+Left move left
86bindsym $mod+Shift+Down move down
87bindsym $mod+Shift+Up move up
88bindsym $mod+Shift+Right move right
89
90# split in horizontal orientation
91bindsym $mod+g split h
92
93# split in vertical orientation
94bindsym $mod+v split v
95
96# enter fullscreen mode for the focused container
97bindsym $mod+f fullscreen toggle
98
99# change container layout (stacked, tabbed, toggle split)
100bindsym $mod+s layout stacking
101bindsym $mod+w layout tabbed
102bindsym $mod+e layout toggle split
103
104# toggle tiling / floating
105bindsym $mod+Shift+space floating toggle
106
107# change focus between tiling / floating windows
108bindsym $mod+space focus mode_toggle
109
110# focus the parent container
111bindsym $mod+a focus parent
112
113# focus the child container
114#bindsym $mod+d focus child
115
116# Define names for default workspaces for which we configure key bindings later on.
117# We use variables to avoid repeating the names in multiple places.
118set $ws1 "1"
119set $ws2 "2"
120set $ws3 "3"
121set $ws4 "4"
122set $ws5 "5"
123set $ws6 "6"
124set $ws7 "7"
125set $ws8 "8"
126set $ws9 "9"
127set $ws10 "10"
128
129# switch to workspace
130bindsym $mod+1 workspace number $ws1
131bindsym $mod+2 workspace number $ws2
132bindsym $mod+3 workspace number $ws3
133bindsym $mod+4 workspace number $ws4
134bindsym $mod+5 workspace number $ws5
135bindsym $mod+6 workspace number $ws6
136bindsym $mod+7 workspace number $ws7
137bindsym $mod+8 workspace number $ws8
138bindsym $mod+9 workspace number $ws9
139bindsym $mod+0 workspace number $ws10
140# Tab navigation
141bindsym $mod+Tab workspace next
142bindsym $mod+Shift+Tab workspace prev
143
144# move focused container to workspace
145bindsym $mod+Shift+1 move container to workspace number $ws1
146bindsym $mod+Shift+2 move container to workspace number $ws2
147bindsym $mod+Shift+3 move container to workspace number $ws3
148bindsym $mod+Shift+4 move container to workspace number $ws4
149bindsym $mod+Shift+5 move container to workspace number $ws5
150bindsym $mod+Shift+6 move container to workspace number $ws6
151bindsym $mod+Shift+7 move container to workspace number $ws7
152bindsym $mod+Shift+8 move container to workspace number $ws8
153bindsym $mod+Shift+9 move container to workspace number $ws9
154bindsym $mod+Shift+0 move container to workspace number $ws10
155
156# reload the configuration file
157bindsym $mod+Shift+c reload
158# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
159bindsym $mod+Shift+r restart
160# exit i3 (logs you out of your X session)
161bindsym $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'"
162
163# resize window (you can also use the mouse for that)
164mode "resize" {
165 # These bindings trigger as soon as you enter the resize mode
166
167 # Pressing left will shrink the window’s width.
168 # Pressing right will grow the window’s width.
169 # Pressing up will shrink the window’s height.
170 # Pressing down will grow the window’s height.
171 bindsym h resize shrink width 10 px or 10 ppt
172 bindsym j resize grow height 10 px or 10 ppt
173 bindsym k resize shrink height 10 px or 10 ppt
174 bindsym l resize grow width 10 px or 10 ppt
175
176 # same bindings, but for the arrow keys
177 bindsym Left resize shrink width 10 px or 10 ppt
178 bindsym Down resize grow height 10 px or 10 ppt
179 bindsym Up resize shrink height 10 px or 10 ppt
180 bindsym Right resize grow width 10 px or 10 ppt
181
182 # back to normal: Enter or Escape or $mod+r
183 bindsym Return mode "default"
184 bindsym Escape mode "default"
185 bindsym $mod+r mode "default"
186}
187
188bindsym $mod+r mode "resize"
189
190# Start i3bar to display a workspace bar (plus the system information i3status
191# finds out, if available)
192bar {
193 status_command i3status
194}
195
196exec barrier