<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/justfile?h=master</id>
<link rel='self' href='https://git.sommerfeld.dev/dotfiles/atom/justfile?h=master'/>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/'/>
<updated>2026-06-05T10:06:02Z</updated>
<entry>
<title>Move more host tooling to Nix</title>
<updated>2026-06-05T10:06:02Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-06-05T10:06:02Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=b0e83e2ee3fc328e55119ee7c1f09ad7ed20a635'/>
<id>urn:sha1:b0e83e2ee3fc328e55119ee7c1f09ad7ed20a635</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(just): chsh to nix-managed zsh after nix-switch</title>
<updated>2026-05-22T09:41:22Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-22T09:41:22Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=0c292694f37f107629b5287f96ebb945ff764b68'/>
<id>urn:sha1:0c292694f37f107629b5287f96ebb945ff764b68</id>
<content type='text'>
zsh now lives in nix/common.nix instead of meta/base.txt. Removing the
pacman zsh package leaves /etc/passwd dangling at /usr/bin/zsh, so new
login terminals die with 'shell not found'.

Mirror the chsh logic from nix/bootstrap.sh (which only runs on the VM
during first-time provisioning) into the nix-switch recipe so every
`just sync` / `just init` re-asserts the login shell — and the
host gets the same treatment as the VM.

Idempotent: skips when the shell already matches, skips when
~/.nix-profile/bin/zsh is missing (pre-bootstrap state).
</content>
</entry>
<entry>
<title>refactor(pkg): drop provider-resolution fallback in mark_explicit</title>
<updated>2026-05-22T09:41:22Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-22T09:41:22Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=dff883ec04c62dc4a111597aace1ce5972b7dc01'/>
<id>urn:sha1:dff883ec04c62dc4a111597aace1ce5972b7dc01</id>
<content type='text'>
Now that meta/*.txt is conventionally required to list installed
package names (not virtual providers — see preceding commit dropping
ttf-font-awesome in favour of the already-declared otf-font-awesome),
the intersection with pacman -Qq is unnecessary. Failing loudly on a
virtual-provider entry is actually useful: it surfaces a data-entry
mistake instead of silently masking it.
</content>
</entry>
<entry>
<title>fix(pkg): skip mark-explicit for packages resolved to a different provider</title>
<updated>2026-05-22T09:41:22Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-22T09:41:22Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=cf98e69d76cd952b2fd58fc9f77e46826ac941d0'/>
<id>urn:sha1:cf98e69d76cd952b2fd58fc9f77e46826ac941d0</id>
<content type='text'>
paru may resolve a declared name to a provider with a different package
name (e.g. ttf-font-awesome -&gt; otf-font-awesome). Calling
`pacman -D --asexplicit` on the declared name then fails with
'could not find or read package' and aborts the recipe.

Intersect the declared list with `pacman -Qq` before bumping reasons;
names not present in the local DB are silently skipped.
</content>
</entry>
<entry>
<title>fix(pkg): mark declared packages as explicit on apply</title>
<updated>2026-05-22T09:41:22Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-22T09:41:22Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=b7b2f2d54261cc77be3658463d58b621ae29e1e6'/>
<id>urn:sha1:b7b2f2d54261cc77be3658463d58b621ae29e1e6</id>
<content type='text'>
`paru -S --needed` skips packages already on disk, so anything pulled
in transitively first and *later* added to meta/*.txt stays marked as
'installed as a dependency' in the local pacman DB — and keeps showing
up under `pacopt`.

After each install pass, force the declared set to 'explicitly
installed' via `pacman -D --asexplicit`. This treats meta/*.txt as
the source of truth for install reason: anything listed there is
explicit, anything else is a transitive dep.

Idempotent on already-explicit packages (pacman just prints 'install
reason is already explicit', which we discard).
</content>
</entry>
<entry>
<title>style(justfile): apply just --fmt (blank line between nix-update doc comments)</title>
<updated>2026-05-20T13:01:04Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-20T13:01:04Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=b3cc23dee9e8efbc89cec8f88de6618c852bcd64'/>
<id>urn:sha1:b3cc23dee9e8efbc89cec8f88de6618c852bcd64</id>
<content type='text'>
Just's formatter inserts a blank line so only the immediately-adjacent
comment serves as the recipe's doc string. Pre-existing drift, surfaced
when CI added 'just check-fmt' to the pipeline.
</content>
</entry>
<entry>
<title>justfile: add nix-update recipe, wire into update</title>
<updated>2026-05-20T12:56:11Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-20T12:56:11Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=ee67bdd9fd4817f5b5c2a973342f21c0bc480919'/>
<id>urn:sha1:ee67bdd9fd4817f5b5c2a973342f21c0bc480919</id>
<content type='text'>
Refreshes flake.lock (nixpkgs + home-manager) and re-activates the
profile. Plugged into the existing 'just update' aggregate so a weekly
'just update' bumps pacman/AUR + flatpak + nix in one go.
</content>
</entry>
<entry>
<title>drop residual Mason references after p6 migration</title>
<updated>2026-05-20T12:56:11Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-20T12:56:11Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=ea3e273d4221720f932d401a64d0881c7b23263b'/>
<id>urn:sha1:ea3e273d4221720f932d401a64d0881c7b23263b</id>
<content type='text'>
- zsh: remove ~/.local/share/nvim/mason/bin from PATH
- justfile: update comments to reflect Mason removal
</content>
</entry>
<entry>
<title>fix(nix,nvim): drop gh-actions-language-server (not in nixpkgs); export USER in nix-switch</title>
<updated>2026-05-20T12:56:10Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-20T12:56:10Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=40d8fd056bef4526acbe38a9b6ff98fc0c3fd8c9'/>
<id>urn:sha1:40d8fd056bef4526acbe38a9b6ff98fc0c3fd8c9</id>
<content type='text'>
- gh-actions-language-server is an npm package (lttb/gh-actions-language-server)
  not packaged in nixpkgs. Removed from nix/common.nix and from the
  vim.lsp.enable list in dot_config/nvim/lua/plugins/lsp.lua. Restore
  later via a per-project flake.nix if working on a workflows-heavy repo.

- just runs recipes with a sanitized env where $USER may be unset;
  home-manager's activation script dereferences it unconditionally
  and fails with 'USER: unbound variable'. Export USER (and HOME for
  symmetry) at the top of the nix-switch recipe.
</content>
</entry>
<entry>
<title>feat(bootstrap): install nix + Home-Manager on Arch host (p8)</title>
<updated>2026-05-20T12:56:09Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-20T12:56:09Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=d22a2336c19fc1fd08e3b1f9d88629b319558cab'/>
<id>urn:sha1:d22a2336c19fc1fd08e3b1f9d88629b319558cab</id>
<content type='text'>
Append two steps to the root bootstrap.sh:

  5a. install nix via the Determinate Systems multi-user installer
      (same as remote-dev/nix; gives us a proper nix-daemon.service).
  5b. chsh to ~/.nix-profile/bin/zsh after appending to /etc/shells.

Add a 'just nix-switch' recipe that auto-picks the host vs vm profile
based on /etc/os-release ID, and wire it into 'just init' and
'just sync' so day-to-day reconciliation also re-applies Home-Manager.

The recipe is a no-op when nix isn't installed, so it stays safe for
pre-bootstrap states and for hosts where the user opts out.

Phase 8 of the nix-on-host migration plan.
</content>
</entry>
</feed>
