<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotfiles/justfile, branch master</title>
<subtitle>My linux config and rc files
</subtitle>
<id>https://git.sommerfeld.dev/dotfiles/atom?h=master</id>
<link rel='self' href='https://git.sommerfeld.dev/dotfiles/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/'/>
<updated>2026-04-21T00:24:40Z</updated>
<entry>
<title>fix(justfile): strip inline '# ...' comments in meta/ and systemd-units/ parsing</title>
<updated>2026-04-21T00:24:40Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-04-21T00:24:40Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=f24d9674b3f4b7e8dde46a4725a206f37e00ac37'/>
<id>urn:sha1:f24d9674b3f4b7e8dde46a4725a206f37e00ac37</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>refactor(justfile): streamline recipes to DOMAIN-VERB scheme with shape dispatchers</title>
<updated>2026-04-21T00:24:39Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-04-21T00:24:39Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=a9bf50b479cd508569b82b8e24c47713b499db44'/>
<id>urn:sha1:a9bf50b479cd508569b82b8e24c47713b499db44</id>
<content type='text'>
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 -&gt; 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-* -&gt; unit-*, *-drift -&gt; *-status, install/install-all -&gt; pkg-apply,
fix -&gt; pkg-fix, groups -&gt; pkg-list, readd -&gt; re-add, add/remove -&gt;
pkg-add/forget, etc -&gt; etc-status, etc-readd -&gt; etc-re-add.

Top-level apply stays monolithic (chezmoi apply deploys dotfiles + /etc
atomically via the onchange template). sync = apply + pkg-fix + unit-apply.
</content>
</entry>
<entry>
<title>refactor(justfile): extract fmt/lint helpers into just-lib.sh; add doctor recipe</title>
<updated>2026-04-21T00:24:38Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-04-21T00:24:38Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=f8024b5097eb42119c9aa55ade98630df041f4f2'/>
<id>urn:sha1:f8024b5097eb42119c9aa55ade98630df041f4f2</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(justfile): add check-fmt and check recipes; pre-commit hook</title>
<updated>2026-04-21T00:24:38Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-04-21T00:24:38Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=afbc07bb44170d7b6f060dd0276157c8db3da68c'/>
<id>urn:sha1:afbc07bb44170d7b6f060dd0276157c8db3da68c</id>
<content type='text'>
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).
</content>
</entry>
<entry>
<title>feat(justfile): add fmt and lint recipes</title>
<updated>2026-04-21T00:24:36Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-04-21T00:24:36Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=d2bc82b24f6133a8ba8f7f824d1972760d7b71f1'/>
<id>urn:sha1:d2bc82b24f6133a8ba8f7f824d1972760d7b71f1</id>
<content type='text'>
Two recipes with matching shape:

  just fmt           # format the whole repo
  just fmt &lt;path&gt;    # format one file (dispatch by ext/filename/shebang)
  just lint          # lint the whole repo
  just lint &lt;path&gt;   # 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.
</content>
</entry>
<entry>
<title>fix(etc-restore): preserve mtime so pacman -Qkk sees file as unmodified</title>
<updated>2026-04-21T00:24:35Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-04-21T00:24:35Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=e24c62228c49766935f434192db0d1cb4fdde820'/>
<id>urn:sha1:e24c62228c49766935f434192db0d1cb4fdde820</id>
<content type='text'>
'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 &lt;archive&gt; -C / &lt;file&gt;', which extracts
the single file in place with its original owner, mode, and mtime
from the package archive.
</content>
</entry>
<entry>
<title>feat(etc-restore): reset live /etc/&lt;path&gt; to pristine without repo round-trip</title>
<updated>2026-04-21T00:24:35Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-04-21T00:24:35Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=a7eb25c7a4634418325256a8b368591e5b86ebeb'/>
<id>urn:sha1:a7eb25c7a4634418325256a8b368591e5b86ebeb</id>
<content type='text'>
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).
</content>
</entry>
<entry>
<title>chore(justfile): include services-drift in status</title>
<updated>2026-04-21T00:24:35Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-04-21T00:24:35Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=27228ca1c8dd1aeb132f8d21cb630f101d174b76'/>
<id>urn:sha1:27228ca1c8dd1aeb132f8d21cb630f101d174b76</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(etc,readd): rename etc-drift to etc; add etc-readd + readd</title>
<updated>2026-04-21T00:23:56Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-04-21T00:23:56Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=a26b26c3750723d7aba9a2e22554afff5218f39c'/>
<id>urn:sha1:a26b26c3750723d7aba9a2e22554afff5218f39c</id>
<content type='text'>
- 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.
</content>
</entry>
<entry>
<title>feat(etc): auto-apply in etc-reset/etc-rm + add etc-untrack</title>
<updated>2026-04-21T00:23:56Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-04-21T00:23:56Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=8b070be38755f1af9e340dae84f1a74017efd810'/>
<id>urn:sha1:8b070be38755f1af9e340dae84f1a74017efd810</id>
<content type='text'>
- 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 &amp;&amp; just apply &amp;&amp; just etc-rm X &amp;&amp; just apply
    after : just etc-untrack X
  (etc-untrack doesn't apply to unowned files — use etc-rm.)
</content>
</entry>
</feed>
