<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotfiles/dot_config/nvim/lua/plugins, branch master</title>
<subtitle>My linux config and rc files</subtitle>
<id>https://git.sommerfeld.dev/dotfiles/atom/dot_config/nvim/lua/plugins?h=master</id>
<link rel='self' href='https://git.sommerfeld.dev/dotfiles/atom/dot_config/nvim/lua/plugins?h=master'/>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/'/>
<updated>2026-05-20T12:56:10Z</updated>
<entry>
<title>fix(nix,nvim): drop nodePackages.* (removed from nixpkgs), drop github-copilot-cli (broken)</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=3bc07df183cba19a9824ccf074041347a8bd1490'/>
<id>urn:sha1:3bc07df183cba19a9824ccf074041347a8bd1490</id>
<content type='text'>
nodePackages was removed wholesale from nixpkgs; everything that lived
under it must be referenced via its top-level name or dropped.

- prettier: moved nodePackages.prettier -&gt; prettier (top-level alias).
- jsonlint: not available at top level. Dropped from nix/common.nix
  AND from the nvim-lint and conform-nvim configs in
  dot_config/nvim/lua/plugins/lsp.lua. jsonls already provides
  schema-aware diagnostics; jq still handles formatting. The
  jsonlint redundancy is acceptable to lose.
- github-copilot-cli (1.0.40 in nixpkgs): buildNpmPackage derivation
  doesn't redirect HOME during npm postinstall, so it fails with
  EACCES on /var/empty/.cache on Determinate nix. Removed; install
  manually from https://github.com/github/copilot-cli into
  /usr/local/bin/ as before (current host already has it there).
</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>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>fix(remote-dev): install basedpyright outside Mason</title>
<updated>2026-05-14T11:29:15Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-14T11:29:15Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=8e5f5efc70680128545d26864263e5628fc74276'/>
<id>urn:sha1:8e5f5efc70680128545d26864263e5628fc74276</id>
<content type='text'>
Mason's pypi distribution of basedpyright pulls nodejs-wheel-binaries
which only ships manylinux_2_28 Linux wheels. uv's python-build-
standalone interpreter is tagged manylinux2014 (glibc 2.17 for max
portability) and rejects those wheels; pip then falls back to building
Node 24 from source, which fails on Ubuntu 20.04's gcc 9.4 (needs
gcc &gt;=10 for -std=gnu++20).

Provide basedpyright via the system package manager instead:
- pacman on Arch (added to meta/base.txt)
- pkgs.basedpyright on the VM (added to remote-dev/home.nix)

Drop it from mason-tool-installer's ensure_installed; lspconfig picks
it up from PATH. Document the exception in remote-dev/README.md.
</content>
</entry>
<entry>
<title>revert(nvim)+fix(remote-dev): keep Mason authoritative, give it cargo+rustc</title>
<updated>2026-05-14T10:43:18Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-14T10:43:18Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=e564f01583cbc9e9182bfe3ceca734e8680d8d2f'/>
<id>urn:sha1:e564f01583cbc9e9182bfe3ceca734e8680d8d2f</id>
<content type='text'>
User policy: Mason should install everything it lists regardless of
host-provided versions. Revert the PATH-filtering wrapper around
ensure_installed (b2f129e) — back to a plain table literal.

For shellharden specifically, Mason's only install source is
`cargo install`. The Arch host has cargo via base-devel/rustup; the
VM previously didn't, so Mason errored "ENOENT cargo". Add `cargo`
and `rustc` to the remote-dev nix profile so Mason can build it on
the VM too. Drop the shellharden package from home.nix — Mason owns
it now, no more provider competition with the nix-profile binary.
</content>
</entry>
<entry>
<title>fix(nvim): skip Mason install for tools already on PATH</title>
<updated>2026-05-14T10:43:18Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-14T10:43:18Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=719d4c5518bda64bd0f8ab8b20d9cb2fe84b5666'/>
<id>urn:sha1:719d4c5518bda64bd0f8ab8b20d9cb2fe84b5666</id>
<content type='text'>
Mason's installer tries one source per package. For tools that we
already provide via the system package manager (Arch pkgs on the
host) or nix-profile (on the remote-dev VM), Mason will keep trying
to (re-)install via cargo/pip/etc. and report failures — but
conform.nvim/nvim-lint resolve their binary from PATH anyway, so
the Mason install is redundant.

Filter ensure_installed at startup against vim.fn.executable(). Keeps
behaviour identical on a fresh host (Mason still pulls everything),
but silences spurious failures for tools that the user has chosen to
provide system-wide (shellharden via nix-profile being the immediate
case).
</content>
</entry>
<entry>
<title>fix(nvim,remote-dev): fall back to PATH node + provide JRE/shellharden/python3-venv</title>
<updated>2026-05-14T10:31:44Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-14T10:31:44Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=fc30488896710667e5d4fd970de81d9daa3cdf88'/>
<id>urn:sha1:fc30488896710667e5d4fd970de81d9daa3cdf88</id>
<content type='text'>
copilot.lua was hard-coding the chezmoi-pinned Node 24 at
~/.local/share/copilot-node/bin/node, which only exists on the Arch
host where chezmoi runs run_onchange_after_install-copilot-node.sh.
On the remote-dev VM the path is absent, so copilot-language-server
spawned with cmd[0]=&lt;missing&gt; and printed 'Could not determine
Node.js version'. Probe the pinned path with vim.fn.executable() and
fall back to 'node' from PATH otherwise.

For the VM PATH 'node' to be a supported version, switch home.nix
from the rolling 'nodejs' alias to 'nodejs_24' (the version the
chezmoi script also pins on the host).

Address the cluster of Mason install failures on the VM:
  - autotools-language-server, codespell, mdformat,
    nginx-language-server, systemdlint -- pip-installed; fail because
    Ubuntu's python3 ships without venv. bootstrap.sh now apt-installs
    python3-venv; README documents the manual command for existing VMs.
  - groovy-language-server -- needs a JRE. Add 'jre' to home.packages.
  - shellharden -- Mason's cargo fallback can't run under our
    leaf-tools policy. Provide the binary via nix-profile instead so
    Mason finds it on PATH.
</content>
</entry>
<entry>
<title>style: apply shfmt/prettier/just fmt drift</title>
<updated>2026-05-14T09:58:37Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-14T09:58:37Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=726005786ab398e89673bf8c141e50645f676c57'/>
<id>urn:sha1:726005786ab398e89673bf8c141e50645f676c57</id>
<content type='text'>
Pure formatter output from shfmt (2-space indent, '|' line breaks),
prettier (KEYBINDS.md), and 'just fmt' (justfile blank line).
No behavior change.
</content>
</entry>
<entry>
<title>feat(nvim): pin copilot to Node 24 to dodge LSP/Node 26 incompat</title>
<updated>2026-05-13T12:43:40Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-13T12:43:40Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=ab8ee06cbfce42f94e07a0a694701a4df9201815'/>
<id>urn:sha1:ab8ee06cbfce42f94e07a0a694701a4df9201815</id>
<content type='text'>
copilot-language-server emits 'HTTP 200 response does not appear to
originate from GitHub' under Node 26 (the current Arch nodejs). Upstream
tracking:
  https://github.com/zbirenbaum/copilot.lua/issues/695
  https://github.com/github/copilot.vim/issues/282
  https://github.com/github/copilot-language-server-release/issues/45

Workaround universally confirmed in those threads is to run the
language-server under Node 24. Rather than downgrade system nodejs (used
by lots of other tooling) install a private Node 24 under
~/.local/share/copilot-node/ via a chezmoi run_onchange script that
verifies the official sha256, and point copilot.lua at it via
copilot_node_command. Drop in once, bump NODE_VERSION when the upstream
incompatibility is resolved.
</content>
</entry>
<entry>
<title>fix(nvim): drop overseer task-bundle integration from auto-session</title>
<updated>2026-05-13T12:43:13Z</updated>
<author>
<name>sommerfeld</name>
<email>sommerfeld@sommerfeld.dev</email>
</author>
<published>2026-05-13T12:43:13Z</published>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/commit/?id=80753ca5c819ea498a16844ecfb52c46eb0aa036'/>
<id>urn:sha1:80753ca5c819ea498a16844ecfb52c46eb0aa036</id>
<content type='text'>
overseer.nvim removed save/load_task_bundle in the "task bundles get the
axe" refactor, which caused auto-session to error on every session restore:

    /lua/plugins/session.lua:27: attempt to call field 'load_task_bundle'
    (a nil value)

Remove the pre_save/pre_restore/post_restore hooks that called the removed
API. DAP breakpoint save/restore via save_extra_data is preserved.
</content>
</entry>
</feed>
