Hyprform is a native GTK4/libadwaita app for editing your Hyprland config visually. No nano, no learning hyprlang, no learning Lua. Just a form.
Hyprland is powerful because its config is just text. That's also exactly why it's rough for anyone who isn't already fluent in it.
Open hyprland.conf in a terminal editor, guess at what decoration:blur:passes actually does, hope you didn't break the block above it, save, reload, and repeat until it looks right. Or worse, it silently doesn't apply at all.
decoration {
rounding = 10
blur {
enabled = true
size = 8
passes = 3 # what does this do again?
}
}
Open the app, click "Blur & Shadow," see labeled sliders and toggles with plain-English descriptions, change what you mean to change. Hyprform writes back only that one value, and everything else in your file stays exactly as you left it.
Blur Passes [ 3 ] "How many times the blur is applied: more passes = smoother, slower to render"
Not a raw key-value dump, but a real, curated settings UI for the parts of your config people actually touch.
Works with the classic hyprlang .conf syntax and Hyprland's newer native Lua config API, whichever one your setup actually uses.
Only the exact value you change gets rewritten. Every untouched line in your config comes back byte-for-byte identical: comments, spacing, formatting, all of it.
If your config is split across files with source = or require(...), Hyprform follows the chain and treats the whole thing as one editable graph.
Gaps, borders, rounding, blur, shadows, animations, layout, DPMS/VRR toggles, and more, all grouped into sections with plain-English labels and descriptions, not raw hyprlang key names.
Lua values that come from loops, function calls, or variables aren't guessable, so Hyprform shows their real source text instead of overwriting or misrepresenting them.
One search bar filters every setting across every category by name and description. There's also a dedicated keybind search for configs with 50+ bindings.
Build a new window rule, keybind, autostart entry, or monitor line from a form, and Hyprform writes the correct hyprlang or Lua syntax for you.
Built with GTK4 and libadwaita, so it looks and behaves like a real part of your desktop, not a web app in a window.
A real test suite (13/13 passing) covers the parser, writer, and Lua AST classification, not just the UI.
For anyone curious how a GUI can safely edit a hand-written config file without wrecking it.
Hyprform doesn't treat your config as a bag of key-value pairs to regenerate. It parses it, edits it in place, and writes back exactly what changed, for both config formats Hyprland supports.
A recursive-descent parser and writer built specifically for hyprlang's key = value and block { } grammar. Every line that isn't touched round-trips byte-identical, with comments, whitespace, and ordering all preserved.
Newer Hyprland installs use a native Lua config (hl.config(), hl.bind(), hl.env(), hl.window_rule(), hl.monitor()...). Hyprform parses this with an actual Lua abstract syntax tree, not regex.
Each Lua value is classified as either editable (a literal or array of literals) or opaque (a loop, a function call, a variable reference). Opaque values are always shown as their real source text, never guessed at or silently clobbered.
Hyprform is Python, managed with uv. Source and build instructions live in the repo.
dev.rustyisacat.Hyprform# clone the repo git clone https://github.com/rusty-workshop/hyprform.git cd hyprform # install dependencies with uv uv sync # run it uv run hyprform
Full build, packaging, and dependency details are kept up to date in the README on GitHub. That's the source of truth, not this page.