Compare commits
46 Commits
main
...
wip/nixos-
| Author | SHA1 | Date |
|---|---|---|
|
|
4cbea3dc01 | |
|
|
7914014c1d | |
|
|
13548ea5ed | |
|
|
5fd38d270e | |
|
|
6d766dd63c | |
|
|
6bba7ab0c4 | |
|
|
6b6dd9c66f | |
|
|
292b3bdcec | |
|
|
fda38bd2cf | |
|
|
cf817800f5 | |
|
|
29532b3561 | |
|
|
219b736565 | |
|
|
d5835d211c | |
|
|
d67164126a | |
|
|
80299ca3d7 | |
|
|
7d914c78d2 | |
|
|
fd2baa1c23 | |
|
|
8fe88edc61 | |
|
|
f21591a29f | |
|
|
b420af3043 | |
|
|
533960accd | |
|
|
bf091ff8fe | |
|
|
55078cdb82 | |
|
|
6b8b667e48 | |
|
|
ac53b7145d | |
|
|
f1980a782f | |
|
|
567a47da23 | |
|
|
f71b45c677 | |
|
|
3b71438ff4 | |
|
|
49a730f641 | |
|
|
de53bfd455 | |
|
|
f71602bcff | |
|
|
1557fcbf00 | |
|
|
b157a5ca31 | |
|
|
83be7c5296 | |
|
|
d181eac6a3 | |
|
|
c1bd5b32d6 | |
|
|
76cbd04361 | |
|
|
6933e33e80 | |
|
|
9c6a46b398 | |
|
|
b33745acb8 | |
|
|
71af6415d2 | |
|
|
37050f846b | |
|
|
6223d67e8f | |
|
|
8674b22d5c | |
|
|
946bbc1522 |
21
README.md
21
README.md
|
|
@ -43,8 +43,8 @@ for flake usage, add this repo as an input and don't input nixpkgs at all, since
|
|||
```nix
|
||||
{
|
||||
inputs = {
|
||||
# for nixos-25.11
|
||||
dragnpkgs.url = "git+https://git.lain.faith/haskal/dragnpkgs.git?ref=nixos-25.11";
|
||||
# for nixos-25.05
|
||||
dragnpkgs.url = "git+https://git.lain.faith/haskal/dragnpkgs.git?ref=nixos-25.05";
|
||||
|
||||
# for nixos-unstable
|
||||
dragnpkgs.url = "git+https://git.lain.faith/haskal/dragnpkgs.git?ref=main";
|
||||
|
|
@ -221,13 +221,6 @@ makeSquashFs {
|
|||
create a packaged nix distribution with the given packages in it for weird HPC systems. go read the
|
||||
source to find out what it does; i don't recommend using this if you're not me
|
||||
|
||||
### [`instrumentedFetch`](./overlay.nix)
|
||||
|
||||
overrides the given fetch derivation (eg `fetchzip` or `fetchgit`) and logs the hash of the result.
|
||||
this enables automatically determining and filling in the hash value when initially developing the
|
||||
nix expression for a package. the log will contain text in the format
|
||||
`FETCH_HASH:<hash>:FETCH_HASH`.
|
||||
|
||||
### [`lib.licenses.fyptl`](./lib/licenses/fyptl.nix)
|
||||
|
||||
The "Fuck You, Pirate This License" (FYPTL) is the author's version of a software non-license, which
|
||||
|
|
@ -585,16 +578,6 @@ another ALSA plugin that lives in a separate package
|
|||
export ALSA_PLUGIN_DIR=$(nix eval -f '<nixpkgs>' --raw pipewire)/lib/alsa-lib
|
||||
```
|
||||
|
||||
### [`racket`, `racket-minimal`, `racketPackages`](./pkgs/racket)
|
||||
|
||||
dragnpkgs contains a slightly customized version of racket and racket-minimal (to include some minor
|
||||
bugfixes that are pending upstream stable release).
|
||||
|
||||
additionally, a new scope `racketPackages` provides some packages from
|
||||
<https://pkgs.racket-lang.org>, automatically converted from their catalog information and
|
||||
`info.rkt` by [racket2nix](https://git.lain.faith/haskal/racket-nix). see the readme on that repo
|
||||
for information on how to use `buildRacketPackage` and `makeRacketEnv`
|
||||
|
||||
### [`satisfactory-dedicated-server`](./pkgs/games/satisfactory-dedicated-server)
|
||||
|
||||
The dedicated server for [Satisfactory](https://satisfactorygame.com), with packaging steps to make
|
||||
|
|
|
|||
23
flake.lock
23
flake.lock
|
|
@ -1,23 +1,38 @@
|
|||
{
|
||||
"nodes": {
|
||||
"lix-module": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1756125859,
|
||||
"narHash": "sha256-6a+PWILmqHCs9B5eIBLg6HSZ8jYweZpgOWO8FlyVwYI=",
|
||||
"rev": "d3292125035b04df00d01549a26e948631fabe1e",
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/d3292125035b04df00d01549a26e948631fabe1e.tar.gz?rev=d3292125035b04df00d01549a26e948631fabe1e"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/lix-project/nixos-module/archive/2.93.3-2.tar.gz"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1767379071,
|
||||
"narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=",
|
||||
"lastModified": 1756617294,
|
||||
"narHash": "sha256-aGnd4AHIYCWQKChAkHPpX+YYCt7pA6y2LFFA/s8q0wQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "fb7944c166a3b630f177938e478f0378e64ce108",
|
||||
"rev": "b4c2c57c31e68544982226d07e4719a2d86302a8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"ref": "nixos-25.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"lix-module": "lix-module",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
23
flake.nix
23
flake.nix
|
|
@ -2,14 +2,19 @@
|
|||
description = "dragnpkgs together with nixpkgs and lix";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
|
||||
|
||||
lix-module = {
|
||||
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.93.3-2.tar.gz";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs }:
|
||||
outputs = { self, nixpkgs, lix-module }:
|
||||
let
|
||||
overlays = [
|
||||
(import ./overlay.nix)
|
||||
(import ./lix-overlay.nix)
|
||||
(import "${lix-module}/overlay.nix" { lix = null; })
|
||||
];
|
||||
forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed;
|
||||
libVersionInfoOverlay = import "${nixpkgs}/lib/flake-version-info.nix" nixpkgs;
|
||||
|
|
@ -23,18 +28,18 @@
|
|||
# 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"; };
|
||||
from = { id = "dragnpkgs"; type = "indirect"; };
|
||||
to = {
|
||||
type = "git";
|
||||
url = "https://git.lain.faith/haskal/dragnpkgs.git";
|
||||
ref = "main";
|
||||
ref = "nixos-25.05";
|
||||
} // 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";
|
||||
meta.path-entry = "dragnpkgs=flake:dragnpkgs";
|
||||
|
||||
lib = (lib-base.extend (import ./lib/overlay.nix)).extend (final: prev: {
|
||||
# initializes regular upstream nixpkgs with the given arguments
|
||||
|
|
@ -149,17 +154,17 @@
|
|||
};
|
||||
};
|
||||
|
||||
config.nix.registry.dragnpkgs-unstable =
|
||||
config.nix.registry.dragnpkgs =
|
||||
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"; };
|
||||
to = { id = "dragnpkgs"; type = "indirect"; };
|
||||
};
|
||||
|
||||
config.nix.registry.templates = lib.mkIf config.dragnpkgs.setTemplatesFlakeAlias {
|
||||
from = { id = "templates"; type = "indirect"; };
|
||||
to = { id = "dragnpkgs-unstable"; type = "indirect"; };
|
||||
to = { id = "dragnpkgs"; type = "indirect"; };
|
||||
};
|
||||
|
||||
config.nix.nixPath = lib.mkIf config.dragnpkgs.setNixPath [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ lib, stdenv, cacert, depotdownloader }:
|
||||
{ lib, stdenvNoCC, system, cacert, depotdownloader }:
|
||||
let
|
||||
checkDepot = depot: with builtins;
|
||||
hasAttr "depotId" depot && hasAttr "manifestId" depot;
|
||||
|
|
@ -18,7 +18,7 @@ else if ! builtins.all checkDepot additionalDepots then
|
|||
else
|
||||
let
|
||||
depotOs =
|
||||
if stdenv.hostPlatform.system == "x86_64-linux" then
|
||||
if system == "x86_64-linux" then
|
||||
"linux"
|
||||
else
|
||||
throw "fetchFromSteam does not currently support systems other than x86_64-linux";
|
||||
|
|
@ -26,7 +26,7 @@ let
|
|||
"-app ${appId} -depot ${depot.depotId} -manifest ${depot.manifestId} -os ${depotOs}"
|
||||
+ (lib.optionalString (builtins.hasAttr "beta" depot) " -beta ${depot.beta}");
|
||||
depotArgs = builtins.map makeDepotArg [ depot ] ++ additionalDepots;
|
||||
in stdenv.mkDerivation {
|
||||
in stdenvNoCC.mkDerivation {
|
||||
name = "steam-depot-${appId}" + (lib.optionalString (name != null) "-${name}");
|
||||
builder = ./builder.sh;
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ let
|
|||
base-container = runCommand "empty.sif.d" {
|
||||
buildInputs = [ coreutils ];
|
||||
} ''
|
||||
mkdir -p "$out"
|
||||
mkdir "$out"
|
||||
cd "$out"
|
||||
mkdir -p proc sys dev nix etc bin usr/bin .singularity.d
|
||||
ln -s /etc/sh bin/sh
|
||||
|
|
@ -44,7 +44,6 @@ let
|
|||
mkdir -p /var/lib/singularity/mnt/session
|
||||
echo "root:x:0:0:System administrator:/root:/bin/sh" > /etc/passwd
|
||||
echo > /etc/resolv.conf
|
||||
mkdir -p "$out"
|
||||
${singularity}/bin/singularity build "$out/empty.sif" "container/"
|
||||
'');
|
||||
|
||||
|
|
@ -68,7 +67,7 @@ let
|
|||
base-etc = runCommand "singularity-etc" {
|
||||
buildInputs = [ coreutils bash cacert ];
|
||||
} ''
|
||||
mkdir -p "$out"
|
||||
mkdir "$out"
|
||||
ln -s "${shell}/bin/startup.sh" "$out/runscript"
|
||||
ln -s "${bash}/bin/bash" "$out/sh"
|
||||
ln -s "${coreutils}/bin/env" "$out/env"
|
||||
|
|
@ -82,15 +81,13 @@ let
|
|||
'';
|
||||
|
||||
|
||||
squashfs = makeSquashFs { filename = "nix-store"; storeContents = [ shell ]; comp = "gzip"; };
|
||||
squashfs = makeSquashFs { filename = "nix-store"; storeContents = [ shell ]; };
|
||||
|
||||
startCommand = writeText "run-container.sh" ''
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
if ! which singularity &>/dev/null; then
|
||||
module load singularity/3.10.3
|
||||
fi
|
||||
module load singularity/3.10.3
|
||||
|
||||
temp_dir="$(mktemp -d)"
|
||||
mkdir -p "''${TMPDIR:-/tmp}/empty"
|
||||
|
|
@ -110,15 +107,10 @@ let
|
|||
cat /etc/localtime > $temp_dir/etc/localtime
|
||||
cat /etc/resolv.conf > $temp_dir/etc/resolv.conf
|
||||
|
||||
workdir="/work"
|
||||
if [ ! -d "/work" ]; then
|
||||
workdir="/projects"
|
||||
fi
|
||||
|
||||
singularity run -B "/$workdir:/$workdir,/scratch:/scratch,$temp_dir/nix-store.squashfs:/nix/store:image-src=/,$temp_dir/etc:/etc" --pid --uts --ipc container-base.sif
|
||||
singularity run -B "/work:/work,/scratch:/scratch,$temp_dir/nix-store.squashfs:/nix/store:image-src=/,$temp_dir/etc:/etc" --pid --uts --ipc container-base.sif
|
||||
'';
|
||||
in runCommand "hpc-files.d" {} ''
|
||||
mkdir -p "$out"
|
||||
mkdir "$out"
|
||||
cp "${squashfs}" "$out/nix-store.squashfs"
|
||||
cp -r "${base-etc}" "$out/etc"
|
||||
cp "${container-image}/empty.sif" "$out/container-base.sif"
|
||||
|
|
|
|||
|
|
@ -1,98 +0,0 @@
|
|||
# This file is adapted from <https://git.lix.systems/lix-project/nixos-module>
|
||||
# and distributed under the terms of the MIT license found at
|
||||
# <https://git.lix.systems/lix-project/nixos-module/src/branch/main/LICENSE>
|
||||
final: prev:
|
||||
let
|
||||
# These packages should receive CppNix since they may link to it or otherwise
|
||||
# cause problems (or even just silly mass-rebuilds) if we give them Lix
|
||||
overridelist_upstream = [
|
||||
"attic-client"
|
||||
"devenv"
|
||||
"nix-du"
|
||||
"nix-init"
|
||||
"nix-prefetch-git"
|
||||
"nixd"
|
||||
"nixos-option"
|
||||
"nixt"
|
||||
"nurl"
|
||||
"prefetch-yarn-deps" # force these onto upstream so we are not regularly rebuilding electron
|
||||
];
|
||||
|
||||
inherit (prev) lib;
|
||||
|
||||
csi = builtins.fromJSON ''"\u001b"'';
|
||||
orange = "${csi}[35;1m";
|
||||
normal = "${csi}[0m";
|
||||
warning = ''
|
||||
${orange}warning${normal}: You have the lix overlay included into a nixpkgs import twice,
|
||||
perhaps due to the NixOS module being included twice, or because of using
|
||||
pkgs.nixos and also including it in imports, or perhaps some unknown
|
||||
machinations of a complicated flake library.
|
||||
This is completely harmless since we have no-op'd the second one if you are
|
||||
seeing this message, but it would be a small style improvement to fix
|
||||
it :)
|
||||
P.S. If you had some hack to fix nixos-option build failures in your
|
||||
configuration, that was caused by including an older version of the lix
|
||||
overlay twice, which is now mitigated if you see this message, so you can
|
||||
delete that.
|
||||
P.P.S. This Lix has super catgirl powers.
|
||||
'';
|
||||
|
||||
maybeWarnDuplicate = x: if final.lix-overlay-present > 1 then builtins.trace warning x else x;
|
||||
|
||||
# TODO: latest
|
||||
lixPackageToUse = prev.lixPackageSets.lix_2_93.lix;
|
||||
|
||||
# It is not enough to *just* throw whatever the default nix version is at
|
||||
# anything in the "don't give lix" list, we have to *also* ensure that we
|
||||
# give whatever upstream version as specified in the callPackage invocation.
|
||||
#
|
||||
# Unfortunately I don't think there is any actual way to directly query that,
|
||||
# so we instead do something extremely evil and guess which version it
|
||||
# probably was. This code is not generalizable to arbitrary derivations, so
|
||||
# it will hopefully not make us cry, at least.
|
||||
useCppNixOverlay =
|
||||
lib.genAttrs overridelist_upstream (
|
||||
name:
|
||||
if (lib.functionArgs prev.${name}.override ? "nix") then
|
||||
let
|
||||
# Get the two common inputs of a derivation/package.
|
||||
inputs = prev.${name}.buildInputs ++ prev.${name}.nativeBuildInputs;
|
||||
nixDependency = lib.findFirst
|
||||
(drv: (drv.pname or "") == "nix")
|
||||
final.nixVersions.stable_upstream # default to stable nix if nix is not an input
|
||||
inputs;
|
||||
nixMajor = lib.versions.major (nixDependency.version or "");
|
||||
nixMinor = lib.versions.minor (nixDependency.version or "");
|
||||
nixAttr = "nix_${nixMajor}_${nixMinor}";
|
||||
finalNix = final.nixVersions.${nixAttr};
|
||||
in
|
||||
prev.${name}.override {
|
||||
nix = finalNix;
|
||||
}
|
||||
else prev.${name}
|
||||
);
|
||||
|
||||
overlay = useCppNixOverlay // {
|
||||
lix-overlay-present = 1;
|
||||
|
||||
lix = maybeWarnDuplicate lixPackageToUse;
|
||||
|
||||
nixForLinking = final.nixVersions.stable_upstream; # make sure that nixVersions.stable isn't messed with.
|
||||
|
||||
nixVersions = prev.nixVersions // {
|
||||
stable = final.lix;
|
||||
stable_upstream = prev.nixVersions.stable;
|
||||
};
|
||||
|
||||
nix-eval-jobs =
|
||||
# TODO: latest
|
||||
prev.lixPackageSets.lix_2_93.nix-eval-jobs;
|
||||
|
||||
nix-doc = prev.nix-doc.override { withPlugin = false; };
|
||||
};
|
||||
in
|
||||
# Make the overlay idempotent, since flakes passing nixos modules around by
|
||||
# value and many other things make it way too easy to include the overlay
|
||||
# twice
|
||||
if (prev ? lix-overlay-present) then { lix-overlay-present = 2; } else overlay
|
||||
|
|
@ -259,7 +259,6 @@ in {
|
|||
# game state
|
||||
|
||||
PrivateTmp = true;
|
||||
CacheDirectory = "satisfactory";
|
||||
|
||||
TemporaryFileSystem = [
|
||||
"${cfg.directory}:ro"
|
||||
|
|
@ -269,7 +268,7 @@ in {
|
|||
];
|
||||
BindPaths = [
|
||||
"${cfg.directory}/saves:${cfg.directory}/.config/Epic"
|
||||
"/var/cache/satisfactory:${cfg.directory}/server/FactoryGame/Intermediate"
|
||||
"/var/tmp:${cfg.directory}/server/FactoryGame/Intermediate"
|
||||
"${cfg.directory}/settings/game:${cfg.directory}/server/FactoryGame/Saved"
|
||||
"${cfg.directory}/settings/engine:${cfg.directory}/server/Engine/Saved"
|
||||
] ++ lib.optionals (cfg.useACMEHost != null) [
|
||||
|
|
|
|||
57
overlay.nix
57
overlay.nix
|
|
@ -7,14 +7,6 @@ final: prev: {
|
|||
makeSquashFs = prev.callPackage ./lib/make-squashfs {};
|
||||
makeHpcDist = final.callPackage ./lib/make-hpc-dist {};
|
||||
|
||||
instrumentedFetch = drv: drv.overrideAttrs (afinal: aprev: {
|
||||
postFetch = (aprev.postFetch or "") + ''
|
||||
printf "FETCH_HASH:%s:FETCH_HASH" "$(\
|
||||
${final.lib.getExe final.nix} --extra-experimental-features "nix-command" \
|
||||
hash path --sri "$out")"
|
||||
'';
|
||||
});
|
||||
|
||||
ghidra_headless = final.ghidra.lib;
|
||||
|
||||
# stuff that tracks upstream
|
||||
|
|
@ -36,7 +28,7 @@ final: prev: {
|
|||
patdiff-bin = ofinal.callPackage ./pkgs/ocaml/patdiff-bin {};
|
||||
});
|
||||
|
||||
python313 = prev.python313.override {
|
||||
python312 = prev.python312.override {
|
||||
packageOverrides = pfinal: pprev: {
|
||||
feedvalidator = pfinal.callPackage ./pkgs/python/feedvalidator {};
|
||||
megacom = pfinal.callPackage ./pkgs/python/megacom {};
|
||||
|
|
@ -44,21 +36,18 @@ final: prev: {
|
|||
};
|
||||
|
||||
# add to top level because it has a binary
|
||||
feedvalidator = final.python313Packages.feedvalidator;
|
||||
megacom = final.python313Packages.megacom;
|
||||
feedvalidator = final.python312Packages.feedvalidator;
|
||||
megacom = final.python312Packages.megacom;
|
||||
|
||||
python311 = prev.python311.override {
|
||||
packageOverrides = pfinal: pprev: {
|
||||
# TODO: untested and weirdly requires manual build of qtwebengine
|
||||
libbs = pfinal.callPackage ./pkgs/reverse-engineering/binsync/libbs.nix {};
|
||||
binsync = pfinal.callPackage ./pkgs/reverse-engineering/binsync/binsync.nix {};
|
||||
|
||||
pyside6 = pprev.pyside6.overrideAttrs (afinal: aprev: {
|
||||
buildInputs = final.lib.filter (x: x.pname != "qtwebengine" && x.pname != "qtwebview") aprev.buildInputs;
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
# temporary upgrade so we can actually download satisfactory
|
||||
depotdownloader = prev.callPackage ./pkgs/temp/depotdownloader {};
|
||||
outer-wilds-text-adventure = prev.callPackage ./pkgs/games/outer-wilds-text-adventure {};
|
||||
satisfactory-dedicated-server = prev.callPackage ./pkgs/games/satisfactory-dedicated-server {};
|
||||
|
||||
|
|
@ -83,41 +72,5 @@ final: prev: {
|
|||
|
||||
texliveDragonPackages = {
|
||||
moloch = prev.callPackage ./pkgs/tex/moloch {};
|
||||
|
||||
scheme = final.texliveMedium.withPackages (ps: [
|
||||
ps.fontawesome5
|
||||
ps.standalone
|
||||
final.texliveDragonPackages.moloch
|
||||
]);
|
||||
};
|
||||
|
||||
racket-minimal = final.callPackage ./pkgs/racket/racket/minimal.nix {};
|
||||
racket = final.callPackage ./pkgs/racket/racket/package.nix {};
|
||||
racketPackages = let
|
||||
names = builtins.readDir ./pkgs/racket/racket-catalog |> final.lib.attrNames;
|
||||
byName = self:
|
||||
final.lib.map (name: {
|
||||
inherit name;
|
||||
value = self.callPackage ./pkgs/racket/racket-catalog/${name} {};
|
||||
}) names |>
|
||||
final.lib.listToAttrs;
|
||||
in final.lib.makeScope final.newScope (self: {
|
||||
racketInstallHook = self.callPackage ./pkgs/racket/racket-install-hook.nix {};
|
||||
buildRacketPackage = self.callPackage ./pkgs/racket/build-racket-package.nix {};
|
||||
|
||||
makeRacketEnv = self.callPackage ./pkgs/racket/make-racket-env.nix {};
|
||||
} // (byName self));
|
||||
|
||||
strawberry = prev.strawberry.overrideAttrs (afinal: aprev: {
|
||||
version = "1.2.16";
|
||||
src = final.fetchFromGitHub {
|
||||
owner = "jonaski";
|
||||
repo = "strawberry";
|
||||
rev = afinal.version;
|
||||
hash = "sha256-4V/geww/M0FD3McBuz8MgkwdXA7j+d71SJn5Q4AZrvU=";
|
||||
};
|
||||
patches = [
|
||||
./pkgs/strawberry/0001-make-the-minimum-scrobble-length-shorter.patch
|
||||
];
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,10 +52,10 @@ in stdenvNoCC.mkDerivation rec {
|
|||
chmod +x $out/bin/outer-wilds-text-adventure
|
||||
'';
|
||||
|
||||
meta = {
|
||||
meta = with lib; {
|
||||
description = "Outer Wilds: A Thrilling Graphical Text Adventure";
|
||||
homepage = "https://www.mobiusdigitalgames.com/outer-wilds-text-adventure.html";
|
||||
license = lib.licenses.unfree;
|
||||
license = licenses.unfree;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,24 +7,24 @@
|
|||
}:
|
||||
let
|
||||
appId = "1690800";
|
||||
buildId = "21237536";
|
||||
buildId = "19876517";
|
||||
steamworks_sdk = fetchFromSteam {
|
||||
name = "steamworks-sdk";
|
||||
inherit appId;
|
||||
depot = {
|
||||
depotId = "1006";
|
||||
manifestId = "6403079453713498174";
|
||||
manifestId = "5587033981095108078";
|
||||
};
|
||||
hash = "sha256-q1A2ooLzKojf3kj5VCFSLngFv6522rXd5nApBQFDrHA=";
|
||||
hash = "sha256-CjrVpq5ztL6wTWIa63a/4xHM35DzgDR/O6qVf1YV5xw=";
|
||||
};
|
||||
server_dist = fetchFromSteam {
|
||||
name = "satisfactory-dedicated-server";
|
||||
inherit appId;
|
||||
depot = {
|
||||
depotId = "1690802";
|
||||
manifestId = "6002578218905311874";
|
||||
manifestId = "7620210706575413121";
|
||||
};
|
||||
hash = "sha256-OSS0tviycIOO9kvJzVHvnseYw0+gVLZOkLHyuXZSHvM=";
|
||||
hash = "sha256-jQbtHSBFCDcdycrDjIJBY4DGV7EgITvwv3k3+htZ7io=";
|
||||
};
|
||||
in stdenv.mkDerivation {
|
||||
pname = "satisfactory-dedicated-server";
|
||||
|
|
@ -69,11 +69,11 @@ in stdenv.mkDerivation {
|
|||
$out/opt/Engine/Binaries/Linux/FactoryServer-Linux-Shipping
|
||||
'';
|
||||
|
||||
meta = {
|
||||
meta = with lib; {
|
||||
description = "Satisfactory Dedicated Server";
|
||||
homepage = "https://www.satisfactorygame.com/";
|
||||
license = lib.licenses.unfree;
|
||||
license = licenses.unfree;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
sourceProvenance = [ sourceTypes.binaryNativeCode ];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ let feedvalidator_src = stdenvNoCC.mkDerivation {
|
|||
src = fetchFromGitHub {
|
||||
owner = "w3c";
|
||||
repo = "feedvalidator";
|
||||
rev = "96fbf7e918293da0e3dfd06b2dece14da65ba2aa";
|
||||
sha256 = "sha256-aNRtW+YnLKPdVURKxDd/QR+/Vfp93TmGnm8hf8Q5Gz0=";
|
||||
rev = "1bbf6d9c68ef074b824c452fbc5d1f7817e6adae";
|
||||
sha256 = "sha256-sHc6cgjSNcd0BcYYeybGPayQNV8SK9GjUglWg9iOQko=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
|
|
|
|||
|
|
@ -2,15 +2,11 @@
|
|||
fetchPypi,
|
||||
buildPythonPackage,
|
||||
|
||||
setuptools,
|
||||
pyserial,
|
||||
pyserial-asyncio,
|
||||
}: buildPythonPackage rec {
|
||||
pname = "megacom";
|
||||
version = "0.1.2";
|
||||
pyproject = true;
|
||||
build-system = [ setuptools ];
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-q2sU37uTX98RJDF0WFt7vzqtfLk3u25COCdKt34/Z70=";
|
||||
|
|
|
|||
|
|
@ -1,73 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
racket,
|
||||
racketInstallHook,
|
||||
stdenv,
|
||||
|
||||
wrapGAppsHook3,
|
||||
}: lib.extendMkDerivation {
|
||||
constructDrv = stdenv.mkDerivation;
|
||||
excludeDrvArgNames = [
|
||||
"dependencies"
|
||||
"tetheredInstallation"
|
||||
"doMainSetup"
|
||||
"buildDocs"
|
||||
"gitSubpath"
|
||||
];
|
||||
extendDrvArgs = finalAttrs:
|
||||
{
|
||||
pname,
|
||||
version,
|
||||
nativeBuildInputs ? [],
|
||||
propagatedBuildInputs ? [],
|
||||
|
||||
dependencies ? [],
|
||||
|
||||
tetheredInstallation ? false,
|
||||
doMainSetup ? tetheredInstallation,
|
||||
buildDocs ? tetheredInstallation,
|
||||
gitSubpath ? ".",
|
||||
...
|
||||
} @ attrs: {
|
||||
name = "racket${racket.version}-" + pname + "-" + version;
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
|
||||
racketTetheredInstallation = tetheredInstallation;
|
||||
racketDoMainSetup = doMainSetup;
|
||||
racketBuildDocs = buildDocs;
|
||||
racketGitSubpath = gitSubpath;
|
||||
|
||||
nativeBuildInputs = [
|
||||
racket
|
||||
racketInstallHook
|
||||
|
||||
wrapGAppsHook3
|
||||
] ++ nativeBuildInputs;
|
||||
|
||||
propagatedBuildInputs = [racket] ++ dependencies ++ propagatedBuildInputs;
|
||||
|
||||
dontWrapGApps = true;
|
||||
|
||||
preFixup = ''
|
||||
find $out/bin -type f -executable -print0 |
|
||||
while IFS= read -r -d ''' f; do
|
||||
if test "$(file --brief --mime-type "$f")" = application/x-executable; then
|
||||
wrapGApp "$f"
|
||||
fi
|
||||
done
|
||||
'' + (lib.optionalString (!tetheredInstallation) ''
|
||||
find $out/bin -type f -executable -print0 |
|
||||
while IFS= read -r -d ''' f; do
|
||||
if test "$(file --brief --mime-type "$f")" = text/x-shellscript; then
|
||||
substituteInPlace "$f" \
|
||||
--replace-fail "\"\''${bindir}/racket\"" \
|
||||
"\"\''${bindir}/racket\" --config $out/etc/racket/"
|
||||
fi
|
||||
done
|
||||
'');
|
||||
};
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
racket,
|
||||
buildRacketPackage,
|
||||
}: {
|
||||
packages,
|
||||
}: buildRacketPackage {
|
||||
pname = "env";
|
||||
version = "0";
|
||||
|
||||
unpackPhase = "touch nix-racket-env-only";
|
||||
|
||||
dependencies = packages;
|
||||
tetheredInstallation = true;
|
||||
|
||||
racketEnvOnly = true;
|
||||
}
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
buildRacketPackage,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "ansi-color";
|
||||
version = "0.2+20363d9";
|
||||
dependencies = [];
|
||||
src = fetchFromGitHub {
|
||||
owner = "renatoathaydes";
|
||||
repo = "ansi-color";
|
||||
rev = "20363d90fcef9219580ec0d6a78eea834df39d21";
|
||||
hash = "sha256-PdTF4KaDecp7hYHlUAXXmZEfuvEfSF6Gf9A558b6v/I=";
|
||||
};
|
||||
gitSubpath = ".";
|
||||
passthru = {
|
||||
racketModules = ["ansi-color/main.rkt" "ansi-color/display.rkt" "ansi-color/scribblings/ansi-color.scrbl" "ansi-color/demo.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "A library to make it easy to write colorized and styled output in terminals that support ANSI escape codes (most command lines).";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."LGPL-3.0-or-later")];
|
||||
homepage = "https://github.com/renatoathaydes/ansi-color/tree/HEAD/README.md";
|
||||
};
|
||||
})
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
fetchgit,
|
||||
buildRacketPackage,
|
||||
}: (buildRacketPackage {
|
||||
pname = "br-parser-tools-lib";
|
||||
version = "0.0+95b7c69";
|
||||
dependencies = [];
|
||||
src = fetchgit {
|
||||
url = "https://gitlab.com/mbutterick/br-parser-tools.git";
|
||||
rev = "95b7c69cf9d660a51abf4742378b9adb7100d25a";
|
||||
hash = "sha256-and0y3rBjXwmgaEwwXzJOTgX/wCSY0uUfB3+U4JLTrk=";
|
||||
};
|
||||
gitSubpath = "br-parser-tools-lib";
|
||||
passthru = {
|
||||
racketModules = ["br-parser-tools/private-yacc/table.rkt" "br-parser-tools/private-lex/actions.rkt" "br-parser-tools/private-lex/stx.rkt" "br-parser-tools/private-yacc/yacc-helper.rkt" "br-parser-tools/private-lex/token-syntax.rkt" "br-parser-tools/examples/read.rkt" "br-parser-tools/yacc-to-scheme.rkt" "br-parser-tools/private-lex/token.rkt" "br-parser-tools/private-lex/unicode-chars.rkt" "br-parser-tools/private-yacc/input-file-parser.rkt" "br-parser-tools/private-lex/deriv.rkt" "br-parser-tools/lex.rkt" "br-parser-tools/private-yacc/lalr.rkt" "br-parser-tools/private-yacc/parser-builder.rkt" "br-parser-tools/private-yacc/graph.rkt" "br-parser-tools/private-yacc/lr0.rkt" "br-parser-tools/private-lex/error-tests.rkt" "br-parser-tools/cfg-parser.rkt" "br-parser-tools/private-lex/front.rkt" "br-parser-tools/yacc.rkt" "br-parser-tools/private-lex/re.rkt" "br-parser-tools/lex-sre.rkt" "br-parser-tools/private-yacc/parser-actions.rkt" "br-parser-tools/examples/calc.rkt" "br-parser-tools/lex-plt-v200.rkt" "br-parser-tools/private-yacc/grammar.rkt" "br-parser-tools/private-lex/util.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "fork of `parser-tools-lib` for Beautiful Racket";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."LGPL-3.0-or-later")];
|
||||
};
|
||||
})
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
br-parser-tools-lib,
|
||||
fetchgit,
|
||||
buildRacketPackage,
|
||||
}: (buildRacketPackage {
|
||||
pname = "brag-lib";
|
||||
version = "0.0+30cbf95";
|
||||
dependencies = [br-parser-tools-lib];
|
||||
src = fetchgit {
|
||||
url = "https://gitlab.com/mbutterick/brag.git";
|
||||
rev = "30cbf95e6a717e71fb8bda6b15a7253aed36115a";
|
||||
hash = "sha256-NJctskWDoBNRdBMDklALkMAPKT4A7on8pu6X3Q6NheE=";
|
||||
};
|
||||
gitSubpath = "brag-lib";
|
||||
passthru = {
|
||||
racketModules = ["brag/test/test-cutter.rkt" "brag/rules/rule-structs.rkt" "brag/examples/simple-line-drawing/examples/letter-i.rkt" "brag/test/test-hide-and-splice.rkt" "brag/test/test-simple-arithmetic-grammar.rkt" "brag/codegen/reader.rkt" "brag/codegen/codegen.rkt" "brag/examples/whitespace.rkt" "brag/examples/0n1.rkt" "brag/test/test-wordy.rkt" "brag/private/internal-support.rkt" "brag/examples/top-level-cut-3.rkt" "brag/examples/simple-line-drawing/lexer.rkt" "brag/examples/simple-arithmetic-grammar.rkt" "brag/test/test-parser.rkt" "brag/test/test-start-and-atok.rkt" "brag/examples/simple-line-drawing.rkt" "brag/rules/parser.rkt" "brag/examples/top-level-cut-2.rkt" "brag/main.rkt" "brag/test/test-0n1n.rkt" "brag/examples/simple-line-drawing/grammar.rkt" "brag/examples/wordy.rkt" "brag/rules/lexer.rkt" "brag/test/test-cutter-another.rkt" "brag/private/indenter.rkt" "brag/examples/cutter.rkt" "brag/examples/empty-symbol.rkt" "brag/examples/01-equal.rkt" "brag/test/test-baby-json.rkt" "brag/test/test-0n1.rkt" "brag/examples/baby-json-hider.rkt" "brag/test/test-empty-symbol.rkt" "brag/rules/stx-types.rkt" "brag/test/test-make-rule-parser.rkt" "brag/examples/simple-line-drawing/lang/reader.rkt" "brag/examples/top-level-cut-1.rkt" "brag/test/test-weird-grammar.rkt" "brag/test/test-whitespace.rkt" "brag/codegen/satisfaction.rkt" "brag/examples/nested-repeats.rkt" "brag/examples/simple-line-drawing/interpret.rkt" "brag/test/test-flatten.rkt" "brag/test/weird-grammar.rkt" "brag/test/test-all.rkt" "brag/examples/baby-json-alt2.rkt" "brag/examples/baby-json.rkt" "brag/test/test-01-equal.rkt" "brag/examples/statlist-grammar.rkt" "brag/examples/simple-line-drawing/semantics.rkt" "brag/examples/subrule.rkt" "brag/examples/lua-parser.rkt" "brag/test/test-quotation-marks-and-backslashes.rkt" "brag/test/test-lexer.rkt" "brag/test/test-nested-repeats.rkt" "brag/test/test-baby-json-hider.rkt" "brag/examples/start-and-atok.rkt" "brag/rules/stx.rkt" "brag/examples/add-mult.rkt" "brag/test/test-old-token.rkt" "brag/examples/cutter-another.rkt" "brag/test/test-top-level-cut.rkt" "brag/examples/bnf.rkt" "brag/codegen/runtime.rkt" "brag/test/test-codepoints.rkt" "brag/examples/codepoints.rkt" "brag/test/test-simple-line-drawing.rkt" "brag/test/test-errors.rkt" "brag/examples/hide-and-splice.rkt" "brag/examples/curly-quantifier.rkt" "brag/examples/nested-word-list.rkt" "brag/codegen/expander.rkt" "brag/examples/0n1n.rkt" "brag/private/colorer.rkt" "brag/codegen/flatten.rkt" "brag/examples/quotation-marks-and-backslashes.rkt" "brag/support.rkt" "brag/test/test-curly-quantifier.rkt" "brag/examples/baby-json-alt.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."MIT")];
|
||||
};
|
||||
})
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
cldr-core,
|
||||
buildRacketPackage,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "cldr-bcp47";
|
||||
version = "0.0+823fc1a";
|
||||
dependencies = [cldr-core];
|
||||
src = fetchFromGitHub {
|
||||
owner = "97jaz";
|
||||
repo = "cldr-bcp47";
|
||||
rev = "823fc1a530f1a0ec4de59f5454c1a17f20c5a5d6";
|
||||
hash = "sha256-YY5q44IQ1cNX4wk8Yt7B+z2uvfy+xMSl5tTDs+1RBlA=";
|
||||
};
|
||||
gitSubpath = ".";
|
||||
passthru = {
|
||||
racketModules = ["cldr/bcp47/timezone.rkt" "cldr/bcp47/scribblings/cldr-bcp47-timezone.scrbl"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "API for BCP47 extensions to CLDR";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."MIT") (((lib).licensesSpdx)."Unicode-TOU")];
|
||||
};
|
||||
})
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
buildRacketPackage,
|
||||
fetchFromGitHub,
|
||||
memoize-lib,
|
||||
}: (buildRacketPackage {
|
||||
pname = "cldr-core";
|
||||
version = "0.0+c9b8077";
|
||||
dependencies = [memoize-lib];
|
||||
src = fetchFromGitHub {
|
||||
owner = "97jaz";
|
||||
repo = "cldr-core";
|
||||
rev = "c9b80777c422c3b104bb85052d74a2dc1535a3c3";
|
||||
hash = "sha256-Tpk6uYWz4//C+/n50wsLiD16rwOim85R/Ykrtcoa1+8=";
|
||||
};
|
||||
gitSubpath = ".";
|
||||
passthru = {
|
||||
racketModules = ["cldr/file.rkt" "cldr/likely-subtags.rkt" "cldr/core.rkt" "cldr/scribblings/cldr-core.scrbl"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "API for cldr-core data set";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."MIT") (((lib).licensesSpdx)."Unicode-TOU")];
|
||||
};
|
||||
})
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
cldr-core,
|
||||
buildRacketPackage,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "cldr-dates-modern";
|
||||
version = "0.0+c362829";
|
||||
dependencies = [cldr-core];
|
||||
src = fetchFromGitHub {
|
||||
owner = "97jaz";
|
||||
repo = "cldr-dates-modern";
|
||||
rev = "c36282917247f6a069e553535f4619007cd7b6e5";
|
||||
hash = "sha256-byD2ubs543P9512lKD1JKB1ppyzjKzoWnuW8JPspa7M=";
|
||||
};
|
||||
gitSubpath = ".";
|
||||
passthru = {
|
||||
racketModules = ["cldr/dates-modern.rkt" "cldr/scribblings/cldr-dates-modern.scrbl"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "API for cldr-dates-modern data set";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."MIT") (((lib).licensesSpdx)."Unicode-TOU")];
|
||||
};
|
||||
})
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
cldr-core,
|
||||
buildRacketPackage,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "cldr-localenames-modern";
|
||||
version = "0.0+f9f3e8d";
|
||||
dependencies = [cldr-core];
|
||||
src = fetchFromGitHub {
|
||||
owner = "97jaz";
|
||||
repo = "cldr-localenames-modern";
|
||||
rev = "f9f3e8d9245764a309542816acf40fe147b473a3";
|
||||
hash = "sha256-fZ1fnkslpZuicJgMh6/aLd4rPov7lvJr6ulDWpTMpKg=";
|
||||
};
|
||||
gitSubpath = ".";
|
||||
passthru = {
|
||||
racketModules = ["cldr/scribblings/cldr-localenames-modern.scrbl" "cldr/localenames-modern.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "API for cldr-localenames-modern data set";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."MIT") (((lib).licensesSpdx)."Unicode-TOU")];
|
||||
};
|
||||
})
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
cldr-core,
|
||||
buildRacketPackage,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "cldr-numbers-modern";
|
||||
version = "0.0+6254280";
|
||||
dependencies = [cldr-core];
|
||||
src = fetchFromGitHub {
|
||||
owner = "97jaz";
|
||||
repo = "cldr-numbers-modern";
|
||||
rev = "625428099b3f8cd264955a283dddc176a6080ba1";
|
||||
hash = "sha256-RDa1d4sSyfyuNgz2dJdu2f1XGiO4cPOkaseZ7q2cLJU=";
|
||||
};
|
||||
gitSubpath = ".";
|
||||
passthru = {
|
||||
racketModules = ["cldr/scribblings/cldr-numbers-modern.scrbl" "cldr/numbers-modern.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "API for cldr-numbers-modern data set";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."MIT") (((lib).licensesSpdx)."Unicode-TOU")];
|
||||
};
|
||||
})
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
buildRacketPackage,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "fancy-app";
|
||||
version = "1.1+f451852";
|
||||
dependencies = [];
|
||||
src = fetchFromGitHub {
|
||||
owner = "samth";
|
||||
repo = "fancy-app";
|
||||
rev = "f451852164ee67e3e122f25b4bce45001a557045";
|
||||
hash = "sha256-2DdngIyocn+CrLf4A4yO9+XJQjIxzKVpmvGiNuM7mTQ=";
|
||||
};
|
||||
gitSubpath = ".";
|
||||
passthru = {
|
||||
racketModules = ["fancy-app/main.scrbl" "fancy-app/main.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "Scala-style anonymous functions";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."MIT")];
|
||||
};
|
||||
})
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
buildRacketPackage,
|
||||
pretty-expressive,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "fmt";
|
||||
version = "0.0.3+002818e";
|
||||
dependencies = [pretty-expressive];
|
||||
src = fetchFromGitHub {
|
||||
owner = "sorawee";
|
||||
repo = "fmt";
|
||||
rev = "002818ec08ad6e5e01f79e6209b69203581d6adc";
|
||||
hash = "sha256-/oLq5WPpK/OO3ED7PBKTMCjDxTBy8+ZjoL/WPPC1zlU=";
|
||||
};
|
||||
gitSubpath = ".";
|
||||
passthru = {
|
||||
racketModules = ["fmt/tests/test-cases/let-cc-ec.rkt" "fmt/read.rkt" "fmt/tests/test-cases/test-dot.rkt" "fmt/realign.rkt" "fmt/tests/test-cases/test-deinprogramm.rkt" "fmt/tests/test-cases/define-contract.rkt" "fmt/scribblings/kws.rkt" "fmt/tests/test-cases/define-match.rkt" "fmt/tests/test-cases/general.rkt" "fmt/for-profiling.rkt" "fmt/tests/test-cases/send.rkt" "fmt/tests/benchmarks/class-internal.rkt" "fmt/params.rkt" "fmt/tests/test-cases/test-quasisyntax.rkt" "fmt/tests/test-cases/large2.rkt" "fmt/tests/permission-test.rkt" "fmt/.fmt.rkt" "fmt/tests/test-cases/cr.rkt" "fmt/tests/test-cases/test-asl.rkt" "fmt/private/memoize.rkt" "fmt/tests/benchmarks/xform.rkt" "fmt/tests/test-cases/test-if.rkt" "fmt/version.rkt" "fmt/core.rkt" "fmt/tests/benchmarks/list.rkt" "fmt/tokenize.rkt" "fmt/raco.rkt" "fmt/conventions.rkt" "fmt/tests/test-cases/large.rkt" "fmt/tests/config-tests/file.rkt" "fmt/tests/test-cases/rackunit.rkt" "fmt/tests/benchmarks/hash.rkt" "fmt/tests/test-cases/test-hash-bang.rkt" "fmt/tests/test-cases/test-herestring.rkt" "fmt/tests/config-tests/config.rkt" "fmt/scribblings/fmt.scrbl" "fmt/record.rkt" "fmt/tests/test-cases/test-class.rkt" "fmt/common.rkt" "fmt/tests/test-cases/let-values.rkt" "fmt/tests/test-cases/test-lambda.rkt" "fmt/scribblings/examples/example.rkt" "fmt/tests/test-cases/delay.rkt" "fmt/main.rkt" "fmt/scribblings/util.rkt" "fmt/regen.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = ["fmt"];
|
||||
};
|
||||
meta = {
|
||||
description = "An extensible code formatter for Racket";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."Apache-2.0") (((lib).licensesSpdx)."MIT")];
|
||||
homepage = "https://github.com/sorawee/fmt/tree/HEAD/README.md";
|
||||
};
|
||||
})
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
{
|
||||
fetchFromGitHub,
|
||||
cldr-localenames-modern,
|
||||
memoize-lib,
|
||||
cldr-bcp47,
|
||||
cldr-dates-modern,
|
||||
lib,
|
||||
cldr-core,
|
||||
buildRacketPackage,
|
||||
cldr-numbers-modern,
|
||||
tzinfo,
|
||||
}: (buildRacketPackage {
|
||||
pname = "gregor-lib";
|
||||
version = "0.0+f56215d";
|
||||
dependencies = [memoize-lib tzinfo cldr-core cldr-bcp47 cldr-numbers-modern cldr-dates-modern cldr-localenames-modern];
|
||||
src = fetchFromGitHub {
|
||||
owner = "97jaz";
|
||||
repo = "gregor";
|
||||
rev = "f56215db229ef2e33670f55d08c0330d8f85de23";
|
||||
hash = "sha256-4TIeinXk7ak7sbT2lwfWYdwIwFD9S7whBrR2KEajW30=";
|
||||
};
|
||||
gitSubpath = "gregor-lib";
|
||||
passthru = {
|
||||
racketModules = ["gregor/private/pattern/l10n/numbers.rkt" "gregor/private/period.rkt" "gregor/private/pattern/l10n/zone-util.rkt" "gregor/private/pattern/ast/era.rkt" "gregor/private/pattern/ast/second.rkt" "gregor/private/pattern/l10n/gmt-offset.rkt" "gregor/private/pattern/ast/hour.rkt" "gregor/private/pattern/ast/minute.rkt" "gregor/private/pattern/l10n/named-trie.rkt" "gregor/private/core/compare.rkt" "gregor/private/pattern/ast/week.rkt" "gregor/private/iso8601-parse.rkt" "gregor/main.rkt" "gregor/private/pattern/l10n/l10n-week.rkt" "gregor/private/pattern/l10n/iso-offset.rkt" "gregor/private/pattern/l10n/trie.rkt" "gregor/private/exn.rkt" "gregor/private/pattern/l10n/zone-id.rkt" "gregor/time.rkt" "gregor/private/pattern/lexer.rkt" "gregor/private/clock.rkt" "gregor/private/pattern/l10n/zone-loc.rkt" "gregor/private/pattern/ast.rkt" "gregor/private/pattern/l10n/symbols.rkt" "gregor/private/pattern/ast/year.rkt" "gregor/private/pattern/ast/zone.rkt" "gregor/private/pattern/parse-state.rkt" "gregor/private/pattern/ast/literal.rkt" "gregor/private/difference.rkt" "gregor/private/core/math.rkt" "gregor/private/pattern/ast/month.rkt" "gregor/private/time.rkt" "gregor/private/pattern/ast/period.rkt" "gregor/private/pattern/ast/weekday.rkt" "gregor/private/datetime.rkt" "gregor/private/moment-base.rkt" "gregor/private/pattern/ast/day.rkt" "gregor/private/parse.rkt" "gregor/private/date.rkt" "gregor/private/moment.rkt" "gregor/private/format.rkt" "gregor/private/pattern/l10n/zone-nonloc.rkt" "gregor/private/generics.rkt" "gregor/period.rkt" "gregor/private/pattern/ast/separator.rkt" "gregor/private/core/structs.rkt" "gregor/private/core/hmsn.rkt" "gregor/private/pattern/l10n/metazone.rkt" "gregor/private/pattern/ast/quarter.rkt" "gregor/private/core/ymd.rkt" "gregor/private/offset-resolvers.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "Code part of the gregor date and time library";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."MIT")];
|
||||
homepage = "https://github.com/97jaz/gregor/tree/HEAD/README.md";
|
||||
};
|
||||
})
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
buildRacketPackage,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "guard";
|
||||
version = "0.0+de93f4b";
|
||||
dependencies = [];
|
||||
src = fetchFromGitHub {
|
||||
owner = "jackfirth";
|
||||
repo = "guard";
|
||||
rev = "de93f4b5f38f1086177a09a40583af2932759b75";
|
||||
hash = "sha256-z5sUidOIadtOZqVRBPxjIAz/D71U9XiE06EE+DGZzBg=";
|
||||
};
|
||||
gitSubpath = ".";
|
||||
passthru = {
|
||||
racketModules = ["guard/private/scribble-evaluator-factory.rkt" "guard/scribblings/guard.scrbl" "guard/main.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "Macros similar to Swift's \"guard statements\".";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."Apache-2.0") (((lib).licensesSpdx)."MIT")];
|
||||
homepage = "https://github.com/jackfirth/guard/tree/HEAD/README.md";
|
||||
};
|
||||
})
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
buildRacketPackage,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "memoize-lib";
|
||||
version = "3.0+f373706";
|
||||
dependencies = [];
|
||||
src = fetchFromGitHub {
|
||||
owner = "jbclements";
|
||||
repo = "memoize";
|
||||
rev = "f373706824145ce2a8247edb76278d6df139333c";
|
||||
hash = "sha256-87a5nSpOZaal1/t5GMk5yFHX1daukabYQ/1J4L5LN4o=";
|
||||
};
|
||||
gitSubpath = "memoize-lib";
|
||||
passthru = {
|
||||
racketModules = ["memoize/main.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "core library for memoize";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."MIT")];
|
||||
homepage = "https://github.com/jbclements/memoize/tree/master/README.md";
|
||||
};
|
||||
})
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
gregor-lib,
|
||||
buildRacketPackage,
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "north";
|
||||
version = "0.8+00e5221";
|
||||
dependencies = [gregor-lib];
|
||||
src = fetchFromGitHub {
|
||||
owner = "Bogdanp";
|
||||
repo = "racket-north";
|
||||
rev = "00e52217081d421bcdd1c2248e309e0d92dd5314";
|
||||
hash = "sha256-oSjrLNsQ53vUIFRF2spie7o/NSrlF29Dqw2et9Isf3o=";
|
||||
};
|
||||
gitSubpath = "north";
|
||||
passthru = {
|
||||
racketModules = ["north/main.rkt" "north/north.scrbl" "north/tool/syntax-color.rkt" "north/adapter/sqlite.rkt" "north/adapter/base.rkt" "north/migrate.rkt" "north/adapter/postgres.rkt" "north/lang/reader.rkt" "north/base.rkt" "north/cli.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = ["north"];
|
||||
};
|
||||
meta = {
|
||||
description = "A database migration tool.";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."BSD-3-Clause")];
|
||||
homepage = "https://github.com/Bogdanp/racket-north/tree/HEAD/README.md";
|
||||
};
|
||||
})
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
buildRacketPackage,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "pretty-expressive";
|
||||
version = "1.1+0984931";
|
||||
dependencies = [];
|
||||
src = fetchFromGitHub {
|
||||
owner = "sorawee";
|
||||
repo = "pretty-expressive";
|
||||
rev = "0984931c6f8ff32921dd477c875127de7600dfd5";
|
||||
hash = "sha256-5WokTHS90pYo5ltJEWX5MIMyUWr2AlRU/W2bznLQ74U=";
|
||||
};
|
||||
gitSubpath = ".";
|
||||
passthru = {
|
||||
racketModules = ["pretty-expressive/benchmarks/json.rkt" "pretty-expressive/core.rkt" "pretty-expressive/benchmarks/sexp-random.rkt" "pretty-expressive/benchmarks/sexp-full.rkt" "pretty-expressive/benchmarks/concat.rkt" "pretty-expressive/doc.rkt" "pretty-expressive/addons.rkt" "pretty-expressive/scribblings/pretty-expressive.scrbl" "pretty-expressive/benchmarks/fill-sep.rkt" "pretty-expressive/main.rkt" "pretty-expressive/benchtool.rkt" "pretty-expressive/benchmarks/flatten.rkt" "pretty-expressive/benchmarks/wadler-opt.rkt" "pretty-expressive/examples.rkt" "pretty-expressive/process.rkt" "pretty-expressive/promise.rkt"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "A pretty expressive printer";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."Apache-2.0") (((lib).licensesSpdx)."MIT")];
|
||||
homepage = "https://github.com/sorawee/pretty-expressive/tree/main/README.md";
|
||||
};
|
||||
})
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
cldr-core,
|
||||
buildRacketPackage,
|
||||
fetchFromGitHub,
|
||||
}: (buildRacketPackage {
|
||||
pname = "tzinfo";
|
||||
version = "0.6+2f81228";
|
||||
dependencies = [cldr-core];
|
||||
src = fetchFromGitHub {
|
||||
owner = "97jaz";
|
||||
repo = "tzinfo";
|
||||
rev = "2f812283d9c90040aecb3c7e2ed2edf93a3720de";
|
||||
hash = "sha256-vvb3EZHFysa/2OiTat+i8zuALxiCPHNNaWCGlyPF6gk=";
|
||||
};
|
||||
gitSubpath = ".";
|
||||
passthru = {
|
||||
racketModules = ["tzinfo/zoneinfo.rkt" "tzinfo/private/os/env.rkt" "tzinfo/private/os/unix.rkt" "tzinfo/private/tabfile-parser.rkt" "tzinfo/main.rkt" "tzinfo/source.rkt" "tzinfo/private/zoneinfo-search.rkt" "tzinfo/private/tzfile-parser.rkt" "tzinfo/private/os/windows.rkt" "tzinfo/private/zoneinfo.rkt" "tzinfo/private/structs.rkt" "tzinfo/test/zoneinfo.rkt" "tzinfo/private/os/windows-registry.rkt" "tzinfo/private/generics.rkt" "tzinfo/scribblings/tzinfo.scrbl"];
|
||||
racketLaunchers = [];
|
||||
racoCommands = [];
|
||||
};
|
||||
meta = {
|
||||
description = "API for querying the IANA tz database";
|
||||
sourceProvenance = [(((lib).sourceTypes).fromSource)];
|
||||
broken = false;
|
||||
license = [(((lib).licensesSpdx)."MIT")];
|
||||
homepage = "https://github.com/97jaz/tzinfo/tree/HEAD/README.md";
|
||||
};
|
||||
})
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
racket,
|
||||
makeSetupHook,
|
||||
}: makeSetupHook {
|
||||
name = "racket-install-hook";
|
||||
propagatedBuildInputs = [ racket ];
|
||||
} ./racket-install-hook.sh
|
||||
|
|
@ -1,159 +0,0 @@
|
|||
echo "Sourcing racket-install-hook"
|
||||
|
||||
addRacketPath() {
|
||||
if [ -f "$1/nix-support/racket-pkg" ]; then
|
||||
addToSearchPathWithCustomDelimiter : NIX_RACKET_PKG_PATH $1
|
||||
fi
|
||||
}
|
||||
|
||||
racketInstallPhase() {
|
||||
echo "Executing racketInstallPhase"
|
||||
cd "$racketGitSubpath"
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/{include,etc/racket,lib/racket,share/racket/pkgs,share/racket/collects,bin,share/applications,share/doc/racket,share/man}
|
||||
|
||||
mkdir -p $out/nix-support
|
||||
touch $out/nix-support/racket-pkg
|
||||
|
||||
out="$out" tethered="$racketTetheredInstallation" \
|
||||
racket --no-user-path -nl racket/base -f - <<EOF
|
||||
(require racket/function racket/hash racket/list racket/pretty racket/string racket/match)
|
||||
|
||||
(define out (getenv "out"))
|
||||
(define pkgs (path-list-string->path-list (or (getenv "NIX_RACKET_PKG_PATH") "") '()))
|
||||
|
||||
(define tethered? (equal? (getenv "tethered") "1"))
|
||||
|
||||
(define base-config (read-installation-configuration-table))
|
||||
|
||||
(define (add-to-search added-list search-list)
|
||||
(match search-list
|
||||
['() (error "no #f found in search list!")]
|
||||
[(cons #f rst) (cons #f (append added-list rst))]
|
||||
[(cons fst rst) (cons fst (add-to-search added-list rst))]))
|
||||
|
||||
(define (make-search-path* key list-key [pkgs-search '()])
|
||||
(define old-search-list (hash-ref base-config list-key '(#f)))
|
||||
(define old-value
|
||||
(cond
|
||||
[(hash-has-key? base-config key)
|
||||
(list (hash-ref base-config key))]
|
||||
[(eq? key 'links-file)
|
||||
(list
|
||||
(path->string
|
||||
(build-path (hash-ref base-config 'share-dir) "links.rktd")))]
|
||||
[else (error "no key" key)]))
|
||||
(define added-list (append pkgs-search old-value))
|
||||
(add-to-search added-list old-search-list))
|
||||
|
||||
(define (default-location pkg key)
|
||||
(path->string
|
||||
(match key
|
||||
['include-dir (build-path pkg "include")]
|
||||
['lib-dir (build-path pkg "lib/racket")]
|
||||
['share-dir (build-path pkg "share/racket")]
|
||||
['pkgs-dir (build-path pkg "share/racket/pkgs")]
|
||||
['links-file (build-path pkg "share/racket/links.rktd")]
|
||||
['bin-dir (build-path pkg "bin")]
|
||||
['doc-dir (build-path pkg "share/doc/racket")]
|
||||
['man-dir (build-path pkg "share/man")]
|
||||
[_ (error "unexpected key:" key)])))
|
||||
|
||||
(define (make-search-path key list-key)
|
||||
(define pkgs-search
|
||||
(for/list ([pkg (in-list pkgs)])
|
||||
(default-location pkg key)))
|
||||
|
||||
(make-search-path* key list-key pkgs-search))
|
||||
|
||||
(define (add-libs lib-path)
|
||||
(define ldflags (string-split (getenv "NIX_LDFLAGS")))
|
||||
(define libs
|
||||
(for/list ([lib (in-list ldflags)] #:when (string-prefix? "-L" lib))
|
||||
(string-trim "-L" #:right? #f)))
|
||||
(remove-duplicates (append libs lib-path)))
|
||||
|
||||
(define config*
|
||||
(hash
|
||||
'absolute-installation? #t
|
||||
'build-stamp ""
|
||||
'catalogs (hash-ref base-config 'catalogs)
|
||||
'compiled-file-roots (hash-ref base-config 'compiled-file-roots)
|
||||
|
||||
'apps-dir (path->string (build-path out "share/applications"))
|
||||
|
||||
'bin-dir (default-location out 'bin-dir)
|
||||
'bin-search-dirs (make-search-path 'bin-dir 'bin-search-dirs)
|
||||
|
||||
'doc-dir (default-location out 'doc-dir)
|
||||
'doc-search-dirs (make-search-path 'doc-dir 'doc-search-dirs)
|
||||
'doc-search-url (hash-ref base-config 'doc-search-url)
|
||||
|
||||
'include-dir (default-location out 'include-dir)
|
||||
'include-search-dirs (make-search-path 'include-dir 'include-search-dirs)
|
||||
|
||||
'lib-dir (default-location out 'lib-dir)
|
||||
'lib-search-dirs (add-libs (make-search-path 'lib-dir 'lib-search-dirs))
|
||||
|
||||
'links-file (default-location out 'links-file)
|
||||
'links-search-files (make-search-path 'links-file 'links-search-files)
|
||||
|
||||
'man-dir (default-location out 'man-dir)
|
||||
'man-search-dirs (make-search-path 'man-dir 'man-search-dirs)
|
||||
|
||||
'pkgs-dir (default-location out 'pkgs-dir)
|
||||
'pkgs-search-dirs (make-search-path 'pkgs-dir 'pkgs-search-dirs)
|
||||
|
||||
'share-dir (default-location out 'share-dir)
|
||||
'share-search-dirs (make-search-path 'share-dir 'share-search-dirs)))
|
||||
|
||||
(define config
|
||||
(if tethered?
|
||||
(hash-union
|
||||
config*
|
||||
(hash
|
||||
'config-tethered-console-bin-dir (hash-ref config* 'bin-dir)
|
||||
'config-tethered-gui-bin-dir (hash-ref config* 'bin-dir)
|
||||
'config-tethered-apps-dir (hash-ref config* 'apps-dir)))
|
||||
config*))
|
||||
|
||||
(with-output-to-file (build-path out "etc/racket/config.rktd")
|
||||
(curry pretty-write config))
|
||||
EOF
|
||||
|
||||
echo Initializing installation layer
|
||||
if [ "$racketTetheredInstallation" == "1" ]; then
|
||||
racket --config $out/etc/racket/ --no-user-path -l- \
|
||||
raco setup --no-zo
|
||||
elif [ "$racketDoMainSetup" == "1" ]; then
|
||||
racket --config $out/etc/racket/ --no-user-path -l- \
|
||||
raco setup --no-zo --no-launcher
|
||||
|
||||
rm $out/bin/mzscheme # ????
|
||||
fi
|
||||
|
||||
if [ "$racketEnvOnly" == "1" ]; then
|
||||
echo Skipping raco pkg install
|
||||
else
|
||||
echo Running raco pkg install
|
||||
racoflags=""
|
||||
if [ "$racketBuildDocs" != "1" ]; then
|
||||
racoflags="--no-docs"
|
||||
fi
|
||||
racket --config $out/etc/racket/ --no-user-path -l- \
|
||||
raco pkg install --installation --deps fail --copy --name "$pname" $racoflags \
|
||||
"$(readlink -e .)"
|
||||
fi
|
||||
|
||||
runHook postInstall
|
||||
echo "Finished executing racketInstallPhase"
|
||||
}
|
||||
|
||||
|
||||
if [ -z "${dontUseRacketInstall-}" ] && [ -z "${installPhase-}" ]; then
|
||||
echo "Adding racket env hook"
|
||||
addEnvHooks "$targetOffset" addRacketPath
|
||||
echo "Using racketInstallPhase"
|
||||
installPhase=racketInstallPhase
|
||||
fi
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
#lang racket/base
|
||||
(require
|
||||
racket/function
|
||||
racket/list
|
||||
racket/pretty
|
||||
racket/string
|
||||
setup/dirs
|
||||
)
|
||||
|
||||
(define config-file (build-path (find-config-dir) "config.rktd"))
|
||||
|
||||
(define lib-paths
|
||||
((compose remove-duplicates
|
||||
(curry map (curryr string-trim "-L" #:right? #f))
|
||||
(curry filter (curryr string-prefix? "-L"))
|
||||
string-split)
|
||||
(getenv "NIX_LDFLAGS")))
|
||||
|
||||
(define config
|
||||
(let* ([prev-config (read-installation-configuration-table)]
|
||||
[prev-lib-search-dirs (hash-ref prev-config 'lib-search-dirs '(#f))]
|
||||
[lib-search-dirs (remove-duplicates (append lib-paths prev-lib-search-dirs))])
|
||||
(hash-set prev-config 'lib-search-dirs lib-search-dirs)))
|
||||
|
||||
(call-with-output-file config-file
|
||||
#:exists 'replace
|
||||
(curry pretty-write config))
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
{
|
||||
"version": "8.18",
|
||||
"full": {
|
||||
"filename": "racket-8.18-src.tgz",
|
||||
"sha256": "65477c71ec1a978a6ee4db582b9b47b1a488029d7a42e358906de154a6e5905c"
|
||||
},
|
||||
"minimal": {
|
||||
"filename": "racket-minimal-8.18-src.tgz",
|
||||
"sha256": "24b9cf8365254b43bac308192c782edfbd86363df1322c4e063b797ed0f7db66"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,175 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchurl,
|
||||
|
||||
libiconvReal,
|
||||
libz,
|
||||
lz4,
|
||||
ncurses,
|
||||
openssl,
|
||||
sqlite,
|
||||
|
||||
disableDocs ? false,
|
||||
|
||||
callPackage,
|
||||
writers,
|
||||
}:
|
||||
|
||||
let
|
||||
manifest = lib.importJSON ./manifest.json;
|
||||
|
||||
inherit (stdenv.hostPlatform) isDarwin;
|
||||
in
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "racket";
|
||||
inherit (manifest) version;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://mirror.racket-lang.org/installers/${manifest.version}/${manifest.minimal.filename}";
|
||||
inherit (manifest.minimal) sha256;
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
libiconvReal
|
||||
libz
|
||||
lz4
|
||||
ncurses
|
||||
openssl
|
||||
sqlite.out
|
||||
];
|
||||
|
||||
patches = lib.optionals isDarwin [
|
||||
/*
|
||||
The entry point binary $out/bin/racket is codesigned at least once. The
|
||||
following error is triggered as a result.
|
||||
(error 'add-ad-hoc-signature "file already has a signature")
|
||||
We always remove the existing signature then call add-ad-hoc-signature to
|
||||
circumvent this error.
|
||||
*/
|
||||
./patches/force-remove-codesign-then-add.patch
|
||||
];
|
||||
|
||||
preConfigure =
|
||||
/*
|
||||
The configure script forces using `libtool -o` as AR on Darwin. But, the
|
||||
`-o` option is only available from Apple libtool. GNU ar works here.
|
||||
*/
|
||||
lib.optionalString isDarwin ''
|
||||
substituteInPlace src/ChezScheme/zlib/configure \
|
||||
--replace-fail 'ARFLAGS="-o"' 'AR=ar; ARFLAGS="rc"'
|
||||
''
|
||||
+ ''
|
||||
mkdir src/build
|
||||
cd src/build
|
||||
'';
|
||||
|
||||
configureScript = "../configure";
|
||||
|
||||
configureFlags = [
|
||||
# > docs failure: ftype-ref: ftype mismatch for #<ftype-pointer>
|
||||
# "--enable-check"
|
||||
"--enable-csonly"
|
||||
"--enable-liblz4"
|
||||
"--enable-libz"
|
||||
]
|
||||
++ lib.optional disableDocs "--disable-docs"
|
||||
++ lib.optionals (!(finalAttrs.dontDisableStatic or false)) [
|
||||
# instead of `--disable-static` that `stdenv` assumes
|
||||
"--disable-libs"
|
||||
# "not currently supported" in `configure --help-cs` but still emphasized in README
|
||||
"--enable-shared"
|
||||
]
|
||||
++ lib.optionals isDarwin [
|
||||
"--disable-strip"
|
||||
# "use Unix style (e.g., use Gtk) for Mac OS", which eliminates many problems
|
||||
"--enable-xonx"
|
||||
];
|
||||
|
||||
# The upstream script builds static libraries by default.
|
||||
dontAddStaticConfigureFlags = true;
|
||||
|
||||
dontStrip = isDarwin;
|
||||
|
||||
postFixup =
|
||||
let
|
||||
configureInstallation = builtins.path {
|
||||
name = "configure-installation.rkt";
|
||||
path = ./configure-installation.rkt;
|
||||
};
|
||||
in
|
||||
''
|
||||
$out/bin/racket -U -u ${configureInstallation}
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
# Functionalities #
|
||||
updateScript = {
|
||||
command = ./update.py;
|
||||
attrPath = "racket";
|
||||
supportedFeatures = [ "commit" ];
|
||||
};
|
||||
writeScript =
|
||||
nameOrPath:
|
||||
{
|
||||
libraries ? [ ],
|
||||
...
|
||||
}@config:
|
||||
assert lib.assertMsg (libraries == [ ]) "library integration for Racket has not been implemented";
|
||||
writers.makeScriptWriter (
|
||||
builtins.removeAttrs config [ "libraries" ]
|
||||
// {
|
||||
interpreter = "${lib.getExe finalAttrs.finalPackage}";
|
||||
}
|
||||
) nameOrPath;
|
||||
writeScriptBin = name: finalAttrs.passthru.writeScript "/bin/${name}";
|
||||
|
||||
# Tests #
|
||||
tests = builtins.mapAttrs (name: path: callPackage path { racket = finalAttrs.finalPackage; }) {
|
||||
## Basic ##
|
||||
write-greeting = ./tests/write-greeting.nix;
|
||||
get-version-and-variant = ./tests/get-version-and-variant.nix;
|
||||
load-openssl = ./tests/load-openssl.nix;
|
||||
|
||||
## Nixpkgs supports ##
|
||||
nix-write-script = ./tests/nix-write-script.nix;
|
||||
};
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Programmable programming language (minimal distribution)";
|
||||
longDescription = ''
|
||||
Racket is a full-spectrum programming language. It goes beyond
|
||||
Lisp and Scheme with dialects that support objects, types,
|
||||
laziness, and more. Racket enables programmers to link
|
||||
components written in different dialects, and it empowers
|
||||
programmers to create new, project-specific dialects. Racket's
|
||||
libraries support applications from web servers and databases to
|
||||
GUIs and charts.
|
||||
|
||||
This minimal distribution includes just enough of Racket that you can
|
||||
use `raco pkg` to install more.
|
||||
'';
|
||||
homepage = "https://racket-lang.org/";
|
||||
changelog = "https://github.com/racket/racket/releases/tag/v${finalAttrs.version}";
|
||||
/*
|
||||
> Racket is distributed under the MIT license and the Apache version 2.0
|
||||
> license, at your option.
|
||||
|
||||
> The Racket runtime system embeds Chez Scheme, which is distributed
|
||||
> under the Apache version 2.0 license.
|
||||
*/
|
||||
license = with lib.licenses; [
|
||||
asl20
|
||||
mit
|
||||
];
|
||||
sourceProvenance = with lib.sourceTypes; [
|
||||
fromSource
|
||||
binaryBytecode
|
||||
];
|
||||
maintainers = with lib.maintainers; [ rc-zb ];
|
||||
mainProgram = "racket";
|
||||
platforms = lib.platforms.all;
|
||||
};
|
||||
})
|
||||
|
|
@ -1,140 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchurl,
|
||||
racket-minimal,
|
||||
|
||||
cairo,
|
||||
fontconfig,
|
||||
glib,
|
||||
glibcLocales,
|
||||
gtk3,
|
||||
libGL,
|
||||
libiodbc,
|
||||
libjpeg,
|
||||
libpng,
|
||||
makeFontsConf,
|
||||
pango,
|
||||
unixODBC,
|
||||
wrapGAppsHook3,
|
||||
|
||||
disableDocs ? false,
|
||||
|
||||
callPackage,
|
||||
}:
|
||||
|
||||
let
|
||||
minimal = racket-minimal.override { inherit disableDocs; };
|
||||
|
||||
manifest = lib.importJSON ./manifest.json;
|
||||
inherit (stdenv.hostPlatform) isDarwin;
|
||||
in
|
||||
|
||||
minimal.overrideAttrs (
|
||||
finalAttrs: prevAttrs: {
|
||||
src = fetchurl {
|
||||
url = "https://mirror.racket-lang.org/installers/${manifest.version}/${manifest.full.filename}";
|
||||
inherit (manifest.full) sha256;
|
||||
};
|
||||
|
||||
buildInputs = prevAttrs.buildInputs ++ [
|
||||
(if isDarwin then libiodbc else unixODBC)
|
||||
cairo
|
||||
fontconfig.lib
|
||||
glib
|
||||
gtk3
|
||||
libGL
|
||||
libjpeg
|
||||
libpng
|
||||
pango
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
wrapGAppsHook3
|
||||
];
|
||||
|
||||
patches = prevAttrs.patches or [ ] ++ [
|
||||
/*
|
||||
Hardcode variant detection because nixpkgs wraps the Racket binary making it
|
||||
fail to detect its variant at runtime.
|
||||
https://github.com/NixOS/nixpkgs/issues/114993#issuecomment-812951247
|
||||
*/
|
||||
./patches/force-cs-variant.patch
|
||||
];
|
||||
|
||||
preBuild =
|
||||
let
|
||||
libPathsVar = if isDarwin then "DYLD_FALLBACK_LIBRARY_PATH" else "LD_LIBRARY_PATH";
|
||||
in
|
||||
/*
|
||||
Makes FFIs available for setting up `main-distribution` and its
|
||||
dependencies, which is integrated into the build process of Racket
|
||||
*/
|
||||
''
|
||||
for lib_path in $( \
|
||||
echo "$NIX_LDFLAGS" \
|
||||
| tr ' ' '\n' \
|
||||
| grep '^-L' \
|
||||
| sed 's/^-L//' \
|
||||
| awk '!seen[$0]++' \
|
||||
); do
|
||||
addToSearchPath ${libPathsVar} $lib_path
|
||||
done
|
||||
''
|
||||
# Fixes Fontconfig errors
|
||||
+ ''
|
||||
export FONTCONFIG_FILE=${makeFontsConf { fontDirectories = [ ]; }}
|
||||
export XDG_CACHE_HOME=$(mktemp -d)
|
||||
'';
|
||||
|
||||
# Disable automatic wrapping, and only wrap the ELF binaries:
|
||||
#
|
||||
# - bin/racket
|
||||
# - lib/racket/gracket
|
||||
# - bin/mred
|
||||
# - bin/mzscheme
|
||||
#
|
||||
# This avoids effectively double-wrapping shell scripts generated by raco, because they will
|
||||
# call into the wrapped ELF binaries
|
||||
dontWrapGApps = true;
|
||||
|
||||
preFixup = (lib.optionalString (!isDarwin) ''
|
||||
gappsWrapperArgs+=("--set" "LOCALE_ARCHIVE" "${glibcLocales}/lib/locale/locale-archive")
|
||||
'') + ''
|
||||
wrapProgram $out/bin/racket "''${gappsWrapperArgs[@]}"
|
||||
wrapProgram $out/bin/mred "''${gappsWrapperArgs[@]}"
|
||||
wrapProgram $out/bin/mzscheme "''${gappsWrapperArgs[@]}"
|
||||
|
||||
wrapProgram $out/lib/racket/gracket "''${gappsWrapperArgs[@]}"
|
||||
'';
|
||||
|
||||
passthru =
|
||||
let
|
||||
notUpdated = x: !builtins.isAttrs x || lib.isDerivation x;
|
||||
stopPred =
|
||||
_: lhs: rhs:
|
||||
notUpdated lhs || notUpdated rhs;
|
||||
in
|
||||
lib.recursiveUpdateUntil stopPred prevAttrs.passthru {
|
||||
tests = builtins.mapAttrs (name: path: callPackage path { racket = finalAttrs.finalPackage; }) {
|
||||
## `main-distribution` ##
|
||||
draw-crossing = ./tests/draw-crossing.nix;
|
||||
};
|
||||
};
|
||||
|
||||
meta = prevAttrs.meta // {
|
||||
description = "Programmable programming language";
|
||||
longDescription = ''
|
||||
Racket is a full-spectrum programming language. It goes beyond
|
||||
Lisp and Scheme with dialects that support objects, types,
|
||||
laziness, and more. Racket enables programmers to link
|
||||
components written in different dialects, and it empowers
|
||||
programmers to create new, project-specific dialects. Racket's
|
||||
libraries support applications from web servers and databases to
|
||||
GUIs and charts.
|
||||
'';
|
||||
platforms = lib.platforms.unix;
|
||||
badPlatforms = lib.platforms.darwin;
|
||||
};
|
||||
}
|
||||
)
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
--- old/collects/setup/variant.rkt
|
||||
+++ new/collects/setup/variant.rkt
|
||||
@@ -7,7 +7,8 @@
|
||||
(provide variant-suffix
|
||||
script-variant?)
|
||||
|
||||
-(define plain-variant
|
||||
+(define plain-variant 'cs)
|
||||
+#;(define plain-variant
|
||||
(delay/sync
|
||||
(cond
|
||||
[(cross-installation?)
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
--- old/src/mac/codesign.rkt
|
||||
+++ new/src/mac/codesign.rkt
|
||||
@@ -18,6 +18,6 @@
|
||||
file))
|
||||
|
||||
(void
|
||||
- (if remove?
|
||||
+ (begin
|
||||
(remove-signature file)
|
||||
(add-ad-hoc-signature file)))
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
{ runCommandLocal, racket }:
|
||||
|
||||
runCommandLocal "racket-test-draw-crossing"
|
||||
{
|
||||
nativeBuildInputs = [ racket ];
|
||||
}
|
||||
''
|
||||
racket -f - <<EOF
|
||||
(require racket/draw)
|
||||
|
||||
(define target (make-bitmap 64 64))
|
||||
(define dc (new bitmap-dc% [bitmap target]))
|
||||
(send dc draw-line 0 0 64 64)
|
||||
(send dc draw-line 0 64 64 0)
|
||||
|
||||
(send target save-file (getenv "out") 'png)
|
||||
EOF
|
||||
''
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
runCommandLocal,
|
||||
racket,
|
||||
}:
|
||||
|
||||
runCommandLocal "racket-test-get-version-and-variant"
|
||||
{
|
||||
nativeBuildInputs = [ racket ];
|
||||
}
|
||||
(
|
||||
lib.concatLines (
|
||||
builtins.map
|
||||
(
|
||||
{ expectation, output }:
|
||||
''
|
||||
expectation="${expectation}"
|
||||
|
||||
output="${output}"
|
||||
|
||||
if test "$output" != "$expectation"; then
|
||||
echo "output mismatch: expected ''${expectation}, but got ''${output}"
|
||||
exit 1
|
||||
fi
|
||||
''
|
||||
)
|
||||
[
|
||||
{
|
||||
expectation = racket.version;
|
||||
output = "$(racket -e '(display (version))')";
|
||||
}
|
||||
{
|
||||
expectation = "cs";
|
||||
output = "$(racket -e '(require launcher/launcher) (display (current-launcher-variant))')";
|
||||
}
|
||||
{
|
||||
expectation = "${lib.getExe racket}";
|
||||
output = "$(racket -e '(require compiler/find-exe) (display (find-exe))')";
|
||||
}
|
||||
]
|
||||
)
|
||||
+ ''
|
||||
touch $out
|
||||
''
|
||||
)
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
{ runCommandLocal, racket }:
|
||||
|
||||
runCommandLocal "racket-test-load-openssl"
|
||||
{
|
||||
nativeBuildInputs = [ racket ];
|
||||
}
|
||||
''
|
||||
racket -f - <<EOF
|
||||
(require openssl)
|
||||
(unless ssl-available?
|
||||
(raise ssl-load-fail-reason))
|
||||
EOF
|
||||
|
||||
touch $out
|
||||
''
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
{ runCommandLocal, racket }:
|
||||
|
||||
let
|
||||
script = racket.writeScript "racket-test-nix-write-script-the-script" { } ''
|
||||
#lang racket/base
|
||||
(display "success")
|
||||
(newline)
|
||||
'';
|
||||
in
|
||||
|
||||
runCommandLocal "racket-test-nix-write-script"
|
||||
{
|
||||
nativeBuildInputs = [ racket ];
|
||||
}
|
||||
''
|
||||
expectation="success"
|
||||
|
||||
output="$(${script})"
|
||||
|
||||
if test "$output" != "$expectation"; then
|
||||
echo "output mismatch: expected ''${expectation}, but got ''${output}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
touch $out
|
||||
''
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
{ runCommandLocal, racket }:
|
||||
|
||||
runCommandLocal "racket-test-write-greeting"
|
||||
{
|
||||
nativeBuildInputs = [ racket ];
|
||||
}
|
||||
''
|
||||
expectation="Hello, world!"
|
||||
|
||||
racket -f - <<EOF
|
||||
(with-output-to-file (getenv "out")
|
||||
(lambda ()
|
||||
(display "Hello, world!")
|
||||
(newline)))
|
||||
EOF
|
||||
|
||||
output="$(cat $out)"
|
||||
|
||||
if test "$output" != "$expectation"; then
|
||||
echo "output mismatch: expected ''${expectation}, but got ''${output}"
|
||||
exit 1
|
||||
fi
|
||||
''
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
#! /usr/bin/env nix-shell
|
||||
#! nix-shell -i python3 --packages 'python3.withPackages (ps: with ps; [ requests beautifulsoup4 ])'
|
||||
import os
|
||||
import re
|
||||
import json
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
SITE = "https://download.racket-lang.org"
|
||||
MANIFEST_FILENAME = "manifest.json"
|
||||
|
||||
def find_info(table, group_name, subgroup_name):
|
||||
group = table.find(
|
||||
string=re.compile("^{}\\s*".format(group_name))
|
||||
).find_parent("tr", class_="group")
|
||||
subgroup = group.find_next(
|
||||
string=re.compile("^{}\\s*".format(subgroup_name))
|
||||
).find_parent(class_="subgroup")
|
||||
link = subgroup.find_next(
|
||||
"a",
|
||||
class_="installer",
|
||||
string="Source"
|
||||
)
|
||||
filename = link["href"].split("/")[1]
|
||||
sha256 = link.find_next(class_="checksum").string
|
||||
|
||||
return {
|
||||
"filename": filename,
|
||||
"sha256": sha256,
|
||||
}
|
||||
|
||||
os.chdir(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
prev_version = os.environ["UPDATE_NIX_OLD_VERSION"]
|
||||
|
||||
homepage = BeautifulSoup(requests.get(SITE).text, "html.parser")
|
||||
|
||||
version = homepage.find(
|
||||
"h3",
|
||||
string=re.compile("^Version \\d+\\.\\d+")
|
||||
).string.split()[1]
|
||||
if version == prev_version:
|
||||
raise Exception("no newer version available")
|
||||
|
||||
down_page_path = homepage.find(
|
||||
"a",
|
||||
string="More Installers and Checksums"
|
||||
)["href"]
|
||||
down_page = BeautifulSoup(requests.get(SITE + "/" + down_page_path).text, "html.parser")
|
||||
down_table = down_page.find(class_="download-table")
|
||||
|
||||
full = find_info(down_table, "Racket", "Unix")
|
||||
minimal = find_info(down_table, "Minimal Racket", "All Platforms")
|
||||
|
||||
with open(MANIFEST_FILENAME, "w", encoding="utf-8") as f:
|
||||
json.dump({
|
||||
"version": version,
|
||||
"full": full,
|
||||
"minimal": minimal,
|
||||
}, f, indent=2, ensure_ascii=False)
|
||||
f.write("\n")
|
||||
|
||||
print(json.dumps(
|
||||
[
|
||||
{
|
||||
"attrPath": os.environ["UPDATE_NIX_ATTR_PATH"],
|
||||
"oldVersion": prev_version,
|
||||
"newVersion": version,
|
||||
"files": [ os.path.abspath(MANIFEST_FILENAME) ],
|
||||
},
|
||||
],
|
||||
indent=2, ensure_ascii=False
|
||||
))
|
||||
|
|
@ -1,45 +1,51 @@
|
|||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
buildPythonPackage,
|
||||
|
||||
setuptools,
|
||||
|
||||
libbs,
|
||||
|
||||
filelock,
|
||||
gitpython,
|
||||
libbs,
|
||||
prompt-toolkit,
|
||||
pycparser,
|
||||
pyside6,
|
||||
pytest-qt,
|
||||
pytestCheckHook,
|
||||
setuptools,
|
||||
sortedcontainers,
|
||||
toml,
|
||||
tqdm,
|
||||
ply,
|
||||
wordfreq,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pyside6,
|
||||
|
||||
pytestCheckHook,
|
||||
pytest-qt,
|
||||
}: buildPythonPackage rec {
|
||||
pname = "binsync";
|
||||
version = "5.8.0+dev";
|
||||
version = "5.7.10+dev";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "binsync";
|
||||
repo = "binsync";
|
||||
rev = "9fdf3b28e78abd6a9665e52b713d8f480e78a78a";
|
||||
hash = "sha256-IXr3IzQfj50J7b+OqIl5IhWS1KKXWiNd7vEJX+TOxsA=";
|
||||
rev = "e67da5ab9cddc2743f7462c9543ba7100e25eeb5";
|
||||
hash = "sha256-QDOfbo2yjfjLsLILMhl/ckKwXDusXfE8+YmFpW5djN0=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
libbs
|
||||
|
||||
filelock
|
||||
gitpython
|
||||
libbs
|
||||
prompt-toolkit
|
||||
pycparser
|
||||
sortedcontainers
|
||||
toml
|
||||
tqdm
|
||||
ply
|
||||
wordfreq
|
||||
];
|
||||
|
||||
|
|
@ -54,10 +60,8 @@ buildPythonPackage rec {
|
|||
];
|
||||
|
||||
disabledTestPaths = [
|
||||
# Test tries to import angr-management
|
||||
# Test tries to import angrmanagement
|
||||
"tests/test_angr_gui.py"
|
||||
# needs flask
|
||||
"tests/test_auxiliary_server.py"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "binsync" ];
|
||||
|
|
@ -67,6 +71,5 @@ buildPythonPackage rec {
|
|||
homepage = "https://github.com/binsync/binsync";
|
||||
changelog = "https://github.com/binsync/binsync/releases/tag/${src.tag}";
|
||||
license = lib.licenses.bsd2;
|
||||
maintainers = with lib.maintainers; [ scoder12 ];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,43 +1,35 @@
|
|||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
buildPythonPackage,
|
||||
|
||||
setuptools,
|
||||
|
||||
filelock,
|
||||
ghidra-bridge,
|
||||
jfx-bridge,
|
||||
networkx,
|
||||
platformdirs,
|
||||
ply,
|
||||
prompt-toolkit,
|
||||
psutil,
|
||||
pycparser,
|
||||
pyhidra,
|
||||
pytestCheckHook,
|
||||
setuptools,
|
||||
toml,
|
||||
tqdm,
|
||||
writableTmpDirAsHomeHook,
|
||||
}:
|
||||
ply,
|
||||
|
||||
let
|
||||
# Binary files from https://github.com/binsync/bs-artifacts (only used for testing and only here)
|
||||
binaries = fetchFromGitHub {
|
||||
owner = "binsync";
|
||||
repo = "bs-artifacts";
|
||||
rev = "514c2d6ef1875435c9d137bb5d99b6fc74063817";
|
||||
hash = "sha256-P7+BTJgdC9W8cC/7xQduFYllF+0ds1dSlm59/BFvZ2g=";
|
||||
};
|
||||
in
|
||||
buildPythonPackage rec {
|
||||
pytestCheckHook,
|
||||
writableTmpDirAsHomeHook,
|
||||
}: buildPythonPackage rec {
|
||||
pname = "libbs";
|
||||
version = "2.16.5+dev";
|
||||
version = "2.16.4+dev";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "binsync";
|
||||
repo = "libbs";
|
||||
rev = "8955ad96ba94e2164c3daf5c0a942b256ec93126";
|
||||
hash = "sha256-mFNieYFZYskOpYdwr4Vpbs8lLct0nehsYTXzlvS/pas=";
|
||||
rev = "0ce5c351cc81c1a0120f763aeba584fdb9dc2820";
|
||||
hash = "sha256-if27Tg5S0Esrw9xHi6nr+kDIw4OTz7yZ2256/4Kbkeo=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
|
@ -48,13 +40,13 @@ buildPythonPackage rec {
|
|||
jfx-bridge
|
||||
networkx
|
||||
platformdirs
|
||||
ply
|
||||
prompt-toolkit
|
||||
psutil
|
||||
pycparser
|
||||
pyhidra
|
||||
toml
|
||||
tqdm
|
||||
ply
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
|
|
@ -62,14 +54,6 @@ buildPythonPackage rec {
|
|||
writableTmpDirAsHomeHook
|
||||
];
|
||||
|
||||
# Place test binaries in place
|
||||
preCheck = ''
|
||||
export HOME=$TMPDIR
|
||||
mkdir -p $HOME/bs-artifacts/binaries
|
||||
cp -r ${binaries} $HOME/bs-artifacts/binaries
|
||||
export TEST_BINARIES_DIR=$HOME/bs-artifacts/binaries
|
||||
'';
|
||||
|
||||
pythonImportsCheck = [ "libbs" ];
|
||||
|
||||
disabledTests = [
|
||||
|
|
@ -78,11 +62,16 @@ buildPythonPackage rec {
|
|||
"TestHeadlessInterfaces"
|
||||
];
|
||||
|
||||
|
||||
disabledTestPaths = [
|
||||
"tests/test_decompilers.py"
|
||||
"tests/test_remote_ghidra.py"
|
||||
];
|
||||
|
||||
meta = {
|
||||
description = "Library for writing plugins in any decompiler: includes API lifting, common data formatting, and GUI abstraction";
|
||||
homepage = "https://github.com/binsync/libbs";
|
||||
changelog = "https://github.com/binsync/libbs/releases/tag/${src.tag}";
|
||||
license = lib.licenses.bsd2;
|
||||
maintainers = with lib.maintainers; [ scoder12 ];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,18 @@
|
|||
From be4c852769e260e3a9b516bb5626a6a6a68a2cd3 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-isf/build.gradle | 8 +-
|
||||
Ghidra/Debug/Debugger-rmi-trace/build.gradle | 16 ++--
|
||||
build.gradle | 6 ++
|
||||
gradle/hasProtobuf.gradle | 94 --------------------
|
||||
4 files changed, 22 insertions(+), 102 deletions(-)
|
||||
delete mode 100644 gradle/hasProtobuf.gradle
|
||||
|
||||
diff --git a/Ghidra/Debug/Debugger-isf/build.gradle b/Ghidra/Debug/Debugger-isf/build.gradle
|
||||
index 2db94ed67e..925f394cf0 100644
|
||||
index f6c8464405..396b52d188 100644
|
||||
--- a/Ghidra/Debug/Debugger-isf/build.gradle
|
||||
+++ b/Ghidra/Debug/Debugger-isf/build.gradle
|
||||
@@ -18,11 +18,17 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
|
||||
|
|
@ -19,10 +32,10 @@ index 2db94ed67e..925f394cf0 100644
|
|||
+}
|
||||
+
|
||||
dependencies {
|
||||
api project(':Framework-AsyncComm')
|
||||
api project(':ProposedUtils')
|
||||
}
|
||||
diff --git a/Ghidra/Debug/Debugger-rmi-trace/build.gradle b/Ghidra/Debug/Debugger-rmi-trace/build.gradle
|
||||
index 4fa3b9a539..2663aeaeb0 100644
|
||||
index 8b6589f035..05da5a7a7e 100644
|
||||
--- a/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"
|
||||
|
|
@ -43,27 +56,25 @@ index 4fa3b9a539..2663aeaeb0 100644
|
|||
+}
|
||||
+
|
||||
dependencies {
|
||||
api project(':ProposedUtils')
|
||||
api project(':Pty')
|
||||
@@ -37,13 +42,10 @@ dependencies {
|
||||
}
|
||||
|
||||
task configureGenerateProtoPy {
|
||||
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 {
|
||||
doLast {
|
||||
- def exe = configurations.protocArtifact.first()
|
||||
- if (!isCurrentWindows()) {
|
||||
- exe.setExecutable(true)
|
||||
- }
|
||||
+ doLast {
|
||||
+ def exe = protobuf.tools.protoc.path
|
||||
generateProtoPy.commandLine exe
|
||||
generateProtoPy.args "--python_out=${generateProtoPy.outdir}"
|
||||
generateProtoPy.args "--pyi_out=${generateProtoPy.stubsOutdir}"
|
||||
exec {
|
||||
commandLine exe, "--python_out=$outdir", "-I$srcdir"
|
||||
args src
|
||||
diff --git a/build.gradle b/build.gradle
|
||||
index 159eb7dd7b..ef4add1ad8 100644
|
||||
index 2d75307a08..aa8f1d7604 100644
|
||||
--- a/build.gradle
|
||||
+++ b/build.gradle
|
||||
@@ -80,6 +80,12 @@ if (flatRepo.isDirectory()) {
|
||||
|
|
@ -81,19 +92,19 @@ index 159eb7dd7b..ef4add1ad8 100644
|
|||
else {
|
||||
diff --git a/gradle/hasProtobuf.gradle b/gradle/hasProtobuf.gradle
|
||||
deleted file mode 100644
|
||||
index a8c176bcbe..0000000000
|
||||
index 23b4ce74bb..0000000000
|
||||
--- a/gradle/hasProtobuf.gradle
|
||||
+++ /dev/null
|
||||
@@ -1,98 +0,0 @@
|
||||
@@ -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.
|
||||
|
|
@ -146,22 +157,7 @@ index a8c176bcbe..0000000000
|
|||
- }
|
||||
-}*/
|
||||
-
|
||||
-task configureGenerateProto {
|
||||
- dependsOn(configurations.protocArtifact)
|
||||
-
|
||||
- doLast {
|
||||
- def exe = configurations.protocArtifact.first()
|
||||
- if (!isCurrentWindows()) {
|
||||
- exe.setExecutable(true)
|
||||
- }
|
||||
- generateProto.commandLine exe, "--java_out=${generateProto.outdir}", "-I${generateProto.srcdir}"
|
||||
- generateProto.args generateProto.src
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-// Can't use providers.exec, or else we see no output
|
||||
-task generateProto(type:Exec) {
|
||||
- dependsOn(configureGenerateProto)
|
||||
-task generateProto {
|
||||
- ext.srcdir = file("src/main/proto")
|
||||
- ext.src = fileTree(srcdir) {
|
||||
- include "**/*.proto"
|
||||
|
|
@ -169,6 +165,17 @@ index a8c176bcbe..0000000000
|
|||
- 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)
|
||||
|
|
@ -183,3 +190,6 @@ index a8c176bcbe..0000000000
|
|||
- }
|
||||
-}
|
||||
-zipSourceSubproject.dependsOn generateProto
|
||||
--
|
||||
2.47.0
|
||||
|
||||
|
|
|
|||
|
|
@ -21,17 +21,16 @@ let
|
|||
platforms = oldMeta.platforms or ghidra.meta.platforms;
|
||||
};
|
||||
|
||||
buildGhidraExtension = lib.extendMkDerivation {
|
||||
constructDrv = stdenv.mkDerivation;
|
||||
extendDrvArgs =
|
||||
finalAttrs:
|
||||
{
|
||||
pname,
|
||||
nativeBuildInputs ? [ ],
|
||||
meta ? { },
|
||||
...
|
||||
}@args:
|
||||
{
|
||||
buildGhidraExtension =
|
||||
{
|
||||
pname,
|
||||
nativeBuildInputs ? [ ],
|
||||
meta ? { },
|
||||
...
|
||||
}@args:
|
||||
stdenv.mkDerivation (
|
||||
args
|
||||
// {
|
||||
nativeBuildInputs = nativeBuildInputs ++ [
|
||||
unzip
|
||||
jdk
|
||||
|
|
@ -59,28 +58,22 @@ let
|
|||
mkdir -p $out/lib/ghidra/Ghidra/Extensions
|
||||
unzip -d $out/lib/ghidra/Ghidra/Extensions dist/*.zip
|
||||
|
||||
# Prevent attempted creation of plugin lock files in the Nix store.
|
||||
for i in $out/lib/ghidra/Ghidra/Extensions/*; do
|
||||
touch "$i/.dbDirLock"
|
||||
done
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = metaCommon meta;
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
buildGhidraScripts = lib.extendMkDerivation {
|
||||
constructDrv = stdenv.mkDerivation;
|
||||
extendDrvArgs =
|
||||
finalAttrs:
|
||||
{
|
||||
pname,
|
||||
meta ? { },
|
||||
...
|
||||
}@args:
|
||||
{
|
||||
buildGhidraScripts =
|
||||
{
|
||||
pname,
|
||||
meta ? { },
|
||||
...
|
||||
}@args:
|
||||
stdenv.mkDerivation (
|
||||
args
|
||||
// {
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
|
|
@ -102,8 +95,8 @@ let
|
|||
'';
|
||||
|
||||
meta = metaCommon meta;
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
in
|
||||
{
|
||||
inherit buildGhidraExtension buildGhidraScripts;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
let
|
||||
pname = "ghidra";
|
||||
version = "11.4.2";
|
||||
version = "11.3.2";
|
||||
|
||||
isMacArm64 = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64;
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ let
|
|||
owner = "NationalSecurityAgency";
|
||||
repo = "Ghidra";
|
||||
rev = "Ghidra_${version}_build";
|
||||
hash = "sha256-/veSp2WuGOF0cYwUC4QFJD6kaMae5NuKrQ5Au4LjDe8=";
|
||||
hash = "sha256-EvIOC/VIUaEl7eneVzgEt2fhLSP9DaawMAutk4ouFp8=";
|
||||
# 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;
|
||||
|
|
@ -251,9 +251,26 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
;
|
||||
|
||||
withExtensions = callPackage ./with-extensions.nix { ghidra = finalAttrs.finalPackage; };
|
||||
|
||||
pythonPackages = rec {
|
||||
ghidratrace = python3Packages.callPackage ./python/ghidratrace.nix {
|
||||
ghidra = finalAttrs.finalPackage;
|
||||
};
|
||||
ghidragdb = python3Packages.callPackage ./python/ghidragdb.nix {
|
||||
ghidra = finalAttrs.finalPackage;
|
||||
inherit ghidratrace;
|
||||
};
|
||||
ghidralldb = python3Packages.callPackage ./python/ghidralldb.nix {
|
||||
ghidra = finalAttrs.finalPackage;
|
||||
inherit ghidratrace;
|
||||
};
|
||||
pyghidra = python3Packages.callPackage ./python/pyghidra.nix {
|
||||
ghidra = finalAttrs.finalPackage;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
meta = {
|
||||
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";
|
||||
|
|
@ -264,15 +281,11 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
sourceProvenance = with lib.sourceTypes; [
|
||||
sourceProvenance = with sourceTypes; [
|
||||
fromSource
|
||||
binaryBytecode # deps
|
||||
];
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [
|
||||
roblabla
|
||||
vringar
|
||||
];
|
||||
license = licenses.asl20;
|
||||
broken = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64;
|
||||
};
|
||||
})
|
||||
|
|
|
|||
|
|
@ -99,14 +99,11 @@
|
|||
}
|
||||
},
|
||||
"https://ftp.postgresql.org": {
|
||||
"pub/source/v15.13/postgresql-15.13": {
|
||||
"tar.gz": "sha256-r9wisKblvse2VyN1a5DUTqkR5hsvewHE3FUkq4E7TYk="
|
||||
"pub/source/v15.10/postgresql-15.10": {
|
||||
"tar.gz": "sha256-FzNmYFJZqD3BicQyf/TDclSv7WW0+GbL2KXvLqRJ6PM="
|
||||
}
|
||||
},
|
||||
"https://github.com/NationalSecurityAgency/ghidra-data/raw/Ghidra_11.4.2": {
|
||||
"Debugger/dbgmodel": {
|
||||
"tlb": "sha256-jPXzouuBFgqjSQVqXKTCxyaxtumL8wl81BNRRxYzQ8c="
|
||||
},
|
||||
"https://github.com/NationalSecurityAgency/ghidra-data/raw/Ghidra_11.3.2": {
|
||||
"FunctionID/vs2012_x64": {
|
||||
"fidb": "sha256-1OmKs/eQuDF5MhhDC7oNiySl+/TaZbDB/6jLDPvrDNw="
|
||||
},
|
||||
|
|
@ -286,10 +283,6 @@
|
|||
"jar": "sha256-fZOMgXiQKARcCMBl6UvnX8KAUnYg1b1itRnVg4UyNoo=",
|
||||
"pom": "sha256-w1zKe2HUZ42VeMvAuQG4cXtTmr+SVEQdp4uP5g3gZNA="
|
||||
},
|
||||
"commons-codec#commons-codec/1.18.0": {
|
||||
"jar": "sha256-ugBfMEzvkqPe3iSjitWsm4r8zw2PdYOdbBM4Y0z39uQ=",
|
||||
"pom": "sha256-dLkW2ksDhMYZ5t1MGN7+iqQ4f3lSBSU8+0u7L0WM3c4="
|
||||
},
|
||||
"commons-collections#commons-collections/3.2.2": {
|
||||
"jar": "sha256-7urpF5FxRKaKdB1MDf9mqlxcX9hVk/8he87T/Iyng7g=",
|
||||
"pom": "sha256-1dgfzCiMDYxxHDAgB8raSqmiJu0aES1LqmTLHWMiFws="
|
||||
|
|
@ -298,10 +291,6 @@
|
|||
"jar": "sha256-lhsvbYfbrMXVSr9Fq3puJJX4m3VZiWLYxyPOqbwhCQg=",
|
||||
"pom": "sha256-LgFv1+MkS18sIKytg02TqkeQSG7h5FZGQTYaPoMe71k="
|
||||
},
|
||||
"commons-io#commons-io/2.19.0": {
|
||||
"jar": "sha256-gkJokZtLYvn0DwjFQ4HeWZOwePWGZ+My0XNIrgGdcrk=",
|
||||
"pom": "sha256-VCt6UC7WGVDRuDEStRsWF9NAfjpN9atWqY12Dg+MWVA="
|
||||
},
|
||||
"commons-lang#commons-lang/2.6": {
|
||||
"jar": "sha256-UPEbCfh3wpTVbyRGP0fSj5Kc9QRPZIZhwPDPuumi9Jw=",
|
||||
"pom": "sha256-7Xa4iRwwtWYonHQ2Vvik1DWYaYJDjUDFZ8YmIzJH5xE="
|
||||
|
|
@ -343,9 +332,9 @@
|
|||
"jar": "sha256-/PSSLTj/hRhPHSMoMXu2CCbhTalIq9YG7j1bjGpw3r0=",
|
||||
"pom": "sha256-uIEr4lGsoTl/S2pCO/Tt06KERONFOyIDtTSTNrmVgik="
|
||||
},
|
||||
"junit#junit/4.13.2": {
|
||||
"jar": "sha256-jklbY0Rp1k+4rPo0laBly6zIoP/1XOHjEAe+TBbcV9M=",
|
||||
"pom": "sha256-Vptpd+5GA8llwcRsMFj6bpaSkbAWDraWTdCSzYnq3ZQ="
|
||||
"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=",
|
||||
|
|
@ -443,9 +432,6 @@
|
|||
"org/apache#apache/27": {
|
||||
"pom": "sha256-srD8aeIqZQw4kvHDZtdwdvKVdcZzjfTHpwpEhESEzfk="
|
||||
},
|
||||
"org/apache#apache/33": {
|
||||
"pom": "sha256-14vYUkxfg4ChkKZSVoZimpXf5RLfIRETg6bYwJI6RBU="
|
||||
},
|
||||
"org/apache#apache/7": {
|
||||
"pom": "sha256-E5fOHbQzrcnyI9vwdJbRM2gUSHUfSuKeWPaOePtLbCU="
|
||||
},
|
||||
|
|
@ -457,9 +443,9 @@
|
|||
"jar": "sha256-Hfi5QwtcjtFD14FeQD4z71NxskAKrb6b2giDdi4IRtE=",
|
||||
"pom": "sha256-JxvWc4Oa9G5zr/lX4pGNS/lvWsT2xs9NW+k/0fEnHE0="
|
||||
},
|
||||
"org/apache/commons#commons-compress/1.27.1": {
|
||||
"jar": "sha256-KT2A9UtTa3QJXc1+o88KKbv8NAJRkoEzJJX0Qg03DRY=",
|
||||
"pom": "sha256-34zBqDh9TOhCNjtyCf3G0135djg5/T/KtVig+D+dhBw="
|
||||
"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=",
|
||||
|
|
@ -468,9 +454,9 @@
|
|||
"org/apache/commons#commons-lang3/3.11": {
|
||||
"pom": "sha256-mA1mXYP+0EZlE08FeOUHRCoOdQaRBzeEORsKeYhySnU="
|
||||
},
|
||||
"org/apache/commons#commons-lang3/3.17.0": {
|
||||
"jar": "sha256-bucx31yOWil2ocoCO2uzIOqNNTn75kyKHVy3ZRJ8M7Q=",
|
||||
"pom": "sha256-NRxuSUDpObHzMN9H9g8Tujg9uB7gCBga9UHzoqbSpWw="
|
||||
"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="
|
||||
|
|
@ -502,18 +488,6 @@
|
|||
"org/apache/commons#commons-parent/54": {
|
||||
"pom": "sha256-AA2Bh5UrIjcC/eKW33mVY/Nd6CznKttOe/FXNCN4++M="
|
||||
},
|
||||
"org/apache/commons#commons-parent/72": {
|
||||
"pom": "sha256-Q0Xev8dnsa6saKvdcvxn0YtSHUs5A3KhG2P/DFhrIyA="
|
||||
},
|
||||
"org/apache/commons#commons-parent/73": {
|
||||
"pom": "sha256-TtRFYLB/hEhHnf0eg6Qiuk6D5gs25RsocaxQKm1cG+o="
|
||||
},
|
||||
"org/apache/commons#commons-parent/79": {
|
||||
"pom": "sha256-Yo3zAUis08SRz8trc8euS1mJ5VJqsTovQo3qXUrRDXo="
|
||||
},
|
||||
"org/apache/commons#commons-parent/81": {
|
||||
"pom": "sha256-NI1OfBMb5hFMhUpxnOekQwenw5vTZghJd7JP0prQ7bQ="
|
||||
},
|
||||
"org/apache/commons#commons-pool2/2.11.1": {
|
||||
"jar": "sha256-6gUF7nUV5YsawOaG5NGl2ffYCOJRphvDcaoFlbmWP4M=",
|
||||
"pom": "sha256-wbsCmUpK34loDfepitujPFUnaDAUJy1liFuzA27NSMM="
|
||||
|
|
@ -549,17 +523,17 @@
|
|||
"org/apache/logging/log4j#log4j/2.17.1": {
|
||||
"pom": "sha256-lnq8AkRDqcsJaTVVmvXprW8P9hN1+Esn1EDS+nCAawk="
|
||||
},
|
||||
"org/bouncycastle#bcpkix-jdk18on/1.80": {
|
||||
"jar": "sha256-T0umqSYX6hncGD8PpdtJLu5Cb93ioKLWyUd3/9GvZBM=",
|
||||
"pom": "sha256-pKEiETRntyjhjyb7DP1X8LGg18SlO4Zxis5wv4uG7Uc="
|
||||
"org/bouncycastle#bcpkix-jdk15on/1.69": {
|
||||
"jar": "sha256-QIN20Xqqh4nnrNBV/kBCiaEfozX9fGinUykEn7fSjtI=",
|
||||
"pom": "sha256-WrvkytLCMJR0ZvsgmiJn48xqDTgKajGRWVnTqtm4F2w="
|
||||
},
|
||||
"org/bouncycastle#bcprov-jdk18on/1.80": {
|
||||
"jar": "sha256-6K0gn4xY0pGjfKl1Dp6frGBZaVbJg+Sd2Cgjgd2LMkk=",
|
||||
"pom": "sha256-oKdcdtkcQh7qVtD2Bi+49j7ff6x+xyT9QgzNytcYHUM="
|
||||
"org/bouncycastle#bcprov-jdk15on/1.69": {
|
||||
"jar": "sha256-5Gm9Ofk2mZ8lYAJjEAP/AioilR2p1b2Xicer+pdjopI=",
|
||||
"pom": "sha256-/YHicUSVvOeeauazAp2s0kzyz/NAJB2lgQVYlae6eN4="
|
||||
},
|
||||
"org/bouncycastle#bcutil-jdk18on/1.80": {
|
||||
"jar": "sha256-Iuymh/eVVBH0Vq8z5uqOaPxzzYDLizKqX3qLGCfXxng=",
|
||||
"pom": "sha256-Qhp95L/rnFs4sfxHxCagh9kIeJVdQQf1t6gusde3R7Y="
|
||||
"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="
|
||||
|
|
@ -573,10 +547,10 @@
|
|||
"module": "sha256-clinadyqJrmBVNIp2FzHLls2ZrC8tjfS2vFuxJiVZjg=",
|
||||
"pom": "sha256-AjkvvUziGQH5RWFUcrHU1NNZGzqr3wExBfXJLsMstPA="
|
||||
},
|
||||
"org/checkerframework#checker-qual/3.49.3": {
|
||||
"jar": "sha256-Nn7b8v6fYGwf21qLpuHJwnYlmT4f+VTjho3nC8xkFrc=",
|
||||
"module": "sha256-dv9CWNsfoaC8bOeur0coPfEGD9Q3oJvm7zxcMmnqWtM=",
|
||||
"pom": "sha256-i+QBdkYoXZFCx/sibPuARFwXfcfBNjsj2UH6bJuwXc8="
|
||||
"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="
|
||||
|
|
@ -605,10 +579,6 @@
|
|||
"jar": "sha256-YwKKfV6V7sjibuBCSxQfh+nalccYTypaSbtD371TsQQ=",
|
||||
"pom": "sha256-zMoEy/7Z60gzSM+6aexh9gvdyfPjwJJLZLsZ0cqy4s0="
|
||||
},
|
||||
"org/commonmark#commonmark-ext-gfm-tables/0.23.0": {
|
||||
"jar": "sha256-WfO2Gthywhg7guygUn14GspFThF31xmMl5WydH0XC3s=",
|
||||
"pom": "sha256-x6/bJCGgs9hFDewHWaPrfBHEqZfTlLd8VR3Bgi3S2Uk="
|
||||
},
|
||||
"org/commonmark#commonmark-ext-heading-anchor/0.23.0": {
|
||||
"jar": "sha256-7O27O1jbcgxhNXwb4boTKlweeczr4B8NPZo25VJCDL0=",
|
||||
"pom": "sha256-95zHry5Zpgc70UwPNKezU0JDO5FxqhdLYzeHRaVuASw="
|
||||
|
|
@ -699,17 +669,9 @@
|
|||
"jar": "sha256-EhJRcOeVUZum3IAQwHC1PHaq6StIXB43Uw5Uq13QjUM=",
|
||||
"pom": "sha256-EMo7z1F48YUH8hCmOtljeJaFM0OtHBKRoBmhFvIWpUg="
|
||||
},
|
||||
"org/junit#junit-bom/5.11.0": {
|
||||
"module": "sha256-9+2+Z/IgQnCMQQq8VHQI5cR29An1ViNqEXkiEnSi7S0=",
|
||||
"pom": "sha256-5nRZ1IgkJKxjdPQNscj0ouiJRrNAugcsgL6TKivkZE0="
|
||||
},
|
||||
"org/junit#junit-bom/5.11.0-M2": {
|
||||
"module": "sha256-hkd6vPSQ1soFmqmXPLEI0ipQb0nRpVabsyzGy/Q8LM4=",
|
||||
"pom": "sha256-Sj/8Sk7c/sLLXWGZInBqlAcWF5hXGTn4VN/ac+ThfMg="
|
||||
},
|
||||
"org/junit#junit-bom/5.11.4": {
|
||||
"module": "sha256-qaTye+lOmbnVcBYtJGqA9obSd9XTGutUgQR89R2vRuQ=",
|
||||
"pom": "sha256-GdS3R7IEgFMltjNFUylvmGViJ3pKwcteWTpeTE9eQRU="
|
||||
"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=",
|
||||
|
|
@ -773,9 +735,9 @@
|
|||
"jar": "sha256-jK3UOsXrbQneBfrsyji5F6BAu5E5x+3rTMgcdAtxMoE=",
|
||||
"pom": "sha256-cimwOzCnPukQCActnkVppR2FR/roxQ9SeEGu9MGwuqg="
|
||||
},
|
||||
"org/postgresql#postgresql/42.7.6": {
|
||||
"jar": "sha256-8qHMA1LdXlxvZdut/ye+4Awy5DLGrQMNB0R/ilmDxCo=",
|
||||
"pom": "sha256-SfNzCJO2khPK99foymodjHaf9mhCHVJS3gBSvFVGp8c="
|
||||
"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=",
|
||||
|
|
|
|||
|
|
@ -17,8 +17,6 @@ lib.makeScope newScope (self: {
|
|||
|
||||
ghidra-delinker-extension = self.callPackage ./extensions/ghidra-delinker-extension { };
|
||||
|
||||
ghidra-firmware-utils = self.callPackage ./extensions/ghidra-firmware-utils { };
|
||||
|
||||
ghidra-golanganalyzerextension = self.callPackage ./extensions/ghidra-golanganalyzerextension { };
|
||||
|
||||
ghidraninja-ghidra-scripts = self.callPackage ./extensions/ghidraninja-ghidra-scripts { };
|
||||
|
|
|
|||
|
|
@ -3,23 +3,26 @@
|
|||
fetchFromGitHub,
|
||||
buildGhidraExtension,
|
||||
}:
|
||||
buildGhidraExtension (finalAttrs: {
|
||||
let
|
||||
version = "3.0.5";
|
||||
in
|
||||
buildGhidraExtension {
|
||||
pname = "findcrypt";
|
||||
version = "3.1.2";
|
||||
inherit version;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "antoniovazquezblanco";
|
||||
repo = "GhidraFindcrypt";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-KP6Wx2U8O/37yEAcV3abKg/uWraHJJOIfb7kvcfejHA=";
|
||||
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${finalAttrs.version}";
|
||||
changelog = "https://github.com/antoniovazquezblanco/GhidraFindcrypt/releases/tag/v${finalAttrs.version}";
|
||||
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 ];
|
||||
};
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,36 +4,40 @@
|
|||
gradle,
|
||||
fetchFromGitHub,
|
||||
}:
|
||||
buildGhidraExtension (finalAttrs: {
|
||||
pname = "ghidra-delinker-extension";
|
||||
let
|
||||
version = "0.5.1";
|
||||
self = buildGhidraExtension {
|
||||
pname = "ghidra-delinker-extension";
|
||||
inherit version;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "boricj";
|
||||
repo = "ghidra-delinker-extension";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-h6F50Z7S6tPOl9mIhChLKoFxHuAkq/n36ysUEFwWGxI=";
|
||||
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;
|
||||
};
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace build.gradle \
|
||||
--replace-fail '"''${getGitHash()}"' '"v${finalAttrs.version}"'
|
||||
'';
|
||||
|
||||
gradleBuildTask = "buildExtension";
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
mitmCache = gradle.fetchDeps {
|
||||
pkg = finalAttrs.finalPackage;
|
||||
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,24 +0,0 @@
|
|||
{
|
||||
buildGhidraExtension,
|
||||
fetchFromGitHub,
|
||||
lib,
|
||||
}:
|
||||
buildGhidraExtension (finalAttrs: {
|
||||
pname = "ghidra-firmware-utils";
|
||||
version = "2024.04.20";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "al3xtjames";
|
||||
repo = "ghidra-firmware-utils";
|
||||
rev = finalAttrs.version;
|
||||
hash = "sha256-BbPRSD1EzgMA3TCKHyNqLjzEgiOm67mLJuOeFOTvd0I=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Ghidra utilities for analyzing PC firmware";
|
||||
homepage = "https://github.com/al3xtjames/ghidra-firmware-utils";
|
||||
downloadPage = "https://github.com/al3xtjames/ghidra-firmware-utils/releases/tag/${finalAttrs.version}";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ timschumi ];
|
||||
};
|
||||
})
|
||||
|
|
@ -3,22 +3,22 @@
|
|||
fetchFromGitHub,
|
||||
buildGhidraExtension,
|
||||
}:
|
||||
buildGhidraExtension (finalAttrs: {
|
||||
buildGhidraExtension rec {
|
||||
pname = "Ghidra-GolangAnalyzerExtension";
|
||||
version = "1.2.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mooncat-greenpy";
|
||||
repo = "Ghidra_GolangAnalyzerExtension";
|
||||
rev = finalAttrs.version;
|
||||
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/${finalAttrs.version}";
|
||||
downloadPage = "https://github.com/mooncat-greenpy/Ghidra_GolangAnalyzerExtension/releases/tag/${version}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.ivyfanchiang ];
|
||||
};
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,10 +26,10 @@ buildGhidraScripts {
|
|||
substituteInPlace YaraSearch.py --replace-fail '"yara "' '"${yara}/bin/yara "'
|
||||
'';
|
||||
|
||||
meta = {
|
||||
meta = with lib; {
|
||||
description = "Scripts for the Ghidra software reverse engineering suite";
|
||||
homepage = "https://github.com/ghidraninja/ghidra_scripts";
|
||||
license = with lib.licenses; [
|
||||
license = with licenses; [
|
||||
gpl3Only
|
||||
gpl2Only
|
||||
];
|
||||
|
|
|
|||
|
|
@ -42,8 +42,7 @@ buildGhidraExtension {
|
|||
bison
|
||||
texinfo
|
||||
perl
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild ];
|
||||
] ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild ];
|
||||
|
||||
buildInputs = [ zlib ];
|
||||
gradleBuildTask = "assemble";
|
||||
|
|
@ -61,10 +60,10 @@ buildGhidraExtension {
|
|||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
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 = lib.licenses.gpl2Only;
|
||||
license = licenses.gpl2Only;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,15 +24,15 @@ let
|
|||
}
|
||||
);
|
||||
|
||||
self = buildGhidraExtension (finalAttrs: {
|
||||
self = buildGhidraExtension rec {
|
||||
pname = "kaiju";
|
||||
version = "250828";
|
||||
version = "250417";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "CERTCC";
|
||||
repo = "kaiju";
|
||||
rev = finalAttrs.version;
|
||||
hash = "sha256-edsQIBoOTY+WxVBtH1bbM7TZZHhA0jgVb2iJKC66iVM=";
|
||||
rev = version;
|
||||
hash = "sha256-SSvCb3xnOh0mb3H24RJTi11UmN2ARgFgsiiKlZXyufM=";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
|
@ -65,9 +65,9 @@ let
|
|||
};
|
||||
|
||||
meta = {
|
||||
description = "Java implementation of some features of the CERT Pharos Binary Analysis Framework for Ghidra";
|
||||
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/${finalAttrs.version}";
|
||||
downloadPage = "https://github.com/CERTCC/kaiju/releases/tag/${version}";
|
||||
license = lib.licenses.bsd3;
|
||||
maintainers = [ lib.maintainers.ivyfanchiang ];
|
||||
platforms = [
|
||||
|
|
@ -77,6 +77,6 @@ let
|
|||
"aarch64-darwin"
|
||||
];
|
||||
};
|
||||
});
|
||||
};
|
||||
in
|
||||
self
|
||||
|
|
|
|||
|
|
@ -3,22 +3,22 @@
|
|||
fetchFromGitHub,
|
||||
buildGhidraExtension,
|
||||
}:
|
||||
buildGhidraExtension (finalAttrs: {
|
||||
buildGhidraExtension rec {
|
||||
pname = "lightkeeper";
|
||||
version = "1.2.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "WorksButNotTested";
|
||||
repo = "lightkeeper";
|
||||
rev = finalAttrs.version;
|
||||
rev = version;
|
||||
hash = "sha256-aGMWg6VQleKH/txlxpSw19QOotWZSqeW5Ve2SpWGhgA=";
|
||||
};
|
||||
preConfigure = ''
|
||||
cd lightkeeper
|
||||
'';
|
||||
meta = {
|
||||
description = "Port of the Lighthouse plugin to GHIDRA";
|
||||
description = "A port of the Lighthouse plugin to GHIDRA.";
|
||||
homepage = "https://github.com/WorksButNotTested/lightkeeper";
|
||||
license = lib.licenses.asl20;
|
||||
};
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,11 +23,11 @@ buildGhidraExtension {
|
|||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
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 lib.sourceTypes; [
|
||||
sourceProvenance = with sourceTypes; [
|
||||
fromSource
|
||||
binaryBytecode # deps
|
||||
];
|
||||
|
|
|
|||
|
|
@ -34,9 +34,9 @@ buildGhidraExtension {
|
|||
rm dist/ghidra*
|
||||
mv dist/safe.zip dist/$correct_version
|
||||
'';
|
||||
meta = {
|
||||
meta = with lib; {
|
||||
description = "Reverse-Engineering Tools SYNChronization. Allows syncing between a debugging session and Ghidra";
|
||||
homepage = "https://github.com/bootleg/ret-sync";
|
||||
license = lib.licenses.gpl3Only;
|
||||
license = licenses.gpl3Only;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ buildGhidraExtension {
|
|||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
meta = with lib; {
|
||||
inherit (ghidra.meta) homepage license;
|
||||
description = "Sleigh language development tools including external disassembler capabilities";
|
||||
longDescription = ''
|
||||
|
|
@ -33,7 +33,7 @@ buildGhidraExtension {
|
|||
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 lib.sourceTypes; [
|
||||
sourceProvenance = with sourceTypes; [
|
||||
fromSource
|
||||
binaryBytecode # deps
|
||||
];
|
||||
|
|
|
|||
|
|
@ -5,15 +5,18 @@
|
|||
ghidra,
|
||||
ant,
|
||||
}:
|
||||
buildGhidraExtension (finalAttrs: {
|
||||
let
|
||||
version = "2.3.1";
|
||||
in
|
||||
buildGhidraExtension {
|
||||
pname = "wasm";
|
||||
version = "2.3.2";
|
||||
inherit version;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nneonneo";
|
||||
repo = "ghidra-wasm-plugin";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-JFUPhh4WUcfxYow3kLMyva1Ni/cQBIit983o/KbbKps=";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-aoSMNzv+TgydiXM4CbvAyu/YsxmdZPvpkZkYEE3C+V4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ ant ];
|
||||
|
|
@ -32,9 +35,9 @@ buildGhidraExtension (finalAttrs: {
|
|||
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${finalAttrs.version}";
|
||||
changelog = "https://github.com/nneonneo/ghidra-wasm-plugin/releases/tag/v${finalAttrs.version}";
|
||||
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 ];
|
||||
};
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
lib,
|
||||
python,
|
||||
buildPythonPackage,
|
||||
|
||||
ghidra,
|
||||
|
||||
setuptools,
|
||||
|
||||
psutil,
|
||||
ghidratrace,
|
||||
}: buildPythonPackage {
|
||||
pname = "ghidragdb";
|
||||
version = "11.3";
|
||||
pyproject = true;
|
||||
|
||||
src = "${ghidra.lib}/lib/ghidra/Ghidra/Debug/Debugger-agent-gdb/pypkg";
|
||||
|
||||
postPatch = ''
|
||||
rm -rf dist
|
||||
'';
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
ghidratrace
|
||||
psutil
|
||||
];
|
||||
|
||||
# can't import because gdb is missing
|
||||
# pythonImportsCheck = [
|
||||
# "ghidragdb"
|
||||
# ];
|
||||
|
||||
meta = (lib.removeAttrs ghidra.meta ["description" "mainProgram"]) // {
|
||||
description = "Ghidra's Plugin for gdb";
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
lib,
|
||||
python,
|
||||
buildPythonPackage,
|
||||
|
||||
ghidra,
|
||||
|
||||
setuptools,
|
||||
|
||||
psutil,
|
||||
ghidratrace,
|
||||
}: buildPythonPackage {
|
||||
pname = "ghidralldb";
|
||||
version = "11.3";
|
||||
pyproject = true;
|
||||
|
||||
src = "${ghidra.lib}/lib/ghidra/Ghidra/Debug/Debugger-agent-lldb/pypkg";
|
||||
|
||||
postPatch = ''
|
||||
rm -rf dist
|
||||
'';
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
ghidratrace
|
||||
psutil
|
||||
];
|
||||
|
||||
# can't import because lldb is missing
|
||||
# pythonImportsCheck = [
|
||||
# "ghidralldb"
|
||||
# ];
|
||||
|
||||
meta = (lib.removeAttrs ghidra.meta ["description" "mainProgram"]) // {
|
||||
description = "Ghidra's Plugin for lldb";
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
lib,
|
||||
python,
|
||||
buildPythonPackage,
|
||||
pythonRelaxDepsHook,
|
||||
|
||||
ghidra,
|
||||
|
||||
setuptools,
|
||||
|
||||
protobuf,
|
||||
}: buildPythonPackage {
|
||||
pname = "ghidratrace";
|
||||
version = "11.3";
|
||||
pyproject = true;
|
||||
|
||||
src = "${ghidra.lib}/lib/ghidra/Ghidra/Debug/Debugger-rmi-trace/pypkg";
|
||||
|
||||
postPatch = ''
|
||||
rm -rf dist
|
||||
'';
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
protobuf
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
pythonRelaxDepsHook
|
||||
];
|
||||
|
||||
pythonRelaxDeps = [
|
||||
"protobuf"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [
|
||||
"ghidratrace"
|
||||
];
|
||||
|
||||
meta = (lib.removeAttrs ghidra.meta ["description" "mainProgram"]) // {
|
||||
description = "Ghidra's TraceRmi for Python3";
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
lib,
|
||||
python,
|
||||
buildPythonPackage,
|
||||
|
||||
ghidra,
|
||||
|
||||
setuptools,
|
||||
|
||||
jpype1,
|
||||
}: buildPythonPackage {
|
||||
pname = "pyghidra";
|
||||
version = "2.1.0";
|
||||
pyproject = true;
|
||||
|
||||
src = "${ghidra.lib}/lib/ghidra/Ghidra/Features/PyGhidra/pypkg";
|
||||
|
||||
# TODO: make a more involved wrapper or patch this package to change the launch system
|
||||
# TODO: support launching a ghidra-with-extensions package
|
||||
makeWrapperArgs = [
|
||||
"--set" "GHIDRA_INSTALL_DIR" "${ghidra.lib}/lib/ghidra"
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
rm -rf dist
|
||||
'';
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
jpype1
|
||||
];
|
||||
|
||||
pythonImportsCheck = [
|
||||
"pyghidra"
|
||||
];
|
||||
|
||||
meta = (lib.removeAttrs ghidra.meta ["description" "mainProgram"]) // {
|
||||
description = "Native CPython for Ghidra";
|
||||
};
|
||||
}
|
||||
|
|
@ -29,10 +29,8 @@ let
|
|||
nativeBuildInputs = [
|
||||
makeBinaryWrapper
|
||||
] ++ lib.optional stdenv.hostPlatform.isDarwin desktopToDarwinBundle;
|
||||
postBuild = ''
|
||||
# Prevent attempted creation of plugin lock files in the Nix store.
|
||||
touch $out/lib/ghidra/Ghidra/.dbDirLock
|
||||
|
||||
postBuild =
|
||||
''
|
||||
makeWrapper '${ghidra}/bin/ghidra' "$out/bin/ghidra" \
|
||||
--set NIX_GHIDRAHOME "$out/lib/ghidra/Ghidra"
|
||||
makeWrapper '${ghidra}/bin/ghidra-analyzeHeadless' "$out/bin/ghidra-analyzeHeadless" \
|
||||
|
|
|
|||
|
|
@ -173,12 +173,12 @@ in stdenv.mkDerivation (self: {
|
|||
inherit pythonEnv;
|
||||
};
|
||||
|
||||
meta = {
|
||||
meta = with lib; {
|
||||
description = "A powerful disassembler, decompiler and a versatile debugger.";
|
||||
homepage = "https://hex-rays.com/ida-pro";
|
||||
mainProgram = "ida";
|
||||
platforms = [ "x86_64-linux" ];
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||
license = lib.licenses.unfree;
|
||||
};
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,493 +0,0 @@
|
|||
From 208a9c9b5d771c92df79cf32aabb5a1315dec56b Mon Sep 17 00:00:00 2001
|
||||
From: xenia <xenia@awoo.systems>
|
||||
Date: Wed, 24 Dec 2025 16:25:47 -0500
|
||||
Subject: [PATCH] make the minimum scrobble length shorter
|
||||
|
||||
---
|
||||
src/playlist/playlist.cpp | 2 +-
|
||||
src/settings/scrobblersettingspage.ui | 2 +-
|
||||
src/translations/strawberry_ca_ES.ts | 4 ++--
|
||||
src/translations/strawberry_cs_CZ.ts | 4 ++--
|
||||
src/translations/strawberry_de_DE.ts | 2 +-
|
||||
src/translations/strawberry_el_CY.ts | 4 ++--
|
||||
src/translations/strawberry_el_GR.ts | 4 ++--
|
||||
src/translations/strawberry_en_US.ts | 2 +-
|
||||
src/translations/strawberry_es_AR.ts | 2 +-
|
||||
src/translations/strawberry_es_ES.ts | 2 +-
|
||||
src/translations/strawberry_es_MX.ts | 2 +-
|
||||
src/translations/strawberry_et_EE.ts | 2 +-
|
||||
src/translations/strawberry_fi_FI.ts | 4 ++--
|
||||
src/translations/strawberry_fr_BE.ts | 2 +-
|
||||
src/translations/strawberry_fr_FR.ts | 2 +-
|
||||
src/translations/strawberry_hu_HU.ts | 2 +-
|
||||
src/translations/strawberry_id_ID.ts | 2 +-
|
||||
src/translations/strawberry_is_IS.ts | 2 +-
|
||||
src/translations/strawberry_it_IT.ts | 2 +-
|
||||
src/translations/strawberry_ja_JP.ts | 2 +-
|
||||
src/translations/strawberry_ko_KR.ts | 2 +-
|
||||
src/translations/strawberry_nb_NO.ts | 2 +-
|
||||
src/translations/strawberry_nl_NL.ts | 4 ++--
|
||||
src/translations/strawberry_pl_PL.ts | 2 +-
|
||||
src/translations/strawberry_pt_BR.ts | 4 ++--
|
||||
src/translations/strawberry_ru_RU.ts | 2 +-
|
||||
src/translations/strawberry_sv_SE.ts | 2 +-
|
||||
src/translations/strawberry_tr_CY.ts | 4 ++--
|
||||
src/translations/strawberry_tr_TR.ts | 4 ++--
|
||||
src/translations/strawberry_uk_UA.ts | 2 +-
|
||||
src/translations/strawberry_vi_VN.ts | 2 +-
|
||||
src/translations/strawberry_zh_CN.ts | 2 +-
|
||||
src/translations/strawberry_zh_TW.ts | 4 ++--
|
||||
33 files changed, 43 insertions(+), 43 deletions(-)
|
||||
|
||||
diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp
|
||||
index 5b95d2bd..c823f7df 100644
|
||||
--- a/src/playlist/playlist.cpp
|
||||
+++ b/src/playlist/playlist.cpp
|
||||
@@ -117,7 +117,7 @@ constexpr QRgb kInvalidSongColor = qRgb(0xC0, 0xC0, 0xC0);
|
||||
constexpr int kDynamicHistoryPriority = 100;
|
||||
constexpr QRgb kDynamicHistoryColor = qRgb(0x80, 0x80, 0x80);
|
||||
|
||||
-constexpr qint64 kMinScrobblePointNsecs = 31LL * kNsecPerSec;
|
||||
+constexpr qint64 kMinScrobblePointNsecs = 16LL * kNsecPerSec;
|
||||
constexpr qint64 kMaxScrobblePointNsecs = 240LL * kNsecPerSec;
|
||||
|
||||
constexpr int kMaxPlayedIndexes = 100;
|
||||
diff --git a/src/settings/scrobblersettingspage.ui b/src/settings/scrobblersettingspage.ui
|
||||
index 0b0606c4..3848c743 100644
|
||||
--- a/src/settings/scrobblersettingspage.ui
|
||||
+++ b/src/settings/scrobblersettingspage.ui
|
||||
@@ -30,7 +30,7 @@
|
||||
<item>
|
||||
<widget class="QLabel" name="label_scrobble_info">
|
||||
<property name="text">
|
||||
- <string>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</string>
|
||||
+ <string>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
diff --git a/src/translations/strawberry_ca_ES.ts b/src/translations/strawberry_ca_ES.ts
|
||||
index 08fa29d0..672687e1 100644
|
||||
--- a/src/translations/strawberry_ca_ES.ts
|
||||
+++ b/src/translations/strawberry_ca_ES.ts
|
||||
@@ -5702,8 +5702,8 @@ Esteu segur que voleu continuar?</translation>
|
||||
<translation type="unfinished">Enable</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
- <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show scrobble button</source>
|
||||
diff --git a/src/translations/strawberry_cs_CZ.ts b/src/translations/strawberry_cs_CZ.ts
|
||||
index 3a31995c..fb88f8ca 100644
|
||||
--- a/src/translations/strawberry_cs_CZ.ts
|
||||
+++ b/src/translations/strawberry_cs_CZ.ts
|
||||
@@ -5712,8 +5712,8 @@ Opravdu chcete pokračovat?</translation>
|
||||
<translation>Povolit</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
- <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show scrobble button</source>
|
||||
diff --git a/src/translations/strawberry_de_DE.ts b/src/translations/strawberry_de_DE.ts
|
||||
index 3254eafa..221cd984 100644
|
||||
--- a/src/translations/strawberry_de_DE.ts
|
||||
+++ b/src/translations/strawberry_de_DE.ts
|
||||
@@ -5702,7 +5702,7 @@ Möchten Sie wirklich fortfahren?</translation>
|
||||
<translation>Aktivieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Lieder werden gescrobbelt, wenn sie gültige Metadaten haben und länger als 30 Sekunden sind, mindestens die Hälfte ihrer Dauer oder 4 Minuten (je nachdem, was früher eintritt) abgespielt wurden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_el_CY.ts b/src/translations/strawberry_el_CY.ts
|
||||
index 436137b1..7f6130bb 100644
|
||||
--- a/src/translations/strawberry_el_CY.ts
|
||||
+++ b/src/translations/strawberry_el_CY.ts
|
||||
@@ -5702,8 +5702,8 @@ Are you sure you want to continue?</translation>
|
||||
<translation type="unfinished">Enable</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
- <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show scrobble button</source>
|
||||
diff --git a/src/translations/strawberry_el_GR.ts b/src/translations/strawberry_el_GR.ts
|
||||
index c825f932..a966220c 100644
|
||||
--- a/src/translations/strawberry_el_GR.ts
|
||||
+++ b/src/translations/strawberry_el_GR.ts
|
||||
@@ -5702,8 +5702,8 @@ Are you sure you want to continue?</source>
|
||||
<translation>Ενεργοποίηση</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
- <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show scrobble button</source>
|
||||
diff --git a/src/translations/strawberry_en_US.ts b/src/translations/strawberry_en_US.ts
|
||||
index 8e08cc97..a1c387e8 100644
|
||||
--- a/src/translations/strawberry_en_US.ts
|
||||
+++ b/src/translations/strawberry_en_US.ts
|
||||
@@ -5698,7 +5698,7 @@ Are you sure you want to continue?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_es_AR.ts b/src/translations/strawberry_es_AR.ts
|
||||
index 3ee6ea55..5f4dc1f5 100644
|
||||
--- a/src/translations/strawberry_es_AR.ts
|
||||
+++ b/src/translations/strawberry_es_AR.ts
|
||||
@@ -5701,7 +5701,7 @@ Are you sure you want to continue?</source>
|
||||
<translation>Activar</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>La reproducción de una canción es registrada solo si dispone de metadatos válidos, dura más de 30 segundos y se ha reproducido al menos durante la mitad de su duración o 4 minutos (lo que ocurra primero).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_es_ES.ts b/src/translations/strawberry_es_ES.ts
|
||||
index 66e7881a..e766f973 100644
|
||||
--- a/src/translations/strawberry_es_ES.ts
|
||||
+++ b/src/translations/strawberry_es_ES.ts
|
||||
@@ -5701,7 +5701,7 @@ Are you sure you want to continue?</source>
|
||||
<translation>Activar</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>La reproducción de un tema se registra solo si dispone de metadatos válidos, dura más de 30 segundos y se ha reproducido al menos durante la mitad de su duración o 4 minutos (lo que ocurra primero).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_es_MX.ts b/src/translations/strawberry_es_MX.ts
|
||||
index 15128cb0..0a670041 100644
|
||||
--- a/src/translations/strawberry_es_MX.ts
|
||||
+++ b/src/translations/strawberry_es_MX.ts
|
||||
@@ -5701,7 +5701,7 @@ Are you sure you want to continue?</source>
|
||||
<translation>Activar</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>La reproducción de una canción es registrada solo si dispone de metadatos válidos, dura más de 30 segundos y se ha reproducido al menos durante la mitad de su duración o 4 minutos (lo que ocurra primero).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_et_EE.ts b/src/translations/strawberry_et_EE.ts
|
||||
index db45d2b5..29709722 100644
|
||||
--- a/src/translations/strawberry_et_EE.ts
|
||||
+++ b/src/translations/strawberry_et_EE.ts
|
||||
@@ -5702,7 +5702,7 @@ Kas soovid jätkata?</translation>
|
||||
<translation>Luba</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Lood kraasitakse, kui neil on kehtivad metaandmed ja need on pikemad kui 30 sekundit, neid on esitatud vähemalt pool kestusest või 4 minutit (olenevalt sellest, kumb saabub varem).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_fi_FI.ts b/src/translations/strawberry_fi_FI.ts
|
||||
index d9480396..74127dc2 100644
|
||||
--- a/src/translations/strawberry_fi_FI.ts
|
||||
+++ b/src/translations/strawberry_fi_FI.ts
|
||||
@@ -5702,8 +5702,8 @@ Haluatko varmasti jatkaa?</translation>
|
||||
<translation>Ota käyttöön</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
- <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show scrobble button</source>
|
||||
diff --git a/src/translations/strawberry_fr_BE.ts b/src/translations/strawberry_fr_BE.ts
|
||||
index 2e4db5af..9ddfb22b 100644
|
||||
--- a/src/translations/strawberry_fr_BE.ts
|
||||
+++ b/src/translations/strawberry_fr_BE.ts
|
||||
@@ -5702,7 +5702,7 @@ Are you sure you want to continue?</source>
|
||||
<translation>Activer</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Les musiques sont scrobblées si leurs métadonnées sont valides et n'ont pas plus de 30 secondes, ont été jouées pour un minimum de leur moitiés de leur longueur ou plus de 4 minutes (la première des conditions qui est vérifiée).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_fr_FR.ts b/src/translations/strawberry_fr_FR.ts
|
||||
index efc76390..d8342595 100644
|
||||
--- a/src/translations/strawberry_fr_FR.ts
|
||||
+++ b/src/translations/strawberry_fr_FR.ts
|
||||
@@ -5702,7 +5702,7 @@ Are you sure you want to continue?</source>
|
||||
<translation>Activer</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Les musiques sont scrobblées si leurs métadonnées sont valides et n'ont pas plus de 30 secondes, ont été jouées pour un minimum de leur moitiés de leur longueur ou plus de 4 minutes (la première des conditions qui est vérifiée).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_hu_HU.ts b/src/translations/strawberry_hu_HU.ts
|
||||
index 25225a06..f2050f6d 100644
|
||||
--- a/src/translations/strawberry_hu_HU.ts
|
||||
+++ b/src/translations/strawberry_hu_HU.ts
|
||||
@@ -5702,7 +5702,7 @@ Biztos, hogy folytatja?</translation>
|
||||
<translation>Engedélyezés</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>A számok akkor lesznek scrobble-ozva, ha érvényes metaadataik vannak, 30
|
||||
másodpercnél hosszabbak, illetve legalább a felükig vagy 4 percig vannak lejátszva (amelyik korábban teljesül).</translation>
|
||||
</message>
|
||||
diff --git a/src/translations/strawberry_id_ID.ts b/src/translations/strawberry_id_ID.ts
|
||||
index 02371af3..1a82f28a 100644
|
||||
--- a/src/translations/strawberry_id_ID.ts
|
||||
+++ b/src/translations/strawberry_id_ID.ts
|
||||
@@ -5697,7 +5697,7 @@ Apakah Anda yakin ingin melanjutkan?</translation>
|
||||
<translation>Fungsikan</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Lagu akan di-scrobble jika memiliki metadata yang benar dan lebih panjang dari 30 detik, sudah berputar setidaknya setengah dari durasinya atau 4 menit (yang mana terdahulu terjadi).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_is_IS.ts b/src/translations/strawberry_is_IS.ts
|
||||
index 0223dac1..f7ce4bd6 100644
|
||||
--- a/src/translations/strawberry_is_IS.ts
|
||||
+++ b/src/translations/strawberry_is_IS.ts
|
||||
@@ -5702,7 +5702,7 @@ Ertu viss um að þú viljir halda áfram?</translation>
|
||||
<translation>Virkja</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Skráðar eru hlustunarvenjur laga (scrobbling) ef þau eru með gild lýsigögn og eru lengri en 30 sekúndur, hafa verið spiluð að minnsta kosti til hálfs eða í 4 mínútur (hvort sem fyrr gerist).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_it_IT.ts b/src/translations/strawberry_it_IT.ts
|
||||
index 57a0d812..683a388c 100644
|
||||
--- a/src/translations/strawberry_it_IT.ts
|
||||
+++ b/src/translations/strawberry_it_IT.ts
|
||||
@@ -5710,7 +5710,7 @@ Non possiamo aiutarti a procurarteli.</translation>
|
||||
<translation>Abilita</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>I brani vengono inviate per lo scrobble se hanno dei metadata validi, durano più di 30 secondi e sono state riprodotti per almeno la metà della loro lunghezza totale o per 4 minuti (qualsiasi dei quali avvenga prima)</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_ja_JP.ts b/src/translations/strawberry_ja_JP.ts
|
||||
index 8573ff85..f307e194 100644
|
||||
--- a/src/translations/strawberry_ja_JP.ts
|
||||
+++ b/src/translations/strawberry_ja_JP.ts
|
||||
@@ -5697,7 +5697,7 @@ Are you sure you want to continue?</source>
|
||||
<translation>有効</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>有効なメタデータで30秒以上ある曲で、再生時間が少なくとも半分または4分間(どちらか早い方)になると、曲は Scrobble されます。</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_ko_KR.ts b/src/translations/strawberry_ko_KR.ts
|
||||
index 1dae09d4..b83c151a 100644
|
||||
--- a/src/translations/strawberry_ko_KR.ts
|
||||
+++ b/src/translations/strawberry_ko_KR.ts
|
||||
@@ -5697,7 +5697,7 @@ Are you sure you want to continue?</source>
|
||||
<translation>활성화</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>곡에 올바른 메타데이터가 있고, 재생 시간이 30초보다 길고, 재생 시간의 절반 이상 재생(최대 4분)되었을 때 스크로블 기록에 추가됩니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_nb_NO.ts b/src/translations/strawberry_nb_NO.ts
|
||||
index f73e8b43..dcb93fb6 100644
|
||||
--- a/src/translations/strawberry_nb_NO.ts
|
||||
+++ b/src/translations/strawberry_nb_NO.ts
|
||||
@@ -5702,7 +5702,7 @@ Er du sikker?</translation>
|
||||
<translation>Aktiver</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Sanger blir scrobblet når de har gyldig metadata, er lengre enn 30 seconds, og har blitt spilt for minst halve tiden, eller 30 sekunder (det som skjer tidligst).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_nl_NL.ts b/src/translations/strawberry_nl_NL.ts
|
||||
index e24a97ee..df12582e 100644
|
||||
--- a/src/translations/strawberry_nl_NL.ts
|
||||
+++ b/src/translations/strawberry_nl_NL.ts
|
||||
@@ -5702,8 +5702,8 @@ Weet je zeker dat je verder wilt gaan?</translation>
|
||||
<translation>Ingeschakeld</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
- <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show scrobble button</source>
|
||||
diff --git a/src/translations/strawberry_pl_PL.ts b/src/translations/strawberry_pl_PL.ts
|
||||
index 06196ef2..acfb3949 100644
|
||||
--- a/src/translations/strawberry_pl_PL.ts
|
||||
+++ b/src/translations/strawberry_pl_PL.ts
|
||||
@@ -5714,7 +5714,7 @@ Na pewno chcesz usunąć?</translation>
|
||||
<translation>Włącz</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Utwory są scrobblowane, jeśli mają poprawne metadane, są dłuższe niż 30 sekund oraz były odtwarzane przez przynajmniej połowę swojej długości lub przez 4 minuty.</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_pt_BR.ts b/src/translations/strawberry_pt_BR.ts
|
||||
index ca786c8a..742df605 100644
|
||||
--- a/src/translations/strawberry_pt_BR.ts
|
||||
+++ b/src/translations/strawberry_pt_BR.ts
|
||||
@@ -5702,8 +5702,8 @@ Deseja continuar?</translation>
|
||||
<translation>Habilitar</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
- <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show scrobble button</source>
|
||||
diff --git a/src/translations/strawberry_ru_RU.ts b/src/translations/strawberry_ru_RU.ts
|
||||
index 7e0af15b..79c0e52e 100644
|
||||
--- a/src/translations/strawberry_ru_RU.ts
|
||||
+++ b/src/translations/strawberry_ru_RU.ts
|
||||
@@ -5712,7 +5712,7 @@ Are you sure you want to continue?</source>
|
||||
<translation>Включить</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Песни скробблятся, если они содержат допустимые метаданные, длятся более 30 секунд и воспроизводятся не менее половины своей длительности или в течение 4 минут (в зависимости от того, что произойдёт раньше).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_sv_SE.ts b/src/translations/strawberry_sv_SE.ts
|
||||
index d255a6aa..9fc5b773 100644
|
||||
--- a/src/translations/strawberry_sv_SE.ts
|
||||
+++ b/src/translations/strawberry_sv_SE.ts
|
||||
@@ -5702,7 +5702,7 @@ Are you sure you want to continue?</source>
|
||||
<translation>Aktivera</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Låtar skrobblas om de har giltiga metadata och är längre än 30 sekunder, har spelats under minst halva dess varaktighet eller i 4 minuter (beroende på vilket som inträffar först).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_tr_CY.ts b/src/translations/strawberry_tr_CY.ts
|
||||
index 18153843..d2213129 100644
|
||||
--- a/src/translations/strawberry_tr_CY.ts
|
||||
+++ b/src/translations/strawberry_tr_CY.ts
|
||||
@@ -5702,8 +5702,8 @@ Are you sure you want to continue?</translation>
|
||||
<translation type="unfinished">Enable</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
- <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show scrobble button</source>
|
||||
diff --git a/src/translations/strawberry_tr_TR.ts b/src/translations/strawberry_tr_TR.ts
|
||||
index 2a9ffa1a..0a0ec467 100644
|
||||
--- a/src/translations/strawberry_tr_TR.ts
|
||||
+++ b/src/translations/strawberry_tr_TR.ts
|
||||
@@ -5702,8 +5702,8 @@ Devam etmek istediğinizden emin misiniz?</translation>
|
||||
<translation>Etkinleştir</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
- <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show scrobble button</source>
|
||||
diff --git a/src/translations/strawberry_uk_UA.ts b/src/translations/strawberry_uk_UA.ts
|
||||
index 6f93fa33..a72361ff 100644
|
||||
--- a/src/translations/strawberry_uk_UA.ts
|
||||
+++ b/src/translations/strawberry_uk_UA.ts
|
||||
@@ -5712,7 +5712,7 @@ Are you sure you want to continue?</source>
|
||||
<translation>Увімкнути</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Композиції скроблюються, якщо вони мають дійсні метадані, мають тривалість більше 30 секунд та відтворюються щонайменше половину тривалості або 4 хвилини (залежно від того, що станеться раніше).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_vi_VN.ts b/src/translations/strawberry_vi_VN.ts
|
||||
index 4a6c0602..d16c1116 100644
|
||||
--- a/src/translations/strawberry_vi_VN.ts
|
||||
+++ b/src/translations/strawberry_vi_VN.ts
|
||||
@@ -5697,7 +5697,7 @@ Bạn có chắc chắn muốn tiếp tục không?</translation>
|
||||
<translation>Bật</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>Các bài sẽ được scrobble nếu có siêu dữ liệu hợp lệ và dài hơn 30 giây, đã phát ít nhất một nửa thời lượng hoặc 4 phút (cái nào xảy ra trước).</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_zh_CN.ts b/src/translations/strawberry_zh_CN.ts
|
||||
index dac45b7e..16d97460 100644
|
||||
--- a/src/translations/strawberry_zh_CN.ts
|
||||
+++ b/src/translations/strawberry_zh_CN.ts
|
||||
@@ -5697,7 +5697,7 @@ Are you sure you want to continue?</source>
|
||||
<translation>启用</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
<translation>如果歌曲具有有效的元数据并且长度超过 30 秒,播放时间至少为其持续时间的一半或 4 分钟(以先发生者为准),则会被记录。</translation>
|
||||
</message>
|
||||
<message>
|
||||
diff --git a/src/translations/strawberry_zh_TW.ts b/src/translations/strawberry_zh_TW.ts
|
||||
index e585c084..673fe142 100644
|
||||
--- a/src/translations/strawberry_zh_TW.ts
|
||||
+++ b/src/translations/strawberry_zh_TW.ts
|
||||
@@ -5698,8 +5698,8 @@ Are you sure you want to continue?</translation>
|
||||
<translation type="unfinished">Enable</translation>
|
||||
</message>
|
||||
<message>
|
||||
- <source>Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
- <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 30 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
+ <source>Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</source>
|
||||
+ <translation type="unfinished">Songs are scrobbled if they have valid metadata and are longer than 15 seconds, have been playing for at least half its duration or for 4 minutes (whichever occurs earlier).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show scrobble button</source>
|
||||
--
|
||||
2.51.2
|
||||
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
lib,
|
||||
buildDotnetModule,
|
||||
fetchFromGitHub,
|
||||
dotnetCorePackages,
|
||||
}:
|
||||
|
||||
buildDotnetModule rec {
|
||||
pname = "depotdownloader";
|
||||
version = "3.4.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "SteamRE";
|
||||
repo = "DepotDownloader";
|
||||
rev = "DepotDownloader_${version}";
|
||||
hash = "sha256-zduNWIQi+ItNSh9RfRfY0giIw/tMQIMRh9woUzQ5pJw=";
|
||||
};
|
||||
|
||||
projectFile = "DepotDownloader.sln";
|
||||
nugetDeps = ./deps.json;
|
||||
dotnet-sdk = dotnetCorePackages.sdk_9_0;
|
||||
dotnet-runtime = dotnetCorePackages.runtime_9_0;
|
||||
|
||||
passthru.updateScript = ./update.sh;
|
||||
|
||||
meta = {
|
||||
description = "Steam depot downloader utilizing the SteamKit2 library";
|
||||
changelog = "https://github.com/SteamRE/DepotDownloader/releases/tag/DepotDownloader_${version}";
|
||||
license = lib.licenses.gpl2Only;
|
||||
maintainers = [ lib.maintainers.babbaj ];
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
mainProgram = "DepotDownloader";
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
[
|
||||
{
|
||||
"pname": "Microsoft.NETCore.Platforms",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-LIcg1StDcQLPOABp4JRXIs837d7z0ia6+++3SF3jl1c="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Win32.Registry",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-9kylPGfKZc58yFqNKa77stomcoNnMeERXozWJzDcUIA="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Windows.CsWin32",
|
||||
"version": "0.3.183",
|
||||
"hash": "sha256-bn0rHYoVLRTqiZqkkp6u3PMKtg0NNxA2F++1e/+3Jhw="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Windows.SDK.Win32Docs",
|
||||
"version": "0.1.42-alpha",
|
||||
"hash": "sha256-6DvzmNzrGVfWmNJNqooj+Ya+7bAQlyeg7pmyKaUlIws="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Windows.SDK.Win32Metadata",
|
||||
"version": "61.0.15-preview",
|
||||
"hash": "sha256-OB60ThIv8e7AMGaRRzJ8dWme5HjN+Q0HoUDquP2ejTg="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Windows.WDK.Win32Metadata",
|
||||
"version": "0.12.8-experimental",
|
||||
"hash": "sha256-YaN6JlgnpIooLYu3NdFVHwoqFwZYTeePtekXCfTiLTo="
|
||||
},
|
||||
{
|
||||
"pname": "protobuf-net",
|
||||
"version": "3.2.52",
|
||||
"hash": "sha256-phXeroBt5KbHYkApkkMa0mRCVkDY+dtOOXXNY+i50Ek="
|
||||
},
|
||||
{
|
||||
"pname": "protobuf-net.Core",
|
||||
"version": "3.2.52",
|
||||
"hash": "sha256-/9Jj26tuSKeYJb9udwew5i5EVvaoeNu/vBCKS0VhSQQ="
|
||||
},
|
||||
{
|
||||
"pname": "QRCoder",
|
||||
"version": "1.6.0",
|
||||
"hash": "sha256-2Ev/6d7PH6K4dVYQQHlZ+ZggkCnDtrlaGygs65mDo28="
|
||||
},
|
||||
{
|
||||
"pname": "SteamKit2",
|
||||
"version": "3.2.0",
|
||||
"hash": "sha256-hB/36fP9kf+1mIx+hTELUMHe8ZkmSKxOK41ZzOaBa3E="
|
||||
},
|
||||
{
|
||||
"pname": "System.IO.Hashing",
|
||||
"version": "9.0.4",
|
||||
"hash": "sha256-rbcQzEncB3VuUZIcsE1tq30suf5rvRE4HkE+0lR/skU="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.AccessControl",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-ueSG+Yn82evxyGBnE49N4D+ngODDXgornlBtQ3Omw54="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Principal.Windows",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-CBOQwl9veFkrKK2oU8JFFEiKIh/p+aJO+q9Tc2Q/89Y="
|
||||
},
|
||||
{
|
||||
"pname": "ZstdSharp.Port",
|
||||
"version": "0.8.5",
|
||||
"hash": "sha256-+UQFeU64md0LlSf9nMXif6hHnfYEKm+WRyYd0Vo2QvI="
|
||||
}
|
||||
]
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
lib,
|
||||
fetchFromGitea,
|
||||
writeShellScript,
|
||||
writableTmpDirAsHomeHook,
|
||||
|
|
@ -92,16 +91,4 @@ in stdenvNoCC.mkDerivation rec {
|
|||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "A LaTeX Beamer theme, forked from the metropolis theme (with dragon patches) ";
|
||||
longDescription = ''
|
||||
This package cannot be installed or used directly. Please use `texlive.withPackages (ps: [ ps.${lib.strings.escapeNixIdentifier pname} ])`.
|
||||
'';
|
||||
homepage = "https://git.lain.faith/haskal/moloch-dragon";
|
||||
outputsToInstall = [ ];
|
||||
priority = 10;
|
||||
platforms = lib.platforms.all;
|
||||
license = lib.licenses.cc-by-sa-40;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,17 +7,13 @@ rec {
|
|||
dragnpkgs-unstable = getFlake "dragnpkgs-unstable";
|
||||
pkgs = dragnpkgs.legacyPackages.${currentSystem};
|
||||
pkgs-unstable = dragnpkgs-unstable.legacyPackages.${currentSystem};
|
||||
lib =
|
||||
if prev ? lib then
|
||||
prev.lib
|
||||
else
|
||||
pkgs.lib;
|
||||
inherit (pkgs) lib;
|
||||
|
||||
f = getFlake "git+file:${builtins.getEnv "PWD"}";
|
||||
fp =
|
||||
if final ? legacyPackages then
|
||||
final.legacyPackages.${currentSystem}
|
||||
if (builtins.hasAttr "legacyPackages" f) then
|
||||
f.legacyPackages.${currentSystem}
|
||||
else
|
||||
final.packages.${currentSystem};
|
||||
flp = final.legacyPackages.${currentSystem};
|
||||
fs = final.devShells.${currentSystem};
|
||||
f.packages.${currentSystem};
|
||||
fs = f.devShells.${currentSystem};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,19 +3,20 @@
|
|||
|
||||
outputs = { self, dragnpkgs } @ inputs: dragnpkgs.lib.mkFlake {
|
||||
# Define a texlive environment to use
|
||||
packages.texlive-custom = { texliveDragonPackages }:
|
||||
texliveDragonPackages.scheme.withPackages (ps: with ps; [
|
||||
# add more texlive dependencies here
|
||||
packages.texlive-custom = { texliveMedium, texliveDragonPackages }:
|
||||
texliveMedium.withPackages (ps: with ps; [
|
||||
fontawesome5
|
||||
texliveDragonPackages.moloch
|
||||
]);
|
||||
|
||||
# Package definition for building the PDF
|
||||
packages.default = { stdenv }: stdenv.mkDerivation rec {
|
||||
packages.default = { system, stdenvNoCC }: stdenvNoCC.mkDerivation rec {
|
||||
pname = "my-beamer-presentation";
|
||||
|
||||
name = "${pname}.pdf";
|
||||
|
||||
nativeBuildInputs = [
|
||||
self.packages.${stdenv.hostPlatform.system}.texlive-custom
|
||||
self.packages.${system}.texlive-custom
|
||||
];
|
||||
|
||||
src = self;
|
||||
|
|
@ -30,16 +31,16 @@
|
|||
};
|
||||
|
||||
# Runnable package (ie `nix run`) to start the presentation
|
||||
apps.default = { lib, stdenv, writeShellScript, pympress }: {
|
||||
apps.default = { lib, system, writeShellScript, pympress }: {
|
||||
type = "app";
|
||||
program = "${writeShellScript "start-presentation" ''
|
||||
exec ${lib.getExe pympress} ${self.packages.${stdenv.hostPlatform.system}.default}
|
||||
exec ${lib.getExe pympress} ${self.packages.${system}.default}
|
||||
''}";
|
||||
};
|
||||
|
||||
# Devshell definition to expose the texlive environment to eg nvim
|
||||
devShells.default = { mkShell, stdenv }: mkShell {
|
||||
packages = [ self.packages.${stdenv.hostPlatform.system}.texlive-custom ];
|
||||
devShells.default = { mkShell, system }: mkShell {
|
||||
packages = [ self.packages.${system}.texlive-custom ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue