このリポジトリは Linux / macOS / Windows (native) の3OS対応で dotfiles 管理を行う構成です。
- Linux / macOS / WSL: Nix + Home Manager で管理
- Windows (native): PowerShell 7 スクリプトで管理
- 設定ファイルは可能な限り共通化:
git/,starship/,lazygit/,bat/,nvim/,wezterm/,opencode/,efm-langserver/は全OSで同一ファイルを共有
本dotfilesは私(nazozokc)が個人的に使用しているものです。
そのため、本番環境でのスクリプトの実行やconfigの使用は推奨しません。
本リポジトリに掲載した内容を使用したことに対するいかなる損害、損失、
またはそれに類するものに関して、私、及び貢献者は一切の責任を負わないものとし、
このリポジトリに掲載した内容を使用するユーザーはそれを理解したものとします。
- 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) - Windows: native (PowerShell 7 + scoop/winget)
- 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 環境を壊さず管理できます
- Windows 10 22H2+ または Windows 11
- PowerShell 7 (
winget install Microsoft.PowerShell) - 管理者権限は不要(scoop はユーザー権限で動作)
# 1. リポジトリをクローン
cd ~
git clone https://github.com/nazozokc/dotfiles.git
cd dotfiles
# 2. セットアップスクリプトを実行
pwsh -ExecutionPolicy RemoteSigned -File windows/setup.ps1スクリプトは windows/apply.ps1 を呼び出し、windows/config.psd1 を読んで収束(Nix の nix run .#switch に相当)します:
- パッケージ のインストール(scoop / winget / PSGallery で neovim, git, starship, lazygit, wezterm など)
- 設定ファイルの symlink(
git/,starship/,lazygit/,bat/,nvim/,wezterm/など → Windows の適切なパス) - PowerShell プロファイル のインストール(PS7 + PS5 両対応)
- システム設定(レジストリ調整)
# PowerShell 7 を再起動(プロファイルを読み込む)
# または手動で読み込み
. $PROFILE- Windows Terminal の設定は
windows/terminal/settings.jsonを参照して手動で適用してください - フォントは JetBrainsMono Nerd Font が自動インストールされます
# dotfiles の収束を再適用
pwsh windows/apply.ps1
# scoop 全更新
scoop update && scoop update *
# winget 更新
winget upgrade --alldotfiles/
├── git/ # Linux/macOS/WSL/Windows で共有
│ ├── config # メイン設定
│ ├── aliases # Git エイリアス
│ └── ignore # グローバル gitignore
├── starship/starship.toml # 全OS共有
├── lazygit/config.yml # 全OS共有
├── bat/config # 全OS共有
├── nvim/ # 全OS共有
├── wezterm/ # 全OS共有
├── opencode/ # 全OS共有 (エージェント設定)
├── efm-langserver/config.yaml # 全OS共有
├── windows/ # Windows 専用
│ ├── setup.ps1 # セットアップエントリポイント
│ ├── apply.ps1 # 収束メイン (Nix 相当)
│ ├── config.psd1 # 宣言的所望状態
│ ├── modules/ # PackageManager / SymlinkManager / ProfileManager / SystemManager
│ ├── Microsoft.PowerShell_profile.ps1 # PowerShell 7 プロファイル
│ └── terminal/settings.json # Windows Terminal 設定(参考)
├── wsl/ # WSL 専用
│ ├── .wslconfig # 全ディストロ共通 (Windows側 %USERPROFILE%\.wslconfig へ symlink)
│ └── wsl.conf # ディストロ別 (/etc/wsl.conf へ wsl-setup.sh で配置)
├── nix/ # Linux/macOS/WSL 専用 (Nix)
├── hypr/ waybar/ rofi/ dunst/ # Linux GUI (Hyprland) 専用
├── fish/ / zsh/ / bash/ # Linux/macOS/WSL 専用
└── my_scripts/ # 自作運用スクリプト
- fish / zsh / tmux / ghostty / Hyprland は Windows では動作しないため対象外です
- sops-nix によるシークレット管理は Windows 未対応です
- Windows Terminal の
settings.jsonはマシン固有の GUID が含まれるため、参考値として提供しています
WSL の設定は次の 2 ファイルで管理します。配置先が異なるため注意してください。
| ファイル | 配置先 | スコープ | 管理方法 |
|---|---|---|---|
wsl/.wslconfig |
Windows側 %USERPROFILE%\.wslconfig |
全ディストロ共通 (WSL2) | windows/apply.ps1 が symlink |
wsl/wsl.conf |
ディストロ内 /etc/wsl.conf |
ディストロ別 | my_scripts/wsl-setup.sh (root) |
wsl/.wslconfig が %USERPROFILE%\.wslconfig への symlink として管理されます。
.wslconfig は WSL の Linux 側 ~/.wslconfig では読まれないため、必ず Windows 側に配置してください。
# Windows 側でリポジトリの apply.ps1 を実行 (symlink 作成・更新)
pwsh windows/apply.ps1主な設定:
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 によるシステム設定
- Windows限定: PowerShell 7 スクリプト (
windows/) による収束管理
- 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