{ inputs = { flake-utils = { type = "github"; owner = "numtide"; repo = "flake-utils"; ref = "main"; }; crane = { url = "github:ipetkov/crane"; inputs.nixpkgs.follows = "nixpkgs"; }; nixpkgs = { type = "github"; owner = "nixos"; repo = "nixpkgs"; ref = "nixos-unstable"; }; }; outputs = { self, nixpkgs, flake-utils, crane }: 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 = nixpkgs.legacyPackages.${system}; crane' = crane.mkLib pkgs; 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); dockerContainer = pkgs.callPackage ./docker.nix { inherit (self.packages.${system}) kittybox; rev = self.rev or "development"; inherit (self) lastModifiedDate; }; }; devShells.default = pkgs.callPackage ./shell.nix { inherit (pkgs.nodePackages) typescript typescript-language-server; }; }); }