Konfigurationsreferenz - MorgenWM

Konfigurationsreferenz

English Version

MorgenWM liest seine Konfiguration aus $XDG_CONFIG_HOME/morgenwm/config.toml (üblicherweise ~/.config/morgenwm/config.toml). Referenzkonfigurationen befinden sich im Ordner example/:

  • config-minimal.toml - minimale Fenster-Manager-Konfiguration, ohne Extras
  • config-full.toml - ein Desktop, der sofort funktioniert (Panel + Benachrichtigungen via vibepanel, Hintergrund via wbg, Launcher via fuzzel)

Kopiere eine davon nach ~/.config/morgenwm/config.toml.

Alle Felder sind optional - fehlende Werte werden auf eingebaute Standardwerte zurückgesetzt.

[general]

Allgemeines Verhalten des Fenster-Managers.

SchlüsselTypStandardBeschreibung
window_gapint12Abstand zwischen Fenstern in Pixel
border_widthint2Fensterrahmenbreite in Pixel
workspace_countint9Anzahl der Workspaces (max. 9)
overview_visible_countint3Anzahl der Fenster in der Übersichtsansicht
keyboard_layoutstring"us"XKB-Tastaturlayout (z.B. "de", "us", "fr")
autostart_delayint0Wartezeit in Sekunden vor dem Ausführen der Autostart-Befehle
mod_keystring"Mod4"Haupt-Modifier: Mod1 = Alt, Mod4 = Super/Win
windows_visibleint2Standard-Sichtzahl für neue Frames; visible_inc/visible_dec ändern sie pro Frame
windows_visible_maxint4Maximalwert, bis zu dem visible_inc zyklisch erho0308hen kann (Zyklus 1..windows_visible_max)
wide_first_windowbooltrueErstes Fenster im Frame nimmt volle Breite ein
frame_border_enabledbooltrueFarbigen Rahmen um den fokussierten Frame anzeigen
xdg_autostartboolfalseXDG-Autostart-Anwendungen automatisch starten
auto_remove_empty_framesbooltrueLeere Frames entfernen, wenn das letzte Fenster geschlossen wird
scroll_scopestring"output"Geltungsbereich für scroll_left/scroll_right und die Fensterübersicht: "output" = nur der fokussierte Monitor, "workspace" = alle Fenster des aktiven Workspaces über alle Monitore hinweg
focus_follow_pointerboolfalseFokussiert das Fenster unter dem Mauszeiger beim Darüberfahren (Fokus folgt Maus)
per_output_workspacesboolfalseJeder Monitor bekommt seinen eigenen aktiven Workspace. Wenn true, schaltet Mod+1-9 und die IPC-Workspace-Aktionen nur den fokussierten Monitor um; wenn false (Standard), schalten alle Monitore gemeinsam um
animation_framesint9Anzahl der Animationsframes für Übergänge
autostart_commandsString-Array[]Shell-Befehle, die beim Start ausgeführt werden (siehe unten)

autostart_commands

Eine Liste von Shell-Befehlen, die beim Start ausgeführt werden, definiert innerhalb von [general]:

[general]
autostart_commands = [
  "pipewire",
  "wbg -s /pfad/zum/hintergrundbild.jpg",
  "/home/benutzer/.local/bin/vibepanel",
]

Befehle werden der Reihe nach über /bin/sh -c gestartet. Sie laufen im Hintergrund (Fire-and-Forget) - MorgenWM wartet nicht auf ihre Beendigung.

Wenn xdg_autostart = true gesetzt ist, werden auch XDG-Autostart-Einträge aus /etc/xdg/autostart/ und ~/.config/autostart/ gestartet, sofern sie nicht bereits in autostart_commands aufgeführt sind.

[colors]

Fenster- und Frame-Farben in RGBA (0-255).

SchlüsselStandardBeschreibung
focused{ r = 96, g = 144, b = 255, a = 255 }Rahmenfarbe für das fokussierte Fenster
unfocused{ r = 160, g = 160, b = 160, a = 255 }Rahmenfarbe für nicht fokussierte Fenster
focused_frame_border{ r = 203, g = 212, b = 44, a = 128 }Rahmenfarbe für den fokussierten Frame

Beispiel:

[colors]
focused = { r = 96, g = 144, b = 255, a = 255 }
unfocused = { r = 160, g = 160, b = 160, a = 255 }
focused_frame_border = { r = 70, g = 254, b = 196, a = 80 }

[[pointer_bindings]]

Pointer-Belegungen ordnen Maustasten Aktionen zu. Jede Belegung hat eine Taste, Modifier und eine Aktion.

[[pointer_bindings]]
button = "left"
modifiers = ["Mod"]
action = "move"

[[pointer_bindings]]
button = "right"
modifiers = ["Mod"]
action = "resize"

button kann left, right, middle, side oder extra sein. "Mod" wird zu dem Wert aufgelöst, der in [general] als mod_key gesetzt ist; andere gültige Modifier-Namen sind dieselben wie bei den Tastenbelegungen. Jede der unter `[[keybindings]]` aufgeführten Aktionen kann verwendet werden.

Die Standardbelegungen erhalten das klassische River-Verhalten: Mod + linke Maustaste ziehen verschiebt das Fenster, Mod + rechte Maustaste ziehen ändert die Größe.

Snap-to-Grid beim Ziehen. Ein verkacheltes Fenster wird beim Ziehen mit Mod + linke Taste für die Dauer des Ziehvorgangs aus dem Layout gehoben, sodass es dem Zeiger frei folgt, und beim Loslassen an der Stelle im Raster wieder eingerastet, über der sich der Zeiger befindet. Wird es über einem Panel oder außerhalb des nutzbaren Bereichs losgelassen, fällt es in den fokussierten Frame zurück. Ein bereits floatinges Fenster wird beim Ziehen nur verschoben und bleibt floating. Größenänderung eines verkachelten Fensters mit Mod + rechter Taste macht es floating (kein Zurückrasten).

[[keybindings]]

Tastenbelegungen werden als Array von Tabellen definiert. Jede Belegung hat einen Schlüssel, Modifier und eine Aktion.

[[keybindings]]
key = "Return"
modifiers = ["Mod"]
action = "spawn:foot"

"Mod" wird zu dem Wert aufgelöst, der in [general] als mod_key gesetzt ist. Andere gültige Modifier-Namen: Shift, Ctrl, Mod1 (Alt), Mod4 (Super).

Aktionen

AktionBeschreibung
spawn:<Befehl>Programm starten (z.B. spawn:firefox, spawn:foot)
close / killFokussiertes Fenster schließen
exit / quitMorgenWM beenden
toggle_fullscreen / fullscreenVollbild für das fokussierte Fenster umschalten
toggle_wide / wideBreitmodus umschalten (fokussiertes Fenster nimmt volle Breite ein; wird gelöscht, wenn ein Geschwisterfenster im selben Frame fokussiert wird)
visible_inc / windows_visible_incSichtbare Fenster pro Frame erho0308hen (zyklisch 1..windows_visible_max)
visible_dec / windows_visible_decSichtbare Fenster pro Frame verringern (zyklisch 1..windows_visible_max)
toggle_floatingFloating für das fokussierte Fenster umschalten
floatEin schwebendes Fenster wieder ins Tiling-Layout einrasten
toggle_stickySticky umschalten (auf allen Workspaces sichtbar)
scroll_left / scroll_prevFrame nach links scrollen
scroll_right / scroll_nextFrame nach rechts scrollen
focus_left / focus_prevFenster links fokussieren
focus_right / focus_next_winFenster rechts fokussieren
split_horizontalAktuellen Frame horizontal teilen
split_verticalAktuellen Frame vertikal teilen
remove_frameAktuellen Frame entfernen
cycle_window_forwardZum nächsten Fenster im Frame wechseln
cycle_window_backwardZum vorherigen Fenster im Frame wechseln
focus_frame_leftFrame links fokussieren
focus_frame_rightFrame rechts fokussieren
focus_frame_upFrame darüber fokussieren
focus_frame_downFrame darunter fokussieren
move_window_leftFokussiertes Fenster in den linken Frame verschieben
move_window_rightFokussiertes Fenster in den rechten Frame verschieben
move_window_upFokussiertes Fenster in den Frame darüber verschieben
move_window_downFokussiertes Fenster in den Frame darunter verschieben
resize_window_leftFrame vom linken Rand verkleinern
resize_window_rightFrame vom rechten Rand verkleinern
resize_window_upFrame vom oberen Rand verkleinern
resize_window_downFrame vom unteren Rand verkleinern
toggle_overviewFensterübersicht umschalten
recent_window_nextZum nächst-häufigsten Fenster wechseln
recent_window_prevZum vorher-häufigsten Fenster wechseln
workspace_NZu Workspace N wechseln (1-9)
move_to_workspace_NFokussiertes Fenster zu Workspace N verschieben (1-9)
move_to_output_NFokussiertes Fenster zu Output N verschieben (1-9), aktiver Workspace bleibt
move_to_output_left / move_to_output_rightFokussiertes Fenster auf den angrenzenden Output verschieben (Mod+Shift+Left/Right)

[[outputs]]

Konfiguriere Auflösung, Bildwiederholrate und Position pro Ausgang über wlr-randr. Erfordert wlr-randr. Verwende morgenwm_msg outputs, um Ausgangsnamen herauszufinden.

[[outputs]]
name = "DP-1"
width = 2560
height = 1440
refresh = 240.001
position_x = 0
position_y = 0

[[outputs]]
name = "DP-2"
width = 2560
height = 1440
refresh = 240.001
position_x = 2560
position_y = 0

SchlüsselTypStandardBeschreibung
namestringn/aAusgangs-Connector-Name (z.B. DP-1, HDMI-A-1)
widthintn/aHorizontale Auflösung in Pixel
heightintn/aVertikale Auflösung in Pixel
refreshfloatn/aBildwiederholrate in Hz (exakter Wert, z.B. 240.001)
position_xint0Horizontale Position im Layout (Pixel)
position_yint0Vertikale Position im Layout (Pixel)

Die Bildschirmmodi werden 2 Sekunden nach dem Start angewendet (ein festes sleep 2 gibt dem Compositor Zeit zum Initialisieren). Das refresh-Feld muss mit einem Modus übereinstimmen, den dein Monitor tatsächlich unterstützt

  • prüfe mit wlr-randr (ohne Argumente für eine Modusliste).

Konfiguration validieren

Verwende morgenwm validate, um zu prüfen, ob deine Konfigurationsdatei korrekt geparst wird, ohne den Compositor zu starten:

morgenwm validate
Exit-Codes: 0 = OK, 1 = Parse-Fehler, 2 = mit Warnungen geparst.

Der Befehl gibt eine Zusammenfassung der geparsten Werte aus und warnt vor verdächtigen Einstellungen (z.B. workspace_count außerhalb des Bereichs, leere Tastenbelegungs-Schlüssel, Ausgänge ohne Dimensionen).

Dies wird nach jeder Konfigurationsänderung empfohlen. MorgenWM fällt zur Laufzeit bei einem Parse-Fehler lautlos auf eingebaute Standardwerte zurück, sodass eine syntaktisch fehlerhafte Konfiguration scheinbar "funktioniert", während deine Einstellungen ignoriert werden.

Umgebungsvariablen

VariableBeschreibung
MORGENWM_NO_IPCWenn gesetzt, wird der IPC-Server komplett deaktiviert
NIRI_SOCKETÜberschreibt den IPC-Socket-Pfad (wird automatisch von MorgenWM gesetzt)
XDG_RUNTIME_DIRWird verwendet, um den Standard-Socket-Pfad zu finden
XDG_CONFIG_HOMEWird verwendet, um die Konfigurationsdatei zu finden
XKB_DEFAULT_LAYOUTWird automatisch aus keyboard_layout in der Konfiguration gesetzt
XDG_CURRENT_DESKTOPWird auf morgenwm gesetzt, falls nicht bereits vorhanden (beeinflusst XDG-Autostart-Filterung)