● For Hyprland

Configure Hyprland without touching a config file.

Hyprform is a native GTK4/libadwaita app for editing your Hyprland config visually. No nano, no learning hyprlang, no learning Lua. Just a form.

Free and open source Β· AGPL-3.0-or-later Β· Python + GTK4

Raw config editing is hostile

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.

βœ• Without Hyprform

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?
  }
}

βœ“ With Hyprform

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"

What it does

Not a raw key-value dump, but a real, curated settings UI for the parts of your config people actually touch.

πŸ“

Reads both config formats

Works with the classic hyprlang .conf syntax and Hyprland's newer native Lua config API, whichever one your setup actually uses.

🎯

Surgical edits

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.

🧩

Follows your file layout

If your config is split across files with source = or require(...), Hyprform follows the chain and treats the whole thing as one editable graph.

πŸ—‚οΈ

A real form, not a key list

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.

πŸ”’

Honest about what it can't edit

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.

πŸ”

Search everything

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.

⌨️

Add keybinds, rules, monitors

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.

🎨

Feels native

Built with GTK4 and libadwaita, so it looks and behaves like a real part of your desktop, not a web app in a window.

πŸ§ͺ

Actually tested

A real test suite (13/13 passing) covers the parser, writer, and Lua AST classification, not just the UI.


Under the hood

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.

1

Hand-written hyprlang parser

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.

2

A real Lua AST for Lua configs

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.

3

Editable vs. opaque, classified honestly

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.

13/13
tests passing
2
config formats supported
1
line changed per edit

Install

Hyprform is Python, managed with uv. Source and build instructions live in the repo.

From source

App ID: 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.