Compare commits
4 Commits
main
...
nixos-24.0
Author | SHA1 | Date |
---|---|---|
|
f5b82de4f1 | |
|
2451f14ba7 | |
|
95738f98e7 | |
|
6dae849266 |
93
README.md
93
README.md
|
@ -16,47 +16,43 @@ modules require the overlay
|
||||||
|
|
||||||
### non-flake
|
### non-flake
|
||||||
|
|
||||||
since i use flakes now (sigh!!!) i'm not supporting non-flake usage anymore. if you read the files
|
```nix
|
||||||
in the repo there's a way to do it probably
|
{config, lib, pkgs, ...}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
/path/to/dragnpkgs/module.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.overlays = [ (import /path/to/dragnpkgs/overlay.nix) ];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
for standalone nix on other distros, use `~/.config/nixpkgs/overlays.nix` to enable the dragnpkgs
|
||||||
|
overlay
|
||||||
|
```nix
|
||||||
|
[ (import <dragnpkgs/overlay.nix>) ]
|
||||||
|
```
|
||||||
|
|
||||||
### flake
|
### flake
|
||||||
|
|
||||||
for flake usage, add this repo as an input and don't input nixpkgs at all, since we fully wrap it
|
for flake usage, point your `nixpkgs` to this repo
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
inputs = {
|
inputs = {
|
||||||
# for nixos-24.11
|
# for nixos-24.05
|
||||||
dragnpkgs.url = "git+https://git.lain.faith/haskal/dragnpkgs.git?ref=nixos-24.11";
|
nixpkgs.url = "git+https://git.lain.faith/haskal/dragnpkgs.git?ref=nixos-24.05";
|
||||||
|
|
||||||
# for nixos-unstable
|
# for nixos-unstable
|
||||||
dragnpkgs.url = "git+https://git.lain.faith/haskal/dragnpkgs.git?ref=main";
|
nixpkgs.url = "git+https://git.lain.faith/haskal/dragnpkgs.git?ref=main";
|
||||||
};
|
|
||||||
|
|
||||||
outputs = { self, dragnpkgs, ... }: {
|
|
||||||
nixosConfigurations.mycomputer = dragnpkgs.lib.nixosSystem {
|
|
||||||
...
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
note that the dragnpkgs module sets a couple defaults -- see module.nix and the inline modules in
|
note that overriding inputs to the flake won't necessarily work because of the way nixpkgs registers
|
||||||
flake.nix for details
|
itself with the system. this requires really annoying hacks to get working at all. if you want to
|
||||||
- disables nixpkgs self-registration in the flake registry and nix path and enables a
|
depend on `dragnpkgs` with a different version of `nixpkgs` (ie not 24.05 or unstable), clone the
|
||||||
dragnpkgs-specific registration mechanism for these that is enabled by default, see
|
repo and recreate `flake.lock`. aren't flakes so cool and fun!!!!
|
||||||
`options.dragnpkgs`
|
|
||||||
- in flake.nix but not in module.nix: disable channels
|
|
||||||
- add lix cache and its keys to substitutors
|
|
||||||
- enable experimental features `nix-command flakes repl-flake`
|
|
||||||
- disable the default flake registry. i think it's cringe
|
|
||||||
- add a repl overlay that adds some useful utilities to `nix repl` -- see repl-overlay.nix for
|
|
||||||
details
|
|
||||||
|
|
||||||
also note that overriding inputs to the flake won't necessarily work because of the way nixpkgs
|
|
||||||
registers itself with the system. this requires really annoying hacks to get working at all. if you
|
|
||||||
want to depend on `dragnpkgs` with a different version of `nixpkgs` (ie not 24.11 or unstable),
|
|
||||||
clone the repo and recreate `flake.lock`. aren't flakes so cool and fun!!!!
|
|
||||||
|
|
||||||
## options documentation
|
## options documentation
|
||||||
|
|
||||||
|
@ -78,13 +74,13 @@ services.ghidra-server = {
|
||||||
|
|
||||||
enables the ghidra server service
|
enables the ghidra server service
|
||||||
|
|
||||||
#### services.ghidra-server.enableAdminCli (`true`)
|
#### services.ghidra-server.enableAdminCli
|
||||||
|
|
||||||
adds a system package for the CLI tool `ghidra-svrAdmin`, which allows anyone in the `ghidra` group
|
adds a system package for the CLI tool `ghidra-svrAdmin`, which allows anyone in the `ghidra` group
|
||||||
to administer the server (this corresponds to the `server/svrAdmin` tool in the stock ghidra
|
to administer the server (this corresponds to the `server/svrAdmin` tool in the stock ghidra
|
||||||
distribution)
|
distribution)
|
||||||
|
|
||||||
#### services.ghidra-server.{package, jdkPackage} (`ghidra_headless`, `openjdk21_headless`)
|
#### services.ghidra-server.{package, jdkPackage} (`ghidra_headless`, `openjdk17_headless`)
|
||||||
|
|
||||||
allows overriding the ghidra package and jdk package used for the server
|
allows overriding the ghidra package and jdk package used for the server
|
||||||
|
|
||||||
|
@ -112,17 +108,12 @@ the service user and group
|
||||||
|
|
||||||
### [`ghidra_headless`](./default.nix)
|
### [`ghidra_headless`](./default.nix)
|
||||||
|
|
||||||
a variant of ghidra which does not have a dependency on any jdk, intended to
|
a variant of ghidra built with a headless openjdk, intended to reduce closure size for server
|
||||||
reduce closure size for server operation with a headless jdk (in particular,
|
operation
|
||||||
the ghidra-server nixos module uses `ghidra_headless` with `openjdk21_headless`
|
|
||||||
by default
|
|
||||||
|
|
||||||
### [`ghidra`](./pkgs/ghidra-xenia/build.nix)
|
### [`ghidra`](./pkgs/ghidra-xenia/build.nix)
|
||||||
|
|
||||||
a version of ghidra that uses a split derivation, `lib` contains the core
|
preview version of ghidra with my nix patches
|
||||||
ghidra distribution, `doc` contains all the documentation elements, and `out`
|
|
||||||
contains the bin folder, icons, and desktop file. only `out` has a dependency
|
|
||||||
on the build jdk, so `lib` and `doc` can be used with reduced closure size
|
|
||||||
|
|
||||||
### [`kicad`](./pkgs/kicad-xenia/default.nix)
|
### [`kicad`](./pkgs/kicad-xenia/default.nix)
|
||||||
|
|
||||||
|
@ -136,14 +127,6 @@ opinionated ppx for string literals: <https://git.lain.faith/haskal/ppx_unicode>
|
||||||
|
|
||||||
logging for cats, in ocaml: <https://git.lain.faith/haskal/xlog>
|
logging for cats, in ocaml: <https://git.lain.faith/haskal/xlog>
|
||||||
|
|
||||||
### [`ocamlPackages.systemd-ml`](./pkgs/ocaml/systemd-ml)
|
|
||||||
|
|
||||||
libsystemd implementation in native ocaml: <https://git.lain.faith/haskal/systemd-ml>
|
|
||||||
|
|
||||||
### [`ocamlPackages.ocaml-manual`](./pkgs/ocaml/ocaml-manual)
|
|
||||||
|
|
||||||
the ocaml html docs package from opam
|
|
||||||
|
|
||||||
### [`python312Packages.feedvalidator` or `feedvalidator`](./pkgs/python/feedvalidator)
|
### [`python312Packages.feedvalidator` or `feedvalidator`](./pkgs/python/feedvalidator)
|
||||||
|
|
||||||
the W3C atom/RSS feed validator library, <https://github.com/w3c/feedvalidator>
|
the W3C atom/RSS feed validator library, <https://github.com/w3c/feedvalidator>
|
||||||
|
@ -180,24 +163,6 @@ another ALSA plugin that lives in a separate package
|
||||||
export ALSA_PLUGIN_DIR=$(nix eval -f '<nixpkgs>' --raw pipewire)/lib/alsa-lib
|
export ALSA_PLUGIN_DIR=$(nix eval -f '<nixpkgs>' --raw pipewire)/lib/alsa-lib
|
||||||
```
|
```
|
||||||
|
|
||||||
### [`eta`](./pkgs/cmdline/eta)
|
|
||||||
|
|
||||||
Generic tool for monitoring ETA and progress of an arbitrary process.
|
|
||||||
|
|
||||||
<https://github.com/aioobe/eta>
|
|
||||||
|
|
||||||
### [`zbasefind`](./pkgs/rust/zbasefind)
|
|
||||||
|
|
||||||
Command line tool to guess the base address of a raw firmware binary (zoomer edition).
|
|
||||||
|
|
||||||
<https://git.lain.faith/haskal/zbasefind.git>
|
|
||||||
|
|
||||||
### [`cado-nfs`](./pkgs/crypto/cado-nfs)
|
|
||||||
|
|
||||||
Cado-NFS, An Implementation of the Number Field Sieve Algorithm
|
|
||||||
|
|
||||||
<https://gitlab.inria.fr/cado-nfs/cado-nfs>
|
|
||||||
|
|
||||||
## lib documentation
|
## lib documentation
|
||||||
|
|
||||||
### [`fetchFromSteam`](./lib/fetchsteam)
|
### [`fetchFromSteam`](./lib/fetchsteam)
|
||||||
|
|
10
TODO.md
10
TODO.md
|
@ -1,5 +1,11 @@
|
||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
|
## ghidra-xenia-v2
|
||||||
|
- split ghidra-lib package with no dependency on any jdk (launch.sh)
|
||||||
|
- make a custom launch script similar to ghidra-server nixos module to replace launch.sh
|
||||||
|
- make runtime jdk configurable and independent of build jdk
|
||||||
|
- adding a doc split output with ghidra javadoc/sleigh doc/etc would be nice
|
||||||
|
|
||||||
## upstream
|
## upstream
|
||||||
- fix kicad desktop file name
|
- fix kicad desktop file name
|
||||||
|
|
||||||
|
@ -10,3 +16,7 @@ create NixOS VM test
|
||||||
- test that ghidra-svrAdmin works as an unprivileged user in the `ghidra` group
|
- test that ghidra-svrAdmin works as an unprivileged user in the `ghidra` group
|
||||||
- possibly test remotely importing a binary. however, ghidra-svrAdmin working is a good indicator of
|
- possibly test remotely importing a binary. however, ghidra-svrAdmin working is a good indicator of
|
||||||
the server being functional
|
the server being functional
|
||||||
|
|
||||||
|
## general
|
||||||
|
|
||||||
|
- meta info / license info for pkgs
|
||||||
|
|
|
@ -14,9 +14,9 @@ let
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{ overlays ? [], ... } @ args:
|
{ overlays ? [], ... } @ args:
|
||||||
import "${nixpkgs}" ({
|
import "${nixpkgs}" {
|
||||||
overlays = [
|
overlays = [
|
||||||
(import ./overlay.nix)
|
(import ./overlay.nix)
|
||||||
(import "${lix-module}/overlay.nix" { inherit lix; })
|
(import "${lix-module}/overlay.nix" { inherit lix; })
|
||||||
] ++ overlays;
|
] ++ overlays;
|
||||||
} // (builtins.removeAttrs args [ "overlays" ]))
|
} // (builtins.removeAttrs args [ "overlays" ])
|
||||||
|
|
28
flake.lock
28
flake.lock
|
@ -3,43 +3,43 @@
|
||||||
"lix": {
|
"lix": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1750762236,
|
"lastModified": 1729298361,
|
||||||
"narHash": "sha256-D7YepvFkGE4K1rOkEYA1P6wGj/eFbQXb03nLdBRjjwA=",
|
"narHash": "sha256-hiGtfzxFkDc9TSYsb96Whg0vnqBVV7CUxyscZNhed0U=",
|
||||||
"rev": "9271961fe6a7130e71b3266508ad0bf2b2f1dea3",
|
"rev": "ad9d06f7838a25beec425ff406fe68721fef73be",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/9271961fe6a7130e71b3266508ad0bf2b2f1dea3.tar.gz?rev=9271961fe6a7130e71b3266508ad0bf2b2f1dea3"
|
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/ad9d06f7838a25beec425ff406fe68721fef73be.tar.gz?rev=ad9d06f7838a25beec425ff406fe68721fef73be"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://git.lix.systems/lix-project/lix/archive/2.92.2.tar.gz"
|
"url": "https://git.lix.systems/lix-project/lix/archive/2.91.1.tar.gz"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lix-module": {
|
"lix-module": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1750776709,
|
"lastModified": 1729360442,
|
||||||
"narHash": "sha256-h9vRkc/RIIuo1fDisx8WX1mGYfryWUOhrOvnI8DGYeI=",
|
"narHash": "sha256-6U0CyPycIBc04hbYy2hBINnVso58n/ZyywY2BD3hu+s=",
|
||||||
"rev": "f84e0257d1125715e3eb4800a6f36376583984a3",
|
"rev": "9098ac95768f7006d7e070b88bae76939f6034e6",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f84e0257d1125715e3eb4800a6f36376583984a3.tar.gz?rev=f84e0257d1125715e3eb4800a6f36376583984a3"
|
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/9098ac95768f7006d7e070b88bae76939f6034e6.tar.gz?rev=9098ac95768f7006d7e070b88bae76939f6034e6"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://git.lix.systems/lix-project/nixos-module/archive/2.92.2-1.tar.gz"
|
"url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1750506804,
|
"lastModified": 1731239293,
|
||||||
"narHash": "sha256-VLFNc4egNjovYVxDGyBYTrvVCgDYgENp5bVi9fPTDYc=",
|
"narHash": "sha256-q2yjIWFFcTzp5REWQUOU9L6kHdCDmFDpqeix86SOvDc=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "4206c4cb56751df534751b058295ea61357bbbaa",
|
"rev": "9256f7c71a195ebe7a218043d9f93390d49e6884",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-unstable",
|
"ref": "nixos-24.05",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|
217
flake.nix
217
flake.nix
|
@ -2,15 +2,14 @@
|
||||||
description = "dragnpkgs together with nixpkgs and lix";
|
description = "dragnpkgs together with nixpkgs and lix";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
|
||||||
|
|
||||||
lix-module = {
|
lix-module = {
|
||||||
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.92.2-1.tar.gz";
|
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
lix = {
|
lix = {
|
||||||
url = "https://git.lix.systems/lix-project/lix/archive/2.92.2.tar.gz";
|
url = "https://git.lix.systems/lix-project/lix/archive/2.91.1.tar.gz";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -22,66 +21,8 @@
|
||||||
(import "${lix-module}/overlay.nix" { inherit lix; })
|
(import "${lix-module}/overlay.nix" { inherit lix; })
|
||||||
];
|
];
|
||||||
forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed;
|
forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed;
|
||||||
libVersionInfoOverlay = import "${nixpkgs}/lib/flake-version-info.nix" nixpkgs;
|
|
||||||
# this is taken from upstream. if upstream changes, the code here needs to be updated to match
|
|
||||||
addLibVersionInfo = lib: lib.extend libVersionInfoOverlay;
|
|
||||||
lib-base = addLibVersionInfo (import "${nixpkgs}/lib");
|
|
||||||
in {
|
in {
|
||||||
# we don't just use nix.registry.whatever.flake = self
|
lib = nixpkgs.lib.extend (final: prev: {
|
||||||
# the reason for this is to be able to handle a flake.lock containing an entry for this
|
|
||||||
# flake -- setting .flake makes it a path entry in the registry, whereas we want our
|
|
||||||
# self reference in the registry to be downloadable by URL in case it makes it into a
|
|
||||||
# flake.lock
|
|
||||||
meta.registry-entry = {
|
|
||||||
from = { id = "dragnpkgs-unstable"; type = "indirect"; };
|
|
||||||
to = {
|
|
||||||
type = "git";
|
|
||||||
url = "https://git.lain.faith/haskal/dragnpkgs.git";
|
|
||||||
ref = "main";
|
|
||||||
} // self.lib.filterAttrs
|
|
||||||
(n: _: n == "lastModified" || n == "rev" || n == "revCount" || n == "narHash")
|
|
||||||
self;
|
|
||||||
};
|
|
||||||
|
|
||||||
# the nix path entry for self
|
|
||||||
meta.path-entry = "dragnpkgs-unstable=flake:dragnpkgs-unstable";
|
|
||||||
|
|
||||||
lib = (lib-base.extend (import ./lib/overlay.nix)).extend (final: prev: {
|
|
||||||
# initializes regular upstream nixpkgs with the given arguments
|
|
||||||
nixpkgs-custom = { system, ... } @ args: (
|
|
||||||
(import "${nixpkgs}" args).extend (final: prev: {
|
|
||||||
lib = addLibVersionInfo prev.lib;
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
# initializes dragnpkgs with its overlays and default config using the given arguments
|
|
||||||
dragnpkgs-custom = { system, ... } @ args: let
|
|
||||||
unsafeConf = if builtins.hasAttr "extraBuiltins" builtins then (
|
|
||||||
let conf = builtins.extraBuiltins; in
|
|
||||||
if builtins.isAttrs conf then conf else {}
|
|
||||||
) else {};
|
|
||||||
possiblyCommitCrimes =
|
|
||||||
if
|
|
||||||
builtins.hasAttr "dragnpkgs" unsafeConf &&
|
|
||||||
builtins.isAttrs unsafeConf.dragnpkgs &&
|
|
||||||
builtins.hasAttr "possiblyCommitCrimes" unsafeConf.dragnpkgs &&
|
|
||||||
builtins.isBool unsafeConf.dragnpkgs.possiblyCommitCrimes
|
|
||||||
then
|
|
||||||
unsafeConf.dragnpkgs.possiblyCommitCrimes
|
|
||||||
else
|
|
||||||
false;
|
|
||||||
in
|
|
||||||
final.nixpkgs-custom (args // {
|
|
||||||
overlays = overlays ++ (args.overlays or []);
|
|
||||||
config = (args.config or {}) // {
|
|
||||||
allowlistedLicenses = (final.optionals
|
|
||||||
possiblyCommitCrimes
|
|
||||||
[ final.licenses.fyptl ]) ++ (args.config.allowlistedLicenses or []);
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
nixos = import "${nixpkgs}/nixos/lib" { lib = final; };
|
|
||||||
|
|
||||||
nixosSystem = args:
|
nixosSystem = args:
|
||||||
import "${nixpkgs}/nixos/lib/eval-config.nix" (
|
import "${nixpkgs}/nixos/lib/eval-config.nix" (
|
||||||
{
|
{
|
||||||
|
@ -91,161 +32,19 @@
|
||||||
|
|
||||||
modules = args.modules ++ [
|
modules = args.modules ++ [
|
||||||
({ config, pkgs, lib, ... }: {
|
({ config, pkgs, lib, ... }: {
|
||||||
config.nixpkgs = {
|
config.nixpkgs.flake.source = self.outPath;
|
||||||
# we remove nixpkgs' machinery for setting self flake references and
|
config.nixpkgs.overlays = overlays;
|
||||||
# replace it with our own (in the next inline module)
|
|
||||||
flake = {
|
|
||||||
source = self.outPath;
|
|
||||||
setNixPath = false;
|
|
||||||
setFlakeRegistry = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
overlays = overlays;
|
|
||||||
};
|
|
||||||
|
|
||||||
# this is in the flake rather than in module.nix so there's still control over
|
|
||||||
# channels if you're not using a flake based config. but for flake based
|
|
||||||
# configs, we're not doing channels anymore
|
|
||||||
config.nix = {
|
|
||||||
channel.enable = false;
|
|
||||||
};
|
|
||||||
})
|
})
|
||||||
|
|
||||||
({ options, config, pkgs, lib, ...}: {
|
|
||||||
options.dragnpkgs = {
|
|
||||||
setFlakeRegistry = lib.mkOption {
|
|
||||||
description = "Set flake registry option pointing to self";
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = true;
|
|
||||||
defaultText = lib.literalExpression "true";
|
|
||||||
example = lib.literalExpression "false";
|
|
||||||
};
|
|
||||||
|
|
||||||
setNixPath = lib.mkOption {
|
|
||||||
description = "Set nix path entry pointing to self";
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = true;
|
|
||||||
defaultText = lib.literalExpression "true";
|
|
||||||
example = lib.literalExpression "false";
|
|
||||||
};
|
|
||||||
|
|
||||||
setNixpkgsFlakeAlias = lib.mkOption {
|
|
||||||
description = "Set flake registry entry for `nixpkgs` to self";
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = true;
|
|
||||||
defaultText = lib.literalExpression "true";
|
|
||||||
example = lib.literalExpression "false";
|
|
||||||
};
|
|
||||||
|
|
||||||
setTemplatesFlakeAlias = lib.mkOption {
|
|
||||||
description = "Set flake registry entry for `templates` to self";
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = true;
|
|
||||||
defaultText = lib.literalExpression "true";
|
|
||||||
example = lib.literalExpression "false";
|
|
||||||
};
|
|
||||||
|
|
||||||
possiblyCommitCrimes = lib.mkOption {
|
|
||||||
description = ''
|
|
||||||
Globally enable usage of packages marked as FYPTL. This installs a nix
|
|
||||||
plugin, which is widely considered to be a nix crime, and it also might
|
|
||||||
be an actual crime to use these packages depending on you jurisdiction. Use
|
|
||||||
at your own risk
|
|
||||||
'';
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
defaultText = lib.literalExpression "false";
|
|
||||||
example = lib.literalExpression "false";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config.nix.registry.dragnpkgs-unstable =
|
|
||||||
lib.mkIf config.dragnpkgs.setFlakeRegistry self.meta.registry-entry;
|
|
||||||
|
|
||||||
config.nix.registry.nixpkgs = lib.mkIf config.dragnpkgs.setNixpkgsFlakeAlias {
|
|
||||||
from = { id = "nixpkgs"; type = "indirect"; };
|
|
||||||
to = { id = "dragnpkgs-unstable"; type = "indirect"; };
|
|
||||||
};
|
|
||||||
|
|
||||||
config.nix.registry.templates = lib.mkIf config.dragnpkgs.setTemplatesFlakeAlias {
|
|
||||||
from = { id = "templates"; type = "indirect"; };
|
|
||||||
to = { id = "dragnpkgs-unstable"; type = "indirect"; };
|
|
||||||
};
|
|
||||||
|
|
||||||
config.nix.nixPath = lib.mkIf config.dragnpkgs.setNixPath [
|
|
||||||
self.meta.path-entry
|
|
||||||
];
|
|
||||||
|
|
||||||
config.nixpkgs.config = lib.mkIf config.dragnpkgs.possiblyCommitCrimes {
|
|
||||||
allowlistedLicenses = [ lib.licenses.fyptl ];
|
|
||||||
};
|
|
||||||
|
|
||||||
config.nix.settings.plugin-files =
|
|
||||||
lib.optionals config.dragnpkgs.possiblyCommitCrimes [
|
|
||||||
"${pkgs.lix-plugins}/lib/liblix-plugins.so"
|
|
||||||
];
|
|
||||||
|
|
||||||
config.nix.settings.extra-builtins-file =
|
|
||||||
lib.mkIf config.dragnpkgs.possiblyCommitCrimes (
|
|
||||||
lib.mkForce "/etc/nix/extra-builtins.nix"
|
|
||||||
);
|
|
||||||
|
|
||||||
config.environment.etc = lib.mkIf config.dragnpkgs.possiblyCommitCrimes {
|
|
||||||
"nix/extra-builtins.nix".text =
|
|
||||||
let
|
|
||||||
possiblyCommitCrimes =
|
|
||||||
lib.boolToString config.dragnpkgs.possiblyCommitCrimes;
|
|
||||||
in ''
|
|
||||||
{ ... }: {
|
|
||||||
dragnpkgs = {
|
|
||||||
possiblyCommitCrimes = ${possiblyCommitCrimes};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
})
|
|
||||||
|
|
||||||
(import ./module.nix)
|
(import ./module.nix)
|
||||||
];
|
];
|
||||||
} // builtins.removeAttrs args [ "modules" ]
|
} // builtins.removeAttrs args [ "modules" ]
|
||||||
);
|
);
|
||||||
|
|
||||||
mkFlake = flakeDef:
|
|
||||||
let
|
|
||||||
rewritePerSystem = sectionDef: (forAllSystems (system:
|
|
||||||
builtins.mapAttrs (name: value:
|
|
||||||
if final.isDerivation value then
|
|
||||||
value
|
|
||||||
else
|
|
||||||
self.legacyPackages.${system}.callPackage value {}
|
|
||||||
) sectionDef
|
|
||||||
));
|
|
||||||
in
|
|
||||||
builtins.mapAttrs (name: value:
|
|
||||||
if name == "packages" || name == "legacyPackages" || name == "devShells" ||
|
|
||||||
name == "apps" then
|
|
||||||
rewritePerSystem value
|
|
||||||
else
|
|
||||||
value
|
|
||||||
) flakeDef;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
legacyPackages = forAllSystems (system:
|
legacyPackages = forAllSystems (system:
|
||||||
self.lib.dragnpkgs-custom { inherit system; }
|
nixpkgs.legacyPackages.${system}.appendOverlays overlays
|
||||||
);
|
);
|
||||||
|
|
||||||
templates = {
|
nixosModules = nixpkgs.nixosModules;
|
||||||
default = {
|
|
||||||
path = ./templates/default;
|
|
||||||
description = "A very basic flake (with dragnpkgs)";
|
|
||||||
};
|
|
||||||
|
|
||||||
beamer = {
|
|
||||||
path = ./templates/beamer;
|
|
||||||
description = "A very basic presentation with Beamer";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
defaultTemplate = self.templates.default;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
The Fuck You, Pirate This License (FYPTL)
|
|
||||||
---
|
|
||||||
|
|
||||||
Copyright (c) 2024 [Copyright Holder(s)]. All Rights Reserved.
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software IS NOT granted
|
|
||||||
for any purpose. Performing any such actions in connection with this software
|
|
||||||
may constitute copyright infringement, and the copyright holder(s) may pursue
|
|
||||||
any remedies for such infringement in accordance with applicable law.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
||||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
||||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
||||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
||||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
PERFORMANCE OF THIS SOFTWARE.
|
|
|
@ -1,8 +0,0 @@
|
||||||
{
|
|
||||||
shortName = "FYPTL";
|
|
||||||
fullName = "Fuck You, Pirate This License";
|
|
||||||
deprecated = false;
|
|
||||||
free = false;
|
|
||||||
redistributable = false;
|
|
||||||
url = "https://git.lain.faith/haskal/dragnpkgs/src/branch/main/lib/licenses/FYPTL";
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
final: prev: {
|
|
||||||
licenses = prev.licenses // { fyptl = import ./licenses/fyptl.nix; };
|
|
||||||
}
|
|
15
module.nix
15
module.nix
|
@ -1,20 +1,5 @@
|
||||||
{ ... }: {
|
{ ... }: {
|
||||||
imports = [
|
imports = [
|
||||||
./modules/ghidra-server
|
./modules/ghidra-server
|
||||||
./modules/regdom
|
|
||||||
./modules/machine-info
|
|
||||||
];
|
];
|
||||||
|
|
||||||
# set some nix settings defaults
|
|
||||||
config.nix.settings = {
|
|
||||||
repl-overlays = [ ./repl-overlay.nix ];
|
|
||||||
experimental-features = "nix-command flakes repl-flake pipe-operator";
|
|
||||||
temp-dir = "/var/tmp";
|
|
||||||
|
|
||||||
# we're disabling the default flake registry because i don't like it
|
|
||||||
flake-registry = "";
|
|
||||||
|
|
||||||
# sigh
|
|
||||||
use-xdg-base-directories = "true";
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,9 +8,9 @@ let
|
||||||
in {
|
in {
|
||||||
options.services.ghidra-server = {
|
options.services.ghidra-server = {
|
||||||
enable = mkEnableOption "ghidra-server";
|
enable = mkEnableOption "ghidra-server";
|
||||||
enableAdminCli = mkEnableOption "ghidra-svrAdmin" // { default = true; };
|
enableAdminCli = mkEnableOption "ghidra-svrAdmin";
|
||||||
package = mkPackageOption pkgs "ghidra_headless" { };
|
package = mkPackageOption pkgs "ghidra_headless" { };
|
||||||
jdkPackage = mkPackageOption pkgs "openjdk21_headless" { };
|
jdkPackage = mkPackageOption pkgs "openjdk17_headless" { };
|
||||||
host = mkOption {
|
host = mkOption {
|
||||||
default = null;
|
default = null;
|
||||||
defaultText = literalExpression "null";
|
defaultText = literalExpression "null";
|
||||||
|
|
|
@ -1,119 +0,0 @@
|
||||||
{ config, pkgs, lib, ... }: with lib; {
|
|
||||||
options.environment.machineInfo = mkOption {
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
Machine metadata, including stylized hostname, computer icon, etc.
|
|
||||||
|
|
||||||
This module controls the options written to `/etc/machine-info`. For more
|
|
||||||
information, see [the freedesktop documentation][1].
|
|
||||||
|
|
||||||
[1]: https://www.freedesktop.org/software/systemd/man/machine-info.html
|
|
||||||
'';
|
|
||||||
default = {};
|
|
||||||
type = types.submodule { options = {
|
|
||||||
|
|
||||||
prettyHostname = mkOption {
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
A pretty, human-readable hostname for this machine, potentially including
|
|
||||||
spaces, unicode, and emoji. If unset, this falls back to the network hostname
|
|
||||||
set in `networking.hostName`.
|
|
||||||
'';
|
|
||||||
type = with types; nullOr str;
|
|
||||||
default = null;
|
|
||||||
defaultText = literalExpression "null";
|
|
||||||
example = literalExpression "\"Jade's Laptop 💎\"";
|
|
||||||
};
|
|
||||||
|
|
||||||
iconName = mkOption {
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
An XDG icon which should be associated with this machine. Some common choices
|
|
||||||
include: `"computer"`, `"phone"`, but a complete list of icons can be found in
|
|
||||||
the [XDG Icon Naming Spec][1].
|
|
||||||
|
|
||||||
If left unset, applications will typically default to `"computer"`.
|
|
||||||
|
|
||||||
[1]: https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
|
|
||||||
'';
|
|
||||||
type = with types; nullOr str;
|
|
||||||
default = null;
|
|
||||||
defaultText = literalExpression "null";
|
|
||||||
example = literalExpression "\"computer\"";
|
|
||||||
};
|
|
||||||
|
|
||||||
chassis = mkOption {
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
The type of chassis this machine resides within. This is typically detected
|
|
||||||
automatically, but can be manually overridden here.
|
|
||||||
'';
|
|
||||||
type = with types; nullOr (enum [
|
|
||||||
"desktop"
|
|
||||||
"laptop"
|
|
||||||
"convertible"
|
|
||||||
"server"
|
|
||||||
"tablet"
|
|
||||||
"handset"
|
|
||||||
"watch"
|
|
||||||
"embedded"
|
|
||||||
"vm"
|
|
||||||
"container"
|
|
||||||
]);
|
|
||||||
default = null;
|
|
||||||
defaultText = literalExpression "null";
|
|
||||||
example = literalExpression "\"server\"";
|
|
||||||
};
|
|
||||||
|
|
||||||
deployment = mkOption {
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
If this machine is part of a deployment environment / pipeline, this option can
|
|
||||||
be used to specify what environment/pipeline stage it manages.
|
|
||||||
|
|
||||||
Typically, but not necessarily, set to something like `"development"`,
|
|
||||||
`"integration"`, `"staging"`, or `"production"`.
|
|
||||||
'';
|
|
||||||
type = with types; nullOr str;
|
|
||||||
default = null;
|
|
||||||
defaultText = literalExpression "null";
|
|
||||||
example = literalExpression "\"production\"";
|
|
||||||
};
|
|
||||||
|
|
||||||
location = mkOption {
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
A human-readable short description of the location of this machine.
|
|
||||||
|
|
||||||
This can be set to whatever has the most meaning for you, for example "Living
|
|
||||||
Room", "Left Rack, 2nd Shelf", or "Parishville, NY".
|
|
||||||
'';
|
|
||||||
type = with types; nullOr str;
|
|
||||||
default = null;
|
|
||||||
defaultText = literalExpression "null";
|
|
||||||
example = literalExpression "\"Bedroom\"";
|
|
||||||
};
|
|
||||||
|
|
||||||
extraOptions = mkOption {
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
Extra variables to put in `/etc/machine-info`
|
|
||||||
'';
|
|
||||||
type = with types; attrsOf str;
|
|
||||||
default = {};
|
|
||||||
defaultText = literalExpression "{ }";
|
|
||||||
example = literalExpression "{ HARDWARE_VENDOR = \"Intel Corp.\" }";
|
|
||||||
};
|
|
||||||
|
|
||||||
};};
|
|
||||||
};
|
|
||||||
|
|
||||||
config.environment.etc.machine-info =
|
|
||||||
with config.environment.machineInfo;
|
|
||||||
let
|
|
||||||
rawShellVars = {
|
|
||||||
PRETTY_HOSTNAME = prettyHostname;
|
|
||||||
ICON_NAME = iconName;
|
|
||||||
CHASSIS = chassis;
|
|
||||||
DEPLOYMENT = deployment;
|
|
||||||
LOCATION = location;
|
|
||||||
} // extraOptions;
|
|
||||||
nonNullShellVars = attrsets.filterAttrs (k: v: v != null) rawShellVars;
|
|
||||||
in rec {
|
|
||||||
text = strings.toShellVars nonNullShellVars;
|
|
||||||
enable = builtins.stringLength text > 0;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
{ config, pkgs, lib, ... }:
|
|
||||||
with lib;
|
|
||||||
let
|
|
||||||
cfg = config.hardware.wirelessRegulatoryDomain;
|
|
||||||
in {
|
|
||||||
options.hardware.wirelessRegulatoryDomain = mkOption {
|
|
||||||
description = "The wireless regulatory domain to set in the kernel cfg80211 module";
|
|
||||||
type = with types; nullOr str;
|
|
||||||
default = null;
|
|
||||||
defaultText = literalExpression "null";
|
|
||||||
example = literalExpression "\"US\"";
|
|
||||||
};
|
|
||||||
|
|
||||||
config.boot.extraModprobeConfig = mkIf (cfg != null) ''
|
|
||||||
options cfg80211 ieee80211_regdom=${cfg}
|
|
||||||
'';
|
|
||||||
}
|
|
41
overlay.nix
41
overlay.nix
|
@ -1,6 +1,4 @@
|
||||||
final: prev: {
|
final: prev: {
|
||||||
lib = prev.lib.extend (import ./lib/overlay.nix);
|
|
||||||
|
|
||||||
fetchFromSteam = prev.callPackage ./lib/fetchsteam {};
|
fetchFromSteam = prev.callPackage ./lib/fetchsteam {};
|
||||||
fetchb4 = prev.callPackage ./lib/fetchb4 {};
|
fetchb4 = prev.callPackage ./lib/fetchb4 {};
|
||||||
|
|
||||||
|
@ -9,55 +7,36 @@ final: prev: {
|
||||||
makeSquashFs = prev.callPackage ./lib/make-squashfs {};
|
makeSquashFs = prev.callPackage ./lib/make-squashfs {};
|
||||||
makeHpcDist = final.callPackage ./lib/make-hpc-dist {};
|
makeHpcDist = final.callPackage ./lib/make-hpc-dist {};
|
||||||
|
|
||||||
ghidra_headless = final.ghidra.lib;
|
ghidra_headless = prev.ghidra.override {
|
||||||
|
openjdk17 = prev.openjdk17_headless;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
# stuff that tracks upstream
|
# stuff that tracks upstream
|
||||||
ghidra = final.callPackage ./pkgs/ghidra-xenia-v2/build.nix {
|
ghidra = final.callPackage ./pkgs/ghidra-xenia/build.nix {
|
||||||
protobuf = final.protobuf_21;
|
protobuf = final.protobuf_21;
|
||||||
};
|
};
|
||||||
ghidra-extensions = final.lib.recurseIntoAttrs (final.callPackage ./pkgs/ghidra-xenia-v2/extensions.nix { });
|
ghidra-extensions = final.lib.recurseIntoAttrs (final.callPackage ./pkgs/ghidra-xenia/extensions.nix { });
|
||||||
|
ghidra-bin = final.callPackage ./pkgs/ghidra-xenia { };
|
||||||
|
|
||||||
|
kicad = final.callPackage ./pkgs/kicad-xenia { };
|
||||||
|
kicadAddons = final.lib.recurseIntoAttrs (final.callPackage ./pkgs/kicad-xenia/addons {});
|
||||||
# end stuff that tracks upstream
|
# end stuff that tracks upstream
|
||||||
|
|
||||||
|
|
||||||
ocamlPackages = prev.ocamlPackages.overrideScope (ofinal: oprev: {
|
ocamlPackages = prev.ocamlPackages.overrideScope (ofinal: oprev: {
|
||||||
ppx_unicode = ofinal.callPackage ./pkgs/ocaml/ppx_unicode {};
|
ppx_unicode = ofinal.callPackage ./pkgs/ocaml/ppx_unicode {};
|
||||||
xlog = ofinal.callPackage ./pkgs/ocaml/xlog {};
|
xlog = ofinal.callPackage ./pkgs/ocaml/xlog {};
|
||||||
systemd-ml = ofinal.callPackage ./pkgs/ocaml/systemd-ml {};
|
|
||||||
|
|
||||||
ocaml-manual = ofinal.callPackage ./pkgs/ocaml/ocaml-manual {};
|
|
||||||
});
|
});
|
||||||
|
|
||||||
python312Packages = prev.python312Packages.overrideScope (pfinal: pprev: {
|
python312Packages = prev.python312Packages.overrideScope (pfinal: pprev: {
|
||||||
feedvalidator = pfinal.callPackage ./pkgs/python/feedvalidator {};
|
feedvalidator = pfinal.callPackage ./pkgs/python/feedvalidator {};
|
||||||
megacom = pfinal.callPackage ./pkgs/python/megacom {};
|
|
||||||
});
|
});
|
||||||
|
|
||||||
# add to top level because it has a binary
|
# add to top level because it has a binary
|
||||||
feedvalidator = final.python312Packages.feedvalidator;
|
feedvalidator = final.python312Packages.feedvalidator;
|
||||||
megacom = final.python312Packages.megacom;
|
|
||||||
|
|
||||||
outer-wilds-text-adventure = prev.callPackage ./pkgs/games/outer-wilds-text-adventure {};
|
outer-wilds-text-adventure = prev.callPackage ./pkgs/games/outer-wilds-text-adventure {};
|
||||||
|
|
||||||
mkNginxServer = prev.callPackage ./lib/dev-nginx {};
|
mkNginxServer = prev.callPackage ./lib/dev-nginx {};
|
||||||
|
|
||||||
zbasefind = final.callPackage ./pkgs/rust/zbasefind {};
|
|
||||||
|
|
||||||
eta = prev.callPackage ./pkgs/cmdline/eta {};
|
|
||||||
|
|
||||||
cado-nfs = prev.callPackage ./pkgs/crypto/cado-nfs {};
|
|
||||||
|
|
||||||
lix-plugins = prev.callPackage ./pkgs/lix/lix-plugins {};
|
|
||||||
nix-plugins = builtins.throw "nix-plugins is not supported. see pkgs.lix-plugins";
|
|
||||||
|
|
||||||
zfs_2_3 = prev.zfs_2_3.overrideAttrs {
|
|
||||||
patches = [ ./pkgs/zfs/0001-ZED-add-support-for-desktop-notifications-D-Bus.patch ];
|
|
||||||
};
|
|
||||||
|
|
||||||
pympress = prev.pympress.overrideDerivation (oldAttrs: {
|
|
||||||
patches = [ ./pkgs/python/pympress/0001-Fix-KDE-window-icon.patch ];
|
|
||||||
});
|
|
||||||
|
|
||||||
texliveDragonPackages = {
|
|
||||||
moloch = prev.callPackage ./pkgs/tex/moloch {};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,109 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
concatText,
|
|
||||||
fetchzip,
|
|
||||||
stdenvNoCC,
|
|
||||||
writeText,
|
|
||||||
writeShellApplication,
|
|
||||||
|
|
||||||
resholve,
|
|
||||||
|
|
||||||
bash,
|
|
||||||
cacert,
|
|
||||||
coreutils,
|
|
||||||
pacman,
|
|
||||||
systemd,
|
|
||||||
zstd,
|
|
||||||
|
|
||||||
repos ? ["core" "community" "extra"],
|
|
||||||
keyring-version ? "20250123-1",
|
|
||||||
keyring-hash ? "sha256-JW3z8MHVecayQ3heLbhPB+rMCuZ3QsjAYiFnVNfUeH0=",
|
|
||||||
mirror ? "https://mirror.rackspace.com/archlinux/$repo/os/$arch",
|
|
||||||
}: rec {
|
|
||||||
keyring = (fetchzip.override { withUnzip = false; }) {
|
|
||||||
url = "${builtins.replaceStrings ["$repo" "$arch"] ["core" "x86_64"] mirror}/archlinux-keyring-${keyring-version}-any.pkg.tar.zst";
|
|
||||||
hash = keyring-hash;
|
|
||||||
nativeBuildInputs = [ zstd ];
|
|
||||||
stripRoot = false;
|
|
||||||
postFetch = ''
|
|
||||||
rm "$out"/.BUILDINFO "$out"/.INSTALL "$out"/.MTREE "$out"/.PKGINFO
|
|
||||||
mkdir "$out"/share/pacman -p
|
|
||||||
mv "$out"/usr/share/pacman/keyrings "$out"/share/pacman
|
|
||||||
rm -rf "$out"/usr
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
pacman_conf_in =
|
|
||||||
writeText
|
|
||||||
"pacman-mirrors.conf"
|
|
||||||
(lib.strings.concatLines
|
|
||||||
(lib.map
|
|
||||||
(repo: ''
|
|
||||||
[${repo}]
|
|
||||||
Server = ${mirror}
|
|
||||||
'')
|
|
||||||
repos));
|
|
||||||
|
|
||||||
pacman_conf = concatText "pacman.conf" [ "${pacman}/etc/pacman.conf" pacman_conf_in ];
|
|
||||||
|
|
||||||
bootstrap = resholve.writeScriptBin "archlinux-bootstrap" {
|
|
||||||
interpreter = "${bash}/bin/bash";
|
|
||||||
inputs = [ coreutils pacman systemd ];
|
|
||||||
execer = [
|
|
||||||
"cannot:${pacman}/bin/pacman-key"
|
|
||||||
"cannot:${systemd}/bin/systemd-nspawn"
|
|
||||||
];
|
|
||||||
} ''
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
if [ $# -lt 1 ]; then
|
|
||||||
echo "usage: $0 [directory] [pkgs ...]"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
newroot="$1"
|
|
||||||
shift
|
|
||||||
|
|
||||||
echo "Installing arch linux to $newroot"
|
|
||||||
|
|
||||||
# set up new base filesystem
|
|
||||||
install -dm0755 "$newroot"
|
|
||||||
install -dm0755 "$newroot"/var/{cache/pacman/pkg,lib/pacman,log}
|
|
||||||
install -dm0755 "$newroot"/{dev,run,etc/pacman.d}
|
|
||||||
install -dm1777 "$newroot"/tmp
|
|
||||||
install -dm0555 "$newroot"/{sys,proc}
|
|
||||||
|
|
||||||
# set up mountpoint for nix
|
|
||||||
install -dm0755 "$newroot"/nix
|
|
||||||
|
|
||||||
# temporarily set up /etc/mtab, pacman needs this to work
|
|
||||||
ln -sf /proc/mounts "$newroot"/etc/mtab
|
|
||||||
|
|
||||||
# fully initialize the keyring ahead of entering the container
|
|
||||||
pacman_conf="${pacman_conf}"
|
|
||||||
pacman-key --gpgdir "$newroot"/etc/pacman.d/gnupg --config "$pacman_conf" --init
|
|
||||||
pacman-key --gpgdir "$newroot"/etc/pacman.d/gnupg --config "$pacman_conf" \
|
|
||||||
--populate archlinux --populate-from "${keyring}/share/pacman/keyrings"
|
|
||||||
|
|
||||||
# install the config file
|
|
||||||
install -Dm0755 "$pacman_conf" "$newroot"/etc/pacman.conf
|
|
||||||
|
|
||||||
# bootstrap the system. allow pacman to overwrite the existing mtab entry
|
|
||||||
systemd-nspawn -D "$newroot" --bind-ro=/nix \
|
|
||||||
-E SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt \
|
|
||||||
-E PATH=/usr/bin/ \
|
|
||||||
-- \
|
|
||||||
"${pacman}/bin/pacman" -Sy --noconfirm --overwrite /etc/mtab base "$@"
|
|
||||||
|
|
||||||
# remove nix mount point
|
|
||||||
rmdir "$newroot"/nix
|
|
||||||
|
|
||||||
echo "Done installing!"
|
|
||||||
echo "Set root password:"
|
|
||||||
echo " sudo systemd-nspawn -UD \"$newroot\" -- /bin/passwd root"
|
|
||||||
echo "Boot system:"
|
|
||||||
echo " sudo systemd-nspawn -bUD \"$newroot\""
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
fetchFromGitHub,
|
|
||||||
stdenv,
|
|
||||||
lib,
|
|
||||||
}:
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
pname = "eta";
|
|
||||||
version = "git";
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "aioobe";
|
|
||||||
repo = "eta";
|
|
||||||
rev = "938f16bd088ce3d2a6f1bafbcdfd9a60d4d671ea";
|
|
||||||
hash = "sha256-rTXy1K4oDM1/NC6qpunDlyrEFyk93hkowrriuXODCMg=";
|
|
||||||
};
|
|
||||||
PREFIX = "";
|
|
||||||
installPhase = ''
|
|
||||||
make DESTDIR="$out" install
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "Generic tool for monitoring ETA and progress of an arbitrary process.";
|
|
||||||
homepage = "https://github.com/aioobe/eta";
|
|
||||||
license = lib.licenses.gpl3Only;
|
|
||||||
maintainers = [];
|
|
||||||
mainProgram = "eta";
|
|
||||||
platforms = lib.platforms.all;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,72 +0,0 @@
|
||||||
From b5e7381235ed64b58b267af8f796c50b01900464 Mon Sep 17 00:00:00 2001
|
|
||||||
From: xenia <xenia@awoo.systems>
|
|
||||||
Date: Wed, 20 Nov 2024 22:16:47 -0500
|
|
||||||
Subject: [PATCH] use PATH lookup for non-cado programs
|
|
||||||
|
|
||||||
---
|
|
||||||
scripts/cadofactor/cadoprograms.py | 9 +++++++++
|
|
||||||
1 file changed, 9 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/scripts/cadofactor/cadoprograms.py b/scripts/cadofactor/cadoprograms.py
|
|
||||||
index 6743480e1..946771f83 100755
|
|
||||||
--- a/scripts/cadofactor/cadoprograms.py
|
|
||||||
+++ b/scripts/cadofactor/cadoprograms.py
|
|
||||||
@@ -1,4 +1,5 @@
|
|
||||||
import os
|
|
||||||
+import shutil
|
|
||||||
import platform
|
|
||||||
import abc
|
|
||||||
import inspect
|
|
||||||
@@ -327,6 +328,8 @@ class Program(object, metaclass=InspectType):
|
|
||||||
# class attributes, which properties can't. Ergo dummy variables
|
|
||||||
binary = None
|
|
||||||
|
|
||||||
+ use_which = False
|
|
||||||
+
|
|
||||||
# This class variable definition should not be here. It gets overwritten
|
|
||||||
# when the InspectType meta-class creates the class object. The only purpose
|
|
||||||
# is to make pylint shut up about the class not having an init_signature
|
|
||||||
@@ -408,6 +411,8 @@ class Program(object, metaclass=InspectType):
|
|
||||||
self.execfile = execsubfile
|
|
||||||
elif os.path.isfile(execfile):
|
|
||||||
self.execfile = execfile
|
|
||||||
+ elif self.use_which and shutil.which(binary) is not None:
|
|
||||||
+ self.execfile = shutil.which(binary)
|
|
||||||
else:
|
|
||||||
self.execfile = os.sep.join([self.subdir, binary])
|
|
||||||
if not skip_check_binary_exists:
|
|
||||||
@@ -1251,6 +1256,7 @@ class SSH(Program):
|
|
||||||
binary = "ssh"
|
|
||||||
name = binary
|
|
||||||
path = "/usr/bin"
|
|
||||||
+ use_which = True
|
|
||||||
def __init__(self,
|
|
||||||
host: PositionalParameter(),
|
|
||||||
*args: PositionalParameter(),
|
|
||||||
@@ -1268,6 +1274,7 @@ class RSync(Program):
|
|
||||||
binary = "rsync"
|
|
||||||
name = binary
|
|
||||||
path = "/usr/bin"
|
|
||||||
+ use_which = True
|
|
||||||
def __init__(self,
|
|
||||||
sourcefile: PositionalParameter(),
|
|
||||||
remotefile: PositionalParameter(),
|
|
||||||
@@ -1278,6 +1285,7 @@ class Ls(Program):
|
|
||||||
binary = "ls"
|
|
||||||
name = binary
|
|
||||||
path = "/bin"
|
|
||||||
+ use_which = True
|
|
||||||
def __init__(self,
|
|
||||||
*args : PositionalParameter(),
|
|
||||||
long : Toggle('l')=None,
|
|
||||||
@@ -1288,6 +1296,7 @@ class Kill(Program):
|
|
||||||
binary = "kill"
|
|
||||||
name = binary
|
|
||||||
path = "/bin"
|
|
||||||
+ use_which = True
|
|
||||||
def __init__(self,
|
|
||||||
*args: PositionalParameter(),
|
|
||||||
signal: Parameter("s"),
|
|
||||||
--
|
|
||||||
2.44.2
|
|
||||||
|
|
|
@ -1,104 +0,0 @@
|
||||||
{
|
|
||||||
fetchFromGitLab,
|
|
||||||
lib,
|
|
||||||
stdenv,
|
|
||||||
|
|
||||||
# library deps
|
|
||||||
ecm,
|
|
||||||
gmp,
|
|
||||||
hwloc,
|
|
||||||
python3,
|
|
||||||
sqlite,
|
|
||||||
|
|
||||||
# runtime deps
|
|
||||||
openssh,
|
|
||||||
rsync,
|
|
||||||
util-linux,
|
|
||||||
coreutils,
|
|
||||||
|
|
||||||
# build deps
|
|
||||||
cmake,
|
|
||||||
curl,
|
|
||||||
inetutils,
|
|
||||||
perl,
|
|
||||||
|
|
||||||
makeBinaryWrapper,
|
|
||||||
|
|
||||||
# options
|
|
||||||
useArch ? "znver4",
|
|
||||||
useTune ? "znver4",
|
|
||||||
}: stdenv.mkDerivation rec {
|
|
||||||
pname = "cado-nfs";
|
|
||||||
git-rev = "bb65fdf0aaee0cea5e2da368bb87651d35d02603";
|
|
||||||
version = builtins.substring 0 7 git-rev;
|
|
||||||
|
|
||||||
src = fetchFromGitLab {
|
|
||||||
domain = "gitlab.inria.fr";
|
|
||||||
owner = pname;
|
|
||||||
repo = pname;
|
|
||||||
rev = git-rev;
|
|
||||||
hash = "sha256-Ao8nX9rZ0ky7MK5qXGgMe4N160sPN/En6h/YdeI2/JU=";
|
|
||||||
};
|
|
||||||
|
|
||||||
patches = [
|
|
||||||
./0001-use-PATH-lookup-for-non-cado-programs.patch
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
gmp
|
|
||||||
ecm
|
|
||||||
python3
|
|
||||||
sqlite
|
|
||||||
hwloc
|
|
||||||
];
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
cmake
|
|
||||||
inetutils
|
|
||||||
curl
|
|
||||||
perl
|
|
||||||
|
|
||||||
makeBinaryWrapper
|
|
||||||
];
|
|
||||||
|
|
||||||
NIX_CFLAGS_COMPILE = "-Wno-stringop-overflow"
|
|
||||||
+ (lib.optionalString (useArch != null) " -march=${useArch}")
|
|
||||||
+ (lib.optionalString (useTune != null) " -mtune=${useTune}");
|
|
||||||
|
|
||||||
postPatch = ''
|
|
||||||
patchShebangs --build .
|
|
||||||
'';
|
|
||||||
|
|
||||||
postConfigure = ''
|
|
||||||
patchShebangs --build .
|
|
||||||
'';
|
|
||||||
|
|
||||||
cadoBinPath = lib.makeBinPath [
|
|
||||||
openssh
|
|
||||||
rsync
|
|
||||||
util-linux
|
|
||||||
coreutils
|
|
||||||
];
|
|
||||||
|
|
||||||
postInstall = ''
|
|
||||||
wrapProgram $out/bin/cado-nfs-client.py \
|
|
||||||
--prefix PATH : ${cadoBinPath}
|
|
||||||
wrapProgram $out/bin/cado-nfs.py \
|
|
||||||
--prefix PATH : ${cadoBinPath}
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "Cado-NFS, An Implementation of the Number Field Sieve Algorithm";
|
|
||||||
longDescription = ''
|
|
||||||
CADO-NFS is a complete implementation in C/C++ of the Number Field Sieve (NFS) algorithm for
|
|
||||||
factoring integers and computing discrete logarithms in finite fields. It consists in various
|
|
||||||
programs corresponding to all the phases of the algorithm, and a general script that runs
|
|
||||||
them, possibly in parallel over a network of computers.
|
|
||||||
'';
|
|
||||||
homepage = "https://cado-nfs.gitlabpages.inria.fr/";
|
|
||||||
license = lib.licenses.lgpl21Plus;
|
|
||||||
maintainers = [];
|
|
||||||
mainProgram = "cado-nfs.py";
|
|
||||||
platforms = lib.platforms.all;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/j0r1vyd1hd43rjzaday70wny2lhjkc1p-satisfactory-dedicated-server-build-15636842
|
|
@ -1,26 +1,48 @@
|
||||||
From be4c852769e260e3a9b516bb5626a6a6a68a2cd3 Mon Sep 17 00:00:00 2001
|
From ffb6777d58f068db7e14372415154cd93f77766e Mon Sep 17 00:00:00 2001
|
||||||
From: roblabla <unfiltered@roblab.la>
|
From: roblabla <unfiltered@roblab.la>
|
||||||
Date: Wed, 31 Jan 2024 13:19:55 +0100
|
Date: Wed, 31 Jan 2024 13:19:55 +0100
|
||||||
Subject: [PATCH] Use com.google.protobuf:protobuf-gradle-plugin
|
Subject: [PATCH] Use com.google.protobuf:protobuf-gradle-plugin
|
||||||
|
|
||||||
---
|
---
|
||||||
|
Ghidra/Debug/Debugger-gadp/build.gradle | 7 +-
|
||||||
Ghidra/Debug/Debugger-isf/build.gradle | 8 +-
|
Ghidra/Debug/Debugger-isf/build.gradle | 8 +-
|
||||||
Ghidra/Debug/Debugger-rmi-trace/build.gradle | 16 ++--
|
Ghidra/Debug/Debugger-rmi-trace/build.gradle | 14 +--
|
||||||
build.gradle | 6 ++
|
build.gradle | 6 ++
|
||||||
gradle/hasProtobuf.gradle | 94 --------------------
|
gradle/debugger/hasProtobuf.gradle | 94 --------------------
|
||||||
4 files changed, 22 insertions(+), 102 deletions(-)
|
5 files changed, 26 insertions(+), 103 deletions(-)
|
||||||
delete mode 100644 gradle/hasProtobuf.gradle
|
|
||||||
|
|
||||||
diff --git a/Ghidra/Debug/Debugger-isf/build.gradle b/Ghidra/Debug/Debugger-isf/build.gradle
|
diff --git a/Ghidra/Debug/Debugger-gadp/build.gradle b/Ghidra/Debug/Debugger-gadp/build.gradle
|
||||||
index f6c8464405..396b52d188 100644
|
index 9e1c57faf..3a3242eb5 100644
|
||||||
--- a/Ghidra/Debug/Debugger-isf/build.gradle
|
--- a/Ghidra/Debug/Debugger-gadp/build.gradle
|
||||||
+++ b/Ghidra/Debug/Debugger-isf/build.gradle
|
+++ b/Ghidra/Debug/Debugger-gadp/build.gradle
|
||||||
@@ -18,11 +18,17 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
|
@@ -18,11 +18,16 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
|
||||||
apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
|
apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
|
||||||
apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
|
apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
|
||||||
apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
|
apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
|
||||||
-apply from: "${rootProject.projectDir}/gradle/hasProtobuf.gradle"
|
-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
|
||||||
|
+apply plugin: 'com.google.protobuf'
|
||||||
|
|
||||||
|
apply plugin: 'eclipse'
|
||||||
|
eclipse.project.name = 'Debug Debugger-gadp'
|
||||||
|
|
||||||
|
+buildscript {
|
||||||
|
+ dependencies {
|
||||||
|
+ classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
dependencies {
|
||||||
|
api project(':Framework-AsyncComm')
|
||||||
|
api project(':Framework-Debugging')
|
||||||
|
diff --git a/Ghidra/Debug/Debugger-isf/build.gradle b/Ghidra/Debug/Debugger-isf/build.gradle
|
||||||
|
index d135294a0..785681ca2 100644
|
||||||
|
--- a/Ghidra/Debug/Debugger-isf/build.gradle
|
||||||
|
+++ b/Ghidra/Debug/Debugger-isf/build.gradle
|
||||||
|
@@ -18,11 +18,15 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
|
||||||
|
-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
|
||||||
|
-
|
||||||
+apply plugin: 'com.google.protobuf'
|
+apply plugin: 'com.google.protobuf'
|
||||||
apply plugin: 'eclipse'
|
apply plugin: 'eclipse'
|
||||||
eclipse.project.name = 'Debug Debugger-isf'
|
eclipse.project.name = 'Debug Debugger-isf'
|
||||||
|
@ -30,22 +52,21 @@ index f6c8464405..396b52d188 100644
|
||||||
+ classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
|
+ classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
+
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api project(':Framework-AsyncComm')
|
api project(':Framework-AsyncComm')
|
||||||
api project(':ProposedUtils')
|
api project(':Framework-Debugging')
|
||||||
diff --git a/Ghidra/Debug/Debugger-rmi-trace/build.gradle b/Ghidra/Debug/Debugger-rmi-trace/build.gradle
|
diff --git a/Ghidra/Debug/Debugger-rmi-trace/build.gradle b/Ghidra/Debug/Debugger-rmi-trace/build.gradle
|
||||||
index 8b6589f035..05da5a7a7e 100644
|
index 40fbc17ab..7517ffe6e 100644
|
||||||
--- a/Ghidra/Debug/Debugger-rmi-trace/build.gradle
|
--- a/Ghidra/Debug/Debugger-rmi-trace/build.gradle
|
||||||
+++ b/Ghidra/Debug/Debugger-rmi-trace/build.gradle
|
+++ b/Ghidra/Debug/Debugger-rmi-trace/build.gradle
|
||||||
@@ -19,12 +19,17 @@ apply from: "${rootProject.projectDir}/gradle/helpProject.gradle"
|
@@ -18,12 +18,17 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
|
||||||
apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
|
apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
|
||||||
apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
|
apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
|
||||||
apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
|
apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
|
||||||
-apply from: "${rootProject.projectDir}/gradle/hasProtobuf.gradle"
|
-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
|
||||||
apply from: "${rootProject.projectDir}/gradle/hasPythonPackage.gradle"
|
|
||||||
-
|
|
||||||
+apply plugin: 'com.google.protobuf'
|
+apply plugin: 'com.google.protobuf'
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/debugger/hasPythonPackage.gradle"
|
||||||
|
|
||||||
apply plugin: 'eclipse'
|
apply plugin: 'eclipse'
|
||||||
eclipse.project.name = 'Debug Debugger-rmi-trace'
|
eclipse.project.name = 'Debug Debugger-rmi-trace'
|
||||||
|
|
||||||
|
@ -54,7 +75,6 @@ index 8b6589f035..05da5a7a7e 100644
|
||||||
+ classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
|
+ classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
+
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api project(':Pty')
|
api project(':Pty')
|
||||||
api project(':Debugger')
|
api project(':Debugger')
|
||||||
|
@ -74,11 +94,11 @@ index 8b6589f035..05da5a7a7e 100644
|
||||||
commandLine exe, "--python_out=$outdir", "-I$srcdir"
|
commandLine exe, "--python_out=$outdir", "-I$srcdir"
|
||||||
args src
|
args src
|
||||||
diff --git a/build.gradle b/build.gradle
|
diff --git a/build.gradle b/build.gradle
|
||||||
index 2d75307a08..aa8f1d7604 100644
|
index b0c717fb1..5f56506a5 100644
|
||||||
--- a/build.gradle
|
--- a/build.gradle
|
||||||
+++ b/build.gradle
|
+++ b/build.gradle
|
||||||
@@ -80,6 +80,12 @@ if (flatRepo.isDirectory()) {
|
@@ -74,6 +74,12 @@ if (flatRepo.isDirectory()) {
|
||||||
mavenCentral()
|
jcenter()
|
||||||
flatDir name: "flat", dirs:["$flatRepo"]
|
flatDir name: "flat", dirs:["$flatRepo"]
|
||||||
}
|
}
|
||||||
+ buildscript {
|
+ buildscript {
|
||||||
|
@ -90,11 +110,10 @@ index 2d75307a08..aa8f1d7604 100644
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
diff --git a/gradle/hasProtobuf.gradle b/gradle/hasProtobuf.gradle
|
diff --git a/gradle/debugger/hasProtobuf.gradle b/gradle/debugger/hasProtobuf.gradle
|
||||||
deleted file mode 100644
|
index 23b4ce74b..e69de29bb 100644
|
||||||
index 23b4ce74bb..0000000000
|
--- a/gradle/debugger/hasProtobuf.gradle
|
||||||
--- a/gradle/hasProtobuf.gradle
|
+++ b/gradle/debugger/hasProtobuf.gradle
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,94 +0,0 @@
|
@@ -1,94 +0,0 @@
|
||||||
-/* ###
|
-/* ###
|
||||||
- * IP: GHIDRA
|
- * IP: GHIDRA
|
||||||
|
@ -191,5 +210,5 @@ index 23b4ce74bb..0000000000
|
||||||
-}
|
-}
|
||||||
-zipSourceSubproject.dependsOn generateProto
|
-zipSourceSubproject.dependsOn generateProto
|
||||||
--
|
--
|
||||||
2.47.0
|
2.42.0
|
||||||
|
|
||||||
|
|
|
@ -1,103 +1,78 @@
|
||||||
{
|
{ lib
|
||||||
lib,
|
, stdenv
|
||||||
stdenv,
|
, unzip
|
||||||
unzip,
|
, jdk
|
||||||
jdk,
|
, gradle
|
||||||
gradle,
|
, ghidra
|
||||||
ghidra,
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
metaCommon =
|
metaCommon = oldMeta:
|
||||||
oldMeta:
|
oldMeta // (with lib; {
|
||||||
oldMeta
|
maintainers = (oldMeta.maintainers or []) ++ (with maintainers; [ vringar ]);
|
||||||
// {
|
|
||||||
maintainers =
|
|
||||||
(oldMeta.maintainers or [ ])
|
|
||||||
++ (with lib.maintainers; [
|
|
||||||
vringar
|
|
||||||
ivyfanchiang
|
|
||||||
]);
|
|
||||||
platforms = oldMeta.platforms or ghidra.meta.platforms;
|
platforms = oldMeta.platforms or ghidra.meta.platforms;
|
||||||
};
|
});
|
||||||
|
|
||||||
buildGhidraExtension =
|
buildGhidraExtension = {
|
||||||
{
|
pname, nativeBuildInputs ? [], meta ? { }, ...
|
||||||
pname,
|
}@args:
|
||||||
nativeBuildInputs ? [ ],
|
stdenv.mkDerivation (args // {
|
||||||
meta ? { },
|
nativeBuildInputs = nativeBuildInputs ++ [
|
||||||
...
|
unzip
|
||||||
}@args:
|
jdk
|
||||||
stdenv.mkDerivation (
|
gradle
|
||||||
args
|
];
|
||||||
// {
|
|
||||||
nativeBuildInputs = nativeBuildInputs ++ [
|
|
||||||
unzip
|
|
||||||
jdk
|
|
||||||
gradle
|
|
||||||
];
|
|
||||||
|
|
||||||
preBuild = ''
|
buildPhase = args.buildPhase or ''
|
||||||
# Set project name, otherwise defaults to directory name
|
runHook preBuild
|
||||||
echo -e '\nrootProject.name = "${pname}"' >> settings.gradle
|
|
||||||
# A config directory needs to exist when ghidra's GHelpBuilder is run
|
|
||||||
export XDG_CONFIG_HOME="''${XDG_CONFIG_HOME:-$(mktemp -d)}"
|
|
||||||
${args.preBuild or ""}
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Needed to run gradle on darwin
|
# Set project name, otherwise defaults to directory name
|
||||||
__darwinAllowLocalNetworking = true;
|
echo -e '\nrootProject.name = "${pname}"' >> settings.gradle
|
||||||
|
|
||||||
gradleBuildTask = args.gradleBuildTask or "buildExtension";
|
export GRADLE_USER_HOME=$(mktemp -d)
|
||||||
gradleFlags = args.gradleFlags or [ ] ++ [ "-PGHIDRA_INSTALL_DIR=${ghidra}/lib/ghidra" ];
|
gradle \
|
||||||
|
--offline \
|
||||||
|
--no-daemon \
|
||||||
|
-PGHIDRA_INSTALL_DIR=${ghidra}/lib/ghidra
|
||||||
|
|
||||||
installPhase =
|
runHook postBuild
|
||||||
args.installPhase or ''
|
'';
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
mkdir -p $out/lib/ghidra/Ghidra/Extensions
|
installPhase = args.installPhase or ''
|
||||||
unzip -d $out/lib/ghidra/Ghidra/Extensions dist/*.zip
|
runHook preInstall
|
||||||
|
|
||||||
runHook postInstall
|
mkdir -p $out/lib/ghidra/Ghidra/Extensions
|
||||||
'';
|
unzip -d $out/lib/ghidra/Ghidra/Extensions dist/*.zip
|
||||||
|
|
||||||
meta = metaCommon meta;
|
runHook postInstall
|
||||||
}
|
'';
|
||||||
);
|
|
||||||
|
|
||||||
buildGhidraScripts =
|
meta = metaCommon meta;
|
||||||
{
|
});
|
||||||
pname,
|
|
||||||
meta ? { },
|
|
||||||
...
|
|
||||||
}@args:
|
|
||||||
stdenv.mkDerivation (
|
|
||||||
args
|
|
||||||
// {
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
GHIDRA_HOME=$out/lib/ghidra/Ghidra/Extensions/${pname}
|
buildGhidraScripts = { pname, meta ? { }, ... }@args:
|
||||||
mkdir -p $GHIDRA_HOME
|
stdenv.mkDerivation (args // {
|
||||||
cp -r . $GHIDRA_HOME/ghidra_scripts
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
touch $GHIDRA_HOME/Module.manifest
|
GHIDRA_HOME=$out/lib/ghidra/Ghidra/Extensions/${pname}
|
||||||
cat <<'EOF' > extension.properties
|
mkdir -p $GHIDRA_HOME
|
||||||
name=${pname}
|
cp -r . $GHIDRA_HOME/ghidra_scripts
|
||||||
description=${meta.description or ""}
|
|
||||||
author=
|
|
||||||
createdOn=
|
|
||||||
version=${lib.getVersion ghidra}
|
|
||||||
|
|
||||||
EOF
|
touch $GHIDRA_HOME/Module.manifest
|
||||||
|
cat <<'EOF' > extension.properties
|
||||||
|
name=${pname}
|
||||||
|
description=${meta.description or ""}
|
||||||
|
author=
|
||||||
|
createdOn=
|
||||||
|
version=${lib.getVersion ghidra}
|
||||||
|
|
||||||
runHook postInstall
|
EOF
|
||||||
'';
|
|
||||||
|
|
||||||
meta = metaCommon meta;
|
runHook postInstall
|
||||||
}
|
'';
|
||||||
);
|
|
||||||
|
meta = metaCommon meta;
|
||||||
|
});
|
||||||
in
|
in
|
||||||
{
|
{ inherit buildGhidraExtension buildGhidraScripts; }
|
||||||
inherit buildGhidraExtension buildGhidraScripts;
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,9 +3,10 @@
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
lib,
|
lib,
|
||||||
callPackage,
|
callPackage,
|
||||||
gradle_8,
|
gradle_7,
|
||||||
|
perl,
|
||||||
makeBinaryWrapper,
|
makeBinaryWrapper,
|
||||||
openjdk21,
|
openjdk17,
|
||||||
unzip,
|
unzip,
|
||||||
makeDesktopItem,
|
makeDesktopItem,
|
||||||
copyDesktopItems,
|
copyDesktopItems,
|
||||||
|
@ -19,9 +20,7 @@
|
||||||
|
|
||||||
let
|
let
|
||||||
pname = "ghidra";
|
pname = "ghidra";
|
||||||
version = "11.3.2";
|
version = "11.1.1";
|
||||||
|
|
||||||
isMacArm64 = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64;
|
|
||||||
|
|
||||||
releaseName = "NIX";
|
releaseName = "NIX";
|
||||||
distroPrefix = "ghidra_${version}_${releaseName}";
|
distroPrefix = "ghidra_${version}_${releaseName}";
|
||||||
|
@ -29,7 +28,7 @@ let
|
||||||
owner = "NationalSecurityAgency";
|
owner = "NationalSecurityAgency";
|
||||||
repo = "Ghidra";
|
repo = "Ghidra";
|
||||||
rev = "Ghidra_${version}_build";
|
rev = "Ghidra_${version}_build";
|
||||||
hash = "sha256-EvIOC/VIUaEl7eneVzgEt2fhLSP9DaawMAutk4ouFp8=";
|
hash = "sha256-t96FcAK3JwO66dOf4OhpOfU8CQfAczfF61Cg7m+B3fA=";
|
||||||
# populate values that require us to use git. By doing this in postFetch we
|
# populate values that require us to use git. By doing this in postFetch we
|
||||||
# can delete .git afterwards and maintain better reproducibility of the src.
|
# can delete .git afterwards and maintain better reproducibility of the src.
|
||||||
leaveDotGit = true;
|
leaveDotGit = true;
|
||||||
|
@ -44,6 +43,8 @@ let
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gradle = gradle_7;
|
||||||
|
|
||||||
patches = [
|
patches = [
|
||||||
# Use our own protoc binary instead of the prebuilt one
|
# Use our own protoc binary instead of the prebuilt one
|
||||||
./0001-Use-protobuf-gradle-plugin.patch
|
./0001-Use-protobuf-gradle-plugin.patch
|
||||||
|
@ -65,7 +66,7 @@ let
|
||||||
echo "application.revision.ghidra=$(cat COMMIT)" >> Ghidra/application.properties
|
echo "application.revision.ghidra=$(cat COMMIT)" >> Ghidra/application.properties
|
||||||
|
|
||||||
# Tells ghidra to use our own protoc binary instead of the prebuilt one.
|
# Tells ghidra to use our own protoc binary instead of the prebuilt one.
|
||||||
tee -a Ghidra/Debug/Debugger-{isf,rmi-trace}/build.gradle <<HERE
|
cat >>Ghidra/Debug/Debugger-gadp/build.gradle <<HERE
|
||||||
protobuf {
|
protobuf {
|
||||||
protoc {
|
protoc {
|
||||||
path = '${protobuf}/bin/protoc'
|
path = '${protobuf}/bin/protoc'
|
||||||
|
@ -74,9 +75,69 @@ let
|
||||||
HERE
|
HERE
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# "Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0."
|
# Adds a gradle step that downloads all the dependencies to the gradle cache.
|
||||||
gradle = gradle_8;
|
addResolveStep = ''
|
||||||
|
cat >>build.gradle <<HERE
|
||||||
|
task resolveDependencies {
|
||||||
|
doLast {
|
||||||
|
project.rootProject.allprojects.each { subProject ->
|
||||||
|
subProject.buildscript.configurations.each { configuration ->
|
||||||
|
resolveConfiguration(subProject, configuration, "buildscript config \''${configuration.name}")
|
||||||
|
}
|
||||||
|
subProject.configurations.each { configuration ->
|
||||||
|
resolveConfiguration(subProject, configuration, "config \''${configuration.name}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void resolveConfiguration(subProject, configuration, name) {
|
||||||
|
if (configuration.canBeResolved) {
|
||||||
|
logger.info("Resolving project {} {}", subProject.name, name)
|
||||||
|
configuration.resolve()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HERE
|
||||||
|
'';
|
||||||
|
|
||||||
|
# fake build to pre-download deps into fixed-output derivation
|
||||||
|
# Taken from mindustry derivation.
|
||||||
|
deps = stdenv.mkDerivation {
|
||||||
|
pname = "${pname}-deps";
|
||||||
|
inherit version src patches;
|
||||||
|
|
||||||
|
postPatch = addResolveStep;
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
gradle
|
||||||
|
perl
|
||||||
|
] ++ lib.optional stdenv.isDarwin xcbuild;
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
export HOME="$NIX_BUILD_TOP/home"
|
||||||
|
mkdir -p "$HOME"
|
||||||
|
export JAVA_TOOL_OPTIONS="-Duser.home='$HOME'"
|
||||||
|
export GRADLE_USER_HOME="$HOME/.gradle"
|
||||||
|
|
||||||
|
# First, fetch the static dependencies.
|
||||||
|
gradle --no-daemon --info -Dorg.gradle.java.home=${openjdk17} -I gradle/support/fetchDependencies.gradle init
|
||||||
|
|
||||||
|
# Then, fetch the maven dependencies.
|
||||||
|
gradle --no-daemon --info -Dorg.gradle.java.home=${openjdk17} resolveDependencies
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
# perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
|
||||||
|
| perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/maven/$x/$3/$4/$5" #e' \
|
||||||
|
| sh
|
||||||
|
cp -r dependencies $out/dependencies
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
outputHashAlgo = "sha256";
|
||||||
|
outputHashMode = "recursive";
|
||||||
|
outputHash = "sha256-66gL4UFlBUo2JIEOXoF6tFvXtBdEX4b2MeSrV1b6Vg4=";
|
||||||
|
};
|
||||||
in
|
in
|
||||||
stdenv.mkDerivation (finalAttrs: {
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
inherit
|
inherit
|
||||||
|
@ -87,7 +148,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
postPatch
|
postPatch
|
||||||
;
|
;
|
||||||
|
|
||||||
outputs = [ "out" "lib" "doc" ];
|
outputs = ["bin" "out" "lib" "doc"];
|
||||||
|
|
||||||
# Don't create .orig files if the patch isn't an exact match.
|
# Don't create .orig files if the patch isn't an exact match.
|
||||||
patchFlags = [
|
patchFlags = [
|
||||||
|
@ -118,7 +179,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
python3
|
python3
|
||||||
python3Packages.pip
|
python3Packages.pip
|
||||||
]
|
]
|
||||||
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
++ lib.optionals stdenv.isDarwin [
|
||||||
xcbuild
|
xcbuild
|
||||||
desktopToDarwinBundle
|
desktopToDarwinBundle
|
||||||
];
|
];
|
||||||
|
@ -127,121 +188,54 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
|
|
||||||
__darwinAllowLocalNetworking = true;
|
__darwinAllowLocalNetworking = true;
|
||||||
|
|
||||||
mitmCache = gradle.fetchDeps {
|
buildPhase = ''
|
||||||
inherit pname;
|
runHook preBuild
|
||||||
data = ./deps.json;
|
export HOME="$NIX_BUILD_TOP/home"
|
||||||
};
|
mkdir -p "$HOME"
|
||||||
|
export JAVA_TOOL_OPTIONS="-Duser.home='$HOME'"
|
||||||
|
|
||||||
gradleFlags =
|
ln -s ${deps}/dependencies dependencies
|
||||||
[ "-Dorg.gradle.java.home=${openjdk21}" ]
|
|
||||||
++ lib.optionals isMacArm64 [
|
|
||||||
# For some reason I haven't been able to figure out yet, ghidra builds for
|
|
||||||
# arm64 seems to build the x64 binaries of the decompiler. These fail to
|
|
||||||
# build due to trying to link the x64 object files with arm64 stdc++
|
|
||||||
# library, which obviously fails.
|
|
||||||
#
|
|
||||||
# Those binaries are entirely unnecessary anyways, since we're targeting
|
|
||||||
# arm64 build here, so let's exclude them from the build.
|
|
||||||
"-x"
|
|
||||||
"Decompiler:linkSleighMac_x86_64Executable"
|
|
||||||
"-x"
|
|
||||||
"Decompiler:linkDecompileMac_x86_64Executable"
|
|
||||||
];
|
|
||||||
|
|
||||||
preBuild = ''
|
sed -i "s#mavenLocal()#mavenLocal(); maven { url '${deps}/maven' }#g" build.gradle
|
||||||
export JAVA_TOOL_OPTIONS="-Duser.home=$NIX_BUILD_TOP/home"
|
|
||||||
gradle -I gradle/support/fetchDependencies.gradle
|
gradle --offline --no-daemon --info -Dorg.gradle.java.home=${openjdk17} buildGhidra
|
||||||
|
runHook postBuild
|
||||||
'';
|
'';
|
||||||
|
|
||||||
gradleBuildTask = "buildGhidra";
|
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
runHook preInstall
|
runHook preInstall
|
||||||
|
|
||||||
mkdir -p "$lib/lib/ghidra" "$out/share/applications" "$doc/share/doc"
|
mkdir -p "$lib/lib/ghidra" "$bin/share/applications" "$doc/share/doc"
|
||||||
|
|
||||||
ZIP=build/dist/$(ls build/dist)
|
ZIP=build/dist/$(ls build/dist)
|
||||||
echo $ZIP
|
echo $ZIP
|
||||||
unzip $ZIP -d "$lib/lib/ghidra"
|
unzip $ZIP -d "$lib/lib/ghidra"
|
||||||
f=("$lib/lib/ghidra"/*)
|
f=("$lib/lib/ghidra"/*)
|
||||||
mv "$lib/lib/ghidra"/*/* "$lib/lib/ghidra"
|
mv "$lib/lib/ghidra"/*/* "$lib/lib/ghidra"
|
||||||
rmdir "''${f[@]}"
|
rmdir "''${f[@]}"
|
||||||
mv "$lib/lib/ghidra/docs" "$doc/share/doc/ghidra"
|
mv "$lib/lib/ghidra/docs" "$doc/share/doc/ghidra"
|
||||||
|
|
||||||
# the builtin help viewer needs the following to stay in-tree
|
|
||||||
mkdir "$lib/lib/ghidra/docs"
|
|
||||||
cp "$doc/share/doc/ghidra/WhatsNew.html" "$lib/lib/ghidra/docs"
|
|
||||||
cp "$doc/share/doc/ghidra/README_PDB.html" "$lib/lib/ghidra/docs"
|
|
||||||
|
|
||||||
for path in server/svrREADME.html support/GhidraGo/ghidraGoREADME.html support/analyzeHeadlessREADME.html support/buildGhidraJarREADME.txt; do
|
for path in server/svrREADME.html support/GhidraGo/ghidraGoREADME.html support/analyzeHeadlessREADME.html support/buildGhidraJarREADME.txt; do
|
||||||
out_path="$(basename "$path")"
|
out_path="$(basename "$path")"
|
||||||
mv "$lib/lib/ghidra/$path" "$doc/share/doc/ghidra/$out_path"
|
mv "$lib/lib/ghidra/$path" "$doc/share/doc/ghidra/$out_path"
|
||||||
done
|
done
|
||||||
unzip "$doc/share/doc/ghidra/GhidraAPI_javadoc.zip" -d "$doc/share/doc/ghidra"
|
|
||||||
rm "$doc/share/doc/ghidra/GhidraAPI_javadoc.zip"
|
|
||||||
|
|
||||||
for f in Ghidra/Framework/Gui/src/main/resources/images/GhidraIcon*.png; do
|
for f in Ghidra/Framework/Gui/src/main/resources/images/GhidraIcon*.png; do
|
||||||
res=$(basename "$f" ".png" | cut -d"_" -f3 | cut -c11-)
|
res=$(basename "$f" ".png" | cut -d"_" -f3 | cut -c11-)
|
||||||
install -Dm444 "$f" "$out/share/icons/hicolor/''${res}x''${res}/apps/ghidra.png"
|
install -Dm444 "$f" "$bin/share/icons/hicolor/''${res}x''${res}/apps/ghidra.png"
|
||||||
done;
|
done;
|
||||||
# improved macOS icon support
|
# improved macOS icon support
|
||||||
install -Dm444 Ghidra/Framework/Gui/src/main/resources/images/GhidraIcon64.png $out/share/icons/hicolor/32x32@2/apps/ghidra.png
|
install -Dm444 Ghidra/Framework/Gui/src/main/resources/images/GhidraIcon64.png $bin/share/icons/hicolor/32x32@2/apps/ghidra.png
|
||||||
|
|
||||||
runHook postInstall
|
runHook postInstall
|
||||||
'';
|
'';
|
||||||
|
|
||||||
postFixup =
|
postFixup = ''
|
||||||
let
|
mkdir -p "$bin/bin"
|
||||||
javaArgs = [
|
ln -s "$lib/lib/ghidra/ghidraRun" "$bin/bin/ghidra"
|
||||||
"-showversion"
|
wrapProgram "$lib/lib/ghidra/support/launch.sh" \
|
||||||
"-cp $lib/lib/ghidra/Ghidra/Framework/Utility/lib/Utility.jar"
|
--set-default NIX_GHIDRAHOME "$lib/lib/ghidra/Ghidra" \
|
||||||
|
--prefix PATH : ${lib.makeBinPath [ openjdk17 ]}
|
||||||
"-Djava.system.class.loader=ghidra.GhidraClassLoader"
|
'';
|
||||||
"-Xshare:off"
|
|
||||||
|
|
||||||
"-Dfile.encoding=UTF8"
|
|
||||||
"-Dpython.console.encoding=UTF-8"
|
|
||||||
|
|
||||||
"-Duser.country=US"
|
|
||||||
"-Duser.language=en"
|
|
||||||
"-Duser.variant="
|
|
||||||
|
|
||||||
"-Dsun.java2d.opengl=false"
|
|
||||||
"-Dfont.size.override="
|
|
||||||
|
|
||||||
"-Djdk.tls.client.protocols=TLSv1.2,TLSv1.3"
|
|
||||||
|
|
||||||
"-Dcpu.core.limit="
|
|
||||||
"-Dcpu.core.override="
|
|
||||||
] ++ (lib.optionals stdenv.hostPlatform.isDarwin [
|
|
||||||
"-Xdock:name=$APPNAME"
|
|
||||||
"-Declipse.filelock.disable=true"
|
|
||||||
"-Dapple.laf.useScreenMenuBar=false"
|
|
||||||
"-Dapple.awt.application.appearance=system"
|
|
||||||
]) ++ (lib.optionals stdenv.hostPlatform.isLinux [
|
|
||||||
"-Dsun.java2d.pmoffscreen=false"
|
|
||||||
"-Dsun.java2d.xrender=true"
|
|
||||||
"-Dsun.java2d.uiScale=1"
|
|
||||||
"-Dawt.useSystemAAFontSettings=on"
|
|
||||||
]);
|
|
||||||
in ''
|
|
||||||
mkdir -p "$out/bin"
|
|
||||||
|
|
||||||
APPNAME=Ghidra
|
|
||||||
makeWrapper "${openjdk21}/bin/java" "$out/bin/ghidra" \
|
|
||||||
--set-default NIX_GHIDRAHOME "$lib/lib/ghidra/Ghidra" \
|
|
||||||
--prefix PATH : ${lib.makeBinPath [ openjdk21 ]} \
|
|
||||||
--add-flags "${lib.strings.concatStringsSep " " javaArgs}" \
|
|
||||||
--add-flags "ghidra.Ghidra ghidra.GhidraRun"
|
|
||||||
|
|
||||||
APPNAME=Ghidra-Headless
|
|
||||||
makeWrapper "${openjdk21}/bin/java" "$out/bin/ghidra-analyzeHeadless" \
|
|
||||||
--set-default NIX_GHIDRAHOME "$lib/lib/ghidra/Ghidra" \
|
|
||||||
--prefix PATH : ${lib.makeBinPath [ openjdk21 ]} \
|
|
||||||
--add-flags "${lib.strings.concatStringsSep " " javaArgs}" \
|
|
||||||
--add-flags "-Xmx2G -XX:ParallelGCThreads=2 -XX:CICompilerCount=2" \
|
|
||||||
--add-flags "ghidra.Ghidra ghidra.app.util.headless.AnalyzeHeadless"
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit releaseName distroPrefix;
|
inherit releaseName distroPrefix;
|
||||||
|
@ -273,6 +267,6 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
roblabla
|
roblabla
|
||||||
vringar
|
vringar
|
||||||
];
|
];
|
||||||
broken = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64;
|
broken = stdenv.isDarwin && stdenv.isx86_64;
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
{ stdenv
|
||||||
|
, fetchzip
|
||||||
|
, lib
|
||||||
|
, makeWrapper
|
||||||
|
, autoPatchelfHook
|
||||||
|
, openjdk17
|
||||||
|
, pam
|
||||||
|
, makeDesktopItem
|
||||||
|
, icoutils
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
pkg_path = "$out/lib/ghidra";
|
||||||
|
|
||||||
|
desktopItem = makeDesktopItem {
|
||||||
|
name = "ghidra";
|
||||||
|
exec = "ghidra";
|
||||||
|
icon = "ghidra";
|
||||||
|
desktopName = "Ghidra";
|
||||||
|
genericName = "Ghidra Software Reverse Engineering Suite";
|
||||||
|
categories = [ "Development" ];
|
||||||
|
terminal = false;
|
||||||
|
startupWMClass = "ghidra-Ghidra";
|
||||||
|
};
|
||||||
|
|
||||||
|
in stdenv.mkDerivation rec {
|
||||||
|
pname = "ghidra";
|
||||||
|
version = "10.4";
|
||||||
|
versiondate = "20230928";
|
||||||
|
|
||||||
|
src = fetchzip {
|
||||||
|
url = "https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_${version}_build/ghidra_${version}_PUBLIC_${versiondate}.zip";
|
||||||
|
hash = "sha256-IiAQ9OKmr8ZgqmGftuW0ITdG06fb9Lr30n2H9GArctk=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
makeWrapper
|
||||||
|
icoutils
|
||||||
|
]
|
||||||
|
++ lib.optionals stdenv.isLinux [ autoPatchelfHook ];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
stdenv.cc.cc.lib
|
||||||
|
pam
|
||||||
|
];
|
||||||
|
|
||||||
|
dontStrip = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p "${pkg_path}"
|
||||||
|
mkdir -p "${pkg_path}" "$out/share/applications"
|
||||||
|
cp -a * "${pkg_path}"
|
||||||
|
ln -s ${desktopItem}/share/applications/* $out/share/applications
|
||||||
|
|
||||||
|
icotool -x "${pkg_path}/support/ghidra.ico"
|
||||||
|
rm ghidra_4_40x40x32.png
|
||||||
|
for f in ghidra_*.png; do
|
||||||
|
res=$(basename "$f" ".png" | cut -d"_" -f3 | cut -d"x" -f1-2)
|
||||||
|
mkdir -pv "$out/share/icons/hicolor/$res/apps"
|
||||||
|
mv "$f" "$out/share/icons/hicolor/$res/apps/ghidra.png"
|
||||||
|
done;
|
||||||
|
'';
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
mkdir -p "$out/bin"
|
||||||
|
ln -s "${pkg_path}/ghidraRun" "$out/bin/ghidra"
|
||||||
|
|
||||||
|
wrapProgram "${pkg_path}/support/launch.sh" \
|
||||||
|
--prefix PATH : ${lib.makeBinPath [ openjdk17 ]}
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Software reverse engineering (SRE) suite of tools developed by NSA's Research Directorate in support of the Cybersecurity mission";
|
||||||
|
mainProgram = "ghidra";
|
||||||
|
homepage = "https://github.com/NationalSecurityAgency/ghidra";
|
||||||
|
platforms = [ "x86_64-linux" "x86_64-darwin" ];
|
||||||
|
sourceProvenance = with sourceTypes; [ binaryBytecode ];
|
||||||
|
license = licenses.asl20;
|
||||||
|
maintainers = with maintainers; [ ck3d govanify mic92 ];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -1,840 +0,0 @@
|
||||||
{
|
|
||||||
"!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.",
|
|
||||||
"!version": 1,
|
|
||||||
"https://archive.eclipse.org": {
|
|
||||||
"tools/cdt/releases/8.6/cdt-8.6.0": {
|
|
||||||
"zip": "sha256-gbfRnVfEowCfR2FpmnLo1kK14dklHSu5jfQ4seKPi6k="
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"https://files.pythonhosted.org/packages": {
|
|
||||||
"05/71/590b2a91b43763aa27eac2c63803542a2878a4d8c600b81aa694d3fde919/jpype1-1.5.2-cp39-cp39-macosx_10_9_x86_64": {
|
|
||||||
"whl": "sha256-i3XTPpOjvGVD3fl8JO4K21qGpp+2fw5PT6HIw5cLv5g="
|
|
||||||
},
|
|
||||||
"0b/7d/9fdbbc1a574be43f9820735ca8df0caf8b159856201d9b21fd73932342bc/jpype1-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64": {
|
|
||||||
"whl": "sha256-uQDhVIJqB2EY0HQWZZbx2BfhE+BwhL8MnEPYBkqGq3c="
|
|
||||||
},
|
|
||||||
"0e/78/95db2eb3c8a7311ee08a2c237cea24828859db6a6cb5e901971d3f5e49da/jpype1-1.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64": {
|
|
||||||
"whl": "sha256-pUp3HuViYPmOW5p3RVCE5KSAYZZ94T2r9ii9upyBIuA="
|
|
||||||
},
|
|
||||||
"0e/b9/4dfb38a7f4efb21f71df7344944a8d9a23e30d0503574e455af6ce4f1a56/jpype1-1.5.2-cp311-cp311-win_amd64": {
|
|
||||||
"whl": "sha256-Cg0Y1DhLPfLlUoJUVzffzxjGBFBPE4KtFPiAvvlg8mU="
|
|
||||||
},
|
|
||||||
"20/a3/00a265d424f7d47e0dc547df2320225ce0143fec671faf710def41404b8c/jpype1-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64": {
|
|
||||||
"whl": "sha256-wISAx9GBJWZKEr8KJEuWtJwFEFMGtlk32+/rBatLKEc="
|
|
||||||
},
|
|
||||||
"22/18/0a51845ca890ffdc72f4d71a0c2be334b887c5bb6812207efe5ad45afcb3/jpype1-1.5.2-cp310-cp310-win_amd64": {
|
|
||||||
"whl": "sha256-kksKDPk9Pd2z95KG++QPjJAceO1hIW7b4QhmYjTfQ+A="
|
|
||||||
},
|
|
||||||
"27/d6/003e593296a85fd6ed616ed962795b2f87709c3eee2bca4f6d0fe55c6d00/wheel-0.37.1-py2.py3-none-any": {
|
|
||||||
"whl": "sha256-S9zX2EATgIYSbNCSVNxhlftPxvAcBQodcjbyYw2x0io="
|
|
||||||
},
|
|
||||||
"35/a0/638186a75026a02286041e4a0449b1dff799a3914dc1c0716ef9b9367b73/jpype1-1.5.2-cp311-cp311-macosx_10_9_universal2": {
|
|
||||||
"whl": "sha256-yfarjdKEwW4mF6aX1Uw9AwSwgCCjc4btlhA6EpORotk="
|
|
||||||
},
|
|
||||||
"50/8f/518a37381e55a8857a638afa86143efa5508434613541402d20611a1b322/comtypes-1.4.1-py3-none-any": {
|
|
||||||
"whl": "sha256-ogig48ocClNic12g/2YYIoAdzocxK4lNfXUq3QEKIbA="
|
|
||||||
},
|
|
||||||
"6d/d0/191db2e9ab6ae7029368a488c9d88235966843b185aba7925e54aa0c0013/jpype1-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64": {
|
|
||||||
"whl": "sha256-Qv6NtmrU5cZvY39cTegvyogLppYQTh9KfldYhZI96tg="
|
|
||||||
},
|
|
||||||
"74/dd/7408d4beae755de6fcd07c76b2f0bacabc0461b43fba83811c1f7c22440e/jpype1-1.5.2-cp312-cp312-win_amd64": {
|
|
||||||
"whl": "sha256-x7HC120hHKtgvhZQXTKms8n//FHOecaOgaPUjl7//y0="
|
|
||||||
},
|
|
||||||
"74/f3/1cd4332076ed0421e703412f47f15f43af170809435c57ba3162edc80d4b/jpype1-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64": {
|
|
||||||
"whl": "sha256-tbH7K0MKUPCB6g7iTRkjKuDQPb/j3QduxfiuQrMKZW8="
|
|
||||||
},
|
|
||||||
"76/be/b37005bec457b94eaaf637a663073b7c5df70113fd4ae4865f6e386c612f/jpype1-1.5.2-cp313-cp313-macosx_10_13_universal2": {
|
|
||||||
"whl": "sha256-SssJjLFpixS25ceeJ19McNzAGw+5NCXyBtCl44DkPGY="
|
|
||||||
},
|
|
||||||
"77/6b/130fb6d0c43976b4e129c6bc19daf0e25c42fc38c5096ed92c4105bfd2c4/jpype1-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64": {
|
|
||||||
"whl": "sha256-6iG8pM7OdSzT7oj81izo9ET+rI3HJER1/bnA6HEuB+o="
|
|
||||||
},
|
|
||||||
"77/91/f08a719461a390b48d9096b50f1f4a49ee281007ec192e51073090d3d8b7/jpype1-1.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64": {
|
|
||||||
"whl": "sha256-VHRCZe82Zl0RDROaS4HRBTJpTGB3sj72DzYJ/q3CLTA="
|
|
||||||
},
|
|
||||||
"83/1c/25b79fc3ec99b19b0a0730cc47356f7e2959863bf9f3cd314332bddb4f68/pywin32-306-cp312-cp312-win_amd64": {
|
|
||||||
"whl": "sha256-NyV3lMGtOe6b5lLaBGLcLjlMgVnf2ROopOjrb9NG2g4="
|
|
||||||
},
|
|
||||||
"8d/14/619e24a4c70df2901e1f4dbc50a6291eb63a759172558df326347dce1f0d/protobuf-3.20.3-py2.py3-none-any": {
|
|
||||||
"whl": "sha256-p8ptSIqo/38ynUxUWy262KwxRk8dixyHrRNGcXcx5Ns="
|
|
||||||
},
|
|
||||||
"8d/e4/0c27352e8222dcc0e3ce44b298015072d2057d08dd353541c980a31d26c9/jpype1-1.5.2-cp312-cp312-macosx_10_9_universal2": {
|
|
||||||
"whl": "sha256-Hh25rJCa0q4OQLBMKqiMsUJQ1SRdaXFVYVB2gfKwiy8="
|
|
||||||
},
|
|
||||||
"90/c7/6dc0a455d111f68ee43f27793971cf03fe29b6ef972042549db29eec39a2/psutil-5.9.8": {
|
|
||||||
"tar.gz": "sha256-a+Em4yJUht/yhqj7mgYkalJT9MfFO0depfWsk05kGUw="
|
|
||||||
},
|
|
||||||
"97/0a/cbe03759331c640aa5862f974028122a862b08935a0b11b8fa6f6e46c26b/jpype1-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64": {
|
|
||||||
"whl": "sha256-zcqTzHT42x9gTS6mrbdk3sTexoUo8e5oMI+j1SQJVzk="
|
|
||||||
},
|
|
||||||
"bd/68/47fa634cbd0418cbca86355e9421425f5892ee994f7338106327e49f9117/jpype1-1.5.2": {
|
|
||||||
"tar.gz": "sha256-dKQuzPIdMDlMGDKuw5haFJZfpTINoIe2UCnRcsDOxDs="
|
|
||||||
},
|
|
||||||
"c0/c6/63538d160c17e837f62d29ba4163bc444cef08c29cd3f3b8090691c1869c/jpype1-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64": {
|
|
||||||
"whl": "sha256-/PxcHUXWsQiADRcuqBe9pYXbfxZG1qmNFNqaymbg60Q="
|
|
||||||
},
|
|
||||||
"c7/42/be1c7bbdd83e1bfb160c94b9cafd8e25efc7400346cf7ccdbdb452c467fa/setuptools-68.0.0-py3-none-any": {
|
|
||||||
"whl": "sha256-EeUsZ0FaOB0Q1rRiztnPuXBmF58OhxOZ4AbEqxAfyF8="
|
|
||||||
},
|
|
||||||
"c7/f2/b2efcad1ea5a541f125218e4eb1529ebb8ca18941264c879f3e89a36dc35/jpype1-1.5.2-cp310-cp310-macosx_10_9_universal2": {
|
|
||||||
"whl": "sha256-ey2pjBQoEspAoYpzWzPkfGURsD3r8el5Yw9M9HO2ioc="
|
|
||||||
},
|
|
||||||
"ce/78/91db67e7fe1546dc8b02c38591b7732980373d2d252372f7358054031dd4/Pybag-2.2.12-py3-none-any": {
|
|
||||||
"whl": "sha256-7aXubE6HOQKYG39SW0KgJCi4fHNo3yxb3+He0OaIQSY="
|
|
||||||
},
|
|
||||||
"d0/dd/b28df50316ca193dd1275a4c47115a720796d9e1501c1888c4bfa5dc2260/capstone-5.0.1-py3-none-win_amd64": {
|
|
||||||
"whl": "sha256-G/pcgeaIDK9BoxlGzW0tBpwEi8wi7fEhJUtQGgSN5nU="
|
|
||||||
},
|
|
||||||
"e3/b7/e1787633b41d609320b41d0dd87fe3118598210609e4e3f6cef93cfcef40/jpype1-1.5.2-cp313-cp313-win_amd64": {
|
|
||||||
"whl": "sha256-K5Y2XxMC3y+zxq1zEX1v5FClW3VQ/X/sraw87FvHEXw="
|
|
||||||
},
|
|
||||||
"e5/cf/344e1f81f1e8c651ec23dfa9fe4b91f6e1d699b36f610a547ba85ee7fb16/jpype1-1.5.2-cp39-cp39-win_amd64": {
|
|
||||||
"whl": "sha256-aOHRGCAPxG9OpL8gkACBWH7ATeSEA3yZewo7fF63H+M="
|
|
||||||
},
|
|
||||||
"ec/1a/610693ac4ee14fcdf2d9bf3c493370e4f2ef7ae2e19217d7a237ff42367d/packaging-23.2-py3-none-any": {
|
|
||||||
"whl": "sha256-jEkRkAM6mvfh2THQtdrMLvR1CbNN0N5n7SCbUgP8iMc="
|
|
||||||
},
|
|
||||||
"fa/4c/e0200a6e3fed5cda79e926c2a8a610676f04948f89d7e38d93c7d4b21be9/jpype1-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64": {
|
|
||||||
"whl": "sha256-mU+3sxm0U/d61Lav8B4N1BgOp0pv5aAx5OnbktvpU3Y="
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"https://ftp.postgresql.org": {
|
|
||||||
"pub/source/v15.10/postgresql-15.10": {
|
|
||||||
"tar.gz": "sha256-FzNmYFJZqD3BicQyf/TDclSv7WW0+GbL2KXvLqRJ6PM="
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"https://github.com/NationalSecurityAgency/ghidra-data/raw/Ghidra_11.3.2": {
|
|
||||||
"FunctionID/vs2012_x64": {
|
|
||||||
"fidb": "sha256-1OmKs/eQuDF5MhhDC7oNiySl+/TaZbDB/6jLDPvrDNw="
|
|
||||||
},
|
|
||||||
"FunctionID/vs2012_x86": {
|
|
||||||
"fidb": "sha256-pJDtfi7SHlh0Wf6urOcDa37eTOhOcuEN/YxXQ0ppGLY="
|
|
||||||
},
|
|
||||||
"FunctionID/vs2015_x64": {
|
|
||||||
"fidb": "sha256-4E6eQPnstgHIX02E7Zv2a0U2O+HR6CwWLkyZArjLUI8="
|
|
||||||
},
|
|
||||||
"FunctionID/vs2015_x86": {
|
|
||||||
"fidb": "sha256-tm7mlmU+LtNlkZ3qrviFEDEgx5LiLnmvcNEgnX4dhkQ="
|
|
||||||
},
|
|
||||||
"FunctionID/vs2017_x64": {
|
|
||||||
"fidb": "sha256-1fpfaXKYF0+lPSR9NZnmoSiEYFrRgce5VOI4DsHwvYk="
|
|
||||||
},
|
|
||||||
"FunctionID/vs2017_x86": {
|
|
||||||
"fidb": "sha256-04nLjXb/SlnKNfiRuFIccq1fDfluJTlzotIahhSkzIE="
|
|
||||||
},
|
|
||||||
"FunctionID/vs2019_x64": {
|
|
||||||
"fidb": "sha256-FQAHeW/DakBpZgrWJEmq2q890Rs4ZKXvIeeYMcnOkRg="
|
|
||||||
},
|
|
||||||
"FunctionID/vs2019_x86": {
|
|
||||||
"fidb": "sha256-62MKNvqlhqNx63NNwLvY0TzK72l/PbWHJZY1jz3SQyo="
|
|
||||||
},
|
|
||||||
"FunctionID/vsOlder_x64": {
|
|
||||||
"fidb": "sha256-jDtR9GYM0n4aDWEKnz8tX7yDOmasnuQ5PuLySB6FWGY="
|
|
||||||
},
|
|
||||||
"FunctionID/vsOlder_x86": {
|
|
||||||
"fidb": "sha256-mGBca2uSFKlF2ETkHIWGDVRkmkW8p4c+9pkcDpNyB4c="
|
|
||||||
},
|
|
||||||
"lib/java-sarif-2.1-modified": {
|
|
||||||
"jar": "sha256-f3NlZklHVtJxql5LGvbIncUNB0qxxjdKR9+CImQiawE="
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"https://repo.maven.apache.org/maven2": {
|
|
||||||
"biz/aQute/bnd#biz.aQute.bnd.util/7.0.0": {
|
|
||||||
"jar": "sha256-OVddFQJJliqcbUbM5+Zy53fIqGIKHS0iDH8sCnmediM=",
|
|
||||||
"pom": "sha256-+dgDJLl2Hp3ipFoP6naPWZRH9AxuQZ8gje2MrxIYAMU="
|
|
||||||
},
|
|
||||||
"biz/aQute/bnd#biz.aQute.bndlib/7.0.0": {
|
|
||||||
"jar": "sha256-gKVp0AbzLpJc7kzor5Jrfm/aqqtcy/1f5MnN/5xN0t8=",
|
|
||||||
"pom": "sha256-mOuywO2iBtxb79bFJsjCAneApDvymekXyzwDXwOYp9I="
|
|
||||||
},
|
|
||||||
"com/beust#jcommander/1.64": {
|
|
||||||
"jar": "sha256-FWvnNhmcmQMh2f93CQsZlinPyYZeLWwT980pG7FkGBc=",
|
|
||||||
"pom": "sha256-F84MMunPlTZ4+CCuXyrZLu85bYQPZn/JnyOtwK0l0yg="
|
|
||||||
},
|
|
||||||
"com/formdev#flatlaf/3.5.4": {
|
|
||||||
"jar": "sha256-PDS2rrLxcKlUxDWGR+tDtotEeiw1H/MRBy9xV6XU4v4=",
|
|
||||||
"module": "sha256-Rjx10DAKwDblv9OLBqPx8Ua/17YdoyYael79bebtqdU=",
|
|
||||||
"pom": "sha256-ymv/5ynY3zr6lZQM0Wz/dL4eiHIHGP5hCsD+Jv4XsWA="
|
|
||||||
},
|
|
||||||
"com/github/rotty3000#phidias/0.3.7": {
|
|
||||||
"jar": "sha256-yNB2DOOw7RRT1DW83THjTwvjrAkCTn4amLijzr9Ka7U=",
|
|
||||||
"pom": "sha256-FY+kDQZfFCR5B7aSIiRY152eFjsTz1tfrHvgIkLMK60="
|
|
||||||
},
|
|
||||||
"com/github/tomnelson#jungrapht-layout/1.4": {
|
|
||||||
"jar": "sha256-owQBKdw57SMms2yhXGNEIu5XmkYXhmj5lELjiz5gcJk=",
|
|
||||||
"pom": "sha256-TO0lLb8YrUWTvoW6bWycCdvB7tZEjZtZneziavTnyN4="
|
|
||||||
},
|
|
||||||
"com/github/tomnelson#jungrapht-visualization-parent/1.4": {
|
|
||||||
"pom": "sha256-s5gyFq8VA62ryVOkKXKO1kpORbvDj++2wgOiiUPCq+w="
|
|
||||||
},
|
|
||||||
"com/github/tomnelson#jungrapht-visualization/1.4": {
|
|
||||||
"jar": "sha256-lwU6HdLNqyY/tWEfG8grhiswmflR480FZOPiPRk/Tdg=",
|
|
||||||
"pom": "sha256-YE8saHqHsq0L90QETPJmynWuKdPPCa383C5WEjDOtoY="
|
|
||||||
},
|
|
||||||
"com/google/code/findbugs#jsr305/3.0.2": {
|
|
||||||
"jar": "sha256-dmrSoHg/JoeWLIrXTO7MOKKLn3Ki0IXuQ4t4E+ko0Mc=",
|
|
||||||
"pom": "sha256-GYidvfGyVLJgGl7mRbgUepdGRIgil2hMeYr+XWPXjf4="
|
|
||||||
},
|
|
||||||
"com/google/code/gson#gson-parent/2.9.0": {
|
|
||||||
"pom": "sha256-r3gcmldm/+oxGg3wU2V2pk3sxmGqEQxN5cc6yL9DRCQ="
|
|
||||||
},
|
|
||||||
"com/google/code/gson#gson/2.9.0": {
|
|
||||||
"jar": "sha256-yW1gVRMxoZbaxUt0WqZCzQeO+JtvJnFGtwXywsvvBS0=",
|
|
||||||
"pom": "sha256-cZDQsH8njp9MYD9E5UOUD4HPGiVZ+FHG8pjJuyvil4w="
|
|
||||||
},
|
|
||||||
"com/google/errorprone#error_prone_annotations/2.2.0": {
|
|
||||||
"jar": "sha256-br0iyhudjsBtQd6NZOBZaYHZYHtCA1+e03T53icaSBo=",
|
|
||||||
"pom": "sha256-XgJY6huk5RoTN0JoC8IkSPerIUvkBz6GGfZF7xvkLdU="
|
|
||||||
},
|
|
||||||
"com/google/errorprone#error_prone_annotations/2.21.1": {
|
|
||||||
"jar": "sha256-0fPGaqkaxSVJ4Arjsgi6S5r31y1o8jBkNVO+s45hGKw=",
|
|
||||||
"pom": "sha256-9ZiID+766p1nTcQdsTqzcAS/A3drW7IcBN7ejpIMHxI="
|
|
||||||
},
|
|
||||||
"com/google/errorprone#error_prone_parent/2.2.0": {
|
|
||||||
"pom": "sha256-xGCQLd9ezmiDLGsnHOUqCSiwXPOmrIGo9UjHPL1UETg="
|
|
||||||
},
|
|
||||||
"com/google/errorprone#error_prone_parent/2.21.1": {
|
|
||||||
"pom": "sha256-MrsLX/JB/Wuh/upEiuu5zt7xaZvnPLbzGTZTh7gr+Sw="
|
|
||||||
},
|
|
||||||
"com/google/gradle#osdetector-gradle-plugin/1.7.0": {
|
|
||||||
"jar": "sha256-29oheMFO1rk6GEsay/ONchBwAiUmaMERz0EeyjfkHKY=",
|
|
||||||
"pom": "sha256-6BYywu6apI5+zwVHUSwcOGVgwNRqlY7lBVD3693xNRc="
|
|
||||||
},
|
|
||||||
"com/google/guava#failureaccess/1.0.1": {
|
|
||||||
"jar": "sha256-oXHuTHNN0tqDfksWvp30Zhr6typBra8x64Tf2vk2yiY=",
|
|
||||||
"pom": "sha256-6WBCznj+y6DaK+lkUilHyHtAopG1/TzWcqQ0kkEDxLk="
|
|
||||||
},
|
|
||||||
"com/google/guava#guava-parent/19.0": {
|
|
||||||
"pom": "sha256-O3b/Q+zfEPdNo25KritHDJ0GPgU8XKAm9VEq6U8cPhA="
|
|
||||||
},
|
|
||||||
"com/google/guava#guava-parent/26.0-android": {
|
|
||||||
"pom": "sha256-+GmKtGypls6InBr8jKTyXrisawNNyJjUWDdCNgAWzAQ="
|
|
||||||
},
|
|
||||||
"com/google/guava#guava-parent/27.0.1-jre": {
|
|
||||||
"pom": "sha256-MX6IKRJi4M8oBelWwYhQ8dRWXIXC4REvXZ0Iqxcy5pY="
|
|
||||||
},
|
|
||||||
"com/google/guava#guava-parent/27.1-android": {
|
|
||||||
"pom": "sha256-1oF79aZ2AKOTpoA9UfR8159KXth1cqg3K++S4nNRgXI="
|
|
||||||
},
|
|
||||||
"com/google/guava#guava-parent/32.1.3-jre": {
|
|
||||||
"pom": "sha256-8oPB8EiXqaiKP6T/RoBOZeghFICaCc0ECUv33gGxhXs="
|
|
||||||
},
|
|
||||||
"com/google/guava#guava/19.0": {
|
|
||||||
"pom": "sha256-rdwGTafxB3/fTckOWqqIfNeQhQ0bdP4ubiXV94VRrGM="
|
|
||||||
},
|
|
||||||
"com/google/guava#guava/27.0.1-jre": {
|
|
||||||
"jar": "sha256-4cgU/QRJKifDjgMX6r6qGz6VDsgBAjnkAP6QrWyRB7Q=",
|
|
||||||
"pom": "sha256-ao3QQfI6a7FKhuRA/MuZNTe2InE1eg2sCjyw/zkVjzY="
|
|
||||||
},
|
|
||||||
"com/google/guava#guava/27.1-android": {
|
|
||||||
"pom": "sha256-KUYNJundBml2Ak+RJoMlzxHzkScNiPi1MewGQqNbwNw="
|
|
||||||
},
|
|
||||||
"com/google/guava#guava/32.1.3-jre": {
|
|
||||||
"jar": "sha256-bU4rWhGKq2Lm5eKdGFoCJO7YLIXECsPTPPBKJww7N0Q=",
|
|
||||||
"module": "sha256-9f/3ZCwS52J7wUKJ/SZ+JgLBf5WQ4jUiw+YxB/YcKUI=",
|
|
||||||
"pom": "sha256-cA5tRudbWTmiKkHCXsK7Ei88vvTv7UXjMS/dy+mT2zM="
|
|
||||||
},
|
|
||||||
"com/google/guava#listenablefuture/9999.0-empty-to-avoid-conflict-with-guava": {
|
|
||||||
"jar": "sha256-s3KgN9QjCqV/vv/e8w/WEj+cDC24XQrO0AyRuXTzP5k=",
|
|
||||||
"pom": "sha256-GNSx2yYVPU5VB5zh92ux/gXNuGLvmVSojLzE/zi4Z5s="
|
|
||||||
},
|
|
||||||
"com/google/j2objc#j2objc-annotations/1.1": {
|
|
||||||
"jar": "sha256-KZSn63jycQvT07+2ObLJTiGc7awNTQhNUW54wW3d7PY=",
|
|
||||||
"pom": "sha256-8MmMVx6Tp8tN0Y3w+jCPCWPnoGIKwtQkTmHnCdA61r4="
|
|
||||||
},
|
|
||||||
"com/google/j2objc#j2objc-annotations/2.8": {
|
|
||||||
"jar": "sha256-8CqV+hpele2z7YWf0Pt99wnRIaNSkO/4t03OKrf01u0=",
|
|
||||||
"pom": "sha256-N/h3mLGDhRE8kYv6nhJ2/lBzXvj6hJtYAMUZ1U2/Efg="
|
|
||||||
},
|
|
||||||
"com/google/protobuf#protobuf-bom/3.21.8": {
|
|
||||||
"pom": "sha256-+7Ds/DyjGFddtifjOuRUwT1qTcp68UXRTT9m4IY8PPo="
|
|
||||||
},
|
|
||||||
"com/google/protobuf#protobuf-gradle-plugin/0.8.18": {
|
|
||||||
"jar": "sha256-RP2JrzepsvHdQcCUqbtzPAe/f8eg4jhooQuvbjUfpeA=",
|
|
||||||
"pom": "sha256-Gwqekab09LYqWmB4wibudwqo3FdnueRzwvwY8KOImAQ="
|
|
||||||
},
|
|
||||||
"com/google/protobuf#protobuf-java/3.21.8": {
|
|
||||||
"jar": "sha256-C4WBrYENLfrv0Nz78VabFFBEhlAjjX4v1rF2yTLQjJU=",
|
|
||||||
"pom": "sha256-OJBUBuApx6MYaW8O4RnFXM7HizN+oR5MMZWfDgardAg="
|
|
||||||
},
|
|
||||||
"com/google/protobuf#protobuf-parent/3.21.8": {
|
|
||||||
"pom": "sha256-bHKyrDl1sAnR5FdQlVnp+onyV4vShD3LTWo+XPgRFws="
|
|
||||||
},
|
|
||||||
"com/h2database#h2/2.2.220": {
|
|
||||||
"jar": "sha256-l4q4YwGNP5ZeOIgFccNik+qLEKgIYZQVnE1dILUPClc=",
|
|
||||||
"pom": "sha256-tbp8XBcINbyupnWMWfo8EOvNepx5LiWzm4a559X72Mo="
|
|
||||||
},
|
|
||||||
"com/opencsv#opencsv/5.4": {
|
|
||||||
"jar": "sha256-n94e8+VEQE406u4V5L97p0uANV15gJOwUk1jpZk2JCs=",
|
|
||||||
"pom": "sha256-uGQpmn0KIQIKgxaZQ499P4VAirJKNOkR+qmf9oTrdv0="
|
|
||||||
},
|
|
||||||
"com/oracle/labs/olcut#olcut-config-protobuf/5.2.0": {
|
|
||||||
"jar": "sha256-xmqG5GT9gi9xzu6JuSU3l8Pc/fZWxNsr+W2kceuXs8o=",
|
|
||||||
"pom": "sha256-JCBA8xgQ+I6pnGF7RUBrhmdtOvJa7jzZIoysQpd0zmk="
|
|
||||||
},
|
|
||||||
"com/oracle/labs/olcut#olcut-core/5.2.0": {
|
|
||||||
"jar": "sha256-5T6OCQrUJo0iqlPgaCu76rHIHiyoRBP6Q2AqQWP2vhk=",
|
|
||||||
"pom": "sha256-G912ta/r+7rg+FHQjJ46WmgwP40cMHY4rxuChHVvCgM="
|
|
||||||
},
|
|
||||||
"com/oracle/labs/olcut#olcut/5.2.0": {
|
|
||||||
"pom": "sha256-SRIriefVQhUkr5IsQrsnF0x7vhL2oKKWwiEJgIUW/B4="
|
|
||||||
},
|
|
||||||
"commons-beanutils#commons-beanutils/1.9.4": {
|
|
||||||
"jar": "sha256-fZOMgXiQKARcCMBl6UvnX8KAUnYg1b1itRnVg4UyNoo=",
|
|
||||||
"pom": "sha256-w1zKe2HUZ42VeMvAuQG4cXtTmr+SVEQdp4uP5g3gZNA="
|
|
||||||
},
|
|
||||||
"commons-collections#commons-collections/3.2.2": {
|
|
||||||
"jar": "sha256-7urpF5FxRKaKdB1MDf9mqlxcX9hVk/8he87T/Iyng7g=",
|
|
||||||
"pom": "sha256-1dgfzCiMDYxxHDAgB8raSqmiJu0aES1LqmTLHWMiFws="
|
|
||||||
},
|
|
||||||
"commons-io#commons-io/2.11.0": {
|
|
||||||
"jar": "sha256-lhsvbYfbrMXVSr9Fq3puJJX4m3VZiWLYxyPOqbwhCQg=",
|
|
||||||
"pom": "sha256-LgFv1+MkS18sIKytg02TqkeQSG7h5FZGQTYaPoMe71k="
|
|
||||||
},
|
|
||||||
"commons-lang#commons-lang/2.6": {
|
|
||||||
"jar": "sha256-UPEbCfh3wpTVbyRGP0fSj5Kc9QRPZIZhwPDPuumi9Jw=",
|
|
||||||
"pom": "sha256-7Xa4iRwwtWYonHQ2Vvik1DWYaYJDjUDFZ8YmIzJH5xE="
|
|
||||||
},
|
|
||||||
"commons-logging#commons-logging/1.2": {
|
|
||||||
"jar": "sha256-2t3qHqC+D1aXirMAa4rJKDSv7vvZt+TmMW/KV98PpjY=",
|
|
||||||
"pom": "sha256-yRq1qlcNhvb9B8wVjsa8LFAIBAKXLukXn+JBAHOfuyA="
|
|
||||||
},
|
|
||||||
"de/femtopedia/dex2jar#d2j-base-cmd/2.4.24": {
|
|
||||||
"jar": "sha256-npdgWaiU74QPoAMunrk+psr60vGphpifoMXqcbvZFJ0=",
|
|
||||||
"module": "sha256-65mjqSTi2DV/NXoU2RN9XX8KH0FODoH9EfVBqInq2Bs=",
|
|
||||||
"pom": "sha256-s8X4M7/XHInxWe+0DG5BtsU0qglCXme9YIQxdW0cUzk="
|
|
||||||
},
|
|
||||||
"de/femtopedia/dex2jar#d2j-external/2.4.24": {
|
|
||||||
"jar": "sha256-PVAlQnJ6wWlu6/vwttvaU4uppYIq8r9LvgtgLvAsChA=",
|
|
||||||
"pom": "sha256-iurxTkKYs3mHap/0Bshvlvb1ItTNRgX/UHVb+9Wr6nw="
|
|
||||||
},
|
|
||||||
"de/femtopedia/dex2jar#dex-ir/2.4.24": {
|
|
||||||
"jar": "sha256-5wB1C3kGWPqw1ceC9oofvcWH74op+LMsgWv5JdKUWQA=",
|
|
||||||
"module": "sha256-bwx56rQdiS++RQReuV/x6+XW9kW/j75D1TkmjCfCP6I=",
|
|
||||||
"pom": "sha256-UpoS1s+bSCpK6lMusffK4pf96ez+/EzG3Toy5BFom+A="
|
|
||||||
},
|
|
||||||
"de/femtopedia/dex2jar#dex-reader-api/2.4.24": {
|
|
||||||
"jar": "sha256-gJvNGdys1pm6BILCdNMgtp0uFHEJh1uMVXcpquWTxKw=",
|
|
||||||
"module": "sha256-9KsAw3EWGfByHsgc5PMoSI0NSHkMqmJHg23KLqmFYBQ=",
|
|
||||||
"pom": "sha256-TwVdir25YI+lmnUa4LHLa5MCMxZzXj34idrMGQugXcc="
|
|
||||||
},
|
|
||||||
"de/femtopedia/dex2jar#dex-reader/2.4.24": {
|
|
||||||
"jar": "sha256-Sh8LEZ7oU/27K55XzBBziskG0RGotrAjTaePSNzrGrI=",
|
|
||||||
"module": "sha256-qlKoHHLESSxUL/oUZVts5tBwsB4CRmi/Yu5di6WHETY=",
|
|
||||||
"pom": "sha256-Z6TS45BHREEwK1Y9RvHU9B6plqXMKOvslFq9XG29vJ0="
|
|
||||||
},
|
|
||||||
"de/femtopedia/dex2jar#dex-translator/2.4.24": {
|
|
||||||
"jar": "sha256-1Uvxla4E3v1KbMQBv1hkTTTOKccAuVOl8A9/HXsD2lU=",
|
|
||||||
"module": "sha256-0KGW3NUxqnpbEZCwyypcG6BhF137Ey2S3P5a0pCpF9s=",
|
|
||||||
"pom": "sha256-YQbcNXGfyXyPjDoBP0w3Dn4genKLKQu8bdSwiaezL5s="
|
|
||||||
},
|
|
||||||
"javax/help#javahelp/2.0.05": {
|
|
||||||
"jar": "sha256-/PSSLTj/hRhPHSMoMXu2CCbhTalIq9YG7j1bjGpw3r0=",
|
|
||||||
"pom": "sha256-uIEr4lGsoTl/S2pCO/Tt06KERONFOyIDtTSTNrmVgik="
|
|
||||||
},
|
|
||||||
"junit#junit/4.12": {
|
|
||||||
"jar": "sha256-WXIfCAXiI9hLkGd4h9n/Vn3FNNfFAsqQPAwrF/BcEWo=",
|
|
||||||
"pom": "sha256-kPFj944/+28cetl96efrpO6iWAcUG4XW0SvmfKJUScQ="
|
|
||||||
},
|
|
||||||
"kr/motd/maven#os-maven-plugin/1.7.0": {
|
|
||||||
"jar": "sha256-lDBTUBpCnlPRxNYhUu7BJfo2Yg4NxmtzkKiVCXz96s4=",
|
|
||||||
"pom": "sha256-xPVqjuqlJp76BdsB4xMJBf9b24frKuPnZhVOmuoYO6Y="
|
|
||||||
},
|
|
||||||
"msv#isorelax/20050913": {
|
|
||||||
"jar": "sha256-NCcVJDHPf5Z/kuaeXKwWFHxdj7S05ainL1KReI78/4w=",
|
|
||||||
"pom": "sha256-u54IxYm/b2BxTQ+dMcLtdwPK9nf+muOSFrzKt3SkfNk="
|
|
||||||
},
|
|
||||||
"msv#msv/20050913": {
|
|
||||||
"jar": "sha256-FL46VQ5QhDO0/hB3XVQOnrWLPvBO10Vrx8fShckMh6I=",
|
|
||||||
"pom": "sha256-eoaknOHugXmjgCLiMZHkjPW1fkEEr2tXSJ3bjN7GoNY="
|
|
||||||
},
|
|
||||||
"msv#relaxngDatatype/20050913": {
|
|
||||||
"jar": "sha256-TUWpPrXNwyYxlmZzyVS4P8m2CgaBu93O+ixJdtBM3fI=",
|
|
||||||
"pom": "sha256-F/kF72gZZRismj53oNXlGY1g9D/8kEsiCcoEZhfyLfk="
|
|
||||||
},
|
|
||||||
"msv#xsdlib/20050913": {
|
|
||||||
"jar": "sha256-a476GP9XDAkW2nAsRpBrnooTnhwF2/Hk2L3rokTBsrM=",
|
|
||||||
"pom": "sha256-Ti8Z4AifVdrd/gOXbyhwCXvAaJcWVQ/p3r10KwrKZ5Y="
|
|
||||||
},
|
|
||||||
"net/java/dev/javacc#javacc/5.0": {
|
|
||||||
"jar": "sha256-cRExYbyM9mQVFVQcKBgCi4fHjsLo/6p1MXaG7giWe4k=",
|
|
||||||
"pom": "sha256-lBZg1Hgi+cDYDUDqBtSYH83CuHzGJTgbVF79fmtEnO8="
|
|
||||||
},
|
|
||||||
"net/java/dev/jna#jna-platform/5.14.0": {
|
|
||||||
"jar": "sha256-rkys6zhAcwwlN/m3+1WgG6ulgChrQSKVFIi87lWMJEk=",
|
|
||||||
"pom": "sha256-bLoOBPnuyxZIYAB5O7J+EDsPTQSF4FVOK0wK7RPS7RY="
|
|
||||||
},
|
|
||||||
"net/java/dev/jna#jna/5.14.0": {
|
|
||||||
"jar": "sha256-NO0eHyf6iWvKUNvE6ZzzcylnzsOHp6DV40hsCWc/6MY=",
|
|
||||||
"pom": "sha256-4E4llRUB3yWtx7Hc22xTNzyUiXuE0+FJISknY+4Hrj0="
|
|
||||||
},
|
|
||||||
"net/java/dev/timingframework#timingframework/1.0": {
|
|
||||||
"jar": "sha256-dGHpJGw7BRkWRaf5TBBGgMwxhlu02RIIKsAv93Egz0s=",
|
|
||||||
"pom": "sha256-EHm33r9dRb/PyG6euBCvHRhqN11glaDpHKKM2a8pwtA="
|
|
||||||
},
|
|
||||||
"net/sf/jung#jung-algorithms/2.1.1": {
|
|
||||||
"jar": "sha256-7ROOL2srLxOvYaE/F4i85vHeiFjELucKfUHmKDk3owo=",
|
|
||||||
"pom": "sha256-INw/C+7taPkCw/AtO6qJ8eI0xNSWeyIS15HBjw/a6Qs="
|
|
||||||
},
|
|
||||||
"net/sf/jung#jung-api/2.1.1": {
|
|
||||||
"jar": "sha256-bLc1ljw21RVdDeXxmgNIW5om5nVQ4WCz3YkAmm9RaU4=",
|
|
||||||
"pom": "sha256-3vtMVoVkg6Trdxnh4WiqYKtjnkPJJRKGZYNzLyPxOgs="
|
|
||||||
},
|
|
||||||
"net/sf/jung#jung-graph-impl/2.1.1": {
|
|
||||||
"jar": "sha256-SRHaBNd7T3u0ZaZa48w6AAyuTVK1h5EePAtMS2Q0k8E=",
|
|
||||||
"pom": "sha256-DXLiLd6PiBAEu7aagzjuxtnpGTlg9BRDOBlhYPhJqLQ="
|
|
||||||
},
|
|
||||||
"net/sf/jung#jung-parent/2.1.1": {
|
|
||||||
"pom": "sha256-os5T0/ynH/HQQ3FfmhowSo5KrhwGRa2QOMrkxSE2i+Q="
|
|
||||||
},
|
|
||||||
"net/sf/jung#jung-visualization/2.1.1": {
|
|
||||||
"jar": "sha256-kzuibCMIw79FZsOCiXm2itdCJyRXFxLlrw3odr3/oq4=",
|
|
||||||
"pom": "sha256-ayUROtpk+JgoOQmGsyWE0nNsBE+7iVz1Bo6BQWo9l+w="
|
|
||||||
},
|
|
||||||
"net/sf/sevenzipjbinding#sevenzipjbinding-all-platforms/16.02-2.01": {
|
|
||||||
"jar": "sha256-cvq1Op0x4W1lP+H0AAEdAqf2vGqR6GNLXPrVzhXUZ7s=",
|
|
||||||
"pom": "sha256-u3FCxepITF/phCbcFezhuYu/3UZTRWqI2idCHXJnAmU="
|
|
||||||
},
|
|
||||||
"net/sf/sevenzipjbinding#sevenzipjbinding/16.02-2.01": {
|
|
||||||
"jar": "sha256-Ezyj9pyMc12Jl8CUd1BPSKny5h6ntwSzcUqQZrHvuI4=",
|
|
||||||
"pom": "sha256-pdF4WGwNvc4V3cKlKBaE04ek8jW10bklWzls7TaWhcE="
|
|
||||||
},
|
|
||||||
"org/antlr#ST4/4.0.8": {
|
|
||||||
"jar": "sha256-WMqrxAyfdLC1mT/YaOD2SlDAdZCU5qJRqq+tmO38ejs=",
|
|
||||||
"pom": "sha256-PAiQ3scRdOs7o9QEyp40GQH/awQhgIsAcTsNuxMGwXw="
|
|
||||||
},
|
|
||||||
"org/antlr#antlr-master/3.5.2": {
|
|
||||||
"pom": "sha256-QtkaUx6lEA6wm1QaoALDuQjo8oK9c7bi9S83HvEzG9Y="
|
|
||||||
},
|
|
||||||
"org/antlr#antlr-runtime/3.5.2": {
|
|
||||||
"jar": "sha256-zj/I7LEPOemjzdy7LONQ0nLZzT0LHhjm/nPDuTichzQ=",
|
|
||||||
"pom": "sha256-RqnCIAu4sSvXEkqnpQl/9JCZkIMpyFGgTLIFFCCqfyU="
|
|
||||||
},
|
|
||||||
"org/antlr#antlr/3.5.2": {
|
|
||||||
"jar": "sha256-WsNsKs+woPPTfa/iC1tXDyZD4tAAxkjURQPCc4vmQ98=",
|
|
||||||
"pom": "sha256-Bl5egGYv64WHldPAH3cUJHvdMZRZcF7hOxpLGWj6IuQ="
|
|
||||||
},
|
|
||||||
"org/apache#apache/13": {
|
|
||||||
"pom": "sha256-/1E9sDYf1BI3vvR4SWi8FarkeNTsCpSW+BEHLMrzhB0="
|
|
||||||
},
|
|
||||||
"org/apache#apache/16": {
|
|
||||||
"pom": "sha256-n4X/L9fWyzCXqkf7QZ7n8OvoaRCfmKup9Oyj9J50pA4="
|
|
||||||
},
|
|
||||||
"org/apache#apache/19": {
|
|
||||||
"pom": "sha256-kfejMJbqabrCy69tAf65NMrAAsSNjIz6nCQLQPHsId8="
|
|
||||||
},
|
|
||||||
"org/apache#apache/21": {
|
|
||||||
"pom": "sha256-rxDBCNoBTxfK+se1KytLWjocGCZfoq+XoyXZFDU3s4A="
|
|
||||||
},
|
|
||||||
"org/apache#apache/23": {
|
|
||||||
"pom": "sha256-vBBiTgYj82V3+sVjnKKTbTJA7RUvttjVM6tNJwVDSRw="
|
|
||||||
},
|
|
||||||
"org/apache#apache/27": {
|
|
||||||
"pom": "sha256-srD8aeIqZQw4kvHDZtdwdvKVdcZzjfTHpwpEhESEzfk="
|
|
||||||
},
|
|
||||||
"org/apache#apache/7": {
|
|
||||||
"pom": "sha256-E5fOHbQzrcnyI9vwdJbRM2gUSHUfSuKeWPaOePtLbCU="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-collections4/4.1": {
|
|
||||||
"jar": "sha256-sf6LWWi1fYRlQlNX7S2dxpVQRRi+0t9bVlxLjmjByKU=",
|
|
||||||
"pom": "sha256-wK1C6RA1N5YNmnTaWOzCTdGjehPR5MSPCWm+k+QBg2k="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-collections4/4.4": {
|
|
||||||
"jar": "sha256-Hfi5QwtcjtFD14FeQD4z71NxskAKrb6b2giDdi4IRtE=",
|
|
||||||
"pom": "sha256-JxvWc4Oa9G5zr/lX4pGNS/lvWsT2xs9NW+k/0fEnHE0="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-compress/1.21": {
|
|
||||||
"jar": "sha256-auz9VFlyillWAc+gcljRMZcv/Dm0kutIvdWWV3ovJEo=",
|
|
||||||
"pom": "sha256-Z1uwI8m+7d4yMpSZebl0Kl/qlGKApVobRi1Mp4AQiM0="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-dbcp2/2.9.0": {
|
|
||||||
"jar": "sha256-iHcgkSxcu83/bg4h1QNJN1Vfj/xZc4Hv+Pp38zzm1k4=",
|
|
||||||
"pom": "sha256-XtPwH1ee+0xru81m9VnpwV6ZwUCVeeAZG7pUHF/meYY="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-lang3/3.11": {
|
|
||||||
"pom": "sha256-mA1mXYP+0EZlE08FeOUHRCoOdQaRBzeEORsKeYhySnU="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-lang3/3.12.0": {
|
|
||||||
"jar": "sha256-2RnZBEhsA3+NGTQS2gyS4iqfokIwudZ6V4VcXDHH6U4=",
|
|
||||||
"pom": "sha256-gtMfHcxFg+/9dE6XkWWxbaZL+GvKYj/F0bA+2U9FyFo="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-lang3/3.9": {
|
|
||||||
"pom": "sha256-pAIkKbmEJbQwGBkVchJ5pS9hDzRki9rEh9TKy76N/rU="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-parent/17": {
|
|
||||||
"pom": "sha256-lucYuvU0h07mLOTULeJl8t2s2IORpUDgMNWdmPp8RAg="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-parent/34": {
|
|
||||||
"pom": "sha256-Oi5p0G1kHR87KTEm3J4uTqZWO/jDbIfgq2+kKS0Et5w="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-parent/38": {
|
|
||||||
"pom": "sha256-VY2WF0Xrrcxdw5HP3n1HQIbUyq7iTdPm35Me2fa1tJU="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-parent/39": {
|
|
||||||
"pom": "sha256-h80n4aAqXD622FBZzphpa7G0TCuLZQ8FZ8ht9g+mHac="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-parent/47": {
|
|
||||||
"pom": "sha256-io7LVwVTv58f+uIRqNTKnuYwwXr+WSkzaPunvZtC/Lc="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-parent/48": {
|
|
||||||
"pom": "sha256-Hh996TcKe3kB8Sjx2s0UIr504/R/lViw954EwGN8oLQ="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-parent/51": {
|
|
||||||
"pom": "sha256-m3edGLItjeVZYFVY57sKCjGz8Awqu5yHgRfDmKrKvso="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-parent/52": {
|
|
||||||
"pom": "sha256-ddvo806Y5MP/QtquSi+etMvNO18QR9VEYKzpBtu0UC4="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-parent/54": {
|
|
||||||
"pom": "sha256-AA2Bh5UrIjcC/eKW33mVY/Nd6CznKttOe/FXNCN4++M="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-pool2/2.11.1": {
|
|
||||||
"jar": "sha256-6gUF7nUV5YsawOaG5NGl2ffYCOJRphvDcaoFlbmWP4M=",
|
|
||||||
"pom": "sha256-wbsCmUpK34loDfepitujPFUnaDAUJy1liFuzA27NSMM="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-text/1.10.0": {
|
|
||||||
"jar": "sha256-dwzZA/p7YE0ffve6F/hBCGZylLK0eL6O0a87/7SuABg=",
|
|
||||||
"pom": "sha256-OI3VI0i6GEKqOK64l8kdJwsUZh64daIP2YAxU1qydWc="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-text/1.8": {
|
|
||||||
"pom": "sha256-9s/bqlnHCtfj/r5xTgkRmQFWrAkFKV2PKjt1HgXlmhI="
|
|
||||||
},
|
|
||||||
"org/apache/commons#commons-text/1.9": {
|
|
||||||
"pom": "sha256-n5IWz8lE3KeC5jEdYnV/13Fk/mfaKbWPAVaH+gn0QFA="
|
|
||||||
},
|
|
||||||
"org/apache/felix#felix-parent/6": {
|
|
||||||
"pom": "sha256-Ngi2sgD2yPSIx3zBWYR9UV5pZugzO4XY4E45Sgk7VZU="
|
|
||||||
},
|
|
||||||
"org/apache/felix#org.apache.felix.framework/7.0.5": {
|
|
||||||
"jar": "sha256-q6cpMsX/5S0a6ftzVBVHS8gwX9BPBQ6FHzqPZ9oYNP0=",
|
|
||||||
"pom": "sha256-CBAm1JP4dt+OsPPxyPhdpyy+N99VeDPpaLQMMNrL/Kk="
|
|
||||||
},
|
|
||||||
"org/apache/logging#logging-parent/3": {
|
|
||||||
"pom": "sha256-djouwrgJTUFh3rbCZLEmIIW5vjC/OjHCzhNyQuV3Iqc="
|
|
||||||
},
|
|
||||||
"org/apache/logging/log4j#log4j-api/2.17.1": {
|
|
||||||
"jar": "sha256-sNikyKtPuLGIjQCVgicDsObUeTxBlVAgPanmkZYWHeQ=",
|
|
||||||
"pom": "sha256-HirO8yILKb4QrgmXKLFYsY2UP5Ghk8xFAbtC+SnB6Io="
|
|
||||||
},
|
|
||||||
"org/apache/logging/log4j#log4j-core/2.17.1": {
|
|
||||||
"jar": "sha256-yWfyI0h5gLk2TpSnx/mooB/T7nwZvb8LD5+MuFEfPUE=",
|
|
||||||
"pom": "sha256-C7s79tTSKhv6PDwJJ8KUEK8UoPsm47Ark3JvXH6Yqv0="
|
|
||||||
},
|
|
||||||
"org/apache/logging/log4j#log4j/2.17.1": {
|
|
||||||
"pom": "sha256-lnq8AkRDqcsJaTVVmvXprW8P9hN1+Esn1EDS+nCAawk="
|
|
||||||
},
|
|
||||||
"org/bouncycastle#bcpkix-jdk15on/1.69": {
|
|
||||||
"jar": "sha256-QIN20Xqqh4nnrNBV/kBCiaEfozX9fGinUykEn7fSjtI=",
|
|
||||||
"pom": "sha256-WrvkytLCMJR0ZvsgmiJn48xqDTgKajGRWVnTqtm4F2w="
|
|
||||||
},
|
|
||||||
"org/bouncycastle#bcprov-jdk15on/1.69": {
|
|
||||||
"jar": "sha256-5Gm9Ofk2mZ8lYAJjEAP/AioilR2p1b2Xicer+pdjopI=",
|
|
||||||
"pom": "sha256-/YHicUSVvOeeauazAp2s0kzyz/NAJB2lgQVYlae6eN4="
|
|
||||||
},
|
|
||||||
"org/bouncycastle#bcutil-jdk15on/1.69": {
|
|
||||||
"jar": "sha256-KeQOJGbQQNgqbw6ZY10LwrujqUJRz3k5zwtpMhyu/Ak=",
|
|
||||||
"pom": "sha256-p2e8fzQtGTKJfso8i6zHAEygOAv6dSnyOpc0VJZcffw="
|
|
||||||
},
|
|
||||||
"org/checkerframework#checker-compat-qual/2.5.2": {
|
|
||||||
"pom": "sha256-da9ztewybj29yUayH9RoAtXafGEsO/Hlh1N0yY1+pP0="
|
|
||||||
},
|
|
||||||
"org/checkerframework#checker-qual/2.5.2": {
|
|
||||||
"jar": "sha256-ZLAmkci51OdwD47i50Lc5+osboHmYrdSLJ7jv1aMBAo=",
|
|
||||||
"pom": "sha256-3EzUOKNkYtATwjOMjiBtECoyKgDzNynolV7iGYWcnt4="
|
|
||||||
},
|
|
||||||
"org/checkerframework#checker-qual/3.37.0": {
|
|
||||||
"jar": "sha256-5M4TdswnNeHd4iC2KtCRP1EpdwTarRVaM/OGvF2w2fc=",
|
|
||||||
"module": "sha256-clinadyqJrmBVNIp2FzHLls2ZrC8tjfS2vFuxJiVZjg=",
|
|
||||||
"pom": "sha256-AjkvvUziGQH5RWFUcrHU1NNZGzqr3wExBfXJLsMstPA="
|
|
||||||
},
|
|
||||||
"org/checkerframework#checker-qual/3.42.0": {
|
|
||||||
"jar": "sha256-zK7dM68LeJTZ8vO2RPTRnkOSjjKQLmGsTRB3eDD1qsc=",
|
|
||||||
"module": "sha256-4PpiK33mPq4RBH726RtMKtDx8OE8uQP/UggKR/V6V0Y=",
|
|
||||||
"pom": "sha256-v1/KqycvVMvPG753w72WPIIcmrrSBYcIvwvtPIdUlMo="
|
|
||||||
},
|
|
||||||
"org/codehaus#codehaus-parent/3": {
|
|
||||||
"pom": "sha256-UOslOs0LbuBI9DLZ/Do7NiZO+z2h/6f7B/bE1LeoyjE="
|
|
||||||
},
|
|
||||||
"org/codehaus/mojo#animal-sniffer-annotations/1.17": {
|
|
||||||
"jar": "sha256-kmVPST7P7FIILnY1Tw6/h2SNw9XOwuPDzblHwBZ0elM=",
|
|
||||||
"pom": "sha256-6VarXS60j6uuEjANDNLTKU1KKkGrwgaMI8tNYK12y+U="
|
|
||||||
},
|
|
||||||
"org/codehaus/mojo#animal-sniffer-annotations/1.9": {
|
|
||||||
"jar": "sha256-zZb+60fzSyVZcEcV23sXmgOjch+dxAksNFxxjim0LeQ=",
|
|
||||||
"pom": "sha256-/nEJDiNXjdGapqj+9Rhvz6WPSPgHBnKprIlFhis7fz0="
|
|
||||||
},
|
|
||||||
"org/codehaus/mojo#animal-sniffer-parent/1.17": {
|
|
||||||
"pom": "sha256-GKA98W4qGExYLbexJWM8Fft3FAJ6hMG1MtcpM9wIuB8="
|
|
||||||
},
|
|
||||||
"org/codehaus/mojo#animal-sniffer-parent/1.9": {
|
|
||||||
"pom": "sha256-nyDSRN5e5OZQmbJ3tpiE7xr4EROcAJcl3TzPqPsaxjs="
|
|
||||||
},
|
|
||||||
"org/codehaus/mojo#mojo-parent/28": {
|
|
||||||
"pom": "sha256-WrbfH5JfxhOX3y0XNSu8mK8UZOhT7SF+CeU9IKMm9wc="
|
|
||||||
},
|
|
||||||
"org/codehaus/mojo#mojo-parent/40": {
|
|
||||||
"pom": "sha256-/GSNzcQE+L9m4Fg5FOz5gBdmGCASJ76hFProUEPLdV4="
|
|
||||||
},
|
|
||||||
"org/commonmark#commonmark-ext-footnotes/0.23.0": {
|
|
||||||
"jar": "sha256-YwKKfV6V7sjibuBCSxQfh+nalccYTypaSbtD371TsQQ=",
|
|
||||||
"pom": "sha256-zMoEy/7Z60gzSM+6aexh9gvdyfPjwJJLZLsZ0cqy4s0="
|
|
||||||
},
|
|
||||||
"org/commonmark#commonmark-ext-heading-anchor/0.23.0": {
|
|
||||||
"jar": "sha256-7O27O1jbcgxhNXwb4boTKlweeczr4B8NPZo25VJCDL0=",
|
|
||||||
"pom": "sha256-95zHry5Zpgc70UwPNKezU0JDO5FxqhdLYzeHRaVuASw="
|
|
||||||
},
|
|
||||||
"org/commonmark#commonmark-parent/0.23.0": {
|
|
||||||
"pom": "sha256-zEC+Twqn9Lw5BEquYQVT5BfyYRkHNJVqXJl/Q50Tw94="
|
|
||||||
},
|
|
||||||
"org/commonmark#commonmark/0.23.0": {
|
|
||||||
"jar": "sha256-spUGEYOcwMDG4lwIPjprIpXrwyeDLsBzPn2bvJTnTrM=",
|
|
||||||
"pom": "sha256-3mdvxdpEpo0CntlaCSuJPVbo/ElogKIx5HHl1bKzvhY="
|
|
||||||
},
|
|
||||||
"org/fusesource#fusesource-pom/1.12": {
|
|
||||||
"pom": "sha256-xA2WDarc73sBwbHGZXr7rE//teUxaPj8sLKLhOb9zKE="
|
|
||||||
},
|
|
||||||
"org/fusesource/jansi#jansi/2.3.2": {
|
|
||||||
"jar": "sha256-+dWXnFx7oxN8d/QYR16wIYn4/Ip1+nP/w/8dEv6UVWc=",
|
|
||||||
"pom": "sha256-ywU3vsxjUsFUcz22+v0JAPlYRgOgsLnPjyJFVjEs2+E="
|
|
||||||
},
|
|
||||||
"org/hamcrest#hamcrest-core/1.3": {
|
|
||||||
"jar": "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=",
|
|
||||||
"pom": "sha256-/eOGp5BRc6GxA95quCBydYS1DQ4yKC4nl3h8IKZP+pM="
|
|
||||||
},
|
|
||||||
"org/hamcrest#hamcrest-parent/1.3": {
|
|
||||||
"pom": "sha256-bVNflO+2Y722gsnyelAzU5RogAlkK6epZ3UEvBvkEps="
|
|
||||||
},
|
|
||||||
"org/hamcrest#hamcrest/2.2": {
|
|
||||||
"jar": "sha256-XmKEaonwXNeM2cGlU/NA0AJFg4DDIEVd0fj8VJeoocE=",
|
|
||||||
"pom": "sha256-s2E3N2xLP8923DN+KhvFtpGirBqpZqtdJiCak4EvpX0="
|
|
||||||
},
|
|
||||||
"org/jacoco#org.jacoco.agent/0.8.11": {
|
|
||||||
"jar": "sha256-0+2F3qeKntVYRqdzjjoMoVxwLGYe5LyMv+Aqi59KmcA=",
|
|
||||||
"pom": "sha256-FuBen0liG4fFPmk1AUDzxG1C2WbGepM730sGOiscj8U="
|
|
||||||
},
|
|
||||||
"org/jacoco#org.jacoco.ant/0.8.11": {
|
|
||||||
"jar": "sha256-gdfriJDZvjCpOWEsKVYDVBBjUpzdA6UyZaunRHS3C3w=",
|
|
||||||
"pom": "sha256-ftED2VnQzue6v7Ewf6bkUbFpb/01JwYVU7VQ3lUgHYU="
|
|
||||||
},
|
|
||||||
"org/jacoco#org.jacoco.build/0.8.11": {
|
|
||||||
"pom": "sha256-W4SxXPLu8+WeuRvCJ4SDMQCwnfmRHjMZAww7xki9iws="
|
|
||||||
},
|
|
||||||
"org/jacoco#org.jacoco.core/0.8.11": {
|
|
||||||
"jar": "sha256-/NGIxohHP8jcwMbKrzVeeziVAiQ1J8M7lZej7Ch5H0c=",
|
|
||||||
"pom": "sha256-u2E18Qo2NJy4SlYA/Yz3P8EpahNbLxStzYPejPJMq7E="
|
|
||||||
},
|
|
||||||
"org/jacoco#org.jacoco.report/0.8.11": {
|
|
||||||
"jar": "sha256-g5MpWuJGgO0QytgzOQcED5KLhxMySRWBylvHhOLLT74=",
|
|
||||||
"pom": "sha256-jjtzR3nV4/1oPsAVQT1S+WGYTFDLkEX9orI7/160I4E="
|
|
||||||
},
|
|
||||||
"org/jdom#jdom-legacy/1.1.3": {
|
|
||||||
"jar": "sha256-Ar1hpyXor5sBdrQ78pgW0MdIuKuVE4W9EnvjdIkyWgo=",
|
|
||||||
"pom": "sha256-bWWTi3CxFyMBy0LY5l7gVzpXHtOfOvEBOp5ukp/flow="
|
|
||||||
},
|
|
||||||
"org/jgrapht#jgrapht-core/1.5.1": {
|
|
||||||
"jar": "sha256-pNgQy2Pgp3p1PRRwlP6p3ULoLPxXqiifn4UinyYEO7Q=",
|
|
||||||
"pom": "sha256-KknxKWxTwJ4OCiVdogMgVq3fKlu6WFyAF3Eg/IELQRM="
|
|
||||||
},
|
|
||||||
"org/jgrapht#jgrapht-io/1.5.1": {
|
|
||||||
"jar": "sha256-hsf8ZswZB7/CazZtTdKSzQ2ihr3h/QiKEcDZcp1tzFw=",
|
|
||||||
"pom": "sha256-jMvAH5otyMV0llX6FSck3dJ8FIIpxWeV+CC7V6GEp4g="
|
|
||||||
},
|
|
||||||
"org/jgrapht#jgrapht/1.5.1": {
|
|
||||||
"pom": "sha256-X9k28p0qw4blfbTL+JtZLFth3GpA03qhUw9eVLNQx9I="
|
|
||||||
},
|
|
||||||
"org/jheaps#jheaps/0.13": {
|
|
||||||
"jar": "sha256-Y0FCkMNJf4rA8QIgkgcIjexG/UdH4PVqJsaTCOhcZBU=",
|
|
||||||
"pom": "sha256-SH2xJbFxCY4/qDOFNaxZR2kirCxFK1ehTTz2YfIohDA="
|
|
||||||
},
|
|
||||||
"org/jline#jline-builtins/3.20.0": {
|
|
||||||
"jar": "sha256-prFPiYOXb7Sd67PZ6KFb+V9yTXFp8TFaYu+lin+omeI=",
|
|
||||||
"pom": "sha256-9T2EkbSNrQfnIR8M5BIhS5un25YmYZAxsqhvgMgrZrE="
|
|
||||||
},
|
|
||||||
"org/jline#jline-parent/3.20.0": {
|
|
||||||
"pom": "sha256-cXjGACAsS8Jux6S2IlXu829wVsrSpeYjnFdL7qXCEMo="
|
|
||||||
},
|
|
||||||
"org/jline#jline-reader/3.20.0": {
|
|
||||||
"jar": "sha256-rNHJTR4iiqe3li9psh7Tqf2CjrOmPkuvkIaVTmJq8fA=",
|
|
||||||
"pom": "sha256-2fF+3XIcAqExcgN21sB4eHgutrb6/rX/QkBKtXFD4TY="
|
|
||||||
},
|
|
||||||
"org/jline#jline-style/3.20.0": {
|
|
||||||
"jar": "sha256-C7ERYF4BAM6E05YfMLQNqgiOnC7FxnHn75D0L2rdBrY=",
|
|
||||||
"pom": "sha256-48nFXt7Ob0ru5jplYjiaS++NA1j6iq3GdKPeZR4w4ao="
|
|
||||||
},
|
|
||||||
"org/jline#jline-terminal-jansi/3.20.0": {
|
|
||||||
"jar": "sha256-wX/++o8GDa79OPJXRAcOQI9LrFPD6BOuoZKMxgcmD+Q=",
|
|
||||||
"pom": "sha256-Q3JhhBr0j5oZT9WygHJSCKds+jzKFgBAx6QoDrAn2+s="
|
|
||||||
},
|
|
||||||
"org/jline#jline-terminal/3.20.0": {
|
|
||||||
"jar": "sha256-EhJRcOeVUZum3IAQwHC1PHaq6StIXB43Uw5Uq13QjUM=",
|
|
||||||
"pom": "sha256-EMo7z1F48YUH8hCmOtljeJaFM0OtHBKRoBmhFvIWpUg="
|
|
||||||
},
|
|
||||||
"org/junit#junit-bom/5.7.1": {
|
|
||||||
"module": "sha256-mFTjiU1kskhSB+AEa8oHs9QtFp54L0+oyc4imnj67gQ=",
|
|
||||||
"pom": "sha256-C5sUo9YhBvr+jGinF7h7h60YaFiZRRt1PAT6QbaFd4Q="
|
|
||||||
},
|
|
||||||
"org/junit#junit-bom/5.7.2": {
|
|
||||||
"module": "sha256-87zrHFndT2mT9DBN/6WAFyuN9lp2zTb6T9ksBXjSitg=",
|
|
||||||
"pom": "sha256-zRSqqGmZH4ICHFhdVw0x/zQry6WLtEIztwGTdxuWSHs="
|
|
||||||
},
|
|
||||||
"org/junit#junit-bom/5.8.0-M1": {
|
|
||||||
"module": "sha256-vgUUcTA6UD9MIkZwdbJ0kEE3fd1tWoywc53tZ9kW2C0=",
|
|
||||||
"pom": "sha256-dxREMv/Gi9mKeQqxBpYZ2RAyz8Dk4TwIFjqgPaNv1uI="
|
|
||||||
},
|
|
||||||
"org/junit#junit-bom/5.9.0": {
|
|
||||||
"module": "sha256-oFTq9QFrWLvN6GZgREp8DdPiyvhNKhrV/Ey1JZecGbk=",
|
|
||||||
"pom": "sha256-2D6H8Wds3kQZHuxc2mkEkjkvJpI7HkmBSMpznf7XUpU="
|
|
||||||
},
|
|
||||||
"org/junit#junit-bom/5.9.1": {
|
|
||||||
"module": "sha256-kCbBZWaQ+hRa117Og2dCEaoSrYkwqRsQfC9c3s4vGxw=",
|
|
||||||
"pom": "sha256-sWPBz8j8H9WLRXoA1YbATEbphtdZBOnKVMA6l9ZbSWw="
|
|
||||||
},
|
|
||||||
"org/osgi#org.osgi.core/5.0.0": {
|
|
||||||
"jar": "sha256-tEDGv/KGMyr89crgZ7YGli52HA3wDl/Yp0bwsxJlYZs=",
|
|
||||||
"pom": "sha256-4AHZl0MYUeq4uTOLW32f5eaOGutDpYV5JLChWIbuNjk="
|
|
||||||
},
|
|
||||||
"org/osgi#org.osgi.util.promise/1.3.0": {
|
|
||||||
"jar": "sha256-cFPFfn19iP7GuQl5o68SXh0ruEcmijKKLx7WWtCkwYU=",
|
|
||||||
"pom": "sha256-rcyK9ce+Z7BSEF4Mncq43ibaxvGbxamrcpRqMydscQA="
|
|
||||||
},
|
|
||||||
"org/ow2#ow2/1.5.1": {
|
|
||||||
"pom": "sha256-Mh3bt+5v5PU96mtM1tt0FU1r+kI5HB92OzYbn0hazwU="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm-analysis/9.7.1": {
|
|
||||||
"jar": "sha256-hbKTcYhLoxu3bt8iMjwsJOFywyZ6ZxUuuj0czC4EHvI=",
|
|
||||||
"pom": "sha256-JcI3nyv8Kh5k5iw54rk8+w5IlweFKwjW/EcLHGpSue4="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm-bom/9.6": {
|
|
||||||
"pom": "sha256-ig5fYk/ikwt6jWmVb0OORe9TKZa01kQJthbErvSxrE4="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm-commons/9.6": {
|
|
||||||
"jar": "sha256-eu/Q1cCQFwHGn3UT/tp2X7a+M68s56oXxXgfyHZXxRE=",
|
|
||||||
"pom": "sha256-qYrkiVM0uvj/hr1mUWIQ29mgPxpuFeR92oKvz2tT13w="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm-commons/9.7.1": {
|
|
||||||
"jar": "sha256-mlebVNKSrZvhcdQxP9RznGNVksK1rDpFm70QSc3exqA=",
|
|
||||||
"pom": "sha256-C/HTHaDJ+djtwvJ9u/279z8acVtyzS+ijz8ZWZTXStE="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm-tree/9.6": {
|
|
||||||
"jar": "sha256-xD7PF7U5x3fhXae1uGVTs3fi05poPeYoVWfVKDiI5+8=",
|
|
||||||
"pom": "sha256-G8tIHX/Ba5VbtgygfIz6JCS87ni9xAW7oxx9b13C0RM="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm-tree/9.7.1": {
|
|
||||||
"jar": "sha256-mSmIH1nra4QOhtVFcMd7Wc5yHRBObf16QJeJkcLTtB8=",
|
|
||||||
"pom": "sha256-E7kF9l5/1DynZ09Azao3Z5ukhYxsnZ+48Xp6/ZuqvJ4="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm-util/9.7.1": {
|
|
||||||
"jar": "sha256-+IW+cbXJBVb18a0cT5J2spuWBXxJfUZmb+TdvsPLQ8Y=",
|
|
||||||
"pom": "sha256-f7XmM2Ky1S133KO3VK661jV1HT/FIBkelQDs6eI0W3E="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm/9.6": {
|
|
||||||
"jar": "sha256-PG+sJCTbPUqFO2afTj0dnDxVIjXhmjGWc/iHCDwjA6E=",
|
|
||||||
"pom": "sha256-ku7iS8PIQ+SIHUbB3WUFRx7jFC+s+0ZrQoz+paVsa2A="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm/9.7.1": {
|
|
||||||
"jar": "sha256-jK3UOsXrbQneBfrsyji5F6BAu5E5x+3rTMgcdAtxMoE=",
|
|
||||||
"pom": "sha256-cimwOzCnPukQCActnkVppR2FR/roxQ9SeEGu9MGwuqg="
|
|
||||||
},
|
|
||||||
"org/postgresql#postgresql/42.7.3": {
|
|
||||||
"jar": "sha256-omRMv7obqhRf9+jI71gqbu16fsTKeS9/BUEivex1Ymg=",
|
|
||||||
"pom": "sha256-wqy2hFfZlqjkntB3flklW3RlCXZSOVHxAa25QHXhWIU="
|
|
||||||
},
|
|
||||||
"org/python#jython-standalone/2.7.4": {
|
|
||||||
"jar": "sha256-H7oXae/8yLGfXhBDa8gnShWM6YhVnyV5J8JMc7sTfzw=",
|
|
||||||
"pom": "sha256-WjutObAFQl/DVMK4niUVrj0MmdizCk6UqxtaPBSF1TM="
|
|
||||||
},
|
|
||||||
"org/slf4j#slf4j-api/1.7.25": {
|
|
||||||
"jar": "sha256-GMSgCV1cHaa4F1kudnuyPSndL1YK1033X/OWHb3iW3k=",
|
|
||||||
"pom": "sha256-fNnXoLXZPf1GGhSIkbQ1Cc9AOpx/n7SQYNNVTfHIHh4="
|
|
||||||
},
|
|
||||||
"org/slf4j#slf4j-nop/1.7.25": {
|
|
||||||
"jar": "sha256-bLEnE49Btahp+ezdBhrRd5mg4/5yBGAHlxVOsEMu6xI=",
|
|
||||||
"pom": "sha256-ogpNV7z++b2sp9EVliwN58lEa+TUZre9MNXxmkWc9Jk="
|
|
||||||
},
|
|
||||||
"org/slf4j#slf4j-parent/1.7.25": {
|
|
||||||
"pom": "sha256-GPXFISDbA26I1hNviDnIMtB0vdqVx1bG9CkknS21SsY="
|
|
||||||
},
|
|
||||||
"org/smali#baksmali/2.5.2": {
|
|
||||||
"jar": "sha256-HtI2Jm19xJB6reCxmjT3fvrCU0K2PIrOUuV5A5lBs4k=",
|
|
||||||
"module": "sha256-g+59x3oek4+5BtaNfUPiRX8s+Im7HecuqtcJJDVfpbU=",
|
|
||||||
"pom": "sha256-8FzZiasE/SboahreXCGauEgovqfebryA/Bd7YtJ1k4g="
|
|
||||||
},
|
|
||||||
"org/smali#dexlib2/2.5.2": {
|
|
||||||
"jar": "sha256-WlyJgti9fW47saBxMEnjx4txnsMrIPa2GYhc7DCg3WE=",
|
|
||||||
"module": "sha256-5XDKZe/asrKMAq2P34W9hSIGZrkkuJXKW+r1fXKGiDw=",
|
|
||||||
"pom": "sha256-BWB6NSDN841drl0MQZZRKjhWpA3rlTny/OCGNalut44="
|
|
||||||
},
|
|
||||||
"org/smali#util/2.5.2": {
|
|
||||||
"jar": "sha256-T1gKnP8+u4PLP9IL7Ijjfk8YN5bKZScymSYRYgKC2uo=",
|
|
||||||
"module": "sha256-rRt+JSAWcAXJFp2Gv8z/JvXF+b8Ls/qyRMtIIWU9wmE=",
|
|
||||||
"pom": "sha256-IKx+12/5cPUQB6IPrIvbon7IeUT9Kb2oxnQJZ5LJFFE="
|
|
||||||
},
|
|
||||||
"org/sonatype/oss#oss-parent/7": {
|
|
||||||
"pom": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ="
|
|
||||||
},
|
|
||||||
"org/sonatype/oss#oss-parent/9": {
|
|
||||||
"pom": "sha256-+0AmX5glSCEv+C42LllzKyGH7G8NgBgohcFO8fmCgno="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo-classification-core/4.2.0": {
|
|
||||||
"jar": "sha256-+vv5OnIrmrVC7oeaX09lF5bkyuobZ5gNVWL+jdjbqeY=",
|
|
||||||
"pom": "sha256-gLgGCPTPN93HLmioPGBRyupwvqF+96hTCfWeqdpzBPE="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo-classification-tree/4.2.0": {
|
|
||||||
"jar": "sha256-uVozLZJI7RKVgxdkTNQ9cubdit4KJPnKTlLaB72sY6c=",
|
|
||||||
"pom": "sha256-OrTlGe48n3lzd3MirS7EaR5j1kovRxiR4A1BGQdY2jw="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo-classification/4.2.0": {
|
|
||||||
"pom": "sha256-SqINxWFbgU86wjq3xB+s+LpCKbPuzSwa/KeL3/kntcU="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo-common-tree/4.2.0": {
|
|
||||||
"jar": "sha256-34iqIWT+X60ITLIxl7LgodbBPk7QbuXCGXausNuVfOk=",
|
|
||||||
"pom": "sha256-DbCNldwWEPdn/AehmZqXlhVxALozjH4JA2jMVN5NIHU="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo-common/4.2.0": {
|
|
||||||
"pom": "sha256-GAZzLdQd51aq3tY2v7qZSD00J72diyAvEEJcr84iykk="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo-core/4.2.0": {
|
|
||||||
"jar": "sha256-NFwzfcKHjsdQJJgqqwZycZtznnGOc9eisu/ottXQCb8=",
|
|
||||||
"pom": "sha256-XkjLxuPn9x+wYPSWdPTXbCLcKEe9flflVCY7+5gYpZ0="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo-data/4.2.0": {
|
|
||||||
"jar": "sha256-m8EQCFnODOBCDNbfbOdna25DxSKEXUKGz5FIUmgtYz0=",
|
|
||||||
"pom": "sha256-SMm4+bX7Nd5toLwWhuMLStMkS6UWMCNw1fqGd1ixruA="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo-math/4.2.0": {
|
|
||||||
"jar": "sha256-7NZdhI/2SIAXBLm6D3CmRtQDAgy97SYf1zVIGkeWVRI=",
|
|
||||||
"pom": "sha256-iCAlohj3F9hakTNsztSg+08CsjFcppZy0oqCc3uWhVE="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo-util-onnx/4.2.0": {
|
|
||||||
"jar": "sha256-ohcAq4nLB1/OT8UkA1n5HMj4t/JCiS1lsD+oda0s3Vs=",
|
|
||||||
"pom": "sha256-Q19d8ELZieF6QHPjcFa++ChKUrw3zIZeF5Xvi7U5KUw="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo-util-tokenization/4.2.0": {
|
|
||||||
"jar": "sha256-b0TzDZ0g6amwscMHAbcrPeXtofbXbZXanWkHQmVXdoI=",
|
|
||||||
"pom": "sha256-6GAT6tT7c0apQghWqMAX/g7aAlhmu0w935AK2JLi/Tg="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo-util/4.2.0": {
|
|
||||||
"pom": "sha256-saxG0eBU4acgcz0cMeBMaIxxJb+mIN7RpEQ9BdNMma8="
|
|
||||||
},
|
|
||||||
"org/tribuo#tribuo/4.2.0": {
|
|
||||||
"pom": "sha256-mMQFMwnY7vg2fAbCAmyDHkqwS3nOny0hrGrrKE2dNZQ="
|
|
||||||
},
|
|
||||||
"org/tukaani#xz/1.9": {
|
|
||||||
"jar": "sha256-IRswbPxE+Plt86Cj3a91uoxSie7XfWDXL4ibuFX1NeU=",
|
|
||||||
"pom": "sha256-CTvhsDMxvOKTLWglw36YJy12Ieap6fuTKJoAJRi43Vo="
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"https://sourceforge.net/projects": {
|
|
||||||
"pydev/files/pydev/PyDev%209.3.0/PyDev%209.3.0": {
|
|
||||||
"zip": "sha256-RTmO3yrbVgeKgLyIqRmUFXjwwLNj773QEb/RWKmbES4="
|
|
||||||
},
|
|
||||||
"yajsw/files/yajsw/yajsw-stable-13.12/yajsw-stable-13.12": {
|
|
||||||
"zip": "sha256-xvxZgV04ANFOyXeSaor9P2BqDr100s/WBgFndGbt6qI="
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"https://storage.googleapis.com": {
|
|
||||||
"google-code-archive-downloads/v2/code.google.com/android4me/AXMLPrinter2": {
|
|
||||||
"jar": "sha256-AO0Djrarr23eyNICo+16gbUhRY9M1FmUgRXP0C/1nW0="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,37 +1,14 @@
|
||||||
{
|
{ lib, newScope, callPackage, ghidra }:
|
||||||
lib,
|
|
||||||
newScope,
|
|
||||||
callPackage,
|
|
||||||
ghidra,
|
|
||||||
}:
|
|
||||||
|
|
||||||
lib.makeScope newScope (self: {
|
lib.makeScope newScope (self: {
|
||||||
inherit (callPackage ./build-extension.nix { inherit ghidra; })
|
inherit (callPackage ./build-extension.nix { inherit ghidra; }) buildGhidraExtension buildGhidraScripts;
|
||||||
buildGhidraExtension
|
|
||||||
buildGhidraScripts
|
|
||||||
;
|
|
||||||
|
|
||||||
findcrypt = self.callPackage ./extensions/findcrypt { };
|
|
||||||
|
|
||||||
ghidra-delinker-extension = self.callPackage ./extensions/ghidra-delinker-extension {
|
|
||||||
inherit ghidra;
|
|
||||||
};
|
|
||||||
|
|
||||||
ghidra-golanganalyzerextension = self.callPackage ./extensions/ghidra-golanganalyzerextension { };
|
|
||||||
|
|
||||||
ghidraninja-ghidra-scripts = self.callPackage ./extensions/ghidraninja-ghidra-scripts { };
|
ghidraninja-ghidra-scripts = self.callPackage ./extensions/ghidraninja-ghidra-scripts { };
|
||||||
|
|
||||||
gnudisassembler = self.callPackage ./extensions/gnudisassembler { inherit ghidra; };
|
gnudisassembler = self.callPackage ./extensions/gnudisassembler { inherit ghidra; };
|
||||||
|
|
||||||
kaiju = self.callPackage ./extensions/kaiju { };
|
|
||||||
|
|
||||||
lightkeeper = self.callPackage ./extensions/lightkeeper { };
|
|
||||||
|
|
||||||
machinelearning = self.callPackage ./extensions/machinelearning { inherit ghidra; };
|
machinelearning = self.callPackage ./extensions/machinelearning { inherit ghidra; };
|
||||||
|
|
||||||
ret-sync = self.callPackage ./extensions/ret-sync { };
|
|
||||||
|
|
||||||
sleighdevtools = self.callPackage ./extensions/sleighdevtools { inherit ghidra; };
|
sleighdevtools = self.callPackage ./extensions/sleighdevtools { inherit ghidra; };
|
||||||
|
|
||||||
wasm = self.callPackage ./extensions/wasm { inherit ghidra; };
|
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
fetchFromGitHub,
|
|
||||||
buildGhidraExtension,
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
version = "3.0.5";
|
|
||||||
in
|
|
||||||
buildGhidraExtension {
|
|
||||||
pname = "findcrypt";
|
|
||||||
inherit version;
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "antoniovazquezblanco";
|
|
||||||
repo = "GhidraFindcrypt";
|
|
||||||
rev = "v${version}";
|
|
||||||
hash = "sha256-gWVYy+PWpNXlcgD83jap4IFRv66qdhloOwvpQVU2TcI=";
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "Ghidra analysis plugin to locate cryptographic constants";
|
|
||||||
homepage = "https://github.com/antoniovazquezblanco/GhidraFindcrypt";
|
|
||||||
downloadPage = "https://github.com/antoniovazquezblanco/GhidraFindcrypt/releases/tag/v${version}";
|
|
||||||
changelog = "https://github.com/antoniovazquezblanco/GhidraFindcrypt/releases/tag/v${version}";
|
|
||||||
license = lib.licenses.gpl3;
|
|
||||||
maintainers = [ lib.maintainers.BonusPlay ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
ghidra,
|
|
||||||
gradle,
|
|
||||||
fetchFromGitHub,
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
version = "0.5.1";
|
|
||||||
self = ghidra.buildGhidraExtension {
|
|
||||||
pname = "ghidra-delinker-extension";
|
|
||||||
inherit version;
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "boricj";
|
|
||||||
repo = "ghidra-delinker-extension";
|
|
||||||
rev = "v${version}";
|
|
||||||
hash = "sha256-h6F50Z7S6tPOl9mIhChLKoFxHuAkq/n36ysUEFwWGxI=";
|
|
||||||
};
|
|
||||||
|
|
||||||
postPatch = ''
|
|
||||||
substituteInPlace build.gradle \
|
|
||||||
--replace-fail '"''${getGitHash()}"' '"v${version}"'
|
|
||||||
'';
|
|
||||||
|
|
||||||
gradleBuildTask = "buildExtension";
|
|
||||||
|
|
||||||
__darwinAllowLocalNetworking = true;
|
|
||||||
|
|
||||||
mitmCache = gradle.fetchDeps {
|
|
||||||
pkg = self;
|
|
||||||
data = ./deps.json;
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "Ghidra extension for delinking executables back to object files";
|
|
||||||
homepage = "https://github.com/boricj/ghidra-delinker-extension";
|
|
||||||
license = lib.licenses.asl20;
|
|
||||||
maintainers = [ lib.maintainers.jchw ];
|
|
||||||
platforms = lib.platforms.unix;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
self
|
|
|
@ -1,214 +0,0 @@
|
||||||
{
|
|
||||||
"!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.",
|
|
||||||
"!version": 1,
|
|
||||||
"https://plugins.gradle.org/m2": {
|
|
||||||
"com/diffplug/durian#durian-collect/1.2.0": {
|
|
||||||
"jar": "sha256-sZTAuIAhzBFsIcHcdvScLB/hda9by3TIume527+aSMw=",
|
|
||||||
"pom": "sha256-i7diCGoKT9KmRzu/kFx0R2OvodWaVjD3O7BLeHLAn/M="
|
|
||||||
},
|
|
||||||
"com/diffplug/durian#durian-core/1.2.0": {
|
|
||||||
"jar": "sha256-F+0KrLOjwWMjMyFou96thpTzKACytH1p1KTEmxFNXa4=",
|
|
||||||
"pom": "sha256-hwMg6QdVNxsBeW/oG6Ul/R3ui3A0b1VFUe7dQonwtmI="
|
|
||||||
},
|
|
||||||
"com/diffplug/durian#durian-io/1.2.0": {
|
|
||||||
"jar": "sha256-CV/R3HeIjAc/C+OaAYFW7lJnInmLCd6eKF7yE14W6sQ=",
|
|
||||||
"pom": "sha256-NQkZQkMk4nUKPdwvobzmqQrIziklaYpgqbTR1uSSL/4="
|
|
||||||
},
|
|
||||||
"com/diffplug/durian#durian-swt.os/4.2.0": {
|
|
||||||
"jar": "sha256-8h5XK/n7tUmpmMt+L3m2uaOrliM3GsEwsSUJUj97dI8=",
|
|
||||||
"module": "sha256-S9OpnUAGnXD/3CiPsokUlAoDtNURHO1NnPohI8lOX+M=",
|
|
||||||
"pom": "sha256-5CTf5Z5I9R1LbVP2mXeaU6Ue8yTx/zxtZi791PYwSGI="
|
|
||||||
},
|
|
||||||
"com/diffplug/spotless#com.diffplug.spotless.gradle.plugin/6.20.0": {
|
|
||||||
"pom": "sha256-g2lNHgrPjO84zk9mbIzZ3h5S4dQpc+YwFYmXja3WWnY="
|
|
||||||
},
|
|
||||||
"com/diffplug/spotless#spotless-lib-extra/2.40.0": {
|
|
||||||
"jar": "sha256-/+NEZO04c32MmQ+Im51b87b+wvu+oAvUq92SjuNPUxY=",
|
|
||||||
"module": "sha256-VHaHB4POYSoDtDOa00a11RN9a3fSAUFybYWRCdYZFPc=",
|
|
||||||
"pom": "sha256-CpqBsO9AG7lEYP08A2kB74qKW9d1khjyFbFviGGhZfE="
|
|
||||||
},
|
|
||||||
"com/diffplug/spotless#spotless-lib/2.40.0": {
|
|
||||||
"jar": "sha256-ozGah3amzO4e1DaQTtEBZWX9Ay7KhIwlpCUSbBk3Z10=",
|
|
||||||
"module": "sha256-sPGda3aE/68dQY7dFc7ZgCBZCwbFfsr0RAX0iVBRgFw=",
|
|
||||||
"pom": "sha256-aQbVFaYTBtHzpqMFi5hXcTipXDTEwCD00AmBUfMZSLI="
|
|
||||||
},
|
|
||||||
"com/diffplug/spotless#spotless-plugin-gradle/6.20.0": {
|
|
||||||
"jar": "sha256-PbqJL0iTeT3w0CRZb02LGQUXzUDNErVYFwoB37PCLDM=",
|
|
||||||
"module": "sha256-i+pazpSaZq1tIXFfG9Ge5u7F9S7A1m8G+PLJNPtwJWA=",
|
|
||||||
"pom": "sha256-VTD1T1UXPH7b0n0dAUjbFVWCBvMYy/bCtjZYNcNUW9I="
|
|
||||||
},
|
|
||||||
"com/github/gmazzo/buildconfig#com.github.gmazzo.buildconfig.gradle.plugin/5.3.5": {
|
|
||||||
"pom": "sha256-+7LpGMzwo5wJ8GZtfRlxoEaiVsZG8yfDoQpN6M5P1JU="
|
|
||||||
},
|
|
||||||
"com/github/gmazzo/buildconfig#plugin/5.3.5": {
|
|
||||||
"jar": "sha256-Jeh99WaAFSYYVbxxERZaqpQMo9I781sKoBBVRXNjgyk=",
|
|
||||||
"module": "sha256-4Fk5HzzRXQvCrDvbTf7MNXtNcFekqGlpSg/sbGruwXY=",
|
|
||||||
"pom": "sha256-MgrmPgZ4TF2fraSFnOPhEBYlcCoWM4/dvu9UHVUkWOo="
|
|
||||||
},
|
|
||||||
"com/googlecode/concurrent-trees#concurrent-trees/2.6.1": {
|
|
||||||
"jar": "sha256-BONySYTipcv1VgbPo3KlvT08XSohUzpwBOPN5Tl2H6U=",
|
|
||||||
"pom": "sha256-Q8K5sULnBV0fKlgn8QlEkl0idH2XVrMlDAeqtHU4qXE="
|
|
||||||
},
|
|
||||||
"com/googlecode/javaewah#JavaEWAH/1.2.3": {
|
|
||||||
"jar": "sha256-1lImlJcTxMYaeE9BxRFn57Axb5N2Q5jrup5DNrPZVMI=",
|
|
||||||
"pom": "sha256-5O1sZpYgNm+ZOSBln+CsfLyD11PbwNwOseUplzr5byM="
|
|
||||||
},
|
|
||||||
"com/squareup#javapoet/1.13.0": {
|
|
||||||
"jar": "sha256-THUX6EinGzbQadErs79Gpw/UzaMQXYIrDtLhnAC2kpE=",
|
|
||||||
"pom": "sha256-VKNPqFAqRryQ79tJJiYAWR+oC/mjT1pMeYMRrsFsqXc="
|
|
||||||
},
|
|
||||||
"com/squareup#kotlinpoet-jvm/1.15.3": {
|
|
||||||
"jar": "sha256-cdnoD49eqFCombaN6tOxwzvfq67DZJBpVfS0hTbXn6E=",
|
|
||||||
"module": "sha256-WTlDw+sa3SFaeEL6MsmnlqoCF3zVZDkfuIp9QIYWs6M=",
|
|
||||||
"pom": "sha256-3Zr3oWxwNwdeGbOoQLXlHVes9g4cjYnG5FqcHDWw6Ik="
|
|
||||||
},
|
|
||||||
"com/squareup#kotlinpoet/1.15.3": {
|
|
||||||
"module": "sha256-Q38EctA1tN3NSAJpTEodgDhphD4Li+WP/FA//GFmIWc=",
|
|
||||||
"pom": "sha256-TLSlkhcLOMvGCZ4QIWMAR8ViFco++yl5jP4nA1qyPw0="
|
|
||||||
},
|
|
||||||
"com/squareup/okhttp3#okhttp/4.10.0": {
|
|
||||||
"jar": "sha256-dYDxT6FpEgbjcIGtP5IGOxYDsyjaC7MW8v7wLgVi5+w=",
|
|
||||||
"module": "sha256-bDBwggtZH17IwpSEl7Wmt0L0krcVvKz0t1EVs6j/qxU=",
|
|
||||||
"pom": "sha256-x/kgsofIOOHYHipj+Gd7svqZE3BYorEeZTWv3pyBoOU="
|
|
||||||
},
|
|
||||||
"com/squareup/okio#okio-jvm/3.0.0": {
|
|
||||||
"jar": "sha256-vmSgzB8o6pzVyXDdfnVXr3LICNc4xJWzl7+JfJkh6Qc=",
|
|
||||||
"module": "sha256-F/SNQXdb2E3qeOnf7Y37zGavgFZ6XJ7J2WCHheyCDN4=",
|
|
||||||
"pom": "sha256-sMtzRExjeVg7KlOiZIxI3kIOsfSRVmdTdNimdW7zovo="
|
|
||||||
},
|
|
||||||
"com/squareup/okio#okio/3.0.0": {
|
|
||||||
"module": "sha256-b546eXgx51xbVi2UbAdRg/myvoRnken4i95FSR2u2Yc=",
|
|
||||||
"pom": "sha256-lgrVNSNexh9VRtuBPQGVwTr4UjChLqvpmXUeilUNFU8="
|
|
||||||
},
|
|
||||||
"dev/equo/ide#solstice/1.3.1": {
|
|
||||||
"jar": "sha256-dl9eEMdIofpRy3tsyH8pgqs2txWX5p9wnZi/ETa1ME8=",
|
|
||||||
"module": "sha256-oEpRNV2jFNNKtpRZzJ1J8trBV3pd9Kc3Y5DXfOogItE=",
|
|
||||||
"pom": "sha256-ljw9pdrhspFNWcDbgXTt2LyqwwO0FMdp4WQsfYOMbPw="
|
|
||||||
},
|
|
||||||
"org/eclipse/jgit#org.eclipse.jgit-parent/6.6.0.202305301015-r": {
|
|
||||||
"pom": "sha256-rILKtoxRf/67xcbnagItce9dQANsnE4O+QHw6ceKOlk="
|
|
||||||
},
|
|
||||||
"org/eclipse/jgit#org.eclipse.jgit/6.6.0.202305301015-r": {
|
|
||||||
"jar": "sha256-4wRVXVsg3zuRzHfBJCSvcL4w1Copx+2MJ7Pwb3M3qOM=",
|
|
||||||
"pom": "sha256-nNAirxZ7WVDZpXC0s+aqPsybehWhshWFVDB+mb7h0IQ="
|
|
||||||
},
|
|
||||||
"org/eclipse/platform#org.eclipse.osgi/3.18.300": {
|
|
||||||
"jar": "sha256-urlD5Y7dFzCSOGctunpFrsni2svd24GKjPF3I+oT+iI=",
|
|
||||||
"pom": "sha256-4nl2N1mZxUJ/y8//PzvCD77a+tiqRRArN59cL5fI/rQ="
|
|
||||||
},
|
|
||||||
"org/jetbrains#annotations/13.0": {
|
|
||||||
"jar": "sha256-rOKhDcji1f00kl7KwD5JiLLA+FFlDJS4zvSbob0RFHg=",
|
|
||||||
"pom": "sha256-llrrK+3/NpgZvd4b96CzuJuCR91pyIuGN112Fju4w5c="
|
|
||||||
},
|
|
||||||
"org/jetbrains/kotlin#kotlin-reflect/1.9.21": {
|
|
||||||
"jar": "sha256-oTPgSfCk4kllFYJCjhZt5N+slUat9Da2FyEZJV7eUQ8=",
|
|
||||||
"pom": "sha256-wu93WbdrxNn29SnS8/vBwxpFl8wVhuc6fXqxbRvbtKk="
|
|
||||||
},
|
|
||||||
"org/jetbrains/kotlin#kotlin-stdlib-common/1.9.22": {
|
|
||||||
"module": "sha256-+Tyemr+NUtjo/Y6FGqgC7OxVEyFhxK7ufTzZJL95QkY=",
|
|
||||||
"pom": "sha256-10k21oh1ZK63EOhCmLVCB/U+m88jpSrSv6IsIIZ3V2c="
|
|
||||||
},
|
|
||||||
"org/jetbrains/kotlin#kotlin-stdlib-jdk7/1.8.0": {
|
|
||||||
"jar": "sha256-TIidHZgD9fLrbBWSprfmI2msdmDJ7uFauhb+wFkWNmY=",
|
|
||||||
"pom": "sha256-36lkSmrluJjuR1ux9X6DC6H3cK7mycFfgRKqOBGAGEo="
|
|
||||||
},
|
|
||||||
"org/jetbrains/kotlin#kotlin-stdlib-jdk8/1.8.0": {
|
|
||||||
"jar": "sha256-BbYoBEQbDJoZILa31c9zKaTiS2JYR44ysfBGygGQCUY=",
|
|
||||||
"pom": "sha256-K7bHVRuXx7oCn5hmWC56oZ1jq/1M1T2j/AxGLzq1/CY="
|
|
||||||
},
|
|
||||||
"org/jetbrains/kotlin#kotlin-stdlib/1.9.22": {
|
|
||||||
"jar": "sha256-ar4UbCeGQTi4dMzM/l9TTj65I8maG3tdRUlO5WlPPgo=",
|
|
||||||
"module": "sha256-9IIxS1B5wUVfb7DUJXp0XRAcYSTOlhUiuob53JCQHkc=",
|
|
||||||
"pom": "sha256-zOLxUoXsgHijd0a1cwigVAQt1cwlQgxD9zt4V8JGjwM="
|
|
||||||
},
|
|
||||||
"org/slf4j#slf4j-api/1.7.36": {
|
|
||||||
"jar": "sha256-0+9XXj5JeWeNwBvx3M5RAhSTtNEft/G+itmCh3wWocA=",
|
|
||||||
"pom": "sha256-+wRqnCKUN5KLsRwtJ8i113PriiXmDL0lPZhSEN7cJoQ="
|
|
||||||
},
|
|
||||||
"org/slf4j#slf4j-parent/1.7.36": {
|
|
||||||
"pom": "sha256-uziNN/vN083mTDzt4hg4aTIY3EUfBAQMXfNgp47X6BI="
|
|
||||||
},
|
|
||||||
"org/sonatype/oss#oss-parent/5": {
|
|
||||||
"pom": "sha256-FnjUEgpYXYpjATGu7ExSTZKDmFg7fqthbufVqH9SDT0="
|
|
||||||
},
|
|
||||||
"org/sonatype/oss#oss-parent/7": {
|
|
||||||
"pom": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ="
|
|
||||||
},
|
|
||||||
"org/tukaani#xz/1.9": {
|
|
||||||
"jar": "sha256-IRswbPxE+Plt86Cj3a91uoxSie7XfWDXL4ibuFX1NeU=",
|
|
||||||
"pom": "sha256-CTvhsDMxvOKTLWglw36YJy12Ieap6fuTKJoAJRi43Vo="
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"https://repo.maven.apache.org/maven2": {
|
|
||||||
"junit#junit/4.12": {
|
|
||||||
"jar": "sha256-WXIfCAXiI9hLkGd4h9n/Vn3FNNfFAsqQPAwrF/BcEWo=",
|
|
||||||
"pom": "sha256-kPFj944/+28cetl96efrpO6iWAcUG4XW0SvmfKJUScQ="
|
|
||||||
},
|
|
||||||
"net/bytebuddy#byte-buddy-agent/1.14.5": {
|
|
||||||
"jar": "sha256-VfGYYrhw9dhYkLpThrG0Xpu8iNX+H4Gavgx4i0kp+ms=",
|
|
||||||
"pom": "sha256-CyjT+A+r52hqIX2ZiWGdN8V7vXSoCja5bC3DojrKTyg="
|
|
||||||
},
|
|
||||||
"net/bytebuddy#byte-buddy-parent/1.14.5": {
|
|
||||||
"pom": "sha256-/gFyOCYsnppgFaKxG5Ra9yjBMz9fnvnQ4DEj568X8MI="
|
|
||||||
},
|
|
||||||
"net/bytebuddy#byte-buddy/1.14.5": {
|
|
||||||
"jar": "sha256-6ZdhpSbfD++70/4UQ2sPlTAAzfpRUdxjwLGNN9nEbxw=",
|
|
||||||
"pom": "sha256-ZtTt/qwkvRduj7LUhn6QigYX15dxCIFFuYJReEsoggo="
|
|
||||||
},
|
|
||||||
"org/hamcrest#hamcrest-core/1.3": {
|
|
||||||
"jar": "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=",
|
|
||||||
"pom": "sha256-/eOGp5BRc6GxA95quCBydYS1DQ4yKC4nl3h8IKZP+pM="
|
|
||||||
},
|
|
||||||
"org/hamcrest#hamcrest-parent/1.3": {
|
|
||||||
"pom": "sha256-bVNflO+2Y722gsnyelAzU5RogAlkK6epZ3UEvBvkEps="
|
|
||||||
},
|
|
||||||
"org/jacoco#org.jacoco.agent/0.8.11": {
|
|
||||||
"jar": "sha256-0+2F3qeKntVYRqdzjjoMoVxwLGYe5LyMv+Aqi59KmcA=",
|
|
||||||
"pom": "sha256-FuBen0liG4fFPmk1AUDzxG1C2WbGepM730sGOiscj8U="
|
|
||||||
},
|
|
||||||
"org/jacoco#org.jacoco.ant/0.8.11": {
|
|
||||||
"jar": "sha256-gdfriJDZvjCpOWEsKVYDVBBjUpzdA6UyZaunRHS3C3w=",
|
|
||||||
"pom": "sha256-ftED2VnQzue6v7Ewf6bkUbFpb/01JwYVU7VQ3lUgHYU="
|
|
||||||
},
|
|
||||||
"org/jacoco#org.jacoco.build/0.8.11": {
|
|
||||||
"pom": "sha256-W4SxXPLu8+WeuRvCJ4SDMQCwnfmRHjMZAww7xki9iws="
|
|
||||||
},
|
|
||||||
"org/jacoco#org.jacoco.core/0.8.11": {
|
|
||||||
"jar": "sha256-/NGIxohHP8jcwMbKrzVeeziVAiQ1J8M7lZej7Ch5H0c=",
|
|
||||||
"pom": "sha256-u2E18Qo2NJy4SlYA/Yz3P8EpahNbLxStzYPejPJMq7E="
|
|
||||||
},
|
|
||||||
"org/jacoco#org.jacoco.report/0.8.11": {
|
|
||||||
"jar": "sha256-g5MpWuJGgO0QytgzOQcED5KLhxMySRWBylvHhOLLT74=",
|
|
||||||
"pom": "sha256-jjtzR3nV4/1oPsAVQT1S+WGYTFDLkEX9orI7/160I4E="
|
|
||||||
},
|
|
||||||
"org/mockito#mockito-core/5.4.0": {
|
|
||||||
"jar": "sha256-sWibBmF+oB/Xd7+u293lEvrwg9Y5oEn3mziNWk6W0uU=",
|
|
||||||
"pom": "sha256-1gZDwDIVaj0pWc0AAN871iqBcj9+DCWD+kL9ZoTz1eM="
|
|
||||||
},
|
|
||||||
"org/objenesis#objenesis-parent/3.3": {
|
|
||||||
"pom": "sha256-MFw4SqLx4cf+U6ltpBw+w1JDuX1CjSSo93mBjMEL5P8="
|
|
||||||
},
|
|
||||||
"org/objenesis#objenesis/3.3": {
|
|
||||||
"jar": "sha256-At/QsEOaVZHjW3CO0vVHTrCUj1Or90Y36Vm45O9pv+s=",
|
|
||||||
"pom": "sha256-ugxA2iZpoEi24k73BmpHHw+8v8xQnmo+hWyk3fphStM="
|
|
||||||
},
|
|
||||||
"org/ow2#ow2/1.5.1": {
|
|
||||||
"pom": "sha256-Mh3bt+5v5PU96mtM1tt0FU1r+kI5HB92OzYbn0hazwU="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm-bom/9.6": {
|
|
||||||
"pom": "sha256-ig5fYk/ikwt6jWmVb0OORe9TKZa01kQJthbErvSxrE4="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm-commons/9.6": {
|
|
||||||
"jar": "sha256-eu/Q1cCQFwHGn3UT/tp2X7a+M68s56oXxXgfyHZXxRE=",
|
|
||||||
"pom": "sha256-qYrkiVM0uvj/hr1mUWIQ29mgPxpuFeR92oKvz2tT13w="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm-tree/9.6": {
|
|
||||||
"jar": "sha256-xD7PF7U5x3fhXae1uGVTs3fi05poPeYoVWfVKDiI5+8=",
|
|
||||||
"pom": "sha256-G8tIHX/Ba5VbtgygfIz6JCS87ni9xAW7oxx9b13C0RM="
|
|
||||||
},
|
|
||||||
"org/ow2/asm#asm/9.6": {
|
|
||||||
"jar": "sha256-PG+sJCTbPUqFO2afTj0dnDxVIjXhmjGWc/iHCDwjA6E=",
|
|
||||||
"pom": "sha256-ku7iS8PIQ+SIHUbB3WUFRx7jFC+s+0ZrQoz+paVsa2A="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
fetchFromGitHub,
|
|
||||||
buildGhidraExtension,
|
|
||||||
}:
|
|
||||||
buildGhidraExtension rec {
|
|
||||||
pname = "Ghidra-GolangAnalyzerExtension";
|
|
||||||
version = "1.2.4";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "mooncat-greenpy";
|
|
||||||
repo = "Ghidra_GolangAnalyzerExtension";
|
|
||||||
rev = version;
|
|
||||||
hash = "sha256-uxozIJ+BLcP1vBnLOCZD9ueY10hd37fON/Miii3zabo=";
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "Facilitates the analysis of Golang binaries using Ghidra";
|
|
||||||
homepage = "https://github.com/mooncat-greenpy/Ghidra_GolangAnalyzerExtension";
|
|
||||||
downloadPage = "https://github.com/mooncat-greenpy/Ghidra_GolangAnalyzerExtension/releases/tag/${version}";
|
|
||||||
license = lib.licenses.mit;
|
|
||||||
maintainers = [ lib.maintainers.ivyfanchiang ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,10 +1,9 @@
|
||||||
{
|
{ lib
|
||||||
lib,
|
, fetchFromGitHub
|
||||||
fetchFromGitHub,
|
, buildGhidraScripts
|
||||||
buildGhidraScripts,
|
, binwalk
|
||||||
binwalk,
|
, swift
|
||||||
swift,
|
, yara
|
||||||
yara,
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
buildGhidraScripts {
|
buildGhidraScripts {
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
{
|
{ lib
|
||||||
lib,
|
, stdenv
|
||||||
stdenv,
|
, fetchurl
|
||||||
fetchurl,
|
, buildGhidraExtension
|
||||||
buildGhidraExtension,
|
, ghidra
|
||||||
ghidra,
|
, flex
|
||||||
flex,
|
, bison
|
||||||
bison,
|
, texinfo
|
||||||
texinfo,
|
, perl
|
||||||
perl,
|
, zlib
|
||||||
zlib,
|
, xcbuild
|
||||||
xcbuild,
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
@ -42,10 +41,13 @@ buildGhidraExtension {
|
||||||
bison
|
bison
|
||||||
texinfo
|
texinfo
|
||||||
perl
|
perl
|
||||||
] ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild ];
|
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
|
||||||
|
xcbuild
|
||||||
|
];
|
||||||
|
|
||||||
buildInputs = [ zlib ];
|
buildInputs = [
|
||||||
gradleBuildTask = "assemble";
|
zlib
|
||||||
|
];
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
runHook preInstall
|
runHook preInstall
|
||||||
|
|
|
@ -1,73 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
stdenv,
|
|
||||||
fetchFromGitHub,
|
|
||||||
buildGhidraExtension,
|
|
||||||
z3,
|
|
||||||
gradle,
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
ghidraPlatformName =
|
|
||||||
{
|
|
||||||
x86_64-linux = "linux_x86_64";
|
|
||||||
aarch64-linux = "linux_x86_64";
|
|
||||||
x86_64-darwin = "mac_x86_64";
|
|
||||||
aarch64-darwin = "mac_arm_64";
|
|
||||||
}
|
|
||||||
.${stdenv.hostPlatform.system}
|
|
||||||
or (throw "${stdenv.hostPlatform.system} is an unsupported platform");
|
|
||||||
|
|
||||||
z3_lib = (
|
|
||||||
z3.override {
|
|
||||||
javaBindings = true;
|
|
||||||
jdk = gradle.jdk;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
self = buildGhidraExtension rec {
|
|
||||||
pname = "kaiju";
|
|
||||||
version = "250417";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "CERTCC";
|
|
||||||
repo = "kaiju";
|
|
||||||
rev = version;
|
|
||||||
hash = "sha256-SSvCb3xnOh0mb3H24RJTi11UmN2ARgFgsiiKlZXyufM=";
|
|
||||||
};
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
z3_lib
|
|
||||||
];
|
|
||||||
|
|
||||||
# used to copy java bindings from nixpkgs z3 package instead of having kaiju's build.gradle build gradle from source
|
|
||||||
# https://github.com/CERTCC/kaiju/blob/c9dbb55484b3d2a6abd9dfca2197cd00fb7ee3c1/build.gradle#L189
|
|
||||||
preBuild = ''
|
|
||||||
mkdir -p build/cmake/z3/java-bindings
|
|
||||||
ln -s ${lib.getOutput "lib" z3_lib}/lib/com.microsoft.z3.jar build/cmake/z3/java-bindings
|
|
||||||
mkdir -p os/${ghidraPlatformName}
|
|
||||||
cp ${lib.getOutput "lib" z3_lib}/lib/* os/${ghidraPlatformName}
|
|
||||||
'';
|
|
||||||
|
|
||||||
gradleFlags = [ "-PKAIJU_SKIP_Z3_BUILD=true" ];
|
|
||||||
|
|
||||||
mitmCache = gradle.fetchDeps {
|
|
||||||
pkg = self;
|
|
||||||
data = ./deps.json;
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "A Java implementation of some features of the CERT Pharos Binary Analysis Framework for Ghidra";
|
|
||||||
homepage = "https://github.com/CERTCC/kaiju";
|
|
||||||
downloadPage = "https://github.com/CERTCC/kaiju/releases/tag/${version}";
|
|
||||||
license = lib.licenses.bsd3;
|
|
||||||
maintainers = [ lib.maintainers.ivyfanchiang ];
|
|
||||||
platforms = [
|
|
||||||
"x86_64-linux"
|
|
||||||
"aarch64-linux"
|
|
||||||
"x86_64-darwin"
|
|
||||||
"aarch64-darwin"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
self
|
|
|
@ -1,163 +0,0 @@
|
||||||
{
|
|
||||||
"!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.",
|
|
||||||
"!version": 1,
|
|
||||||
"https://plugins.gradle.org/m2": {
|
|
||||||
"com/adarshr#gradle-test-logger-plugin/4.0.0": {
|
|
||||||
"jar": "sha256-5nhoOjPSvINWcb3U5YcQAErR2TFqqfmlTP4iQZpPbvk=",
|
|
||||||
"module": "sha256-jERLLH/UQgDNSrMYJyJwHCCXWkOyPH6e35sCJgSavcI=",
|
|
||||||
"pom": "sha256-ienBpTqmJS2mx9fZscN/t/j8qQuysaNq+Ti8cNni3GE="
|
|
||||||
},
|
|
||||||
"com/adarshr/test-logger#com.adarshr.test-logger.gradle.plugin/4.0.0": {
|
|
||||||
"pom": "sha256-sobTcqzS2uG4vHsg/ouoT49kiXMdiBpB83NqYCCFotc="
|
|
||||||
},
|
|
||||||
"com/github/tomtzook#castle/2.0.0": {
|
|
||||||
"jar": "sha256-00zgaBUmlsBRQcXYStVP4PhRNglOxFNf7P+kBr0A7hg=",
|
|
||||||
"pom": "sha256-3uocEIH4TsePK074yLEPseyHxbdkreKq1Uelx+60//0="
|
|
||||||
},
|
|
||||||
"com/google/code/gson#gson-parent/2.8.5": {
|
|
||||||
"pom": "sha256-jx/scrkaceo57Dn193jE0RJLawl8bVWzpQtVSlIjeyc="
|
|
||||||
},
|
|
||||||
"com/google/code/gson#gson/2.8.5": {
|
|
||||||
"jar": "sha256-IzoBSfw2XJ9u29aDz+JmsZvcdzvpjqva9rPJJLSOfYE=",
|
|
||||||
"pom": "sha256-uDCFV6f8zJLZ/nyM0FmSWLNhKF0uzedontqYhDJVoJI="
|
|
||||||
},
|
|
||||||
"de/undercouch#gradle-download-task/5.5.0": {
|
|
||||||
"jar": "sha256-q/7DKUbJfz8N62qP5HDon99K7FYneLm/bPp8RAehPiI=",
|
|
||||||
"module": "sha256-5q+RV5vPUg0udBmtEPB4j13RBsCLzLCc40sNB3UvlEc=",
|
|
||||||
"pom": "sha256-HXoKzY/wjdfQnruzxz1j1mYYyFGNudC9J0J7/BjL9Hs="
|
|
||||||
},
|
|
||||||
"de/undercouch/download#de.undercouch.download.gradle.plugin/5.5.0": {
|
|
||||||
"pom": "sha256-WNFNTmP4TrzAgj/2tk1804/2bFRtUp9gLj3ML1xPEZk="
|
|
||||||
},
|
|
||||||
"io/github/tomtzook#plugin/1.2.2": {
|
|
||||||
"jar": "sha256-tTNTLIWad6fNX4McGhtFiTkQqujQ14MXhv4llB2TjYs=",
|
|
||||||
"module": "sha256-91tklOgQk0ObuwzAs8+kumszoLjzK36bNUIChrb91Cc=",
|
|
||||||
"pom": "sha256-HliRlUYwjo3HQu/JqktYsiJy/TJTdvYTSuyHPH/3xys="
|
|
||||||
},
|
|
||||||
"io/github/tomtzook/gradle-cmake#io.github.tomtzook.gradle-cmake.gradle.plugin/1.2.2": {
|
|
||||||
"pom": "sha256-xqnleYCaGEjSEkRXp5CwK67T9sAJaxIIliGoxZTnDJo="
|
|
||||||
},
|
|
||||||
"org/fusesource#fusesource-pom/1.12": {
|
|
||||||
"pom": "sha256-xA2WDarc73sBwbHGZXr7rE//teUxaPj8sLKLhOb9zKE="
|
|
||||||
},
|
|
||||||
"org/fusesource/jansi#jansi/2.4.0": {
|
|
||||||
"jar": "sha256-bNkZkTI917L7KMqT16wSr1qGovUyeeKzWCezAxP9C58=",
|
|
||||||
"pom": "sha256-rECp8tDB7mMfw7CO+OLwvRS6IgEcp2/xvPZftWnq3zU="
|
|
||||||
},
|
|
||||||
"org/slf4j#slf4j-api/1.7.25": {
|
|
||||||
"jar": "sha256-GMSgCV1cHaa4F1kudnuyPSndL1YK1033X/OWHb3iW3k=",
|
|
||||||
"pom": "sha256-fNnXoLXZPf1GGhSIkbQ1Cc9AOpx/n7SQYNNVTfHIHh4="
|
|
||||||
},
|
|
||||||
"org/slf4j#slf4j-parent/1.7.25": {
|
|
||||||
"pom": "sha256-GPXFISDbA26I1hNviDnIMtB0vdqVx1bG9CkknS21SsY="
|
|
||||||
},
|
|
||||||
"org/sonatype/oss#oss-parent/7": {
|
|
||||||
"pom": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ="
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"https://repo.maven.apache.org/maven2": {
|
|
||||||
"com/google/code/gson#gson-parent/2.8.6": {
|
|
||||||
"pom": "sha256-NzZGOFnsGSZyleiUlAroKo9oRBMDESL+Nc58/34wp3Q="
|
|
||||||
},
|
|
||||||
"com/google/code/gson#gson/2.8.6": {
|
|
||||||
"jar": "sha256-yPtIOQVNKAswM/gA0fWpfeLwKOuLoutFitKH5Tbz8l8=",
|
|
||||||
"pom": "sha256-IXRBWmRzMtMP2gS9HPxwij7MhOr3UX9ZYYjYJE4QORE="
|
|
||||||
},
|
|
||||||
"junit#junit/4.12": {
|
|
||||||
"pom": "sha256-kPFj944/+28cetl96efrpO6iWAcUG4XW0SvmfKJUScQ="
|
|
||||||
},
|
|
||||||
"junit#junit/4.13.2": {
|
|
||||||
"jar": "sha256-jklbY0Rp1k+4rPo0laBly6zIoP/1XOHjEAe+TBbcV9M=",
|
|
||||||
"pom": "sha256-Vptpd+5GA8llwcRsMFj6bpaSkbAWDraWTdCSzYnq3ZQ="
|
|
||||||
},
|
|
||||||
"net/sf/jopt-simple#jopt-simple/5.0.4": {
|
|
||||||
"jar": "sha256-3ybMWPI19HfbB/dTulo6skPr5Xidn4ns9o3WLqmmbCg=",
|
|
||||||
"pom": "sha256-amd2O3avzZyAuV5cXiR4LRjMGw49m0VK0/h1THa3aBU="
|
|
||||||
},
|
|
||||||
"org/apiguardian#apiguardian-api/1.1.2": {
|
|
||||||
"jar": "sha256-tQlEisUG1gcxnxglN/CzXXEAdYLsdBgyofER5bW3Czg=",
|
|
||||||
"module": "sha256-4IAoExN1s1fR0oc06aT7QhbahLJAZByz7358fWKCI/w=",
|
|
||||||
"pom": "sha256-MjVQgdEJCVw9XTdNWkO09MG3XVSemD71ByPidy5TAqA="
|
|
||||||
},
|
|
||||||
"org/commonmark#commonmark-parent/0.17.1": {
|
|
||||||
"pom": "sha256-VQ6X1IOuWsZblW66NsnxqdlIV/bHs+qVmta7R2N4DiI="
|
|
||||||
},
|
|
||||||
"org/commonmark#commonmark/0.17.1": {
|
|
||||||
"jar": "sha256-5jrQgyZPWHdSJ0c8NduGbs3DhDxHvSvy8kdan65e938=",
|
|
||||||
"pom": "sha256-UFfBCkUrXNVyngvDZU+0vAx+VGAgCv/BqN1PfGOWPXI="
|
|
||||||
},
|
|
||||||
"org/hamcrest#hamcrest-core/1.3": {
|
|
||||||
"jar": "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=",
|
|
||||||
"pom": "sha256-/eOGp5BRc6GxA95quCBydYS1DQ4yKC4nl3h8IKZP+pM="
|
|
||||||
},
|
|
||||||
"org/hamcrest#hamcrest-parent/1.3": {
|
|
||||||
"pom": "sha256-bVNflO+2Y722gsnyelAzU5RogAlkK6epZ3UEvBvkEps="
|
|
||||||
},
|
|
||||||
"org/junit#junit-bom/5.9.2": {
|
|
||||||
"module": "sha256-qxN7pajjLJsGa/kSahx23VYUtyS6XAsCVJdyten0zx8=",
|
|
||||||
"pom": "sha256-LtB9ZYRRMfUzaoZHbJpAVrWdC1i5gVqzZ5uw82819wU="
|
|
||||||
},
|
|
||||||
"org/junit/jupiter#junit-jupiter-api/5.9.2": {
|
|
||||||
"jar": "sha256-92ehcPlxJ7CtNYK/M1jqu7vpgdn5ZBGFPmKdknaSb9U=",
|
|
||||||
"module": "sha256-y9Ae2F1HTMhbIT/iBrzpgmbWdZzSjWxeQb/kUJCepHs=",
|
|
||||||
"pom": "sha256-EK9g+mkKzNzr85TsWECdzs/x3sNwJopnA2ChFfcxxVw="
|
|
||||||
},
|
|
||||||
"org/junit/jupiter#junit-jupiter-engine/5.9.2": {
|
|
||||||
"jar": "sha256-dM/Ek4j3YEE/80jKLJqzlSdIS1fe7NFX8idaX4pf6XE=",
|
|
||||||
"module": "sha256-WmigqdMTI0BieAXap0YY+zTEXMUZp8LsgzQedDixOTM=",
|
|
||||||
"pom": "sha256-nfOOgj4a3Zplas+5Wc5zsHAE32yffANnwmt0PmVrWa8="
|
|
||||||
},
|
|
||||||
"org/junit/jupiter#junit-jupiter-migrationsupport/5.9.2": {
|
|
||||||
"jar": "sha256-1DTOe1gzyuX+9ovSfSfyABPrJ9U7bcl9eL8yS7YaDgQ=",
|
|
||||||
"module": "sha256-0tnRvL9p+RLgxT3fNO/HonM/0gCAhCA0d3Sig2ZFVZM=",
|
|
||||||
"pom": "sha256-KkAZMJh5lh9z788rZrJsF3TSjqF1U/72qAbA9sNbgqY="
|
|
||||||
},
|
|
||||||
"org/junit/platform#junit-platform-commons/1.9.2": {
|
|
||||||
"jar": "sha256-Yko9dF7x0o6VWmpnr47boP38XJutaApz9npwu5UKaD0=",
|
|
||||||
"module": "sha256-a6TIRhPluJ5mjuaomXHw2Q0OG4FyG4tf4MgAWPDOue4=",
|
|
||||||
"pom": "sha256-JAI/IMI1ppYJ+y+Vpgc4VX/PlBPzrpKpLhMpVH1hRck="
|
|
||||||
},
|
|
||||||
"org/junit/platform#junit-platform-engine/1.9.2": {
|
|
||||||
"jar": "sha256-JfI9xTWgkencgMAI+vKdy5K+kC5pEfd6c2+68BmQg2c=",
|
|
||||||
"module": "sha256-HehRQa+fWBU+JFdQaaE3X7vt169dhEy+MoeWU0nLofc=",
|
|
||||||
"pom": "sha256-LflCCmsk5fTzFCNeAc2cO49kYoXbL26C2G7gbvevTiQ="
|
|
||||||
},
|
|
||||||
"org/junit/vintage#junit-vintage-engine/5.9.2": {
|
|
||||||
"jar": "sha256-QeFt0yyPRiu8AysrefI5RBkbMuw5jQWFi6212r/9BhI=",
|
|
||||||
"module": "sha256-jMz93WRdDOdyFmeJhOtqEruXJQk0SVgOepIxTIxj0qQ=",
|
|
||||||
"pom": "sha256-n0TiazxEQSZXNjh58YscZBQX6nrCm66O5yfi8g2w9Ck="
|
|
||||||
},
|
|
||||||
"org/opentest4j#opentest4j/1.2.0": {
|
|
||||||
"jar": "sha256-WIEt5giY2Xb7ge87YtoFxmBMGP1KJJ9QRCgkefwoavI=",
|
|
||||||
"pom": "sha256-qW5nGBbB/4gDvex0ySQfAlvfsnfaXStO4CJmQFk2+ZQ="
|
|
||||||
},
|
|
||||||
"org/sonatype/oss#oss-parent/7": {
|
|
||||||
"pom": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ="
|
|
||||||
},
|
|
||||||
"systems/manifold#manifold-core-parent/2023.1.28": {
|
|
||||||
"pom": "sha256-ahN15Fn/32/sBPQOta1Tp+cScHjqREz7iUUTtPCfdJA="
|
|
||||||
},
|
|
||||||
"systems/manifold#manifold-deps-parent/2023.1.28": {
|
|
||||||
"pom": "sha256-DE+CPr0aN18k0zh2D7G5WreDvyrnO5Wd0wDt88AJbkY="
|
|
||||||
},
|
|
||||||
"systems/manifold#manifold-parent/2023.1.28": {
|
|
||||||
"pom": "sha256-J0ChX+GyGJ9xJMda85n+tR1IfdE6Ij0hhtaHYSOtU6w="
|
|
||||||
},
|
|
||||||
"systems/manifold#manifold-preprocessor/2023.1.28": {
|
|
||||||
"jar": "sha256-vRIrrVT6SX3zuMVcfSwhL9nHE0oqfrtMNXuKzli2UB8=",
|
|
||||||
"pom": "sha256-Ov7/Z6wWQo+0mSc5K9t4Yw0aehDcnQEBDSpy9fnGMiU="
|
|
||||||
},
|
|
||||||
"systems/manifold#manifold-rt/2023.1.28": {
|
|
||||||
"jar": "sha256-4cn28jDYci2C2tUEizvJkdv6LRe/BrLwypEC6N0sGl0=",
|
|
||||||
"pom": "sha256-SAJid1Td0/ltrFi7w2YDNDlWhggDxFB+jynCG/rYaok="
|
|
||||||
},
|
|
||||||
"systems/manifold#manifold-util/2023.1.28": {
|
|
||||||
"jar": "sha256-WjY+1jmh4gvUHjvEbreQqoIB54HBfoNoOIILZs3IT80=",
|
|
||||||
"pom": "sha256-CF4FlMbIuKBRMfa1OjcnIQ7EVgulP739XXFkui2/JR0="
|
|
||||||
},
|
|
||||||
"systems/manifold#manifold/2023.1.28": {
|
|
||||||
"jar": "sha256-kPQeNEgFGZkZPz3zejWHU9+npn6RYRpMgOftt+bksRw=",
|
|
||||||
"pom": "sha256-R2kHxQVkoYLTSSIm/jJhjeRx4uObTuHlTSWVp+jBkpw="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
fetchFromGitHub,
|
|
||||||
buildGhidraExtension,
|
|
||||||
}:
|
|
||||||
buildGhidraExtension rec {
|
|
||||||
pname = "lightkeeper";
|
|
||||||
version = "1.2.4";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "WorksButNotTested";
|
|
||||||
repo = "lightkeeper";
|
|
||||||
rev = version;
|
|
||||||
hash = "sha256-aGMWg6VQleKH/txlxpSw19QOotWZSqeW5Ve2SpWGhgA=";
|
|
||||||
};
|
|
||||||
preConfigure = ''
|
|
||||||
cd lightkeeper
|
|
||||||
'';
|
|
||||||
meta = {
|
|
||||||
description = "A port of the Lighthouse plugin to GHIDRA.";
|
|
||||||
homepage = "https://github.com/WorksButNotTested/lightkeeper";
|
|
||||||
license = lib.licenses.asl20;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,7 +1,6 @@
|
||||||
{
|
{ lib
|
||||||
lib,
|
, buildGhidraExtension
|
||||||
buildGhidraExtension,
|
, ghidra
|
||||||
ghidra,
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
buildGhidraExtension {
|
buildGhidraExtension {
|
||||||
|
@ -29,7 +28,7 @@ buildGhidraExtension {
|
||||||
downloadPage = "https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Extensions/MachineLearning";
|
downloadPage = "https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Extensions/MachineLearning";
|
||||||
sourceProvenance = with sourceTypes; [
|
sourceProvenance = with sourceTypes; [
|
||||||
fromSource
|
fromSource
|
||||||
binaryBytecode # deps
|
binaryBytecode # deps
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
fetchFromGitHub,
|
|
||||||
fetchpatch,
|
|
||||||
buildGhidraExtension,
|
|
||||||
ghidra,
|
|
||||||
}:
|
|
||||||
buildGhidraExtension {
|
|
||||||
pname = "ret-sync-ghidra";
|
|
||||||
version = "0-unstable-2024-05-29";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "bootleg";
|
|
||||||
repo = "ret-sync";
|
|
||||||
rev = "0617c75746ddde7fe2bdbbf880175af8ad27553e";
|
|
||||||
hash = "sha256-+G5ccdHnFL0sHpueuIYwLRU9FhzN658CYqQCHCBwxV4=";
|
|
||||||
};
|
|
||||||
patches = [
|
|
||||||
# This patch is needed to get the extension compiling with Ghidra 11.2.
|
|
||||||
# Once it's fixed upstream, the src can be updated and this can be removed.
|
|
||||||
(fetchpatch {
|
|
||||||
# https://github.com/bootleg/ret-sync/pull/126
|
|
||||||
name = "ghidra-11.2-fix.patch";
|
|
||||||
url = "https://github.com/bootleg/ret-sync/commit/d81d953c24b4369b499e90ba64c1c9f78513a008.patch";
|
|
||||||
hash = "sha256-t/voPcBfsZtfdYnskgBAPfqMTBw1LRTT0aXyyb5qtr8=";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
preConfigure = ''
|
|
||||||
cd ext_ghidra
|
|
||||||
'';
|
|
||||||
preInstall = ''
|
|
||||||
correct_version=$(ls dist | grep ${ghidra.version})
|
|
||||||
mv dist/$correct_version dist/safe.zip
|
|
||||||
rm dist/ghidra*
|
|
||||||
mv dist/safe.zip dist/$correct_version
|
|
||||||
'';
|
|
||||||
meta = with lib; {
|
|
||||||
description = "Reverse-Engineering Tools SYNChronization. Allows syncing between a debugging session and Ghidra";
|
|
||||||
homepage = "https://github.com/bootleg/ret-sync";
|
|
||||||
license = licenses.gpl3Only;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,8 +1,7 @@
|
||||||
{
|
{ lib
|
||||||
lib,
|
, buildGhidraExtension
|
||||||
buildGhidraExtension,
|
, ghidra
|
||||||
ghidra,
|
, python3
|
||||||
python3,
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
buildGhidraExtension {
|
buildGhidraExtension {
|
||||||
|
@ -35,7 +34,7 @@ buildGhidraExtension {
|
||||||
downloadPage = "https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Extensions/SleighDevTools";
|
downloadPage = "https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Extensions/SleighDevTools";
|
||||||
sourceProvenance = with sourceTypes; [
|
sourceProvenance = with sourceTypes; [
|
||||||
fromSource
|
fromSource
|
||||||
binaryBytecode # deps
|
binaryBytecode # deps
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
fetchFromGitHub,
|
|
||||||
buildGhidraExtension,
|
|
||||||
ghidra,
|
|
||||||
ant,
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
version = "2.3.1";
|
|
||||||
in
|
|
||||||
buildGhidraExtension {
|
|
||||||
pname = "wasm";
|
|
||||||
inherit version;
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "nneonneo";
|
|
||||||
repo = "ghidra-wasm-plugin";
|
|
||||||
rev = "v${version}";
|
|
||||||
hash = "sha256-aoSMNzv+TgydiXM4CbvAyu/YsxmdZPvpkZkYEE3C+V4=";
|
|
||||||
};
|
|
||||||
|
|
||||||
nativeBuildInputs = [ ant ];
|
|
||||||
|
|
||||||
configurePhase = ''
|
|
||||||
runHook preConfigure
|
|
||||||
|
|
||||||
# this doesn't really compile, it compresses sinc into sla
|
|
||||||
pushd data
|
|
||||||
ant -f build.xml -Dghidra.install.dir=${ghidra}/lib/ghidra sleighCompile
|
|
||||||
popd
|
|
||||||
|
|
||||||
runHook postConfigure
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "Ghidra Wasm plugin with disassembly and decompilation support";
|
|
||||||
homepage = "https://github.com/nneonneo/ghidra-wasm-plugin";
|
|
||||||
downloadPage = "https://github.com/nneonneo/ghidra-wasm-plugin/releases/tag/v${version}";
|
|
||||||
changelog = "https://github.com/nneonneo/ghidra-wasm-plugin/releases/tag/v${version}";
|
|
||||||
license = lib.licenses.gpl3;
|
|
||||||
maintainers = [ lib.maintainers.BonusPlay ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,49 +1,36 @@
|
||||||
{
|
{ lib
|
||||||
lib,
|
, stdenv
|
||||||
stdenv,
|
, callPackage
|
||||||
callPackage,
|
, symlinkJoin
|
||||||
symlinkJoin,
|
, makeBinaryWrapper
|
||||||
makeBinaryWrapper,
|
, desktopToDarwinBundle
|
||||||
desktopToDarwinBundle,
|
, ghidra
|
||||||
ghidra,
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
ghidra-extensions = callPackage ./extensions.nix { inherit ghidra; };
|
ghidra-extensions = callPackage ./extensions.nix { inherit ghidra; };
|
||||||
allExtensions = lib.filterAttrs (n: pkg: lib.isDerivation pkg) ghidra-extensions;
|
allExtensions = lib.filterAttrs (n: pkg: lib.isDerivation pkg) ghidra-extensions;
|
||||||
|
|
||||||
/*
|
/* Make Ghidra with additional extensions
|
||||||
Make Ghidra with additional extensions
|
Example:
|
||||||
Example:
|
pkgs.ghidra.withExtensions (p: with p; [
|
||||||
pkgs.ghidra.withExtensions (p: with p; [
|
ghostrings
|
||||||
ghostrings
|
]);
|
||||||
]);
|
=> /nix/store/3yn0rbnz5mbrxf0x70jbjq73wgkszr5c-ghidra-with-extensions-10.2.2
|
||||||
=> /nix/store/3yn0rbnz5mbrxf0x70jbjq73wgkszr5c-ghidra-with-extensions-10.2.2
|
|
||||||
*/
|
*/
|
||||||
withExtensions =
|
withExtensions = f: (symlinkJoin {
|
||||||
f:
|
name = "${ghidra.pname}-with-extensions-${lib.getVersion ghidra}";
|
||||||
(symlinkJoin {
|
paths = (f allExtensions);
|
||||||
name = "${ghidra.pname}-with-extensions-${lib.getVersion ghidra}";
|
nativeBuildInputs = [ makeBinaryWrapper ]
|
||||||
outputs = [ "out" "doc" ];
|
++ lib.optional stdenv.hostPlatform.isDarwin desktopToDarwinBundle;
|
||||||
paths = (f allExtensions);
|
postBuild = ''
|
||||||
nativeBuildInputs = [
|
makeWrapper '${ghidra}/bin/ghidra' "$out/bin/ghidra" \
|
||||||
makeBinaryWrapper
|
--set NIX_GHIDRAHOME "$out/lib/ghidra/Ghidra"
|
||||||
] ++ lib.optional stdenv.hostPlatform.isDarwin desktopToDarwinBundle;
|
ln -s ${ghidra}/share $out/share
|
||||||
postBuild =
|
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||||
''
|
convertDesktopFiles $prefix
|
||||||
makeWrapper '${ghidra}/bin/ghidra' "$out/bin/ghidra" \
|
'';
|
||||||
--set NIX_GHIDRAHOME "$out/lib/ghidra/Ghidra"
|
inherit (ghidra) meta;
|
||||||
makeWrapper '${ghidra}/bin/ghidra-analyzeHeadless' "$out/bin/ghidra-analyzeHeadless" \
|
});
|
||||||
--set NIX_GHIDRAHOME "$out/lib/ghidra/Ghidra"
|
|
||||||
ln -s ${ghidra}/share $out/share
|
|
||||||
|
|
||||||
mkdir -p "$doc/share/doc"
|
|
||||||
ln -s "${ghidra.doc}/share/doc/ghidra" "$doc/share/doc"
|
|
||||||
''
|
|
||||||
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
|
|
||||||
convertDesktopFiles $prefix
|
|
||||||
'';
|
|
||||||
inherit (ghidra) meta;
|
|
||||||
});
|
|
||||||
in
|
in
|
||||||
withExtensions
|
withExtensions
|
||||||
|
|
|
@ -0,0 +1,214 @@
|
||||||
|
From ffb6777d58f068db7e14372415154cd93f77766e Mon Sep 17 00:00:00 2001
|
||||||
|
From: roblabla <unfiltered@roblab.la>
|
||||||
|
Date: Wed, 31 Jan 2024 13:19:55 +0100
|
||||||
|
Subject: [PATCH] Use com.google.protobuf:protobuf-gradle-plugin
|
||||||
|
|
||||||
|
---
|
||||||
|
Ghidra/Debug/Debugger-gadp/build.gradle | 7 +-
|
||||||
|
Ghidra/Debug/Debugger-isf/build.gradle | 8 +-
|
||||||
|
Ghidra/Debug/Debugger-rmi-trace/build.gradle | 14 +--
|
||||||
|
build.gradle | 6 ++
|
||||||
|
gradle/debugger/hasProtobuf.gradle | 94 --------------------
|
||||||
|
5 files changed, 26 insertions(+), 103 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Ghidra/Debug/Debugger-gadp/build.gradle b/Ghidra/Debug/Debugger-gadp/build.gradle
|
||||||
|
index 9e1c57faf..3a3242eb5 100644
|
||||||
|
--- a/Ghidra/Debug/Debugger-gadp/build.gradle
|
||||||
|
+++ b/Ghidra/Debug/Debugger-gadp/build.gradle
|
||||||
|
@@ -18,11 +18,16 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
|
||||||
|
-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
|
||||||
|
+apply plugin: 'com.google.protobuf'
|
||||||
|
|
||||||
|
apply plugin: 'eclipse'
|
||||||
|
eclipse.project.name = 'Debug Debugger-gadp'
|
||||||
|
|
||||||
|
+buildscript {
|
||||||
|
+ dependencies {
|
||||||
|
+ classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
dependencies {
|
||||||
|
api project(':Framework-AsyncComm')
|
||||||
|
api project(':Framework-Debugging')
|
||||||
|
diff --git a/Ghidra/Debug/Debugger-isf/build.gradle b/Ghidra/Debug/Debugger-isf/build.gradle
|
||||||
|
index d135294a0..785681ca2 100644
|
||||||
|
--- a/Ghidra/Debug/Debugger-isf/build.gradle
|
||||||
|
+++ b/Ghidra/Debug/Debugger-isf/build.gradle
|
||||||
|
@@ -18,11 +18,15 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
|
||||||
|
-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
|
||||||
|
-
|
||||||
|
+apply plugin: 'com.google.protobuf'
|
||||||
|
apply plugin: 'eclipse'
|
||||||
|
eclipse.project.name = 'Debug Debugger-isf'
|
||||||
|
|
||||||
|
+buildscript {
|
||||||
|
+ dependencies {
|
||||||
|
+ classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
dependencies {
|
||||||
|
api project(':Framework-AsyncComm')
|
||||||
|
api project(':Framework-Debugging')
|
||||||
|
diff --git a/Ghidra/Debug/Debugger-rmi-trace/build.gradle b/Ghidra/Debug/Debugger-rmi-trace/build.gradle
|
||||||
|
index 40fbc17ab..7517ffe6e 100644
|
||||||
|
--- a/Ghidra/Debug/Debugger-rmi-trace/build.gradle
|
||||||
|
+++ b/Ghidra/Debug/Debugger-rmi-trace/build.gradle
|
||||||
|
@@ -18,12 +18,17 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
|
||||||
|
-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
|
||||||
|
+apply plugin: 'com.google.protobuf'
|
||||||
|
apply from: "${rootProject.projectDir}/gradle/debugger/hasPythonPackage.gradle"
|
||||||
|
|
||||||
|
apply plugin: 'eclipse'
|
||||||
|
eclipse.project.name = 'Debug Debugger-rmi-trace'
|
||||||
|
|
||||||
|
+buildscript {
|
||||||
|
+ dependencies {
|
||||||
|
+ classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
dependencies {
|
||||||
|
api project(':Pty')
|
||||||
|
api project(':Debugger')
|
||||||
|
@@ -44,12 +49,9 @@ task generateProtoPy {
|
||||||
|
ext.outdir = file("build/generated/source/proto/main/py")
|
||||||
|
outputs.dir(outdir)
|
||||||
|
inputs.files(src)
|
||||||
|
- dependsOn(configurations.protocArtifact)
|
||||||
|
+ dependsOn(protobuf.generateProtoTasks.all())
|
||||||
|
doLast {
|
||||||
|
- def exe = configurations.protocArtifact.first()
|
||||||
|
- if (!isCurrentWindows()) {
|
||||||
|
- exe.setExecutable(true)
|
||||||
|
- }
|
||||||
|
+ def exe = protobuf.tools.protoc.path
|
||||||
|
exec {
|
||||||
|
commandLine exe, "--python_out=$outdir", "-I$srcdir"
|
||||||
|
args src
|
||||||
|
diff --git a/build.gradle b/build.gradle
|
||||||
|
index b0c717fb1..5f56506a5 100644
|
||||||
|
--- a/build.gradle
|
||||||
|
+++ b/build.gradle
|
||||||
|
@@ -74,6 +74,12 @@ if (flatRepo.isDirectory()) {
|
||||||
|
jcenter()
|
||||||
|
flatDir name: "flat", dirs:["$flatRepo"]
|
||||||
|
}
|
||||||
|
+ buildscript {
|
||||||
|
+ repositories {
|
||||||
|
+ mavenLocal()
|
||||||
|
+ mavenCentral()
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
diff --git a/gradle/debugger/hasProtobuf.gradle b/gradle/debugger/hasProtobuf.gradle
|
||||||
|
index 23b4ce74b..e69de29bb 100644
|
||||||
|
--- a/gradle/debugger/hasProtobuf.gradle
|
||||||
|
+++ b/gradle/debugger/hasProtobuf.gradle
|
||||||
|
@@ -1,94 +0,0 @@
|
||||||
|
-/* ###
|
||||||
|
- * IP: GHIDRA
|
||||||
|
- *
|
||||||
|
- * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
- * you may not use this file except in compliance with the License.
|
||||||
|
- * You may obtain a copy of the License at
|
||||||
|
- *
|
||||||
|
- * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
- *
|
||||||
|
- * Unless required by applicable law or agreed to in writing, software
|
||||||
|
- * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
- * See the License for the specific language governing permissions and
|
||||||
|
- * limitations under the License.
|
||||||
|
- */
|
||||||
|
-/*plugins {
|
||||||
|
- id 'com.google.protobuf' version '0.8.10'
|
||||||
|
-}*/
|
||||||
|
-
|
||||||
|
-configurations {
|
||||||
|
- allProtocArtifacts
|
||||||
|
- protocArtifact
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-def platform = getCurrentPlatformName()
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-dependencies {
|
||||||
|
- allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:windows-x86_64@exe'
|
||||||
|
- allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:linux-x86_64@exe'
|
||||||
|
- allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:linux-aarch_64@exe'
|
||||||
|
- allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:osx-x86_64@exe'
|
||||||
|
- allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:osx-aarch_64@exe'
|
||||||
|
-
|
||||||
|
- if (isCurrentWindows()) {
|
||||||
|
- protocArtifact 'com.google.protobuf:protoc:3.21.8:windows-x86_64@exe'
|
||||||
|
- }
|
||||||
|
- if (isCurrentLinux()) {
|
||||||
|
- if (platform.endsWith("x86_64")) {
|
||||||
|
- protocArtifact 'com.google.protobuf:protoc:3.21.8:linux-x86_64@exe'
|
||||||
|
- }
|
||||||
|
- else {
|
||||||
|
- protocArtifact 'com.google.protobuf:protoc:3.21.8:linux-aarch_64@exe'
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- if (isCurrentMac()) {
|
||||||
|
- if (platform.endsWith("x86_64")) {
|
||||||
|
- protocArtifact 'com.google.protobuf:protoc:3.21.8:osx-x86_64@exe'
|
||||||
|
- }
|
||||||
|
- else {
|
||||||
|
- protocArtifact 'com.google.protobuf:protoc:3.21.8:osx-aarch_64@exe'
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-/*protobuf {
|
||||||
|
- protoc {
|
||||||
|
- artifact = 'com.google.protobuf:protoc:3.21.8'
|
||||||
|
- }
|
||||||
|
-}*/
|
||||||
|
-
|
||||||
|
-task generateProto {
|
||||||
|
- ext.srcdir = file("src/main/proto")
|
||||||
|
- ext.src = fileTree(srcdir) {
|
||||||
|
- include "**/*.proto"
|
||||||
|
- }
|
||||||
|
- ext.outdir = file("build/generated/source/proto/main/java")
|
||||||
|
- outputs.dir(outdir)
|
||||||
|
- inputs.files(src)
|
||||||
|
- dependsOn(configurations.protocArtifact)
|
||||||
|
- doLast {
|
||||||
|
- def exe = configurations.protocArtifact.first()
|
||||||
|
- if (!isCurrentWindows()) {
|
||||||
|
- exe.setExecutable(true)
|
||||||
|
- }
|
||||||
|
- exec {
|
||||||
|
- commandLine exe, "--java_out=$outdir", "-I$srcdir"
|
||||||
|
- args src
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-tasks.compileJava.dependsOn(tasks.generateProto)
|
||||||
|
-tasks.eclipse.dependsOn(tasks.generateProto)
|
||||||
|
-rootProject.tasks.prepDev.dependsOn(tasks.generateProto)
|
||||||
|
-
|
||||||
|
-sourceSets {
|
||||||
|
- main {
|
||||||
|
- java {
|
||||||
|
- srcDir tasks.generateProto.outdir
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
-zipSourceSubproject.dependsOn generateProto
|
||||||
|
--
|
||||||
|
2.42.0
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
diff --git a/Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java b/Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java
|
||||||
|
index ea12a661f0..da7779b07f 100644
|
||||||
|
--- a/Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java
|
||||||
|
+++ b/Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java
|
||||||
|
@@ -36,6 +36,10 @@ public class ApplicationUtilities {
|
||||||
|
*/
|
||||||
|
public static Collection<ResourceFile> findDefaultApplicationRootDirs() {
|
||||||
|
Collection<ResourceFile> applicationRootDirs = new ArrayList<>();
|
||||||
|
+ String nixGhidraHome = System.getenv("NIX_GHIDRAHOME");
|
||||||
|
+ if (nixGhidraHome != null) {
|
||||||
|
+ applicationRootDirs.add(new ResourceFile(nixGhidraHome));
|
||||||
|
+ };
|
||||||
|
ResourceFile applicationRootDir = findPrimaryApplicationRootDir();
|
||||||
|
if (applicationRootDir != null) {
|
||||||
|
applicationRootDirs.add(applicationRootDir);
|
|
@ -0,0 +1,26 @@
|
||||||
|
diff --git a/Ghidra/RuntimeScripts/Common/support/buildExtension.gradle b/Ghidra/RuntimeScripts/Common/support/buildExtension.gradle
|
||||||
|
index bc194f219..94b00fabd 100644
|
||||||
|
--- a/Ghidra/RuntimeScripts/Common/support/buildExtension.gradle
|
||||||
|
+++ b/Ghidra/RuntimeScripts/Common/support/buildExtension.gradle
|
||||||
|
@@ -82,7 +82,7 @@ dependencies {
|
||||||
|
helpPath fileTree(dir: ghidraDir + '/Features/Base', include: "**/Base.jar")
|
||||||
|
}
|
||||||
|
|
||||||
|
-def ZIP_NAME_PREFIX = "${DISTRO_PREFIX}_${RELEASE_NAME}_${getCurrentDate()}"
|
||||||
|
+def ZIP_NAME_PREFIX = "${DISTRO_PREFIX}_${RELEASE_NAME}"
|
||||||
|
def DISTRIBUTION_DIR = file("dist")
|
||||||
|
|
||||||
|
def pathInZip = "${project.name}"
|
||||||
|
diff --git a/gradle/root/distribution.gradle b/gradle/root/distribution.gradle
|
||||||
|
index f44c8267b..f6231c417 100644
|
||||||
|
--- a/gradle/root/distribution.gradle
|
||||||
|
+++ b/gradle/root/distribution.gradle
|
||||||
|
@@ -32,7 +32,7 @@ apply from: "$rootProject.projectDir/gradle/support/sbom.gradle"
|
||||||
|
def currentPlatform = getCurrentPlatformName()
|
||||||
|
def PROJECT_DIR = file (rootProject.projectDir.absolutePath)
|
||||||
|
ext.DISTRIBUTION_DIR = file("$buildDir/dist")
|
||||||
|
-ext.ZIP_NAME_PREFIX = "${rootProject.DISTRO_PREFIX}_${rootProject.BUILD_DATE_SHORT}"
|
||||||
|
+ext.ZIP_NAME_PREFIX = "${rootProject.DISTRO_PREFIX}"
|
||||||
|
ext.ZIP_DIR_PREFIX = "${rootProject.DISTRO_PREFIX}"
|
||||||
|
ext.ALL_REPOS = [rootProject.file('.').getName()]
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
{ lib
|
||||||
|
, stdenv
|
||||||
|
, unzip
|
||||||
|
, jdk
|
||||||
|
, gradle
|
||||||
|
, ghidra
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
metaCommon = oldMeta:
|
||||||
|
oldMeta // (with lib; {
|
||||||
|
maintainers = (oldMeta.maintainers or []) ++ (with maintainers; [ vringar ]);
|
||||||
|
platforms = oldMeta.platforms or ghidra.meta.platforms;
|
||||||
|
});
|
||||||
|
|
||||||
|
buildGhidraExtension = {
|
||||||
|
pname, nativeBuildInputs ? [], meta ? { }, ...
|
||||||
|
}@args:
|
||||||
|
stdenv.mkDerivation (args // {
|
||||||
|
nativeBuildInputs = nativeBuildInputs ++ [
|
||||||
|
unzip
|
||||||
|
jdk
|
||||||
|
gradle
|
||||||
|
];
|
||||||
|
|
||||||
|
buildPhase = args.buildPhase or ''
|
||||||
|
runHook preBuild
|
||||||
|
|
||||||
|
# Set project name, otherwise defaults to directory name
|
||||||
|
echo -e '\nrootProject.name = "${pname}"' >> settings.gradle
|
||||||
|
|
||||||
|
export GRADLE_USER_HOME=$(mktemp -d)
|
||||||
|
gradle \
|
||||||
|
--offline \
|
||||||
|
--no-daemon \
|
||||||
|
-PGHIDRA_INSTALL_DIR=${ghidra}/lib/ghidra
|
||||||
|
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = args.installPhase or ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/lib/ghidra/Ghidra/Extensions
|
||||||
|
unzip -d $out/lib/ghidra/Ghidra/Extensions dist/*.zip
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = metaCommon meta;
|
||||||
|
});
|
||||||
|
|
||||||
|
buildGhidraScripts = { pname, meta ? { }, ... }@args:
|
||||||
|
stdenv.mkDerivation (args // {
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
GHIDRA_HOME=$out/lib/ghidra/Ghidra/Extensions/${pname}
|
||||||
|
mkdir -p $GHIDRA_HOME
|
||||||
|
cp -r . $GHIDRA_HOME/ghidra_scripts
|
||||||
|
|
||||||
|
touch $GHIDRA_HOME/Module.manifest
|
||||||
|
cat <<'EOF' > extension.properties
|
||||||
|
name=${pname}
|
||||||
|
description=${meta.description or ""}
|
||||||
|
author=
|
||||||
|
createdOn=
|
||||||
|
version=${lib.getVersion ghidra}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = metaCommon meta;
|
||||||
|
});
|
||||||
|
in
|
||||||
|
{ inherit buildGhidraExtension buildGhidraScripts; }
|
|
@ -0,0 +1,266 @@
|
||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
fetchFromGitHub,
|
||||||
|
lib,
|
||||||
|
callPackage,
|
||||||
|
gradle_7,
|
||||||
|
perl,
|
||||||
|
makeBinaryWrapper,
|
||||||
|
openjdk17,
|
||||||
|
unzip,
|
||||||
|
makeDesktopItem,
|
||||||
|
copyDesktopItems,
|
||||||
|
desktopToDarwinBundle,
|
||||||
|
xcbuild,
|
||||||
|
protobuf,
|
||||||
|
ghidra-extensions,
|
||||||
|
python3,
|
||||||
|
python3Packages,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
pkg_path = "$out/lib/ghidra";
|
||||||
|
pname = "ghidra";
|
||||||
|
version = "11.1.1";
|
||||||
|
|
||||||
|
releaseName = "NIX";
|
||||||
|
distroPrefix = "ghidra_${version}_${releaseName}";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "NationalSecurityAgency";
|
||||||
|
repo = "Ghidra";
|
||||||
|
rev = "Ghidra_${version}_build";
|
||||||
|
hash = "sha256-t96FcAK3JwO66dOf4OhpOfU8CQfAczfF61Cg7m+B3fA=";
|
||||||
|
# populate values that require us to use git. By doing this in postFetch we
|
||||||
|
# can delete .git afterwards and maintain better reproducibility of the src.
|
||||||
|
leaveDotGit = true;
|
||||||
|
postFetch = ''
|
||||||
|
cd "$out"
|
||||||
|
git rev-parse HEAD > $out/COMMIT
|
||||||
|
# 1970-Jan-01
|
||||||
|
date -u -d "@$(git log -1 --pretty=%ct)" "+%Y-%b-%d" > $out/SOURCE_DATE_EPOCH
|
||||||
|
# 19700101
|
||||||
|
date -u -d "@$(git log -1 --pretty=%ct)" "+%Y%m%d" > $out/SOURCE_DATE_EPOCH_SHORT
|
||||||
|
find "$out" -name .git -print0 | xargs -0 rm -rf
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
gradle = gradle_7;
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
# Use our own protoc binary instead of the prebuilt one
|
||||||
|
./0001-Use-protobuf-gradle-plugin.patch
|
||||||
|
|
||||||
|
# Override installation directory to allow loading extensions
|
||||||
|
./0002-Load-nix-extensions.patch
|
||||||
|
|
||||||
|
# Remove build dates from output filenames for easier reference
|
||||||
|
./0003-Remove-build-datestamp.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
# Set name of release (eg. PUBLIC, DEV, etc.)
|
||||||
|
sed -i -e 's/application\.release\.name=.*/application.release.name=${releaseName}/' Ghidra/application.properties
|
||||||
|
|
||||||
|
# Set build date and git revision
|
||||||
|
echo "application.build.date=$(cat SOURCE_DATE_EPOCH)" >> Ghidra/application.properties
|
||||||
|
echo "application.build.date.short=$(cat SOURCE_DATE_EPOCH_SHORT)" >> Ghidra/application.properties
|
||||||
|
echo "application.revision.ghidra=$(cat COMMIT)" >> Ghidra/application.properties
|
||||||
|
|
||||||
|
# Tells ghidra to use our own protoc binary instead of the prebuilt one.
|
||||||
|
cat >>Ghidra/Debug/Debugger-gadp/build.gradle <<HERE
|
||||||
|
protobuf {
|
||||||
|
protoc {
|
||||||
|
path = '${protobuf}/bin/protoc'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HERE
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Adds a gradle step that downloads all the dependencies to the gradle cache.
|
||||||
|
addResolveStep = ''
|
||||||
|
cat >>build.gradle <<HERE
|
||||||
|
task resolveDependencies {
|
||||||
|
doLast {
|
||||||
|
project.rootProject.allprojects.each { subProject ->
|
||||||
|
subProject.buildscript.configurations.each { configuration ->
|
||||||
|
resolveConfiguration(subProject, configuration, "buildscript config \''${configuration.name}")
|
||||||
|
}
|
||||||
|
subProject.configurations.each { configuration ->
|
||||||
|
resolveConfiguration(subProject, configuration, "config \''${configuration.name}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void resolveConfiguration(subProject, configuration, name) {
|
||||||
|
if (configuration.canBeResolved) {
|
||||||
|
logger.info("Resolving project {} {}", subProject.name, name)
|
||||||
|
configuration.resolve()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HERE
|
||||||
|
'';
|
||||||
|
|
||||||
|
# fake build to pre-download deps into fixed-output derivation
|
||||||
|
# Taken from mindustry derivation.
|
||||||
|
deps = stdenv.mkDerivation {
|
||||||
|
pname = "${pname}-deps";
|
||||||
|
inherit version src patches;
|
||||||
|
|
||||||
|
postPatch = addResolveStep;
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
gradle
|
||||||
|
perl
|
||||||
|
] ++ lib.optional stdenv.isDarwin xcbuild;
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
export HOME="$NIX_BUILD_TOP/home"
|
||||||
|
mkdir -p "$HOME"
|
||||||
|
export JAVA_TOOL_OPTIONS="-Duser.home='$HOME'"
|
||||||
|
export GRADLE_USER_HOME="$HOME/.gradle"
|
||||||
|
|
||||||
|
# First, fetch the static dependencies.
|
||||||
|
gradle --no-daemon --info -Dorg.gradle.java.home=${openjdk17} -I gradle/support/fetchDependencies.gradle init
|
||||||
|
|
||||||
|
# Then, fetch the maven dependencies.
|
||||||
|
gradle --no-daemon --info -Dorg.gradle.java.home=${openjdk17} resolveDependencies
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
# perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
|
||||||
|
| perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/maven/$x/$3/$4/$5" #e' \
|
||||||
|
| sh
|
||||||
|
cp -r dependencies $out/dependencies
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
outputHashAlgo = "sha256";
|
||||||
|
outputHashMode = "recursive";
|
||||||
|
outputHash = "sha256-66gL4UFlBUo2JIEOXoF6tFvXtBdEX4b2MeSrV1b6Vg4=";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
|
inherit
|
||||||
|
pname
|
||||||
|
version
|
||||||
|
src
|
||||||
|
patches
|
||||||
|
postPatch
|
||||||
|
;
|
||||||
|
|
||||||
|
# Don't create .orig files if the patch isn't an exact match.
|
||||||
|
patchFlags = [
|
||||||
|
"--no-backup-if-mismatch"
|
||||||
|
"-p1"
|
||||||
|
];
|
||||||
|
|
||||||
|
desktopItems = [
|
||||||
|
(makeDesktopItem {
|
||||||
|
name = "ghidra";
|
||||||
|
exec = "ghidra";
|
||||||
|
icon = "ghidra";
|
||||||
|
desktopName = "Ghidra";
|
||||||
|
genericName = "Ghidra Software Reverse Engineering Suite";
|
||||||
|
categories = [ "Development" ];
|
||||||
|
terminal = false;
|
||||||
|
startupWMClass = "ghidra-Ghidra";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeBuildInputs =
|
||||||
|
[
|
||||||
|
gradle
|
||||||
|
unzip
|
||||||
|
makeBinaryWrapper
|
||||||
|
copyDesktopItems
|
||||||
|
protobuf
|
||||||
|
python3
|
||||||
|
python3Packages.pip
|
||||||
|
]
|
||||||
|
++ lib.optionals stdenv.isDarwin [
|
||||||
|
xcbuild
|
||||||
|
desktopToDarwinBundle
|
||||||
|
];
|
||||||
|
|
||||||
|
dontStrip = true;
|
||||||
|
|
||||||
|
__darwinAllowLocalNetworking = true;
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
export HOME="$NIX_BUILD_TOP/home"
|
||||||
|
mkdir -p "$HOME"
|
||||||
|
export JAVA_TOOL_OPTIONS="-Duser.home='$HOME'"
|
||||||
|
|
||||||
|
ln -s ${deps}/dependencies dependencies
|
||||||
|
|
||||||
|
sed -i "s#mavenLocal()#mavenLocal(); maven { url '${deps}/maven' }#g" build.gradle
|
||||||
|
|
||||||
|
gradle --offline --no-daemon --info -Dorg.gradle.java.home=${openjdk17} buildGhidra
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p "${pkg_path}" "$out/share/applications"
|
||||||
|
|
||||||
|
ZIP=build/dist/$(ls build/dist)
|
||||||
|
echo $ZIP
|
||||||
|
unzip $ZIP -d ${pkg_path}
|
||||||
|
f=("${pkg_path}"/*)
|
||||||
|
mv "${pkg_path}"/*/* "${pkg_path}"
|
||||||
|
rmdir "''${f[@]}"
|
||||||
|
|
||||||
|
for f in Ghidra/Framework/Gui/src/main/resources/images/GhidraIcon*.png; do
|
||||||
|
res=$(basename "$f" ".png" | cut -d"_" -f3 | cut -c11-)
|
||||||
|
install -Dm444 "$f" "$out/share/icons/hicolor/''${res}x''${res}/apps/ghidra.png"
|
||||||
|
done;
|
||||||
|
# improved macOS icon support
|
||||||
|
install -Dm444 Ghidra/Framework/Gui/src/main/resources/images/GhidraIcon64.png $out/share/icons/hicolor/32x32@2/apps/ghidra.png
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
mkdir -p "$out/bin"
|
||||||
|
ln -s "${pkg_path}/ghidraRun" "$out/bin/ghidra"
|
||||||
|
wrapProgram "${pkg_path}/support/launch.sh" \
|
||||||
|
--set-default NIX_GHIDRAHOME "${pkg_path}/Ghidra" \
|
||||||
|
--prefix PATH : ${lib.makeBinPath [ openjdk17 ]}
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit releaseName distroPrefix;
|
||||||
|
inherit (ghidra-extensions.override { ghidra = finalAttrs.finalPackage; })
|
||||||
|
buildGhidraExtension
|
||||||
|
buildGhidraScripts
|
||||||
|
;
|
||||||
|
|
||||||
|
withExtensions = callPackage ./with-extensions.nix { ghidra = finalAttrs.finalPackage; };
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
changelog = "https://htmlpreview.github.io/?https://github.com/NationalSecurityAgency/ghidra/blob/Ghidra_${finalAttrs.version}_build/Ghidra/Configurations/Public_Release/src/global/docs/ChangeHistory.html";
|
||||||
|
description = "Software reverse engineering (SRE) suite of tools";
|
||||||
|
mainProgram = "ghidra";
|
||||||
|
homepage = "https://ghidra-sre.org/";
|
||||||
|
platforms = [
|
||||||
|
"x86_64-linux"
|
||||||
|
"aarch64-linux"
|
||||||
|
"x86_64-darwin"
|
||||||
|
"aarch64-darwin"
|
||||||
|
];
|
||||||
|
sourceProvenance = with sourceTypes; [
|
||||||
|
fromSource
|
||||||
|
binaryBytecode # deps
|
||||||
|
];
|
||||||
|
license = licenses.asl20;
|
||||||
|
maintainers = with maintainers; [
|
||||||
|
roblabla
|
||||||
|
vringar
|
||||||
|
];
|
||||||
|
broken = stdenv.isDarwin && stdenv.isx86_64;
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,83 @@
|
||||||
|
{ stdenv
|
||||||
|
, fetchzip
|
||||||
|
, lib
|
||||||
|
, makeWrapper
|
||||||
|
, autoPatchelfHook
|
||||||
|
, openjdk17
|
||||||
|
, pam
|
||||||
|
, makeDesktopItem
|
||||||
|
, icoutils
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
pkg_path = "$out/lib/ghidra";
|
||||||
|
|
||||||
|
desktopItem = makeDesktopItem {
|
||||||
|
name = "ghidra";
|
||||||
|
exec = "ghidra";
|
||||||
|
icon = "ghidra";
|
||||||
|
desktopName = "Ghidra";
|
||||||
|
genericName = "Ghidra Software Reverse Engineering Suite";
|
||||||
|
categories = [ "Development" ];
|
||||||
|
terminal = false;
|
||||||
|
startupWMClass = "ghidra-Ghidra";
|
||||||
|
};
|
||||||
|
|
||||||
|
in stdenv.mkDerivation rec {
|
||||||
|
pname = "ghidra";
|
||||||
|
version = "10.4";
|
||||||
|
versiondate = "20230928";
|
||||||
|
|
||||||
|
src = fetchzip {
|
||||||
|
url = "https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_${version}_build/ghidra_${version}_PUBLIC_${versiondate}.zip";
|
||||||
|
hash = "sha256-IiAQ9OKmr8ZgqmGftuW0ITdG06fb9Lr30n2H9GArctk=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
makeWrapper
|
||||||
|
icoutils
|
||||||
|
]
|
||||||
|
++ lib.optionals stdenv.isLinux [ autoPatchelfHook ];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
stdenv.cc.cc.lib
|
||||||
|
pam
|
||||||
|
];
|
||||||
|
|
||||||
|
dontStrip = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p "${pkg_path}"
|
||||||
|
mkdir -p "${pkg_path}" "$out/share/applications"
|
||||||
|
cp -a * "${pkg_path}"
|
||||||
|
ln -s ${desktopItem}/share/applications/* $out/share/applications
|
||||||
|
|
||||||
|
icotool -x "${pkg_path}/support/ghidra.ico"
|
||||||
|
rm ghidra_4_40x40x32.png
|
||||||
|
for f in ghidra_*.png; do
|
||||||
|
res=$(basename "$f" ".png" | cut -d"_" -f3 | cut -d"x" -f1-2)
|
||||||
|
mkdir -pv "$out/share/icons/hicolor/$res/apps"
|
||||||
|
mv "$f" "$out/share/icons/hicolor/$res/apps/ghidra.png"
|
||||||
|
done;
|
||||||
|
'';
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
mkdir -p "$out/bin"
|
||||||
|
ln -s "${pkg_path}/ghidraRun" "$out/bin/ghidra"
|
||||||
|
|
||||||
|
wrapProgram "${pkg_path}/support/launch.sh" \
|
||||||
|
--prefix PATH : ${lib.makeBinPath [ openjdk17 ]}
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Software reverse engineering (SRE) suite of tools developed by NSA's Research Directorate in support of the Cybersecurity mission";
|
||||||
|
mainProgram = "ghidra";
|
||||||
|
homepage = "https://github.com/NationalSecurityAgency/ghidra";
|
||||||
|
platforms = [ "x86_64-linux" "x86_64-darwin" ];
|
||||||
|
sourceProvenance = with sourceTypes; [ binaryBytecode ];
|
||||||
|
license = licenses.asl20;
|
||||||
|
maintainers = with maintainers; [ ck3d govanify mic92 ];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
{ lib, newScope, callPackage, ghidra }:
|
||||||
|
|
||||||
|
lib.makeScope newScope (self: {
|
||||||
|
inherit (callPackage ./build-extension.nix { inherit ghidra; }) buildGhidraExtension buildGhidraScripts;
|
||||||
|
|
||||||
|
ghidraninja-ghidra-scripts = self.callPackage ./extensions/ghidraninja-ghidra-scripts { };
|
||||||
|
|
||||||
|
gnudisassembler = self.callPackage ./extensions/gnudisassembler { inherit ghidra; };
|
||||||
|
|
||||||
|
machinelearning = self.callPackage ./extensions/machinelearning { inherit ghidra; };
|
||||||
|
|
||||||
|
sleighdevtools = self.callPackage ./extensions/sleighdevtools { inherit ghidra; };
|
||||||
|
|
||||||
|
})
|
|
@ -0,0 +1,36 @@
|
||||||
|
{ lib
|
||||||
|
, fetchFromGitHub
|
||||||
|
, buildGhidraScripts
|
||||||
|
, binwalk
|
||||||
|
, swift
|
||||||
|
, yara
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildGhidraScripts {
|
||||||
|
pname = "ghidraninja-ghidra-scripts";
|
||||||
|
version = "unstable-2020-10-07";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "ghidraninja";
|
||||||
|
repo = "ghidra_scripts";
|
||||||
|
rev = "99f2a8644a29479618f51e2d4e28f10ba5e9ac48";
|
||||||
|
sha256 = "aElx0mp66/OHQRfXwTkqdLL0gT2T/yL00bOobYleME8=";
|
||||||
|
};
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
# Replace subprocesses with store versions
|
||||||
|
substituteInPlace binwalk.py --replace-fail 'subprocess.call(["binwalk"' 'subprocess.call(["${binwalk}/bin/binwalk"'
|
||||||
|
substituteInPlace swift_demangler.py --replace-fail '"swift"' '"${swift}/bin/swift"'
|
||||||
|
substituteInPlace yara.py --replace-fail 'subprocess.check_output(["yara"' 'subprocess.check_output(["${yara}/bin/yara"'
|
||||||
|
substituteInPlace YaraSearch.py --replace-fail '"yara "' '"${yara}/bin/yara "'
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Scripts for the Ghidra software reverse engineering suite";
|
||||||
|
homepage = "https://github.com/ghidraninja/ghidra_scripts";
|
||||||
|
license = with licenses; [
|
||||||
|
gpl3Only
|
||||||
|
gpl2Only
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
{ lib
|
||||||
|
, stdenv
|
||||||
|
, fetchurl
|
||||||
|
, buildGhidraExtension
|
||||||
|
, ghidra
|
||||||
|
, flex
|
||||||
|
, bison
|
||||||
|
, texinfo
|
||||||
|
, perl
|
||||||
|
, zlib
|
||||||
|
, xcbuild
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
# Incorporates source from binutils
|
||||||
|
# https://github.com/NationalSecurityAgency/ghidra/blob/7ab9bf6abffb6938d61d072040fc34ad3331332b/GPL/GnuDisassembler/build.gradle#L34-L35
|
||||||
|
binutils-version = "2.41";
|
||||||
|
binutils-src = fetchurl {
|
||||||
|
url = "mirror://gnu/binutils/binutils-${binutils-version}.tar.bz2";
|
||||||
|
sha256 = "sha256-pMS+wFL3uDcAJOYDieGUN38/SLVmGEGOpRBn9nqqsws=";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
buildGhidraExtension {
|
||||||
|
pname = "gnudisassembler";
|
||||||
|
version = lib.getVersion ghidra;
|
||||||
|
|
||||||
|
src = "${ghidra}/lib/ghidra/Extensions/Ghidra/${ghidra.distroPrefix}_GnuDisassembler.zip";
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
ln -s ${binutils-src} binutils-${binutils-version}.tar.bz2
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Don't modify ELF stub resources
|
||||||
|
dontPatchELF = true;
|
||||||
|
dontStrip = true;
|
||||||
|
|
||||||
|
__darwinAllowLocalNetworking = true;
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
flex
|
||||||
|
bison
|
||||||
|
texinfo
|
||||||
|
perl
|
||||||
|
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
|
||||||
|
xcbuild
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
zlib
|
||||||
|
];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
EXTENSIONS_ROOT=$out/lib/ghidra/Ghidra/Extensions
|
||||||
|
mkdir -p $EXTENSIONS_ROOT
|
||||||
|
unzip -d $EXTENSIONS_ROOT $src
|
||||||
|
|
||||||
|
mkdir -p $EXTENSIONS_ROOT/GnuDisassembler/build
|
||||||
|
cp -r build/os $EXTENSIONS_ROOT/GnuDisassembler/build/
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Leverage the binutils disassembler capabilities for various processors";
|
||||||
|
homepage = "https://ghidra-sre.org/";
|
||||||
|
downloadPage = "https://github.com/NationalSecurityAgency/ghidra/tree/master/GPL/GnuDisassembler";
|
||||||
|
license = licenses.gpl2Only;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
{ lib
|
||||||
|
, buildGhidraExtension
|
||||||
|
, ghidra
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildGhidraExtension {
|
||||||
|
pname = "machinelearning";
|
||||||
|
version = lib.getVersion ghidra;
|
||||||
|
|
||||||
|
src = "${ghidra}/lib/ghidra/Extensions/Ghidra/${ghidra.distroPrefix}_MachineLearning.zip";
|
||||||
|
dontUnpack = true;
|
||||||
|
|
||||||
|
# Built as part ghidra
|
||||||
|
dontBuild = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/lib/ghidra/Ghidra/Extensions
|
||||||
|
unzip -d $out/lib/ghidra/Ghidra/Extensions $src
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
inherit (ghidra.meta) homepage license;
|
||||||
|
description = "Finds functions using ML";
|
||||||
|
downloadPage = "https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Extensions/MachineLearning";
|
||||||
|
sourceProvenance = with sourceTypes; [
|
||||||
|
fromSource
|
||||||
|
binaryBytecode # deps
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
{ lib
|
||||||
|
, buildGhidraExtension
|
||||||
|
, ghidra
|
||||||
|
, python3
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildGhidraExtension {
|
||||||
|
pname = "sleighdevtools";
|
||||||
|
version = lib.getVersion ghidra;
|
||||||
|
|
||||||
|
src = "${ghidra}/lib/ghidra/Extensions/Ghidra/${ghidra.distroPrefix}_SleighDevTools.zip";
|
||||||
|
dontUnpack = true;
|
||||||
|
|
||||||
|
# Built as part ghidra
|
||||||
|
dontBuild = true;
|
||||||
|
buildInputs = [ python3 ];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/lib/ghidra/Ghidra/Extensions
|
||||||
|
unzip -d $out/lib/ghidra/Ghidra/Extensions $src
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
inherit (ghidra.meta) homepage license;
|
||||||
|
description = "Sleigh language development tools including external disassembler capabilities";
|
||||||
|
longDescription = ''
|
||||||
|
Sleigh language development tools including external disassembler capabilities.
|
||||||
|
The GnuDisassembler extension may be also be required as a disassembly provider.
|
||||||
|
'';
|
||||||
|
downloadPage = "https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Extensions/SleighDevTools";
|
||||||
|
sourceProvenance = with sourceTypes; [
|
||||||
|
fromSource
|
||||||
|
binaryBytecode # deps
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
{ lib
|
||||||
|
, stdenv
|
||||||
|
, callPackage
|
||||||
|
, symlinkJoin
|
||||||
|
, makeBinaryWrapper
|
||||||
|
, desktopToDarwinBundle
|
||||||
|
, ghidra
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
ghidra-extensions = callPackage ./extensions.nix { inherit ghidra; };
|
||||||
|
allExtensions = lib.filterAttrs (n: pkg: lib.isDerivation pkg) ghidra-extensions;
|
||||||
|
|
||||||
|
/* Make Ghidra with additional extensions
|
||||||
|
Example:
|
||||||
|
pkgs.ghidra.withExtensions (p: with p; [
|
||||||
|
ghostrings
|
||||||
|
]);
|
||||||
|
=> /nix/store/3yn0rbnz5mbrxf0x70jbjq73wgkszr5c-ghidra-with-extensions-10.2.2
|
||||||
|
*/
|
||||||
|
withExtensions = f: (symlinkJoin {
|
||||||
|
name = "${ghidra.pname}-with-extensions-${lib.getVersion ghidra}";
|
||||||
|
paths = (f allExtensions);
|
||||||
|
nativeBuildInputs = [ makeBinaryWrapper ]
|
||||||
|
++ lib.optional stdenv.hostPlatform.isDarwin desktopToDarwinBundle;
|
||||||
|
postBuild = ''
|
||||||
|
makeWrapper '${ghidra}/bin/ghidra' "$out/bin/ghidra" \
|
||||||
|
--set NIX_GHIDRAHOME "$out/lib/ghidra/Ghidra"
|
||||||
|
ln -s ${ghidra}/share $out/share
|
||||||
|
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||||
|
convertDesktopFiles $prefix
|
||||||
|
'';
|
||||||
|
inherit (ghidra) meta;
|
||||||
|
});
|
||||||
|
in
|
||||||
|
withExtensions
|
|
@ -1,194 +0,0 @@
|
||||||
From 10a24d7831f51549d8c05193a0fbc329cc327fbe Mon Sep 17 00:00:00 2001
|
|
||||||
From: xenia <xenia@awoo.systems>
|
|
||||||
Date: Sat, 21 Dec 2024 15:33:10 -0500
|
|
||||||
Subject: [PATCH] implement lix support
|
|
||||||
|
|
||||||
---
|
|
||||||
CMakeLists.txt | 27 -------------
|
|
||||||
extra-builtins.cc | 87 ++++++++++++++++-------------------------
|
|
||||||
meson.build | 18 +++++++++
|
|
||||||
nix-plugins-config.h.in | 3 --
|
|
||||||
4 files changed, 51 insertions(+), 84 deletions(-)
|
|
||||||
delete mode 100644 CMakeLists.txt
|
|
||||||
create mode 100644 meson.build
|
|
||||||
delete mode 100644 nix-plugins-config.h.in
|
|
||||||
|
|
||||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
||||||
deleted file mode 100644
|
|
||||||
index 9674fe8..0000000
|
|
||||||
--- a/CMakeLists.txt
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,27 +0,0 @@
|
|
||||||
-cmake_minimum_required (VERSION 3.9)
|
|
||||||
-project (nix-plugins)
|
|
||||||
-set (nix-plugins_VERSION_MAJOR 15)
|
|
||||||
-set (nix-plugins_VERSION_MINOR 0)
|
|
||||||
-set (nix-plugins_VERSION_PATCH 0)
|
|
||||||
-
|
|
||||||
-find_package(PkgConfig)
|
|
||||||
-
|
|
||||||
-pkg_check_modules(NIX REQUIRED nix-expr>=2.24 nix-main>=2.24 nix-store>=2.24)
|
|
||||||
-
|
|
||||||
-find_path(BOOST_INCLUDE_DIR boost/format.hpp)
|
|
||||||
-if(BOOST_INCLUDE_DIR STREQUAL "BOOST_INCLUDE_DIR-NOTFOUND")
|
|
||||||
- message(FATAL_ERROR "Could not find Boost formatting library.")
|
|
||||||
-endif()
|
|
||||||
-include_directories(${BOOST_INCLUDE_DIR})
|
|
||||||
-
|
|
||||||
-if(APPLE)
|
|
||||||
- set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -flat_namespace -undefined suppress")
|
|
||||||
-endif()
|
|
||||||
-
|
|
||||||
-add_library(nix-extra-builtins MODULE extra-builtins.cc)
|
|
||||||
-configure_file(nix-plugins-config.h.in nix-plugins-config.h)
|
|
||||||
-target_include_directories(nix-extra-builtins PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
-target_include_directories(nix-extra-builtins PUBLIC ${NIX_INCLUDE_DIRS})
|
|
||||||
-target_compile_options(nix-extra-builtins PUBLIC ${NIX_CFLAGS_OTHER})
|
|
||||||
-
|
|
||||||
-install(TARGETS nix-extra-builtins DESTINATION lib/nix/plugins)
|
|
||||||
diff --git a/extra-builtins.cc b/extra-builtins.cc
|
|
||||||
index 3a0f90e..f2978f8 100644
|
|
||||||
--- a/extra-builtins.cc
|
|
||||||
+++ b/extra-builtins.cc
|
|
||||||
@@ -1,12 +1,8 @@
|
|
||||||
-#include <config.h>
|
|
||||||
-#include <primops.hh>
|
|
||||||
-#include <globals.hh>
|
|
||||||
-#include <config-global.hh>
|
|
||||||
-#include <eval-settings.hh>
|
|
||||||
-#include <common-eval-args.hh>
|
|
||||||
-#include <filtering-source-accessor.hh>
|
|
||||||
-
|
|
||||||
-#include "nix-plugins-config.h"
|
|
||||||
+#include <lix/config.h>
|
|
||||||
+#include <lix/libexpr/primops.hh>
|
|
||||||
+#include <lix/libstore/globals.hh>
|
|
||||||
+#include <lix/libexpr/eval-settings.hh>
|
|
||||||
+#include <lix/libcmd/common-eval-args.hh>
|
|
||||||
|
|
||||||
using namespace nix;
|
|
||||||
|
|
||||||
@@ -24,39 +20,38 @@ static GlobalConfig::Register rp(&extraBuiltinsSettings);
|
|
||||||
static void extraBuiltins(EvalState & state, const PosIdx pos,
|
|
||||||
Value ** _args, Value & v)
|
|
||||||
{
|
|
||||||
- static auto extraBuiltinsFile = state.rootPath(CanonPath(extraBuiltinsSettings.extraBuiltinsFile.to_string()));
|
|
||||||
- if (auto rootFS2 = state.rootFS.dynamic_pointer_cast<AllowListSourceAccessor>())
|
|
||||||
- rootFS2->allowPrefix(CanonPath(extraBuiltinsFile.path.abs()));
|
|
||||||
+ static auto extraBuiltinsFile =
|
|
||||||
+ SourcePath(CanonPath(extraBuiltinsSettings.extraBuiltinsFile.to_string()));
|
|
||||||
|
|
||||||
try {
|
|
||||||
- auto fun = state.allocValue();
|
|
||||||
- state.evalFile(extraBuiltinsFile, *fun);
|
|
||||||
- Value * arg;
|
|
||||||
- if (evalSettings.enableNativeCode) {
|
|
||||||
- arg = state.baseEnv.values[0];
|
|
||||||
- } else {
|
|
||||||
- auto attrs = state.buildBindings(2);
|
|
||||||
-
|
|
||||||
- auto sExec = state.symbols.create("exec");
|
|
||||||
- attrs.alloc(sExec).mkPrimOp(new PrimOp {
|
|
||||||
- .name = "exec",
|
|
||||||
- .arity = 1,
|
|
||||||
- .fun = prim_exec,
|
|
||||||
- });
|
|
||||||
-
|
|
||||||
- auto sImportNative = state.symbols.create("importNative");
|
|
||||||
- attrs.alloc(sImportNative).mkPrimOp(new PrimOp {
|
|
||||||
- .name = "importNative",
|
|
||||||
- .arity = 2,
|
|
||||||
- .fun = prim_importNative,
|
|
||||||
- });
|
|
||||||
-
|
|
||||||
- arg = state.allocValue();
|
|
||||||
- arg->mkAttrs(attrs);
|
|
||||||
- }
|
|
||||||
+ auto fun = state.ctx.mem.allocValue();
|
|
||||||
+
|
|
||||||
+ // bypass the source path checking by directly reading and evaluating the file
|
|
||||||
+ // this also bypasses the eval cache but oh well
|
|
||||||
+ Expr& e = state.ctx.parseExprFromFile(extraBuiltinsFile.unsafeIntoChecked());
|
|
||||||
+ state.eval(e, *fun);
|
|
||||||
+
|
|
||||||
+ auto attrs = state.ctx.buildBindings(2);
|
|
||||||
+
|
|
||||||
+ auto sExec = state.ctx.symbols.create("exec");
|
|
||||||
+ attrs.alloc(sExec).mkPrimOp(new PrimOp {
|
|
||||||
+ .name = "exec",
|
|
||||||
+ .arity = 1,
|
|
||||||
+ .fun = prim_exec,
|
|
||||||
+ });
|
|
||||||
+
|
|
||||||
+ auto sImportNative = state.ctx.symbols.create("importNative");
|
|
||||||
+ attrs.alloc(sImportNative).mkPrimOp(new PrimOp {
|
|
||||||
+ .name = "importNative",
|
|
||||||
+ .arity = 2,
|
|
||||||
+ .fun = prim_importNative,
|
|
||||||
+ });
|
|
||||||
+
|
|
||||||
+ Value* arg = state.ctx.mem.allocValue();
|
|
||||||
+ arg->mkAttrs(attrs);
|
|
||||||
v.mkApp(fun, arg);
|
|
||||||
state.forceValue(v, pos);
|
|
||||||
- } catch (FileNotFound &) {
|
|
||||||
+ } catch (SysError &) {
|
|
||||||
v.mkNull();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -66,19 +61,3 @@ static RegisterPrimOp rp1({
|
|
||||||
.arity = 0,
|
|
||||||
.fun = extraBuiltins,
|
|
||||||
});
|
|
||||||
-
|
|
||||||
-static void cflags(EvalState & state, const PosIdx _pos,
|
|
||||||
- Value ** _args, Value & v)
|
|
||||||
-{
|
|
||||||
- auto attrs = state.buildBindings(3);
|
|
||||||
- attrs.alloc("NIX_INCLUDE_DIRS").mkString(NIX_INCLUDE_DIRS);
|
|
||||||
- attrs.alloc("NIX_CFLAGS_OTHER").mkString(NIX_CFLAGS_OTHER);
|
|
||||||
- attrs.alloc("BOOST_INCLUDE_DIR").mkString(BOOST_INCLUDE_DIR);
|
|
||||||
- v.mkAttrs(attrs);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static RegisterPrimOp rp2({
|
|
||||||
- .name = "__nix-cflags",
|
|
||||||
- .arity = 0,
|
|
||||||
- .fun = cflags,
|
|
||||||
-});
|
|
||||||
diff --git a/meson.build b/meson.build
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..0be6ce6
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/meson.build
|
|
||||||
@@ -0,0 +1,18 @@
|
|
||||||
+project('lix-plugins',
|
|
||||||
+ ['c', 'cpp'],
|
|
||||||
+ default_options: ['cpp_std=gnu++20'],
|
|
||||||
+ version: '15.0.0')
|
|
||||||
+
|
|
||||||
+cpp = meson.get_compiler('cpp')
|
|
||||||
+pkgconfig = import('pkgconfig')
|
|
||||||
+
|
|
||||||
+lix_expr = dependency('lix-expr', version: '>=2.91')
|
|
||||||
+lix_store = dependency('lix-store', version: '>=2.91')
|
|
||||||
+lix_cmd = dependency('lix-cmd', version: '>=2.91')
|
|
||||||
+lix_main = dependency('lix-main', version: '>=2.91')
|
|
||||||
+boost = dependency('boost')
|
|
||||||
+
|
|
||||||
+library('lix-plugins',
|
|
||||||
+ 'extra-builtins.cc',
|
|
||||||
+ dependencies: [lix_expr, lix_store, lix_cmd, lix_main, boost],
|
|
||||||
+ install: true)
|
|
||||||
diff --git a/nix-plugins-config.h.in b/nix-plugins-config.h.in
|
|
||||||
deleted file mode 100644
|
|
||||||
index 459fea8..0000000
|
|
||||||
--- a/nix-plugins-config.h.in
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,3 +0,0 @@
|
|
||||||
-#define NIX_INCLUDE_DIRS "@NIX_INCLUDE_DIRS@"
|
|
||||||
-#define NIX_CFLAGS_OTHER "@NIX_CFLAGS_OTHER@"
|
|
||||||
-#define BOOST_INCLUDE_DIR "@BOOST_INCLUDE_DIR@"
|
|
||||||
--
|
|
||||||
2.47.2
|
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
fetchFromGitHub,
|
|
||||||
stdenv,
|
|
||||||
meson,
|
|
||||||
ninja,
|
|
||||||
pkg-config,
|
|
||||||
|
|
||||||
lix,
|
|
||||||
boost182,
|
|
||||||
}: stdenv.mkDerivation {
|
|
||||||
name = "lix-plugins";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "shlevy";
|
|
||||||
repo = "nix-plugins";
|
|
||||||
rev = "15.0.0";
|
|
||||||
hash = "sha256-C4VqKHi6nVAHuXVhqvTRRyn0Bb619ez4LzgUWPH1cbM=";
|
|
||||||
};
|
|
||||||
patches = [ ./0001-implement-lix-support.patch ];
|
|
||||||
|
|
||||||
mesonBuildType = "release";
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
meson
|
|
||||||
ninja
|
|
||||||
pkg-config
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
lix
|
|
||||||
boost182
|
|
||||||
];
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "Collection of miscellaneous plugins for the nix expression language.";
|
|
||||||
homepage = "https://github.com/shlevy/nix-plugins";
|
|
||||||
license = lib.licenses.mit;
|
|
||||||
maintainers = [];
|
|
||||||
platforms = lib.platforms.all;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
{
|
|
||||||
fetchurl,
|
|
||||||
lib,
|
|
||||||
stdenvNoCC,
|
|
||||||
|
|
||||||
ocaml,
|
|
||||||
|
|
||||||
version ? lib.versions.majorMinor ocaml.version,
|
|
||||||
}: stdenvNoCC.mkDerivation {
|
|
||||||
pname = "ocaml-manual";
|
|
||||||
inherit version;
|
|
||||||
|
|
||||||
src = fetchurl {
|
|
||||||
url = "http://caml.inria.fr/distrib/ocaml-${version}/ocaml-${version}-refman-html.tar.gz";
|
|
||||||
hash = "sha256-NhtwltAJKxG5bwvu4hevK4xv45gRRaLEtNQ9ZW5NyvU=";
|
|
||||||
};
|
|
||||||
|
|
||||||
buildPhase = "";
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p "$out/share/doc/ocaml"
|
|
||||||
cp -r . "$out/share/doc/ocaml/."
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "Offline manual for OCaml";
|
|
||||||
homepage = "https://ocaml.org";
|
|
||||||
license = lib.licenses.lgpl21Only;
|
|
||||||
maintainers = [];
|
|
||||||
platforms = lib.platforms.all;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -20,12 +20,4 @@ buildDunePackage rec {
|
||||||
|
|
||||||
nativeBuildInputs = [ ppxlib ];
|
nativeBuildInputs = [ ppxlib ];
|
||||||
propagatedBuildInputs = [ ppxlib uunf ];
|
propagatedBuildInputs = [ ppxlib uunf ];
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "opinionated ppx for string literals";
|
|
||||||
homepage = "https://git.lain.faith/haskal/ppx_unicode";
|
|
||||||
license = lib.licenses.cc-by-nc-sa-40;
|
|
||||||
maintainers = [];
|
|
||||||
platforms = with lib.platforms; linux ++ darwin;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
fetchgit,
|
|
||||||
buildDunePackage,
|
|
||||||
|
|
||||||
cstruct,
|
|
||||||
dune-configurator,
|
|
||||||
eio,
|
|
||||||
eio_linux,
|
|
||||||
eio_main,
|
|
||||||
ppx_unicode,
|
|
||||||
ptime,
|
|
||||||
xlog,
|
|
||||||
}:
|
|
||||||
buildDunePackage rec {
|
|
||||||
pname = "systemd-ml";
|
|
||||||
version = "0.1.0";
|
|
||||||
|
|
||||||
src = fetchgit {
|
|
||||||
url = "https://git.lain.faith/haskal/systemd-ml.git";
|
|
||||||
rev = version;
|
|
||||||
hash = "sha256-IkWBObwQJF5wum46OsLTH1wmPqWnF5/UuTnBFbs/o/0=";
|
|
||||||
};
|
|
||||||
|
|
||||||
minimalOcamlVersion = "5.1";
|
|
||||||
dontStrip = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = [ dune-configurator ppx_unicode ];
|
|
||||||
propagatedBuildInputs = [ cstruct dune-configurator eio eio_linux eio_main ppx_unicode ptime xlog ];
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "systemd-ml provides libsystemd-like functionality for interacting with the systemd service manager, in self-contained ocaml code (with a bit of C).";
|
|
||||||
homepage = "https://git.lain.faith/haskal/systemd-ml";
|
|
||||||
license = lib.licenses.fyptl;
|
|
||||||
maintainers = [];
|
|
||||||
platforms = lib.platforms.linux;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -22,12 +22,4 @@ buildDunePackage rec {
|
||||||
buildInputs = [ ppx_unicode ];
|
buildInputs = [ ppx_unicode ];
|
||||||
propagatedBuildInputs = [ ptime ppxlib ];
|
propagatedBuildInputs = [ ptime ppxlib ];
|
||||||
nativeBuildInputs = [ ppxlib ppx_unicode ];
|
nativeBuildInputs = [ ppxlib ppx_unicode ];
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "logging library for cats written in ocaml";
|
|
||||||
homepage = "https://git.lain.faith/haskal/xlog";
|
|
||||||
license = lib.licenses.lgpl2Plus;
|
|
||||||
maintainers = [];
|
|
||||||
platforms = with lib.platforms; linux ++ darwin;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,13 +58,4 @@ in buildPythonPackage rec {
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
|
||||||
pythonImportsCheck = [ "feedvalidator" ];
|
pythonImportsCheck = [ "feedvalidator" ];
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "W3C-customized version of the feedvalidator";
|
|
||||||
homepage = "https://github.com/w3c/feedvalidator";
|
|
||||||
license = lib.licenses.mit;
|
|
||||||
maintainers = [];
|
|
||||||
mainProgram = "feedvalidator";
|
|
||||||
platforms = lib.platforms.all;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
fetchPypi,
|
|
||||||
buildPythonPackage,
|
|
||||||
|
|
||||||
pyserial,
|
|
||||||
pyserial-asyncio,
|
|
||||||
}: buildPythonPackage rec {
|
|
||||||
pname = "megacom";
|
|
||||||
version = "0.1.2";
|
|
||||||
src = fetchPypi {
|
|
||||||
inherit pname version;
|
|
||||||
sha256 = "sha256-q2sU37uTX98RJDF0WFt7vzqtfLk3u25COCdKt34/Z70=";
|
|
||||||
};
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
pyserial
|
|
||||||
pyserial-asyncio
|
|
||||||
];
|
|
||||||
|
|
||||||
doCheck = false;
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
From ff4fb2534bae3dfe9ed12f323d23fc9df17ea447 Mon Sep 17 00:00:00 2001
|
|
||||||
From: xenia <xenia@awoo.systems>
|
|
||||||
Date: Mon, 7 Apr 2025 12:40:59 -0400
|
|
||||||
Subject: [PATCH] Fix KDE window icon
|
|
||||||
|
|
||||||
---
|
|
||||||
pympress/app.py | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/pympress/app.py b/pympress/app.py
|
|
||||||
index 7f5e3b7..6286d3e 100644
|
|
||||||
--- a/pympress/app.py
|
|
||||||
+++ b/pympress/app.py
|
|
||||||
@@ -101,7 +101,7 @@ class Pympress(Gtk.Application):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
GLib.set_application_name('pympress')
|
|
||||||
- # GLib.set_prgname('pympress') # Let prgname be auto-determined from sys.argv[0]
|
|
||||||
+ GLib.set_prgname('io.github.pympress')
|
|
||||||
Gtk.Application.__init__(self, application_id='io.github.pympress',
|
|
||||||
flags=Gio.ApplicationFlags.HANDLES_OPEN | Gio.ApplicationFlags.CAN_OVERRIDE_APP_ID)
|
|
||||||
|
|
||||||
--
|
|
||||||
2.47.2
|
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
fetchgit,
|
|
||||||
rustPlatform,
|
|
||||||
}:
|
|
||||||
rustPlatform.buildRustPackage rec {
|
|
||||||
pname = "zbasefind";
|
|
||||||
version = "0.1.0";
|
|
||||||
src = fetchgit {
|
|
||||||
url = "https://git.lain.faith/haskal/${pname}.git";
|
|
||||||
rev = version;
|
|
||||||
hash = "sha256-orvXNhM1WKlJ6j5Nuap0kZarydcujoEmF+OrdX7iFmA=";
|
|
||||||
};
|
|
||||||
|
|
||||||
cargoHash = "sha256-m8lXHfj6W/qltK+WrT0rE0gDNvvhghcXkeiX3Slx9X8=";
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "A firmware base address search tool";
|
|
||||||
homepage = "https://git.lain.faith/haskal/zbasefind";
|
|
||||||
license = lib.licenses.fyptl;
|
|
||||||
maintainers = [];
|
|
||||||
mainProgram = "zbasefind";
|
|
||||||
platforms = lib.platforms.all;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,94 +0,0 @@
|
||||||
{
|
|
||||||
fetchFromGitea,
|
|
||||||
writeShellScript,
|
|
||||||
writableTmpDirAsHomeHook,
|
|
||||||
|
|
||||||
stdenvNoCC,
|
|
||||||
|
|
||||||
texlivePackages,
|
|
||||||
texliveBasic,
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
texEnv = texliveBasic.withPackages (ps: with ps; [
|
|
||||||
# l3build
|
|
||||||
beamer
|
|
||||||
biblatex
|
|
||||||
enumitem
|
|
||||||
fileinfo
|
|
||||||
hypdoc
|
|
||||||
hyperref
|
|
||||||
listings
|
|
||||||
metalogo
|
|
||||||
parskip
|
|
||||||
pgf
|
|
||||||
pgfopts
|
|
||||||
setspace
|
|
||||||
xurl
|
|
||||||
microtype
|
|
||||||
|
|
||||||
latexmk
|
|
||||||
]);
|
|
||||||
in stdenvNoCC.mkDerivation rec {
|
|
||||||
pname = "moloch";
|
|
||||||
version = "1.0.2-DEV-xenia";
|
|
||||||
|
|
||||||
outputs = [
|
|
||||||
"tex"
|
|
||||||
"texdoc"
|
|
||||||
];
|
|
||||||
|
|
||||||
passthru.tlDeps = with texlivePackages; [ latex ];
|
|
||||||
|
|
||||||
src = fetchFromGitea {
|
|
||||||
domain = "git.lain.faith";
|
|
||||||
owner = "haskal";
|
|
||||||
repo = "${pname}-dragon";
|
|
||||||
rev = "v${version}";
|
|
||||||
hash = "sha256-eMlhJj4a2HTDhDzkS9KR+d76lt81iH7x//WZOA39tno=";
|
|
||||||
};
|
|
||||||
|
|
||||||
dontConfigure = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
texEnv
|
|
||||||
|
|
||||||
# multiple-outputs.sh fails if $out is not defined
|
|
||||||
(writeShellScript "force-tex-output.sh" ''
|
|
||||||
out="''${tex-}"
|
|
||||||
'')
|
|
||||||
|
|
||||||
writableTmpDirAsHomeHook # Need a writable $HOME for latexmk
|
|
||||||
];
|
|
||||||
|
|
||||||
# we just build manually, but moloch's own method of building is using l3build
|
|
||||||
# i have no idea how to get that working, so for now just do it normal style
|
|
||||||
buildPhase = ''
|
|
||||||
runHook preBuild
|
|
||||||
|
|
||||||
# Generate the style files
|
|
||||||
cd src
|
|
||||||
latex beamertheme${pname}.ins
|
|
||||||
|
|
||||||
# Generate the documentation
|
|
||||||
cp ../doc/${pname}.tex .
|
|
||||||
latexmk -pdf ${pname}.tex
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
runHook postBuild
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
path="$tex/tex/latex/${pname}"
|
|
||||||
mkdir -p "$path"
|
|
||||||
cp src/*.{cls,def,clo,sty} "$path/"
|
|
||||||
|
|
||||||
path="$texdoc/doc/tex/latex/${pname}"
|
|
||||||
mkdir -p "$path"
|
|
||||||
cp src/${pname}.pdf "$path/"
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,132 +0,0 @@
|
||||||
From bf7fcd7f1213b4690dc95453117c55e12e5fa523 Mon Sep 17 00:00:00 2001
|
|
||||||
From: xenia <xenia@awoo.systems>
|
|
||||||
Date: Mon, 3 Feb 2025 21:36:29 -0500
|
|
||||||
Subject: [PATCH] ZED: add support for desktop notifications (D-Bus)
|
|
||||||
|
|
||||||
---
|
|
||||||
cmd/zed/zed.d/zed-functions.sh | 85 ++++++++++++++++++++++++++++++++++
|
|
||||||
cmd/zed/zed.d/zed.rc | 8 ++++
|
|
||||||
2 files changed, 93 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/cmd/zed/zed.d/zed-functions.sh b/cmd/zed/zed.d/zed-functions.sh
|
|
||||||
index 6e00f153b..472941d10 100644
|
|
||||||
--- a/cmd/zed/zed.d/zed-functions.sh
|
|
||||||
+++ b/cmd/zed/zed.d/zed-functions.sh
|
|
||||||
@@ -213,6 +213,10 @@ zed_notify()
|
|
||||||
[ "${rv}" -eq 0 ] && num_success=$((num_success + 1))
|
|
||||||
[ "${rv}" -eq 1 ] && num_failure=$((num_failure + 1))
|
|
||||||
|
|
||||||
+ zed_notify_dbus "${subject}" "${pathname}"; rv=$?
|
|
||||||
+ [ "${rv}" -eq 0 ] && num_success=$((num_success + 1))
|
|
||||||
+ [ "${rv}" -eq 1 ] && num_failure=$((num_failure + 1))
|
|
||||||
+
|
|
||||||
[ "${num_success}" -gt 0 ] && return 0
|
|
||||||
[ "${num_failure}" -gt 0 ] && return 1
|
|
||||||
return 2
|
|
||||||
@@ -724,6 +728,87 @@ zed_notify_gotify()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
+# zed_notify_dbus (subject, pathname)
|
|
||||||
+#
|
|
||||||
+# Send a notification via D-Bus ...
|
|
||||||
+# The variable (ZED_USE_DBUS) defines whether to use D-Bus.
|
|
||||||
+#
|
|
||||||
+# Requires systemd (busctl) executables to be installed in the standard PATH.
|
|
||||||
+#
|
|
||||||
+# References
|
|
||||||
+# ...
|
|
||||||
+#
|
|
||||||
+# Arguments
|
|
||||||
+# subject: notification subject
|
|
||||||
+# pathname: pathname containing the notification message (OPTIONAL)
|
|
||||||
+#
|
|
||||||
+# Globals
|
|
||||||
+# ZED_USE_DBUS
|
|
||||||
+#
|
|
||||||
+# Return
|
|
||||||
+# 0: notification sent
|
|
||||||
+# 1: notification failed
|
|
||||||
+# 2: not configured
|
|
||||||
+#
|
|
||||||
+zed_notify_dbus()
|
|
||||||
+{
|
|
||||||
+ local subject="$1"
|
|
||||||
+ local pathname="${2:-"/dev/null"}"
|
|
||||||
+ local msg_body
|
|
||||||
+ local msg_out
|
|
||||||
+ local msg_err
|
|
||||||
+ local exit_status=0
|
|
||||||
+ local dir
|
|
||||||
+ local userid
|
|
||||||
+
|
|
||||||
+ [ -n "${ZED_USE_DBUS}" ] || return 2
|
|
||||||
+
|
|
||||||
+ if [ ! -r "${pathname}" ]; then
|
|
||||||
+ zed_log_err "dbus cannot read \"${pathname}\""
|
|
||||||
+ return 1
|
|
||||||
+ fi
|
|
||||||
+
|
|
||||||
+ zed_check_cmd "busctl" || return 1
|
|
||||||
+
|
|
||||||
+ # Read the message body in.
|
|
||||||
+ #
|
|
||||||
+ msg_body="$(cat "${pathname}")"
|
|
||||||
+
|
|
||||||
+ if [ -z "${msg_body}" ]
|
|
||||||
+ then
|
|
||||||
+ msg_body=$subject
|
|
||||||
+ subject=""
|
|
||||||
+ fi
|
|
||||||
+
|
|
||||||
+ # Send the notification to all users with a dbus session and check for
|
|
||||||
+ # errors.
|
|
||||||
+ # We use busctl(1) manually rather than eg notify-send(1) due to its
|
|
||||||
+ # ability to send D-Bus messages from root to a non-root user with the
|
|
||||||
+ # "--machine=<user>@.host" flag.
|
|
||||||
+ for dir in /run/user/*; do
|
|
||||||
+ if [ -S "$dir/bus" ]; then
|
|
||||||
+ userid="$(basename "$dir")"
|
|
||||||
+ msg_out="$( \
|
|
||||||
+ busctl --user --machine "$userid@.host" -- \
|
|
||||||
+ call org.freedesktop.Notifications \
|
|
||||||
+ /org/freedesktop/Notifications \
|
|
||||||
+ org.freedesktop.Notifications Notify \
|
|
||||||
+ "susssasa{sv}i" \
|
|
||||||
+ "ZFS" 0 "drive-harddisk-symbolic" \
|
|
||||||
+ "$subject" "$msg_body"
|
|
||||||
+ 0 2 urgency y 2 sender-pid x "$$" "-1" \
|
|
||||||
+ 2>/dev/null
|
|
||||||
+ )"; rv=$?
|
|
||||||
+
|
|
||||||
+ if [ "${rv}" -ne 0 ]; then
|
|
||||||
+ zed_log_err "busctl exit=${rv}"
|
|
||||||
+ exit_status=1
|
|
||||||
+ fi
|
|
||||||
+ fi
|
|
||||||
+ done
|
|
||||||
+ return $exit_status
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
|
|
||||||
# zed_rate_limit (tag, [interval])
|
|
||||||
#
|
|
||||||
diff --git a/cmd/zed/zed.d/zed.rc b/cmd/zed/zed.d/zed.rc
|
|
||||||
index af56147a9..7917552c5 100644
|
|
||||||
--- a/cmd/zed/zed.d/zed.rc
|
|
||||||
+++ b/cmd/zed/zed.d/zed.rc
|
|
||||||
@@ -197,3 +197,11 @@ ZED_SYSLOG_SUBCLASS_EXCLUDE="history_event"
|
|
||||||
# Gotify application associated with ZED_GOTIFY_APPTOKEN.
|
|
||||||
# Value is an integer 0 and up.
|
|
||||||
#ZED_GOTIFY_PRIORITY=""
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+##
|
|
||||||
+# Whether to send desktop notifications via D-Bus
|
|
||||||
+# If defined, busctl(1) will be used to send desktop notifications via
|
|
||||||
+# the org.freedesktop.Notifications D-Bus interface
|
|
||||||
+# Disabled by default; uncomment to enable.
|
|
||||||
+#ZED_USE_DBUS=1
|
|
||||||
--
|
|
||||||
2.47.2
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
info: final: prev:
|
|
||||||
rec {
|
|
||||||
inherit (builtins) attrValues attrNames getFlake typeOf;
|
|
||||||
currentSystem = info.currentSystem;
|
|
||||||
|
|
||||||
dragnpkgs = getFlake "dragnpkgs";
|
|
||||||
dragnpkgs-unstable = getFlake "dragnpkgs-unstable";
|
|
||||||
pkgs = dragnpkgs.legacyPackages.${currentSystem};
|
|
||||||
pkgs-unstable = dragnpkgs-unstable.legacyPackages.${currentSystem};
|
|
||||||
inherit (pkgs) lib;
|
|
||||||
|
|
||||||
f = getFlake "git+file:${builtins.getEnv "PWD"}";
|
|
||||||
fp =
|
|
||||||
if (builtins.hasAttr "legacyPackages" f) then
|
|
||||||
f.legacyPackages.${currentSystem}
|
|
||||||
else
|
|
||||||
f.packages.${currentSystem};
|
|
||||||
fs = f.devShells.${currentSystem};
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
use flake
|
|
|
@ -1,16 +0,0 @@
|
||||||
/my-beamer-presentation.pdf
|
|
||||||
|
|
||||||
*.aux
|
|
||||||
*.fdb_latexmk
|
|
||||||
*.fls
|
|
||||||
*.log
|
|
||||||
*.nav
|
|
||||||
*.out
|
|
||||||
*.snm
|
|
||||||
*.synctex.gz
|
|
||||||
*.toc
|
|
||||||
|
|
||||||
result
|
|
||||||
result-tex
|
|
||||||
|
|
||||||
.direnv
|
|
|
@ -1,46 +0,0 @@
|
||||||
{
|
|
||||||
description = "A very basic presentation with Beamer";
|
|
||||||
|
|
||||||
outputs = { self, dragnpkgs } @ inputs: dragnpkgs.lib.mkFlake {
|
|
||||||
# Define a texlive environment to use
|
|
||||||
packages.texlive-custom = { texliveMedium, texliveDragonPackages }:
|
|
||||||
texliveMedium.withPackages (ps: with ps; [
|
|
||||||
fontawesome5
|
|
||||||
texliveDragonPackages.moloch
|
|
||||||
]);
|
|
||||||
|
|
||||||
# Package definition for building the PDF
|
|
||||||
packages.default = { system, stdenvNoCC }: stdenvNoCC.mkDerivation rec {
|
|
||||||
pname = "my-beamer-presentation";
|
|
||||||
|
|
||||||
name = "${pname}.pdf";
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
self.packages.${system}.texlive-custom
|
|
||||||
];
|
|
||||||
|
|
||||||
src = self;
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
latexmk -pdf ${pname}.tex
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
cp ${pname}.pdf $out
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
# Runnable package (ie `nix run`) to start the presentation
|
|
||||||
apps.default = { lib, system, writeShellScript, pympress }: {
|
|
||||||
type = "app";
|
|
||||||
program = "${writeShellScript "start-presentation" ''
|
|
||||||
exec ${lib.getExe pympress} ${self.packages.${system}.default}
|
|
||||||
''}";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Devshell definition to expose the texlive environment to eg nvim
|
|
||||||
devShells.default = { mkShell, system }: mkShell {
|
|
||||||
packages = [ self.packages.${system}.texlive-custom ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,93 +0,0 @@
|
||||||
\documentclass[aspectratio=169]{beamer}
|
|
||||||
\usepackage[english]{babel}
|
|
||||||
\usepackage{fontawesome5}
|
|
||||||
\usepackage{tikz}
|
|
||||||
\usetikzlibrary{arrows,calc,fit,positioning}
|
|
||||||
|
|
||||||
|
|
||||||
\usetheme{moloch}
|
|
||||||
\usefonttheme[onlymath]{serif}
|
|
||||||
|
|
||||||
|
|
||||||
% this can be commented out to produce a slide deck with no notes
|
|
||||||
\setbeameroption{show notes}
|
|
||||||
|
|
||||||
|
|
||||||
% useful tikz styles from previous slide decks
|
|
||||||
\tikzset{%
|
|
||||||
icon/.value required,
|
|
||||||
icon/.style={%
|
|
||||||
node contents={\faIcon{#1}},
|
|
||||||
icon size=normal,
|
|
||||||
},
|
|
||||||
icon size/.is choice,
|
|
||||||
icon size/.default=normal,
|
|
||||||
icon size/normal/.style={%
|
|
||||||
font={\fontsize{20.74}{20.74}\selectfont}
|
|
||||||
},
|
|
||||||
icon size/small/.style={%
|
|
||||||
font={\fontsize{12}{12}\selectfont}
|
|
||||||
},
|
|
||||||
rounded box/.style={%
|
|
||||||
inner sep=0.3em,
|
|
||||||
draw,
|
|
||||||
rounded corners,
|
|
||||||
line width=0.1em
|
|
||||||
},
|
|
||||||
sequence diagram/.style={%
|
|
||||||
font=\small,
|
|
||||||
line width=1pt,
|
|
||||||
sequence/.style={%
|
|
||||||
every to/.style={%
|
|
||||||
to path={(\tikztostart) -- (\tikztostart -| \tikztotarget) \tikztonodes} % chktex 1 chktex 8
|
|
||||||
},
|
|
||||||
->/.style={-stealth,every node/.style={above}},
|
|
||||||
<-/.style={stealth-,every node/.style={below}},
|
|
||||||
},
|
|
||||||
note/.style={%
|
|
||||||
color=example text.fg,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
\title{My Beamer Presentation}
|
|
||||||
\subtitle{(From the template)}
|
|
||||||
\author{You}
|
|
||||||
\institute{Institute of Swag Nix Templates}
|
|
||||||
\date{Now}
|
|
||||||
|
|
||||||
|
|
||||||
\begin{document}
|
|
||||||
|
|
||||||
\maketitle
|
|
||||||
|
|
||||||
\section{My Section}
|
|
||||||
\subsection{My Subsection}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Some Slide Title}
|
|
||||||
|
|
||||||
Sample text
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Some Other Slide Title}
|
|
||||||
|
|
||||||
Sample text 2
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
|
|
||||||
\appendix
|
|
||||||
|
|
||||||
\begin{frame}[standout]
|
|
||||||
Backup Slides
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Backup slide 1}
|
|
||||||
|
|
||||||
Some backup slide content
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\end{document}
|
|
|
@ -1,14 +0,0 @@
|
||||||
{
|
|
||||||
description = "A very basic flake";
|
|
||||||
|
|
||||||
outputs = { self, dragnpkgs } @ inputs: dragnpkgs.lib.mkFlake {
|
|
||||||
packages.hello = { stdenv }: stdenv.mkDerivation {
|
|
||||||
name = "hello";
|
|
||||||
src = self;
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
echo TODO
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
Loading…
Reference in New Issue