4.6 KiB
i3 Configuration
Source: https://git.thurstylark.com/vcsh/i3.git
j4-make-config
The final config that actually is read by i3 is created using j4-make-config. This is done in the Xinitrc.
Simple usage:
j4-make-config -a $(hostname).config archlinux
This creates ~/.config/i3/config
by merging ~/.config/i3/config.base
and ~/.config/i3/$HOSTNAME.config
, and adds the 'archlinux' theme (included with j4-make-config). Optionally, you can add -r
to tell i3 to reload the config after j4-make-config
has completed.
Since using j4-make-config
, the command for reloading the config has been changed to the following:
- rebuild and reload the configuration file
bindsym $mod+Shift+c exec "j4-make-config -r -a $HOSTNAME.config archlinux"
Reference
https://github.com/okraits/j4-make-config
Media Keys
Volume
This differs depending on if you're using ALSA or Pulseaudio. Thus, I include these instructions in the host-specific configs instead of the base config
ALSA:
- Alsa Volume controls
bindsym XF86AudioRaiseVolume exec --no-startup-id amixer set Master 5%+ #increase sound volume
bindsym XF86AudioLowerVolume exec --no-startup-id amixer set Master 5%- #decrease sound volume
bindsym XF86AudioMute exec --no-startup-id amixer set Master toggle * mute sound
PulseAudio:
- PulseAudio Volume controls
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5% #increase sound volume
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5% #decrease sound volume
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle * mute sound
Brightness
Brightness can be universal unless the utility for changing brightness differs between machines, so this snippit lives in the base config.
- Sreen brightness controls (requires light(1) from the AUR)
bindsym XF86MonBrightnessUp exec light -A 10 * increase screen brightness
bindsym XF86MonBrightnessDown exec light -U 10 * decrease screen brightness
Playhead Control
This also is universal if the same tool is being used across hosts. I use playerctl
mainly for its compatibility with Spotify's Linux client.
- Music Player controls
bindsym XF86AudioPlay exec --no-startup-id playerctl play-pause
bindsym XF86AudioNext exec --no-startup-id playerctl next
bindsym XF86AudioPrev exec --no-startup-id playerctl previous
References
https://wiki.archlinux.org/index.php/Extra_keyboard_keys https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture#Keyboard_volume_control https://wiki.archlinux.org/index.php/PulseAudio#Keyboard_volume_control https://wiki.archlinux.org/index.php/Backlight https://wiki.archlinux.org/index.php/Spotify#Global_media_hotkeys
Screen Locker
The screen locker is already set up in Xinitrc, so all that is necessary in the i3 config is to set the key combination that should spawn xautolock -locknow
.
- Ctrl+Alt+L to lock the screen
- Locker is set in ~/.xinitrc
bindsym Mod1+Control+l exec "xautolock -locknow"
i3Bar
This is another host-specific configuration, since bar {}
has host-specific options apart from just the i3status config. It also includes the j4-make-config
theme placeholder, since the theme definitions for the bar are separate from the main config.
I'll only demonstrate the most complicated of my current i3bar configuration. The rest can be viewed on the git repo.
bar {
status_command i3status -c ~/.config/i3/status/$HOSTNAME.config
tray_output primary
output eDP1 * Which display should i3bar be bound to?
- $i3-theme-bar
}
i3Status
Most of the i3Status configuration is pretty standard, and is well documented by the upstream docs, so I'll only document the specific directives I crafted/modified myself
Volume
This directive chooses ALSA by default, PulseAudio can be specified by adding device = "pulse"
to the end of this directive.
volume master {
format = "🔈%volume" * U+1F508
format_muted = "🔇" * U+1F507
}
SPVPN
This is a simple pidfile watcher used with one of my VPN configurations that gets started with systemd.
run_watch SPVPN {
pidfile = "/var/run/spvpn@*.pid"
}
Nagbar
The nagbar is intensely annoying to encounter mainly because you can only use the mouse for interacting with it. It has been removed from my config altogether, and I plan on replacing it with dmenu in the future.