diff --git a/flake.lock b/flake.lock index f8553b7..3508f53 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,17 @@ { "nodes": { + "claude-params": { + "flake": false, + "locked": { + "narHash": "sha256-d6xi4mKdjkX2JFicDIv5niSzpyI0m/Hnm8GGAIU04kY=", + "type": "file", + "url": "file:///dev/null" + }, + "original": { + "type": "file", + "url": "file:///dev/null" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -36,6 +48,7 @@ }, "root": { "inputs": { + "claude-params": "claude-params", "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" } diff --git a/flake.nix b/flake.nix index d1697eb..bc88e23 100644 --- a/flake.nix +++ b/flake.nix @@ -4,12 +4,20 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; + + # Claude parameters file - JSON with hash, version, and url + # Override with: inputs.claude-desktop.inputs.claude-params.url = "file+file:///path/to/params.json"; + claude-params = { + url = "file+file:///dev/null"; + flake = false; + }; }; outputs = { self, nixpkgs, flake-utils, + claude-params, }: flake-utils.lib.eachSystem ["x86_64-linux" "aarch64-linux"] (system: let pkgs = import nixpkgs { @@ -19,9 +27,12 @@ in { packages = rec { patchy-cnb = pkgs.callPackage ./pkgs/patchy-cnb.nix {}; - claude-desktop = pkgs.callPackage ./pkgs/claude-desktop.nix { + claude-desktop = let + paramsContent = builtins.readFile claude-params; + params = if paramsContent == "" then {} else builtins.fromJSON paramsContent; + in pkgs.callPackage ./pkgs/claude-desktop.nix ({ inherit patchy-cnb; - }; + } // params); claude-desktop-with-fhs = pkgs.buildFHSEnv { name = "claude-desktop"; targetPkgs = pkgs: diff --git a/pkgs/claude-desktop.nix b/pkgs/claude-desktop.nix index 661f78b..1665085 100644 --- a/pkgs/claude-desktop.nix +++ b/pkgs/claude-desktop.nix @@ -10,14 +10,19 @@ makeDesktopItem, makeWrapper, patchy-cnb, - perl + perl, + # Allow overriding Claude executable parameters + claudeHash ? "sha256-U7jpTk8pU7SUHKxTomQ3BLjspUsNU2r8fEWktaviYj4=", + claudeVersion ? "0.13.37", + claudeUrl ? "https://storage.googleapis.com/osprey-downloads-c02f6a0d-347c-492b-a752-3e0651722e97/nest-win-x64/Claude-Setup-x64.exe" }: let pname = "claude-desktop"; version = "0.13.37"; srcExe = fetchurl { - # NOTE: `?v=0.10.0` doesn't actually request a specific version. It's only being used here as a cache buster. - url = "https://storage.googleapis.com/osprey-downloads-c02f6a0d-347c-492b-a752-3e0651722e97/nest-win-x64/Claude-Setup-x64.exe?v=${version}"; - hash = "sha256-U7jpTk8pU7SUHKxTomQ3BLjspUsNU2r8fEWktaviYj4="; + # Use the provided URL and version, or defaults + url = "${claudeUrl}?v=${version}"; + # Hash can be overridden via flake input + hash = claudeHash; }; in stdenvNoCC.mkDerivation rec {