Move stock Hyprland bindings into defaults
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
#!/bin/bash
|
||||
|
||||
source "$(dirname "${BASH_SOURCE[0]}")/base-test.sh"
|
||||
|
||||
require_command lua
|
||||
|
||||
run_application_bindings() {
|
||||
local home="$1"
|
||||
local prelude="${2:-}"
|
||||
|
||||
HOME="$home" XDG_CONFIG_HOME="$home/.config" XDG_STATE_HOME="$home/.local/state" OMARCHY_PATH="$ROOT" OMARCHY_BINDING_PRELUDE="$prelude" lua <<'LUA'
|
||||
package.path = os.getenv("HOME") .. "/.config/?.lua;" .. os.getenv("OMARCHY_PATH") .. "/?.lua;" .. package.path
|
||||
|
||||
local prelude = os.getenv("OMARCHY_BINDING_PRELUDE") or ""
|
||||
if prelude ~= "" then
|
||||
assert(load(prelude))()
|
||||
end
|
||||
|
||||
hl = {
|
||||
dsp = {
|
||||
exec_cmd = function(command)
|
||||
return { kind = "exec", arg = command }
|
||||
end,
|
||||
},
|
||||
bind = function(keys, dispatcher, opts)
|
||||
opts = opts or {}
|
||||
if opts.description then
|
||||
print(keys .. "\t" .. opts.description)
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
require("default.hypr.helpers")
|
||||
require("default.hypr.bindings.applications")
|
||||
LUA
|
||||
}
|
||||
|
||||
run_omarchy_bindings() {
|
||||
local home="$1"
|
||||
local prelude="${2:-}"
|
||||
|
||||
HOME="$home" XDG_CONFIG_HOME="$home/.config" XDG_STATE_HOME="$home/.local/state" OMARCHY_PATH="$ROOT" OMARCHY_BINDING_PRELUDE="$prelude" lua <<'LUA'
|
||||
package.path = os.getenv("HOME") .. "/.config/?.lua;" .. os.getenv("OMARCHY_PATH") .. "/?.lua;" .. package.path
|
||||
|
||||
local function proxy()
|
||||
return setmetatable({}, {
|
||||
__index = function(self, key)
|
||||
local value = proxy()
|
||||
rawset(self, key, value)
|
||||
return value
|
||||
end,
|
||||
__call = function()
|
||||
return {}
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
local prelude = os.getenv("OMARCHY_BINDING_PRELUDE") or ""
|
||||
if prelude ~= "" then
|
||||
assert(load(prelude))()
|
||||
end
|
||||
|
||||
hl = setmetatable({
|
||||
dsp = proxy(),
|
||||
bind = function(keys, dispatcher, opts)
|
||||
opts = opts or {}
|
||||
if opts.description then
|
||||
print(keys .. "\t" .. opts.description)
|
||||
end
|
||||
end,
|
||||
config = function() end,
|
||||
env = function() end,
|
||||
monitor = function() end,
|
||||
window_rule = function() end,
|
||||
workspace_rule = function() end,
|
||||
layer_rule = function() end,
|
||||
gesture = function() end,
|
||||
animation = function() end,
|
||||
curve = function() end,
|
||||
exec_cmd = function() end,
|
||||
dispatch = function() end,
|
||||
on = function() end,
|
||||
timer = function() end,
|
||||
get_config = function() return nil end,
|
||||
get_active_window = function() return nil end,
|
||||
}, {
|
||||
__index = function()
|
||||
return function()
|
||||
return {}
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
require("default.hypr.omarchy")
|
||||
LUA
|
||||
}
|
||||
|
||||
tmpdir=$(mktemp -d)
|
||||
trap 'rm -rf "$tmpdir"' EXIT
|
||||
|
||||
fresh_home="$tmpdir/fresh-home"
|
||||
mkdir -p "$fresh_home"
|
||||
fresh_output=$(run_application_bindings "$fresh_home")
|
||||
grep -Fq $'SUPER + RETURN Terminal' <<<"$fresh_output" || fail "default application bindings include essentials"
|
||||
grep -Fq $'SUPER + SHIFT + A ChatGPT' <<<"$fresh_output" || fail "default application bindings include preinstalled web apps"
|
||||
pass "default application bindings load from package defaults"
|
||||
|
||||
removed_home="$tmpdir/removed-home"
|
||||
mkdir -p "$removed_home/.local/state/omarchy"
|
||||
touch "$removed_home/.local/state/omarchy/preinstalls-removed"
|
||||
removed_output=$(run_application_bindings "$removed_home")
|
||||
grep -Fq $'SUPER + RETURN Terminal' <<<"$removed_output" || fail "preinstall removal keeps essential bindings"
|
||||
if grep -Fq $'SUPER + SHIFT + A ChatGPT' <<<"$removed_output"; then
|
||||
fail "preinstall removal skips preinstalled web app bindings"
|
||||
fi
|
||||
pass "preinstall removal flag skips optional application bindings"
|
||||
|
||||
variable_home="$tmpdir/variable-home"
|
||||
mkdir -p "$variable_home"
|
||||
variable_output=$(run_application_bindings "$variable_home" 'omarchy_preinstalled_bindings = false')
|
||||
grep -Fq $'SUPER + RETURN Terminal' <<<"$variable_output" || fail "preinstalled binding variable keeps essential bindings"
|
||||
if grep -Fq $'SUPER + SHIFT + A ChatGPT' <<<"$variable_output"; then
|
||||
fail "preinstalled binding variable skips optional application bindings"
|
||||
fi
|
||||
pass "preinstalled binding variable skips optional application bindings"
|
||||
|
||||
no_bindings_home="$tmpdir/no-bindings-home"
|
||||
mkdir -p "$no_bindings_home"
|
||||
no_bindings_output=$(run_omarchy_bindings "$no_bindings_home" 'omarchy_default_bindings = false')
|
||||
[[ -z $no_bindings_output ]] || fail "default binding variable disables all Omarchy bindings" "$no_bindings_output"
|
||||
pass "default binding variable disables all Omarchy bindings"
|
||||
|
||||
migration=$(grep -rl 'Move stock Hyprland user overrides into package defaults' "$ROOT/migrations" | head -n 1 || true)
|
||||
[[ -n $migration ]] || fail "Hyprland default config migration exists"
|
||||
|
||||
migration_home="$tmpdir/migration-home"
|
||||
mkdir -p "$migration_home/.config/hypr"
|
||||
cat >"$migration_home/.config/hypr/bindings.lua" <<'LUA'
|
||||
require("default.hypr.bindings.media")
|
||||
require("default.hypr.bindings.clipboard")
|
||||
require("default.hypr.bindings.tiling-v2")
|
||||
require("default.hypr.bindings.utilities")
|
||||
|
||||
-- Application bindings without Omarchy's preinstalled web apps, TUIs, or desktop apps.
|
||||
o.bind("SUPER + RETURN", "Terminal", { omarchy = "terminal" })
|
||||
o.bind("SUPER + SHIFT + RETURN", "Browser", { omarchy = "browser" })
|
||||
o.bind("SUPER + SHIFT + F", "File manager", { omarchy = "nautilus" })
|
||||
o.bind("SUPER + ALT + SHIFT + F", "File manager (cwd)", { omarchy = "nautilus-cwd" })
|
||||
o.bind("SUPER + SHIFT + B", "Browser", { omarchy = "browser" })
|
||||
o.bind("SUPER + SHIFT + ALT + B", "Browser (private)", { omarchy = "browser --private" })
|
||||
o.bind("SUPER + SHIFT + N", "Editor", { omarchy = "editor" })
|
||||
LUA
|
||||
HOME="$migration_home" OMARCHY_PATH="$ROOT" bash -euo pipefail "$migration" >/dev/null
|
||||
cmp -s "$ROOT/config/hypr/bindings.lua" "$migration_home/.config/hypr/bindings.lua" ||
|
||||
fail "plain legacy bindings migrate to the user override stub"
|
||||
[[ -f $migration_home/.local/state/omarchy/preinstalls-removed ]] ||
|
||||
fail "plain legacy bindings preserve preinstall removal state"
|
||||
pass "migration converts plain legacy bindings to package-owned defaults"
|
||||
|
||||
upgrade_script="$ROOT/bin/omarchy-upgrade-to-4"
|
||||
grep -Fq 'touch "$state_dir/preinstalls-removed"' "$upgrade_script" ||
|
||||
fail "upgrade-to-4 preserves preinstall removal state"
|
||||
|
||||
mark_line=$(awk '/^mark_removed_preinstalls_from_legacy_bindings$/ { print NR; exit }' "$upgrade_script")
|
||||
copy_line=$(awk '/^copy_always_config_defaults$/ { print NR; exit }' "$upgrade_script")
|
||||
[[ -n $mark_line && -n $copy_line ]] || fail "upgrade-to-4 preinstall marker and config refresh calls exist"
|
||||
(( mark_line < copy_line )) || fail "upgrade-to-4 detects plain legacy bindings before overwriting Hyprland bindings"
|
||||
pass "upgrade-to-4 preserves preinstall removal before refreshing Hyprland bindings"
|
||||
Reference in New Issue
Block a user