安装路径
配置式 native:
nixos.iso 安装 -> disko 硬盘分区 -> 硬件配置.nix -> 系统应用.nix -> nixos-install / rebuild --flake /mnt/etc/nixos#hostname 初始安装桌面选型(多屏、多窗口场景)
| 对比项 | KDE Plasma / GNOME | Hyprland | niri |
|---|---|---|---|
| 窗口模型 | 浮动/堆叠,手动拖拽 | 动态平铺,网格分割 | 滚动平铺,横向延伸 |
| 多屏调度 | 原生支持完善,无平铺逻辑 | 工作区绑定显示器,焦点可跨屏跳转 | 每屏独立滚动带,无跨屏跳转 |
| 大量窗口场景 | 窗口增多后需手动整理 | 窗口增多后尺寸被压缩 | 窗口向右排列,尺寸不变 |
| 配置稳定性 | 极稳定,维护量低 | 配置语言迁移与 API 变动较频繁 | KDL 单一配置,格式稳定 |
| NixOS 集成 | 官方模块,开箱即用 | 社区 flake 较多但分散 | sodiboo/niri-flake 原生支持 |
| 维护成本 | 低 | 中高,需定期调整配置 | 低,构建时校验 |
| 适用场景 | 通用办公与娱乐 | 熟悉生态、可接受调整成本 | 多屏、大量窗口、长期高负载 |
配置树
nixos-config/
├── flake.nix # 入口:定义所有 machine,切换方案
├── flake.lock
├── lib/ # 纯 Nix 辅助函数(如自定义的 mkSystem, mkHome 构建器)
│ └── default.nix
├── hardware/ # ---------- 硬件层 ----------
│ ├── laptop-A.nix
│ ├── server-B.nix
│ └── pad-C.nix
├── system/ # ---------- 系统层 ----------
│ ├── kernel.nix # 内核:版本、模块、参数
│ ├── setting/ # 设置
│ │ ├── nix.nix # nix.settings、GC、flakes
│ │ ├── locale.nix # 时区、locale、键盘布局
│ │ ├── users.nix # 用户组、系统用户
│ │ └── state.nix # system.stateVersion
│ ├── desktop/ # 桌面环境
│ │ ├── kde.nix
│ │ ├── gnome.nix
│ │ └── hyprland.nix
│ ├── components/ # 系统组件
│ │ ├── network.nix # NetworkManager、DNS
│ │ ├── input-method.nix # fcitx5 / ibus
│ │ ├── audio.nix # PipeWire / PulseAudio
│ │ ├── fonts.nix # 字体、字体渲染
│ │ └── power.nix # TLP、upower、电池
│ ├── packages/ # 系统级应用
│ │ ├── docker.nix # docker
│ │ └── xxxx.nix # 其它
│ ├── services/ # 系统服务
│ │ ├── sshd.nix # SSH 服务
│ │ ├── docker.nix # Docker 引擎(不碰容器)
│ │ ├── firewall.nix # 防火墙
│ │ └── cron.nix # 定时任务
│ ├── container/ # 容器
│ │ ├── vc-mysql.nix # virtualisation.oci-containers 实例:数据库
│ │ ├── vc-foregejo.nix # virtualisation.oci-containers 实例:仓库
│ │ └── dk-nginx.nix # docker 实例:Nginx
├── home/ # ---------- 用户层 ----------
│ └── userA/
│ ├── packages/ # 安装工具
│ │ ├── browsers.nix # chrome
│ │ ├── editors.nix # vscode, notepad++
│ │ ├── terminals.nix # alacritty, kitty, wezterm
│ │ └── tools.nix # 其他工具
│ └── setting/ # 设置
│ └── shell.nix # bash/zsh/fish、别名
├── overlays/ # 补丁
│ └── default.nix
└── machines/ # 机器层:完整方案组装
├── laptop-A/
│ └── default.nix
├── server-B/
│ └── default.nix
└── pad-C/
└── default.nixflake.nix 示例
{
description = "Highly modular NixOS configuration";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# 引入 home-manager
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, home-manager, ... }@inputs: {
nixosConfigurations = {
# 桌面工作站:Hermes
hermes = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
# 将 inputs 传递给所有子模块,方便后续调用
specialArgs = { inherit inputs; };
modules = [
./machines/hermes/default.nix
];
};
# 无头服务器:Machine-A
machine-a = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./machines/machine-a/default.nix
];
};
};
};
}