#!/bin/bash source "$(dirname "${BASH_SOURCE[0]}")/base-test.sh" require_command lua resolved_input() { OMARCHY_PATH="$ROOT" OMARCHY_VCONSOLE="${1-}" lua <<'LUA' package.path = os.getenv("OMARCHY_PATH") .. "/?.lua;" .. package.path local vconsole = os.getenv("OMARCHY_VCONSOLE") local real_open = io.open io.open = function(path, mode) if path ~= "/etc/vconsole.conf" then return real_open(path, mode) end if not vconsole then return nil end local file = io.tmpfile() file:write(vconsole) file:seek("set") return file end hl = { config = function(config) local input = config.input print(("[%s] [%s] [%s]"):format(input.kb_layout, input.kb_variant, input.kb_options)) end, } o = { window = function() end } require("default.hypr.input") LUA } assert_input() { local description="$1" local expected="$2" local actual if (( $# > 2 )); then actual=$(resolved_input "$3") else actual=$(resolved_input) fi [[ $actual == "$expected" ]] || fail "$description" "expected: $expected"$'\n'"actual: $actual" pass "$description" } base_options="compose:caps,shift:both_capslock_cancel" toggle_options="$base_options,grp:alts_toggle" assert_input "missing vconsole.conf falls back to us" "[us] [] [$base_options]" assert_input "us layout passes through" "[us] [intl] [$base_options]" 'XKBLAYOUT=us XKBVARIANT=intl ' assert_input "latin layouts are left alone" "[de] [nodeadkeys] [$base_options]" 'XKBLAYOUT=de XKBVARIANT=nodeadkeys ' assert_input "non-latin layout gains us in front" "[us,ara] [,] [$toggle_options]" 'XKBLAYOUT=ara ' assert_input "prepended us keeps variants aligned" "[us,ru] [,phonetic] [$toggle_options]" 'XKBLAYOUT=ru XKBVARIANT=phonetic ' assert_input "non-latin layout in front gains us even when us trails" "[us,il,us] [,] [$toggle_options]" 'XKBLAYOUT=il,us ' hooks_conf="$ROOT/etc/mkinitcpio.conf.d/omarchy_hooks.conf" input_lua="$ROOT/default/hypr/input.lua" hooks_layouts=$(awk -F')' '/\) ;;$/ { gsub(/[[:space:]|]+/, "\n", $1); print $1 }' "$hooks_conf" | grep '^[a-z]\+$' | sort) lua_layouts=$(sed -n '/^local non_latin_layouts =/,+1p' "$input_lua" | grep -o '"[^"]*"' | tr -d '"' | tr ' ' '\n' | grep '^[a-z]\+$' | sort) [[ -n $hooks_layouts ]] || fail "non-latin layout list is readable from omarchy_hooks.conf" [[ $hooks_layouts == "$lua_layouts" ]] || fail "non-latin layout lists stay in sync" "$(diff <(echo "$hooks_layouts") <(echo "$lua_layouts"))" pass "non-latin layout lists stay in sync with the initramfs hook"