mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			149 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| {
 | |
|   description = "headscale - Open Source Tailscale Control server";
 | |
| 
 | |
|   inputs = {
 | |
|     # TODO: Use unstable when Go 1.18 has made it in
 | |
|     # https://nixpk.gs/pr-tracker.html?pr=164292
 | |
|     # nixpkgs.url = "nixpkgs/nixpkgs-unstable";
 | |
|     nixpkgs.url = "nixpkgs/master";
 | |
|     flake-utils.url = "github:numtide/flake-utils";
 | |
|   };
 | |
| 
 | |
|   outputs = { self, nixpkgs, flake-utils, ... }:
 | |
|     let
 | |
|       headscaleVersion = if (self ? shortRev) then self.shortRev else "dev";
 | |
|     in
 | |
|     {
 | |
|       overlay = final: prev:
 | |
|         let
 | |
|           pkgs = nixpkgs.legacyPackages.${prev.system};
 | |
|         in
 | |
|         rec {
 | |
|           golines =
 | |
|             pkgs.buildGoModule rec {
 | |
|               pname = "golines";
 | |
|               version = "0.9.0";
 | |
| 
 | |
|               src = pkgs.fetchFromGitHub {
 | |
|                 owner = "segmentio";
 | |
|                 repo = "golines";
 | |
|                 rev = "v${version}";
 | |
|                 sha256 = "sha256-BUXEg+4r9L/gqe4DhTlhN55P3jWt7ZyWFQycO6QePrw=";
 | |
|               };
 | |
| 
 | |
|               vendorSha256 = "sha256-sEzWUeVk5GB0H41wrp12P8sBWRjg0FHUX6ABDEEBqK8=";
 | |
| 
 | |
|               nativeBuildInputs = [ pkgs.installShellFiles ];
 | |
|             };
 | |
| 
 | |
|           protoc-gen-grpc-gateway =
 | |
|             pkgs.buildGoModule rec {
 | |
|               pname = "grpc-gateway";
 | |
|               version = "2.8.0";
 | |
| 
 | |
|               src = pkgs.fetchFromGitHub {
 | |
|                 owner = "grpc-ecosystem";
 | |
|                 repo = "grpc-gateway";
 | |
|                 rev = "v${version}";
 | |
|                 sha256 = "sha256-8eBBBYJ+tBjB2fgPMX/ZlbN3eeS75e8TAZYOKXs6hcg=";
 | |
|               };
 | |
| 
 | |
|               vendorSha256 = "sha256-AW2Gn/mlZyLMwF+NpK59eiOmQrYWW/9HPjbunYc9Ij4=";
 | |
| 
 | |
|               nativeBuildInputs = [ pkgs.installShellFiles ];
 | |
| 
 | |
|               subPackages = [ "protoc-gen-grpc-gateway" "protoc-gen-openapiv2" ];
 | |
|             };
 | |
| 
 | |
|           headscale =
 | |
|             pkgs.buildGo118Module rec {
 | |
|               pname = "headscale";
 | |
|               version = headscaleVersion;
 | |
|               src = pkgs.lib.cleanSource self;
 | |
| 
 | |
|               # When updating go.mod or go.sum, a new sha will need to be calculated,
 | |
|               # update this if you have a mismatch after doing a change to thos files.
 | |
|               vendorSha256 = "sha256-VsMhgAP0YY6oo/iW7UXg6jc/rv5oZLSkluQ12TKsXXs=";
 | |
| 
 | |
|               ldflags = [ "-s" "-w" "-X github.com/juanfont/headscale/cmd/headscale/cli.Version=v${version}" ];
 | |
|             };
 | |
|         };
 | |
|     } // flake-utils.lib.eachDefaultSystem
 | |
|       (system:
 | |
|         let
 | |
|           pkgs = import nixpkgs {
 | |
|             overlays = [ self.overlay ];
 | |
|             inherit system;
 | |
|           };
 | |
|           buildDeps = with pkgs; [ git go_1_18 gnumake ];
 | |
|           devDeps = with pkgs;
 | |
|             buildDeps ++ [
 | |
|               golangci-lint
 | |
|               golines
 | |
|               nodePackages.prettier
 | |
| 
 | |
|               # Protobuf dependencies
 | |
|               protobuf
 | |
|               protoc-gen-go
 | |
|               protoc-gen-go-grpc
 | |
|               protoc-gen-grpc-gateway
 | |
|               buf
 | |
|               clang-tools # clang-format
 | |
|             ];
 | |
| 
 | |
| 
 | |
|           # Add entry to build a docker image with headscale
 | |
|           # caveat: only works on Linux
 | |
|           #
 | |
|           # Usage:
 | |
|           # nix build .#headscale-docker
 | |
|           # docker load < result
 | |
|           headscale-docker = pkgs.dockerTools.buildLayeredImage {
 | |
|             name = "headscale";
 | |
|             tag = headscaleVersion;
 | |
|             contents = [ pkgs.headscale ];
 | |
|             config.Entrypoint = [ (pkgs.headscale + "/bin/headscale") ];
 | |
|           };
 | |
|         in
 | |
|         rec {
 | |
|           # `nix develop`
 | |
|           devShell = pkgs.mkShell { buildInputs = devDeps; };
 | |
| 
 | |
|           # `nix build`
 | |
|           packages = with pkgs; {
 | |
|             inherit headscale;
 | |
|             inherit headscale-docker;
 | |
|           };
 | |
| 
 | |
|           defaultPackage = pkgs.headscale;
 | |
| 
 | |
|           # `nix run`
 | |
|           apps.headscale = flake-utils.lib.mkApp {
 | |
|             drv = packages.headscale;
 | |
|           };
 | |
|           defaultApp = apps.headscale;
 | |
| 
 | |
|           checks = {
 | |
|             format = pkgs.runCommand "check-format"
 | |
|               {
 | |
|                 buildInputs = with pkgs; [
 | |
|                   gnumake
 | |
|                   nixpkgs-fmt
 | |
|                   golangci-lint
 | |
|                   nodePackages.prettier
 | |
|                   golines
 | |
|                   clang-tools
 | |
|                 ];
 | |
|               } ''
 | |
|               ${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt ${./.}
 | |
|               ${pkgs.golangci-lint}/bin/golangci-lint run --fix --timeout 10m
 | |
|               ${pkgs.nodePackages.prettier}/bin/prettier --write '**/**.{ts,js,md,yaml,yml,sass,css,scss,html}'
 | |
|               ${pkgs.golines}/bin/golines --max-len=88 --base-formatter=gofumpt -w ${./.}
 | |
|               ${pkgs.clang-tools}/bin/clang-format -style="{BasedOnStyle: Google, IndentWidth: 4, AlignConsecutiveDeclarations: true, AlignConsecutiveAssignments: true, ColumnLimit: 0}" -i ${./.}
 | |
|             '';
 | |
|           };
 | |
| 
 | |
| 
 | |
|         });
 | |
| }
 |