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
250
妥協しない! 宣言的マシン環境構築
nixを用いた宣言的デスクトップマシン環境構築のTips
MiSumiSumi
March 22, 2025
Tweet
Share
Other Decks in Technology
See All in Technology
OpenClawでPM業務を自動化
knishioka
2
340
Navigation APIと見るSvelteKitのWeb標準志向
yamanoku
2
130
Kiro Meetup #7 Kiro アップデート (2025/12/15〜2026/3/20)
katzueno
2
270
GitHub Advanced Security × Defender for Cloudで開発とSecOpsのサイロを超える: コードとクラウドをつなぐ、開発プラットフォームのセキュリティ
yuriemori
1
110
Zephyr(RTOS)でARMとRISC-Vのコア間通信をしてみた
iotengineer22
0
100
AI時代のIssue駆動開発のススメ
moongift
PRO
0
300
Kubernetesの「隠れメモリ消費」によるNode共倒れと、Request適正化という処方箋
g0xu
0
160
ADK + Gemini Enterprise で 外部 API 連携エージェント作るなら OAuth の仕組みを理解しておこう
kaz1437
0
230
【AWS】CloudTrail LakeとCloudWatch Logs Insightsの使い分け方針
tsurunosd
0
120
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
77k
OCI技術資料 : 証明書サービス概要
ocise
1
7.1k
Change Calendarで今はOK?を仕組みにする
tommy0124
1
130
Featured
See All Featured
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
610
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Everyday Curiosity
cassininazir
0
180
Crafting Experiences
bethany
1
97
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
Designing for humans not robots
tammielis
254
26k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Docker and Python
trallard
47
3.8k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
160
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
54k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
500
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