aboutsummaryrefslogtreecommitdiff
path: root/modules/pkgs/ida-pro.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/pkgs/ida-pro.nix')
-rw-r--r--modules/pkgs/ida-pro.nix198
1 files changed, 198 insertions, 0 deletions
diff --git a/modules/pkgs/ida-pro.nix b/modules/pkgs/ida-pro.nix
new file mode 100644
index 0000000..0a680d2
--- /dev/null
+++ b/modules/pkgs/ida-pro.nix
@@ -0,0 +1,198 @@
+{ ... }:
+{
+ flake.overlays.ida-pro = final: prev: {
+ ida-pro = final.callPackage (
+ {
+ autoPatchelfHook,
+ cairo,
+ copyDesktopItems,
+ curl,
+ dbus,
+ fontconfig,
+ freetype,
+ glib,
+ gtk3,
+ lib,
+ libGL,
+ libdrm,
+ libice,
+ libkrb5,
+ libsecret,
+ libsm,
+ libunwind,
+ libx11,
+ libxau,
+ libxcb,
+ libxcrypt-legacy,
+ libxext,
+ libxi,
+ libxkbcommon,
+ libxrender,
+ libxcb-image,
+ libxcb-keysyms,
+ libxcb-render-util,
+ libxcb-wm,
+ makeDesktopItem,
+ makeWrapper,
+ openssl,
+ patchelf,
+ perl,
+ python313,
+ qt6,
+ requireFile,
+ stdenv,
+ zlib,
+ }:
+ let
+ pythonForIDA = python313.withPackages (ps: with ps; [ rpyc ]);
+
+ src = requireFile {
+ name = "ida-pro_93_x64linux.run";
+ url = "https://my.hex-rays.com/";
+ sha256 = "a64e6589feeca0f4e1bfb962d1a283761fb38c5158f5f82c8f1e7ddf32f69850";
+ };
+
+ libida = requireFile {
+ name = "libida.so";
+ url = "https://my.hex-rays.com/";
+ sha256 = "86cff5a0dbf26eb56076313181e9ca8e7db48212d60d00588217cfac36060531";
+ };
+
+ libida32 = requireFile {
+ name = "libida32.so";
+ url = "https://my.hex-rays.com/";
+ sha256 = "55afb0edcec85139b99cb36c80d460ab7679c87e50bf4d5b111f7910935e69c2";
+ };
+
+ runtimeDependencies = [
+ cairo
+ dbus
+ fontconfig
+ freetype
+ glib
+ gtk3
+ libdrm
+ libGL
+ libkrb5
+ libsecret
+ qt6.qtbase
+ qt6.qtwayland
+ libunwind
+ libxkbcommon
+ openssl.out
+ stdenv.cc.cc
+ libice
+ libsm
+ libx11
+ libxau
+ libxcb
+ libxcrypt-legacy
+ libxext
+ libxi
+ libxrender
+ libxcb-image
+ libxcb-keysyms
+ libxcb-render-util
+ libxcb-wm
+ zlib
+ curl.out
+ pythonForIDA
+ ];
+ in
+ stdenv.mkDerivation rec {
+ pname = "ida-pro";
+ version = "9.3";
+
+ inherit src;
+
+ desktopItem = makeDesktopItem {
+ name = "ida-pro";
+ exec = "ida";
+ icon = "ida-pro";
+ comment = meta.description;
+ desktopName = "IDA Pro";
+ genericName = "Interactive Disassembler";
+ categories = [ "Development" ];
+ startupWMClass = "IDA";
+ };
+
+ desktopItems = [ desktopItem ];
+
+ nativeBuildInputs = [
+ makeWrapper
+ copyDesktopItems
+ autoPatchelfHook
+ qt6.wrapQtAppsHook
+ perl
+ patchelf
+ ];
+
+ buildInputs = runtimeDependencies;
+
+ dontUnpack = true;
+ dontWrapQtApps = true;
+
+ installPhase = ''
+ runHook preInstall
+
+ mkdir -p "$out/bin" "$out/lib" "$out/opt" "$out/share/pixmaps"
+
+ IDADIR="$out/opt"
+ HOME="$out/opt"
+
+ $(cat "$NIX_CC/nix-support/dynamic-linker") "$src" \
+ --mode unattended --debuglevel 4 --prefix "$IDADIR" || true
+
+ install -m 0644 "${libida}" "$IDADIR/libida.so"
+ install -m 0644 "${libida32}" "$IDADIR/libida32.so"
+
+ for libFile in "$IDADIR"/*.so "$IDADIR"/*.so.6; do
+ ln -s "$libFile" "$out/lib/$(basename "$libFile")"
+ done
+
+ patchelf --add-needed libpython3.13.so "$out/lib/libida.so"
+ patchelf --add-needed libcrypto.so "$out/lib/libida.so"
+ patchelf --add-needed libsecret-1.so.0 "$out/lib/libida.so"
+
+ addAutoPatchelfSearchPath "$IDADIR"
+
+ if [ -f "$IDADIR/appico.png" ]; then
+ ln -s "$IDADIR/appico.png" "$out/share/pixmaps/ida-pro.png"
+ fi
+
+ wrapProgram "$IDADIR/ida" \
+ --prefix IDADIR : "$IDADIR" \
+ --prefix QT_PLUGIN_PATH : "$IDADIR/plugins/platforms" \
+ --prefix PYTHONPATH : "$out/bin/idalib/python" \
+ --prefix PATH : "${pythonForIDA}/bin:$IDADIR" \
+ --prefix LD_LIBRARY_PATH : "$out/lib"
+
+ ln -s "$IDADIR/ida" "$out/bin/ida"
+
+ runHook postInstall
+ '';
+
+ meta = with lib; {
+ description = "IDA Pro";
+ homepage = "https://hex-rays.com/ida-pro/";
+ license = licenses.unfree;
+ mainProgram = "ida";
+ platforms = [ "x86_64-linux" ];
+ sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+ };
+ }
+ ) { };
+ };
+
+ flake.modules.nixos.ida-pro =
+ { pkgs, ... }:
+ {
+ environment.systemPackages = [ pkgs.ida-pro ];
+ };
+
+ flake.modules.homeManager.ida-pro =
+ { pkgs, ... }:
+ {
+ home.packages = [ pkgs.ida-pro ];
+ };
+}