このリポジトリは Linux / macOS / WSL の dotfiles 管理を行う構成です。
- Linux / macOS / WSL: Nix + Home Manager で管理
- 設定ファイルは可能な限り共通化:
git/,starship/,lazygit/,bat/,nvim/,wezterm/,opencode/,efm-langserver/は全OSで同一ファイルを共有
- Linux:
x86_64-linux(Arch Linux など) - Linux:
aarch64-linux(ARM linux) - WSL:
x86_64-linux(WSL2) - macOS:
aarch64-darwin(Apple Silicon) /x86_64-darwin(Intel Mac)
- Nix がインストール済みであること
- インストール方法は下部の「Nix のインストール」を参照
- macOS の場合は Nix 2.15+ 推奨
- Linux / macOS 両方で
nixコマンドが使えること
# マルチユーザーインストール (sudo が必要)
sh <(curl -L https://nixos.org/nix/install) --daemon --yes
# シェルを再起動するかログインし直す
exec $SHELL# シングルユーザーインストール (推奨)
sh <(curl -L https://nixos.org/nix/install) --no-daemon
# またはマルチユーザーインストール
sh <(curl -L https://nixos.org/nix/install) --daemon --yes
# シェルを再起動するかログインし直す
exec $SHELLnix --version
nix-env --versioncd ~
git clone https://github.com/nazozokc/dotfiles.git
cd dotfiles
# nix.conf が存在しない or experimental-features が未設定の場合のセットアップ
sudo mkdir -p /etc/nix
sudo tee /etc/nix/nix.conf > /dev/null << 'EOF'
experimental-features = nix-command flakes
build-users-group = nixbld
trusted-users = root nazozokc
EOF
# nix.conf 書き込み後はシェルを再起動するか、以下で即座に反映可能
exec $SHELL
# Home Manager + pkgs の初回セットアップ
nix run .#switch- Linux / macOS 両方で
nix run .#switchだけで初回セットアップ可能 - Home Manager による dotfiles のリンクとパッケージインストールが行われます
- macOS では nix-darwin を通して Home Manager 設定も有効化されます
# dotfilesやパッケージ更新
nix run .#switch
# バージョン更新
nix run .#update- Linux は Home Manager 単体で管理
- macOS は nix-darwin を通して Home Manager を管理
- GUIアプリも Nix で管理可能
- 既存の PATH 環境を壊さず管理できます
WSL の設定は次の 2 ファイルで管理します。配置先が異なるため注意してください。
| ファイル | 配置先 | スコープ | 管理方法 |
|---|---|---|---|
wsl/.wslconfig |
Windows側 %USERPROFILE%\.wslconfig |
全ディストロ共通 (WSL2) | 手動コピー |
wsl/wsl.conf |
ディストロ内 /etc/wsl.conf |
ディストロ別 | my_scripts/wsl-setup.sh (root) |
.wslconfig は WSL の Linux 側 ~/.wslconfig では読まれないため、必ず Windows 側に配置してください。
# Windows 側で手動コピー
cp wsl/.wslconfig $env:USERPROFILE\.wslconfig主な設定:
memory=8GB/processors=8/swap=4GB— vmmem がホスト RAM を食い尽くすのを防止networkingMode=mirrored— localhost 共有 / IPv6 / ホスト IP 到達性dnsTunneling=true— VPN・社内 NW でresolv.confが壊れる問題を防止autoMemoryReclaim=gradual+sparseVhd=true— メモリ・VHD の無制限膨張を防止defaultVhdSize=256GB— ディスク上限 (既存 VHD に効かせるにはwsl --manage <distro> --set-sparse true)
# リポジトリの wsl/wsl.conf を /etc/wsl.conf に反映 + ja_JP.UTF-8 ロケール生成
sudo ~/.scripts/wsl-setup.sh主な設定:
[boot] systemd=true— home-manager の systemd タイマー (nix-store GC 等) に必須[automount] options="metadata,umask=22,fmask=11"— /mnt/c の権限メタデータ保持[network] generateResolvConf=true— DNS 自動生成 (VPN で壊れる場合はfalseにして手動管理)[user] default=nazozokc/[time] useWindowsTimezone=true
# Windows 側で実行: 全 WSL を停止して 8 秒待ってから再起動
wsl --shutdown- 設定は WSL インスタンス完全停止後に読み込まれます (8秒ルール)
- 複数ディストロがある場合、
/etc/wsl.confは各ディストロでwsl-setup.shを実行してください (.wslconfigは全ディストロに自動適用されます) nix run .#switch(WSL) は実行前に.wslconfigの symlink 状態を事前チェックします
- シェル: fish, zsh, bash
- エディタ: Neovim, VSCode, Zed
- プロンプト: starship
- CLIツール: Nix によるパッケージ管理。
nix/modules/home/packages/配下で分類 (base/,dev/,ai/,gui/,experimental/)- base: jq, curl, zoxide, eza, tmux, yazi, gh, ghq, jujutsu, docker, lazydocker, nix-tree, cachix, nh など
- dev: python312, nodejs, bun, deno, rustc, go, jdk, clang, efm-langserver など
- ai: ollama, opencode, codex, claude-code
- gui: wezterm, ghostty, vscode, zed, spotify, discord, google-chrome など
- experimental: pi-coding-agent, grok-cli, qwen-code
- Home Manager: dotfiles (
.config/*), ホームディレクトリリンク管理 - Linux GUI (Hyprland): hypr, waybar, rofi, dunst
- macOS限定: nix-darwin によるシステム設定
- OS本体やカーネルは pacman(Linux)や macOS 標準管理に任せる
- Home Manager によるリンクや設定は既存の dotfiles を上書きする場合があります
- PR では Nix Flake Check(
nix flake check)と treefmt check(nix fmt -- --ci)を必須とします。 - ローカルでも PR 前に次を実行してください。
nix flake check
nix fmt -- --ci- シークレットは
secrets/common.yamlを sops で暗号化して管理します。 - 展開先(Linux / WSL)は以下です。
api/github_token→~/.config/secrets/github_tokenapi/openai_api_key→~/.config/secrets/openai_api_keyapi/anthropic_api_key→~/.config/secrets/anthropic_api_key
- 鍵は
~/.config/sops/age/keys.txtを使用します。 secrets/common.yamlが存在しない場合、secret は読み込まれません(CIの非復号チェックを壊さないため)。
- 現在値は
nix/shared.nixのhome.stateVersion = "26.11";。 - 互換性維持のため、通常運用で上げない。
- 上げるのは以下を満たす場合のみ。
- Home Manager / nixpkgs 更新で新規 stateVersion が必要。
- 変更PRで
nix flake checkとnix run .#buildを通過。 - 既存dotfilesリンク・シェル起動・主要CLI(git, gh, nvim)動作確認を記録。
- 例外: Intel Mac (
x86_64-darwin) は home-manager 26.05 系スタックのためmkForce "26.05"に固定。
MIT