Skip to content
Snippets Groups Projects
flake.nix 6.28 KiB
Newer Older
  description = "Configuration for the bob project";
Volker Schukai's avatar
Volker Schukai committed

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
    devenv.url = "github:cachix/devenv";
    mk-shell-bin.url = "github:rrbutani/nix-mk-shell-bin";
    flake-root.url = "github:srid/flake-root";
    treefmt-nix.url = "github:numtide/treefmt-nix";
    versionsTool.url = "git+https://gitlab.schukai.com/oss/utilities/version.git";
    nix-templates.url = "git+https://gitlab.schukai.com/schukai/entwicklung/nix-flakes.git";
Volker Schukai's avatar
Volker Schukai committed
  };

  nixConfig = {
    extra-trusted-public-keys = "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=";
    extra-substituters = "https://devenv.cachix.org";
  };

  outputs = inputs @ {
Volker Schukai's avatar
Volker Schukai committed
    flake-parts,
    versionsTool,
    nix-templates,
Volker Schukai's avatar
Volker Schukai committed
    ...
  }:
    flake-parts.lib.mkFlake {inherit inputs;} {
      imports = [
        inputs.devenv.flakeModule
        inputs.flake-root.flakeModule
        inputs.treefmt-nix.flakeModule
      ];

      systems = (import ./project.nix).supportedSystems;

      perSystem = let
        common-script = import ./system/scripts/common.nix;
      in
        {
          config,
          self',
          inputs',
          pkgs,
          system,
          ...
        }: let
          projectDefinition = import ./project.nix;
          buildRoot = ./.;

          enableDebugPackage = true;

          portAsString = toString projectDefinition.k8s.port;
        in {
          packages = rec {
Volker Schukai's avatar
Volker Schukai committed
            default = self.packages.${system}.bob;
Volker Schukai's avatar
Volker Schukai committed
            bob = let
Volker Schukai's avatar
Volker Schukai committed
              projectDefinition = import ./project.nix;
              sourcePath = ./source;
Volker Schukai's avatar
Volker Schukai committed
              timestamp = with (import <nixpkgs> {});
                builtins.readFile (
                  runCommand "timestamp"
                  {when = builtins.currentTime;}
                  "echo -n `date -d @$when +%Y-%m-%d_%H-%M-%S` > $out"
                );
Volker Schukai's avatar
Volker Schukai committed
            in
              # https://nixos.wiki/wiki/Go
              pkgs.buildGoModule {
                pname = projectDefinition.name;
                version = projectDefinition.version;

                src = sourcePath;
Volker Schukai's avatar
Volker Schukai committed
                tags = []; # add your tags here (eq  "netgo" "osusergo" "static_build")
Volker Schukai's avatar
Volker Schukai committed
                # The -w turns off DWARF debugging information:
                # The -s flag will omit the symbol table and debug information.
Volker Schukai's avatar
Volker Schukai committed
                ldflags = [
Volker Schukai's avatar
Volker Schukai committed
                  "-s -w"
                  "-X '${projectDefinition.modulePath}/release.version=${projectDefinition.version}'"
Volker Schukai's avatar
Volker Schukai committed
                  "-X '${projectDefinition.modulePath}/release.commit=${projectDefinition.commitHash}'"
Volker Schukai's avatar
Volker Schukai committed
                  "-X '${projectDefinition.modulePath}/release.name=${projectDefinition.name}'"
                  "-X '${projectDefinition.modulePath}/release.mnemonic=${projectDefinition.mnemonic}'"
Volker Schukai's avatar
Volker Schukai committed
                  "-X '${projectDefinition.modulePath}/release.buildDate=${timestamp}'"
Volker Schukai's avatar
Volker Schukai committed
                ];
                #vendorHash = null;
                vendorHash = projectDefinition.vendorHash;
Volker Schukai's avatar
Volker Schukai committed
                #vendorHash = system.lib.fakeHash;
Volker Schukai's avatar
Volker Schukai committed
                proxyVendor = true;

                meta = with system.lib; {
                  description = projectDefinition.description;
                  homepage = "https://" + projectDefinition.modulePath;
                  maintainers = with maintainers; ["schukai GmbH"];
                };

                buildInputs = [pkgs.bash];
                nativeBuildInputs = with system; [pkgs.alejandra pkgs.shellcheck pkgs.shfmt];

                doCheck = true;
Volker Schukai's avatar
Volker Schukai committed
                checkPhase = ''
                  cd ${sourcePath}
                  if ! go test -v ./... 2>&1 | cat ; then
                    echo "Test failed."
                    exit 1
                  fi

                  echo "Test passed: '$out' is as expected."
Volker Schukai's avatar
Volker Schukai committed
                '';
              };
Volker Schukai's avatar
Volker Schukai committed
          treefmt.config = {
            inherit (config.flake-root) projectRootFile;
            programs.alejandra.enable = true;
            programs.gofmt.enable = true;
            programs.shfmt.enable = true;
            programs.shellcheck.enable = true;
            programs.yamlfmt.enable = true;
            programs.prettier.enable = true;
Volker Schukai's avatar
Volker Schukai committed
          devenv.shells = let
            projectDefinition = import ./project.nix;
            buildRoot = ./.;
          in {
Volker Schukai's avatar
Volker Schukai committed
            default = rec {
Volker Schukai's avatar
Volker Schukai committed
              name = projectDefinition.name;

              scripts = let
                versionsTool = inputs.versionsTool.defaultPackage."${builtins.currentSystem}";

                workingDirectory = builtins.getEnv "PWD";
Volker Schukai's avatar
Volker Schukai committed
              in {
Volker Schukai's avatar
Volker Schukai committed
                treefmt.exec = ''
                  ${config.treefmt.build.wrapper}/bin/treefmt
                '';

                rm-gitlab-pipelines.exec = import ./system/scripts/rm-gitlab-pipelines.nix {
                  inherit pkgs config buildRoot projectDefinition;
                };

                update-files.exec = import ./system/scripts/update-files.nix {
                  inherit pkgs config buildRoot projectDefinition;
                };

                check-licences.exec = import ./system/scripts/check-licences.nix {
                  inherit pkgs config buildRoot projectDefinition;
                };

                update-hashes.exec = import ./system/scripts/update-hashes.nix {
Volker Schukai's avatar
Volker Schukai committed
                  inherit pkgs config buildRoot projectDefinition workingDirectory;
Volker Schukai's avatar
Volker Schukai committed
                };
Volker Schukai's avatar
Volker Schukai committed
                update-version.exec = import ./system/scripts/update-version.nix {
Volker Schukai's avatar
Volker Schukai committed
                  inherit pkgs config buildRoot projectDefinition versionsTool workingDirectory;
Volker Schukai's avatar
Volker Schukai committed
                };
              };

              imports = [];

              packages = with pkgs; [
Volker Schukai's avatar
Volker Schukai committed
                inputs.versionsTool.defaultPackage."${builtins.currentSystem}"
                inputs.nix-templates.packages."${builtins.currentSystem}".git-commit
                nodePackages.prettier-plugin-toml
                nodePackages.prettier
Volker Schukai's avatar
Volker Schukai committed
                go-task
                alejandra
Volker Schukai's avatar
Volker Schukai committed
              ];

              languages.nix.enable = true;
              languages = {go = {enable = true;};};

              difftastic.enable = true;

              enterShell = ''
                post-init-setup
              '';
            };
          };
        };
Volker Schukai's avatar
Volker Schukai committed
      flake = {
        defaultPackage = self.packages.${builtins.currentSystem}.bob;
Volker Schukai's avatar
Volker Schukai committed
      };
Volker Schukai's avatar
Volker Schukai committed
    };
Volker Schukai's avatar
Volker Schukai committed
}