安装路径沙盘

安装路径

  • 配置式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
            ];
          };
    
        };
      };
    }