安装路径
配置式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 原生 │ │ 维护成本 │ 低 │ 中高,需定期修配置 │ 低,构建时校验 │ │ 适合场景 │ 通用办公娱乐 │ 熟悉生态、愿折腾 │ 多屏大量窗口、长期高负载 │ └─────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┘
配置树
nix
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.nix- flake.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 ]; }; }; }; }