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
MiSumiSumi
March 22, 2025
Technology
1
110
妥協しない! 宣言的マシン環境構築
nixを用いた宣言的デスクトップマシン環境構築のTips
MiSumiSumi
March 22, 2025
Tweet
Share
Other Decks in Technology
See All in Technology
Agentic DevOps時代の生存戦略
kkamegawa
0
1k
A2Aのクライアントを自作する
rynsuke
1
150
「Chatwork」の認証基盤の移行とログ活用によるプロダクト改善
kubell_hr
1
100
AWS Summit Japan 2025 Community Stage - App workflow automation by AWS Step Functions
matsuihidetoshi
1
140
Wasm元年
askua
0
100
AWS アーキテクチャ作図入門/aws-architecture-diagram-101
ma2shita
29
9.5k
より良いプロダクトの開発を目指して - 情報を中心としたプロダクト開発 #phpcon #phpcon2025
bengo4com
1
390
OpenHands🤲にContributeしてみた
kotauchisunsun
0
200
変化する開発、進化する体系時代に適応するソフトウェアエンジニアの知識と考え方(JaSST'25 Kansai)
mizunori
0
140
成立するElixirの再束縛(再代入)可という選択
kubell_hr
0
950
25分で解説する「最小権限の原則」を実現するための AWS「ポリシー」大全
opelab
9
2.2k
BigQuery Remote FunctionでLooker Studioをインタラクティブ化
cuebic9bic
2
230
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Producing Creativity
orderedlist
PRO
346
40k
Code Review Best Practice
trishagee
68
18k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
16
940
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
Visualization
eitanlees
146
16k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
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