Extends #9 with the exact symptom seen on the ported machine, screenshot-confirmed 2026-08-09. Requires main @ PR #15 (a stale comment that caused this was fixed).
The symptom, precisely
- Laptop (correct): Super+Tab → hyprexpo — a 3x3 grid of NUMBERED WORKSPACES showing live wallpaper + window content; arrows navigate; releasing Super confirms.
- PC (wrong): Super+Tab → Ambxst's own overview — 2 rows x 5 columns of WINDOW cards with a 'Search windows…' box. That layout is literally
~/.config/ambxst/config/overview.json (rows: 2, columns: 5). Different feature entirely.
Why this happens (the nuance)
Super+Tab has exactly ONE owner on the laptop, and it is NOT Ambxst:
~/.config/hypr/hyprland.conf (stowed by this repo) carries ALL of it:
bind = $mod, Tab, hyprexpo:expo, toggle + bind = $mod, Tab, submap, expo
- the
plugin { hyprexpo { columns = 3 … } } block + the expo submap
(arrow nav, Super+Tab step, bindr SUPER, Super_L release-to-confirm).
binds.json intentionally contains NO Tab entry (verified:
grep '"Tab"' ~/.config/ambxst/binds.json → nothing). Upstream Ambxst's
DEFAULT binds include Super+Tab → its own overview — that default was
deleted on the laptop. A ported machine shows the wrong overview when the
Ambxst layer still carries that default: the stowed binds.json isn't the
one in effect (stow conflict left the packaged default in place), or Ambxst
regenerated defaults into ~/.local/share/ambxst/ before the real
binds.json existed, or the agent added a Tab bind while debugging.
- A now-fixed comment in hyprland.conf CLAIMED Super+Tab lives in binds.json.
If the agent followed it and created one: that is the bug. Remove it.
DO NOT DOUBLE-BIND SUPER+TAB
Never have a Tab bind in both layers. Hyprland dispatches every matching bind:
one press would toggle the hyprexpo grid AND open the Ambxst overview on top
— flicker, focus fights, 'sometimes works'. And the Ambxst side re-applies
its binds at runtime via axctl, so deleting only from hyprland.conf does not
stick; the fix must be on the binds.json side.
Fix procedure
cd ~/linux-setup && git pull # includes PR #15
# 1. confirm the stowed binds.json is live and Tab-free:
readlink ~/.config/ambxst/binds.json # should point into ~/linux-setup
grep -c '"Tab"' ~/.config/ambxst/binds.json # 0
# 2. purge any Tab bind from the generated layer, then reload Ambxst binds:
grep -n 'Tab' ~/.local/share/ambxst/hyprland.conf # expect NOTHING
# if found: your binds.json is not the repo one — restow, then Super+Alt+B
# (or restart ambxst) so axctl regenerates from the correct binds.json
# 3. hyprexpo must be installed+enabled (issue #9) or Super+Tab enters a dead
# submap: hyprpm list → hyprexpo enabled: true; relog after enabling
Known trap: plugin missing but submap present
With hyprexpo absent, bind = $mod, Tab, submap, expo still fires: the
keyboard enters the expo submap with nothing on screen and most keys dead
until Escape. If the machine 'locks up' on Super+Tab, that is this; it means
the plugin isn't loaded, not that the binds are wrong.
Verify correctness (expected laptop values)
hyprctl binds | grep -A3 ', TAB' # SUPER+TAB entries: hyprexpo:expo + submap ONLY
# (plus ALT+TAB cyclenext; NO exec/overview line for SUPER+TAB)
grep -c '"Tab"' ~/.config/ambxst/binds.json # 0
grep -c Tab ~/.local/share/ambxst/hyprland.conf # 0
hyprpm list # hyprexpo enabled: true
hyprctl dispatch hyprexpo:expo toggle # 3x3 numbered grid opens
Functional: Super+Tab shows a 3x3 grid of numbered workspaces (NOT window
cards, NO search box); holding Super and tapping Tab steps through them
alt-tab style; releasing Super lands on the selected workspace; Escape
cancels. Ambxst's 2x5 window overview must NOT appear on Super+Tab (it stays
reachable through Ambxst's own UI, unbound from this key).
Extends #9 with the exact symptom seen on the ported machine, screenshot-confirmed 2026-08-09. Requires main @ PR #15 (a stale comment that caused this was fixed).
The symptom, precisely
~/.config/ambxst/config/overview.json(rows: 2, columns: 5). Different feature entirely.Why this happens (the nuance)
Super+Tab has exactly ONE owner on the laptop, and it is NOT Ambxst:
~/.config/hypr/hyprland.conf(stowed by this repo) carries ALL of it:bind = $mod, Tab, hyprexpo:expo, toggle+bind = $mod, Tab, submap, expoplugin { hyprexpo { columns = 3 … } }block + the expo submap(arrow nav, Super+Tab step,
bindr SUPER, Super_Lrelease-to-confirm).binds.jsonintentionally contains NO Tab entry (verified:grep '"Tab"' ~/.config/ambxst/binds.json→ nothing). Upstream Ambxst'sDEFAULT binds include Super+Tab → its own overview — that default was
deleted on the laptop. A ported machine shows the wrong overview when the
Ambxst layer still carries that default: the stowed binds.json isn't the
one in effect (stow conflict left the packaged default in place), or Ambxst
regenerated defaults into
~/.local/share/ambxst/before the realbinds.json existed, or the agent added a Tab bind while debugging.
If the agent followed it and created one: that is the bug. Remove it.
DO NOT DOUBLE-BIND SUPER+TAB
Never have a Tab bind in both layers. Hyprland dispatches every matching bind:
one press would toggle the hyprexpo grid AND open the Ambxst overview on top
— flicker, focus fights, 'sometimes works'. And the Ambxst side re-applies
its binds at runtime via axctl, so deleting only from hyprland.conf does not
stick; the fix must be on the binds.json side.
Fix procedure
Known trap: plugin missing but submap present
With hyprexpo absent,
bind = $mod, Tab, submap, expostill fires: thekeyboard enters the expo submap with nothing on screen and most keys dead
until Escape. If the machine 'locks up' on Super+Tab, that is this; it means
the plugin isn't loaded, not that the binds are wrong.
Verify correctness (expected laptop values)
Functional: Super+Tab shows a 3x3 grid of numbered workspaces (NOT window
cards, NO search box); holding Super and tapping Tab steps through them
alt-tab style; releasing Super lands on the selected workspace; Escape
cancels. Ambxst's 2x5 window overview must NOT appear on Super+Tab (it stays
reachable through Ambxst's own UI, unbound from this key).