{ description = "Bob the builder for Go projects"; # Nixpkgs / NixOS version to use. inputs.nixpkgs.url = "nixpkgs/nixos-24.05"; outputs = { self, nixpkgs, ... }: let # to work with older version of flakes lastModifiedDate = self.lastModifiedDate or self.lastModified or "19700101"; rootPath = ./.; goPkgReleaseData = import "${rootPath}/project.nix"; goPkgName = goPkgReleaseData.name or "goPkg"; goPkgMnemonic = goPkgReleaseData.mnemonic or "go-pkg"; goPkgDescription = goPkgReleaseData.description or "this is a goPkg"; goPkgVersion = goPkgReleaseData.version or "0.1.0"; goPkgHash = if (self ? shortRev) then self.shortRev else "dirty-not-for-production"; goPkgVendorHash = goPkgReleaseData.vendorHash or null; # System types to support. supportedSystems = ["x86_64-linux" "x86_64-windows" "x86_64-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 { bob = pkgs.buildGoModule { name = goPkgName; # In 'nix develop', we don't need a copy of the source tree # in the Nix store. src = ././source; tags = []; # add your tags here (eq "netgo" "osusergo" "static_build") ldflags = [ "-X 'gitlab.schukai.com/oss/bob/release.version=${goPkgVersion}'" "-X 'gitlab.schukai.com/oss/bob/release.commit=${self.rev or "unknown"}'" "-X 'gitlab.schukai.com/oss/bob/release.buildDate=${self.lastModifiedDate or "unknown"}'" "-X 'gitlab.schukai.com/oss/bob/release.name=${goPkgName}'" "-X 'gitlab.schukai.com/oss/bob/release.mnemonic=${goPkgMnemonic}'" ]; #vendorHash = pkgs.lib.fakeHash; vendorHash = null; meta = with nixpkgs.legacyPackages.${system}.lib; { description = goPkgDescription; homepage = "https://gitlab.schukai.com/oss/bob"; license = licenses.mit; maintainers = with maintainers; ["schukai GmbH"]; }; }; default = self.packages.${system}.bob; }); # 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 lightningcss]; }; }); # 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}.bob); }; }