nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 fetchFromGitHub,
3 buildGoModule,
4 stdenvNoCC,
5 nix-update-script,
6 nodejs,
7 lib,
8 pnpm,
9 buf,
10 cacert,
11 grpc-gateway,
12 protoc-gen-go,
13 protoc-gen-go-grpc,
14 protoc-gen-validate,
15}:
16let
17 version = "0.25.0";
18 src = fetchFromGitHub {
19 owner = "usememos";
20 repo = "memos";
21 rev = "v${version}";
22 hash = "sha256-M1o7orU4xw/t9PjSFXNj7tiYTarBv7kIIj8X0r3QD8s=";
23 };
24
25 memos-protobuf-gen = stdenvNoCC.mkDerivation {
26 name = "memos-protobuf-gen";
27 inherit src;
28
29 nativeBuildInputs = [
30 buf
31 cacert
32 grpc-gateway
33 protoc-gen-go
34 protoc-gen-go-grpc
35 protoc-gen-validate
36 ];
37
38 buildPhase = ''
39 runHook preBuild
40 pushd proto
41 HOME=$TMPDIR buf generate
42 popd
43 runHook postBuild
44 '';
45 installPhase = ''
46 runHook preInstall
47 mkdir -p $out/{proto,web/src/types}
48 cp -r {.,$out}/proto/gen
49 cp -r {.,$out}/web/src/types/proto
50 runHook postInstall
51 '';
52
53 outputHashMode = "recursive";
54 outputHashAlgo = "sha256";
55 outputHash = "sha256-lV92s/KLzWs/KSLbsb61FaA9+PEDMLshl/srDcjdRcU=";
56 };
57
58 memos-web = stdenvNoCC.mkDerivation (finalAttrs: {
59 pname = "memos-web";
60 inherit version src;
61 pnpmDeps = pnpm.fetchDeps {
62 inherit (finalAttrs) pname version src;
63 sourceRoot = "${finalAttrs.src.name}/web";
64 fetcherVersion = 1;
65 hash = "sha256-TEWaFWFQ0sHdgfFFvolnwoa4hTaFkzqqyFep56Cevp4=";
66 };
67 pnpmRoot = "web";
68 nativeBuildInputs = [
69 nodejs
70 pnpm.configHook
71 ];
72 preBuild = ''
73 cp -r {${memos-protobuf-gen},.}/web/src/types/proto
74 '';
75 buildPhase = ''
76 runHook preBuild
77 pnpm -C web build
78 runHook postBuild
79 '';
80 installPhase = ''
81 runHook preInstall
82 cp -r web/dist $out
83 runHook postInstall
84 '';
85 });
86in
87buildGoModule {
88 pname = "memos";
89 inherit
90 version
91 src
92 memos-web
93 memos-protobuf-gen
94 ;
95
96 vendorHash = "sha256-xiBxnrjJsskRCcUBGKnrc5s5tuhMFSqRoELcr5ww/XU=";
97
98 preBuild = ''
99 rm -rf server/router/frontend/dist
100 cp -r ${memos-web} server/router/frontend/dist
101 cp -r {${memos-protobuf-gen},.}/proto/gen
102 '';
103
104 passthru.updateScript = nix-update-script {
105 extraArgs = [
106 "--subpackage"
107 "memos-web"
108 "--subpackage"
109 "memos-protobuf-gen"
110 ];
111 };
112
113 meta = {
114 homepage = "https://usememos.com";
115 description = "Lightweight, self-hosted memo hub";
116 changelog = "https://github.com/usememos/memos/releases/tag/${src.rev}";
117 maintainers = with lib.maintainers; [
118 indexyz
119 kuflierl
120 ];
121 license = lib.licenses.mit;
122 mainProgram = "memos";
123 };
124}