Chaotic Nyx is Archved, what are some alternatives?

Hello everyone!

As of yesterday 12/8, Chaotic Nyx abruptly archived their repositories. Although that is unfortunate, I wanted to share some alternatives here alongside suggest a few features that nyx formerly offered.

The most popular use case was likely for cachyos kernels, though fortunately there is an alternative here.

The second biggest use case was for git packages, such as mesa and gamescope. Personally, gamescope-git was crucial for me as neither the stable nor unstable packages worked at all for me unfortunately.

Alongside the ones i mentioned, feel free to mention any alternatives or missing features you’d like to see alternatives for. :woman_bowing:

1 Like

It isn’t very difficult to maintain what that repo was doing yourself downsteam. If you want to create the same package for gamescope, for example, you can add something like this (warning, untested, I might have missed something):

# pkgs/gamescope.nix
{
  gamescope,
  fetchFromGithub
}: let
  rev = "9416ca9334da7ff707359e5f6aa65dcfff66aa01";
in gamescope.overrideAttrs (old: {
  version = "unstable-20251206105151-9416ca";

  src = fetchFromGithub {
    inherit rev;
    owner = "ValveSoftware";
    repo = "gamescope";
    fetchSubmodules = true;
    hash = "sha256-bZXyNmhLG1ZcD9nNKG/BElp6I57GAwMSqAELu2IZnqA=";
  };

  # Unsure if this bit is necessary, though I guess it's nice to have the version gamescope shows match
  postPatch = old.postPatch ++ ''
    substituteInPlace src/meson.build \
      --replace-fail "'git', 'describe', '--always', '--tags', '--dirty=+'" "'echo', '${rev}'"

    patchShebangs default_extras_install.sh
  '';
})

You can then keep the source up-to-date with e.g. nix-update.

Adding it to your config would take something like:

# steam.nix
{ pkgs, ... }: let
  gamescope-git = pkgs.callPackage ./pkgs/gamescope.nix { };
in {
  programs.steam.extraCompatPackages = [
    gamescope-git
  ];
}

If you end up with a bunch of packages, you can do fancy things to reduce the boilerplate a bit, and propagate your set with _module.args.

I generally prefer maintaining stuff like this downstream, since using code directly from master should almost always be a temporary workaround, removed whenever a new version of the software hits unstable.

2 Likes

That works as long as you dong need package something which drastically changed its build system. Like mesa does sometimes.

1 Like

Yep, but there’s no way around repackaging at that point. The chaotic nix repo was also only doing that for a small subset of packages.

1 Like

Another trick, any temprorary version bumps you make in your flake can be guarded with

assert (lib.strings.compareVersions ....);

Which ensures the bump stays temporary

3 Likes

I never really needed Chaotic-Nyx but:

While this is true for now, their packaging might need to change at some point, causing duplication of efforts;

Chaotic-Nyx was a Nix flake for “too much bleeding-edge” and unreleased packages (e.g., mesa_git, linux_cachyos, firefox_nightly, sway_git, gamescope_git). And experimental modules (e.g., HDR, duckdns)

Are there a documentation somewhere about why such packages couldn’t get upstreamed to nixpkgs master / unstable?

They are unreleased commits of software that has been upstreamed. Nixpkgs generally does not contain unreleased software for software that has versioned releases.

There is no explicit policy against adding such versions to nixpkgs, but there is a policy that recommends to have as few different versions as reasonable. If you’re going to pick one, picking what upstream has actually released makes the most sense.

3 Likes

Yeah real shame I was using Firefox-Nightly from it, I do wonder if nix-community can somehow adopt it?

1 Like