about summary refs log tree commit diff
path: root/pkgs/by-name/re/rewind-ai/package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/re/rewind-ai/package.nix')
-rw-r--r--pkgs/by-name/re/rewind-ai/package.nix82
1 files changed, 82 insertions, 0 deletions
diff --git a/pkgs/by-name/re/rewind-ai/package.nix b/pkgs/by-name/re/rewind-ai/package.nix
new file mode 100644
index 0000000000000..cfd1db4846715
--- /dev/null
+++ b/pkgs/by-name/re/rewind-ai/package.nix
@@ -0,0 +1,82 @@
+{
+  lib,
+  stdenvNoCC,
+  fetchzip,
+  writeShellApplication,
+  curl,
+  gawk,
+  xmlstarlet,
+  common-updater-scripts,
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "rewind-ai";
+  # Example version with explanation
+  # 1.5284 (Base version)
+  # 15284.1 (build number)
+  # dcd0176 (commit hash)
+  # 20240504 (pub date)
+  version = "1.5284-15284.1-dcd0176-20240504";
+
+  src = fetchzip {
+    url =
+      let
+        buildNumber = lib.elemAt (lib.splitString "-" finalAttrs.version) 1;
+        commitHash = lib.elemAt (lib.splitString "-" finalAttrs.version) 2;
+      in
+      "https://updates.rewind.ai/builds/main/b${buildNumber}-main-${commitHash}.zip";
+    hash = "sha256-Y7iAYHH/msZoXFzAZHJb6YoDz5fwMPHJx1kg7TqP5Gw=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/Applications/Rewind.app"
+    cp -R . "$out/Applications/Rewind.app"
+
+    runHook postInstall
+  '';
+
+  # Example response to use when modifing the script: https://pastebin.com/raw/90qU3n6H
+  # There is a real harsh limit on update checks, so DO NOT send any unnecessary update checks
+  # Wait at least 3 days since the last pub_date (you will find the date at the end of the version number)
+  # Example: 20240504 would be 2024/05/04, and that would mean that we want to check no earlier than on 2024/05/07 for any updates
+  passthru.updateScript = lib.getExe (writeShellApplication {
+    name = "${finalAttrs.pname}-update-script";
+    runtimeInputs = [
+      curl
+      gawk
+      xmlstarlet
+      common-updater-scripts
+    ];
+    text = ''
+      xml_get () {
+        echo "$update_xml" | xmlstarlet sel -t -v "$1"
+      }
+
+      update_url="https://updates.rewind.ai/appcasts/main.xml"
+
+      update_xml=$(curl -s "$update_url")
+
+      version_base=$(xml_get "/rss/channel/item/sparkle:shortVersionString")
+      url=$(xml_get "/rss/channel/item/enclosure/@url")
+      pub_date=$(xml_get "/rss/channel/item/pubDate")
+      commit_id=$(echo "$url" | awk -F '-|\\.' '{ print $(NF - 1) }')
+      build_number=$(xml_get "/rss/channel/item/sparkle:version")
+      formatted_pub_date=$(date -d "$pub_date" +"%Y%m%d")
+
+      full_version="''${version_base}-''${build_number}-''${commit_id}-''${formatted_pub_date}"
+      update-source-version "rewind-ai" "$full_version" --version-key=version --file=./pkgs/by-name/re/rewind-ai/package.nix --print-changes
+    '';
+  });
+
+  meta = {
+    changelog = "https://www.rewind.ai/changelog";
+    description = "Rewind is a personalized AI powered by everything you've seen, said, or heard";
+    homepage = "https://www.rewind.ai/";
+    license = lib.licenses.unfree;
+    maintainers = with lib.maintainers; [ donteatoreo ];
+    platforms = [ "aarch64-darwin" ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+})