aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/KEYBINDS.md
Commit message (Collapse)AuthorAgeFilesLines
* feat(suspend): re-enable suspend on s2idle, drop diagnostic scaffoldingLibravatar sommerfeld2 days1-13/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Confirmed root cause: this hardware's S3 (deep) firmware path triggers a fatal wake-from-suspend hang only on linux-hardened. INIT_ON_FREE + slab hardening + tighter locking turn a latent driver race that stock linux gets away with into an unrecoverable panic so early the journal isn't even flushed. mem_sleep_default=s2idle bypasses the BIOS S3 path entirely (s0ix is a pure-kernel low-power state) and suspends/resumes reliably under hardened. This is a widespread Lenovo S3 firmware issue across post-2018 ThinkPads (see Ubuntu T560, X1C9/10/11 reports). Lenovo themselves moved newer firmwares to s2idle-only. Not a linux-hardened bug per se; just hardened being a strict enough kernel to make the bug fatal. Keep: * mem_sleep_default=s2idle in etc/kernel/cmdline-linux-hardened.tmpl (only the hardened UKI; stock linux keeps unchanged shared cmdline) Revert (all the diagnostic / speculative scaffolding from the last few commits): * MODULES=(intel_lpss_pci) → MODULES=() — Arch wiki touchpad fix was not the cause here * nmi_watchdog=panic softlockup_panic=1 panic=10 — only needed to auto-reboot during diagnosis * no_console_suspend — diagnostic-only * etc/systemd/logind.conf.d/20-no-suspend.conf — masking workaround * sleep-target masking block in run_onchange_after_deploy-etc.sh.tmpl, replaced with a one-shot cleanup that removes any leftover /dev/null symlinks from systems that ran the previous version * systemd-pstore.service from systemd-units/system.txt — added only to catch the diagnostic panic * diagnose-suspend.sh helper (and its .gitignore/.chezmoiignore entries) * sway suspend → lock-session keybind workaround * power-menu.sh Suspend entry restoration * KEYBINDS.md docs
* feat(suspend): disable system suspend until hardened kernel resume issue is ↵Libravatar sommerfeld2 days1-13/+13
| | | | | | | | | | | | | | | | | | | | | | | fixed linux-hardened wedges on resume from S3 (NVMe/i915/iwlwifi driver UAF exposed by INIT_ON_FREE + slab hardening). Until root-caused, take suspend off the table while keeping lock + DPMS intact. - etc/systemd/logind.conf.d/20-no-suspend.conf: lid close, suspend key, hibernate key all map to 'lock'; IdleAction=ignore (swayidle drives DPMS+swaylock independently). - run_onchange_after_deploy-etc.sh.tmpl: mask sleep.target, suspend.target, hibernate.target, hybrid-sleep.target, suspend-then-hibernate.target via /etc/systemd/system -> /dev/null symlinks. Catches 'systemctl suspend' from any source. - dot_config/sway/config: XF86Sleep and system-mode 's' now run loginctl lock-session instead of systemctl suspend. - dot_config/sway/executable_power-menu.sh: drop Suspend entry. - KEYBINDS.md: reflect new behaviour. To re-enable later: remove the logind drop-in + symlink loop, then sudo systemctl daemon-reload.
* refactor(sway): remove super+o VPN OTP keybindLibravatar sommerfeld11 days1-1/+0
| | | | No longer needed.
* feat(sway): bspwm-style workspace back-and-forth toggleLibravatar sommerfeld2026-05-141-0/+1
| | | | | | workspace_auto_back_and_forth yes makes `workspace number N` jump back to the previously focused workspace when N is already current. Applies to both $mod+N keybinds and waybar workspace clicks.
* feat(sway): Super+o types VPN TOTP via wtypeLibravatar sommerfeld2026-05-141-0/+1
| | | | | | | Fetches the current code from pass-otp's vpn/totp entry and types it into the focused surface with wtype. Falls back to wl-copy + a notification when wtype isn't available or the focused surface lacks virtual-keyboard support (e.g. an Xwayland window).
* style: apply shfmt/prettier/just fmt driftLibravatar sommerfeld2026-05-141-12/+12
| | | | | | Pure formatter output from shfmt (2-space indent, '|' line breaks), prettier (KEYBINDS.md), and 'just fmt' (justfile blank line). No behavior change.
* refactor(notifications): drop dismissed-state machinery; pending = visibleLibravatar sommerfeld2026-05-131-5/+5
| | | | | | | | | | | | | | | | | Set mako default-timeout=0 so notifications stay until acted upon. With auto-timeout off, mako's list IS the pending set, so the $XDG_RUNTIME_DIR/mako-dismissed bridge becomes dead weight. - mako/config: default-timeout=0; drop redundant [urgency=critical] default-timeout=0 override. - Delete dismiss-visible.sh and restore-pending.sh; sway calls makoctl directly (Mod+n=dismiss, Mod+Shift+n=dismiss --all, Mod+Ctrl+n=restore as undo). - Shrink mako-status.sh to a 20-line counter of makoctl list. - Rename mako-history.py -> notification-picker.py; lists only visible, dismisses via makoctl dismiss -n <id>. - Update waybar config.jsonc on-click path. - Update KEYBINDS.md wording (no more 'marks seen' / 'pending set').
* feat(desktop): xdg-desktop-portal pinning, wob OSD, mako DND toggleLibravatar sommerfeld2026-05-131-0/+1
| | | | | | | | | | | | | | | - xdg-desktop-portal: pin wlr for ScreenCast/Screenshot, gtk for the rest, so flatpak browsers (Meet, Slack, Discord) get a working screen-share path instead of whatever the portal frontend happens to pick first. - wob: small wayland overlay bar fed via a fifo. New vol-osd.sh / brightness-osd.sh wrappers replace the bare pactl/brightnessctl invocations in keybinds so adjusting volume or backlight flashes a bar at the bottom of the screen. wob.service owns the fifo lifecycle (mkfifo before, rm after). - mako: add a [mode=do-not-disturb] section that hides notifications while the mode is active, plus a Super+x n submode binding to toggle it. Notifications still accumulate in history; just no popups.
* feat(sway): non-XF86 alternatives for media/hardware keybindsLibravatar sommerfeld2026-05-131-0/+26
| | | | | | | | | | | | | | | | | | | | | Every sway action that was reachable only via an XF86 keysym now has a Super-based alternative, so all bindings work on keyboards without a multimedia row. Frequent (direct binds, vim-direction layout on Super+Ctrl): Super+Ctrl+k/j = volume +/- Super+Ctrl+space = play/pause Super+Ctrl+l/h = next/previous track Super+Ctrl+]/[ = brightness +/- Rare (submode 'system' via Super+x; one letter runs and exits): b bluetooth · w wifi · r rfkill · s suspend · d display v pulsemixer · k KEYBINDS viewer · m mako history Escape/Return exits Existing Super+m / Super+Shift+m / Super+Shift+s already covered mic-mute / sink-mute / lock; XF86 binds untouched so the laptop's Fn-row keeps working. KEYBINDS.md updated.
* feat(sway,waybar): scratch nvim+ipython binds; bolder VPN visualsLibravatar sommerfeld2026-05-131-42/+44
| | | | | | | | | | | | | | | | | VPN module: - Pango markup colours the text directly so up/down is visually unambiguous even without CSS classes (green shield up, dim strikethrough down) - .down also gets a faint red background tint for at-a-glance scan Sway: - Super+Shift+t -> floating ghostty with nvim editing a fresh $XDG_RUNTIME_DIR/scratch-<epoch>.txt (auto-cleared on reboot via tmpfs) - Super+c -> floating ghostty with ipython (quick calculator / python scratch) KEYBINDS.md updated.
* feat(waybar,sway): htop click handler, app keybinds, VPN toggleLibravatar sommerfeld2026-05-131-0/+2
| | | | | | | | | | | | | | | | | | | | waybar: - cpu / custom/memory: on-click opens floating ghostty with htop - new custom/vpn module between custom/memory and network#bond: shows 'VPN' coloured by interface UP flag (green up, dim down); on-click toggles networkctl up/down hodor; SIGRTMIN+8 used for instant refresh after toggle sway: - Super+Shift+Return -> ghostty -e yazi - Super+Shift+b -> librewolf vpn-toggle.sh runs networkctl (no sudo) thanks to a new polkit rule allowing wheel-group members to invoke org.freedesktop.network1.* without a password prompt. systemd-networkd's polkit gate is a separate path from sudoers, so this is the idiomatic fix. KEYBINDS.md updated for both new sway bindings.
* fix(mako-history): drop Alt-d; Enter copies+dismissesLibravatar sommerfeld2026-05-131-40/+40
| | | | | | | | wofi's key_custom_N only stages an exit code; it does not actually exit on the keybind, so Alt-d alone did nothing visible. Drop the custom keybind entirely and let Enter copy+dismiss in one stroke. Esc cancels. Since dismissed entries are now hidden, walking the list with Enter is a workable replacement for the dropped "dismiss without copy" path.
* feat(mako-history): hide dismissed entries; consolidate keybindsLibravatar sommerfeld2026-05-131-40/+40
| | | | | | | | | | | | | | | | | Two behaviour changes: - Hide entries that were previously dismissed via the picker (the state file now acts as a hide-list, not a marker). The list shrinks as you process it; no more grey ' ' rows clogging the view. - Drop the secondary Alt-c custom key. wofi's '--define key_custom_N' appears unreliable past N=0, so Alt-c and Alt-d both silently failed. Reduce to a single custom slot (Alt-d) and remap actions: Enter -> copy + dismiss (was: re-emit + mark seen) Alt-d -> dismiss without copy Re-emit was rarely useful given mako already shows the bubble on arrival; copying is the common need. KEYBINDS.md updated to reflect the new action set.
* style: apply formatter drift across repoLibravatar sommerfeld2026-05-131-64/+64
| | | | | | | Pre-existing whitespace/style drift caught by `just check`. Touch nothing semantic — pure formatter output (shfmt -i 2 -ci -s, ruff, prettier, taplo). Excludes dot_config/clangd/config.yaml whose manual indentation is intentionally preserved.
* feat(privesc): migrate from opendoas to sudo-rsLibravatar sommerfeld2026-05-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | doas's one-shot password and absent 'sudo -v' kept wasting hour-long paru AUR builds. sudo-rs is a memory-safe Rust rewrite (ISRG/Ferrous Systems), drop-in CLI compatible, and the same one Ubuntu 25.10 ships as default. We follow the Arch wiki 'Using sudo-rs without the sudo package' recipe verbatim — no custom shims. - meta/base.txt: -doas-sudo-shim +sudo-rs - etc/sudoers-rs (mode 0440): wiki minimal config + NOPASSWD reboot/poweroff - etc/pam.d/sudo: 4-line copy of upstream sudo's PAM file - run_onchange_after_deploy-etc.sh.tmpl: use real sudo, deploy sudoers-rs at 0440, create /etc/pam.d/sudo-i and /usr/local/bin/{sudo,sudoedit, su,visudo} → sudo-rs symlinks idempotently - delete etc/doas.conf, dot_local/bin/{doasedit,sudo} - zshrc: drop sudo=doas/sudoedit=doasedit aliases; rewrite ss/gimme/ pacdiff/ssys to call sudo - justfile: s/doas/sudo/g (status/diff/restore helpers) - nvim: rename :DoasWrite → :SudoWrite (uses sudo -S) - sway config: reboot/poweroff buttons call sudo - bootstrap.sh: update step-5 comment - README/KEYBINDS/copilot-instructions: flip the privesc convention No Defaults overrides: sudo's defaults (passwd_tries=3, timestamp_timeout=5) already fix the doas pain, and paru SudoLoop (kept) refreshes the 5-min window via real sudo -v.
* feat: vim nav in wofi, bemoji, clip picker, webcam glyph fixLibravatar sommerfeld2026-05-131-2/+3
| | | | | | | | | | | | | | | | | | | | | | | - wofi config: key_up/key_down accept Up,k / Down,j; Ctrl-u/Ctrl-d for page jumps. Picker scripts auto-load this since they only pass --style. - waybar webcam glyph: U+F0D5D (camera/photo, looked Instagram-y) -> U+F0567 nf-md-video (handheld video camera). - Clipboard picker migrated from fuzzel to wofi for consistency with the notification picker. New driver dot_config/waybar/clip-picker.sh: pick (Mod+p) Enter pastes, Alt-d deletes delete (Mod+Shift+p) Enter deletes No clipboard "read" indicator: Wayland has no API for observing reads. - Emoji picker: bemoji on Mod+period, driven through wofi (so vim nav applies there too) and configured to type + copy via wtype. - LibreWolf flatpak: --device=all override so v4l2 webcams work. Flatpak has no finer-grained device flag. - KEYBINDS.md updated: Mod+p / Mod+Shift+p now describe wofi behavior; Mod+period documented.
* feat(notifications): persistent-pending model + wofi history pickerLibravatar sommerfeld2026-05-131-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Notifications now behave like a phone: pop briefly, auto-disappear, and remain "pending" until the user explicitly acknowledges them. The waybar count reflects pending only; idle uses a quieter glyph. State model: pending = ids in mako history/list MINUS dismissed-set state file: $XDG_RUNTIME_DIR/mako-dismissed (per-session id list) Glyph change: idle (0 pending) bell_outline U+F009C has pending bell_ring U+F009E (the previous bell_check_outline U+F11E8 "history present but nothing pending" branch is gone — there is no separate history concept now) Bindings (all now go through wrappers that maintain the dismissed-set): Super+n dismiss top visible + mark seen Super+Shift+n dismiss all visible + mark seen Super+Ctrl+n restore most recent + pop it from dismissed-set XF86Favorites history picker (rewritten on wofi) History picker (dot_config/waybar/executable_mako-history.py): - wofi --hide-search: arrow-only navigation, no fuzzy input - lines tagged [pending] / [seen] with app + summary + body - Enter re-emit via notify-send (re-shows the bubble) + mark seen - Alt-c copy "summary\nbody" to clipboard via wl-copy - Alt-d mark seen without re-showing - empty history shows a sentinel, no-op on Enter New scripts: executable_dismiss-visible.sh capture id(s) then makoctl dismiss executable_restore-pending.sh capture top-of-history id, restore, then drop that id from dismissed-set executable_mako-history.py Python rewrite (parses makoctl text output, drives wofi) Other: meta/wayland.txt add wofi (only used by this picker) dot_config/wofi/style.css minimal gruvbox style; hides input row as belt-and-suspenders even though --hide-search already does it
* feat(sway): add dictate (whisper.cpp) and ocr (tesseract) keybindsLibravatar sommerfeld2026-05-131-0/+2
| | | | | | | | | | | | Push-to-talk dictation toggle on Super+i: parecord captures 16 kHz mono WAV, whisper-cli transcribes (auto language), output is typed via wtype and copied to the clipboard. Region OCR on Super+Shift+o: slurp + grim feed tesseract (eng+por), result lands in the clipboard with a notification preview. Adds wtype to wayland.txt; tesseract (+eng/por data) and whisper.cpp + the large-v3-turbo-q5_0 model package to extra.txt.
* feat(sway): altgr-intl + compose key for PT typingLibravatar sommerfeld2026-05-131-0/+43
| | | | | | | | | - xkb variant altgr-intl: AltGr dead keys + direct Euro on AltGr+5. Preserves bare ' " ` ~ ^ for code/shell. - Compose on Right Ctrl (compose:rctrl). Leaves Right Alt for AltGr. - New dot_XCompose with %L include + PT-PT guillemets, Euro, ordinals, em/en dashes, ellipsis. - KEYBINDS.md: new Typing / Input section with AltGr + Compose cheatsheet.
* feat(sway): wire XF86 media keys (Display/Tools/Keyboard/Favorites)Libravatar sommerfeld2026-05-131-2/+4
| | | | | | | | | | - XF86Display replaces F7 for display-toggle.sh (dedicated HW key) - XF86Tools opens floating pulsemixer (audio mixer TUI) - XF86Keyboard opens KEYBINDS.md in glow (floating pager) - XF86Favorites takes over mako history picker (from Super+Alt+n) Adds generic [app_id="floating"] window rule so ghostty --class=floating windows open floating. Adds glow to meta/base.txt.
* feat(zellij): explicit split binds (Alt+| vertical, Alt+_ horizontal)Libravatar sommerfeld2026-05-131-0/+2
| | | | | tmux-style mnemonics. Bypasses NewPane's aspect-ratio auto-direction which misfires on widescreens with pane_frames disabled.
* feat(sway): monocle window cycling inside tabbed containersLibravatar sommerfeld2026-05-131-0/+2
| | | | | | | Pair with the existing '$mod+w layout tabbed' to get a bspwm-like monocle experience: one window visible, tabs along the top, status bar intact. Cycle with Super+[ and Super+] (mimics browser tab shortcuts).
* fix(sway): use read-only fuzzel history viewer for Super+Alt+nLibravatar sommerfeld2026-05-131-1/+1
| | | | | | | makoctl menu only acts on currently-visible notifications, not history (mako has no API to re-invoke arbitrary history entries). Replace with a small script that pipes 'makoctl history' through jq and fuzzel, then copies the selected entry to the clipboard for reference.
* feat(sway): keybinds to restore and browse mako notification historyLibravatar sommerfeld2026-05-131-0/+2
| | | | | - Super+Ctrl+n: makoctl restore (re-show the most recent dismissed) - Super+Alt+n: makoctl menu fuzzel --dmenu (pick any from history)
* fix(sway): rebind cliphist to $mod+p ($mod+v is splitv)Libravatar sommerfeld2026-05-131-2/+2
| | | | | $mod+v is sway's default splitv; my cliphist bind was shadowing it and emitting a warning. Move clipboard history to $mod+p / $mod+Shift+p.
* chore(fmt): apply shfmt and prettier formattingLibravatar sommerfeld2026-05-131-57/+57
| | | | | - shfmt -i 2 -ci -s on the four updated shell scripts (tabs → 2 spaces) - prettier --write on KEYBINDS.md and README.md
* feat(sway): bind brightness and ThinkPad XF86 multimedia keysLibravatar sommerfeld2026-05-131-0/+8
| | | | | | | | | | | | | | Install brightnessctl and bind all seven ThinkPad multimedia keys: - XF86MonBrightnessUp/Down → brightnessctl ±5% - XF86AudioMicMute → pactl source mute - XF86Bluetooth → bt-toggle.sh (bluetoothctl + notify-send) - XF86ScreenSaver (Fn+F2) → same as $mod+Shift+s (pause + swaylock) - XF86Sleep → systemctl suspend - XF86WLAN / XF86RFKill → rfkill toggle Note: rfkill may need a passwordless doas rule (permit nopass :wheel cmd rfkill) or group membership to write /dev/rfkill without privileges; not wired speculatively.
* feat(wayland): add cliphist clipboard historyLibravatar sommerfeld2026-05-131-0/+2
| | | | | | Install cliphist and wire two user services (text + image watchers) into sway-session.target. Bind $mod+v to pick an entry via fuzzel and $mod+Shift+v to delete one.
* refactor(sway): make thunderbird toggle tile instead of floatLibravatar sommerfeld2026-05-131-1/+1
| | | | | | | | | | | | | Scratchpad is inherently floating; the user wants the main TB window to tile normally when shown and disappear completely when hidden. Park the main window on a hidden workspace _tb via for_window, then toggle it with a small swaymsg+jq script that moves it between _tb and the currently focused workspace. Child windows (compose, viewer, calendar, prefs) are unaffected and tile wherever they spawn. - Autostart thunderbird so the window exists on login, parked on _tb. - Hide _tb from waybar's workspace list. - Update KEYBINDS.md.
* feat(sway): park thunderbird in scratchpad, toggle with Super+tLibravatar sommerfeld2026-05-131-0/+1
| | | | | | | | Autostart thunderbird on sway launch; window rule parks it in the scratchpad immediately so it runs in the background firing mako notifications. Super+t toggles the window visible/hidden without quitting the app — works around the long-standing lack of native Linux tray support in Thunderbird.
* feat(sway): add Super+z QR mode (w=write, r=read)Libravatar sommerfeld2026-05-131-0/+2
|
* fix(ghostty): restore default jump_to_prompt bindsLibravatar sommerfeld2026-05-131-2/+0
| | | | | | | Ctrl+Shift+PageUp/Down are ghostty's default jump_to_prompt binds on Linux, not tab/split binds — they were mislabeled and unbound by mistake. Restoring the defaults also reverts the Ctrl+Alt+Up/Down attempt that never reached ghostty (swallowed before the terminal).
* feat(ghostty): bind Ctrl-Alt-Up/Down to jump_to_promptLibravatar sommerfeld2026-05-131-0/+1
| | | | | | | Requires OSC 133 markers from ghostty's zsh shell integration. Ctrl+Alt+arrow avoids conflicts with letter chords in zsh/nvim and the already-used Ctrl+Shift+Up/Down scroll binds. Only works outside zellij since zellij consumes the PTY and never forwards OSC 133.
* feat(zsh): add Alt-Shift-Y widget to copy last command outputLibravatar sommerfeld2026-05-131-0/+1
| | | | | | | | | | | | Zellij has no native "copy last command output" feature, and ghostty's jump_to_prompt (Ctrl+Shift+J/K, via OSC 133) can't work inside zellij because zellij sits between the shell and the terminal emulator. Build it ourselves: a zle widget runs 'zellij action dump-screen --full', finds the last two lines matching the prompt prefix (user@host:), and pipes everything between them to wl-copy. Bound to Alt+Shift+Y. Requires running inside zellij and at least two prompts in the scrollback.
* feat(zellij): relocate mode-entry keys to Alt+Shift+* to stop shadowing ↵Libravatar sommerfeld2026-05-131-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | shell/nvim Zellij's default Ctrl+* mode-entry keys (Ctrl+p/t/r/s/o/g/b/q) were intercepted before reaching the inner shell/editor, shadowing zsh fzf bindings (Ctrl+t), history navigation (Ctrl+p/n), nvim jumps (Ctrl+o), save (Ctrl+s), etc. Unbind all conflicting Ctrl+* entries and relocate mode-entry to Alt+Shift+<first-letter-of-mode>: Alt+Shift+P Pane Alt+Shift+T Tab Alt+Shift+R Resize Alt+Shift+S Scroll Alt+Shift+O Session Alt+Shift+Z Locked (Z avoids Treewalker Alt+Shift+h/j/k/l swap) Alt+Shift+Q Quit TMUX-compat mode dropped. Only Ctrl+h/j/k/l remain bound in zellij (for vim-zellij-navigator); every other Ctrl+* now passes through. Requires fresh zellij session (kill-all-sessions -y) to take effect.
* feat(zellij): restore full status bar, bind Alt+\ to cycle swap layoutsLibravatar sommerfeld2026-05-131-0/+1
|
* style(md): apply prettierLibravatar sommerfeld2026-04-211-222/+222
|
* feat: replace lf with yazi file managerLibravatar sommerfeld2026-04-171-0/+15
| | | | | | | | - Create minimal yazi.toml: show_hidden, scrolloff=10, mtime linemode - Create keymap.toml: shell access (!), bookmark dirs (g r/./x/s/S) - Add y() shell wrapper for cd-on-exit to zshrc - Add yazi section to KEYBINDS.md - Remove old lf config
* fix: remove non-working Alt+m ToggleMouseMode zellij keybindLibravatar sommerfeld2026-04-171-1/+0
|
* feat: add Ctrl+Shift+u to copy URL under cursor in ghosttyLibravatar sommerfeld2026-04-171-0/+1
|
* feat: add Alt+m to toggle mouse mode in zellijLibravatar sommerfeld2026-04-171-0/+1
|
* fix: simplify display toggle to laptop-off/side-by-sideLibravatar sommerfeld2026-04-171-1/+1
| | | | | | | - Added --no-repeat to F7 binding (key repeat was firing script twice) - Dropped broken mirror mode (sway has no native mirroring support) - Removed wl-mirror dependency - F7 now toggles between laptop-off and side-by-side
* docs: update keybinds and copilot instructions for swayLibravatar sommerfeld2026-04-171-10/+37
| | | | | | | - Add sway keybinds section to KEYBINDS.md - Update cross-tool conflict matrix with sway column - Add sway architecture to copilot instructions - Mark old X11 configs as legacy
* docs: add comprehensive keybinds reference and copilot update ruleLibravatar sommerfeld2026-04-171-0/+269