diff --git a/flake.nix b/flake.nix index 766c3fc..a0412bd 100644 --- a/flake.nix +++ b/flake.nix @@ -22,12 +22,12 @@ }; - outputs = { self, nixpkgs, home-manager, darwin, ...}@inputs: + outputs = { self, nixpkgs, home-manager, darwin, ...}@inputs: let inherit (self) outputs; system = builtins.currentSystem; isDarwin = nixpkgs.legacyPackages.${system}.stdenv.isDarwin; - + pkgs = import nixpkgs { inherit system; overlays = [ @@ -36,11 +36,11 @@ }; # Helper function to create home configurations with profiles - mkHomeConfig = { username, homeDirectory, gitEmail, profile ? "full" }: + mkHomeConfig = { username, homeDirectory, gitEmail, profile ? "full" }: home-manager.lib.homeManagerConfiguration { inherit pkgs; extraSpecialArgs = {inherit inputs outputs username homeDirectory gitEmail profile;}; - modules = [ + modules = [ ./home/users/crdant/home.nix ]; }; diff --git a/home/modules/ai/default.nix b/home/modules/ai/default.nix index 0ac8524..68976e5 100644 --- a/home/modules/ai/default.nix +++ b/home/modules/ai/default.nix @@ -5,12 +5,13 @@ let isLinux = pkgs.stdenv.isLinux; in { # AI and coding assistant tools - home = { + home = { packages = with pkgs; [ aider-chat-full amp-cli nur.repos.charmbracelet.crush claude-code + claude-memory-extractor unstable.fabric-ai gemini-cli goose-cli diff --git a/pkgs/claude-memory-extractor/default.nix b/pkgs/claude-memory-extractor/default.nix new file mode 100644 index 0000000..d3cd2ad --- /dev/null +++ b/pkgs/claude-memory-extractor/default.nix @@ -0,0 +1,56 @@ +{ lib, stdenv, fetchFromGitHub, nodejs, makeWrapper }: + +stdenv.mkDerivation rec { + pname = "claude-memory-extractor"; + version = "unstable-2025-01-20"; + + src = fetchFromGitHub { + owner = "obra"; + repo = "claude-memory-extractor"; + rev = "384e0302088639cf9a3d40d92cf57e44e25f9044"; + hash = "sha256-lvYit/IZwbHhxU3/jlzHL1AMkJ46BGpoYRnSuovDNhs="; + }; + + nativeBuildInputs = [ nodejs makeWrapper ]; + + # Disable sandbox to allow npm install from registry + # This is a temporary workaround for npm package builds + __noChroot = true; + + buildPhase = '' + runHook preBuild + + export HOME=$TMPDIR + npm install --legacy-peer-deps + npm run build + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/lib/node_modules/claude-memory + cp -r . $out/lib/node_modules/claude-memory + + mkdir -p $out/bin + makeWrapper ${nodejs}/bin/node $out/bin/claude-memory \ + --add-flags "$out/lib/node_modules/claude-memory/dist/cli.js" + + runHook postInstall + ''; + + meta = with lib; { + description = "Multi-dimensional memory extraction system for Claude Code conversation logs"; + longDescription = '' + A tool that processes Claude Code conversation logs to extract transferable lessons + using multi-dimensional analysis including root cause analysis, psychological driver + identification, and prevention strategies. + ''; + homepage = "https://github.com/obra/claude-memory-extractor"; + license = licenses.mit; + maintainers = []; + mainProgram = "claude-memory"; + platforms = platforms.unix; + }; +} diff --git a/pkgs/default.nix b/pkgs/default.nix index 2c5cdb7..b2a2c98 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,8 +1,9 @@ # Custom packages, that can be defined similarly to ones from nixpkgs # You can build them using 'nix build .#example' -{ pkgs ? import {} } : +{ pkgs ? import {} } : rec { + claude-memory-extractor = pkgs.callPackage ./claude-memory-extractor { }; mbta-mcp-server = pkgs.callPackage ./mbta-mcp-server { }; tunnelmanager = pkgs.callPackage ./tunnelmanager { };