Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Umbriel

Haxorus uses Umbriel as its Wayland compositor. It owns outputs, workspaces, window placement, input, and compositor effects. Noctalia provides the shell and desktop services.

Choose Umbriel in GDM to start the session. X11 applications run through xwayland-satellite. Screen sharing and portal screenshots use xdg-desktop-portal-umbriel.

Configuration

conf/modules/de/umb.nix enables the Umbriel NixOS module and configures programs.umbriel.settings through Home Manager. The ThinkPad configuration imports umb.nix.

Home Manager generates ~/.config/umbriel/config.toml from the Nix attribute set. Umbriel does not write overrides or modify that file. Change umb.nix and rebuild instead of editing the Home Manager symlink. Umbriel watches the file and applies valid updates without a restart; it keeps the last working config if a reload fails.

The repository sets the session environment, laptop output, workspace model, layout, colors, appearance, input, keybindings, window rules, and animations. An autostart command publishes the Wayland environment and retries umbriel-session.target until systemd accepts it. This prevents a user-manager startup race from leaving the session without Noctalia. Unspecified settings retain Umbriel’s defaults. See the upstream configuration reference when adding an option.

Window-management model

Every workspace uses Dwindle. There are no Master, Scrolling, or per-workspace layout overrides. New windows split the focused tile along its longer edge and open in the right or bottom half. preserve_split = true keeps that split direction when surrounding geometry changes.

Tiled windows have 4 px gaps. Windows use 8 px corners and a 1 px border, with no outer border, blur, or shadow. Unfocused windows use 97% opacity. Colors come from desktop-theme.nix.

Super-Shift-F toggles the focused window between tiled and floating, then centers it. Other floating windows retain their own size and position unless a window rule supplies defaults. Super plus left or right mouse drag moves or resizes a window.

Workspaces

The laptop output has ten static, numbered positions. Empty workspaces remain available. Super-1 through Super-0 select positions 1 through 10 on the output under the pointer. Re-selecting the active workspace returns to the previous workspace on that output.

Workspaces belong to outputs rather than forming one global list. An unconfigured external output uses Umbriel’s default dynamic workspace model. It starts with one workspace, adds an empty workspace after the last occupied one, and removes other empty inactive workspaces.

No workspace currently overrides the global Dwindle layout. Add a workspace rule in umb.nix if a workspace needs Master or Scrolling.

When an output disconnects, Umbriel moves its windows to another enabled output. If the output reconnects, its workspaces, windows, active workspace, and layout state return to it.

Outputs

The ThinkPad panel is eDP-1. It starts at [0, 0], uses scale 1.2, and arranges its workspaces horizontally. Its mode is not fixed, so Umbriel uses the display’s preferred mode.

List connected outputs and their copyable configuration names from an Umbriel session:

umbriel outputs
umbriel outputs --json

Add or change an output.<name> entry in umb.nix to set a monitor’s mode, scale, position, workspace inventory, or workspace axis. Prefer the reported monitor name for rules tied to one physical display. Prefer a connector such as DP-1 for rules tied to one port.

Outputs without an explicit position are placed automatically from left to right. Docking and undocking therefore does not require a fixed arrangement. Disconnected windows return to their original output when it reconnects.

Scratchpad

There are no named scratchpads. Umbriel therefore provides its implicit global default scratchpad:

  • Super-Shift-S stores the focused window.
  • Super-S shows or hides all stored windows on the pointer output.
  • umbriel msg window-restore-from-scratchpad restores the focused stored window to its saved output and workspace.

There is no restore keybinding. Showing a scratchpad does not remove its windows from it. Scratchpad windows float, and the visible scratchpad dims the output by 30%. The scratchpad can roam between outputs and returns with an output after a disconnect and reconnect.

Keybindings

Mod is fixed to Super, including nested sessions. Bindings dispatch Umbriel actions or spawn commands. The same action strings can be run with umbriel msg <action>.

Applications

KeyAction
Super-ReturnOpen Ghostty.
Super-ZOpen Ghostty running Zellij.
Super-BOpen Zen Browser.
Super-EOpen Nautilus.

Windows

KeyAction
Super-QClose the focused window.
Super-Shift-FToggle floating and center the window.
Super-Shift-GToggle fullscreen.
Super-Shift-HToggle maximize.
Super-Shift-PToggle pinned state.
Super-Ctrl-H/LDecrease or increase width by 10%.
Super-Ctrl-K/JDecrease or increase height by 10%.
Super-Alt-H/LMove the Dwindle column left or right.
Super-Alt-K/JMove the window up or down.
Super-Mouse left dragMove a tiled or floating window.
Super-Mouse right dragResize a tiled or floating window.

Focus

KeyAction
Super-H, Super-LeftFocus left.
Super-J, Super-DownFocus down.
Super-K, Super-UpFocus up.
Super-L, Super-RightFocus right.

Focus follows the pointer. Moving the pointer does not warp it to the focused window, and typing does not hide it.

Workspaces

KeyAction
Super-1..0Switch to workspace 1 through 10.
Super-Shift-1..0Move the focused window to workspace 1–10.
Super-Wheel upSwitch to the previous workspace.
Super-Wheel downSwitch to the next workspace.

Wheel switching has a 150 ms cooldown. Three-finger horizontal touchpad swipes also switch workspaces.

Scratchpad

KeyAction
Super-SShow or hide the default scratchpad.
Super-Shift-SMove the focused window to the scratchpad.

Noctalia

KeyAction
Super-R, Super-Space, Super-PToggle the launcher.
Super-VToggle clipboard history.
Super-Shift-VClear clipboard history.
Super-NInvoke the latest notification.
Super-Shift-NToggle Do Not Disturb.

Media

KeyAction
Volume up/downChange output volume.
Volume muteToggle output mute.
Microphone muteToggle microphone mute.
Brightness up/downChange display brightness 5%.
Media next/previousChange tracks.
Media play/pauseToggle playback.

These hardware-key bindings work while the session is locked.

Screenshots

KeyAction
PrintCapture a region with Noctalia.
Shift-PrintCapture the focused output with Noctalia.

Screenshot bindings do not repeat.

Session

KeyAction
Super-Shift-LLock through Noctalia.
Super-EscapeToggle Noctalia’s session panel.
Super-Shift-/Toggle Umbriel’s keybinding cheatsheet.
Super-Shift-RReload the Umbriel configuration.

Power controls are available from the Noctalia session panel.

Window rules

The rules in umb.nix provide these exceptions:

  • Unfocused windows use 97% opacity.
  • Noctalia Settings opens floating at 1020×900.
  • Umbriel’s share picker opens floating at 800×600.
  • Calculator, Nautilus, PulseAudio controls, NetworkManager’s connection editor, GNOME Settings, and desktop portal windows open floating.
  • Browser picture-in-picture windows open floating, 20 px from the bottom-right corner.

Use umbriel windows to inspect the app ID and title before adding a rule. Keep rules for application behavior in umb.nix rather than relying on a window’s current title or position by hand.

Debugging

Validate the generated config and inspect compositor state:

umbriel validate
umbriel outputs
umbriel workspaces
umbriel windows
umbriel layers

Inspect the session services and logs when startup or integration fails:

systemctl --user status umbriel.service noctalia.service
journalctl --user -b -u umbriel.service -u noctalia.service
journalctl --user -b -u xdg-desktop-portal-umbriel

Umbriel can run nested in GNOME for basic compositor testing, but output, session lock, input gesture, and portal behavior must be tested in a real Umbriel session. Run umbriel validate after input updates, then test lock/unlock, suspend, screenshots, external outputs, and screen sharing.