<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotfiles/dot_config/zsh/dot_zshrc, branch master</title>
<subtitle>My linux config and rc files</subtitle>
<id>https://git.sommerfeld.dev/dotfiles/atom/dot_config/zsh/dot_zshrc?h=master</id>
<link rel='self' href='https://git.sommerfeld.dev/dotfiles/atom/dot_config/zsh/dot_zshrc?h=master'/>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/'/>
<updated>2026-06-05T10:06:04Z</updated>
<entry>
<title>Limit git switch completion to local branches</title>
<updated>2026-06-05T10:06:04Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-06-05T10:06:04Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=929f8bea128361822b054db36402b5e19234319f'/>
<id>urn:sha1:929f8bea128361822b054db36402b5e19234319f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(ssh): make agent.sock symlink concurrent-connection-safe</title>
<updated>2026-05-22T09:41:24Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-22T09:41:24Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=982d180f9b9a2f8a90d454816474dce8d4b4b8e2'/>
<id>urn:sha1:982d180f9b9a2f8a90d454816474dce8d4b4b8e2</id>
<content type='text'>
Previously every new login retargeted ~/.ssh/agent.sock to its own
per-connection forwarded socket. That broke a multi-connection setup
when the most-recent connection (which 'won' the symlink) dropped:
all surviving connections' panes would point at a dead socket until a
fresh login from a surviving connection re-ran zprofile.

zprofile: only retarget when the existing symlink target is dead
(sshd unlinks the per-connection socket on disconnect, so [[ -S ]] on
the resolved path is a reliable liveness probe). First connection
seeds the symlink, subsequent logins keep using it.

ssh-agent-refresh: scan /tmp/ssh-*/agent.* for any live forwarded
socket and retarget to the first that responds to ssh-add. Lets the
surviving connection recover without waiting for a new login shell.
</content>
</entry>
<entry>
<title>feat(zsh): recover Arch site-functions + HELPDIR after removing system zsh</title>
<updated>2026-05-22T09:41:24Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-22T09:41:24Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=6b7e057bd4fc2cbdffe5fc8b3095810db1ccf9e3'/>
<id>urn:sha1:6b7e057bd4fc2cbdffe5fc8b3095810db1ccf9e3</id>
<content type='text'>
Switching to nix's zsh on the Arch host left two functional gaps the
Arch zsh package used to fill:

1. /usr/share/zsh/site-functions in fpath: pacman, paru, systemctl,
   journalctl, flatpak, docker, kubectl, makepkg etc. drop their
   completions there. nix zsh's compiled-in fpath doesn't include
   /usr/share so we lose all of them silently. Added that path (and
   vendor-completions for the VM's apt-installed completions) to the
   existing fpath loop, guarded by [[ -d ]].

2. HELPDIR for the run-help / help-alias machinery: needed so 'help cd'
   etc. find the per-builtin help docs. Pick the first existing version
   dir, preferring nix-profile so it matches the running zsh version.
</content>
</entry>
<entry>
<title>fix(ssh): stabilise forwarded ssh-agent socket across reconnects</title>
<updated>2026-05-22T09:41:23Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-22T09:41:23Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=159d69ddd122cfdb55d087d754d7472d42fa73ae'/>
<id>urn:sha1:159d69ddd122cfdb55d087d754d7472d42fa73ae</id>
<content type='text'>
Forwarded SSH_AUTH_SOCK lives at /tmp/ssh-XXX/agent.NNN — a
per-connection path that disappears on disconnect, leaving every
long-running zellij pane (and its children: claude-code, nvim, …)
pointing at a dead socket. Reattaching after reconnect doesn't help:
the env was captured when zellij first started.

Fix: maintain ~/.ssh/agent.sock as a symlink, re-aimed at the live
forwarded socket on every login (zprofile). Export the stable path so
processes inherit a value that survives reconnects — git fetch /
commit signing keep working in re-attached zellij panes with zero
per-pane re-export.

Adds 'ssh-agent-refresh' helper for transitional panes still holding
the dead per-connection path: re-exports SSH_AUTH_SOCK to the stable
symlink and validates with ssh-add -l. Already-running children
(claude-code) must still be restarted since env is inherited, not
observed.
</content>
</entry>
<entry>
<title>feat(zsh): enrich pacopt with reverse-optdep info</title>
<updated>2026-05-22T09:41:21Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-22T09:41:21Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=7212ed8f2e355856b456b0c83e8a1ebe5a62d71d'/>
<id>urn:sha1:7212ed8f2e355856b456b0c83e8a1ebe5a62d71d</id>
<content type='text'>
Promote pacopt from a plain alias to a function. In addition to listing
packages that remain installed solely as someone's optional dependency,
each package is now annotated with its parent(s) and the upstream
reason text from the parent's Optional Deps field.

Implementation is pacman-only (no expac): one awk pass over 'pacman -Qi'
builds a reverse index of every (parent, optdep, reason) edge in the
local DB, then per leaf package the index is filtered for matching deps.
</content>
</entry>
<entry>
<title>zsh: hm wrapper needs --impure for builtins.getEnv</title>
<updated>2026-05-20T12:56:12Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-20T12:56:12Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=3ee1769ac0f5618da3d3346ff5dd70c07c11b0fe'/>
<id>urn:sha1:3ee1769ac0f5618da3d3346ff5dd70c07c11b0fe</id>
<content type='text'>
host.nix reads HOME/USER via builtins.getEnv, which returns "" under
pure-eval (nix run's default). just-nix-switch already passes --impure;
match it here.
</content>
</entry>
<entry>
<title>zsh: add hm wrapper for flake-based home-manager</title>
<updated>2026-05-20T12:56:12Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-20T12:56:12Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=a41bcc4cd9cddde9e03cc99b2a57e6356e062d8d'/>
<id>urn:sha1:a41bcc4cd9cddde9e03cc99b2a57e6356e062d8d</id>
<content type='text'>
The standalone 'home-manager' command defaults to the legacy
~/.config/home-manager/home.nix and errors out for flake users. The
wrapper auto-selects the host/vm profile by /etc/os-release ID and
points at whichever dotfiles checkout exists on the machine.

Usage:
    hm news
    hm switch
    hm generations
</content>
</entry>
<entry>
<title>refactor(nvim,zsh): remove Mason; use Home-Manager-provisioned tooling</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=2d9ed00606be2f8c63aba719d00adf70fe6d4393'/>
<id>urn:sha1:2d9ed00606be2f8c63aba719d00adf70fe6d4393</id>
<content type='text'>
LSPs, formatters, linters, and the lldb-dap debugger now come from
~/.nix-profile/bin (see nix/common.nix). lspconfig keeps the default
configs; we just opt-in via vim.lsp.enable() with an explicit list.

Changes:
  - dot_config/nvim/lua/plugins/lsp.lua: drop mason*, replace
    mason-lspconfig handler with explicit vim.lsp.enable({...}); drop
    groovy/jenkins formatters and lint entries; drop systemd lint
    (nginx + groovy + systemdlint tools dropped per plan).
  - dot_config/nvim/lua/plugins/debug.lua: drop mason-nvim-dap; drop
    codelldb adapter; switch dap.configurations.cpp to type='lldb'
    (lldb-dap is the upstream successor, ships with pkgs.lldb).
  - dot_config/nvim/init.lua: remove mason.nvim, mason-lspconfig.nvim,
    mason-tool-installer.nvim, mason-nvim-dap.nvim from vim.pack.add.
  - dot_config/nvim/lua/config/update.lua: remove MasonToolsUpdateSync.
  - dot_config/zsh/dot_zshrc: flip plugin source order — prefer
    ~/.nix-profile/share, fall back to /usr/share/zsh (was the other
    way around).
  - nix/bootstrap.sh: drop the uv-python3.11 step (no longer needed
    once Mason no longer source-builds Python LSPs on Ubuntu 20.04).

Phase 6 of the nix-on-host migration plan.
</content>
</entry>
<entry>
<title>refactor(nix): promote remote-dev/ to nix/ with common/vm/host split</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=de5146c7976e1fb38e8d1f82c30544462d881100'/>
<id>urn:sha1:de5146c7976e1fb38e8d1f82c30544462d881100</id>
<content type='text'>
Restructures the Home-Manager profile to support both the Arch host and
the Ubuntu remote-dev VM from the same flake.

  - remote-dev/ → nix/ (hard rename; .chezmoiignore updated)
  - home.nix split into common.nix (shared), vm.nix (Mason runtime
    carve-outs + podman stack), host.nix (gpg scdaemon delegation to
    system pcscd)
  - flake.nix exposes homeConfigurations.{vm,host} via a mkProfile
    helper
  - rj alias in dot_zshrc updated to ~/.local/share/dotfiles/nix
  - bootstrap.sh / justfile updated to use #vm against the new path

The split is behaviour-preserving for the VM: vm.nix + common.nix
together carry the same package set as the previous home.nix.
host.nix is provisioned but not yet wired into bootstrap (phase p8).

Phase 1 of the nix-on-host migration plan.
</content>
</entry>
<entry>
<title>feat(zsh): add dj/rj aliases for dotfiles and remote-dev justfiles</title>
<updated>2026-05-20T12:56:08Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-20T12:56:08Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=08996a92ebeccc01e523f79723efcd9b20922e98'/>
<id>urn:sha1:08996a92ebeccc01e523f79723efcd9b20922e98</id>
<content type='text'>
dj invokes ~/dotfiles/justfile and rj invokes
~/.local/share/dotfiles/remote-dev/justfile, both pinned to the
justfile's directory via --working-directory so the aliases behave
identically from any CWD.
</content>
</entry>
</feed>
