Skip to content
Snippets Groups Projects
flake.nix 2.8 KiB
Newer Older
  description = "Bob the builder for Go projects";
Volker Schukai's avatar
Volker Schukai committed

  # Nixpkgs / NixOS version to use.
  inputs.nixpkgs.url = "nixpkgs/nixos-23.11";
Volker Schukai's avatar
Volker Schukai committed
  
  outputs = {
    nixpkgs,
Volker Schukai's avatar
Volker Schukai committed
    ...
  }: 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}'"
Volker Schukai's avatar
Volker Schukai committed
          "-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;
Volker Schukai's avatar
Volker Schukai committed
        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"];
Volker Schukai's avatar
Volker Schukai committed
        };
      };

      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];
Volker Schukai's avatar
Volker Schukai committed
      };
    });

    # 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);
  };
Volker Schukai's avatar
Volker Schukai committed
}