2022-03-07 17:51:38 +01:00
|
|
|
{
|
|
|
|
description = "headscale - Open Source Tailscale Control server";
|
|
|
|
|
|
|
|
inputs = {
|
2023-04-07 12:34:52 +02:00
|
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
2022-03-07 17:51:38 +01:00
|
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
|
|
};
|
|
|
|
|
2023-05-26 12:26:34 +02:00
|
|
|
outputs = {
|
|
|
|
self,
|
|
|
|
nixpkgs,
|
|
|
|
flake-utils,
|
|
|
|
...
|
|
|
|
}: let
|
|
|
|
headscaleVersion =
|
|
|
|
if (self ? shortRev)
|
|
|
|
then self.shortRev
|
|
|
|
else "dev";
|
|
|
|
in
|
2022-03-07 17:51:38 +01:00
|
|
|
{
|
2023-05-26 12:26:34 +02:00
|
|
|
overlay = _: prev: let
|
|
|
|
pkgs = nixpkgs.legacyPackages.${prev.system};
|
2024-09-04 07:55:16 +02:00
|
|
|
buildGo = pkgs.buildGo123Module;
|
2024-12-09 17:15:38 +01:00
|
|
|
in {
|
2024-09-04 07:55:16 +02:00
|
|
|
headscale = buildGo rec {
|
2023-05-26 12:26:34 +02:00
|
|
|
pname = "headscale";
|
|
|
|
version = headscaleVersion;
|
|
|
|
src = pkgs.lib.cleanSource self;
|
2022-11-04 11:26:33 +01:00
|
|
|
|
2023-05-26 12:26:34 +02:00
|
|
|
# Only run unit tests when testing a build
|
|
|
|
checkFlags = ["-short"];
|
2022-09-26 10:48:59 +02:00
|
|
|
|
2023-05-26 12:26:34 +02:00
|
|
|
# When updating go.mod or go.sum, a new sha will need to be calculated,
|
2024-05-24 10:15:34 +02:00
|
|
|
# update this if you have a mismatch after doing a change to thos files.
|
2024-12-13 08:52:40 +01:00
|
|
|
vendorHash = "sha256-NyXMSIVcmPlUhE3LmEsYZQxJdz+e435r+GZC8umQKqQ=";
|
2022-03-07 18:18:41 +01:00
|
|
|
|
2024-02-12 09:11:33 +01:00
|
|
|
subPackages = ["cmd/headscale"];
|
2022-03-17 19:07:26 +01:00
|
|
|
|
2024-02-12 09:11:33 +01:00
|
|
|
ldflags = ["-s" "-w" "-X github.com/juanfont/headscale/cmd/headscale/cli.Version=v${version}"];
|
2023-05-26 12:26:34 +02:00
|
|
|
};
|
2022-03-07 17:51:38 +01:00
|
|
|
|
2024-09-04 07:55:16 +02:00
|
|
|
protoc-gen-grpc-gateway = buildGo rec {
|
2023-05-26 12:26:34 +02:00
|
|
|
pname = "grpc-gateway";
|
2024-12-10 16:23:55 +01:00
|
|
|
version = "2.24.0";
|
2022-09-26 10:48:59 +02:00
|
|
|
|
2023-05-26 12:26:34 +02:00
|
|
|
src = pkgs.fetchFromGitHub {
|
|
|
|
owner = "grpc-ecosystem";
|
|
|
|
repo = "grpc-gateway";
|
|
|
|
rev = "v${version}";
|
2024-12-10 16:23:55 +01:00
|
|
|
sha256 = "sha256-lUEoqXJF1k4/il9bdDTinkUV5L869njZNYqObG/mHyA=";
|
2022-03-17 19:07:26 +01:00
|
|
|
};
|
2023-05-26 12:26:34 +02:00
|
|
|
|
2024-12-10 16:23:55 +01:00
|
|
|
vendorHash = "sha256-Ttt7bPKU+TMKRg5550BS6fsPwYp0QJqcZ7NLrhttSdw=";
|
2023-05-26 12:26:34 +02:00
|
|
|
|
|
|
|
nativeBuildInputs = [pkgs.installShellFiles];
|
|
|
|
|
|
|
|
subPackages = ["protoc-gen-grpc-gateway" "protoc-gen-openapiv2"];
|
2022-09-26 10:48:59 +02:00
|
|
|
};
|
2024-09-04 07:55:16 +02:00
|
|
|
|
2024-12-10 16:23:55 +01:00
|
|
|
protobuf-language-server = buildGo rec {
|
|
|
|
pname = "protobuf-language-server";
|
|
|
|
version = "2546944";
|
|
|
|
|
|
|
|
src = pkgs.fetchFromGitHub {
|
|
|
|
owner = "lasorda";
|
|
|
|
repo = "protobuf-language-server";
|
|
|
|
rev = "${version}";
|
|
|
|
sha256 = "sha256-Cbr3ktT86RnwUntOiDKRpNTClhdyrKLTQG2ZEd6fKDc=";
|
|
|
|
};
|
|
|
|
|
|
|
|
vendorHash = "sha256-PfT90dhfzJZabzLTb1D69JCO+kOh2khrlpF5mCDeypk=";
|
|
|
|
|
|
|
|
subPackages = ["."];
|
|
|
|
};
|
|
|
|
|
2024-09-09 14:29:09 +02:00
|
|
|
# Upstream does not override buildGoModule properly,
|
|
|
|
# importing a specific module, so comment out for now.
|
|
|
|
# golangci-lint = prev.golangci-lint.override {
|
|
|
|
# buildGoModule = buildGo;
|
|
|
|
# };
|
2024-09-04 07:55:16 +02:00
|
|
|
|
|
|
|
goreleaser = prev.goreleaser.override {
|
|
|
|
buildGoModule = buildGo;
|
|
|
|
};
|
|
|
|
|
|
|
|
gotestsum = prev.gotestsum.override {
|
|
|
|
buildGoModule = buildGo;
|
|
|
|
};
|
|
|
|
|
|
|
|
gotests = prev.gotests.override {
|
|
|
|
buildGoModule = buildGo;
|
|
|
|
};
|
|
|
|
|
|
|
|
gofumpt = prev.gofumpt.override {
|
|
|
|
buildGoModule = buildGo;
|
|
|
|
};
|
2023-05-26 12:26:34 +02:00
|
|
|
};
|
2022-09-26 10:48:59 +02:00
|
|
|
}
|
|
|
|
// flake-utils.lib.eachDefaultSystem
|
2023-05-26 12:26:34 +02:00
|
|
|
(system: let
|
|
|
|
pkgs = import nixpkgs {
|
|
|
|
overlays = [self.overlay];
|
|
|
|
inherit system;
|
|
|
|
};
|
2024-08-23 15:28:54 +02:00
|
|
|
buildDeps = with pkgs; [git go_1_23 gnumake];
|
2023-05-26 12:26:34 +02:00
|
|
|
devDeps = with pkgs;
|
|
|
|
buildDeps
|
|
|
|
++ [
|
|
|
|
golangci-lint
|
|
|
|
golines
|
|
|
|
nodePackages.prettier
|
|
|
|
goreleaser
|
|
|
|
nfpm
|
|
|
|
gotestsum
|
|
|
|
gotests
|
2024-07-17 13:12:02 +02:00
|
|
|
gofumpt
|
2023-06-22 10:01:17 +02:00
|
|
|
ksh
|
2024-02-12 14:53:07 +01:00
|
|
|
ko
|
2024-03-02 22:36:38 +01:00
|
|
|
yq-go
|
|
|
|
ripgrep
|
2024-11-23 11:19:52 +01:00
|
|
|
postgresql
|
2023-05-26 12:26:34 +02:00
|
|
|
|
|
|
|
# 'dot' is needed for pprof graphs
|
|
|
|
# go tool pprof -http=: <source>
|
|
|
|
graphviz
|
|
|
|
|
|
|
|
# Protobuf dependencies
|
|
|
|
protobuf
|
|
|
|
protoc-gen-go
|
|
|
|
protoc-gen-go-grpc
|
|
|
|
protoc-gen-grpc-gateway
|
|
|
|
buf
|
|
|
|
clang-tools # clang-format
|
2024-12-10 16:23:55 +01:00
|
|
|
protobuf-language-server
|
2023-05-26 12:26:34 +02:00
|
|
|
];
|
|
|
|
|
|
|
|
# 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 {
|
2024-02-12 09:11:33 +01:00
|
|
|
buildInputs =
|
|
|
|
devDeps
|
|
|
|
++ [
|
|
|
|
(pkgs.writeShellScriptBin
|
|
|
|
"nix-vendor-sri"
|
|
|
|
''
|
|
|
|
set -eu
|
|
|
|
|
|
|
|
OUT=$(mktemp -d -t nar-hash-XXXXXX)
|
|
|
|
rm -rf "$OUT"
|
|
|
|
|
|
|
|
go mod vendor -o "$OUT"
|
|
|
|
go run tailscale.com/cmd/nardump --sri "$OUT"
|
|
|
|
rm -rf "$OUT"
|
|
|
|
'')
|
|
|
|
|
|
|
|
(pkgs.writeShellScriptBin
|
|
|
|
"go-mod-update-all"
|
|
|
|
''
|
|
|
|
cat go.mod | ${pkgs.silver-searcher}/bin/ag "\t" | ${pkgs.silver-searcher}/bin/ag -v indirect | ${pkgs.gawk}/bin/awk '{print $1}' | ${pkgs.findutils}/bin/xargs go get -u
|
|
|
|
go mod tidy
|
|
|
|
'')
|
|
|
|
];
|
2023-05-26 12:26:34 +02:00
|
|
|
|
|
|
|
shellHook = ''
|
|
|
|
export PATH="$PWD/result/bin:$PATH"
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
# `nix build`
|
|
|
|
packages = with pkgs; {
|
|
|
|
inherit headscale;
|
|
|
|
inherit headscale-docker;
|
|
|
|
};
|
|
|
|
defaultPackage = pkgs.headscale;
|
|
|
|
|
|
|
|
# `nix run`
|
|
|
|
apps.headscale = flake-utils.lib.mkApp {
|
|
|
|
drv = packages.headscale;
|
|
|
|
};
|
|
|
|
apps.default = 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 ${./.}
|
2024-12-10 16:23:55 +01:00
|
|
|
${pkgs.clang-tools}/bin/clang-format -i ${./.}
|
2022-09-26 10:48:59 +02:00
|
|
|
'';
|
2023-05-26 12:26:34 +02:00
|
|
|
};
|
|
|
|
});
|
2022-03-07 17:51:38 +01:00
|
|
|
}
|