<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotfiles/nix/vm.nix, branch master</title>
<subtitle>My linux config and rc files</subtitle>
<id>https://git.sommerfeld.dev/dotfiles/atom/nix/vm.nix?h=master</id>
<link rel='self' href='https://git.sommerfeld.dev/dotfiles/atom/nix/vm.nix?h=master'/>
<link rel='alternate' type='text/html' href='https://git.sommerfeld.dev/dotfiles/'/>
<updated>2026-05-22T09:41:24Z</updated>
<entry>
<title>feat(tuicr): configure gruvbox-dark theme</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=b8dce5c1561f27dbd56f5fc34eff0b42fa973bb7'/>
<id>urn:sha1:b8dce5c1561f27dbd56f5fc34eff0b42fa973bb7</id>
<content type='text'>
Add dot_config/tuicr/config.toml with theme = "gruvbox-dark".
Symlinked from nix/vm.nix per the symlink invariant so the same
config applies on both host (via chezmoi) and VM (via home-manager).
</content>
</entry>
<entry>
<title>feat(nix): audit + expand vm xdg.configFile symlink coverage</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=5070187ab99b09ca22514f228f079d032745bde8'/>
<id>urn:sha1:5070187ab99b09ca22514f228f079d032745bde8</id>
<content type='text'>
The VM doesn't run chezmoi, so every config the host gets via chezmoi
must reach the VM via a nix symlink. Audit found gaps for tools whose
binary IS in common.nix but whose dot_config tree was unlinked:

  bat, lsd, yazi, ripgrep, fd, wget, npm, ipython,
  gdb, clangd, ccache

Plus the new tuicr claude-code skill (under ~/.claude/skills/tuicr/,
NOT ~/.config — uses home.file instead of xdg.configFile).

Reorganises the block by category and adds an INVARIANT comment
pointing at the rule in .github/copilot-instructions.md.

GUI/wayland-only tools (sway/mako/waybar/fuzzel/mpv/zathura/etc) stay
unlinked: the VM is headless.
</content>
</entry>
<entry>
<title>refactor(nix): deployment in vm.nix only; host uses chezmoi for dotfiles</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=639f3cb82ef9f1e6dd0b47cf506ff3c09fd4a5a7'/>
<id>urn:sha1:639f3cb82ef9f1e6dd0b47cf506ff3c09fd4a5a7</id>
<content type='text'>
Per user decision: on the Arch host, chezmoi remains the single deployer
of $HOME dotfiles. nix/common.nix's xdg.configFile + sshConfig
activation + .zshenv home.file block was causing home-manager to fight
chezmoi on every nix-switch, materializing .backup files for nvim,
zellij, zsh, git, ghostty, direnv.

Resolution:

- nix/common.nix: drop the entire deployment block, drop the
  my.dotfilesPath option, drop the let..in dotfiles/link helpers.
  Module is now deployment-agnostic: only installs packages.

- nix/host.nix: drop my.dotfilesPath; explicit comment that chezmoi
  owns dotfile deployment on the host.

- nix/vm.nix: gains everything previously in common.nix's deployment
  block — xdg.configFile (nvim/zellij/zsh/git/ghostty/direnv),
  home.activation.sshConfig, home.file.".zshenv". The 'dotfiles'
  let-binding (= $HOME/.local/share/dotfiles) and 'link' helper move
  here too, since they're vm-only now.

Host runbook unchanged (`just sync`); first run after pulling will
just be a no-op nix-switch instead of a backup-file storm.
</content>
</entry>
<entry>
<title>fix(nix): parameterize dotfiles path per profile; rename dockerfile LSP</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=58f2d61be4c55c7cf7bdbb12f3fed6794e7481b5'/>
<id>urn:sha1:58f2d61be4c55c7cf7bdbb12f3fed6794e7481b5</id>
<content type='text'>
- common.nix hardcoded the runtime dotfiles checkout to
  ~/.local/share/dotfiles, which is correct for the remote-dev VM but
  not the Arch host (where the canonical clone lives at ~/dotfiles).
  ssh activation was failing with 'cannot stat
  /home/sommerfeld/.local/share/dotfiles/private_dot_ssh/config' on
  every host nix-switch.

  Promote the path to a typed option (config.my.dotfilesPath) and set
  it from each profile:
    nix/host.nix -&gt; $HOME/dotfiles
    nix/vm.nix   -&gt; $HOME/.local/share/dotfiles
  common.nix now wraps its config in 'config = { ... }' so the
  options can sit alongside.

- dockerfile-language-server-nodejs was renamed in nixpkgs to
  dockerfile-language-server; pick up the new name to silence the
  evaluation warning (the rename will eventually become a hard error).
</content>
</entry>
<entry>
<title>feat(nix): add LSPs/formatters/linters/DAPs to common.nix</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=e66aa35ea314f522a2cdfaebdacf87894a44bd04'/>
<id>urn:sha1:e66aa35ea314f522a2cdfaebdacf87894a44bd04</id>
<content type='text'>
Replaces Mason entirely (phase p6 of the nix migration will rip out
mason-tool-installer and friends). The set tracks the previous
ensure_installed list in nvim's lsp.lua, with five niche tools dropped
per the migration plan:

  - groovy-language-server, npm-groovy-lint
  - nginx-language-server, nginx-config-formatter
  - systemdlint

systemd-lsp is renamed to systemd-language-server (the nixpkgs attr
name). codelldb is replaced by lldb-dap (upstream successor, ships with
pkgs.lldb); dap configs switch in phase p6.

Drops jre, basedpyright, cargo, rustc from vm.nix — they only existed
to work around Mason quirks on Ubuntu 20.04 (uv-python wheel
incompatibility, source-build needs). With Mason gone, basedpyright
comes from nixpkgs cleanly on both profiles.

Phase 5 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>
</feed>
