feat(windows): bootstrap Windows and WSL from one chezmoi entry - #156
Merged
Merged
Conversation
…oi-init # Conflicts: # home/.chezmoiscripts/run_onchange_after_0-install-packages.sh.tmpl
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
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
chezmoi init --ssh --apply collieiscute -v, thenchezmoi applyfor updates./mnt/c; keep both HOME directories, caches, binaries and chezmoi state separate. No credential helper, second Git clone, or copying private keys into WSL.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.317eb0f: Windows, Ubuntu and macOS full installation jobs passed; Arch failed (not an all-green baseline).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.