summary refs log tree commit diff
path: root/pkgs/bluesky/pdsadmin
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2024-12-04 04:31:55 +0100
committerMel <einebeere@gmail.com>2024-12-04 04:31:55 +0100
commitc5364de431203671106fd7e66a27a4c1e932c1f3 (patch)
treee425cb12a307582a440611513c63635a2541a5b8 /pkgs/bluesky/pdsadmin
parentfa964a8d1ab2dc83386f457b51b2de87b68cbe70 (diff)
downloadnetwork-c5364de431203671106fd7e66a27a4c1e932c1f3.tar.zst
network-c5364de431203671106fd7e66a27a4c1e932c1f3.zip
Host bare-bones Bluesky PDS service
Signed-off-by: Mel <einebeere@gmail.com>
Diffstat (limited to 'pkgs/bluesky/pdsadmin')
-rw-r--r--pkgs/bluesky/pdsadmin/package.nix63
-rw-r--r--pkgs/bluesky/pdsadmin/pdsadmin-offline.patch24
2 files changed, 87 insertions, 0 deletions
diff --git a/pkgs/bluesky/pdsadmin/package.nix b/pkgs/bluesky/pdsadmin/package.nix
new file mode 100644
index 0000000..ba204f4
--- /dev/null
+++ b/pkgs/bluesky/pdsadmin/package.nix
@@ -0,0 +1,63 @@
+# See: https://github.com/NixOS/nixpkgs/pull/350645
+{
+  stdenvNoCC,
+  fetchFromGitHub,
+  bash,
+  pds,
+  makeWrapper,
+  jq,
+  curl,
+  openssl,
+  lib,
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "pdsadmin";
+  inherit (pds) version src;
+
+  patches = [ ./pdsadmin-offline.patch ];
+
+  nativeBuildInputs = [
+    bash
+    makeWrapper
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    patchShebangs . pdsadmin
+    substituteInPlace pdsadmin.sh \
+      --replace-fail NIXPKGS_PDSADMIN_ROOT $out
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/lib/pds
+    install -Dm755 pdsadmin.sh $out/lib/pds
+    install -Dm755 pdsadmin/*.sh $out/lib/pds
+    makeWrapper "$out/lib/pds/pdsadmin.sh" "$out/bin/pdsadmin" \
+      --prefix PATH : "${
+        lib.makeBinPath [
+          jq
+          curl
+          openssl
+        ]
+      }"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Admin scripts for Bluesky Personal Data Server (PDS)";
+    homepage = "https://github.com/bluesky-social/pds";
+    license = with lib.licenses; [
+      mit
+      asl20
+    ];
+    platforms = lib.platforms.unix;
+    mainProgram = "pdsadmin";
+  };
+})
diff --git a/pkgs/bluesky/pdsadmin/pdsadmin-offline.patch b/pkgs/bluesky/pdsadmin/pdsadmin-offline.patch
new file mode 100644
index 0000000..0b3fbee
--- /dev/null
+++ b/pkgs/bluesky/pdsadmin/pdsadmin-offline.patch
@@ -0,0 +1,24 @@
+diff --git a/pdsadmin.sh b/pdsadmin.sh
+index 913d2b4..b09c20c 100644
+--- a/pdsadmin.sh
++++ b/pdsadmin.sh
+@@ -15,16 +15,11 @@ if [[ "${EUID}" -ne 0 ]]; then
+   exit 1
+ fi
+ 
+-# Download the script, if it exists.
+-SCRIPT_URL="${PDSADMIN_BASE_URL}/${COMMAND}.sh"
+-SCRIPT_FILE="$(mktemp /tmp/pdsadmin.${COMMAND}.XXXXXX)"
++SCRIPT_FILE="NIXPKGS_PDSADMIN_ROOT/lib/pds/${COMMAND}.sh"
+ 
+-if ! curl --fail --silent --show-error --location --output "${SCRIPT_FILE}" "${SCRIPT_URL}"; then
++if ! [ -f "${SCRIPT_FILE}" ]; then
+   echo "ERROR: ${COMMAND} not found"
+   exit 2
+ fi
+ 
+-chmod +x "${SCRIPT_FILE}"
+-if "${SCRIPT_FILE}" "$@"; then
+-  rm --force "${SCRIPT_FILE}"
+-fi
++"${SCRIPT_FILE}" "$@"