aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/dot_config/sway/config
Commit message (Collapse)AuthorAgeFilesLines
* feat: vim nav in wofi, bemoji, clip picker, webcam glyph fixLibravatar sommerfeld2026-05-131-2/+5
| | | | | | | | | | | | | | | | | | | | | | | - 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
* fix(sway): call doas with absolute paths for reboot/poweroffLibravatar sommerfeld2026-05-131-2/+2
| | | | | | | | | | | doas matches the 'cmd' rule literally against argv[0], not against the resolved PATH lookup. With 'cmd /usr/bin/poweroff' in doas.conf, 'doas poweroff' is denied silently — works only as 'doas /usr/bin/poweroff'. The interactive shell aliases sudo->doas and was hiding the issue when typing the bare command in a terminal (PATH expansion happens in the shell before doas sees argv[0]... only when explicitly typed with absolute path).
* feat(sway): replace exit prompt with full session menu; drop fuzzel $PATH ↵Libravatar sommerfeld2026-05-131-2/+6
| | | | | | | | | | | listing - Mod+Shift+e: swaynag now offers Lock / Logout / Reboot / Poweroff instead of just 'Exit sway? Yes'. Reboot+Poweroff use doas; that's already nopass-permitted for wheel in etc/doas.conf - fuzzel.ini: drop list-executables-in-path=yes (back to upstream default). The launcher now shows only .desktop entries; power actions live in the Mod+Shift+e menu
* feat(waybar+sway): bluetooth module + unify wifi/bt toggle pathsLibravatar sommerfeld2026-05-131-1/+1
| | | | | | | | | | | | | | | - systemd-units/system/bt.txt: new file pairing the meta/bt.txt group; enables bluetooth.service via 'just unit-apply' - waybar: add the built-in bluetooth module; on-click runs the same bt-toggle.sh that XF86Bluetooth has always invoked. Status colors: blue when adapter is up, green when a device is connected, gray off - sway: XF86WLAN now runs wifi-toggle.sh (iwd D-Bus) instead of 'rfkill toggle wifi'. The latter required rfkill group membership (user is in wheel only), and aligning on the busctl path means the keybind and the waybar click drive the same code XF86RFKill (panic-disable all radios) keeps using 'rfkill toggle all' — that scope is genuinely rfkill-shaped.
* fix(sway): import PASSWORD_STORE_DIR into user manager + dbus envLibravatar sommerfeld2026-05-131-2/+2
| | | | | | | | | | | | | zprofile sets PASSWORD_STORE_DIR to $XDG_DATA_HOME/password-store, but systemd-user-launched services (notably waybar's tb-unread.sh, which calls 'pass show') don't inherit it. Sway is started from the login shell so the var is in its environment — propagate it to the user manager and dbus activation env, same pattern as the XDG_SESSION_* vars. Resolves the same problem already worked around for protonmail-bridge.service via a drop-in override; that override is now redundant but kept as belt-and-braces.
* fix(signal): import XDG_SESSION_TYPE/DESKTOP into user systemd + clean stopLibravatar sommerfeld2026-05-131-2/+2
| | | | | | | | | | | | | | | | | | | | Two issues with the sway autostart of signal.service: 1. Electron picks its tray backend from XDG_SESSION_TYPE and XDG_SESSION_DESKTOP. The sway config only imported DISPLAY, WAYLAND_DISPLAY, SWAYSOCK and XDG_CURRENT_DESKTOP into the systemd user manager, so services launched there got a partial env and Electron registered no SNI tray icon. Worked when launched from a terminal (which inherits sway's full env, including the bits set by pam_systemd). Add the two missing variables to both systemctl import-environment and dbus-update-activation-environment. 2. With minimize-to-tray on, Electron treats SIGTERM as a window-close and just hides the window, so 'systemctl --user stop signal' did nothing visible until the 90s default timeout SIGKILLed. Switch to ExecStop=flatpak kill org.signal.Signal, which uses flatpak's own instance manager to actually terminate the sandboxed app, plus a short TimeoutStopSec as a safety net.
* feat(sway): add dictate (whisper.cpp) and ocr (tesseract) keybindsLibravatar sommerfeld2026-05-131-0/+6
| | | | | | | | | | | | 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-1/+2
| | | | | | | | | - 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/+7
| | | | | | | | | | - 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(sway): monocle window cycling inside tabbed containersLibravatar sommerfeld2026-05-131-0/+4
| | | | | | | 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.
* fix(sway): use -- separator so makoctl menu stops parsing sh flagsLibravatar sommerfeld2026-05-131-1/+1
|
* fix(sway): extract id from fuzzel line for makoctl menuLibravatar sommerfeld2026-05-131-1/+1
| | | | | | makoctl menu <cmd> expects the command to emit just the notification id, but fuzzel --dmenu echoes the full '<id> <summary>' line. Pipe through cut -d' ' -f1 so mako can act on the selection.
* 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)
* refactor(sway): manage waybar via systemd user serviceLibravatar sommerfeld2026-05-131-3/+1
| | | | | | | | Move waybar from sway's inline bar {} block to waybar.service pulled in by sway-session.target. Matches the pattern for mako, swayidle, poweralertd, display-watcher, cliphist. ExecReload sends SIGUSR2 so 'systemctl --user reload waybar' picks up config changes without a restart.
* 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.
* feat(sway): bind brightness and ThinkPad XF86 multimedia keysLibravatar sommerfeld2026-05-131-0/+12
| | | | | | | | | | | | | | 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(sway): warp pointer to focused containerLibravatar sommerfeld2026-05-131-0/+1
| | | | | | Pairs with focus_follows_mouse to prevent stale-hover focus-steal after keyboard navigation: the cursor jumps into the new focus so subsequent small mouse movements don't bounce focus back to where it used to be.
* 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(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-131-0/+4
| | | | | | 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.
* feat(sway): separate thunderbird autostart from super+t launch pathLibravatar sommerfeld2026-05-131-2/+2
| | | | | | | | 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-131-6/+6
| | | | | | | | | 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-131-3/+3
|
* refactor(sway): make thunderbird toggle tile instead of floatLibravatar sommerfeld2026-05-131-3/+6
| | | | | | | | | | | | | 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.
* 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.
* 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-131-0/+5
| | | | | | | | 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/+9
|
* 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).
* refactor(sway): manage swayidle as a user unit; drop logind overrideLibravatar sommerfeld2026-05-131-7/+0
| | | | | | | | | | | | | - 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-131-1/+8
| | | | | | | | | | | - 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.
* sway: manage mako, poweralertd, display-watcher via systemd user unitsLibravatar sommerfeld2026-04-211-3/+1
| | | | | | | Replace sway exec launches with a sway-session.target that BindsTo graphical-session.target and Wants mako, poweralertd, and a new display-watcher.service. Services now get restart-on-failure, journal integration, and clean shutdown when sway exits.
* sway: auto-toggle display layout on external plug/unplugLibravatar sommerfeld2026-04-211-0/+1
|
* sway: add poweralertd for battery notifications via makoLibravatar sommerfeld2026-04-211-0/+1
|
* fix(rqr): restore zbarcam preview and propagate DISPLAY to XWaylandLibravatar sommerfeld2026-04-211-2/+2
| | | | | | | | | | | zbarcam needs an X11 display for the live camera preview, which sway provides via XWayland. Two changes to make that reliable: - sway/config: add DISPLAY to the systemd/dbus user-environment imports, so anything launched through those paths (not just direct sway execs) can reach XWayland. - rqr: default DISPLAY to :0 (sway's default XWayland socket) when unset, as a belt-and-suspenders fallback.
* refactor: restructure to chezmoi source stateLibravatar sommerfeld2026-04-211-0/+157
Rename home/ contents to chezmoi naming conventions: - dot_ prefix for dotfiles and dot-dirs - private_dot_ for .gnupg and .ssh directories - private_ for 0600 files (nym.pub) - executable_ for scripts in .local/bin and display-toggle.sh - symlink_ for mimeapps.list symlink