Shortcuts you invent, rules you write, gestures you own - all still just data

Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
Gabriel Brown
2026-08-25 01:51:59 -04:00
parent f9e5d3f470
commit 06c53d6c21
48 changed files with 4749 additions and 140 deletions
@@ -1059,6 +1059,23 @@ Singleton {
detail: "How much darker unfocused windows are",
hypr: { path: ["decoration", "dim_strength"], option: "decoration:dim_strength", readAs: "float" }
},
{
key: "colorFilter", type: "enum", def: "none", group: "accessibility",
label: "Color filter",
detail: "A whole-screen filter rendered by the compositor — grayscale, or a correction for one kind of color blindness. Costs nothing when off.",
// No hypr mapping, deliberately: hyprctl stores decoration:screen_shader
// as a shader *path*, not this enum, so a hypr: block would fail the
// shape and sweep contracts on read-back. hypr/looks.lua maps the enum
// to a shipped shader for reloads; SystemSettings.applyColorFilter does
// the same mapping live.
options: [
{ value: "none", label: "None" },
{ value: "grayscale", label: "Grayscale" },
{ value: "protanopia", label: "Protanopia" },
{ value: "deuteranopia", label: "Deuteranopia" },
{ value: "tritanopia", label: "Tritanopia" }
]
},
{
key: "visualAlerts", type: "bool", def: false, group: "accessibility",
label: "Flash the screen for notifications",
@@ -1757,6 +1774,63 @@ Singleton {
detail: "Shortcuts you have moved from their shipped chord"
},
// ── Custom shortcuts ────────────────────────────────────────────────
// [ { chord, kind, target, label } ]. Data, never code: `kind` is one of
// app | shell | window, `target` is a validated id resolved through the
// whitelist tables in hypr/actions.lua, and an entry that fails any check
// is silently not emitted. This is what keeps a user-editable file from
// being executable even though it now describes shortcuts the user
// invented. Edited through the Keyboard page, hence internal.
{
key: "customBinds", type: "json", def: [], group: "input",
internal: true,
label: "Custom shortcuts",
detail: "Shortcuts you invented: each one launches an application, triggers a shell action, or moves a window"
},
// ── Per-application window rules ────────────────────────────────────
// [ { class, label, float, center, size, workspace, noAnim, game,
// noDim, pin } ]. `class` is matched literally (hypr/rules.lua escapes
// it before Hyprland's RE2 sees it); `size` is [w, h] or null;
// `workspace` is 1..10 or null; everything else is a boolean. Rules
// matching the shell's own surfaces are refused at both ends. Edited
// through the Windows page, hence internal.
{
key: "windowRules", type: "json", def: [], group: "multitasking",
internal: true,
label: "Application window rules",
detail: "How specific applications behave when they open: floating, size, workspace, animations"
},
// ── Four-finger gestures ────────────────────────────────────────────
// Each holds {} (unassigned) or a named action { kind, target, label },
// the same shape customBinds stores and the same whitelists resolve.
// Registered at compositor config time, so assigning one reloads.
{
key: "gestureFourUp", type: "json", def: ({}), group: "touchpad",
internal: true,
label: "Four-finger swipe up",
detail: "What a four-finger upward swipe does"
},
{
key: "gestureFourDown", type: "json", def: ({}), group: "touchpad",
internal: true,
label: "Four-finger swipe down",
detail: "What a four-finger downward swipe does"
},
{
key: "gestureFourLeft", type: "json", def: ({}), group: "touchpad",
internal: true,
label: "Four-finger swipe left",
detail: "What a four-finger leftward swipe does"
},
{
key: "gestureFourRight", type: "json", def: ({}), group: "touchpad",
internal: true,
label: "Four-finger swipe right",
detail: "What a four-finger rightward swipe does"
},
// ── Display configuration ───────────────────────────────────────────
// { "<output>": { mode, scale, transform, x, y, primary, vrrMode,
// colorProfile, bitdepth, sdrBrightness, sdrSaturation, mirrorOf } },