{ inputs = { flake-utils.url = "github:numtide/flake-utils/main"; crane.url = "github:ipetkov/crane"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs = { nixpkgs.follows = "nixpkgs"; }; }; }; outputs = { self, nixpkgs, flake-utils, crane, rust-overlay }: let supportedSystems = ["aarch64-linux" "x86_64-linux"]; forAllSystems = f: flake-utils.lib.eachSystem supportedSystems f; in { nixosModules.default = import ./configuration.nix self; } // forAllSystems (system: let pkgs = import nixpkgs { overlays = [ rust-overlay.overlays.default ]; localSystem = { inherit system; }; }; crane' = crane.mkLib pkgs; cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); crane-msrv' = crane'.overrideToolchain (p: p.rust-bin.stable."${cargoToml.package.rust-version}".default); kittybox = pkgs.callPackage ./kittybox.nix { # TODO: this may break cross-compilation. It may be better to # inject it as an overlay. However, I am unsure whether Crane # can recognize it's being passed a cross-compilation set. crane = crane'; nixosTests = { smokeTest = self.checks.${system}.nixos-test; postgresSmokeTest = self.checks.${system}.nixos-test-postgres; }; }; in { packages = { kittybox = kittybox; default = self.packages.${system}.kittybox; }; checks = { kittybox = self.packages.${system}.kittybox; deps = self.packages.${system}.kittybox.cargoArtifacts; clippy = self.packages.${system}.kittybox.clippy; distributed-test = pkgs.nixosTest (import ./nixos-tests/distributed-test.nix self); nixos-test = pkgs.nixosTest (import ./nixos-tests/smoke-test.nix self); nixos-test-postgres = pkgs.nixosTest (import ./nixos-tests/postgres-smoke-test.nix self); webmention-test = pkgs.nixosTest (import ./nixos-tests/webmention-test.nix self); msrv-check = (self.packages.${system}.kittybox.override { crane = crane-msrv'; }); }; devShells.default = pkgs.callPackage ./shell.nix {}; devShells.msrv = let rust = pkgs.rust-bin.stable."${cargoToml.package.rust-version}".default; in pkgs.callPackage ./shell.nix { cargo = rust; rustc = rust; rust-analyzer = rust; }; }); }