Skip to content
Snippets Groups Projects
flake.nix 2.81 KiB
Newer Older
  • Learn to ignore specific revisions
  •   description = "Bob the builder for Go projects";
    
    Volker Schukai's avatar
    Volker Schukai committed
    
    
      # Nixpkgs / NixOS version to use.
    
    Volker Schukai's avatar
    Volker Schukai committed
      inputs.nixpkgs.url = "nixpkgs/nixos-24.05";
    
    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 = [
    
    Volker Schukai's avatar
    Volker Schukai committed
              "-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"}'"
    
    Volker Schukai's avatar
    Volker Schukai committed
              "-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 {
    
    Volker Schukai's avatar
    Volker Schukai committed
            buildInputs = with pkgs; [go gopls gotools go-tools lightningcss];
    
    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
    }