ITADN
chaotic-cx/nyx · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Chaotic's Nyx

六只披着斗篷的青蛙,排列成 NixOS 标志的形状,夹杂着不同深浅的绿色

GitHub 的菜单按钮被重新排序和重新标记为:发起 Pull requests 而非 Issues。听起来像 Make Love Not War

用于“过于激进”和未发布软件包的 Nix flake(例如 mesa_git、linux_cachyos、firefox_nightly、sway_git、gamescope_git)。以及实验性模块(例如 HDR、duckdns)。是的,我们死而复生了!

来自 Chaotic Linux 用户组 (LUG),也就是维护 Chaotic-AUR 的那个组织!🧑🏻‍💻

官方源代码仓库可在 GitHub 上以 "chaotic-cx/nyx" 的形式获取。

请勿在 NIXOS 的 MATRIX、DISCOURSE、DISCORD 等平台上发布问题。请改用 我们仓库的 IssuesTelegram 群组,或 #chaotic-nyx:ubiquelambda.dev 频道(位于 MATRIX 上)。

新闻

可以在 Telegram 上找到新闻频道。

如何使用

在 NixOS unstable 上

本教程不适用于使用 NixOS 24.11 及其他 stable 频道的用户。本教程面向 unstable 用户。

我们建议使用 Flakes 集成此仓库:


# flake.nix
{
  description = "My configuration";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; # IMPORTANT
  };

outputs = { nixpkgs, chaotic, ... }: {
    nixosConfigurations = {
      hostname = nixpkgs.lib.nixosSystem { # 将 "hostname" 替换为您系统的主机名
        system = "x86_64-linux";
        modules = [
          ./configuration.nix
          chaotic.nixosModules.default # 重要
        ];
      };
    };
  };
}

在您的 configuration.nix 中启用您喜欢的包和选项:


# configuration.nix
{ pkgs, ... }:
{
  environment.systemPackages = [ pkgs.lan-mouse_git ];
  chaotic.mesa-git.enable = true;
}

在 NixOS stable 上

Chaotic-Nyx 与 NixOS 25.05 及更早版本 不兼容

本教程不适用于使用 NixOS unstable 频道的用户。本教程适用于 24.11 和其他 stable 频道。

由于频道之间的差异,unstable 用户可用的模块和选项可能会损坏,因此您无法访问所有 unstable 用户可用的模块和选项。 但您可以访问所有包、缓存和注册表。

我们建议使用 Flakes 集成此仓库:


# flake.nix
{
  description = "My configuration";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
    chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
  };

outputs = { nixpkgs, chaotic, ... }: {
    nixosConfigurations = {
      hostname = nixpkgs.lib.nixosSystem { # 将 "hostname" 替换为您系统的主机名
        system = "x86_64-linux";
        modules = [
          ./configuration.nix # 您的系统配置。
          chaotic.nixosModules.nyx-cache
          chaotic.nixosModules.nyx-overlay
          chaotic.nixosModules.nyx-registry
        ];
      };
    };
  };
}

在您的 configuration.nix 中启用您偏好的软件包:


# configuration.nix
{ pkgs, ... }:
{
  environment.systemPackages = [ pkgs.lan-mouse_git ];
  boot.kernelPackages = pkgs.linuxPackages_cachyos;
}

在 Home-Manager 上

此方法适用于 没有 NixOS 的 home-manager 配置。

我们建议使用 Flakes 集成此仓库:


# flake.nix
{
  description = "My configuration";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; # 重要
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

outputs = { nixpkgs, chaotic, ... }: {
    # ... other outputs
    homeConfigurations = {
      # ... other configs
      configName = home-manager.lib.homeManagerConfiguration { # 将 "configName" 替换为有意义的唯一名称
        pkgs = nixpkgs.legacyPackages.x86_64-linux;
        modules = [
          ./home-manager/default.nix
          chaotic.homeModules.default # 重要
        ];
      };
    };
  };
}

在您的 home-manager/default.nix 中添加一个 nix.package,并启用所需的软件包:


# configuration.nix
{ pkgs, ... }:
{
  nix.package = pkgs.nix;
  home.packages = [ pkgs.lan-mouse_git ];
}

运行软件包(无需安装)

除了使用我们的模块/overlay 之外,您还可以使用以下命令运行软件包(无需安装它们):


nix run github:chaotic-cx/nyx/nyxpkgs-unstable#firefox_nightly

二进制缓存说明

只要您添加了我们的默认模块,二进制缓存就会自动添加到您的配置中。 我们自动执行此操作,以便在无需您进行手动操作的情况下优雅地更新缓存的地址和密钥。

如果您因任何原因不喜欢这种行为,可以使用 chaotic.nyx.cache.enable = false 将其禁用。

!!!!!!!!!:: 您需要启用我们的模块并重新构建系统 before 将这些派生项添加到您的配置中。另一个选项,或者如果您想直接从 installation media 使用缓存,请在安装系统时,在 nixos-install(或 nixos-rebuild)命令的末尾添加 --option 'extra-substituters' 'https://nyx-cache.chaotic.cx/' --option extra-trusted-public-keys "nyx-cache.chaotic.cx:dJxTrgMC3V3cFfyIiBQDQorG6k1LsqurH/srpMSq7qk="

当使用我们的 flake 作为输入时,像 nix run ...nix develop ... 和其他命令,如果用户的 nix 设置中缺少缓存,会交互式地提示您添加缓存。

我们为 x86_64-linuxaarch64-linuxaarch64-darwin 提供缓存。

FlakeHub notes

FlakeHub

将 chaotic 添加到你的 flake.nix 中,确保使用滚动 *.tar.gz 以继续使用最新的软件包:


# flake.nix
{
  # ... description
  inputs = {
    # ... nixpkgs, home-manager, etc
    chaotic.url = "https://flakehub.com/f/chaotic-cx/nyx/*.tar.gz";
  };
  # ... outputs
}

然后遵循上述其中一个指南。

CachyOS 说明

使用 Chaotic-Nyx 的下游 CachyOS 内核的一个主要卖点是,它们实现了与上游 CachyOS 的 **kconfig 一致性**。其他 flakes 和 Nixpkgs 通常不会尝试为其自定义或下游内核维护这种严格的 1:1 配置一致性。


# configuration.nix
{ config, pkgs, ... }:
{
  boot.kernelPackages = pkgs.linuxPackages_cachyos;
  # other (optional) custom CachyOS packages that may be fit for your setup include:
  boot.zfs.package = pkgs.zfs_cachyos;
  hardware.nvidia.package = pkgs.nvidia_cachyos;
}

默认变体与上游一致(在撰写本文时,为 LTO+BORE),请检查 pkgs/linux-cachyos/config-vars/cachyos-lto.json 中对应的 PKGBUILD 变量。以下是使用 LTS 的示例:


# configuration.nix
{ config, pkgs, ... }:
{
  boot.kernelPackages = pkgs.linuxPackages_cachyos-lts;
  # 其他(可选)适合您配置的自定义 CachyOS 软件包包括:
  hardware.nvidia.package = pkgs.nvidia_cachyos-lts;
  boot.zfs.package = pkgs.zfs_cachyos; # 此处为用户空间软件包,不遵循内核变体。
}

我们提供其他变体:hardenedltsrcserver 以及 lto-znver4(适用于 AMD 的 Zen4 或更高版本)。它们均独立更新。此外还有一个跟随默认版本的 gcc,以防 Clang+LTO 给您带来任何问题。

您可以使用默认模块和覆盖层,通过 pkgs.linuxPackages_cachyos 直接安装 CachyOS 内核。或者,如果您希望在不使用模块和覆盖层的情况下直接使用该软件包,请使用 chaotic.legacyPackages.x86_64-linux.linuxPackages_cachyos

并非所有变体都预编译了内核模块。我们很希望做到这一点,但资源不足。

CachyOS 上游不支持 aarch64,由于对等性目标,我们也忽略它。

可以使用 pkgs/linux-cachyos/conformance-test.sh 验证 kconfig 的对等性,您需要调整环境变量。如果出现偏差,请提交 issue。

CachyOS x86-64 微架构优化


{ pkgs, ... }:
{
  boot.kernelPackages =
    pkgs.linuxPackages_cachyos.cachyOverride
      { cachyVars = pkgs.linuxPackages_cachyos.kernel.cachyConfig.cachyVars // { "_processor_opt" = "GENERIC_V3"; }; }
}

使用 GENERIC_V2GENERIC_V3GENERIC_V4ZEN4。我们不为这些提供缓存。

我们支持来自 CachyOS PKGBUILD 的另外几个变量,位于 cachyVars 属性集中。

使用 sched-ext 调度器

从 6.12 版本开始,上游内核正式支持 sched-ext。你可以使用最新内核(pkgs.linuxPackages_latest)或我们提供的 CachyOS 内核(pkgs.linuxPackages_cachyos)。并非所有 CachyOS 变体都支持此功能。

只需将此添加到你的配置中:


# configuration.nix
{
  boot.kernelPackages = pkgs.linuxPackages_cachyos;
  services.scx.enable = true; # 默认使用 scx_rustland 调度器
}

然后,使用新配置重启,检查调度器是否正在运行:


╰─λ systemctl status scx.service

如果这不起作用,请检查当前内核是否支持 sched-ext 功能。


╰─λ ls /sys/kernel/sched_ext/
enable_seq  hotplug_seq  nr_rejected  root  state  switch_all

你也可以手动启动调度器,例如:


╰─λ sudo scx_rusty
21:38:53 [INFO] CPUs: online/possible = 24/32
21:38:53 [INFO] DOM[00] cpumask 00000000FF03F03F (20 cpus)
21:38:53 [INFO] DOM[01] cpumask 0000000000FC0FC0 (12 cpus)
21:38:53 [INFO] Rusty Scheduler Attached

你也可以选择其他调度器。


# configuration.nix
{
  services.scx.scheduler = "scx_rusty";
}

还有其他 scx_* 二进制文件供你尝试,或者前往 github.com/sched-ext/scx 查看如何编写自己的调度器的说明。

与只读 pkgs 配合使用

如果你在配置中使用了 nixpkgs.nixosModules.readOnlyPkgs,你需要禁用我们的 overlay 模块,并改为直接导入缓存友好的 overlay。


# flake.nix
{
  # ... description, inputs
  outputs = { nixpkgs, chaotic, ... }: {
    nixosConfigurations = {
      # ... other systems
      hostname = nixpkgs.lib.nixosSystem { # 将 "hostname" 替换为您系统的主机名
        modules = [
          nixpkgs.nixosModules.readOnlyPkgs
          # ... ./configuration.nix, ./hardware-configuration.nix 等
          {
            nixpkgs.pkgs = import nixpkgs {
              system = "x86_64-linux";
              config = { allowUnfree = true; };
              overlays = [ chaotic.overlays.cache-friendly ]; # 重要
            };
            chaotic.nyx.overlay.enable = false; # 重要
          }
          chaotic.nixosModules.default # 重要
        ];
      };
    };
  };
}

与 Jovian 配合使用

我们为 Jovian NixOS 中的大多数软件包提供二进制缓存。

请记住阅读我们所有的 二进制缓存说明,并且您 必须通过 chaotic 跟随 jovian 以避免哈希不匹配:


# flake.nix
{
  # ... description
  inputs = {
    # ... nixpkgs, home-manager 等
    chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
    # 无需在此处添加 jovian,我们已将其打包
  };

outputs = { nixpkgs, chaotic, ... }:
    let
      inherit (chaotic.vendored) jovian;
    in
    {
      nixosConfigurations = {
        steamdeck = nixpkgs.lib.nixosSystem {
          system = "x86_64-linux";
          modules = [
            jovian.nixosModules.default
            chaotic.nixosModules.default
            ./configuration.nix
            {
              # 这个 entre { ... } 是 ./configuration.nix 内部可能包含内容的示例
              jovian.steam.enable = true;
              jovian.steam.autoStart = true;
              jovian.devices.steamdeck.enable = true;
            }
          ];
        };
      };
    };
}

选项和软件包列表

我们所有选项和软件包的最新列表可在以下位置获取:列表页面

备注

我们的分支

:godmode: 我们的 nyxpkgs-unstable 分支是始终被缓存的分支。

:shipit: main 分支是贡献的主要目标。

贡献

我们接受第三方编写的 PR。

上游至 nixpkgs

如果您有兴趣将这些软件包中的任何一个推送到上游 nixpkgs,我们表示支持。

如果我们的某位贡献者出现在 deveriation 的维护者列表中(在此仓库中),请在推送到 nixpkgs 时保留该信息。但是,请在 PR 中标记我们,以便我们参与审查。

分叉与部分代码采用

您可以自由使用我们的代码,或我们代码的一部分,但须遵守 MIT 许可证的限制。

建议

如果您有任何建议来改进我们的包、模块,甚至是 CI 的代码,请通过 GitHub 仓库的 issues 告知我们。

基于用户的 pkgs 构建

出于缓存原因,Chaotic-Nyx 现在默认始终使用 nixpkgs 作为其依赖项的提供者。

如果您需要更改此行为,请设置 chaotic.nyx.onTopOf = "user-pkgs";。请注意,在此更改之后,您通常将无法从我们的二进制缓存中受益。

您还可以通过配置 chaotic.nyx.overlay.enable = false; 来完全禁用我们的 overlay。

新包的接收标准

仅在以下情况下,我们才会接受新包:

  • 该包因缺乏稳定性而被 Nixpkgs 拒绝,或 Nixpkgs 无法以所需的速度提供更新;
  • 已存在其 derivation,且可在无 IFD 的情况下正常工作。

为什么我在构建内核?基本缓存故障排除

首先,假设您正在使用我们的 linuxPackages_cachyos 作为内核,并且拥有最新的 flake lock。请检查以下三个哈希值是否提示相同:


╰─λ nix eval 'github:chaotic-cx/nyx/nyxpkgs-unstable#linuxPackages_cachyos.kernel.outPath'
"/nix/store/441qhriiz5fa4l3xvvjw3h4bps7xfk08-linux-6.8.7"

╰─λ nix eval 'chaotic#linuxPackages_cachyos.kernel.outPath'
"/nix/store/441qhriiz5fa4l3xvvjw3h4bps7xfk08-linux-6.8.7"

╰─λ nix eval '/etc/nixos#nixosConfigurations.{{HOSTNAME}}.config.boot.kernelPackages.kernel.outPath'
"/nix/store/441qhriiz5fa4l3xvvjw3h4bps7xfk08-linux-6.8.7"

如果第二个与第一个不同,你很可能是在 inputs.nixpkgs.follows 中添加了 chaotic,只需将其移除即可。

如果第三个与第一个不同,你很可能正在使用一个更改内核或其依赖项的 overlay;请检查你的 nixpkgs.overlays 配置。


如果它们全部匹配,而你仍在重新构建内核,请复制上述结果中的哈希值,然后在以下 curl 命令中更改它:


╰─λ curl -L 'http://nyx-cache.chaotic.cx/3w8ad8iysc2v0ic8m3ffrid4j7m20p27.narinfo'
StorePath: /nix/store/3w8ad8iysc2v0ic8m3ffrid4j7m20p27-libdrm-b8b7c57-bin
URL: nar/0529rfk9kp4ff0w0ljfa88mz46f8iq51sb020jdw7qb6z17n477m.nar.zst
Compression: zstd
NarHash: sha256:0529rfk9kp4ff0w0ljfa88mz46f8iq51sb020jdw7qb6z17n477m
NarSize: 550808
References: 57iz36553175g3178pvxjij8z5rcsd4n-glibc-2.42-61 zyiv5lp015g94xjw499wapk121qcarc1-libdrm-b8b7c57
Deriver: 79g0hvd6lmg76gyl7sqwvac38dxnlbg1-libdrm-b8b7c57.drv
Sig: nyx-cache.chaotic.cx:6q6x88p+CMjaa42DBYs7Fi4OYxrTj/nlpaK2BbHb68ke0TEKpXOaSUsCUybazLbv2snUWgA9jGs/E4NtJxp9CA==

如果上述命令失败且不是 404,则说明你的互联网连接存在问题。如果它以 404 失败,请标记 pedrohlc(Matrix、Telegram 或 GitHub),他确实弄坏了缓存。

如果命令成功,而你仍在构建缓存,这可能是由两个原因造成的:(1) 你可能在我们部署之前尝试获取了该包,然后 Nix 会缓存 404 并且不会再次尝试;(2) 你可能有一个配置错误的 /etc/nix/nix.conf 或过时的 nix-daemon。

对于第二种情况,检查它是否看起来像这样(单词“chaotic”应该出现三次):


╰─λ grep chaotic /etc/nix/nix.conf
substituters = https://nyx-cache.chaotic.cx/ https://cache.nixos.org/
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nyx-cache.chaotic.cx:dJxTrgMC3V3cFfyIiBQDQorG6k1LsqurH/srpMSq7qk=

当您更改 nix 设置,然后使用 nixos-rebuilt 重建系统,但未重启 nix-daemon 服务时,可能会出现过时的 nix-daemon。最简单的解决方法是重启系统。

特别鸣谢

  • The 50 contributors;
  • Original sponsors: Silvan, Kai, Elite, and Keenan;
  • lonerOrz for keeping a wonderful fork;
  • Everybody that provided feedback through Github, Telegram, and Matrix.