/ flake.nix
flake.nix
 1  {
 2    description = "The Cull monorepository.";
 3  
 4    nixConfig = {
 5      builders-use-substitutes = true;
 6      flake-registry           = "";
 7      show-trace               = true;
 8  
 9      experimental-features = [
10        "flakes"
11        "nix-command"
12        "pipe-operators"
13      ];
14  
15      extra-substituters = [
16        "https://cache.garnix.io/"
17        "https://nix-community.cachix.org/"
18      ];
19  
20      extra-trusted-public-keys = [
21        "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
22        "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
23      ];
24    };
25  
26    inputs = {
27      systems.url = "github:nix-systems/default";
28  
29      nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
30  
31      flake-parts = {
32        url = "github:hercules-ci/flake-parts";
33  
34        inputs.nixpkgs-lib.follows = "nixpkgs";
35      };
36  
37      # RUST
38      crane.url   = "github:ipetkov/crane";
39      fenix       = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; };
40      advisory-db = { url = "github:rustsec/advisory-db"; flake = false; };
41    };
42  
43    outputs = inputs @ { systems, flake-parts, ... }: flake-parts.lib.mkFlake { inherit inputs; } ({ lib, ... }: {
44      systems = import systems;
45  
46      imports = let
47        localModules = lib.filesystem.listFilesRecursive ./.
48          |> lib.filter (pathAbsolute: let
49              pathBase = baseNameOf              pathAbsolute;
50              pathStem = lib.removeSuffix ".nix" pathBase;
51            in pathStem != pathBase
52            && lib.hasPrefix "__" pathStem
53            && lib.hasSuffix "__" pathStem);
54  
55        outerModules = lib.removeAttrs inputs [ "self" ]
56          |> lib.attrValues
57          |> lib.catAttrs "flakeModule";
58      in localModules ++ outerModules;
59    });
60  }