2025/5/24 NixでMacの全ての環境構築ができた @Nix meetup #3 自己紹介
mrsekut.icon
mrsekut (まる)
コメント、感想、指摘、補足など、(いつでも)このページに直接書き込んでもらえると嬉しいですmrsekut.icon
環境構築、毎回つらくないですか?
新しいPCを買ったとき、環境構築に何時間かけますか?
個人用PC の 会社用PC の環境の同期めんどくないですか?
mrsekut.icon Nixを使ってdotfilesを構成した話をする
Macを対象とする
dotfilesってなに?
各種設定ファイルの集合を指す
e.g. .vimrc, .zshrc, .gitconfig
転じて、グローバルなPC環境構築するスクリプト全般を指す (要出典)
これをGitで管理して、PC跨いで同じ設定ファイルを使おう、というもの
Nix関係ない一般的な概念
ググると、Shell scriptで書かれたものがヒットすることが多い
今日は、これをNixを使って書いているという話をします
いつ便利?
複数台PC使っているとき
PCの買い替え時
コマンド (ほぼ)1発で環境が再現される
$ just nix-apply
一発というのは嘘です (笑)
管理しているものの例
グローバルで使うコマンド系とか
Git, fzf, exa, ...
各言語のランタイムとか
Bun, GHC, Cargo, ...
設定ファイル
zsh, Starship, Karabiner...
デスクトップアプリ
Google Chrome, Zoom, Orbstack, ...
App Storeのアプリ
Kindle, Toggl, ..
Mac自体の設定
Dockの大きさとか、トラックパッドの設定とか、..
自作の簡易スクリプトの管理
VSCodeの設定
拡張機能のインストールなど
これはNixでは管理してない (後述)
使っているもの
言わずとしれたpackage manager
雑に言えば dotfiles をするやつ
ロールバックなどもコマンドで行える
Mac の設定を Nix で管理するやつ
簡単な例
code:modules/bat/default.nix
{ pkgs, ... }:
{
home.packages = with pkgs; bat ; # batを入れる programs.zsh.shellAliases = {
cat = "bat"; # batのエイリアスをcatにする
};
}
code:modules/darwin/trackpad.nix
{ ... }:
{
system.defaults.trackpad = {
Clicking = true; # タップでクリックを有効化
Dragging = false; # タップでドラッグを無効化
ActuationStrength = 1; # サイレントクリックを無効(0で有効、1で無効)
FirstClickThreshold = 0; # 通常クリックのクリック圧:0=軽い, 1=普通, 2=重い
SecondClickThreshold = 0; # 強めのクリック(Force Click)のクリック圧:0=軽い, 1=普通, 2=重い
TrackpadRightClick = true; # トラックパッドで右クリックを有効
};
system.defaults.NSGlobalDomain."com.apple.trackpad.scaling" = 3.0; # 軌跡の速さ(マウス&トラックパッドのカーソル移動速度)
}
なんとなくイメージ湧きましたか?mrsekut.icon
Tips: 導入時の辛さどうにかしたい
Nix 周りは学習コストが高いのは周知の事実 ...😢
ドキュメントが整備されていない
コードを読んで理解してねというマッチョスタイル
この辺の体験どうにかならのかと思ってる
Devboxは体験良い
AIに聞こう
DeepWikiが便利
デモ的に試してみようmrsekut.icon
github→deepwikiに変える
適当に以下を聞いてみよう
code:_
flakeとhome-managerを使った最小の構成のサンプルコードを書いてください
gitだけhome-managerで追加するものとしましょう
手動の環境構築を徐々にNixに寄せていく
たぶん全てを一気にNixで管理するのは大変
これを徐々にNixに寄せていった
Tips: 可読性を上げよう
kakkun61.icon
Private project
mrsekut.iconすみません、リンク間違ってたので直しといた
ファイルツリーで入っているものを説明する
code:例
modules
├── bat
├── claude
├── darwin
│ ├── dock.nix
│ ├── fonts.nix
│ └── trackpad.nix
├── editors
│ ├── default.nix
│ ├── emacs
│ ├── neovim
│ └── vscode
├── git
├── gyazo
├── languages
│ ├── default.nix
│ ├── idris
│ ├── lean
│ ├── purescript
│ └── rust
├── nix
│ ├── default.nix
│ ├── devbox
│ ├── direnv
│ └── nix
├── nix-darwin.nix
├── ripgrep
├── terminals
│ ├── default.nix
│ ├── starship
│ ├── warp
│ └── zsh
└── utils
(お悩み相談) flake.nixの書き方どうにかならないすかね?
こんな感じで書かないといけない
https://gyazo.com/34f8d7a310aeb3acb29f6a37fcdcc092
inputとoutputが離れた場所にある
数が増えてくるとどんどん距離が離れていって辛い
こんな感じで書けないですかね? (嘘コード)
https://gyazo.com/5c5863b197c2aeabd2482c385d830979
こめんともろたmrsekut.icon
ディレクトリ分けて、それごとにflake.nixを用意すると行けるかも?
dev flake pattern
VSCode (Cursor)の設定は、Nixでは管理してない
一応やる方法はあるっぽい
あまりメリットがわからないmrsekut.icon
VSCode上のGUIで操作できなくなりそう (しらんけど)
Nix は使ってないが dotfiles で管理している
まとめ
Nixを使えば、Macの環境構築を再現性のあるものにできる
Home Managerやnix-darwinを組み合わせて構成できる
少しずつ手動構築からNixに寄せていくのがオススメ
宣伝タイム
業務で Nix 使いたくないですか?
HERPでは全社的にNixを活用して開発環境を整えています kakkun61.icon も働いています
社内 Slack に Nix の知見が集まるチャンネルもある
mrsekut.iconは2025/4に入社した
環境構築が一瞬で終わって感動した
興味ある方、ぜひお声がけください!
感想、コメントなど
vscodeの話
copilotとvscodeのバージョン一致がシビア
設定ファイルをNix式で書いてJSONとかに変換するパターンもある
mrsekut.iconは逆向きでやってた
素直にJSON書いて、Nixから読み込む
「全部」に含まれないものあったなmrsekut.icon
Macの細かい設定
credential系のやつ
内容がしょぼいかと思ってたが発表後のコメントが割と盛り上がって良かったmrsekut.icon