NixOS/nixpkgs: two packages commit a Ruby bundler cache
Two nixpkgs packages commit Ruby's bundler cache, .bundle/, which none of its CI checks looks for. On the same run, one rule checked all 20,698 package directories under pkgs/ without Nix installed.This config was written to test alint; nixpkgs doesn't use alint.
What alint found
extends:
- alint://bundled/oss-baseline@v1
- alint://bundled/ci/github-actions@v1
- alint://bundled/hygiene/no-tracked-artifacts@v1
- alint://bundled/tooling/editorconfig@v1 ⚠︎ warning hygiene-no-ruby-bundler-cache
Two packages commit a bundler cache: pkgs/ and pkgs/.
- id: nixpkgs-by-name-prefix-dirs-have-package
kind: for_each_dir
select: "pkgs/by-name/*/*"
require:
- kind: file_exists
paths: "{path}/package.nix"
level: error✓ passed nixpkgs-by-name-prefix-dirs-have-package
All 20,698 package directories under pkgs/ have their package.
The bundled GitHub Actions rules (alint 0.16.1, on the workflows as of 7 May 2026) flag one of its 17 workflows, periodic-merge, for declaring no permissions. The rest pin every action to a commit and limit the token.
The config
The config extends oss-baseline, ci/, hygiene/ and tooling/. Its own rules check the files nixpkgs's CI depends on, the .gitattributes markers on generated files and the pkgs/ layout. treefmt runs from a command_ rule; the parse check and nixpkgs-vet run from command rules, since they need Nix.
- id: nixpkgs-treefmt-idempotent
kind: command_idempotent
paths: ci/default.nix
command: ["nix-build", "ci", "-A", "fmt.check"]
timeout: 600
level: errortreefmt runs nixfmt, actionlint, zizmor and the other formatters through Nix. alint runs the same check and fails when it would change a file.
Speed
In May 2026, the 72 rules that didn't call other tools, from the config as it was then, checked a 52,354-file checkout in 332 ms (alint 0.9.17), the check on every package directory included. Measured with hyperfine on a machine with 10 logical cores.
What stays outside alint
Everything that needs Nix to evaluate code stays with Nix:
- evaluating every package against the base branch, and checking that each
packageis a valid package function;.nix - consistency with
pkgs/, and the schema tests for the maintainer and team lists;top-level/ all-packages .nix - the maintainers and licenses a package names.
registry_can't read values out of Nix expressions;paths_ resolve - whether a package directory's name matches its attribute name. No rule kind checks that, and alint has no bundled Nix ruleset.