初始安装
- 引导安装:nixos.iso
- 下载disko配置:curl -o /tmp/machine-a-disko.nix URL
- disko硬盘分区:nix --experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko /tmp/machine-a-disko.nix
- 生成硬件配置:nixos-generate-config --no-filesystems --root /mnt
- /mnt/etc/nixos/hardware-configuration.nix
- /mnt/etc/nixos/configuration.nix
- 下载nixos配置:curl -o /mnt/etc/nixos/xxx-config.nix URL
- 下载flake配置:curl -o /mnt/etc/nixos/flake.nix URL (文件内的nixosConfigurations.hostname配置modules里包含了hardware和config的nix文件配置项)
- flake安装系统:nixos-install --flake /mnt/etc/nixos#hostname
日常切换
- 切换配置:nixos-rebuild switch --flake /etc/nixos#hostname2(重启进正式系统后的地址)
- 模块化运维:需要模块化积累一些nix配置,然后搭积木成为不同的hostname方案,配置到flake.nix文件里
环境选型
桌面
┌─────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┐ │ │ KDE Plasma / GNOME │ Hyprland │ niri │ ├─────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┤ │ 窗口模型 │ 浮动/堆叠,手动拖拽 │ 动态平铺,网格分割 │ 滚动平铺,横向延伸 │ │ 多屏调度 │ 原生完善,但无平铺逻辑 │ 工作区绑定显示器,焦点跳屏 │ 每屏独立滚动带,无跳屏 │ │ 大量窗口 │ 越开越乱,靠手动整理 │ 窗口越多越挤,尺寸被压缩 │ 窗口向右排,尺寸不变 │ │ 配置稳定性 │ 极稳定,几乎不用维护 │ 配置语言迁移+API变动频繁 │ KDL 单一配置,格式稳定 │ │ NixOS 集成 │ 官方模块,开箱即用 │ 社区 flake 多但碎片化 │ sodiboo/niri-flake 原生 │ │ 维护成本 │ 低 │ 中高,需定期修配置 │ 低,构建时校验 │ │ 适合场景 │ 通用办公娱乐 │ 熟悉生态、愿折腾 │ 多屏大量窗口、长期高负载 │ └─────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┘
配置仓库
仓库目录结构
/etc/nixos/ ├── flake.nix # 入口,定义有哪些 hostname ├── hardware-configuration.nix # 机器特定的(每台机器不同) └── modules/ ├── core/ │ ├── boot.nix │ ├── network.nix │ ├── users.nix │ └── locale.nix ├── desktop/ │ ├── gnome.nix │ ├── font.nix │ └── audio.nix └── apps/ ├── docker.nix ├── nix-ld.nix └── dev-tools.nixflake.nix
{ nixosConfigurations.hermes = nixpkgs.lib.nixosSystem { modules = [ ./hardware-configuration.nix ./modules/core/boot.nix ./modules/core/network.nix ./modules/core/users.nix ./modules/desktop/gnome.nix ./modules/apps/docker.nix ]; }; nixosConfigurations.machine-a = nixpkgs.lib.nixosSystem { modules = [ ./hardware-configuration.nix ./modules/core/boot.nix ./modules/core/network.nix ./modules/apps/docker.nix # 不装 gnome,因为是服务器 ]; }; }