From aea392119fe29da6ef2932cf0d581eab5addb37d Mon Sep 17 00:00:00 2001 From: xenia Date: Thu, 11 Sep 2025 18:05:35 -0400 Subject: [PATCH] add dragnpkgs version of programs.ghidra --- README.md | 6 ++++ module.nix | 3 +- modules/ghidra-client/default.nix | 52 +++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 modules/ghidra-client/default.nix diff --git a/README.md b/README.md index 35b2d74..ca926ff 100644 --- a/README.md +++ b/README.md @@ -317,6 +317,12 @@ option is passed to systemd `StateDirectory=` the service user and group +### [`programs.ghidra`](./modules/ghidra-client/default.nix) + +like upstream, but patches an issue with loading python packages in the ghidra debug feature + +this will probably get removed once upstream fixes the issue + ### [`environment.machineInfo`](./modules/machine-info/default.nix) provides options to customize the `/etc/machine-info` file on a NixOS system. See the module itself diff --git a/module.nix b/module.nix index e35f3d9..e39085a 100644 --- a/module.nix +++ b/module.nix @@ -1,9 +1,10 @@ { ... }: { imports = [ + ./modules/ghidra-client ./modules/ghidra-server ./modules/machine-info - ./modules/satisfactory-dedicated-server ./modules/regdom + ./modules/satisfactory-dedicated-server ]; # set some nix settings defaults diff --git a/modules/ghidra-client/default.nix b/modules/ghidra-client/default.nix new file mode 100644 index 0000000..15b8d53 --- /dev/null +++ b/modules/ghidra-client/default.nix @@ -0,0 +1,52 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.programs.ghidra; + package = cfg.package; + isSplit = lib.any (x: x == "lib") package.outputs; + libOutput = if isSplit then package.lib else package; +in +{ + disabledModules = [ "programs/ghidra.nix" ]; + + options.programs.ghidra = { + enable = lib.mkEnableOption "Ghidra, a software reverse engineering (SRE) suite of tools"; + + gdb = lib.mkOption { + default = true; + type = lib.types.bool; + description = '' + Whether to add to gdbinit the python modules required to make Ghidra's debugger work. + ''; + }; + + package = lib.mkPackageOption pkgs "ghidra" { example = "ghidra_headless"; }; + }; + + config = lib.mkIf cfg.enable { + environment = { + systemPackages = [ package ]; + + etc = lib.mkIf cfg.gdb { + "gdb/gdbinit.d/ghidra-modules.gdb".text = with pkgs.python3.pkgs; '' + python + import sys + [sys.path.append(p) for p in "${ + (makePythonPath [ + psutil + protobuf + ]) + }".split(":")] + sys.path.append("${libOutput}/lib/ghidra/Ghidra/Debug/Debugger-agent-gdb/pypkg/src") + sys.path.append("${libOutput}/lib/ghidra/Ghidra/Debug/Debugger-rmi-trace/pypkg/src") + end + ''; + }; + }; + }; +}