1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
{
lib,
buildGo124Module,
fetchFromGitHub,
go-swag,
versionCheckHook,
dbip-country-lite,
formats,
nix-update-script,
nezha-theme-admin,
nezha-theme-user,
withThemes ? [ ],
}:
let
pname = "nezha";
version = "1.10.4";
frontendName = lib.removePrefix "nezha-theme-";
frontend-templates =
let
mkTemplate = theme: {
path = "${frontendName theme.pname}-dist";
name = frontendName theme.pname;
repository = theme.meta.homepage;
author = theme.src.owner;
version = theme.version;
isofficial = false;
isadmin = false;
};
in
(formats.yaml { }).generate "frontend-templates.yaml" (
[
(
mkTemplate nezha-theme-admin
// {
name = "OfficialAdmin";
isadmin = true;
isofficial = true;
}
)
(
mkTemplate nezha-theme-user
// {
name = "Official";
isofficial = true;
}
)
]
++ map mkTemplate withThemes
);
in
buildGo124Module {
inherit pname version;
src = fetchFromGitHub {
owner = "nezhahq";
repo = "nezha";
tag = "v${version}";
hash = "sha256-9dw1MT3v7ZCpC/MrlZDJmZ9EdTNVIbE0b45ao3eXO7o=";
};
proxyVendor = true;
prePatch =
''
rm -rf cmd/dashboard/*-dist
cp ${frontend-templates} service/singleton/frontend-templates.yaml
''
+ lib.concatStringsSep "\n" (
map (theme: "cp -r ${theme} cmd/dashboard/${frontendName theme.pname}-dist") (
[
nezha-theme-admin
nezha-theme-user
]
++ withThemes
)
);
patches = [
# Nezha originally used ipinfo.mmdb to provide geoip query feature.
# Unfortunately, ipinfo.mmdb must be downloaded with token.
# Therefore, we patch the nezha to use dbip-country-lite.mmdb in nixpkgs.
./dbip.patch
];
postPatch = ''
cp ${dbip-country-lite.mmdb} pkg/geoip/geoip.db
'';
nativeBuildInputs = [ go-swag ];
# Generate code for Swagger documentation endpoints (see cmd/dashboard/docs).
preBuild = ''
GOROOT=''${GOROOT-$(go env GOROOT)} swag init --pd -d . -g ./cmd/dashboard/main.go -o ./cmd/dashboard/docs --parseGoList=false
'';
vendorHash = "sha256-ftVcbO1QYIEYUwPqxAHE/7TNBwzgN5BNyu5+rTnOgIs=";
ldflags = [
"-s"
"-X github.com/nezhahq/nezha/service/singleton.Version=${version}"
];
checkFlags = "-skip=^TestSplitDomainSOA$";
postInstall = ''
mv $out/bin/dashboard $out/bin/nezha
'';
nativeInstallCheckInputs = [ versionCheckHook ];
versionCheckProgramArg = [ "-v" ];
doInstallCheck = true;
passthru = {
updateScript = nix-update-script { };
};
meta = {
description = "Self-hosted, lightweight server and website monitoring and O&M tool";
homepage = "https://github.com/nezhahq/nezha";
changelog = "https://github.com/nezhahq/nezha/releases/tag/v${version}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ moraxyc ];
mainProgram = "nezha";
};
}
|