这是一个使用 flakes 和 home-manager 的 NixOS 系统配置仓库。配置了完整的 NixOS 系统,包括 Niri Wayland 窗口管理器环境以及用户特定的家目录配置。
- 窗口管理器: Niri 窗口管理器
- 显示管理器: SDDM 配合 SilentSDDM 主题
- 音频系统: PipeWire
- 输入法: Fcitx5 + Rime 小鹤音形
- 代理服务: DAE 高级代理系统,智能路由和自动化订阅管理
- 设备配置: 支持多设备的差异化配置
- 用户环境: 统一的 Shell 环境(Fish + Starship)和开发工具
- 笔记本电脑: 高分辨率显示(3120x2080@120),2.0 倍缩放
- 实验室设备: 标准显示(1980x1080@60),1.2 倍缩放
- 默认配置: 笔记本电脑配置(通过
nixos别名访问)
# 构建并切换到新的系统配置
sudo nixos-rebuild switch --flake .
# 更新 flake 输入
nix flake update
# 查看 flake 输出
nix flake show
# 格式化代码库
nix fmt# 构建笔记本电脑配置
sudo nixos-rebuild switch --flake .#laptop
# 构建实验室配置
sudo nixos-rebuild switch --flake .#class
# 默认配置(别名到笔记本)
sudo nixos-rebuild switch --flake .#nixos# 编辑秘密文件
ragenix -e secret-name.age
# 为新 SSH 密钥重新密钥所有秘密
ragenix -r
# 列出所有秘密
ragenix -lnixos-config/
├── flake.nix # 主 flake 定义
├── flake.lock # flake 锁定文件
├── hosts/ # 设备配置(新架构)
│ ├── laptop/ # 笔记本电脑配置
│ │ ├── default.nix # 主机配置入口
│ │ ├── hardware-configuration.nix # 硬件配置
│ │ └── laptop.nix # 设备特定配置
│ ├── class/ # 实验室设备配置
│ │ ├── default.nix # 主机配置入口
│ │ ├── hardware-configuration.nix # 硬件配置
│ │ ├── class.nix # 设备特定配置
│ │ └── config-class.kdl # Niri 窗口管理器配置
│ └── base.nix # 基础系统配置
├── home-manager/ # 用户家目录配置
│ ├── home.nix # 基础用户配置(包、Git、Age、模块化Shell导入)
│ ├── shell/ # Shell 环境配置
│ │ ├── default.nix # Shell 模块入口
│ │ ├── fish/ # Fish Shell + Starship 配置
│ │ ├── kitty/ # Kitty 终端模拟器
│ │ ├── neovim/ # Neovim/LazyVim 配置
│ │ ├── claude-code/ # Claude Code AI 助手
│ │ ├── gcc/ # GCC14 工具链
│ │ └── common.nix # 通用 Shell 工具
│ ├── fcitx5/ # Fcitx5 + Rime 小鹤音形输入法
│ ├── niri/ # Niri 窗口管理器配置
│ │ └── config.kdl # 默认电脑配置(高分辨率)
│ ├── secrets/ # 用户秘密文件
│ └── applications/ # 用户应用程序
├── modules/ # 自定义 NixOS 模块
│ ├── dae/ # DAE 代理服务模块
│ │ ├── default.nix # DAE 服务配置
│ │ ├── subscriber.nix # 自动订阅管理
│ │ └── config.dae # 内联 DAE 配置
│ ├── niri/ # Niri 窗口管理器模块
│ │ ├── default.nix # Niri 系统集成
│ │ └── sddm.nix # SDDM 显示管理器配置
│ └── default.nix # 模块入口点
├── overlays/ # Nixpkgs 覆盖层
│ ├── default.nix # 覆盖层入口
│ └── fcitx5/ # Fcitx5 自定义配置
└── secrets/ # 系统级加密秘密文件
采用分层主机配置架构,支持多设备管理:
- 共享模块: 通过模块化系统实现配置复用
- 设备特定: 每个设备在独立目录中管理其配置
- 硬件抽象:
hardware-configuration.nix自动生成并维护
hosts/hostname/default.nix- 主机配置入口点,导入必要模块hosts/hostname/hardware-configuration.nix- 硬件特定配置(自动生成)hosts/hostname/hostname.nix- 设备特定的额外配置
模块化用户环境管理系统:
- 基础配置 (
home-manager/home.nix): 共享用户包、Git 配置、Age 加密、模块化 Shell 导入 - Shell 环境 (
home-manager/shell/): Fish Shell + Starship、开发工具、终端配置 - 输入法 (
home-manager/fcitx5/): Fcitx5 + Rime 小鹤音形输入法 - 窗口管理器 (
home-manager/niri/): 设备特定的 Niri 配置文件 - 应用配置 (
home-manager/applications/): 用户应用程序配置
- 高级代理系统,智能路由
- 通过 systemd 计时器自动化订阅管理
- 内联配置与加密订阅文件
- 智能路由策略:
- 国际网站:Google DNS(8.8.8.8)
- 国内网站:阿里 DNS(223.5.5.5)
- AI 服务:代理直连
- 区域特定代理规则
模块化 Shell 环境配置系统:
- Fish Shell (
shell/fish/): 配合 Starship 提示符,交互式 Shell - Kitty (
shell/kitty/): 功能强大的终端模拟器 - Neovim (
shell/neovim/): LazyVim 配置,LSP 和插件 - GCC 工具链 (
shell/gcc/): GCC14 配置,带有标准库预编译头文件 - 开发工具: fzf、ripgrep、eza、bat、lazygit 等
- Claude Code (
shell/claude-code/): AI 编程助手集成 - 通用工具 (
shell/common.nix): 跨平台通用开发工具
shell/default.nix- Shell 模块入口点,导入所有子模块- 各子模块独立配置,便于维护和选择性启用
- Fcitx5: 带有自定义 Rime 小鹤音形数据的输入法
仓库采用分层主机配置架构:
- 基础层:
home-manager/home.nix和modules/中的共享配置 - 主机层:
hosts/hostname/中的主机特定配置 - 硬件层:
hosts/hostname/hardware-configuration.nix中的硬件特定设置 - 服务层: 应用于所有设备的
modules/中的自定义模块 - 用户层:
home-manager/中的模块化用户环境配置
每个主机配置遵循统一的结构模式:
hosts/hostname/default.nix- 主配置文件,导入所有必要的模块hosts/hostname/hardware-configuration.nix- 硬件配置(由nixos-generate-config生成)hosts/hostname/hostname.nix- 主机特定的额外配置
这种模式允许:
- 共享配置: 通用设置在模块和基础配置中定义一次
- 主机特化: 每个主机在独立目录中管理其特定配置
- 可维护性: 通过创建新主机目录轻松添加新设备
- 一致性: 所有主机都从相同的模块系统继承
- 硬件隔离: 硬件配置与逻辑配置分离
配置使用自定义模块系统:
modules/default.nix: 主模块入口点modules/dae/: DAE 代理服务配置modules/niri/: Niri 窗口管理器系统配置- 模块在主 flake 配置中导入并应用于所有设备配置
- GCC: 自定义 GCC14 配置,带有标准库预编译头文件
- Neovim: 带有自定义插件的 LazyVim 配置(LSP、competitest、配色方案)
- Fish Shell: Starship 提示符集成
- Kitty: 带有 Dracula 主题和自定义配置的终端模拟器
- Claude Code: AI 助手集成
- nixpkgs-unstable: 主要包集合
- nixpkgs-25.05: 稳定版后备
- home-manager-25.05: 家目录管理器
- daeuniverse: 代理服务
- ragenix: 秘密管理
- SilentSDDM: Niri 的 SDDM 主题
秘密使用 age 加密并通过 ragenix 管理:
- 在
home-manager/secrets/secrets.nix中为笔记本电脑和家庭 SSH 密钥定义公钥 - 系统秘密(如 DAE 配置)位于
secrets/目录 - 用户秘密(API 令牌)位于
home-manager/secrets/目录 - Age 身份路径:
/home/chumeng/.ssh/id_rsa
- 系统使用实验性 Nix 功能(flakes、nix-command)
- 允许非自由包(
nixpkgs.config.allowUnfree = true) - 配置了清华大学镜像器作为中国的加速替代源
- NixOS 和 home-manager 的状态版本都设置为 25.05
- 格式化工具:nixpkgs-fmt(使用
nix fmt) - 禁用家目录管理器版本检查以增加灵活性
- 桌面环境:Niri 窗口管理器
- 创建主机目录:
mkdir hosts/new-host - 复制并适配配置: 从现有主机复制
default.nix并根据需要调整 - 生成硬件配置:
sudo nixos-generate-config并将hardware-configuration.nix复制到新主机目录 - 更新 flake.nix: 在
nixosConfigurations中添加新主机配置 - 创建家目录配置: 根据需要创建对应的 home-manager 配置
- 系统级更改: 编辑
modules/中的相应模块 - 用户环境更改: 编辑
home-manager/home.nix(影响所有设备)或home-manager/shell/中的模块 - 主机特定更改: 编辑
hosts/hostname/中的配置文件 - 服务更改: 编辑
modules/中的适当模块 - 硬件更改: 编辑
hosts/hostname/hardware-configuration.nix(通常自动生成)
# 测试特定设备配置
sudo nixos-rebuild build --flake .#laptop
sudo nixos-rebuild build --flake .#class
# 验证 flake 输出
nix flake show系统使用 Niri 作为主要窗口管理器,具有设备特定配置:
- 系统服务: Polkit、GNOME Keyring、swaylock/swayidle
- 显示管理器: 带 SilentSDDM 主题和 Wayland 支持的 SDDM
- 用户服务: waybar(状态栏)、mako(通知)、wofi(应用启动器)
- 背景管理: swaybg 壁纸管理
- X11 支持: xwayland-satellite 用于 X11 应用程序兼容性
- 用户头像: SDDM 自动头像复制服务
- 笔记本电脑: 使用
home-manager/niri/config.kdl,支持高分辨率显示(3120x2080@120,2.0 缩放) - 实验室设备: 使用
hosts/class/config-class.kdl,标准显示设置(1980x1080@60,1.2 缩放)