From 6a3f025e54d8fd007b97ea60ece540e27e8cebc2 Mon Sep 17 00:00:00 2001 From: GovanifY Date: Wed, 22 Jan 2025 14:13:48 +0100 Subject: [PATCH] nixos/ghidra: init --- .../manual/release-notes/rl-2505.section.md | 2 + nixos/modules/module-list.nix | 1 + nixos/modules/programs/ghidra.nix | 47 +++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 nixos/modules/programs/ghidra.nix diff --git a/nixos/doc/manual/release-notes/rl-2505.section.md b/nixos/doc/manual/release-notes/rl-2505.section.md index 994a4e95b4ab..b0c800a11edc 100644 --- a/nixos/doc/manual/release-notes/rl-2505.section.md +++ b/nixos/doc/manual/release-notes/rl-2505.section.md @@ -67,6 +67,8 @@ - [Homer](https://homer-demo.netlify.app/), a very simple static homepage for your server. Available as [services.homer](options.html#opt-services.homer). +- [Ghidra](https://ghidra-sre.org/), a software reverse engineering (SRE) suite of tools. Available as [programs.ghidra](options.html#opt-programs.ghidra). + - [Omnom](https://github.com/asciimoo/omnom), a webpage bookmarking and snapshotting service. Available as [services.omnom](options.html#opt-services.omnom.enable). - [Yggdrasil-Jumper](https://github.com/one-d-wide/yggdrasil-jumper) is an independent project that aims to transparently reduce latency of a connection over Yggdrasil network, utilizing NAT traversal to automatically bypass intermediary nodes. diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index a07a08dbdd7c..47de3efbdd4e 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -209,6 +209,7 @@ ./programs/gamescope.nix ./programs/gdk-pixbuf.nix ./programs/geary.nix + ./programs/ghidra.nix ./programs/git.nix ./programs/git-worktree-switcher.nix ./programs/gnome-disks.nix diff --git a/nixos/modules/programs/ghidra.nix b/nixos/modules/programs/ghidra.nix new file mode 100644 index 000000000000..a832a2161e76 --- /dev/null +++ b/nixos/modules/programs/ghidra.nix @@ -0,0 +1,47 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.programs.ghidra; +in +{ + 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-bin"; }; + }; + + config = lib.mkIf cfg.enable { + environment = { + systemPackages = [ cfg.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(":")] + end + ''; + }; + }; + }; + + meta.maintainers = with lib.maintainers; [ govanify ]; +}