aboutsummaryrefslogtreecommitdiffstatshomepage
Commit message (Collapse)AuthorAgeFilesLines
* pkg(wayland): add xorg-xwayland for zbarcam previewLibravatar sommerfeld2 days1-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 swayLibravatar sommerfeld2 days2-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 XWaylandLibravatar sommerfeld2 days2-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 WaylandLibravatar sommerfeld2 days1-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-instructionsLibravatar sommerfeld2 days2-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 ↵Libravatar sommerfeld2 days1-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 guideLibravatar sommerfeld2 days1-0/+62
|
* ci: run just check on push and PRsLibravatar sommerfeld2 days1-0/+57
|
* refactor(justfile): extract fmt/lint helpers into just-lib.sh; add doctor recipeLibravatar sommerfeld2 days3-90/+63
|
* chore: remove webtorrent mpv hook; gitignore cachesLibravatar sommerfeld2 days2-159/+3
|
* feat(justfile): add check-fmt and check recipes; pre-commit hookLibravatar sommerfeld2 days3-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 installedLibravatar sommerfeld2 days1-0/+2
| | | | | Required by the 'just lint' and 'just fmt' recipes for lua linting and TOML format/lint respectively.
* style: silence false-positive lint warningsLibravatar sommerfeld2 days5-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 keymapsLibravatar sommerfeld2 days2-57/+24
| | | | Also removes a stray ANSI escape in treesitter.lua.
* refactor(mpv): use local capture() instead of monkey-patching osLibravatar sommerfeld2 days1-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_tableLibravatar sommerfeld2 days4-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/tomlLibravatar sommerfeld2 days5-99/+124
|
* style(md): apply prettierLibravatar sommerfeld2 days6-223/+233
|
* style(shell): apply shfmt (-i 2 -ci -s)Libravatar sommerfeld2 days9-190/+192
|
* style(lua): apply stylua formattingLibravatar sommerfeld2 days6-136/+212
|
* docs: mention fmt and lint recipes in copilot-instructionsLibravatar sommerfeld2 days1-1/+1
|
* feat(justfile): add fmt and lint recipesLibravatar sommerfeld2 days1-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 filesLibravatar sommerfeld2 days5-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 unmodifiedLibravatar sommerfeld2 days1-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.
* feat(etc-restore): reset live /etc/<path> to pristine without repo round-tripLibravatar sommerfeld2 days2-1/+36
| | | | | | | | | | Sibling to etc-reset but operates directly on /etc (via doas tee) and never touches the repo. Use when a live file has drifted from pristine but you don't want to track it: just etc-restore /etc/systemd/resolved.conf Previously this required a 2-step dance (etc-add + etc-untrack).
* chore(justfile): include services-drift in statusLibravatar sommerfeld2 days1-2/+2
|
* chore(etc): stop tracking resolved.conf (identical to pristine)Libravatar sommerfeld2 days1-44/+0
| | | | | | | | | All 44 lines are comments/section headers — zero active settings. Tracking was useless: no real state to preserve, and 'just etc' would surface any future drift anyway. The live /etc/systemd/resolved.conf on the host is unaffected; chezmoi's deploy-etc script only installs files, never removes.
* docs(etc/networkd): document Type= match breadth for bond0Libravatar sommerfeld2 days2-0/+6
| | | | | | | Type=ether and Type=wlan match every interface of that class. Add comments pointing out that future USB/Thunderbolt dongles would get auto-enslaved into bond0, and how to narrow the match if that becomes undesirable.
* fix(etc/mkinitcpio): restore fallback presetLibravatar sommerfeld2 days1-4/+3
| | | | | | | Having only the 'default' preset means no safety net if the main initramfs ever fails to boot (broken firmware update, microcode regression, hook misconfig). The fallback image is ~40 MB and regenerates with every kernel update — cheap insurance.
* fix(etc/reflector): restore --protocol https; drop redundant flagLibravatar sommerfeld2 days1-1/+1
| | | | | | | | Pristine /etc/xdg/reflector/reflector.conf sets '--protocol https'. Dropping it reverts to reflector's permissive default (http, https, rsync, ftp), which could let non-HTTPS mirrors into the mirrorlist. Also drop '--completion-percent 100' — that's reflector's default.
* feat(etc,readd): rename etc-drift to etc; add etc-readd + readdLibravatar sommerfeld2 days2-4/+54
| | | | | | | | | | | - etc-drift → etc (the main entry point to the /etc subsystem). - New etc-readd: pull changes from live /etc back into tracked repo files (the /etc analog of 'chezmoi re-add'). No args refreshes all tracked files; explicit paths error if the file isn't already tracked (use etc-add to adopt). Skips unchanged files silently; runs 'just apply' only when something changed. - New top-level readd: 'chezmoi re-add' + 'just etc-readd'. One command to mirror live state back into the repo.
* feat(etc): auto-apply in etc-reset/etc-rm + add etc-untrackLibravatar sommerfeld2 days2-6/+9
| | | | | | | | | | - etc-reset and etc-rm now chain 'just apply' at the end, so a single invocation leaves both repo and /etc consistent. - New etc-untrack recipe = etc-reset + etc-rm. One command to cleanly stop tracking an owned /etc file: before: just etc-reset X && just apply && just etc-rm X && just apply after : just etc-untrack X (etc-untrack doesn't apply to unowned files — use etc-rm.)
* feat(etc): track drifted host configsLibravatar sommerfeld2 days11-0/+797
| | | | | | | Adopted via 'just etc-add' after 'just etc-drift' surfaced them: locale.conf, locale.gen, mkinitcpio.conf, mkinitcpio.d/linux.preset, pacman.conf, resolved.conf, systemd/network/30-bond*, and the shokz udev blacklist rule.
* feat(justfile): add etc-rm recipeLibravatar sommerfeld2 days2-1/+24
| | | | | | | | | | | Removes one or more files from the repo's etc/ tree and tidies any now-empty parent directories (bounded to inside etc/). Leaves the live /etc copy untouched. Composes with etc-reset to stop tracking a file cleanly: just etc-reset /etc/foo.conf # repo → pristine just apply # deploy pristine to /etc just etc-rm etc/foo.conf # stop tracking; /etc unchanged
* refactor(etc-reset): write pristine into repo, not /etcLibravatar sommerfeld2 days1-39/+27
| | | | | | | | | | | Operating on /etc directly created a two-source-of-truth problem: chezmoi apply would just redeploy the repo copy anyway, so we had to either refuse managed paths or bolt on a --force flag. New semantics: etc-reset overwrites etc/<path> in the repo with the pristine package contents (no doas needed, no /etc touched). User then runs 'just apply' to deploy. Unowned files are now an error (nothing to reset to) — remove them from the repo manually.
* feat(etc/.ignore): exclude getty@tty1 override (contains username)Libravatar sommerfeld2 days1-0/+3
|
* perf(etc-diff,etc-upstream-diff): default to repo files, avoid doas when ↵Libravatar sommerfeld2 days1-17/+25
| | | | | | | | | | | readable - etc-upstream-diff: default to iterating over repo-managed etc/ files instead of running full 'pacman -Qkk' (scans every installed package). Upstream drift only matters for files I actually track. - both recipes: read live /etc via plain cat when the file is world-readable; only fall back to 'doas cat' for restricted files (e.g. /etc/doas.conf 0600). Cuts doas round-trips for the common case.
* refactor(just): reorder status to dotfile-drift, pkg-drift, etc-driftLibravatar sommerfeld2 days1-1/+1
| | | | | dotfile-drift is fastest so it gives immediate feedback; etc-drift is slowest (full pacman -Qkk pass) so it runs last.
* feat(just): include etc in status & diff recipesLibravatar sommerfeld2 days1-4/+15
| | | | | | | - status now runs etc-drift alongside pkg-drift and dotfile-drift - diff routes /etc/* paths to etc-diff; with no arg, runs both chezmoi diff and etc-diff so drift in /etc is visible alongside $HOME dotfiles.
* fix(etc-diff,etc-upstream-diff): use doas cat for root-only live filesLibravatar sommerfeld2 days1-4/+5
| | | | | | | /etc/doas.conf (0600) and similar mode-restricted files triggered 'Permission denied' when diff tried to read them as the user. Read via 'doas cat' on the live side; keep the repo/pristine side as the user since those are readable.
* feat(etc): diff/upstream-diff/add/reset recipes + ignore fstabLibravatar sommerfeld2 days3-8/+153
| | | | | | | | | | | | | - etc-diff: diff repo-managed etc/<path> vs live /etc (defaults to all) - etc-upstream-diff: diff live /etc vs pristine pacman archive (defaults to pacman -Qkk modified set) - etc-add: copy /etc/<path> into the repo's etc/ tree - etc-reset: restore pristine via bsdtar -xpf, or rm if unowned; refuses managed paths without --force - ignore /etc/fstab (host-specific UUIDs/layout) - path-traversal guards on all recipe inputs - regular-file-only enforcement (no symlinks/dirs) - fail-fast with clear message if mirror can't supply installed version
* fix(etc-drift): match real pacman -Qkk "backup file:" prefix formatLibravatar sommerfeld2 days2-3/+6
| | | | | | | | | Pacman emits lines like "backup file: <pkg>: <path> (<reason>)", not the "(Modified backup file)" suffix format. Anchor the path extraction to /etc/ to avoid catching stderr warnings interleaved into a line. Also extend etc/.ignore with /etc/{passwd,group,shells} — system-managed identity files that surfaced in the new drift output.
* fix(etc-drift): use pacman -Qkk for reliable modified-file detectionLibravatar sommerfeld2 days1-1/+1
| | | | | | | The old -Qii regex "MODIFIED\s+/\S+" accidentally matched UNMODIFIED lines (no word boundary), which hid truly-modified configs like pacman.conf from the drift report. Switch to -Qkk which uses an explicit "Modified backup file" / "Altered backup file" tag that is unambiguous.
* feat(etc/.ignore): exclude wireguard .network (contains public IPs)Libravatar sommerfeld2 days1-4/+4
|
* fix(etc-drift): while loop must not exit with keep filter statusLibravatar sommerfeld2 days1-2/+2
|
* feat(etc/.ignore): exclude wireguard .netdev (contains PrivateKey)Libravatar sommerfeld2 days1-0/+5
|
* feat(etc/.ignore): filter pacsave/pacnew, hostname, xml/catalogLibravatar sommerfeld2 days1-0/+8
|
* fix(etc-drift): tolerate no-match grep and whitespace-separated MODIFIEDLibravatar sommerfeld2 days1-3/+3
| | | | | | | - grep exits 1 when pattern has no matches; under pipefail that killed the recipe. Wrap both pipelines in `{ ...; } || true`. - pacman -Qii can separate MODIFIED from the path with spaces or a tab depending on formatting; use \s+ instead of \t.
* feat(etc): drift detection + auto-enumerating deploy templateLibravatar sommerfeld2 days4-21/+86
| | | | | | | | | | | - `just etc-drift` reports /etc files modified from pacman defaults (via pacman -Qii) and user-created files (via pacman -Qo), subtracting already-managed paths and patterns listed in etc/.ignore. - Refactor run_onchange_after_deploy-etc.sh.tmpl to enumerate files under etc/ automatically via find; single combined hash via chezmoi output + sha256sum, so new files only need to be dropped into etc/. - etc/.ignore seeds noise filters: machine-id, ssh host keys, pacman keyring, mirrorlist, shadow/passwd backups, sbctl keys, ca-certs.
* fix(services): ignore more networkd/resolved companion socketsLibravatar sommerfeld2 days1-0/+5
| | | | | | | systemd-networkd-resolve-hook.socket, systemd-networkd-varlink.socket, systemd-networkd-varlink-metrics.socket, systemd-resolved-monitor.socket, systemd-resolved-varlink.socket are all auto-activated via dependency graphs of their parent services and have no [Install] of their own.