1{
2 config,
3 lib,
4 self,
5 ...
6}: let
7 name = "karakeep";
8 cfg = config.myNixOS.services.${name};
9
10 network = config.mySnippets.tailnet;
11 service = network.networkMap.${name};
12in {
13 options.myNixOS.services.${name} = {
14 enable = lib.mkEnableOption "${name} server";
15 autoProxy = lib.mkOption {
16 default = true;
17 example = false;
18 description = "${name} auto proxy";
19 type = lib.types.bool;
20 };
21 };
22
23 config = lib.mkIf cfg.enable {
24 age.secrets.gemini.file = "${self.inputs.secrets}/gemini.age";
25
26 services = {
27 caddy.virtualHosts."${service.vHost}".extraConfig = lib.mkIf cfg.autoProxy ''
28 bind tailscale/${name}
29 encode zstd gzip
30 reverse_proxy ${service.hostName}:${toString service.port}
31 '';
32
33 karakeep = {
34 enable = true;
35
36 extraEnvironment = rec {
37 DISABLE_NEW_RELEASE_CHECK = "true";
38 DISABLE_SIGNUPS = "true";
39 OPENAI_BASE_URL = "https://generativelanguage.googleapis.com/v1beta/openai/";
40 INFERENCE_TEXT_MODEL = "gemini-2.5-flash";
41 INFERENCE_IMAGE_MODEL = INFERENCE_TEXT_MODEL;
42 EMBEDDING_TEXT_MODEL = INFERENCE_TEXT_MODEL;
43 INFERENCE_CONTEXT_LENGTH = "600000";
44 INFERENCE_LANG = "english";
45 INFERENCE_NUM_WORKERS = "2";
46 NEXTAUTH_URL = "https://${service.vHost}";
47 PORT = "7020";
48 };
49 environmentFile = config.age.secrets.gemini.path;
50 };
51 };
52 };
53}