2022-03-07 16:51:38 +00:00
|
|
|
{
|
|
|
|
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, ... }:
|
2022-03-08 17:07:08 +00:00
|
|
|
let
|
|
|
|
headscaleVersion = if (self ? shortRev) then self.shortRev else "dev";
|
|
|
|
in
|
2022-03-07 16:51:38 +00:00
|
|
|
{
|
|
|
|
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";
|
2022-03-08 17:07:08 +00:00
|
|
|
version = headscaleVersion;
|
2022-03-07 16:51:38 +00:00
|
|
|
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.
|
2022-03-08 17:17:02 +00:00
|
|
|
vendorSha256 = "sha256-xnmVBip8UWUmraEJI4iQUGMwOWV3DNqB3X+YWu2EZAg=";
|
2022-03-07 16:51:38 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
];
|
2022-03-07 17:18:41 +00:00
|
|
|
|
|
|
|
|
|
|
|
# Add entry to build a docker image with headscale
|
|
|
|
# caveat: only works on Linux
|
2022-03-07 17:41:16 +00:00
|
|
|
#
|
|
|
|
# Usage:
|
|
|
|
# nix build .#headscale-docker
|
|
|
|
# docker load < result
|
2022-03-07 17:18:41 +00:00
|
|
|
headscale-docker = pkgs.dockerTools.buildLayeredImage {
|
|
|
|
name = "headscale";
|
2022-03-08 17:07:08 +00:00
|
|
|
tag = headscaleVersion;
|
2022-03-07 17:37:53 +00:00
|
|
|
contents = [ pkgs.headscale ];
|
|
|
|
config.Entrypoint = [ (pkgs.headscale + "/bin/headscale") ];
|
2022-03-07 17:18:41 +00:00
|
|
|
};
|
2022-03-07 16:51:38 +00:00
|
|
|
in
|
|
|
|
rec {
|
|
|
|
# `nix develop`
|
|
|
|
devShell = pkgs.mkShell { buildInputs = devDeps; };
|
|
|
|
|
|
|
|
# `nix build`
|
|
|
|
packages = with pkgs; {
|
|
|
|
inherit headscale;
|
2022-03-07 17:18:41 +00:00
|
|
|
inherit headscale-docker;
|
|
|
|
|
2022-03-07 16:51:38 +00:00
|
|
|
};
|
|
|
|
defaultPackage = pkgs.headscale;
|
|
|
|
|
|
|
|
# `nix run`
|
|
|
|
apps.headscale = flake-utils.lib.mkApp {
|
|
|
|
drv = packages.headscale;
|
|
|
|
};
|
|
|
|
defaultApp = apps.headscale;
|
|
|
|
|
2022-03-07 17:18:41 +00:00
|
|
|
|
2022-03-07 16:51:38 +00:00
|
|
|
});
|
|
|
|
}
|