EndeavourOS + i3
Bron: endeavouros.com / i3wm.org / archlinux.wiki Auteur: Johan Beysen | Fox & Fish Cybersecurity
1. Wat is EndeavourOS?
EndeavourOS is een Arch-gebaseerde Linux distributie die Arch toegankelijk maakt zonder de handmatige installatiepijn — maar zonder de Arch-filosofie te verloochenen. Geen bloat, geen opinies over wat je moet installeren, gewoon een werkend Arch-systeem met een vriendelijk installatieprogramma (Calamares).
Kenmerken:
| Aspect | Detail |
|---|---|
| Base | Arch Linux |
| Package manager | pacman + yay (AUR) |
| Init systeem | systemd |
| Releases | Rolling release (nooit herinstalleren) |
| Community editie | i3, XFCE, LXQT, Openbox, BSPWM, ... |
| Flagship | Online installer met keuze van DE/WM |
2. Wat is i3?
i3 is een tiling window manager — geen volledige desktop environment. Dat betekent: geen file manager die automatisch opent, geen systray out-of-the-box, geen muis-driven workflow. Alles werkt via keyboard shortcuts en configuratiebestanden.
2.1 Tiling vs Floating
| Tiling (i3) | Floating (GNOME/KDE) | |
|---|---|---|
| Vensters | Vullen het scherm automatisch | Zweven vrij |
| Muis | Optioneel | Centraal |
| Productiviteit | Hoog na leercurve | Direct intuïtief |
| Configuratie | Tekstbestand | GUI |
| Geheugengebruik | ~200-400MB | 800MB - 2GB+ |
i3 vs i3-gaps
De EOS community editie levert i3-gaps (nu samengevoegd in i3 4.22+) — dit voegt gaps toe tussen vensters voor esthetiek. Standaard i3 heeft dit niet.
2.2 Basisconcepten
- Workspace — virtueel bureaublad (1 t/m 10)
- Container — elk venster zit in een container
- Layout — splitsen horizontaal, verticaal of tabbed
- Scratchpad — verborgen workspace voor tijdelijke vensters
- Bar — statusbalk (i3bar of polybar)
- Mod key — jouw modifier toets (standaard: Super/Win of Alt)
3. Configuratiebestand
# Locatie
~/.config/i3/config
# Herladen zonder uitloggen
$mod+Shift+r
# i3 herstarten (zwaardere refresh)
$mod+Shift+e → Restart
3.1 Mod Key Instellen
# In ~/.config/i3/config:
set $mod Mod4 # Super/Win toets (aanbevolen)
# set $mod Mod1 # Alt toets
3.2 Lettertype
font pango:JetBrainsMono Nerd Font 10
# of
font pango:monospace 10
4. Standaard Key Bindings
4.1 Vensters
| Shortcut | Actie |
|---|---|
$mod+Enter |
Terminal openen |
$mod+d |
App launcher (dmenu/rofi) |
$mod+q |
Venster sluiten |
$mod+f |
Fullscreen toggle |
$mod+Shift+Space |
Floating toggle |
$mod+Space |
Focus wisselen floating/tiling |
$mod+h/j/k/l |
Focus wisselen (vim-stijl) |
$mod+←/↓/↑/→ |
Focus wisselen (pijltjes) |
$mod+Shift+h/j/k/l |
Venster verplaatsen |
$mod+Shift+←/↓/↑/→ |
Venster verplaatsen (pijltjes) |
4.2 Layout
| Shortcut | Actie |
|---|---|
$mod+e |
Split toggle (horizontaal/verticaal) |
$mod+s |
Stacked layout |
$mod+w |
Tabbed layout |
$mod+r |
Resize mode |
$mod+a |
Focus parent container |
4.3 Workspaces
| Shortcut | Actie |
|---|---|
$mod+1 t/m $mod+0 |
Naar workspace 1-10 |
$mod+Shift+1 t/m $mod+Shift+0 |
Venster naar workspace |
$mod+Tab |
Vorige workspace |
4.4 Systeem
| Shortcut | Actie |
|---|---|
$mod+Shift+r |
Config herladen |
$mod+Shift+q |
i3 afsluiten |
$mod+Shift+e |
Exit menu |
5. Config Aanpassen
5.1 Terminal Instellen
# In ~/.config/i3/config:
set $terminal alacritty
# of: kitty, wezterm, xterm, urxvt
bindsym $mod+Return exec $terminal
5.2 App Launcher
# Rofi (aanbevolen boven dmenu)
bindsym $mod+d exec --no-startup-id rofi -show drun -show-icons
# Rofi ook voor window switching
bindsym $mod+Tab exec --no-startup-id rofi -show window
# dmenu (standaard, minimalist)
bindsym $mod+d exec --no-startup-id dmenu_run
5.3 Autostart
# Apps starten bij login
exec --no-startup-id nm-applet # NetworkManager icon
exec --no-startup-id picom # Compositor
exec --no-startup-id feh --bg-scale ~/wallpaper.jpg # Wallpaper
exec --no-startup-id dunst # Notificaties
exec --no-startup-id xset r rate 300 50 # Keyboard repeat rate
exec --no-startup-id numlockx on # Numlock aan
# exec vs exec_always
# exec → enkel bij eerste start
# exec_always → ook na $mod+Shift+r (config reload)
exec_always --no-startup-id picom --config ~/.config/picom/picom.conf
5.4 Workspace Indeling
# Workspaces benoemen
set $ws1 "1: "
set $ws2 "2: "
set $ws3 "3: "
set $ws4 "4: "
set $ws5 "5: "
# Vensters automatisch naar workspace sturen
assign [class="firefox"] $ws2
assign [class="Code"] $ws3
assign [class="discord"] $ws5
assign [class="Spotify"] $ws5
Class van een venster vinden
xprop | grep WM_CLASS
# Klik dan op het venster
5.5 Gaps (spaties tussen vensters)
# In ~/.config/i3/config:
gaps inner 8
gaps outer 4
# Per workspace
workspace $ws1 gaps inner 0 # Geen gaps op workspace 1
# Smart gaps (geen gaps als slechts 1 venster)
smart_gaps on
smart_borders on
5.6 Floating Vensters
# Specifieke apps altijd floating
for_window [class="Pavucontrol"] floating enable
for_window [class="Nm-connection-editor"] floating enable
for_window [title="File Transfer*"] floating enable
for_window [window_role="pop-up"] floating enable
for_window [window_role="bubble"] floating enable
# Floating venster centreren
for_window [class="Pavucontrol"] move position center
5.7 Kleuren
# Venster border kleuren
# class border backgr text indicator child_border
client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577
client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a
client.unfocused #333333 #222222 #888888 #292d2e #222222
client.urgent #2f343a #900000 #ffffff #900000 #900000
# Borderdikte
default_border pixel 2
default_floating_border pixel 2
5.8 Eigen Shortcuts
# Screenshots
bindsym Print exec --no-startup-id scrot ~/Screenshots/%Y-%m-%d_%H%M%S.png
bindsym $mod+Print exec --no-startup-id scrot -s ~/Screenshots/%Y-%m-%d_%H%M%S.png
# Volume
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
# Helderheid
bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set +5%
bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 5%-
# Lock screen
bindsym $mod+l exec --no-startup-id i3lock -c 000000
# File manager
bindsym $mod+shift+f exec --no-startup-id thunar
# Browser
bindsym $mod+shift+b exec --no-startup-id firefox
6. Statusbalk — i3bar vs Polybar
6.1 i3bar (ingebouwd)
bar {
status_command i3status
position top
font pango:JetBrainsMono Nerd Font 10
colors {
background #282828
statusline #ebdbb2
separator #504945
focused_workspace #458588 #458588 #282828
active_workspace #282828 #3c3836 #ebdbb2
inactive_workspace #282828 #282828 #a89984
urgent_workspace #cc241d #cc241d #282828
}
}
~/.config/i3status/config:
general {
colors = true
interval = 5
}
order += "wireless _first_"
order += "ethernet _first_"
order += "memory"
order += "cpu_usage"
order += "battery all"
order += "tztime local"
wireless _first_ {
format_up = "W: (%quality at %essid) %ip"
format_down = "W: down"
}
memory {
format = "RAM: %used / %total"
threshold_degraded = "10%"
}
cpu_usage {
format = "CPU: %usage"
}
battery all {
format = "%status %percentage %remaining"
}
tztime local {
format = "%d-%m-%Y %H:%M:%S"
}
6.2 Polybar (aanbevolen)
Polybar is krachtiger en meer customiseerbaar dan i3bar.
# Installeren
sudo pacman -S polybar
# of via yay als niet in repos
yay -S polybar
# Config locatie
~/.config/polybar/config.ini
# Starten (voeg toe aan i3 config)
exec_always --no-startup-id ~/.config/polybar/launch.sh
~/.config/polybar/launch.sh:
#!/bin/bash
killall -q polybar
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
polybar main &
Basis polybar config:
[colors]
background = #282828
foreground = #ebdbb2
primary = #458588
alert = #cc241d
[bar/main]
monitor = ${env:MONITOR:}
width = 100%
height = 28
background = ${colors.background}
foreground = ${colors.foreground}
font-0 = JetBrainsMono Nerd Font:size=10
modules-left = i3 xwindow
modules-center = date
modules-right = pulseaudio memory cpu battery
[module/i3]
type = internal/i3
format = <label-state> <label-mode>
label-focused = %name%
label-focused-padding = 2
label-unfocused = %name%
label-unfocused-padding = 2
label-urgent = %name%
label-urgent-padding = 2
[module/date]
type = internal/date
interval = 1
date = %d-%m-%Y
time = %H:%M:%S
label = %date% %time%
[module/pulseaudio]
type = internal/pulseaudio
label-volume = %percentage%%
label-muted = 婢 muted
[module/memory]
type = internal/memory
interval = 2
label = %percentage_used%%
[module/cpu]
type = internal/cpu
interval = 2
label = %percentage%%
[module/battery]
type = internal/battery
battery = BAT0
adapter = AC
label-charging = %percentage%%
label-discharging = %percentage%%
label-full = Full
7. Compositor — Picom
Picom zorgt voor transparantie, schaduwen en animaties.
sudo pacman -S picom
~/.config/picom/picom.conf:
# Schaduwen
shadow = true
shadow-radius = 10
shadow-offset-x = -10
shadow-offset-y = -10
shadow-opacity = 0.5
shadow-exclude = [
"class_g = 'i3-frame'",
"_GTK_FRAME_EXTENTS@:c"
];
# Transparantie
inactive-opacity = 0.9
active-opacity = 1.0
frame-opacity = 1.0
inactive-opacity-override = false
# Blur (vereist picom fork met blur support, bijv. picom-jonaburg)
blur-method = "dual_kawase"
blur-strength = 5
blur-background = true
# Animaties (picom-jonaburg)
transition-length = 150
transition-pow-x = 0.1
transition-pow-y = 0.1
transition-pow-w = 0.1
transition-pow-h = 0.1
size-transition = true
# Backend
backend = "glx"
vsync = true
# Starten
exec_always --no-startup-id picom --config ~/.config/picom/picom.conf -b
8. Essentiële Tools voor i3
# App launcher
sudo pacman -S rofi
# Notificaties
sudo pacman -S dunst
# Wallpaper
sudo pacman -S feh
sudo pacman -S nitrogen # GUI alternatief
# Lock screen
sudo pacman -S i3lock
yay -S i3lock-color # Meer opties
# Screenshot
sudo pacman -S scrot
sudo pacman -S flameshot # GUI alternatief
# Clipboard manager
sudo pacman -S xclip
sudo pacman -S clipmenu
# Volume
sudo pacman -S pavucontrol # GUI
sudo pacman -S pamixer # CLI
# Helderheid
sudo pacman -S brightnessctl
# Network applet
sudo pacman -S network-manager-applet
# File manager
sudo pacman -S thunar # Lichtgewicht
sudo pacman -S ranger # TUI (terminal)
9. EOS Package Management
9.1 pacman
# Volledig systeem updaten
sudo pacman -Syu
# Pakket installeren
sudo pacman -S pakket
# Verwijderen (+ ongebruikte deps)
sudo pacman -Rs pakket
# Zoeken
pacman -Ss zoekterm
# Info
pacman -Si pakket # Repository
pacman -Qi pakket # Geïnstalleerd
# Verweesde pakketten opruimen
sudo pacman -Rns $(pacman -Qdtq)
# Cache opruimen
sudo pacman -Sc # Verwijder niet-geïnstalleerde
sudo paccache -r # Bewaar 3 versies (pacman-contrib)
# Welk pakket levert dit bestand?
pacman -Qo /usr/bin/i3
# Alle bestanden van pakket
pacman -Ql i3-wm
9.2 yay (AUR Helper)
# Installeren (indien nog niet aanwezig op EOS)
sudo pacman -S --needed git base-devel
git clone https://aur.archlinux.org/yay.git
cd yay && makepkg -si
# Gebruik — zelfde syntax als pacman + AUR
yay -Syu # Update alles incl. AUR
yay -S pakket # Installeren (ook AUR)
yay -Ss zoekterm # Zoeken incl. AUR
yay -Yc # Verweesde AUR pakketten verwijderen
9.3 EOS Specifieke Tools
# EOS update tool (GUI)
eos-update
# Mirrors updaten
eos-rankmirrors
# Welcome app
eos-welcome
# EOS log bekijken
eos-log-tool
10. Theming & Rice
10.1 GTK Thema
# Installeren
sudo pacman -S lxappearance # GUI configuratie
sudo pacman -S nwg-look # Wayland alternatief
# Populaire thema's
yay -S catppuccin-gtk-theme-mocha
yay -S gruvbox-dark-gtk
yay -S dracula-gtk-theme
sudo pacman -S arc-gtk-theme
sudo pacman -S materia-gtk-theme
# Icons
sudo pacman -S papirus-icon-theme
yay -S catppuccin-papirus-folders
10.2 Lettertypen
# Nerd Fonts (voor icons in terminal/polybar)
sudo pacman -S ttf-jetbrains-mono-nerd
sudo pacman -S ttf-hack-nerd
sudo pacman -S ttf-firacode-nerd
yay -S nerd-fonts-complete # Alle Nerd Fonts
# Emoji
sudo pacman -S noto-fonts-emoji
sudo pacman -S ttf-twemoji
10.3 Terminal Thema (Alacritty)
~/.config/alacritty/alacritty.toml:
[colors.primary]
background = "#1e1e2e"
foreground = "#cdd6f4"
[colors.normal]
black = "#45475a"
red = "#f38ba8"
green = "#a6e3a1"
yellow = "#f9e2af"
blue = "#89b4fa"
magenta = "#f5c2e7"
cyan = "#94e2d5"
white = "#bac2de"
[font.normal]
family = "JetBrainsMono Nerd Font"
style = "Regular"
[font]
size = 11.0
10.4 Rofi Thema
# Thema selecteren
rofi-theme-selector
# Config locatie
~/.config/rofi/config.rasi
# Catppuccin thema installeren
yay -S rofi-lbonn-git # Wayland versie
~/.config/rofi/config.rasi:
configuration {
modi: "drun,run,window";
show-icons: true;
icon-theme: "Papirus-Dark";
font: "JetBrainsMono Nerd Font 12";
}
@import "~/.config/rofi/catppuccin-mocha.rasi"
11. Multi-Monitor
# Monitors detecteren
xrandr
# Monitor instellen
xrandr --output HDMI-1 --auto --right-of eDP-1
# In i3 config:
exec --no-startup-id xrandr --output HDMI-1 --auto --right-of eDP-1
# Workspace aan monitor koppelen
workspace $ws1 output eDP-1
workspace $ws2 output eDP-1
workspace $ws3 output HDMI-1
workspace $ws4 output HDMI-1
# arandr = GUI voor xrandr
sudo pacman -S arandr
# autorandr — auto-detectie van monitor setups
sudo pacman -S autorandr
autorandr --save home
autorandr --save werk
autorandr --change # auto wisselen
12. Dotfiles Beheren
Dotfiles zijn je configuratiebestanden. Ze bijhouden in Git maakt herstel na herinstallatie triviaal.
# Methode 1: Bare Git Repository (aanbevolen)
git init --bare $HOME/.dotfiles
alias config='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
config config --local status.showUntrackedFiles no
# Gebruik
config add ~/.config/i3/config
config add ~/.config/alacritty/alacritty.toml
config add ~/.config/polybar/config.ini
config commit -m "Voeg i3 en alacritty config toe"
config push
# Op nieuw systeem herstellen
git clone --bare <jouw-repo-url> $HOME/.dotfiles
alias config='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
config checkout
# Methode 2: Symlinks met stow
sudo pacman -S stow
cd ~/dotfiles
stow i3 # Maakt symlinks vanuit dotfiles/i3/ naar ~/.config/i3/
stow alacritty
Welke bestanden?
~/.config/i3/config
~/.config/polybar/
~/.config/alacritty/
~/.config/rofi/
~/.config/picom/
~/.config/dunst/
~/.config/ranger/
~/.bashrc of ~/.zshrc
~/.config/starship.toml
13. Probleemoplossing
13.1 i3 Start Niet
# Log bekijken
~/.local/share/i3/log
journalctl --user -u i3 -b
# Config syntax controleren
i3 -C # Valideert config zonder te starten
13.2 Applicatie Crash / Hangt
# Venster forceren sluiten
$mod+Shift+q
# Of via terminal
xkill # Cursor wordt X, klik op venster
13.3 Beeldscherm Issues
# Display info
xdpyinfo | grep dimensions
xrandr --listmonitors
# HiDPI schaling
echo 'Xft.dpi: 192' >> ~/.Xresources
xrdb ~/.Xresources
# In i3 config voor HiDPI:
exec --no-startup-id xrandr --dpi 192
13.4 Geluidskaart Issues
# PulseAudio herstarten
pulseaudio --kill && pulseaudio --start
# PipeWire status (moderne vervanger)
systemctl --user status pipewire
systemctl --user status wireplumber
# Beschikbare sinks
pactl list sinks short
14. Handige i3 Commando's via CLI
# i3-msg — stuur commando's naar i3
i3-msg workspace 3
i3-msg floating toggle
i3-msg fullscreen toggle
i3-msg layout tabbed
i3-msg exec firefox
# Boomstructuur bekijken
i3-msg -t get_tree | python3 -m json.tool | less
# Huidige workspace info
i3-msg -t get_workspaces | python3 -m json.tool
15. Minimale i3 Config (Startpunt)
# ~/.config/i3/config — clean startpunt
set $mod Mod4
set $terminal alacritty
set $browser firefox
set $files thunar
font pango:JetBrainsMono Nerd Font 10
# Floating modifier
floating_modifier $mod
# Borders
default_border pixel 2
default_floating_border pixel 2
gaps inner 8
gaps outer 0
smart_gaps on
# Basisshortcuts
bindsym $mod+Return exec $terminal
bindsym $mod+d exec rofi -show drun -show-icons
bindsym $mod+Shift+f exec $files
bindsym $mod+Shift+b exec $browser
bindsym $mod+q kill
# Focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# Verplaatsen
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
# Layout
bindsym $mod+e layout toggle split
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+f fullscreen toggle
bindsym $mod+Shift+space floating toggle
# Workspaces
bindsym $mod+1 workspace number 1
bindsym $mod+2 workspace number 2
bindsym $mod+3 workspace number 3
bindsym $mod+4 workspace number 4
bindsym $mod+5 workspace number 5
bindsym $mod+Shift+1 move container to workspace number 1
bindsym $mod+Shift+2 move container to workspace number 2
bindsym $mod+Shift+3 move container to workspace number 3
bindsym $mod+Shift+4 move container to workspace number 4
bindsym $mod+Shift+5 move container to workspace number 5
# Volume
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
# Scherm
bindsym Print exec scrot ~/Screenshots/%Y%m%d_%H%M%S.png
bindsym $mod+l exec i3lock -c 000000
# i3 beheer
bindsym $mod+Shift+r restart
bindsym $mod+Shift+e exec i3-nagbar -t warning -m 'Afsluiten?' -B 'Ja' 'i3-msg exit'
# Resize mode
mode "resize" {
bindsym h resize shrink width 5 px or 5 ppt
bindsym j resize grow height 5 px or 5 ppt
bindsym k resize shrink height 5 px or 5 ppt
bindsym l resize grow width 5 px or 5 ppt
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"
# Autostart
exec --no-startup-id nm-applet
exec --no-startup-id picom -b
exec --no-startup-id feh --bg-scale ~/wallpaper.jpg
exec_always --no-startup-id ~/.config/polybar/launch.sh
# Statusbalk
bar {
status_command i3status
position top
}
Fox & Fish Cybersecurity | Intern gebruik