# Hyprland Lua Migration Hyprland 0.55 moved configuration toward Lua. DMS now follows that path for new Hyprland setup and migration. This guide covers what changes, where files live, and how to check that your session is using the new config. ## Quick Summary DMS now deploys Hyprland as: ```text ~/.config/hypr/hyprland.lua ~/.config/hypr/dms/*.lua ``` The old hyprlang files are moved out of the active config tree: ```text ~/.config/hypr/hyprland.conf ~/.config/hypr/dms/*.conf ``` Backups are stored here: ```text ~/.config/hypr/.dms-backups// ``` ## What `dms setup` Does When Hyprland is selected, `dms setup` writes a Lua main config and DMS Lua fragments. | File | Purpose | | --- | --- | | `hyprland.lua` | Main Hyprland config. | | `dms/colors.lua` | Theme colors. | | `dms/outputs.lua` | Monitors and display settings. | | `dms/layout.lua` | Layout, gaps, borders, and decoration. | | `dms/cursor.lua` | Cursor settings. | | `dms/binds.lua` | DMS-managed default shortcuts. | | `dms/binds-user.lua` | User shortcut overrides. | | `dms/windowrules.lua` | Window rules. | `dms/binds.lua` is managed by DMS and may be refreshed by setup. Put custom keyboard shortcuts in `dms/binds-user.lua`, or use the Keyboard Shortcuts page in DMS Settings. Stock configs include a 3-finger horizontal touchpad gesture for workspace switching (`hl.gesture` in `dms/binds.lua`) and basic touchpad settings (`tap_to_click`, `natural_scroll` in `hyprland.lua`). To customize or disable gestures, add your own `hl.gesture(...)` lines to `dms/binds-user.lua`, or unset a stock gesture with `action = "unset"` matching the original fingers, direction, and modifiers. Most other existing non-empty Lua fragments are preserved. ## Legacy Config Migration During migration, DMS moves legacy active files into the backup folder so Hyprland does not see both config formats at once. DMS also migrates legacy `monitor = ...` lines from `hyprland.conf` into `dms/outputs.lua` when `outputs.lua` is empty or missing. If you already have a custom `outputs.lua`, DMS leaves it alone. ## DMS Settings Support DMS Settings now targets Lua files for Hyprland: | Settings page | Lua file | | --- | --- | | Keyboard Shortcuts | `dms/binds-user.lua` | | Displays | `dms/outputs.lua` | | Theme Colors | `dms/colors.lua` | | Cursor | `dms/cursor.lua` | | Window Rules | `dms/windowrules.lua` | The main config should include the DMS fragments: ```lua require("dms.colors") require("dms.outputs") require("dms.layout") require("dms.cursor") require("dms.binds") require("dms.binds-user") require("dms.windowrules") ``` ### Keyboard Shortcuts: Delete and Reset The Keyboard Shortcuts page exposes two actions on any DMS-managed bind: - **Delete** — removes the shortcut entirely. For default DMS shortcuts (from `dms/binds.lua`), this saves an `hl.unbind("KEY")` line into `dms/binds-user.lua` so the removal sticks across `dms setup` runs. - **Reset to default** — only visible when you are editing a user override of a DMS default. It drops your override so the original DMS default re-applies. Binds from your own `hyprland.lua` (outside the `dms/` folder) are read-only in Settings — DMS does not write into files it does not manage. ## Starting Hyprland For the Lua config to be active, Hyprland must start with: ```sh Hyprland -c ~/.config/hypr/hyprland.lua ``` If Hyprland warns that it is using an autogenerated config, or the warning mentions `hyprland.conf`, the session is not using the DMS Lua config yet. ## Verify Everything After updating DMS, run: ```sh dms setup hyprctl reload hyprctl configerrors ``` If the current session was not started from `hyprland.lua`, restart Hyprland with the Lua config and check again. Useful file checks: ```sh test -f ~/.config/hypr/hyprland.lua test ! -f ~/.config/hypr/hyprland.conf ls ~/.config/hypr/dms ``` The live `dms` folder should contain Lua files like `binds.lua`, `binds-user.lua`, `outputs.lua`, and `windowrules.lua`. Note: Hyprland 0.55 still auto-generates `hyprland.conf` if you launch it without `-c ~/.config/hypr/hyprland.lua`. DMS sweeps any stray `hyprland.conf` into `.dms-backups//` on the next `dms run` startup, so the second check above is the right long-term state. If you see `hyprland.conf` persist between `dms run` invocations, the session was not started from `hyprland.lua` — restart Hyprland with the `-c` flag (or update your session/desktop entry to include it). ## Troubleshooting If shortcuts do not work, confirm `hyprland.lua` includes both: ```lua require("dms.binds") require("dms.binds-user") ``` If `hyprctl configerrors` reports errors in `dms/binds.lua`, rerun `dms setup` with the latest DMS binary so the DMS-managed shortcut file is refreshed. If a migrated monitor setup looks wrong, compare: ```text ~/.config/hypr/dms/outputs.lua ~/.config/hypr/.dms-backups// ``` Your previous config should be available in the timestamped backup folder. ## Reference Map ```text ~/.config/hypr/ |-- hyprland.lua # Main DMS Hyprland config |-- .dms-backups/ # Timestamped backups from setup/migration `-- dms/ |-- colors.lua # Theme colors |-- outputs.lua # Monitor/output config |-- layout.lua # Layout, gaps, borders, decoration |-- cursor.lua # Cursor settings |-- binds.lua # DMS-managed default shortcuts |-- binds-user.lua # User shortcut overrides `-- windowrules.lua # DMS-managed window rules ``` Legacy files such as `hyprland.conf` and `dms/*.conf` should live in `.dms-backups//` after migration, not in the active config tree. ## Maintainer Note Embedded source files live in `core/internal/config/embedded/` and use names like `hypr-binds.lua`. Installed user files use shorter names like `dms/binds.lua`. After changing Hyprland config deployment or parsing, run: ```sh cd core go test ./internal/config ./internal/keybinds/providers ./internal/windowrules/providers go test ./... ```