Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
70 lines
2.2 KiB
Bash
Executable File
70 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
source "$(dirname "${BASH_SOURCE[0]}")/base-test.sh"
|
|
|
|
require_command lua
|
|
|
|
tmpdir=$(mktemp -d)
|
|
trap 'rm -rf "$tmpdir"' EXIT
|
|
|
|
stub_dir="$tmpdir/bin"
|
|
home_dir="$tmpdir/home"
|
|
log_file="$tmpdir/hyprctl.log"
|
|
mkdir -p "$stub_dir" "$home_dir"
|
|
|
|
cat >"$stub_dir/hyprctl" <<'EOF'
|
|
#!/bin/bash
|
|
|
|
if [[ $1 == "activeworkspace" && -n $HYPRCTL_BROKEN ]]; then
|
|
printf '{}\n'
|
|
elif [[ $1 == "activeworkspace" ]]; then
|
|
printf '{"id":3,"tiledLayout":"dwindle"}\n'
|
|
else
|
|
printf '%s\n' "$*" >>"$HYPRCTL_LOG"
|
|
fi
|
|
EOF
|
|
chmod +x "$stub_dir/hyprctl"
|
|
|
|
cat >"$stub_dir/omarchy-notification-send" <<'EOF'
|
|
#!/bin/bash
|
|
:
|
|
EOF
|
|
chmod +x "$stub_dir/omarchy-notification-send"
|
|
|
|
HOME="$home_dir" HYPRCTL_LOG="$log_file" PATH="$stub_dir:$PATH" \
|
|
"$ROOT/bin/omarchy-hyprland-workspace-layout-toggle"
|
|
|
|
layout_file="$home_dir/.local/state/omarchy/workspace-layouts/3.lua"
|
|
[[ -f $layout_file ]] || fail "workspace layout toggle saves a workspace rule"
|
|
grep -Fx 'hl.workspace_rule({ workspace = "3", layout = "scrolling" })' "$layout_file" >/dev/null ||
|
|
fail "workspace layout toggle saves the selected layout"
|
|
grep -Fx 'eval hl.workspace_rule({ workspace = "3", layout = "scrolling" })' "$log_file" >/dev/null ||
|
|
fail "workspace layout toggle applies the selected layout immediately"
|
|
pass "workspace layout toggle persists and applies the selected layout"
|
|
|
|
if HOME="$home_dir" HYPRCTL_LOG="$log_file" HYPRCTL_BROKEN=1 PATH="$stub_dir:$PATH" \
|
|
"$ROOT/bin/omarchy-hyprland-workspace-layout-toggle" 2>/dev/null; then
|
|
fail "workspace layout toggle exits nonzero without a workspace id"
|
|
fi
|
|
[[ -f "$home_dir/.local/state/omarchy/workspace-layouts/null.lua" ]] &&
|
|
fail "workspace layout toggle does not persist a rule without a workspace id"
|
|
pass "workspace layout toggle ignores broken hyprctl output"
|
|
|
|
HOME="$home_dir" OMARCHY_PATH="$ROOT" lua <<'LUA'
|
|
local rules = {}
|
|
|
|
hl = {
|
|
workspace_rule = function(rule)
|
|
table.insert(rules, rule)
|
|
end,
|
|
}
|
|
|
|
dofile(os.getenv("OMARCHY_PATH") .. "/default/hypr/bootstrap.lua")
|
|
require("default.hypr.workspace-layouts")
|
|
|
|
assert(#rules == 1)
|
|
assert(rules[1].workspace == "3")
|
|
assert(rules[1].layout == "scrolling")
|
|
LUA
|
|
pass "saved workspace layouts load into Hyprland configuration"
|