Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
妥協しない! 宣言的マシン環境構築
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
MiSumiSumi
March 22, 2025
Technology
260
1
Share
妥協しない! 宣言的マシン環境構築
nixを用いた宣言的デスクトップマシン環境構築のTips
MiSumiSumi
March 22, 2025
Other Decks in Technology
See All in Technology
コードや知識を組み込む / Incorporate Code and Knowledge
ks91
PRO
0
140
AI駆動1on1〜AIに自分を育ててもらう〜
yoshiakiyasuda
0
120
Hacobu Tech Deck
hacobu
PRO
0
100
KGDC_13_Amazon Q Developerで挑む! 13事例から見えたAX組織変革の最前線_公開情報
kikugawa
0
120
Amazon S3 Filesについて
yama3133
2
210
[OpsJAWS 40]リリースしたら終わり、じゃなかった。セキュリティ空白期間をAWS Security Agentで埋める
sh_fk2
3
230
Practical TypeProf: Lessons from Analyzing Optcarrot
mame
0
230
マルチプロダクトの信頼性を効率良く保っていくために
kworkdev
PRO
0
150
最新の脅威動向から考える、コンテナサプライチェーンのリスクと対策
kyohmizu
1
700
Master Dataグループ紹介資料
sansan33
PRO
1
4.6k
実践ハーネスエンジニアリング:TAKTで実現するAIエージェント制御 / Practical Harness Engineering: AI Agent Control Enabled by TAKT
nrslib
9
4.4k
ARIA Notifyについて
ryokatsuse
1
120
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
350
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
260
Scaling GitHub
holman
464
140k
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
Embracing the Ebb and Flow
colly
88
5k
Designing for Timeless Needs
cassininazir
0
190
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
370
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
760
Transcript
妥協しない! 宣言的マシン環境構築 Sumi-Sumi 1
お前は誰だ? とっても簡単なNixOS 妥協しない? CI/CDによる自動化 Branch・Versioning戦略 外部パッケージマネージャの統合 まとめ 2
お前は誰だ? 3
プロフィール 名前 Sumi-Sumi 身分 院生 (M2→D1, 音声合成系) nix 2022/09〜 用途
Desktop, HomeLab, ML 今日の資料 nixos-desktop-config nvimdots 4
ディストロの変遷 5
デスクトップ環境 NixOS unstable WM Qtile Shell Zsh Terminal Wezterm +Tmux
Editor Neovim 6
とっても簡単なNixOS 7
First Rise non flake 1. nixos-generate-config 2. *.enable = true;+頑張る
3. nixos-rebuild switch flake 1. nix flake init 2. inputsに依存を追加 home-managerとかnixos-hardware… 3. *.enable = true;+頑張る 4. nixos-rebuild switch → NixOSの良さ活かせてる? 8
妥協しない? 9
1. nixos-unstableの安定的な運用 2. プラットフォーム間で環境差異が無いこと 3. 宣言的デプロイ is All You Need
10
どうやって実現する? 1. CI/CDによる自動化 2. Branch・Versioning戦略 3. 外部パッケージマネージャの統合 11
CI/CDによる自動化 12
Arch Linux時代 適当なアプデ →AURビルド不備、破壊的変更による起動不可 nix=Infrastructure as Code (IaC) CI/CDで予防できる! 13
flake.lockの自動更新 flake.lockを更新→PR作成 実際は依存先から順に更新 → → DeterminateSystems/update-flake-lock nvimdots flakes nixos-desktop-config 14
Deprecated optionの通知 nixos-unstableは仕様変更が多々ある 式を評価 →Evaluation WarningがあればISSUEを開く 15
ビルドテスト システムビルドに必要な容量:60GB~ は容量が足りない→空き29GB 不要パッケージの削除, ディスク(LVM)割り当ての変更 /nix:96GB確保 ビルド時間:40分~ 標準Runner easimon/maximize-build-space 16
パブリックでのシークレット管理 パブリックリポジトリだと標準Runnerが無料! 個人マシンには秘匿情報がいっぱい! パスワード、ssh、APIキー… 17
age, pgpでファイル暗号化 アクティベーション時に符号化 /nix/storeには暗号化ファイルが配置 Mic92/sops-nix 18
Branch・Versioning戦略 19
そのNixOS 常にロールバックできる? No 既デプロイへのロールバック◦ コードレベルは? force push/pull … NixOSにおいてコード=マシン状態 (IaC)
適切な管理下でロールバックが初めて担保 20
ブランチ戦略:GitHub flow 細かい変更を受容 mainは常に起動可能な状態を維持 →エラー無く動作する? 21
バージョン戦略 起動可≠各Appがエラー無く動作 nixpkgs/modulesが アップストリームの仕様に追随している訳ではない リリース地点=動作確約 ビルドテスト→mainにマージ→リリース (テストは特定のファイルの変更があったときのみ) 22
お一人様向け:より厳密な運用 によるコードレビュー 自分のコードに対して承認できない github actions [bot] はworkflowが走らない GitHub Appsで別人格を作成 agent-of-me:
コードレビュー、変更の承認・取り消し workflow-executer: flake.lockの更新・リリースPRの作成 reviewdog 23
外部パッケージマネージャの統合 24
nixは完全無欠で究極のpkg manager… じゃない? 導入にroot権限が必須 多くの容量 複数マシンでの/nix/storeの共有 維持コスト 上流の変更への追随 教育・継承 =
共有鯖・支給PCで使いにくい →nixだけで完結させるのは限界 25
nixos-desktop-configの構成 App Confはnixpkgsを優先しているものもある 26
の統合 lazy-loadingによる高速起動 (~80ms) マルチプラットフォーム ayamir/nvimdots folke/lazy.nvim 27
NixOS特有の設定 NixOS上でのバイナリ動作 +依存関係をPATHへ追加 lock fileをnix上で扱うロジックの構築 xdg.configFileはread onlyなため (例): mason-lock.json nix-ld
28
windowsを含めたマルチプラットフォームに対応 GPGやageを用いたファイル暗号化 各種パスワードマネージャのサポート アーカイブファイルの自動展開 chezmoi 29
強力なテンプレートとスクリプト Goテンプレートによる動的な変更 アクティベート時のスクリプト実行に よる追加処理 非NixOS(windows含む)でも 宣言的パッケージインストール 30
chezmoiとnix chezmoi: による状態管理 json、tomlはnixのbuiltinsで読み込み可 nix: で 設定ファイルを$XDG_CONFIG_HOME以下に配置 →設定ファイルを重複させなくて良い (NixOS上でchezmoiは使っていない) chezmoi環境の再現性は担保されない
.chezmoidata.$FORMAT xdg.configFile.source 31
99%の再現性と1%の非再現性 再現性<利便性 ex) zinit 遅延ロード (3ms~5ms) zshプラグインはバージョニングに厳密でない nixpkgsは古いままのが多々ある ex) tpm
非nix環境で 32
まとめ 33
リポジトリの運用次第でより堅牢な環境構築 外部パッケージの許容により利便性を向上 chezmoiによりwindowsも宣言的に管理 34
今後 dotfilesはまだまだ続くよどこまでも btrfs, nix-darwin, arm… テストの充実 VMを用いた起動テスト HomeLabの構築 dotfilesは進捗じゃ ありません!
35
None