From 3c8c769410a3df8c309ce0e24fc818806f691ff3 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Wed, 10 Jun 2026 16:21:27 +0900 Subject: [PATCH] nix: add zoekt packages/modules Signed-off-by: Seongmin Lee --- flake.nix | 33 ++++++++- nix/modules/zoekt-tnglserver.nix | 109 ++++++++++++++++++++++++++++ nix/pkgs/zoekt-tngl-indexserver.nix | 18 +++++ nix/pkgs/zoekt-webserver.nix | 29 ++++++++ 4 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 nix/modules/zoekt-tnglserver.nix create mode 100644 nix/pkgs/zoekt-tngl-indexserver.nix create mode 100644 nix/pkgs/zoekt-webserver.nix diff --git a/flake.nix b/flake.nix index 8392d30a..e68c48a0 100644 --- a/flake.nix +++ b/flake.nix @@ -153,10 +153,29 @@ tap = self.callPackage ./nix/pkgs/tap.nix {}; knotmirror = self.callPackage ./nix/pkgs/knotmirror.nix {}; bobbin = self.callPackage ./nix/pkgs/bobbin.nix {}; + zoekt-webserver = self.callPackage ./nix/pkgs/zoekt-webserver.nix {}; + zoekt-tngl-indexserver = self.callPackage ./nix/pkgs/zoekt-tngl-indexserver.nix {}; }); in { overlays.default = final: prev: { - inherit (mkPackageSet final) lexgen goat sqlite-lib spindle shuttle knot-unwrapped knot appview docs dolly tap knotmirror bobbin; + inherit + (mkPackageSet final) + lexgen + goat + sqlite-lib + spindle + shuttle + knot-unwrapped + knot + appview + docs + dolly + tap + knotmirror + bobbin + zoekt-webserver + zoekt-tngl-indexserver + ; }; packages = forAllSystems (system: let @@ -184,6 +203,8 @@ tap knotmirror bobbin + zoekt-webserver + zoekt-tngl-indexserver ; pkgsStatic-appview = staticPackages.appview; @@ -510,6 +531,16 @@ services.tangled.knotmirror.tap-package = lib.mkDefault self.packages.${pkgs.stdenv.hostPlatform.system}.tap; services.tangled.knotmirror.package = lib.mkDefault self.packages.${pkgs.stdenv.hostPlatform.system}.knotmirror; }; + nixosModules.zoekt-tnglserver = { + lib, + pkgs, + ... + }: { + imports = [./nix/modules/zoekt-tnglserver.nix]; + + services.tangled.zoekt.package = lib.mkDefault self.packages.${pkgs.stdenv.hostPlatform.system}.zoekt-tngl-indexserver; + services.tangled.zoekt.zoekt-webserver-package = lib.mkDefault self.packages.${pkgs.stdenv.hostPlatform.system}.zoekt-webserver; + }; nixosModules.knot = { lib, pkgs, diff --git a/nix/modules/zoekt-tnglserver.nix b/nix/modules/zoekt-tnglserver.nix new file mode 100644 index 00000000..d0ce1960 --- /dev/null +++ b/nix/modules/zoekt-tnglserver.nix @@ -0,0 +1,109 @@ +{ + config, + pkgs, + lib, + ... +}: let + cfg = config.services.tangled.zoekt; +in + with lib; { + options.services.tangled.zoekt = { + enable = mkOption { + type = types.bool; + default = false; + description = "Enable a tangled zoekt node"; + }; + + package = mkOption { + type = types.package; + description = "zoekt-tngl-indexserver package to use for zoekt node"; + }; + + zoekt-webserver-package = mkOption { + type = types.package; + description = "zoekt-webserver package to use for zoekt node"; + }; + + listenAddr = mkOption { + type = types.str; + default = ":6060"; + description = "zoekt-tngl-indexserver listen address"; + }; + + webListenAddr = mkOption { + type = types.str; + default = ":6070"; + description = "zoekt-webserver listen address"; + }; + + atpPlcUrl = mkOption { + type = types.str; + default = "https://plc.directory"; + description = "atproto PLC directory"; + }; + + appviewUrl = mkOption { + type = types.str; + default = "https://tangled.org"; + description = "Tangled appview URL"; + }; + + indexDir = mkOption { + type = types.path; + default = "/var/lib/zoekt-tnglserver/index"; + description = "zoekt index directory"; + }; + + indexConcurrency = mkOption { + type = types.int; + default = 4; + description = "Maximum number of concurrent index jobs to run"; + }; + + indexQueueSize = mkOption { + type = types.int; + default = 100; + description = "Maximum number of index jobs queue up"; + }; + }; + config = mkIf cfg.enable { + # environment.systemPackages = [ + # pkgs.git + # cfg.package + # ]; + + systemd.services.zoekt-webserver = { + description = "tangled zoekt-webserver"; + after = ["network.target"]; + wantedBy = ["multi-user.target"]; + serviceConfig = { + LogsDirectory = "zoekt-webserver"; + StateDirectory = "zoekt-webserver"; + ExecStart = "${getExe cfg.zoekt-webserver-package} -index ${cfg.indexDir} -rpc"; + }; + }; + + systemd.services.zoekt-tngl-indexserver = { + description = "tangled zoekt index server service"; + after = ["network.target"]; + wantedBy = ["multi-user.target"]; + path = [ + pkgs.git + cfg.package + ]; + serviceConfig = { + LogsDirectory = "zoekt-tngl-indexserver"; + StateDirectory = "zoekt-tngl-indexserver"; + Environment = [ + "TANGLED_ZOEKT_INDEX_DIR=${cfg.indexDir}" + "TANGLED_ZOEKT_INDEX_CONCURRENCY=${toString cfg.indexConcurrency}" + "TANGLED_ZOEKT_INDEX_QUEUE_SIZE=${toString cfg.indexQueueSize}" + "TANGLED_ZOEKT_PLC_URL=${cfg.atpPlcUrl}" + "TANGLED_ZOEKT_APPVIEW_URL=${cfg.appviewUrl}" + ]; + ExecStart = "${getExe cfg.package} serve"; + Restart = "always"; + }; + }; + }; + } diff --git a/nix/pkgs/zoekt-tngl-indexserver.nix b/nix/pkgs/zoekt-tngl-indexserver.nix new file mode 100644 index 00000000..3181dc07 --- /dev/null +++ b/nix/pkgs/zoekt-tngl-indexserver.nix @@ -0,0 +1,18 @@ +{ + buildGoApplication, + modules, + src, +}: +buildGoApplication { + pname = "zoekt-tngl-indexserver"; + version = "0.1.0"; + inherit src modules; + + doCheck = false; + + subPackages = ["cmd/zoekt-tngl-indexserver"]; + + meta = { + mainProgram = "zoekt-tngl-indexserver"; + }; +} diff --git a/nix/pkgs/zoekt-webserver.nix b/nix/pkgs/zoekt-webserver.nix new file mode 100644 index 00000000..6d0fce46 --- /dev/null +++ b/nix/pkgs/zoekt-webserver.nix @@ -0,0 +1,29 @@ +{ + lib, + buildGoModule, + fetchFromGitHub, +}: +buildGoModule { + pname = "zoekt-webserver"; + version = "0-unstable-2026-03-25"; + + src = fetchFromGitHub { + owner = "sourcegraph"; + repo = "zoekt"; + rev = "a0f5789d25cb80a36bfb0b85cde2f004880bcbeb"; + hash = "sha256-y1BskdsrPrIRDFj9n7H6Dl17tS+4epwvShMe/i1I7KA="; + }; + subPackages = ["cmd/zoekt-webserver"]; + + vendorHash = "sha256-WaO8/33pPmGh6tO/poD5epBknZjyzydG9dRuD67dYEw="; + + doCheck = false; + + meta = { + description = "Fast trigram based code search"; + homepage = "https://github.com/sourcegraph/zoekt"; + license = lib.licenses.asl20; + maintainers = []; + mainProgram = "zoekt-webserver"; + }; +} -- 2.51.2