模拟安装

初始安装

  • 引导安装: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.nix
  • flake.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,因为是服务器
        ];
      };
    }