diff --git a/README.md b/README.md index 1488e53..cfa17da 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,104 @@ -# 📦 nixos 配置仓库 +# NixOS Configuration -基于 Flake 的 NixOS 多主机配置。 +洛尘(luochen570)的 NixOS 配置仓库,采用 Flakes + home-manager + sops-nix 架构。 -## 🌲 目录树 -```text -📦 nixos -├─ 🏠 home/ # Home Manager 用户配置(default.nix 聚合) -├─ 🖥️ hosts/ # 主机入口 -├─ 🧩 lib/ # 公共函数(mkHost) -├─ 🧱 modules/ # 系统模块(core/server/wsl) -├─ 🎨 overlays/ # 包覆盖 -├─ 📚 profiles/ # 场景组合(desktop/server/wsl/virtualbox/lxc) -└─ 🔐 secrets/ # sops 密钥模板与密文 +## 架构 + +``` +nixos/ +├── flake.nix # Flake 入口 +├── lib/ +│ ├── mkHost.nix # 主机生成函数 +│ └── hosts.nix # 主机定义(5 台机器) +├── profiles/ # 角色配置组合 +│ ├── desktop.nix +│ ├── server.nix +│ ├── wsl.nix +│ ├── virtualbox.nix +│ └── lxc.nix +├── modules/ +│ ├── core/ # 所有机器共享的基础配置 +│ │ ├── default.nix +│ │ ├── core.nix # Nix 设置、时区、语言、GC +│ │ ├── pkg.nix # 基础系统包 +│ │ ├── users.nix # 用户与 Shell +│ │ └── sops.nix # 密钥管理 +│ ├── server/ # 服务器模块 +│ │ ├── default.nix +│ │ ├── docker.nix +│ │ └── ssh.nix +│ ├── desktop/ # 桌面模块 +│ │ ├── default.nix +│ │ ├── pkg.nix # 桌面应用包 +│ │ ├── apps.nix # MIME 与默认应用 +│ │ ├── fcitx5.nix # 中文输入法 +│ │ └── de/ +│ │ ├── default.nix +│ │ └── kde.nix # KDE Plasma 6 + SDDM +│ ├── drivers/ +│ │ ├── nvidia.nix # NVIDIA 独显 +│ │ └── amdgpu.nix # AMD 核显(RDNA2) +├── home/ # home-manager 用户配置 +│ ├── default.nix +│ ├── pkg.nix # 用户级包 +│ ├── git.nix +│ ├── ssh.nix # SSH 密钥(sops 挂载) +│ ├── zsh.nix # ZSH + Powerlevel10k +│ └── nvchad.nix # Neovim (NvChad) +├── hosts/ # 主机专属配置 +│ ├── desktop/ # 桌面机(AMD + NVIDIA) +│ ├── server/ # 服务器 +│ ├── wsl/ # WSL (NixOS-WSL) +│ ├── virtualbox/ # VirtualBox 虚拟机 +│ └── nixos-lxc/ # Proxmox LXC 容器 +└── secrets/ # sops-nix 加密密钥(不公开) + └── users/luochen570.enc.yaml ``` -## 🔗 引用关系 -`flake.nix` -> `lib/hosts.nix` + `lib/mkHost.nix` -> `hosts/*` + `profiles/*` -> `modules/*/default.nix` -> 子模块 +## 主机列表 -`networking.hostName` 由 `lib/mkHost.nix` 统一设置,具体值在 `lib/hosts.nix` 每台主机条目里定义。 +| 主机 | 角色 | 架构 | 说明 | +|------|------|------|------| +| `desktop` | desktop | x86_64-linux | 桌面机,NVIDIA + AMD 双显卡 | +| `server` | server | x86_64-linux | 服务器 | +| `nixos-wsl` | wsl | x86_64-linux | WSL | +| `virtualbox` | virtualbox | x86_64-linux | VirtualBox 虚拟机 | +| `nixos-lxc` | lxc | x86_64-linux | Proxmox LXC 容器 | -## 🌐 Nix 模块引入文件树 -```text -flake.nix -├─ lib/hosts.nix -├─ lib/mkHost.nix -│ ├─ hosts//default.nix -> configuration.nix -│ ├─ profiles/.nix -> modules/* -│ └─ home/default.nix -> home/*.nix -└─ modules/core/sops.nix -> secrets/users/*.enc.yaml +## 使用 + +```bash +# 构建/切换 +sudo nixos-rebuild switch --flake .#desktop + +# 仅构建不切换 +sudo nixos-rebuild build --flake .#server + +# 更新 flake lock +nix flake update + +# 垃圾回收 +sudo nix-collect-garbage --delete-older-than 14d ``` +## 关键特性 + +- **Flakes** — 可复现的 NixOS 配置 +- **home-manager** — 用户级包与配置管理 +- **sops-nix** — 加密存储 SSH 密钥、密码哈希等敏感信息 +- **NixOS-WSL** — WSL 集成 +- **KDE Plasma 6** — 桌面环境(SDDM 显示管理器) +- **fcitx5 + Rime** — 中文输入法 +- **Docker** — 容器运行时,自动每周清理 +- **PipeWire** — 音频系统 +- **Nix4NvChad** — Neovim (NvChad) 配置即代码 + +## 镜像源 + +使用 TUNA(清华)和 SJTU(上交)镜像加速 Nix 包下载,适合国内网络环境。 + +## 注意事项 + +- NVIDIA 模块的 PRIME(双显卡切换)方案已注释,启用前需通过 `lspci` 确认 PCIe Bus ID +- LXC 容器使用 Proxmox LXC 模块,关闭了 systemd 挂载报错的服务 +- `secrets/` 目录经过 sops 加密,需有对应 age key 才能解密 diff --git a/home/nvchad.nix b/home/nvchad.nix index fe38620..02acd08 100644 --- a/home/nvchad.nix +++ b/home/nvchad.nix @@ -8,11 +8,10 @@ programs.nvchad = { enable = true; - # 可选:添加你需要的语言服务器和工具 + # NvChad 需要的额外包 extraPackages = with pkgs; [ # LSP 服务器 nil # Nix LSP - nixd # Nix 语言服务器(另一种选择) marksman # Markdown LSP # 格式化工具 @@ -26,4 +25,4 @@ EDITOR = "nvim"; VISUAL = "nvim"; }; -} \ No newline at end of file +} diff --git a/home/pkg.nix b/home/pkg.nix index e10659a..475f5ae 100644 --- a/home/pkg.nix +++ b/home/pkg.nix @@ -4,7 +4,6 @@ duf ncdu yazi - htop - neofetch + fastfetch ]; -} \ No newline at end of file +} diff --git a/hosts/desktop/configuration.nix b/hosts/desktop/configuration.nix index a330f85..c9c7a0b 100644 --- a/hosts/desktop/configuration.nix +++ b/hosts/desktop/configuration.nix @@ -6,25 +6,17 @@ ../../modules/drivers/nvidia.nix ../../modules/drivers/amdgpu.nix ]; + # Bootloader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; - - - # Enable CUPS to print documents. - # services.printing.enable = true; # Enable sound with pipewire. - services.pulseaudio.enable = false; security.rtkit.enable = true; services.pipewire = { enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; - # If you want to use JACK applications, uncomment this - #jack.enable = true; }; - - } diff --git a/modules/core/pkg.nix b/modules/core/pkg.nix index 7468fce..c98baa8 100644 --- a/modules/core/pkg.nix +++ b/modules/core/pkg.nix @@ -4,8 +4,6 @@ curl git htop - ranger - vim wget ]; } diff --git a/modules/drivers/nvidia.nix b/modules/drivers/nvidia.nix index 918ba76..2819d42 100644 --- a/modules/drivers/nvidia.nix +++ b/modules/drivers/nvidia.nix @@ -8,7 +8,7 @@ open = true; nvidiaSettings = true; powerManagement.enable = false; - powerManagement.finegrained = false + powerManagement.finegrained = false; package = config.boot.kernelPackages.nvidiaPackages.latest; }; diff --git a/modules/server/default.nix b/modules/server/default.nix index 6082ee4..6ca2df7 100644 --- a/modules/server/default.nix +++ b/modules/server/default.nix @@ -1,8 +1,6 @@ { ... }: { imports = [ - ./pkg.nix - ./firewall.nix ./docker.nix ./ssh.nix ]; diff --git a/modules/server/firewall.nix b/modules/server/firewall.nix deleted file mode 100644 index eb1ba6a..0000000 --- a/modules/server/firewall.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ lib, ... }: -{ - networking.firewall.enable = lib.mkDefault true; -} diff --git a/modules/server/pkg.nix b/modules/server/pkg.nix deleted file mode 100644 index e1e4009..0000000 --- a/modules/server/pkg.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ pkgs, ... }: -{ - environment.systemPackages = with pkgs; [ - - ]; -}