diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000000000000000000000000000000000000..2faacbe8362a86d7b77399cfb3d3547189dc6f77 --- /dev/null +++ b/flake.nix @@ -0,0 +1,69 @@ +{ + description = "A reasonably complete and well-tested golang port of Kenneth Reitz's httpbin service, with zero dependencies outside the go stdlib." + + # Nixpkgs / NixOS version to use. + inputs.nixpkgs.url = "nixpkgs/nixos-23.05"; + + outputs = { self, nixpkgs }: + let + + # to work with older version of flakes + lastModifiedDate = self.lastModifiedDate or self.lastModified or "19700101"; + + rootPath = ./.; + + # System types to support. + supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; + + # Helper function to generate an attrset '{ x86_64-linux = f "x86_64-linux"; ... }'. + forAllSystems = nixpkgs.lib.genAttrs supportedSystems; + + # Nixpkgs instantiated for supported system types. + nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); + + in + { + + packages = forAllSystems (system: + let + pkgs = nixpkgsFor.${system}; + in + { + version = pkgs.buildGoModule { + name = "go-httpbin"; + + # In 'nix develop', we don't need a copy of the source tree + # in the Nix store. + src = ././cmd/go-httpbin; + + vendorSha256 = pkgs.lib.fakeSha256; + + #vendorSha256 = "sha256-zdoTGTcC0NpVKWR8O7pQhmqOdcAwHhgFwR62uqi/EKo="; + + meta = with nixpkgs.legacyPackages.${system}.lib; { + description = "A reasonably complete and well-tested golang port of Kenneth Reitz's httpbin service, with zero dependencies outside the go stdlib."; + homepage = "https://gitlab.schukai.com/oss/utilities/version"; + license = licenses.mit; + maintainers = with maintainers; [ "mccutchen and more"]; + }; + + }; + }); + + # Add dependencies that are only needed for development + devShells = forAllSystems (system: + let + pkgs = nixpkgsFor.${system}; + in + { + default = pkgs.mkShell { + buildInputs = with pkgs; [ go gopls gotools go-tools ]; + }; + }); + + # The default package for 'nix build'. This makes sense if the + # flake provides only one package or there is a clear "main" + # package. + defaultPackage = forAllSystems (system: self.packages.${system}.version); + }; +}