安装路径与桌面选型

安装路径

配置式 native:

nixos.iso 安装 -> disko 硬盘分区 -> 硬件配置.nix -> 系统应用.nix -> nixos-install / rebuild --flake /mnt/etc/nixos#hostname 初始安装

桌面选型(多屏、多窗口场景)

对比项KDE Plasma / GNOMEHyprlandniri
窗口模型浮动/堆叠,手动拖拽动态平铺,网格分割滚动平铺,横向延伸
多屏调度原生支持完善,无平铺逻辑工作区绑定显示器,焦点可跨屏跳转每屏独立滚动带,无跨屏跳转
大量窗口场景窗口增多后需手动整理窗口增多后尺寸被压缩窗口向右排列,尺寸不变
配置稳定性极稳定,维护量低配置语言迁移与 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.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
        ];
      };

    };
  };
}