{ description = "Provenance services, NixOS modules, and development environment"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; inputs.services-flake.url = "github:juspay/services-flake/0.5.0"; inputs.process-compose-flake.url = "github:Platonic-Systems/process-compose-flake"; inputs.git-hooks = { url = "github:cachix/git-hooks.nix"; inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { self, nixpkgs, services-flake, process-compose-flake, git-hooks, ... }: let systems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ]; forSystems = nixpkgs.lib.genAttrs systems; devServices = system: import ./nix/dev-services.nix { pkgs = import nixpkgs { inherit system; }; package = self.packages.${system}.provenance; inherit services-flake process-compose-flake; }; hooks = system: git-hooks.lib.${system}.run ( import ./nix/hooks.nix { pkgs = import nixpkgs { inherit system; }; } ); in { packages = forSystems ( system: let pkgs = import nixpkgs { inherit system; }; provenance = pkgs.callPackage ./nix/package.nix { }; in { default = provenance; inherit provenance; goat = pkgs.callPackage ./nix/goat.nix { }; appview = provenance.override { pname = "provenance-appview"; subPackages = [ "cmd/appview" ]; }; ui = provenance.override { pname = "provenance-ui"; subPackages = [ "cmd/ui" ]; }; services = (devServices system).outputs.package; } ); apps = forSystems (system: { services = { type = "app"; meta.description = "Start the native Provenance development services"; program = "${self.packages.${system}.services}/bin/provenance-services"; }; }); processComposeModules.provenance = services-flake.lib.multiService ./nix/services/provenance.nix; nixosModules = { appview = import ./nix/modules/appview.nix; ui = import ./nix/modules/ui.nix; default = { imports = [ self.nixosModules.appview self.nixosModules.ui ]; }; }; checks = forSystems ( system: let pkgs = import nixpkgs { inherit system; }; in { package = self.packages.${system}.default; dev-services = (devServices system).outputs.check; dev-services-wildcard = (devServices system).outputs.check.overrideAttrs { PROVENANCE_DEV_BIND_HOST = "0.0.0.0"; }; pre-commit = hooks system; source-filter = import ./nix/tests/source-filter.nix { inherit pkgs; }; lexicons = pkgs.runCommand "provenance-lexicon-check" { nativeBuildInputs = [ self.packages.${system}.goat ]; } '' goat lex lint ${./lexicons/computer/ngp/provenance/vouch.json} touch "$out" ''; } // nixpkgs.lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux { modules = import ./nix/tests/modules.nix { inherit self nixpkgs pkgs system ; }; services = pkgs.testers.runNixOSTest (import ./nix/tests/services.nix { inherit self system; }); } ); devShells = forSystems ( system: let pkgs = import nixpkgs { inherit system; }; in { default = pkgs.mkShell { CGO_ENABLED = "1"; packages = [ pkgs.go pkgs.stdenv.cc pkgs.sqlc pkgs.sqlite self.packages.${system}.goat pkgs.gnumake pkgs.plan9port ] ++ (hooks system).enabledPackages; shellHook = (hooks system).shellHook; }; } ); formatter = forSystems ( system: let pkgs = import nixpkgs { inherit system; }; config = (hooks system).config; in pkgs.writeShellApplication { name = "provenance-hooks"; text = '' exec ${pkgs.lib.getExe config.package} run --all-files --config ${config.configFile} "$@" ''; } ); }; }