This guide walks through a complete Void Linux installation: from a base system to a running MorgenWM desktop.
A Void Linux base system with xbps working. If you installed the base image, make sure the system is up to date first. Note that xbps itself must be updated before the rest of the system:
sudo xbps-install -u xbps sudo xbps-install -Su
MorgenWM is available in the Void Community Repository (oco), which ships prebuilt binaries including a compatible river:
# Add the community repository echo 'repository=https://repo.osowoso.org/x86_64' | sudo tee /etc/xbps.d/00-VUR.conf # Update and install (xbps will ask to import the repository key, confirm it) sudo xbps-install -S sudo xbps-install morgenwm
The package installs the binaries (morgenwm, launch_morgenwm, morgenwm_msg, morgenwm_keys, morgenwm_setup), the desktop session entry and the example assets under /usr/share/morgenwm.
The wizard writes a preset config and installs docs, templates and helper scripts:
morgenwm setup
You will be asked to pick a preset:
The wizard reads its example assets from /usr/share/morgenwm. The full preset additionally downloads wallpapers, helper scripts and themes from the dotfiles repo.
The wizard does not install runtime tools. For the full preset, install them with xbps:
sudo xbps-install vibepanel wbg fuzzel swayidle waylock mate-polkit \ wlsunset grim slurp wl-clipboard wtype xdg-user-dirs foot firefox glow \ zellij fish-shell git emptty noto-fonts-emoji
What each package is for:
| Package | Purpose |
|---|---|
| vibepanel | Status bar / panel with notifications |
| wbg | Wallpaper daemon |
| fuzzel | Application launcher (Mod+d) |
| swayidle | Idle daemon (auto-locks via waylock) |
| waylock | Screen locker |
| mate-polkit | Authentication agent (sudo/polkit prompts) |
| wlsunset | Day/night screen temperature |
| grim + slurp | Screenshots (region + full screen) |
| wl-clipboard | Clipboard utilities (wl-copy/wl-paste) |
| wtype | Typing synthetic input (used by the emoji picker) |
| xdg-user-dirs | Localized ~/Pictures etc. for screenshot saving |
| foot | Terminal (Mod+Return) |
| firefox | Browser (Mod+b) |
| glow | Markdown browser for the docs menu entry |
| zellij | Terminal multiplexer (used by the dotfiles preset) |
| fish-shell | Shell (used by the dotfiles preset; package name on Void) |
| git | Version control (setup clones the dotfiles repo and bemoji) |
| emptty | CLI display manager (optional, for graphical login) |
| noto-fonts-emoji | Emoji glyphs (without it fuzzel shows blank boxes) |
If you picked the minimal preset, skip this step entirely.
Now you need a session manager and a seat manager. seatd provides seat access for wlroots compositors like River, and turnstile sets up XDG_RUNTIME_DIR (without it, Wayland sessions do not work). Install both and enable their services:
sudo xbps-install seatd turnstile sudo ln -s /etc/sv/seatd /var/service/ sudo ln -s /etc/sv/turnstiled /var/service/ sudo sv start seatd turnstiled
Add your user to the _seatd group so non-root sessions can access the seat:
sudo usermod -aG _seatd $(whoami)
Then log out and back in (so the group membership and XDG_RUNTIME_DIR take effect).
emptty is a dead simple CLI display manager that runs on a TTY. The dotfiles preset ships a user config at ~/.config/emptty that starts MorgenWM directly. Enable the service:
sudo ln -s /etc/sv/emptty /var/service/ sudo sv start emptty
On the next boot you get a login prompt on a TTY. Log in and MorgenWM starts automatically.
Log in on a TTY and run:
launch_morgenwm
launch_morgenwm reads your config to set the keyboard layout, then execs into River with MorgenWM as the init executable.
Once in the session:
To check your config parses:
morgenwm validate
sudo xbps-install -u xbps sudo xbps-install -Su