Skip to content

feat(windows): bootstrap Windows and WSL from one chezmoi entry - #156

Merged
CollieIsCute merged 21 commits into
masterfrom
codex/windows-chezmoi-init
Sep 14, 2026
Merged

CollieIsCute merged 21 commits into
masterfrom
codex/windows-chezmoi-init

Conversation

@CollieIsCute

@CollieIsCute CollieIsCute commented Sep 12, 2026

Copy link
Copy Markdown
Owner

Summary

  • Keep one Windows entry: chezmoi init --ssh --apply collieiscute -v, then chezmoi apply for updates.
  • Windows installs native GUI/voice/theme tools, then invokes Linux chezmoi in the default WSL 2 distribution.
  • Share the Windows checkout through /mnt/c; keep both HOME directories, caches, binaries and chezmoi state separate. No credential helper, second Git clone, or copying private keys into WSL.
  • Reuse existing Bash/fish/AI setup scripts. Remove the duplicate 71-line PowerShell AI setup. Use chezmoi kernel data to skip Linux desktop, greeter and voice setup on WSL.
  • Split package inventories into core + desktop without removing desktop Linux packages. Move Windows development/AI CLI installs to WSL; retain native Neovim/ripgrep for Neovide and GCC/Rust for Matugen.
  • Use LF checkout rules so WSL can execute scripts from Windows. Alacritty opens WSL fish; WSL CLI themes no longer require Noctalia.
  • Preserve the earlier Windows bootstrap fixes: aria2 before bulk Scoop downloads and refreshed GNU Rust/GCC environment for Matugen.

Validation

  • node tests/wsl-templates.mjs: passes locally. Checks Ubuntu/Arch native-vs-WSL routing, ignored desktop/voice targets, Bash syntax, PowerShell syntax, and coordinator success/failure cases (missing WSL, WSL 1, path failure, apply failure, spaces/apostrophes, WSLENV restoration).
  • git diff --check: passes.
  • Earlier commit 317eb0f: Windows, Ubuntu and macOS full installation jobs passed; Arch failed (not an all-green baseline).
  • Updated Windows CI installs real WSL 2 Ubuntu, runs the single Windows entry, checks Linux tools, and repeats the same entry. Results must be read from this PR's current checks; local WSL is not installed, so no local end-to-end WSL success is claimed.

First-install boundary

If WSL is absent, start Ubuntu installation and stop with actionable instructions. Windows may require administrator approval/reboot and initial Linux account creation; rerun the same entry afterward. Do not reboot, convert an existing distribution, replace WSL dotfiles checkouts, or merge HOME directories automatically. Existing default distributions must be Ubuntu or Arch, WSL 2, with a non-root sudo-capable user.

@CollieIsCute CollieIsCute changed the title fix(windows): complete chezmoi bootstrap and AI extension setup feat(windows): bootstrap Windows and WSL from one chezmoi entry Sep 12, 2026
CollieIsCute added a commit that referenced this pull request Sep 12, 2026
## Minimal fix

One file, one extra paru option and one explanation comment. No
packages.yaml changes, package replacement, custom dependency resolver,
or Windows/WSL changes. Based directly on master, independent of #156.

```diff
- paru -S --needed --noconfirm ...
+ paru -S --needed --noconfirm --mflags "--syncdeps --noconfirm" ...
```

## Root cause and upstream status (2026-09-12)

The [master Arch install
log](https://github.com/CollieIsCute/dotfiles/actions/runs/34634470805)
fails while building localsend-bin 1.18.2-1: `Missing dependencies:
libayatana-indicator`, then `Could not resolve all dependencies`, even
after the existing retries.

The maintainer [confirmed adding the dependency on September
10](localsend/localsend#3390 (comment)).
A direct read of the current AUR Git checkout confirms [commit
75f9faba](https://aur.archlinux.org/cgit/aur.git/commit/?h=localsend-bin&id=75f9faba7aedbfb0a1c74b5c32a5f250d22a0bec)
adds it to PKGBUILD, but does not regenerate .SRCINFO. The [AUR RPC
metadata](https://aur.archlinux.org/rpc/v5/info?arg%5B%5D=localsend-bin)
still lists only fuse2, xdg-user-dirs and libayatana-appindicator. No
follow-up metadata repair or ETA was found in that history/thread.

Thus this is not an undeclared PKGBUILD dependency anymore: it is stale
AUR metadata. Paru resolves the stale metadata first; makepkg later
reads the corrected PKGBUILD and fails because the dependency was never
installed.

[Paru --mflags](https://man.archlinux.org/man/paru.8.en) forwards flags
to makepkg. [makepkg
--syncdeps](https://man.archlinux.org/man/makepkg.8.en) installs missing
declared dependencies through pacman; --noconfirm keeps the existing
unattended workflow. Dependency/integrity checks remain enabled. The
missing library is an official-repository package, so no hardcoded
dependency is needed.

This fallback only resolves pacman repository dependencies; missing
AUR-only dependencies still require correct metadata. Remove the
workaround when upstream regenerates .SRCINFO.

## Validation

- Arch template render contains the native flags; Bash syntax passes.
- Rendered Ubuntu and macOS installers are byte-identical to master
after newline normalization.
- git diff --check passes; package manifest is unchanged.
- Full existing CI is triggered by this branch push. Results are
pending; no all-green claim yet.
@CollieIsCute
CollieIsCute merged commit 5005a98 into master Sep 14, 2026
13 of 16 checks passed
@CollieIsCute
CollieIsCute deleted the codex/windows-chezmoi-init branch September 14, 2026 15:50
CollieIsCute added a commit that referenced this pull request Sep 14, 2026
## Minimal fix

One file, one extra paru option and one explanation comment. No
packages.yaml changes, package replacement, custom dependency resolver,
or Windows/WSL changes. Based directly on master, independent of #156.

```diff
- paru -S --needed --noconfirm ...
+ paru -S --needed --noconfirm --mflags "--syncdeps --noconfirm" ...
```

## Root cause and upstream status (2026-09-12)

The [master Arch install
log](https://github.com/CollieIsCute/dotfiles/actions/runs/34634470805)
fails while building localsend-bin 1.18.2-1: `Missing dependencies:
libayatana-indicator`, then `Could not resolve all dependencies`, even
after the existing retries.

The maintainer [confirmed adding the dependency on September
10](localsend/localsend#3390 (comment)).
A direct read of the current AUR Git checkout confirms [commit
75f9faba](https://aur.archlinux.org/cgit/aur.git/commit/?h=localsend-bin&id=75f9faba7aedbfb0a1c74b5c32a5f250d22a0bec)
adds it to PKGBUILD, but does not regenerate .SRCINFO. The [AUR RPC
metadata](https://aur.archlinux.org/rpc/v5/info?arg%5B%5D=localsend-bin)
still lists only fuse2, xdg-user-dirs and libayatana-appindicator. No
follow-up metadata repair or ETA was found in that history/thread.

Thus this is not an undeclared PKGBUILD dependency anymore: it is stale
AUR metadata. Paru resolves the stale metadata first; makepkg later
reads the corrected PKGBUILD and fails because the dependency was never
installed.

[Paru --mflags](https://man.archlinux.org/man/paru.8.en) forwards flags
to makepkg. [makepkg
--syncdeps](https://man.archlinux.org/man/makepkg.8.en) installs missing
declared dependencies through pacman; --noconfirm keeps the existing
unattended workflow. Dependency/integrity checks remain enabled. The
missing library is an official-repository package, so no hardcoded
dependency is needed.

This fallback only resolves pacman repository dependencies; missing
AUR-only dependencies still require correct metadata. Remove the
workaround when upstream regenerates .SRCINFO.

## Validation

- Arch template render contains the native flags; Bash syntax passes.
- Rendered Ubuntu and macOS installers are byte-identical to master
after newline normalization.
- git diff --check passes; package manifest is unchanged.
- Full existing CI is triggered by this branch push. Results are
pending; no all-green claim yet.
CollieIsCute added a commit that referenced this pull request Sep 14, 2026
## Summary

- Keep one Windows entry: `chezmoi init --ssh --apply collieiscute -v`,
then `chezmoi apply` for updates.
- Windows installs native GUI/voice/theme tools, then invokes Linux
chezmoi in the default WSL 2 distribution.
- Share the Windows checkout through `/mnt/c`; keep both HOME
directories, caches, binaries and chezmoi state separate. No credential
helper, second Git clone, or copying private keys into WSL.
- Reuse existing Bash/fish/AI setup scripts. Remove the duplicate
71-line PowerShell AI setup. Use chezmoi kernel data to skip Linux
desktop, greeter and voice setup on WSL.
- Split package inventories into core + desktop without removing desktop
Linux packages. Move Windows development/AI CLI installs to WSL; retain
native Neovim/ripgrep for Neovide and GCC/Rust for Matugen.
- Use LF checkout rules so WSL can execute scripts from Windows.
Alacritty opens WSL fish; WSL CLI themes no longer require Noctalia.
- Preserve the earlier Windows bootstrap fixes: aria2 before bulk Scoop
downloads and refreshed GNU Rust/GCC environment for Matugen.

## Validation

- `node tests/wsl-templates.mjs`: passes locally. Checks Ubuntu/Arch
native-vs-WSL routing, ignored desktop/voice targets, Bash syntax,
PowerShell syntax, and coordinator success/failure cases (missing WSL,
WSL 1, path failure, apply failure, spaces/apostrophes, WSLENV
restoration).
- `git diff --check`: passes.
- Earlier commit `317eb0f`: Windows, Ubuntu and macOS full installation
jobs passed; Arch failed (not an all-green baseline).
- Updated Windows CI installs real WSL 2 Ubuntu, runs the single Windows
entry, checks Linux tools, and repeats the same entry. Results must be
read from this PR's current checks; local WSL is not installed, so no
local end-to-end WSL success is claimed.

## First-install boundary

If WSL is absent, start Ubuntu installation and stop with actionable
instructions. Windows may require administrator approval/reboot and
initial Linux account creation; rerun the same entry afterward. Do not
reboot, convert an existing distribution, replace WSL dotfiles
checkouts, or merge HOME directories automatically. Existing default
distributions must be Ubuntu or Arch, WSL 2, with a non-root
sudo-capable user.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant