Skip to content

feat(glazewm): update schema to match GlazeWM v3 config format - #5924

Merged
hyperupcall merged 2 commits into
SchemaStore:masterfrom
latipun7:update-glazewm-schema
Jul 19, 2026
Merged

feat(glazewm): update schema to match GlazeWM v3 config format#5924
hyperupcall merged 2 commits into
SchemaStore:masterfrom
latipun7:update-glazewm-schema

Conversation

@latipun7

Copy link
Copy Markdown
Contributor

Summary

Updates the glazewm.json schema to match the current GlazeWM v3 configuration format, based on cross-referencing with the actual Rust source code (parsed_config.rs and user_config.rs).

Changes

New top-level sections

  • general — startup/shutdown/config_reload commands, focus_follows_cursor, toggle_workspace_on_refocus, cursor_jump (enabled + trigger), hide_method, show_all_in_taskbar
  • gaps — scale_with_dpi, inner_gap, outer_gap (string or per-edge object), single_window_outer_gap
  • window_effects — focused_window and other_windows, each with border, hide_title_bar, corner_style, transparency
  • window_behavior — initial_state (tiling/floating), state_defaults (floating + fullscreen)
  • binding_modes — array of {name, display_name, keybindings}

Updated existing sections

  • workspaces — from array of strings → array of objects with name, keep_alive, bind_to_monitor, display_name
  • window_rules — rewrote to new format with commands[], match[] (with operators: equals, includes, regex, not_equals, not_regex), on (WindowRuleEvent), and run_once
  • keybindings — rewrote to {commands, bindings} object format
  • commands — removed minItems constraint (empty arrays are valid, e.g. config_reload_commands: [])
  • opacity — from number → string (supports '95%' and '0.95' formats)
  • bar — kept unchanged (still valid for GlazeWM v3)

Test files (new)

  • src/test/glazewm/sample.yaml — custom test covering all new sections
  • src/test/glazewm/upstream-sample.yaml — verbatim copy of glzr-io/glazewm sample-config.yaml
  • src/test/glazewm/latipun.yaml — real-world user config

Validation

All checks pass:

  • ✅ Ajv strict mode validation
  • ✅ All 3 test files validate against schema
  • ✅ Prettier formatting applied

- Add new top-level sections: general, gaps, window_effects, window_behavior, binding_modes
- Update workspaces from array of strings to array of objects with name, keep_alive, bind_to_monitor, display_name
- Rewrite window_rules to use new match format with operators (equals, includes, regex, not_equals, not_regex)
- Rewrite keybindings to use {commands, bindings} object format
- Add on (WindowRuleEvent) and run_once to window_rules
- Add single_window_outer_gap to gaps config
- Add display_name to binding_modes
- Change opacity from number to string (supports '95%' format)
- Keep bar section unchanged (still valid)
- Add 3 test files: custom sample, upstream sample-config.yaml verbatim, and real user config
@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the PR!

This section of the codebase is owned by @madskristensen and @hyperupcall - if they write a comment saying "LGTM" then it will be merged.

@hyperupcall

Copy link
Copy Markdown
Member

Thanks

@hyperupcall
hyperupcall merged commit 6d7a695 into SchemaStore:master Jul 19, 2026
4 checks passed
@latipun7
latipun7 deleted the update-glazewm-schema branch July 19, 2026 15:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants