介紹 NixOS 的核心哲學:聲明式配置與不可變性,帶你理解 Nix Store、Generation 等基本觀念,重塑對 Linux 系統管理的認知。
手把手帶你編輯第一份 configuration.nix,學會安裝套件、管理使用者與開啟 SSH 服務,並透過 nixos-rebuild 讓配置生效。
深入 NixOS 命令列工具箱,詳解 nixos-rebuild 的各種子指令、nix-env 的使用方式,以及如何清理舊 generation 與臨時試用套件。
深入理解 NixOS 的 Generation 機制與版本管理,學會使用 build-vm 在虛擬機中安全測試配置變更,避免系統損壞風險。
拆解 hardware-configuration.nix 的結構與用途,說明 NixOS 如何以聲明式方式管理硬體驅動、檔案系統與開機引導等伺服器硬體配置。
學會在 configuration.nix 中設定網路介面、靜態 IP、DNS 與防火牆規則,讓你的 NixOS 伺服器安全地連上網路。
第一週總複習,回顧 Day 1 到 Day 6 的核心觀念,並學會用 Git 管理 NixOS 配置檔,建立良好的版本控制習慣。
進入第二階段,學習 Nix 語言的基礎語法:資料型別、函式、let 綁定與 attribute set,從此不再只是複製貼上別人的配置。
學會使用 nix-shell 快速建立臨時開發環境,不需安裝軟體就能擁有完整的工具鏈,解決版本衝突與環境不一致的痛點。
從臨時的 nix-shell -p 指令進階到撰寫專案級的 shell.nix,實戰示範如何為團隊打造可重現、一致的開發環境配置。
介紹 Nixpkgs 套件庫與 Channels 機制,說明 Nix 軟體包的來源與版本管理方式。
深入解析 Derivation 的核心概念,理解 Nix 如何透過建置計畫書將原始碼轉換為 /nix/store 中的套件。
使用 writeShellScriptBin 等 trivial builders,將自動化腳本打包成可重現的 Nix Package。
第二階段總複習,整理 Nix 語言核心觀念並透過實戰演練將開發環境完全移入 nix-shell。
介紹 Flakes 的核心概念與啟用方式,說明為何 Flakes 是 2024 年後 Nix 生態系的標準做法。
實作將傳統 channel-based 的系統配置完整遷移到 flake-based 架構,達成 100% 可重現的系統管理。
安裝 Home Manager 並學會用宣告式設定取代手動管理 dotfiles,統一管理使用者層級的開發環境。
針對 MacBook 與 NixOS Server 兩種環境分別規劃工具鏈,學會共用通用設定並區隔環境差異。
學習將膨脹的 Nix 設定檔拆分為多模組架構,讓 NixOS 與 macOS 共用同一個 Flake 並各自引入專屬模組。
介紹 nix-index 與 direnv 兩大實務工具,解決找不到套件與自動載入開發環境的痛點。
回顧第三週 Flakes 與 Home Manager 的核心觀念,整理如何用一份 flake.nix 同時管理 NixOS Server 與 MacBook 的跨平台開發環境。
介紹 NixOS 中兩大主流密鑰管理方案 sops-nix 與 agenix,解決將密碼和 API Key 安全存放於 Git repository 的實務需求。
探討如何用 Nix 取代 Dockerfile 來構建極小化、完全可重現的容器映像檔,比較 Nix 與 Docker 在構建流程上的互補關係。
深入理解 Nix Overlay 的概念與語法,學會在不 fork Nixpkgs 的情況下覆寫、打補丁或新增自訂套件。
介紹 Colmena 與 deploy-rs 兩大遠端佈署工具,實現從本機定義配置並透過 SSH 一鍵推送到 NixOS Server 的 Infrastructure as Code 流程。
學習撰寫自訂 NixOS Module,理解 module system 中 options 宣告與 config 實作的核心機制,打造可重用、可組合的系統模組。
示範如何在 GitHub Actions 中整合 Nix,打造穩定、快速且完全可重現的 CI/CD pipeline,解決環境不一致的構建問題。
解析 Nix Binary Cache 的運作原理,介紹 Cachix 等工具來快取構建產物,大幅縮短團隊和 CI 環境的編譯時間。
學習 NixOS 的日常保養,包含用 nix-tree 分析依賴關係、管理磁碟空間、最佳化編譯速度,以及建立系統健康檢查流程。
NixOS 30 天旅程的畢業挑戰:完整走過為 Nixpkgs 貢獻 package 的流程,從 fork、撰寫 derivation 到提交 PR,回饋開源社群。