Return Caps Lock to normal and make Shift + Caps Lock the compose key (#14939)

* Return Caps Lock to normal and make Shift + Caps Lock the compose key

Caps Lock as compose, with both Shifts as Caps Lock, confused too many
people. Stock XKB has no option for compose on the shifted Caps key, so
Omarchy defines one in /etc/xkb, which libxkbcommon reads before the
system rules. The explicit actions keep the Shift level from toggling
Caps Lock. Lone Shift is no longer part of Caps Lock, which leaves it
free for input methods.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Require xkbcli so the keymap check cannot silently skip

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
David Heinemeier HanssonandClaude Opus 5.5 authored and GitHub committed 2026-10-11 09:06:59 +09:00
1 parent 0b9dace018
commit 1b5222be74
12 files changed
+64 -53

No files matched your search

+6
View File
@@ -0,0 +1,6 @@
// Omarchy's own XKB option. libxkbcommon reads /etc/xkb before the system
// rules, which supply everything else.
! include %S/evdev
! option = symbols
omarchy:shift_caps_compose = +omarchy(shift_caps_compose)
+11
View File
@@ -0,0 +1,11 @@
// Caps Lock stays Caps Lock; Shift + Caps Lock is the Compose key. The actions
// are explicit so the Shift level never inherits the key's Lock modifier,
// which would toggle Caps Lock on every compose.
partial modifier_keys
xkb_symbols "shift_caps_compose" {
key <CAPS> {
type[Group1] = "TWO_LEVEL",
symbols[Group1] = [ Caps_Lock, Multi_key ],
actions[Group1] = [ LockMods(modifiers = Lock), NoAction() ]
};
};