mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Add flake build file
This commit adds a flake.nix build file, it can be used for three things: Build `headscale` from local or straight from git: nix build or nix build github:juanfont/headscale Run and Build `headscale` from local or straight from git: nix run or nix run github:juanfont/headscale Set up a development environment including all our tools, - linters - protobuf tooling - compilers nix develop
This commit is contained in:
		
							parent
							
								
									15f8cb5034
								
							
						
					
					
						commit
						5de9de14a9
					
				
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -27,3 +27,6 @@ derp.yaml | ||||
| .idea | ||||
| 
 | ||||
| test_output/  | ||||
| 
 | ||||
| # Nix build output | ||||
| result | ||||
|  | ||||
							
								
								
									
										42
									
								
								flake.lock
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								flake.lock
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | ||||
| { | ||||
|   "nodes": { | ||||
|     "flake-utils": { | ||||
|       "locked": { | ||||
|         "lastModified": 1644229661, | ||||
|         "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", | ||||
|         "owner": "numtide", | ||||
|         "repo": "flake-utils", | ||||
|         "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "numtide", | ||||
|         "repo": "flake-utils", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nixpkgs": { | ||||
|       "locked": { | ||||
|         "lastModified": 1646254136, | ||||
|         "narHash": "sha256-8nQx02tTzgYO21BP/dy5BCRopE8OwE8Drsw98j+Qoaw=", | ||||
|         "owner": "NixOS", | ||||
|         "repo": "nixpkgs", | ||||
|         "rev": "3e072546ea98db00c2364b81491b893673267827", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "id": "nixpkgs", | ||||
|         "ref": "nixos-unstable", | ||||
|         "type": "indirect" | ||||
|       } | ||||
|     }, | ||||
|     "root": { | ||||
|       "inputs": { | ||||
|         "flake-utils": "flake-utils", | ||||
|         "nixpkgs": "nixpkgs" | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "root": "root", | ||||
|   "version": 7 | ||||
| } | ||||
							
								
								
									
										105
									
								
								flake.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								flake.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,105 @@ | ||||
| { | ||||
|   description = "headscale - Open Source Tailscale Control server"; | ||||
| 
 | ||||
|   inputs = { | ||||
|     nixpkgs.url = "nixpkgs/nixos-unstable"; | ||||
|     flake-utils.url = "github:numtide/flake-utils"; | ||||
|   }; | ||||
| 
 | ||||
|   outputs = { self, nixpkgs, flake-utils, ... }: | ||||
|     { | ||||
|       overlay = final: prev: | ||||
|         let | ||||
|           pkgs = nixpkgs.legacyPackages.${prev.system}; | ||||
|         in | ||||
|         rec { | ||||
|           golines = | ||||
|             pkgs.buildGoModule rec { | ||||
|               pname = "golines"; | ||||
|               version = "0.8.0"; | ||||
| 
 | ||||
|               src = pkgs.fetchFromGitHub { | ||||
|                 owner = "segmentio"; | ||||
|                 repo = "golines"; | ||||
|                 rev = "v${version}"; | ||||
|                 sha256 = "sha256-W4vN3rGKyX43HZyjjVUKnR4Fy0LfYqVf6h7wIYO0U50="; | ||||
|               }; | ||||
| 
 | ||||
|               vendorSha256 = "sha256-ZHL2hQnJXpZu42hQZzIIaEzINSS+5BOL9dxAVCp0nMs="; | ||||
| 
 | ||||
|               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.buildGo117Module rec { | ||||
|               pname = "headscale"; | ||||
|               version = "dev"; | ||||
|               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-XzcTErmY/jM73nGzH3R0+5lIqJ8tT1lFyQilwJpqBlo="; | ||||
| 
 | ||||
|               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_17 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 | ||||
|             ]; | ||||
|         in | ||||
|         rec { | ||||
|           # `nix develop` | ||||
|           devShell = pkgs.mkShell { buildInputs = devDeps; }; | ||||
| 
 | ||||
|           # `nix build` | ||||
|           packages = with pkgs; { | ||||
|             inherit headscale; | ||||
|           }; | ||||
|           defaultPackage = pkgs.headscale; | ||||
| 
 | ||||
|           # `nix run` | ||||
|           apps.headscale = flake-utils.lib.mkApp { | ||||
|             drv = packages.headscale; | ||||
|           }; | ||||
|           defaultApp = apps.headscale; | ||||
| 
 | ||||
|         }); | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user