Add editable pwndbg into the nix devshell (#2925)

* add editable pwndbg into the nix devshell

* remove repl-flakes, it is deprecated, see https://github.com/NixOS/nix/issues/10103

* formatting

* mipsel -> mips in devshell
pull/2928/head
William Tan 8 months ago committed by GitHub
parent 47107b0aad
commit deb8c43fa3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -25,6 +25,7 @@ let
isLLDB
;
isDev = true;
isEditable = true;
};
jemalloc-static = pkgs.jemalloc.overrideAttrs (
finalAttrs: previousAttrs: {
@ -51,7 +52,7 @@ let
in
{
default = pkgs.mkShell {
NIX_CONFIG = "extra-experimental-features = nix-command flakes repl-flake";
NIX_CONFIG = "extra-experimental-features = nix-command flakes";
# Anything not handled by the poetry env
nativeBuildInputs =
builtins.attrValues {
@ -82,22 +83,34 @@ in
'')
pkgs.pkgsCross.aarch64-multiplatform.buildPackages.binutils
pkgs.pkgsCross.riscv64.buildPackages.binutils
pkgs.pkgsCross.mipsel-linux-gnu.buildPackages.binutils
pkgs.pkgsCross.mips-linux-gnu.buildPackages.binutils
(pkgs.writeShellScriptBin "aarch64-linux-gnu-gcc" ''
exec ${lib.getBin pkgs.pkgsCross.aarch64-multiplatform.buildPackages.gcc}/bin/aarch64-unknown-linux-gnu-gcc "$@"
'')
(pkgs.writeShellScriptBin "riscv64-linux-gnu-gcc" ''
exec ${lib.getBin pkgs.pkgsCross.riscv64.buildPackages.gcc}/bin/riscv64-unknown-linux-gnu-gcc "$@"
'')
pyEnv
(pkgs.writeShellScriptBin "pwndbg" ''
exec ${lib.getBin pkgs.gdb}/bin/gdb --quiet --command="$REPO_ROOT/gdbinit.py" $@
'')
]
++ pkgs.lib.optionals isLLDB [
pkgs.lldb_19
pkgs.lldb_20
(pkgs.writeShellScriptBin "pwndbg-lldb" (
(lib.optionalString (!pkgs.stdenv.isDarwin) ''
export LLDB_DEBUGSERVER_PATH=${lib.makeBinPath [ pkgs.lldb_20 ]}/lldb-server
'')
+ ''
exec ${lib.getBin pyEnv}/bin/python3 $REPO_ROOT/pwndbg-lldb.py $@
''
))
];
shellHook = ''
export PWNDBG_VENV_PATH="PWNDBG_PLEASE_SKIP_VENV"
export PWNDBG_NO_AUTOUPDATE=1
export PWNDBG_VENV_PATH="${pyEnv}"
export ZIGPATH="${pkgs.lib.getBin pkgs.zig_0_13}/bin/"
export REPO_ROOT=$(git rev-parse --show-toplevel)
'';
};
}

@ -4,6 +4,7 @@
python3 ? pkgs.python3,
isDev ? false,
isLLDB ? false,
isEditable ? false,
...
}:
let
@ -15,6 +16,10 @@ let
sourcePreference = "sdist";
};
editableOverlay = workspace.mkEditablePyprojectOverlay {
root = "$REPO_ROOT";
};
pkgsNeedSetuptools = [
"capstone"
"unicorn"
@ -284,6 +289,30 @@ let
python = python3;
};
pythonSet = baseSet.overrideScope overlays;
editablePythonSet = pythonSet.overrideScope (
lib.composeManyExtensions [
inputs.pyproject-build-systems.overlays.default
editableOverlay
pyprojectOverrides1
pyprojectOverrides2
(final: prev: {
pythonPkgsBuildHost = prev.pythonPkgsBuildHost.overrideScope (
lib.composeManyExtensions [
inputs.pyproject-build-systems.overlays.default
]
);
})
(final: prev: {
pwndbg = prev.pwndbg.overrideAttrs (old: {
nativeBuildInputs =
old.nativeBuildInputs
++ final.resolveBuildSystem {
editables = [ ];
};
});
})
]
);
pyenv = pythonSet.mkVirtualEnv "pwndbg-env" {
pwndbg =
@ -298,5 +327,17 @@ let
# "lint"
];
};
pyenvEditable = editablePythonSet.mkVirtualEnv "pwndbg-editable-env" {
pwndbg =
[ ]
++ lib.optionals isLLDB [
"lldb"
]
++ lib.optionals isDev [
"dev"
"tests"
];
};
in
pyenv
if isEditable then pyenvEditable else pyenv

Loading…
Cancel
Save