git.delta.rocks / jrsonnet / refs/commits / bd8e3e569d41

difftreelog

source

flake.nix4.9 KiBsourcehistory
1{2  description = "NixOS configuration management";34  inputs = {5    nixpkgs.url = "github:nixos/nixpkgs/master";6    nixpkgs-stable-for-tests.url = "github:nixos/nixpkgs/nixos-24.05";7    rust-overlay = {8      url = "github:oxalica/rust-overlay";9      inputs = {10        nixpkgs.follows = "nixpkgs";11      };12    };13    flake-parts.url = "github:hercules-ci/flake-parts";14    crane = {15      url = "github:ipetkov/crane";16      inputs.nixpkgs.follows = "nixpkgs";17    };18  };19  outputs = {20    self,21    rust-overlay,22    flake-parts,23    nixpkgs,24    nixpkgs-stable-for-tests,25    crane,26  }:27    flake-parts.lib.mkFlake {28      # Not passing inputs through inputs for better visibility.29      inputs = {};30    } {31      flake = {32        lib = import ./lib {33          fleetPkgsForPkgs = pkgs:34            import ./pkgs {35              inherit (pkgs) callPackage;36              craneLib = crane.mkLib pkgs;37            };38        };39        # To be used with https://github.com/NixOS/nix/pull/889240        schemas = {41          fleetConfigurations = {42            version = 1;43            doc = ''44              The `fleetConfigurations` flake output defines fleet cluster configurations.45            '';46            inventory = output: {47              children =48                builtins.mapAttrs (configName: cluster: {49                  what = "fleet cluster configuration";5051                  children =52                    builtins.mapAttrs (hostName: host: {53                      what = "host [${host.system}]";54                    })55                    cluster.config.hosts;56                  # It is possible to implement this inventory right now, but I want to57                  # get rid of `fleet.nix` file in the future.58                  # children.secrets = { };59                })60                output;61            };62          };63        };64      };65      # Supported and tested list of deployment targets.66      systems = ["x86_64-linux" "aarch64-linux" "armv7l-linux" "armv6l-linux"];67      perSystem = {68        config,69        system,70        pkgs,71        ...72      }: let73        # Can also be built for darwin, through it is not usual to deploy nixos systems from macos machines.74        # I have no hardware for such testing, thus only adding machines I actually have and use.75        #76        # It is not possible to deploy any host from armv6/armv7 hardware, and I don't think it even makes sense.77        deployerSystems = ["aarch64-linux" "x86_64-linux"];78        deployerSystem = builtins.elem system deployerSystems;79        lib = pkgs.lib;80        rust = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;81        craneLib = (crane.mkLib pkgs).overrideToolchain rust;82      in {83        _module.args.pkgs = import nixpkgs {84          inherit system;85          overlays = [(rust-overlay.overlays.default)];86        };87        # Reference fleet package should be built with nightly rust, specified in rust-toolchain.toml.88        packages = lib.mkIf deployerSystem (let89          packages = import ./pkgs {90            inherit (pkgs) callPackage;91            inherit craneLib;92          };93        in94          packages // {default = packages.fleet;});95        # TODO: It should be possible to move lib.mkIf to default attribute, instead of disabling the whole96        # devShells block, yet nix flake check fails here, due to no default shell found. It is nix or flake-parts bug?97        devShells = lib.mkIf deployerSystem {98          default = craneLib.devShell {99            packages = with pkgs; [100              rust101              alejandra102              cargo-edit103              cargo-udeps104              cargo-fuzz105              cargo-watch106              cargo-outdated107108              pkg-config109              openssl110              bacon111            ];112          };113        };114        # fleet-install-secrets will not be built normally, because they are not ran directly by user most of the time.115        # checks there build packages for default nixpkgs rustPlatform packages.116        checks = let117          packages = import ./pkgs {118            inherit (pkgs) callPackage;119            craneLib = crane.mkLib (import nixpkgs {inherit system;});120          };121          packages-with-nixpkgs-stable = import ./pkgs {122            inherit (pkgs) callPackage;123            craneLib = crane.mkLib (import nixpkgs-stable-for-tests {inherit system;});124          };125          prefixAttrs = prefix: attrs:126            nixpkgs.lib.attrsets.mapAttrs' (name: value: {127              name = "${prefix}${name}";128              value = value.overrideAttrs (prev: {129                pname = "${prefix}${prev.pname}";130              });131            })132            attrs;133        in134          # `fleet` crate wants nightly rust, also little sense of supporting it on stable nixpkgs.135          (prefixAttrs "nixpkgs-" (removeAttrs packages ["fleet"]))136          // (prefixAttrs "nixpkgs-stable-" (removeAttrs packages-with-nixpkgs-stable ["fleet"]));137        formatter = pkgs.alejandra;138      };139    };140}