summaryrefslogtreecommitdiff
path: root/.config/i3/config
blob: 515f2ab989a9e584041d288d42348d13570ab9aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
# i3 config file (v4)
#
# Please see http://i3wm.org/docs/userguide.html for a complete reference!

set $mod Mod4

# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:Cousine 10

# 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 8

# Before i3 v4.8, we used to recommend this one as the default:
# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
# The font above is very space-efficient, that is, it looks good, sharp and
# clear in small sizes. However, its unicode glyph coverage is limited, the old
# X core fonts rendering does not support right-to-left and this being a bitmap
# font, it doesn’t scale on retina/hidpi displays.

# class                 border  bground text    indicator child_border
client.focused          #000000 #B4EEB4 #000000 #B4EEB4   #000000
client.focused_inactive #000000 #FFFFF6 #000000 #BFBFBF   #E5E5E5
client.unfocused        #000000 #E5E5E5 #000000 #E5E5E5   #E5E5E5
client.urgent           #000000 #900000 #FFFFFF #900000   #900000
client.placeholder      #000000 #000000 #FFFFFF #000000   #000000

client.background       #FFFFF6

# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod

# default workspace layout
workspace_layout tabbed

# start a terminal
bindsym $mod+Return exec xfce4-terminal

# start an Emacs frame
bindsym $mod+Shift+Return exec emacsclient -cn

# start a browser window
bindsym $mod+b exec firefox -new-window

# lock screen -- relies on xss-lock
# note that this won't lock other VTs (lock-session*s* requires root password)
bindsym $mod+l exec loginctl lock-session && sleep 0.5 && xset dpms force standby

# go to sleep -- xss-lock will lock screen
bindsym $mod+Shift+l exec systemctl suspend

# kill focused window
bindsym Mod1+F4 kill
bindsym $mod+q kill

# start dmenu (a program launcher)
bindsym $mod+Shift+p exec dmenu_run -nf '#000000' -nb '#FFFFFF' -sb '#B4EEB4' -sf '#000000'
# There also is the (new) i3-dmenu-desktop which only displays applications
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
# installed.
bindsym $mod+p exec --no-startup-id i3-dmenu-desktop --dmenu="dmenu -i -nf '#000000' -nb '#FFFFFF' -sb '#B4EEB4' -sf '#000000'"

# change focus
bindsym $mod+i focus left
# bindsym $mod+k focus down
# bindsym $mod+l focus up
bindsym $mod+o focus right

# alternatively, you can use the cursor keys:
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+i move left
# bindsym $mod+Shift+k move down
# bindsym $mod+Shift+l move up
bindsym $mod+Shift+o move right

# alternatively, you can use the cursor keys:
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+h 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)
# comment this first one out since I only ever use it accidentally
# bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split

# toggle tiling / floating
bindsym $mod+t floating toggle

# change focus between tiling / floating windows
# I use this key to switch keyboard layouts, so just rely on focus-follows-mouse
# bindsym $mod+space focus mode_toggle

# focus the parent container
bindsym $mod+a focus parent

# focus the child container
bindsym $mod+d focus child

# switch to workspace
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10
bindsym $mod+F1 workspace 11:F1
bindsym $mod+F2 workspace 12:F2
bindsym $mod+F3 workspace 13:F3
bindsym $mod+F4 workspace 14:F4
bindsym $mod+F5 workspace 15:F5
bindsym $mod+F6 workspace 16:F6
bindsym $mod+F7 workspace 17:F7
bindsym $mod+F8 workspace 18:F8
bindsym $mod+F9 workspace 19:F9
bindsym $mod+F10 workspace 20:F10
bindsym $mod+F11 workspace 21:F11
bindsym $mod+F12 workspace 22:F12
bindsym $mod+semicolon workspace back_and_forth

# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace 1
bindsym $mod+Shift+2 move container to workspace 2
bindsym $mod+Shift+3 move container to workspace 3
bindsym $mod+Shift+4 move container to workspace 4
bindsym $mod+Shift+5 move container to workspace 5
bindsym $mod+Shift+6 move container to workspace 6
bindsym $mod+Shift+7 move container to workspace 7
bindsym $mod+Shift+8 move container to workspace 8
bindsym $mod+Shift+9 move container to workspace 9
bindsym $mod+Shift+0 move container to workspace 10
bindsym $mod+Shift+F1 move container to workspace 11:F1
bindsym $mod+Shift+F2 move container to workspace 12:F2
bindsym $mod+Shift+F3 move container to workspace 13:F3
bindsym $mod+Shift+F4 move container to workspace 14:F4
bindsym $mod+Shift+F5 move container to workspace 15:F5
bindsym $mod+Shift+F6 move container to workspace 16:F6
bindsym $mod+Shift+F7 move container to workspace 17:F7
bindsym $mod+Shift+F8 move container to workspace 18:F8
bindsym $mod+Shift+F9 move container to workspace 19:F9
bindsym $mod+Shift+F10 move container to workspace 20:F10
bindsym $mod+Shift+F11 move container to workspace 21:F11
bindsym $mod+Shift+F12 move container to workspace 22:F12
bindsym $mod+Shift+semicolon move container to workspace back_and_forth

# cycle through all workspaces on monitor
bindsym $mod+comma workspace prev_on_output
bindsym $mod+period workspace next_on_output
bindsym $mod+Shift+less move container to workspace prev_on_output, workspace prev_on_output
bindsym $mod+Shift+greater move container to workspace next_on_output, workspace next_on_output

# move focus between monitors -- if we have more than one monitor, we
# probably have a numeric keypad available.
# subtleties: <https://github.com/i3/i3/issues/2558>
bindsym $mod+Mod2+KP_4 focus output left
bindsym $mod+KP_Left focus output left
bindsym $mod+Mod2+KP_6 focus output right
bindsym $mod+KP_Right focus output right

# move focused workspace between monitors
bindsym $mod+Shift+Mod2+KP_Left move workspace to output left
bindsym $mod+Shift+KP_4 move workspace to output left
bindsym $mod+Shift+Mod2+KP_Right move workspace to output right
bindsym $mod+Shift+KP_6 move workspace to output right

# next unused workspace
bindsym $mod+j exec --no-startup-id ~/src/dotfiles/bin/i3-fresh-workspace
bindsym $mod+Shift+j exec --no-startup-id ~/src/dotfiles/bin/i3-fresh-workspace --send

# find lost windows
bindsym $mod+slash exec --no-startup-id rofi -show window

# reload the configuration file
bindsym $mod+Shift+c reload; exec --no-startup-id ~/src/dotfiles/bin/i3-startup-always
# 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 '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'"

# toggle music
bindsym Print exec mpc toggle

# # resize window (you can also use the mouse for that)
# mode "resize" {
#         # These bindings trigger as soon as you enter the resize mode

#         # Pressing left will shrink the window’s width.
#         # Pressing right will grow the window’s width.
#         # Pressing up will shrink the window’s height.
#         # Pressing down will grow the window’s height.
#         bindsym j resize shrink width 10 px or 10 ppt
#         bindsym k resize grow height 10 px or 10 ppt
#         bindsym l resize shrink height 10 px or 10 ppt
#         bindsym semicolon resize grow width 10 px or 10 ppt

#         # same bindings, but for the arrow keys
#         bindsym Left resize shrink width 10 px or 10 ppt
#         bindsym Down resize grow height 10 px or 10 ppt
#         bindsym Up resize shrink height 10 px or 10 ppt
#         bindsym Right resize grow width 10 px or 10 ppt

#         # back to normal: Enter or Escape
#         bindsym Return mode "default"
#         bindsym Escape mode "default"
# }

# bindsym $mod+r mode "resize"

# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
        # i3status is designed to be highly performant so it continues
        # to be refreshed when the system is under load; we're giving
        # up some of that with i3status-wrapper, but let's see if it
        # actually matters
        status_command i3status | i3status-wrapper

        # default behaviour is to cycle through workspaces when scroll
        # wheel is used on the bar.  However, don't think I've ever
        # used this deliberately, and often I do it by mistake, so
        # let's disable it
        wheel_up_cmd nop
        wheel_down_cmd nop

        colors {
            background #FFFFF6
            statusline #000000
            separator  #000000

            focused_workspace  #000000 #B4EEB4 #000000
            active_workspace   #000000 #FFFFF6 #000000
            inactive_workspace #000000 #E5E5E5 #000000
            urgent_workspace   #000000 #900000 #FFFFFF
            binding_mode       #000000 #900000 #FFFFFF
        }

        position bottom
        strip_workspace_numbers yes
}

# launchers
set $mode_launch Launch application:  (f) file manager  (x) arandr  (m) ncmpcpp  (g) greeter  (d) develacc  (F) ftp-master  (v) alsamixer  (p) impass
mode "$mode_launch" {
        # start a graphical file manager
        bindsym f exec thunar , mode "default"

        # launch xrandr graphical config
        bindsym x exec arandr , mode "default"

        # launch mpd client
        bindsym m exec xfce4-terminal -e ncmpcpp , mode "default"

        # get a new VT from lightdm
        bindsym g exec dm-tool switch-to-greeter , mode "default"

        # open virt-viewer pointed at develacc
        bindsym d exec develacc-please , mode "default"

        # connect to Debian's ftp-master server for ftpteam work
        bindsym Shift+f exec debian-ftp-master , mode "default"

        # adjust volume
        bindsym v exec xfce4-terminal -e alsamixer , mode "default"

        # passwords
        bindsym p exec impass gui , mode "default"

        bindsym Ctrl+g mode "default"
}

bindsym $mod+m mode "$mode_launch"

# set $mode_macro Run keyboard macro:  (h) Evince highlight  (n) copy NEW note
# mode "$mode_macro" {
#         bindsym h exec xdo-evince-highlight , mode "default"

#         bindsym n exec debian-ftp-master-cut-note , mode "default"

#         bindsym Ctrl+g mode "default"
# }

# bindsym $mod+bracketleft mode "$mode_macro"

bindsym $mod+bracketleft exec debian-ftp-master-cut-note
bindsym $mod+Shift+bracketleft exec xdo-evince-highlight

# # managing outputs (thanks h01ger and Qubes i3 config)
# set $mode_display Manage displays: (j/k) VGA on/off  (n/m) laptop display on/off  (x) arandr
# mode "$mode_display" {
#         bindsym j exec --no-startup-id xrandr --output VGA-1  --auto --left-of LVDS-1, exec ~/src/dotfiles/bin/i3-startup-always, mode "default"
#         bindsym n exec --no-startup-id xrandr --output LVDS-1 --auto, exec ~/src/dotfiles/bin/i3-startup-always, mode "default"
#         bindsym k exec --no-startup-id xrandr --output VGA-1  --auto --off, exec ~/src/dotfiles/bin/i3-startup-always, mode "default"
#         bindsym m exec --no-startup-id xrandr --output LVDS-1  --auto --off, exec ~/src/dotfiles/bin/i3-startup-always, mode "default"

#         # launch xrandr graphical config
#         bindsym x exec arandr , mode "default"

#         bindsym Ctrl+g mode "default"
# }

# bindsym $mod+x mode "$mode_display"

# audio
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle

# idempotent settings script
exec_always --no-startup-id ~/src/dotfiles/bin/i3-startup-always

# do-it-once settings and startup script
exec --no-startup-id ~/src/dotfiles/bin/i3-startup-once

popup_during_fullscreen leave_fullscreen

# windows that should always float
for_window [title="^vokoscreen"] floating enable
for_window [title="vokoscreen webcam"] border pixel 1
for_window [title="^Ediff"] floating enable
for_window [class="Impass"] floating enable


# Workspaces do not ever get assigned to particular purposes / windows
# don't get assigned to particular workspaces.  If I can't find where
# I was working on something, there's my bindings to `workspace
# {next,prev}_on_output`.  Long-running processes like builds, for
# example, stay in the workspace(s) where I'm working on that
# task/project
#
# Instead of having them on a dedicated workspace, windows that are
# almost always open should be put on the scratcpad.
#
# Note that we have to move to scratchpad at startup ('move to
# scratchpad' below), or the toggle key won't work.
#
# Once every so often I'll have to launch the program, and then
# immediately use the toggle key to make it visible.  This is a bit
# inelegant, but much more reliable than binding the key to a script
# which starts the program if it's not around and otherwise toggles

# calendar, contacts & some HTML mail
bindsym $mod+Shift+k exec evolution
for_window [class="Evolution"] floating enable
for_window [class="Evolution" title=" — Evolution$"] resize set 1200 700, move position 50 50, move to scratchpad
bindsym $mod+k [class="Evolution" title=" — Evolution$"] scratchpad show

# chat
bindsym $mod+Shift+n exec xfce4-terminal --title="irssi" -x /bin/sh -c "mosh athena /home/spwhitton/src/dotfiles/bin/ii"
for_window [class="^Xfce4-terminal$" title="^irssi$"] floating enable, resize set 1000 600, move position 100 100, move to scratchpad
bindsym $mod+n [class="^Xfce4-terminal$" title="^irssi$"] scratchpad show

# Org-mode agenda
bindsym $mod+Shift+u exec --no-startup-id ~/src/dotfiles/bin/i3-fresh-workspace, exec emacsclient -e '(spw--dedicated-org-agenda-window t)'
bindsym $mod+u [class="^Emacs$" title="^Org-mode agenda$"] focus, exec emacsclient -e '(spw--dedicated-org-agenda-window nil)'