| name | package |
| description | Manage system and user software packages, profiles, and overlays. Use when asked to install, add, remove, change software, enable/disable profiles, or manage Flatpak apps. |
Package
决策:包放哪里?
系统级服务/守护进程? → modules/packages.nix 或 modules/services/
用户软件? → users/profiles/<name>.nix
临时使用? → nix shell nixpkgs#pkg(不写配置)
编辑器插件/LSP? → Mason/npm/cargo 管,不在 Nix 中
Flatpak 应用? → machines/<machine>/default.nix 的 mcb.flatpak.apps/removeApps
Flatpak 策略
mcb.flatpak.apps(默认 [])声明该机器应安装的系统级应用;它不是独占清单,未列出的已安装应用会保留
mcb.flatpak.removeApps(默认 [])是卸载系统级应用的唯一授权;仅显式列出的 ID 会移除,且不使用 --delete-data
apps 与 removeApps 必须互斥;冲突会在求值时失败
mcb.flatpak.overrides 仍通过 flatpak override --system 全局生效,可能影响未由 apps 管理的应用;“保留”仅指安装成员关系
- 当前
nixos 机器声明安装 com.tencent.WeChat、com.qq.QQ、io.github.Predidit.Kazumi,显式移除 Flatpak com.tencent.wemeet;已有 YesPlayMusic 会保留但新机器不会自动安装,Nix 版 Wemeet 保留
- 协调/更新实现位于
scripts/flatpak-system.sh;modules/services/desktop.nix 只用 writeShellApplication 注入 flatpak/jq/flock、生成 JSON policy 并连接 systemd
Profile 速查(16 个)
系统层(modules/packages.nix)独立管理基础设施;profile 只选择用户层软件与偏好,gaming 跟随 programs.steam.enable。
| Profile | 内容 | 层 |
|---|
base-desktop | 终端、浏览器、文件管理(Wayland 工具→系统层) | 用户 |
dev | rustup/go/node/uv/mold/sccache/编辑器/Nix LSP | 用户 |
research | Zotero/TeX/Typst/Obsidian/LibreOffice | 用户 |
gaming | Wine/Winetricks(Steam/MangoHud/Lutris→系统层) | 用户 |
china-apps | wemeet/Telegram/代理GUI/蓝牙/动漫CLI | 用户 |
media | 音乐播放(ncspot/MPD)、录屏 | 用户 |
life | 日历/密码/下载/BT/分区/音控;Weather 同时带 glib.bin 提供 gapplication | 用户 |
theming | 图标/光标/GTK 主题 | 用户 |
nix-tools | nom/nix-index/comma/nh/nix-tree/nix-du | 用户 |
containers | podman/distrobox/incus/qemu | 用户 |
observability | bpftrace/bcc/perf/valgrind/rr/flamegraph | 用户 |
hardware | nvme-cli/fwupd/sbctl/dmidecode | 用户 |
security-tools | hashcat/nuclei/ffuf/sqlmap/metasploit | 用户 |
ai-tools | aider-chat/ollama/open-webui/llama-cpp | 用户 |
modern-wm | Wayland 桌面工具;polkit_gnome 提供图形 PolicyKit 认证代理 | 用户 |
terminal-tools | zellij/atuin/broot/nushell/jj/herdr | 用户 |
Fcitx5 由 modules/i18n.nix 启用,并由 XDG autostart 单独负责启动;不要在 Niri 或 profile 中再手写启动项。
Steam 由 modules/gaming.nix 提供定制系统 wrapper;Niri 和桌面入口统一调用 users/admin/scripts/steam-launcher。该脚本必须保留非 exec 前台父进程,不要改回裸 steam、固定 Nix store 路径或直接 exec /run/current-system/sw/bin/steam。
操作
加包到现有 profile:编辑 users/profiles/<name>.nix → home.packages 列表添加
创建新 profile:
# users/profiles/<name>.nix
{ lib, pkgs, ... }: {
options.mcb.profiles.<name> = lib.mkEnableOption "描述";
config = lib.mkIf config.mcb.profiles.<name>.enable {
home.packages = with pkgs; [ ... ];
};
}
→ 在 users/profiles/default.nix 注册 → 在 users/<user>/packages.nix 启用
启用/禁用 profile:编辑 users/<user>/packages.nix 的 mcb.profiles 开关
系统级包:编辑 modules/packages.nix,受 mcb.packages.* 开关控制
版本固定/补丁:overlays/default.nix,附带 upstream issue 注释
验证:.claude/skills/run-nixos-config/validate.sh && nix flake check