143 lines
4.6 KiB
Markdown
143 lines
4.6 KiB
Markdown
|
# 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](Xinitrc.md).
|
||
|
|
||
|
Simple usage:
|
||
|
|
||
|
```prettyprint
|
||
|
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:
|
||
|
|
||
|
```prettyprint
|
||
|
- 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:
|
||
|
```prettyprint
|
||
|
- 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:
|
||
|
```prettyprint
|
||
|
- 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.
|
||
|
|
||
|
```prettyprint
|
||
|
- 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.
|
||
|
|
||
|
```prettyprint
|
||
|
- 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](Xinitrc.md), so all that is necessary in the i3 config is to set the key combination that should spawn `xautolock -locknow`.
|
||
|
|
||
|
```prettyprint
|
||
|
- 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.
|
||
|
|
||
|
```prettyprint
|
||
|
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](https://i3wm.org/i3status/manpage.html), 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.
|
||
|
|
||
|
```prettyprint
|
||
|
volume master {
|
||
|
format = "🔈%volume" * U+1F508
|
||
|
format_muted = "🔇" * U+1F507
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### SPVPN
|
||
|
|
||
|
This is a simple pidfile watcher used with one of my [VPN](VPN.md) configurations that gets started with systemd.
|
||
|
|
||
|
```prettyprint
|
||
|
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.
|