Skip to content

Repository files navigation

Wiki

DeepWiki

Nazozo Dotfiles

このリポジトリは Linux / macOS / WSL の dotfiles 管理を行う構成です。

  • Linux / macOS / WSL: Nix + Home Manager で管理
  • 設定ファイルは可能な限り共通化: git/, starship/, lazygit/, bat/, nvim/, wezterm/, opencode/, efm-langserver/ は全OSで同一ファイルを共有

対応 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 コマンドが使えること

Nix のインストール

Linux (推奨: マルチユーザーインストール)

# マルチユーザーインストール (sudo が必要)
sh <(curl -L https://nixos.org/nix/install) --daemon --yes

# シェルを再起動するかログインし直す
exec $SHELL

macOS

# シングルユーザーインストール (推奨)
sh <(curl -L https://nixos.org/nix/install) --no-daemon

# またはマルチユーザーインストール
sh <(curl -L https://nixos.org/nix/install) --daemon --yes

# シェルを再起動するかログインし直す
exec $SHELL

インストール確認

nix --version
nix-env --version

初回導入 (nix run を使用)

cd ~
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 セットアップ

WSL の設定は次の 2 ファイルで管理します。配置先が異なるため注意してください。

ファイル 配置先 スコープ 管理方法
wsl/.wslconfig Windows側 %USERPROFILE%\.wslconfig 全ディストロ共通 (WSL2) 手動コピー
wsl/wsl.conf ディストロ内 /etc/wsl.conf ディストロ別 my_scripts/wsl-setup.sh (root)

.wslconfig — 全ディストロ共通 (Windows側)

.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)

/etc/wsl.conf — ディストロ別 (root 必要)

# リポジトリの 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 Checknix flake check)と treefmt checknix fmt -- --ci)を必須とします。
  • ローカルでも PR 前に次を実行してください。
nix flake check
nix fmt -- --ci

シークレット管理(sops-nix)

  • シークレットは secrets/common.yamlsops で暗号化して管理します。
  • 展開先(Linux / WSL)は以下です。
    • api/github_token~/.config/secrets/github_token
    • api/openai_api_key~/.config/secrets/openai_api_key
    • api/anthropic_api_key~/.config/secrets/anthropic_api_key
  • 鍵は ~/.config/sops/age/keys.txt を使用します。
  • secrets/common.yaml が存在しない場合、secret は読み込まれません(CIの非復号チェックを壊さないため)。

home.stateVersion ポリシー

  • 現在値は nix/shared.nixhome.stateVersion = "26.11";
  • 互換性維持のため、通常運用で上げない
  • 上げるのは以下を満たす場合のみ。
    1. Home Manager / nixpkgs 更新で新規 stateVersion が必要。
    2. 変更PRで nix flake checknix run .#build を通過。
    3. 既存dotfilesリンク・シェル起動・主要CLI(git, gh, nvim)動作確認を記録。
  • 例外: Intel Mac (x86_64-darwin) は home-manager 26.05 系スタックのため mkForce "26.05" に固定。

Activity

Alt

LICENSE

MIT

Releases

Packages

Used by

Contributors

Languages