aboutsummaryrefslogtreecommitdiffstatshomepage
Commit message (Collapse)AuthorAgeFilesLines
...
* feat(sway): inhibit_idle on fullscreen windowsLibravatar sommerfeld2026-05-131-0/+1
| | | | | Any fullscreen window now pauses swayidle's timer. Covers mpv, video calls, fullscreen browser video, etc.
* feat(waybar): add mako notification counter moduleLibravatar sommerfeld2026-05-132-0/+39
| | | | | | New mako-status.sh emits JSON with pending / history counts. Click to dismiss latest, right-click to dismiss all, middle-click to restore the last dismissed notification.
* feat(waybar): add privacy module (mic/cam/screen indicator)Libravatar sommerfeld2026-05-131-0/+11
| | | | | Shows icons while any app holds the microphone or a screen-share source via PipeWire. No new deps on a PipeWire system.
* feat(waybar): add idle_inhibitor moduleLibravatar sommerfeld2026-05-131-0/+10
| | | | | Click to toggle an inhibit lock that prevents swayidle from firing. Useful for long reads, video playback without fullscreen, etc.
* feat(sway): copy screenshots to clipboardLibravatar sommerfeld2026-05-131-2/+2
| | | | | Pipe grim through tee so Print / Shift+Print save to disk AND copy the PNG to the Wayland clipboard via wl-copy.
* feat(wayland): add cliphist clipboard historyLibravatar sommerfeld2026-05-136-1/+36
| | | | | | 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.
* fix(sway): keep focus on current workspace when stashing tbLibravatar sommerfeld2026-05-131-0/+4
|
* feat(sway): separate thunderbird autostart from super+t launch pathLibravatar sommerfeld2026-05-132-2/+23
| | | | | | | | Splitting the for_window 'move to scratchpad' action into a dedicated autostart helper so that super+t launches TB tiled (not stashed) when TB isn't already running. Previously the for_window rule would stash every new main window, forcing the user to press super+t twice after killing TB manually.
* refactor(sway): stash thunderbird in scratchpad instead of hidden wsLibravatar sommerfeld2026-05-134-43/+23
| | | | | | | | | waybar's sway/workspaces has no ignore-list (that option is hyprland-only), so the _tb workspace always leaked into the bar and into super+tab cycling. Using sway's native scratchpad solves both: the __i3_scratch workspace is filtered automatically. We run 'floating disable' right after 'scratchpad show' so the window lands tiled on the current workspace, preserving the intended UX.
* feat(sway): skip _tb stash when cycling workspaces with super+tabLibravatar sommerfeld2026-05-132-3/+21
|
* fix(sway): use get_workspaces for current ws in tb-toggleLibravatar sommerfeld2026-05-131-5/+3
| | | | | | get_tree's workspace nodes don't carry a .focused field (only con nodes do), so current_ws was empty and the script emitted a malformed swaymsg command. get_workspaces exposes .focused directly on each workspace.
* refactor(sway): make thunderbird toggle tile instead of floatLibravatar sommerfeld2026-05-134-4/+41
| | | | | | | | | | | | | 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(thunderbird): top-post replies to match recipient expectationsLibravatar sommerfeld2026-05-131-0/+4
| | | | | | | Bottom-posting is arguably better but non-technical recipients find it disorienting. reply_on_top=1 puts the cursor above the quoted text; sig_bottom=false keeps the signature adjacent to the reply rather than below the quote.
* fix(sway): scope thunderbird scratchpad rule to the main windowLibravatar sommerfeld2026-05-131-2/+2
| | | | | | | | | Matching only on app_id caused every TB window (compose, message viewer, calendar event, settings) to be parked in the scratchpad, leaving them hidden behind the main window. TB's main window title always ends in 'Mozilla Thunderbird'; child windows don't. Narrow both the for_window rule and the Super+t toggle with a title regex so only the main window is managed.
* fix(etc): restrict lsblk to the parent device onlyLibravatar sommerfeld2026-05-132-2/+2
| | | | | | | lsblk without -d lists the partition AND its children, so on a LUKS setup the second line (the mapper's UUID) was leaking into the rendered cmdline and deploy script. Add -d so only the partition's own UUID is emitted.
* feat(etc): template kernel cmdline, derive LUKS UUID from partition nameLibravatar sommerfeld2026-05-135-8/+48
| | | | | | | | | | | | | | | | | Prompt once at 'chezmoi init' time for the LUKS root partition (e.g. nvme0n1p2) and store it under [data].luksRootPartition in the per-machine chezmoi config. etc/kernel/cmdline.tmpl resolves the UUID at apply time via lsblk, so reinstalls only require re-entering the partition name. The etc deploy script now renders *.tmpl sources through 'chezmoi execute-template' and installs them without the suffix. The resolved UUID is folded into the onchange hash so the script re-runs when the UUID changes even if etc/ content is unchanged. just etc-status/diff transparently handle .tmpl sources (strip suffix for the live-path mapping, render before diffing). etc-re-add skips .tmpl files since template sources can't be reverse-rendered from the live file.
* feat(chezmoi): persist sourceDir so bare chezmoi commands workLibravatar sommerfeld2026-05-131-0/+2
| | | | | | Adds sourceDir = .chezmoi.sourceDir to the tracked config template. After 'just init' (or 'chezmoi init --force -S .') regenerates the per-machine config, 'chezmoi apply' etc. no longer need '-S .'.
* revert(sway): drop thunderbird autostartLibravatar sommerfeld2026-05-131-1/+0
|
* feat(sway): size thunderbird scratchpad to fill workspaceLibravatar sommerfeld2026-05-131-1/+1
|
* fix(sway): use correct thunderbird app_id (org.mozilla.Thunderbird)Libravatar sommerfeld2026-05-131-2/+2
|
* feat(sway): park thunderbird in scratchpad, toggle with Super+tLibravatar sommerfeld2026-05-133-1/+17
| | | | | | | | 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.
* fix(thunderbird): disable start.thunderbird.net start pageLibravatar sommerfeld2026-05-131-0/+3
|
* refactor(thunderbird): trim user.js to curated high-signal prefsLibravatar sommerfeld2026-05-131-65/+40
| | | | | | | | | | | | | Drop the hand-rolled kitchen-sink config in favour of a smaller set inspired by HorlogeSkynet/thunderbird-user.js. Removes prefs that were either restating Mozilla/Arch defaults (telemetry, app.update), Firefox-only (extensions.screenshots), or guessed/stale (mail.folder_widget.view_flags). Keeps: remote-image block, no read receipts, plain-text compose with format=flowed, no UA header leak, no Referer/prefetch, safe-browsing off, DNT on, system gpg-agent for OpenPGP, vertical pane, Monday calendar start.
* feat(thunderbird): track non-private config in dotfilesLibravatar sommerfeld2026-05-135-0/+108
| | | | | | | | | | | | | | | Mirror the firefox/ pattern for Thunderbird: - thunderbird/user.js: telemetry off, safe-browsing off, remote images blocked, read receipts disabled, plain-text compose with flowed wrap at 72, vertical pane, calendar on Monday start - run_onchange_after_deploy-thunderbird.sh.tmpl: detects default profile and copies tracked files in on any change - meta/mail.txt: add thunderbird package (official repo) - .chezmoiignore: exclude thunderbird/ from $HOME deployment - README: mention Thunderbird + Bridge + Radicale stack Accounts/credentials/mailbox data stay local per profile.
* refactor(mail): use packaged protonmail-bridge.service, drop-in for passLibravatar sommerfeld2026-05-132-14/+2
| | | | | | Arch's protonmail-bridge-core ships /usr/lib/systemd/user/protonmail-bridge.service with proper hardening. Replace custom unit with a minimal drop-in to inject PASSWORD_STORE_DIR for the pass keychain backend.
* fix(mail): switch to extra/protonmail-bridge-core (paid account)Libravatar sommerfeld2026-05-131-1/+1
|
* fix(mail): rename protonmail-bridge-nogui to protonmail-bridge-free-coreLibravatar sommerfeld2026-05-131-1/+1
| | | | | | The nogui variant was deleted from the AUR; the maintained headless package is now protonmail-bridge-free-core (same /usr/bin/protonmail-bridge binary, just no Qt GUI components).
* chore(systemd): drop stale bridge.service.d overrideLibravatar sommerfeld2026-05-131-2/+0
|
* refactor(mail): drop TUI stack, add headless proton-bridgeLibravatar sommerfeld2026-05-138-224/+16
| | | | | | | | | Remove aerc, khal, khard, vdirsyncer from meta/mail.txt and delete their configs (aerc/, vdirsyncer systemd override, aerc .desktop handler). Point linkhandler mailto at xdg-open until a GUI client is set up. Add systemd user unit for protonmail-bridge --noninteractive, tied to graphical-session.target so it starts with the sway session.
* feat(sway): add Super+z QR mode (w=write, r=read)Libravatar sommerfeld2026-05-132-0/+11
|
* fix(ghostty): restore default jump_to_prompt bindsLibravatar sommerfeld2026-05-132-8/+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-132-0/+5
| | | | | | | 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.
* fix(zsh): preserve newlines in copy-last-outputLibravatar sommerfeld2026-05-131-1/+1
| | | | | Double-quoting a zsh array slice joins elements with spaces; use the (F) parameter expansion flag to join with newlines instead.
* feat(zsh): add Alt-Shift-Y widget to copy last command outputLibravatar sommerfeld2026-05-132-0/+40
| | | | | | | | | | | | 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(zsh): add wlc — tee-like wrapper around wl-copyLibravatar sommerfeld2026-05-131-0/+4
| | | | | wlc pipes stdin to stdout (visible) AND to wl-copy (clipboard). Usage: `somecmd | wlc`
* fix(nvim): drop overseer task-bundle integration from auto-sessionLibravatar sommerfeld2026-05-131-29/+3
| | | | | | | | | | | overseer.nvim removed save/load_task_bundle in the "task bundles get the axe" refactor, which caused auto-session to error on every session restore: /lua/plugins/session.lua:27: attempt to call field 'load_task_bundle' (a nil value) Remove the pre_save/pre_restore/post_restore hooks that called the removed API. DAP breakpoint save/restore via save_extra_data is preserved.
* style(zellij): hide tips line by sizing status-bar pane to 1Libravatar sommerfeld2026-05-131-1/+1
|
* style(zellij): status-bar at top, tab-bar at bottomLibravatar sommerfeld2026-05-131-4/+4
|
* style(zellij): move tab-bar and status-bar to the topLibravatar sommerfeld2026-05-131-4/+4
|
* feat(zellij): relocate mode-entry keys to Alt+Shift+* to stop shadowing ↵Libravatar sommerfeld2026-05-132-0/+23
| | | | | | | | | | | | | | | | | | | | | | | | 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): move tab-bar to bottom via custom default layoutLibravatar sommerfeld2026-05-131-0/+13
|
* feat(zellij): restore full status bar, bind Alt+\ to cycle swap layoutsLibravatar sommerfeld2026-05-132-2/+6
|
* feat(xdg): disable xdg-user-dirs-update overwritesLibravatar sommerfeld2026-05-131-0/+1
| | | | | | xdg-user-dirs-update runs on login and rewrites user-dirs.dirs with localized defaults, clobbering the custom short paths. enabled=False in user-dirs.conf is the official opt-out.
* feat(getty): blank VT and powerdown monitor on idleLibravatar sommerfeld2026-05-131-0/+2
| | | | | setterm only affects the Linux console (TERM=linux); sway's KMS/DRM session is unaffected. Wakes on any keypress.
* feat(zsh): add reload-env for stale zellij panesLibravatar sommerfeld2026-05-131-0/+22
| | | | | | | Re-exports WAYLAND_DISPLAY, SWAYSOCK, DBUS, SSH_AUTH_SOCK etc. from the currently running sway process, so a zellij pane whose server was started in a different session (SSH-attached, logout/login, etc.) regains working GUI/clipboard/systemctl --user.
* feat(sway): cursor theme + GTK4 dark mode via gsettingsLibravatar sommerfeld2026-05-131-0/+4
| | | | | | | | | | | - seat * xcursor_theme Adwaita 24: announces the cursor via cursor-shape-v1 for Wayland clients and exports XCURSOR_THEME/SIZE to Xwayland, so Xwayland GTK apps no longer fall back to the bitmap X cursor. - exec gsettings color-scheme prefer-dark: GTK4 ignores the settings.ini gtk-application-prefer-dark-theme key (GTK3 only); it reads the gnome color-scheme gsetting. This fixes light-mode GTK4 apps (gnome calculator, nautilus, modern GNOME apps).
* feat(wayland): tune Qt/SDL/Electron backendsLibravatar sommerfeld2026-05-133-1/+14
| | | | | | | | | | | - zprofile: set QT_QPA_PLATFORM="wayland;xcb" (xcb fallback for bundled Qt), SDL_VIDEODRIVER="wayland,x11" (SDL2 defaults to X11). Drop MOZ_ENABLE_WAYLAND (Firefox 121+ default). - meta/wayland: add qt5-wayland and qt6-wayland so QT_QPA_PLATFORM=wayland actually resolves. - electron-flags.conf: global --ozone-platform=wayland, Wayland window decorations, GTK4. Applies to all apps using the Arch electron wrapper. Bundled-electron apps (slack-desktop, etc.) unaffected.
* refactor(sway): manage swayidle as a user unit; drop logind overrideLibravatar sommerfeld2026-05-134-65/+20
| | | | | | | | | | | | | - New dot_config/systemd/user/swayidle.service, pulled in by sway-session.target alongside mako/display-watcher/poweralertd. Same lifetime as the rest of the session: starts after graphical-session, restarts on failure, stops on logout. - Drop the swayidle exec from sway config (was unmanaged background process with no restart, no logging hookup). - Revert etc/systemd/logind.conf overrides: swayidle handles idle-lock directly via Wayland ext-idle-notifier, so the logind IdleAction belt-and-suspenders is redundant. Run just etc-reset /etc/systemd/logind.conf on the host to restore pristine.
* fix(sway): swaylock -e (ignore-empty), not -i (which is --image)Libravatar sommerfeld2026-05-131-3/+3
|
* feat(sway): auto-lock on idle and before suspendLibravatar sommerfeld2026-05-133-1/+66
| | | | | | | | | | | - logind: IdleAction=lock, IdleActionSec=5min. systemd emits a lock signal at 5min idle (session becomes locked from logind PoV; swayidle listens and invokes swaylock). - swayidle: lock at 5min, blank display at 6min, lock before sleep. Closes the gap where lid-close or manual suspend would wake to an unlocked session. - swaylock: add -i (--ignore-empty-password) to ignore accidental Enter. - meta/wayland: add swayidle.