diff options
Diffstat (limited to 'modules/pkgs/ida-pro.nix')
| -rw-r--r-- | modules/pkgs/ida-pro.nix | 198 |
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 ]; + }; +} |
