summaryrefslogtreecommitdiffstatshomepage
Commit message (Collapse)AuthorAgeFilesLines
...
* feat(nvim): add :PackClean, :PackUpdate, :PackSync user commandssommerfeld2026-05-132-0/+42
| | | | | | | | | | Wraps vim.pack for a more ergonomic workflow: - :PackClean - delete plugins no longer declared in vim.pack.add() (computed from vim.pack.get() where active == false) - :PackUpdate - run vim.pack.update(nil, { force = true }); skips the confirmation buffer - :PackSync - :PackClean followed by :PackUpdate
* style: silence SC1003 in bootstrap.sh efibootmgr hint; shfmt wifi-status.shsommerfeld2026-04-212-9/+10
| | | | | | | | - bootstrap.sh: the trailing backslash in the efibootmgr example is literal text shown to the user, not shell line continuation. Disable SC1003 with an inline directive and switch back to single quotes so the backslash renders as-is. - wifi-status.sh: reformat with shfmt -i 2 -ci -s.
* ci: fix taplo download URL (upstream dropped -full suffix)sommerfeld2026-04-211-1/+1
| | | | | taplo 0.10.0 renamed the release asset from taplo-full-linux-x86_64.gz to taplo-linux-x86_64.gz.
* refactor(firefox): auto-enumerate files like etc/ deploy scriptsommerfeld2026-04-212-15/+16
| | | | | | | Drop the per-file include hashes and explicit cp calls; walk firefox/ with find(1) and mirror the tree into the LibreWolf profile. Drop-in new files (e.g. user.js, chrome/userContent.css) now deploy without touching the script. Same pattern already in use for etc/.
* chore: prune stale/redundant chezmoi configsommerfeld2026-04-212-12/+1
| | | | | | | | | | | | .chezmoiignore: - remove create-efi.sh (deleted in UKI migration) - remove dot-prefixed entries (.editorconfig, .github/, .worktrees/, .githooks/, .stylua.toml, .prettierrc.json, .ruff_cache); chezmoi already ignores source paths beginning with '.' by default (reserved chezmoi names aside) .chezmoi.toml.tmpl: - drop unused data.hostname (not referenced by any template)
* chore: ignore bootstrap.sh in chezmoi, mask xdg-user-dirs-updatesommerfeld2026-04-212-0/+2
| | | | | | | | | bootstrap.sh is host-only bootstrapping and should not deploy into $HOME. The xdg-user-dirs-update.service user unit (shipped enabled by the xdg-user-dirs package) rewrites ~/.config/user-dirs.dirs on login, clobbering the tracked short-path variant (docs/dl/pics/vids). Mask it by symlinking to /dev/null.
* waybar: use iwd D-Bus + /proc for wifi instead of scraping iwctlsommerfeld2026-04-211-18/+35
| | | | | | | Replace iwctl ANSI-stripping with busctl calls against net.connman.iwd (a formally stable, documented D-Bus API) to get state and SSID, and read signal strength directly from /proc/net/wireless. No more parser fragility if iwctl's human-readable layout changes.
* sway: manage mako, poweralertd, display-watcher via systemd user unitssommerfeld2026-04-214-3/+25
| | | | | | | 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.
* efistub -> UKI migrationsommerfeld2026-04-216-66/+16
| | | | | | | Track /etc/kernel/cmdline and enable default_uki/fallback_uki in linux.preset. Remove create-efi helper (UKI is self-contained; only needed once at install time). Update bootstrap to print the one-off efibootmgr command instead of launching create-efi.
* system: add zram swap via zram-generatorsommerfeld2026-04-213-0/+9
| | | | | Cap at 8 GiB, zstd compression. Tune VM for RAM-backed swap: high swappiness, no read-ahead clustering.
* sway: auto-toggle display layout on external plug/unplugsommerfeld2026-04-212-0/+21
|
* sway: display-toggle re-enables laptop screen when no external presentsommerfeld2026-04-211-0/+6
|
* UPower: PowerOff critical action (no swap, no hibernate)sommerfeld2026-04-212-4/+7
|
* hibernate: add resume mkinitcpio hook, UPower critical actionsommerfeld2026-04-212-1/+9
|
* sway: add poweralertd for battery notifications via makosommerfeld2026-04-212-0/+2
|
* waybar: add disk module, heat-colour VOL, move window title to leftsommerfeld2026-04-212-2/+37
|
* waybar: heat-colour CPU/memory/wifi %/temperature values via pangosommerfeld2026-04-213-4/+60
|
* waybar: use iwctl (from iwd) instead of iw for wifi statussommerfeld2026-04-212-9/+16
|
* waybar: custom/wifi via iw for bond-slaved wlan; drop wg; shorter memorysommerfeld2026-04-215-35/+29
|
* waybar: wifi interface is wlan0 on this hostsommerfeld2026-04-211-1/+1
|
* waybar: split network into wifi/bond/wg, reorder, add gruvbox accentssommerfeld2026-04-213-9/+78
|
* waybar: add free% to memory, slow network updates to 10ssommerfeld2026-04-212-6/+7
|
* waybar: show memory used/free and wifi SSID + signal + throughputsommerfeld2026-04-211-5/+7
|
* docs: add high-level overview of stack and principlessommerfeld2026-04-211-0/+34
|
* revert(zprofile): drop DISPLAY=:0 hack now that xorg-xwayland is installedsommerfeld2026-04-211-4/+0
| | | | | | | | Sway sets DISPLAY in its own environment at compositor startup when xwayland support is enabled and the Xwayland binary is available, so all children (terminals, scripts) inherit it automatically. The zprofile override was only needed as a workaround while xorg-xwayland was missing.
* fix(justfile): strip inline '# ...' comments in meta/ and systemd-units/ parsingsommerfeld2026-04-211-10/+10
| | | | | | | | | | The grep-based filter only dropped lines starting with '#' and blank lines, so 'xorg-xwayland # note' got passed to paru verbatim and failed with 'could not find all required packages'. Replace all 11 call sites with a single sed that strips trailing '# ...' comments AND blank lines, so both full-line and inline comments are supported consistently across pkg-apply, pkg-add, pkg-forget, pkg-status, pkg-list, and unit-apply / unit-list / unit-status.
* pkg(wayland): add xorg-xwayland for zbarcam previewsommerfeld2026-04-211-0/+1
| | | | | | | zbarcam opens an X11 preview window and bails with "unable to open X display" on a pure-Wayland sway without an X server. xorg-xwayland is ~2MB and demand-spawned by sway, so the runtime cost when not scanning is zero.
* fix(zprofile): export DISPLAY=:0 for XWayland before exec swaysommerfeld2026-04-212-4/+4
| | | | | | | | | | | | | | Sway's XWayland is lazy — DISPLAY isn't set in sway's env until the first X client connects, which means systemctl/dbus import-environment runs too early and nothing downstream sees DISPLAY. Setting DISPLAY=:0 in zprofile before 'exec sway' ensures sway itself inherits it, and therefore so do all its child processes (terminals, scripts, systemd user services via import-environment). XWayland will spawn on demand when a client actually connects to :0. Also drop the redundant fallback from rqr now that the session-wide export covers it.
* fix(rqr): restore zbarcam preview and propagate DISPLAY to XWaylandsommerfeld2026-04-212-3/+7
| | | | | | | | | | | 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.
* fix(rqr): use --nodisplay to avoid X11 dependency on Waylandsommerfeld2026-04-211-1/+1
| | | | | | | zbarcam defaults to opening an X11 preview window, which fails on Sway without XWayland ("unable to open X display"). --nodisplay runs the scanner headlessly; we don't need the preview since -1 exits on the first barcode anyway.
* docs: update recipe vocabulary in README and copilot-instructionssommerfeld2026-04-212-31/+37
| | | | | Reflect the new DOMAIN-VERB scheme and shape dispatchers introduced in the justfile refactor.
* refactor(justfile): streamline recipes to DOMAIN-VERB scheme with shape ↵sommerfeld2026-04-211-120/+338
| | | | | | | | | | | | | | | | | | | | | dispatchers Adopt chezmoi-aligned vocabulary (add, forget, re-add, apply, diff, merge, status) uniformly across four domains (dotfiles, etc, pkg, unit). Add top-level dispatchers that sniff argument shape and delegate: - contains '/': path -> etc-* (^/?etc) or dotfiles-* - ends with .service/.timer/.socket/.mount/.target/.path: unit-* - bare words: pkg-* Fill in missing recipes: dotfiles-add/forget/re-add/diff/merge/status, etc-merge, etc-forget (was etc-rm), unit-add/forget. Rename: services-* -> unit-*, *-drift -> *-status, install/install-all -> pkg-apply, fix -> pkg-fix, groups -> pkg-list, readd -> re-add, add/remove -> pkg-add/forget, etc -> etc-status, etc-readd -> etc-re-add. Top-level apply stays monolithic (chezmoi apply deploys dotfiles + /etc atomically via the onchange template). sync = apply + pkg-fix + unit-apply.
* docs(readme): expand with layout, recipes, drift workflow, recovery guidesommerfeld2026-04-211-0/+62
|
* ci: run just check on push and PRssommerfeld2026-04-211-0/+57
|
* refactor(justfile): extract fmt/lint helpers into just-lib.sh; add doctor recipesommerfeld2026-04-213-90/+63
|
* chore: remove webtorrent mpv hook; gitignore cachessommerfeld2026-04-212-159/+3
|
* feat(justfile): add check-fmt and check recipes; pre-commit hooksommerfeld2026-04-213-11/+98
| | | | | | | | | | Split concerns: fmt-check (check-fmt) from lint. check-fmt mirrors fmt with each tool's --check/-d flag. check runs both as a single quality gate. A new .githooks/pre-commit runs 'just check' on every commit; bypass with git commit --no-verify. Also drop just --fmt --check and prettier --check from the lint recipe (they're format checks, belong in check-fmt).
* chore(mason): ensure selene and taplo are installedsommerfeld2026-04-211-0/+2
| | | | | Required by the 'just lint' and 'just fmt' recipes for lua linting and TOML format/lint respectively.
* style: silence false-positive lint warningssommerfeld2026-04-215-1/+9
| | | | | | | | | | Inline directives for cases where the linter's shell/language dialect doesn't match reality: - init.lua: _G.P helper is intentional - dot_zprofile: zsh tied arrays, $+commands, optional sourcing - dot_zshrc: zsh brace-group-as-function-body - ipython_config: 'c' is injected by IPython at load time - doasedit: /bin/sh on Arch is bash, -O test is supported
* style(nvim): drop unused nvmap helper; reformat treesitter keymapssommerfeld2026-04-212-57/+24
| | | | Also removes a stray ANSI escape in treesitter.lua.
* refactor(mpv): use local capture() instead of monkey-patching ossommerfeld2026-04-211-4/+5
| | | | | | Module-local function avoids selene's incorrect_standard_library_use lint and stops polluting the os namespace. Inner url variable renamed to remove shadowing warning.
* chore(selene): rename globals file, add mp, allow mixed_tablesommerfeld2026-04-214-7/+15
| | | | | | Rename nvim.yml to selene-globals.yml (more accurate scope). Add the mpv scripting 'mp' global alongside neovim's 'vim'. Allow mixed_table since it's idiomatic in lazy.nvim/which-key specs.
* style: apply prettier and taplo to css/json/jsonc/tomlsommerfeld2026-04-215-99/+124
|
* style(md): apply prettiersommerfeld2026-04-216-223/+233
|
* style(shell): apply shfmt (-i 2 -ci -s)sommerfeld2026-04-219-190/+192
|
* style(lua): apply stylua formattingsommerfeld2026-04-216-136/+212
|
* docs: mention fmt and lint recipes in copilot-instructionssommerfeld2026-04-211-1/+1
|
* feat(justfile): add fmt and lint recipessommerfeld2026-04-211-0/+179
| | | | | | | | | | | | | | | | | | | | | | Two recipes with matching shape: just fmt # format the whole repo just fmt <path> # format one file (dispatch by ext/filename/shebang) just lint # lint the whole repo just lint <path> # lint one file Dispatch: .lua stylua / selene *.sh + sh shebang shfmt / shellcheck .zshrc/.zprofile (no fmt) / shellcheck --shell=bash (best-effort) .py ruff format / ruff check justfile just --fmt / just --fmt --check .toml taplo format / taplo lint .md/.json/.jsonc/.yaml/.yml/.css prettier --write / --check If a required tool is missing, the recipe aborts with an install hint naming the package. Whole-repo mode aggregates non-zero exits in lint so you see every issue in one pass.
* chore: add stylua/selene/prettier config filessommerfeld2026-04-215-0/+22
| | | | | | | | | | | | | Add minimal config for the upcoming fmt/lint recipes: - .stylua.toml: stylua-specific knobs only; indent/line-length/eol continue to come from .editorconfig (stylua reads it natively). - selene.toml + nvim.yml: lua51 base plus a 'vim' global so neovim config files don't get flagged as undefined. - .prettierrc.json: double quotes, trailing commas, 80-col, preserve prose wrap (avoid reflowing markdown). All four ignored by chezmoi so they stay repo-only.
* fix(etc-restore): preserve mtime so pacman -Qkk sees file as unmodifiedsommerfeld2026-04-211-1/+3
| | | | | | | | | | 'bsdtar -xOf | doas tee' wrote pristine content but with mtime=now, which caused 'pacman -Qkk' (and therefore 'just etc') to still flag the file as drifted — pacman compares stored metadata, not content. Switch to 'doas bsdtar -xpf <archive> -C / <file>', which extracts the single file in place with its original owner, mode, and mtime from the package archive.