Getting Started - MorgenWM

Getting Started

Deutsche Version

Step 1: Install Dependencies

Setup builds MorgenWM itself and does not install its runtime tools. Install only what you actually need:

  • Bare (minimal preset): nothing extra beyond the core deps below.
  • Full preset (panel + wallpaper + launcher + idle-lock + auth + screen temp + screenshot + terminal + browser + emoji): also install wbg, vibepanel, fuzzel, swayidle, waylock, mate-polkit, wlsunset, grim, slurp, wl-clipboard, wtype, xdg-user-dirs, foot, firefox, glow (markdown browser for the docs menu entry), and an emoji font such as noto-fonts-emoji. Setup also clones bemoji (the emoji picker) into ~/.local/bin and downloads its emoji database.

Core dependencies (needed for any preset):

DistroCommand
Arch Linuxsudo pacman -S river nim wlr-randr libxkbcommon pkgconf
FedoraSee note below
Void LinuxSee note below
Alpine LinuxSee note below

Required packages in general:

  • Nim >= 2.0.0 (build only)
  • River >= 0.4
  • libxkbcommon (runtime, linked at build time for keyboard-layout switching)
  • wlr-randr (optional, only needed for custom monitor modes)

The river protocol bindings are vendored in the repo, so no bindgen, c2nim or network access is needed at build time.

Fedora

Nim is not in the default Fedora repositories. Enable the Terra repository first, then install the dependencies:

sudo dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release
sudo dnf install nim river wayland-devel libxkbcommon-devel pkgconfig wlr-randr

Alpine Linux

doas apk add nim river wayland-dev libxkbcommon-dev pkgconf wlr-randr

Void Linux

MorgenWM is available in the Void Community Repository (oco), which provides 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

# Install the repository key
curl -fsSL "https://codeberg.org/oSoWoSo/oco/raw/branch/OCO/keys/oco-repo-key.plist" \
  -o /tmp/oco-repo-key.plist 2>/dev/null || \
curl -fsSL "https://raw.githubusercontent.com/oSoWoSo/Void_Community_Repository/OCO/keys/oco-repo-key.plist" \
  -o /tmp/oco-repo-key.plist
sudo cp /tmp/oco-repo-key.plist /var/db/xbps/keys/oco-repo-key.plist

# Update and install
sudo xbps-install -S morgenwm

Full preset extras (only needed if you pick the full preset):

DistroInstall
Arch Linuxyay -S vibepanel-bin wbg (AUR) + sudo pacman -S fuzzel swayidle waylock mate-polkit wlsunset grim slurp wl-clipboard wtype xdg-user-dirs foot firefox glow noto-fonts-emoji
FedoraEnable Terra or COPR, then sudo dnf install vibepanel wbg fuzzel swayidle waylock mate-polkit wlsunset grim slurp wl-clipboard wtype xdg-user-dirs foot firefox glow google-noto-emoji-fonts
Void Linuxsudo xbps-install vibepanel wbg fuzzel swayidle waylock mate-polkit wlsunset grim slurp wl-clipboard wtype xdg-user-dirs foot firefox glow noto-fonts-emoji
Alpine Linuxdoas apk add wbg fuzzel swayidle waylock mate-polkit wlsunset grim slurp wl-clipboard wtype xdg-user-dirs foot firefox glow font-noto-emoji (plus vibepanel built from source)

Fedora

Install vibepanel with the Terra repository or COPR:

# Terra
sudo dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release
sudo dnf install vibepanel

# or COPR
sudo dnf copr enable prankstr/vibepanel
sudo dnf install vibepanel

Setup does not auto-install these. Install them with your package manager, then pick the full preset during setup.

Config notes for the full preset:

  • wlsunset needs your location to set screen temperature. The config ships with a Berlin placeholder (wlsunset -l 52.52 -L 13.41). Replace it with your city's latitude and longitude in ~/.config/morgenwm/config.toml, or the tint will be off.
  • waylock has an optional config at ~/.config/waylock/config.toml (lock colors, font). Without it, it uses a plain black lock.
  • vibepanel runs with sane defaults if you have no vibepanel config yet.
  • Everything else (wbg, mate-polkit, swayidle, grim, slurp) runs directly with no config file.
  • Emoji picker (`Mod + e`): setup clones bemoji to ~/.local/bin and runs bemoji -D all to download its emoji database. To actually see emoji glyphs in fuzzel (and everywhere else), install an emoji font such as noto-fonts-emoji (Arch), google-noto-emoji-fonts (Fedora), font-noto-emoji (Alpine), or noto-fonts-emoji (Void). Without one, fuzzel shows blank boxes where the emoji should be. bemoji also needs wtype (to type the picked emoji) and wl-clipboard (to copy it).

Wallpapers:

Setup copies the bundled wallpapers to ~/.config/morgenwm/wallpapers and asks how you want them handled:

  • fixed: keep one wallpaper, no auto-change
  • random: pick a new random wallpaper on start
  • slideshow: change wallpaper every 10 minutes

The choice is saved to ~/.config/morgenwm/wallpaper.mode. The wallpaper helper (installed to ~/.local/bin/wallpaper) runs it at login, and Mod+n cycles to the next wallpaper at any time, in any mode.

You can also drive it manually:

wallpaper next               # next wallpaper
wallpaper random             # random wallpaper
wallpaper fixed /path/to/img # set a specific wallpaper
wallpaper slideshow 120      # slideshow every 2 minutes

Step 2: Build & Install

Clone, build, and optionally install to ~/.local/bin:

git clone https://codeberg.org/LinuxNation/MorgenWM.git
cd MorgenWM
chmod +x setup.sh
./setup.sh

The setup script will:

  1. Install Nim dependencies (nayland, toml_serialization)
  2. Generate River protocol bindings
  3. Build all three binaries in release mode
  4. Optionally create a config file at ~/.config/morgenwm/config.toml. The setup prompts you to pick a preset and, if you choose full, tells you which tools to install (press d to list them).
  5. Optionally copy binaries to ~/.local/bin
  6. Optionally install a desktop session entry to /usr/share/wayland-sessions/ so your display manager (GDM, SDDM, LightDM) lists MorgenWM as a session

This is a one-time step. To update later, see Updating.

First Run

If binaries were installed to ~/.local/bin:

launch_morgenwm

Or run directly from the project directory:

./bin/launch_morgenwm

launch_morgenwm reads your config to set the keyboard layout, then execs into River with MorgenWM as the init executable. You'll see River start with MorgenWM managing your windows.

If you installed the desktop session entry (Step 6 of setup), you can instead log out and pick MorgenWM from your display manager's session list. The session entry runs launch_morgenwm.

Binaries

BinaryPurpose
morgenwmThe window manager itself (River init executable; also: --version, validate)
launch_morgenwmLauncher: reads config, sets XKB layout, starts River
morgenwm_msgCLI client for the IPC socket

Configuration

On first run MorgenWM uses built-in defaults. To customize, create a config file:

mkdir -p ~/.config/morgenwm
cp example/config-minimal.toml ~/.config/morgenwm/config.toml   # bare WM
# or, for a desktop that works out of the box:
cp example/config-full.toml ~/.config/morgenwm/config.toml      # panel + wallpaper + launcher

See Configuration Reference for all available options.

To verify your config file parses correctly:

morgenwm validate

Updating

cd MorgenWM
git pull
nimble release

If you installed to ~/.local/bin, copy the new binaries:

cp bin/morgenwm bin/launch_morgenwm bin/morgenwm_msg ~/.local/bin/