github.com/uvu1/dotfiles の chezmoi-master(旧 master)を移行元正本として、
chezmoi 管理の設定を Nix、Home Manager、nix-darwin、mise dotfiles へ移行した構成です。
移植時に参照した正本コミットは
44ae8668a39989d0bfba1572ae869da3fb4b22f5 です。設定を更新するときは、
移行元を再確認する場合は chezmoi-master を参照します。移行後の正本は
このリポジトリの master です。
flake.nix: macOS の nix-darwin、WSL Arch の Home Manager standalone、mise 用 nixpkgs-unstable の固定nix/: Nix が管理する最小基盤mise/: OS 別 toolset と mise dotfilesmise/dotfiles/: 通常配置へ移植した設定ファイルbootstrap/wsl/: WSL の systemd、interop、既定ユーザー設定scripts/: chezmoi 適用済みファイルを削除して切り替えるスクリプトdocs/: 設計と移行計画
macOS と WSL では現在のdarwin/linux用toolsetを利用します。Windows は Neovim とその周辺 CLI、MinGit、WezTerm の subset を使います。PowerShell profile を含める場合は bat、eza、gh、ghq、kubectl、starship も追加します。
bun と uv はグローバルtoolsetに含めません。必要なプロジェクトのルートで
それぞれ次を実行し、プロジェクトの mise.toml に追加します。
mise use bun@latest
mise use uv@latestこれにより、各toolはそのプロジェクト以下でだけ有効になります。チームで共有しない
個人用設定にする場合は、mise use --env local bun@latest または
mise use --env local uv@latest を使い、生成される .mise.local.toml をGitの
管理対象外にします。グローバル設定から削除しても、miseが既にダウンロードした
インストール実体は自動では削除されませんが、プロジェクト外では有効になりません。
- macOS と Windows に 1Password があり、SSH signing が有効であること
- WSL から
/mnt/c/Users/uvu1/AppData/Local/Microsoft/WindowsApps/op-ssh-sign-wsl.exeを実行できること - Windows では OpenSSH Client と PowerShell 7 を利用できること
Nix を導入し、Command Line Tools の Git、または Nix の Git でこの リポジトリを clone します。リポジトリルートで次を実行します。
sudo nix --extra-experimental-features 'nix-command flakes' run nix-darwin/nix-darwin-26.05#darwin-rebuild -- switch --flake .#uvu1-mac
export MISE_EXPERIMENTAL=1
mise -C mise trust -a
mise -C mise -E darwin install
mise -C mise -E darwin ls --current
bash scripts/cutover-unix.sh darwin二回目以降の Nix 適用は次のとおりです。
sudo darwin-rebuild switch --flake .#uvu1-macWindows 側で公式 distro 一覧に ArchLinux があることを確認して導入します。
wsl --list --online
wsl --install -d ArchLinuxroot 初期セッションでユーザーと最小依存を作成します。
useradd -m -G wheel -s /bin/bash uvu1
passwd uvu1
pacman -Syu --needed sudo git curl ca-certificates/etc/sudoers の %wheel ALL=(ALL:ALL) ALL を有効化し、このリポジトリを
uvu1 所有の ~/dotfiles へ clone します。その後、次を実行します。
git clone https://github.com/uvu1/dotfiles ~/dotfiles
cd ~/dotfiles
sudo install -m 0644 bootstrap/wsl/wsl.conf /etc/wsl.conf
sudo install -Dm 0644 bootstrap/wsl/WSLInterop.conf /etc/binfmt.d/WSLInterop.confWindows 側で distro 名を確認し、利用可能なら既定ユーザーも明示します。
wsl -l -v
wsl --manage ArchLinux --set-default-user uvu1
wsl --shutdownWSL を再起動したら systemd を確認します。Nix が未導入の場合のみ、uvu1
ユーザーで multi-user インストールを実行します。
systemctl is-system-running
test -e /proc/sys/fs/binfmt_misc/WSLInterop
(cd /mnt/c && /mnt/c/Windows/System32/cmd.exe /d /c echo WSL-interop-ok)
curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install |
sh -s -- --daemoncmd.exe が Exec format error になり、WSLInterop が存在しない既存環境では、
bootstrap設定を配置して systemd-binfmt を再起動します。WSL全体のshutdownは
不要です。
cd ~/dotfiles
sudo install -m 0644 bootstrap/wsl/wsl.conf /etc/wsl.conf
sudo install -Dm 0644 bootstrap/wsl/WSLInterop.conf /etc/binfmt.d/WSLInterop.conf
sudo systemctl restart systemd-binfmt.service
(cd /mnt/c && /mnt/c/Windows/System32/cmd.exe /d /c echo WSL-interop-ok)新しいシェルを開くか、次のコマンドで Nix を読み込みます。nix-command と
flakes は Home Manager が内部で実行する Nix にも適用されるよう、ユーザー設定へ
恒久的に追加します。
. /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
mkdir -p ~/.config/nix
grep -qxF 'extra-experimental-features = nix-command flakes' ~/.config/nix/nix.conf 2>/dev/null || \
echo 'extra-experimental-features = nix-command flakes' >> ~/.config/nix/nix.conf
nix --version
systemctl is-active nix-daemon.socketその後、リポジトリルートで次を実行します。
nix run home-manager/release-26.05 -- switch --flake .#uvu1@arch-wsl
mise --version
grep -qxF /home/uvu1/.nix-profile/bin/zsh /etc/shells || \
echo /home/uvu1/.nix-profile/bin/zsh | sudo tee -a /etc/shells
chsh -s /home/uvu1/.nix-profile/bin/zsh uvu1
getent passwd uvu1
export MISE_EXPERIMENTAL=1
mise -C mise trust -a
mise -C mise -E linux install
mise -C mise -E linux ls --current
bash scripts/cutover-unix.sh linuxmise --version は 2026.6.14 以上を返す必要があります。通常の nixpkgs 26.05 に
含まれる古い mise ではなく、flake.lock で固定した nixpkgs-unstable 版を
macOS/WSL 共通で利用します。
WSL では blink.cmp の Rust fuzzy matcher をビルドするため、Home Manager が
GCC と linker も導入します。また、Neovim のクリップボード連携に必要な
wl-copy と wl-paste も導入します。linker cc not found が出た場合は
Nix 構成を再適用した後、Neovim で blink.cmp を再ビルドします。
初回切り替え後は、どのディレクトリからでも次の一コマンドで更新できます。
dotfiles-updatedotfiles-update は ~/dotfiles の master を origin/master へ fast-forwardし、
Home Manager、mise tools、mise dotfiles の順に適用して status まで確認します。
commit、push、stash、reset、ファイル削除は行いません。tracked/untracked を問わず
worktree に変更がある場合は、変更一覧を表示して pull 前に終了します。
PowerShell 7 で mise を利用可能にし、このリポジトリを
$HOME\dotfiles へ clone してから実行します。Windows、WSLともに
$HOME\dotfiles / ~/dotfiles を適用元の正本とします。
$env:MISE_EXPERIMENTAL = "1"
mise -C mise trust -a
./scripts/cutover-windows.ps1 -IncludePowerShell既存の chezmoi 由来設定を削除せず、対象だけを確認する場合は、切り替えスクリプトが
表示する dry-run の後の確認入力で中止します。自動実行時は、削除対象を確認済みの場合に
限り -Yes を追加できます。
./scripts/cutover-windows.ps1 -IncludePowerShell -Yes-IncludePowerShell を省略すると、新しい PowerShell profile、starship 設定、
PowerShell 用ツールは配置しません。どちらの場合も既存の chezmoi 由来 PowerShell
profile と starship 設定は削除します。
PowerShell profile を含めて初回切り替えした後は、新しい PowerShell 7 を開き、 どのディレクトリからでも次の一コマンドで更新できます。
dotfiles-updatedotfiles-update は $HOME\dotfiles が uvu1/dotfiles の master で
clean なことを検証し、origin/master へ fast-forward します。その後、Windows と
PowerShell の mise tools、mise dotfiles を順に適用して status まで確認します。
tracked/untracked を問わず worktree に変更がある場合は、変更一覧を表示して pull 前に
終了します。commit、push、stash、reset、ファイル削除は行いません。
Windows の Git と WezTerm は mise の GitHub backendから展開されるため、 スタートメニュー登録は行いません。mise の shim またはターミナルから起動します。 Nvim と WezTerm の設定は、Windows の symlink 権限に依存しない copy 配置です。 MinGit はGitHub側のTSA証明書とmiseの検証が一致しないリリースがあるため、このtoolの install中だけGitHub Artifact Attestationsを無効化します。checksumとSLSA provenanceの 検証は維持し、他のGitHub backend toolsではArtifact Attestationsも有効なままです。
nix --extra-experimental-features 'nix-command flakes' build .#darwinConfigurations.uvu1-mac.system
nix --extra-experimental-features 'nix-command flakes' build '.#homeConfigurations."uvu1@arch-wsl".activationPackage'
export MISE_EXPERIMENTAL=1
mise -C mise -E darwin dotfiles status --missing
mise -C mise -E linux dotfiles status --missingWindows では次を実行します。
$env:MISE_EXPERIMENTAL = "1"
mise -C mise -E windows ls --current
mise -C mise -E windows dotfiles status --missing
mise -C mise -E windows-powershell ls --current
mise -C mise -E windows-powershell dotfiles status --missing `
$HOME/.config/mise/config.toml `
$HOME/.config/starship.toml `
$HOME/Documents/PowerShell
Get-Command dotfiles-update