Compare commits
2 Commits
2a52ce3a7f
...
023bd6005b
Author | SHA1 | Date |
---|---|---|
|
023bd6005b | |
|
4282931f7a |
|
@ -12,6 +12,7 @@
|
||||||
"tetheredInstallation"
|
"tetheredInstallation"
|
||||||
"doMainSetup"
|
"doMainSetup"
|
||||||
"buildDocs"
|
"buildDocs"
|
||||||
|
"gitSubpath"
|
||||||
];
|
];
|
||||||
extendDrvArgs = finalAttrs:
|
extendDrvArgs = finalAttrs:
|
||||||
{
|
{
|
||||||
|
@ -25,6 +26,7 @@
|
||||||
tetheredInstallation ? false,
|
tetheredInstallation ? false,
|
||||||
doMainSetup ? tetheredInstallation,
|
doMainSetup ? tetheredInstallation,
|
||||||
buildDocs ? tetheredInstallation,
|
buildDocs ? tetheredInstallation,
|
||||||
|
gitSubpath ? ".",
|
||||||
...
|
...
|
||||||
} @ attrs: {
|
} @ attrs: {
|
||||||
name = "racket${racket.version}-" + pname + "-" + version;
|
name = "racket${racket.version}-" + pname + "-" + version;
|
||||||
|
@ -37,6 +39,7 @@
|
||||||
racketTetheredInstallation = tetheredInstallation;
|
racketTetheredInstallation = tetheredInstallation;
|
||||||
racketDoMainSetup = doMainSetup;
|
racketDoMainSetup = doMainSetup;
|
||||||
racketBuildDocs = buildDocs;
|
racketBuildDocs = buildDocs;
|
||||||
|
racketGitSubpath = gitSubpath;
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
racket
|
racket
|
||||||
|
@ -56,6 +59,15 @@
|
||||||
wrapGApp "$f"
|
wrapGApp "$f"
|
||||||
fi
|
fi
|
||||||
done
|
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
|
||||||
|
'');
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
83
overlay.nix
83
overlay.nix
|
@ -1,74 +1,27 @@
|
||||||
final: prev: {
|
final: prev: let
|
||||||
|
names = builtins.readDir ./racket-catalog |> final.lib.attrNames;
|
||||||
|
byName = self:
|
||||||
|
final.lib.map (name: {
|
||||||
|
inherit name;
|
||||||
|
value = self.callPackage ./racket-catalog/${name} {};
|
||||||
|
}) names |>
|
||||||
|
final.lib.listToAttrs;
|
||||||
|
in {
|
||||||
racket-minimal = final.callPackage ./racket/minimal.nix {};
|
racket-minimal = final.callPackage ./racket/minimal.nix {};
|
||||||
racket = final.callPackage ./racket/package.nix {};
|
racket = final.callPackage ./racket/package.nix {};
|
||||||
|
|
||||||
|
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")"
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
racketPackages = final.lib.makeScope final.newScope (self: {
|
racketPackages = final.lib.makeScope final.newScope (self: {
|
||||||
racketInstallHook = self.callPackage ./racket-install-hook.nix {};
|
racketInstallHook = self.callPackage ./racket-install-hook.nix {};
|
||||||
buildRacketPackage = self.callPackage ./build-racket-package.nix {};
|
buildRacketPackage = self.callPackage ./build-racket-package.nix {};
|
||||||
|
|
||||||
makeRacketEnv = self.callPackage ./make-racket-env.nix {};
|
makeRacketEnv = self.callPackage ./make-racket-env.nix {};
|
||||||
|
} // (byName self));
|
||||||
testEnv = self.makeRacketEnv {
|
|
||||||
packages = [self.ansi-color self.curly-fn-lib];
|
|
||||||
};
|
|
||||||
|
|
||||||
ansi-color = self.callPackage (
|
|
||||||
{
|
|
||||||
lib,
|
|
||||||
buildRacketPackage,
|
|
||||||
fetchFromGitHub,
|
|
||||||
}: buildRacketPackage {
|
|
||||||
pname = "ansi-color";
|
|
||||||
version = "0.2";
|
|
||||||
|
|
||||||
src = final.fetchFromGitHub {
|
|
||||||
owner = "renatoathaydes";
|
|
||||||
repo = "ansi-color";
|
|
||||||
rev = "0.2";
|
|
||||||
hash = "sha256-7WDW+4R9K+XLb9nMNGQlU+zAi2Gq7cUqzO3csN+AJvI=";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
) {};
|
|
||||||
|
|
||||||
namespaced-transformer-lib = self.callPackage (
|
|
||||||
{
|
|
||||||
lib,
|
|
||||||
buildRacketPackage,
|
|
||||||
fetchFromGitHub,
|
|
||||||
}: buildRacketPackage {
|
|
||||||
pname = "namespaced-transformer-lib";
|
|
||||||
version = "none";
|
|
||||||
|
|
||||||
src = "${final.fetchFromGitHub {
|
|
||||||
owner = "lexi-lambda";
|
|
||||||
repo = "namespaced-transformer";
|
|
||||||
rev = "4cdc1bdae09a07b78f23665267f2c7df4be5a7f6";
|
|
||||||
hash = "sha256-vpDJ7qUNhKreig1LbU33d7TXXHkfd7gPxE1Fc5bvzFE=";
|
|
||||||
}}/namespaced-transformer-lib";
|
|
||||||
}
|
|
||||||
) {};
|
|
||||||
|
|
||||||
curly-fn-lib = self.callPackage (
|
|
||||||
{
|
|
||||||
lib,
|
|
||||||
buildRacketPackage,
|
|
||||||
fetchFromGitHub,
|
|
||||||
|
|
||||||
namespaced-transformer-lib,
|
|
||||||
}: buildRacketPackage {
|
|
||||||
pname = "curly-fn-lib";
|
|
||||||
version = "none";
|
|
||||||
|
|
||||||
dependencies = [ namespaced-transformer-lib ];
|
|
||||||
|
|
||||||
src = "${final.fetchFromGitHub {
|
|
||||||
owner = "lexi-lambda";
|
|
||||||
repo = "racket-curly-fn";
|
|
||||||
rev = "d64cd71d5b386be85f5979edae6f6b6469a4df86";
|
|
||||||
hash = "sha256-ge7o/UAvUXA4DIl03UkqVnLHNaPGq4SqxWvpcKdXndI=";
|
|
||||||
}}/curly-fn-lib";
|
|
||||||
}
|
|
||||||
) {};
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
#hash(
|
||||||
|
("ansi-color" . #hash((license . "LGPL-3.0-or-later")))
|
||||||
|
("cldr-bcp47" . #hash((license . "(MIT AND Unicode-TOU)")))
|
||||||
|
("cldr-core" . #hash((license . "(MIT AND Unicode-TOU)")))
|
||||||
|
("cldr-localenames-modern" . #hash((license . "(MIT AND Unicode-TOU)")))
|
||||||
|
("cldr-dates-modern" . #hash((license . "(MIT AND Unicode-TOU)")))
|
||||||
|
("cldr-numbers-modern" . #hash((license . "(MIT AND Unicode-TOU)")))
|
||||||
|
("memoize-lib" . #hash((license . "MIT")))
|
||||||
|
("gregor-lib" . #hash((license . "MIT")))
|
||||||
|
("tzinfo" . #hash((license . "MIT")))
|
||||||
|
("resyntax" . #hash((license . "Apache-2.0")))
|
||||||
|
("br-parser-tools-lib" . #hash((license . "LGPL-3.0-or-later")))
|
||||||
|
("brag-lib" . #hash((license . "MIT")))
|
||||||
|
("fancy-app" . #hash((license . "MIT")))
|
||||||
|
("rebellion" . #hash((license . "Apache-2.0")))
|
||||||
|
)
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
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).licenses).lgpl3Plus;
|
||||||
|
homepage = "https://github.com/renatoathaydes/ansi-color/tree/HEAD/README.md";
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
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).licenses).lgpl3Plus)];
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
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).licenses).mit)];
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
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).licenses).mit) (((lib).licenses).unicodeTOU)];
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
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).licenses).mit) (((lib).licenses).unicodeTOU)];
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
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).licenses).mit) (((lib).licenses).unicodeTOU)];
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
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).licenses).mit) (((lib).licenses).unicodeTOU)];
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
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).licenses).mit) (((lib).licenses).unicodeTOU)];
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
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).licenses).mit)];
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
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).licenses).asl20) (((lib).licenses).mit)];
|
||||||
|
homepage = "https://github.com/sorawee/fmt/tree/HEAD/README.md";
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,35 @@
|
||||||
|
{
|
||||||
|
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).licenses).mit)];
|
||||||
|
homepage = "https://github.com/97jaz/gregor/tree/HEAD/README.md";
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
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).licenses).asl20) (((lib).licenses).mit)];
|
||||||
|
homepage = "https://github.com/jackfirth/guard/tree/HEAD/README.md";
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
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).licenses).mit)];
|
||||||
|
homepage = "https://github.com/jbclements/memoize/tree/master/README.md";
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
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).licenses).bsd3)];
|
||||||
|
homepage = "https://github.com/Bogdanp/racket-north/tree/HEAD/README.md";
|
||||||
|
};
|
||||||
|
})
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
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).licenses).asl20) (((lib).licenses).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
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
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).licenses).mit)];
|
||||||
|
homepage = "https://github.com/97jaz/tzinfo/tree/HEAD/README.md";
|
||||||
|
};
|
||||||
|
})
|
|
@ -8,6 +8,7 @@ addRacketPath() {
|
||||||
|
|
||||||
racketInstallPhase() {
|
racketInstallPhase() {
|
||||||
echo "Executing racketInstallPhase"
|
echo "Executing racketInstallPhase"
|
||||||
|
cd "$racketGitSubpath"
|
||||||
runHook preInstall
|
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/{include,etc/racket,lib/racket,share/racket/pkgs,share/racket/collects,bin,share/applications,share/doc/racket,share/man}
|
||||||
|
|
|
@ -0,0 +1,504 @@
|
||||||
|
#lang racket/base
|
||||||
|
|
||||||
|
(require
|
||||||
|
racket/file
|
||||||
|
racket/function
|
||||||
|
racket/hash
|
||||||
|
racket/list
|
||||||
|
racket/match
|
||||||
|
racket/port
|
||||||
|
racket/runtime-path
|
||||||
|
racket/sandbox
|
||||||
|
racket/sequence
|
||||||
|
racket/set
|
||||||
|
racket/string
|
||||||
|
|
||||||
|
net/url
|
||||||
|
pkg/lib
|
||||||
|
setup/getinfo)
|
||||||
|
|
||||||
|
(define main-dist-pkgs
|
||||||
|
(list->set (installed-pkg-names #:scope 'installation)))
|
||||||
|
|
||||||
|
(define (process-dep dep)
|
||||||
|
(match dep
|
||||||
|
[(? string? _) dep]
|
||||||
|
[(cons "base" _)
|
||||||
|
"base"]
|
||||||
|
[(cons name args*)
|
||||||
|
(let/ec exit
|
||||||
|
(define args
|
||||||
|
(for/list ([v (in-slice 2 args*)]) (cons (first v) (second v))))
|
||||||
|
(match (assq '#:platform args)
|
||||||
|
[(cons _ 'windows) (exit #f)]
|
||||||
|
[(cons _ 'unix) (void)]
|
||||||
|
[(cons _ plat) (error "unhandled platform" plat)]
|
||||||
|
[#f (void)])
|
||||||
|
(match (assq '#:version args)
|
||||||
|
[#f (void)]
|
||||||
|
[(cons _ _) (displayln "WARNING: unhandled version spec")])
|
||||||
|
name)]))
|
||||||
|
|
||||||
|
(define (process-deps deps)
|
||||||
|
(for/list ([dep (in-list deps)]
|
||||||
|
#:do [(define dep* (process-dep dep))]
|
||||||
|
#:when dep*
|
||||||
|
#:unless (set-member? main-dist-pkgs dep*))
|
||||||
|
dep*))
|
||||||
|
|
||||||
|
(define-runtime-path overrides-path "racket-catalog-overrides.rktd")
|
||||||
|
(define catalog-overrides (file->value overrides-path))
|
||||||
|
|
||||||
|
(define *license-mapping*
|
||||||
|
(hash
|
||||||
|
'BSD-3-Clause '(dot (dot lib licenses) bsd3)
|
||||||
|
'MIT '(dot (dot lib licenses) mit)
|
||||||
|
'Apache-2.0 '(dot (dot lib licenses) asl20)
|
||||||
|
'LGPL-3.0-or-later '(dot (dot lib licenses) lgpl3Plus)
|
||||||
|
'Unicode-TOU '(dot (dot lib licenses) unicodeTOU)))
|
||||||
|
|
||||||
|
(define (racket-license->nix-license license)
|
||||||
|
(if license
|
||||||
|
(let ([lic-expr (with-input-from-string license read)])
|
||||||
|
`(list ,@(cvtl lic-expr)))
|
||||||
|
(begin
|
||||||
|
(displayln "WARNING: no license for package -- using unfree")
|
||||||
|
'(dot (dot lib licenses) unfree))))
|
||||||
|
|
||||||
|
(define (cvtl lic-expr)
|
||||||
|
(match lic-expr
|
||||||
|
[(? symbol? _)
|
||||||
|
(list
|
||||||
|
(or
|
||||||
|
(hash-ref *license-mapping* lic-expr #f)
|
||||||
|
(error "no license mapping defined for" lic-expr)))]
|
||||||
|
[`(,a OR ,b)
|
||||||
|
(append (cvtl a) (cvtl b))]
|
||||||
|
[`(,a AND ,b)
|
||||||
|
(append (cvtl a) (cvtl b))]
|
||||||
|
[`(,a WITH ,b)
|
||||||
|
(error "unhandled with" lic-expr)]))
|
||||||
|
|
||||||
|
|
||||||
|
(define (module-name mod-spec)
|
||||||
|
(match mod-spec
|
||||||
|
[`(lib ,mod-name) mod-name]
|
||||||
|
[_ (error "unrecognized module spec" mod-spec)]))
|
||||||
|
|
||||||
|
|
||||||
|
(define (extract-path query)
|
||||||
|
(match (assq 'path query)
|
||||||
|
[#f #f]
|
||||||
|
[(cons _ value) value]))
|
||||||
|
|
||||||
|
|
||||||
|
;; (list 'github owner repo rev path)
|
||||||
|
;; (list 'git url rev path)
|
||||||
|
;; (list 'archive url)
|
||||||
|
;; - note if the archive contains a single directory inside, that dir is the top level
|
||||||
|
;; .plt is not supported
|
||||||
|
(define (normalize-source source checksum)
|
||||||
|
(define u (string->url source))
|
||||||
|
(match (string->url source)
|
||||||
|
[(or (url "github" _ _ _ _
|
||||||
|
(or
|
||||||
|
(list
|
||||||
|
(path/param owner '())
|
||||||
|
(path/param repo '()))
|
||||||
|
(list
|
||||||
|
(path/param owner '())
|
||||||
|
(path/param repo '())
|
||||||
|
; there might be a branch/tag -- ignore it and use "checksum" as rev
|
||||||
|
_))
|
||||||
|
(app extract-path path-maybe)
|
||||||
|
_)
|
||||||
|
(url (pregexp #px"^git|(git\\+)?https?$") _ "github.com" _ _
|
||||||
|
(list
|
||||||
|
(path/param owner '())
|
||||||
|
(path/param (pregexp #px"^(.*?)(\\.git)?$" (list _ repo _)) '()))
|
||||||
|
(app extract-path path-maybe)
|
||||||
|
_))
|
||||||
|
(list
|
||||||
|
'github
|
||||||
|
owner
|
||||||
|
repo
|
||||||
|
checksum
|
||||||
|
path-maybe)]
|
||||||
|
|
||||||
|
[(or (url "github" _ _ _ _ _ _ _)
|
||||||
|
(url (pregexp #px"^git|(git\\+)?https?$") _ "github.com" _ _ _ _ _))
|
||||||
|
(error "invalid github url" source)]
|
||||||
|
|
||||||
|
[(or (url (or "git" "git+http" "git+https") _ _ _ _ _
|
||||||
|
(app extract-path path-maybe)
|
||||||
|
_)
|
||||||
|
(url (or "http" "https") _ _ _ _
|
||||||
|
(or
|
||||||
|
(list _ ... (path/param (pregexp #px"\\.git$") '()))
|
||||||
|
(list _ ... (path/param (pregexp #px"\\.git$") '()) (path/param "" '())))
|
||||||
|
(app extract-path path-maybe)
|
||||||
|
_))
|
||||||
|
(define u*
|
||||||
|
(url
|
||||||
|
(url-scheme u)
|
||||||
|
(url-user u)
|
||||||
|
(url-host u)
|
||||||
|
(url-port u)
|
||||||
|
(url-path-absolute? u)
|
||||||
|
(url-path u)
|
||||||
|
'()
|
||||||
|
#f))
|
||||||
|
(list 'git (url->string u*) checksum path-maybe)]
|
||||||
|
|
||||||
|
[(url (or "http" "https") _ _ _ _
|
||||||
|
(list _ ... (path/param (pregexp #px"\\.(zip|tar|tgz|tar\\.gz)$") '()))
|
||||||
|
_ _)
|
||||||
|
(list 'archive source)]
|
||||||
|
|
||||||
|
[_ (error "unrecognized source url" source)]))
|
||||||
|
|
||||||
|
|
||||||
|
(define (extract-free-vars expr [scope (set)])
|
||||||
|
(match expr
|
||||||
|
[`(dot ,a ,(? symbol? b))
|
||||||
|
(extract-free-vars a)]
|
||||||
|
[`(app ,fun ,arg)
|
||||||
|
(append (extract-free-vars fun scope)
|
||||||
|
(extract-free-vars arg scope))]
|
||||||
|
[`(attrs (,names ,values) ...)
|
||||||
|
(for/fold ([acc '()]) ([name (in-list names)] [value (in-list values)])
|
||||||
|
(append acc (extract-free-vars value scope)))]
|
||||||
|
[`(templatestring ,exprs ...)
|
||||||
|
(for/fold ([acc '()]) ([expr (in-list exprs)])
|
||||||
|
(append acc (extract-free-vars expr scope)))]
|
||||||
|
[`(list ,exprs ...)
|
||||||
|
(for/fold ([acc '()]) ([expr (in-list exprs)])
|
||||||
|
(append acc (extract-free-vars expr scope)))]
|
||||||
|
[(? symbol? _)
|
||||||
|
(if (set-member? scope expr)
|
||||||
|
'()
|
||||||
|
(list expr))]
|
||||||
|
[(? string? _) '()]
|
||||||
|
[(? boolean? _) '()]
|
||||||
|
[(? number? _) '()]))
|
||||||
|
|
||||||
|
|
||||||
|
(define (callpackageify expr)
|
||||||
|
(define free-vars (set->list (list->set (extract-free-vars expr))))
|
||||||
|
`(function
|
||||||
|
,free-vars
|
||||||
|
,expr))
|
||||||
|
|
||||||
|
|
||||||
|
(define (render-nix expr)
|
||||||
|
(match expr
|
||||||
|
[(or (? number? _)
|
||||||
|
(? symbol? _)
|
||||||
|
(? string? _))
|
||||||
|
(write expr)]
|
||||||
|
[(? boolean? _)
|
||||||
|
(write-string (if expr "true" "false"))]
|
||||||
|
[`(function ,vars ,expr)
|
||||||
|
(write-string "{\n")
|
||||||
|
(for ([var (in-list vars)])
|
||||||
|
(write var)
|
||||||
|
(write-string ",\n"))
|
||||||
|
(write-string "}:\n")
|
||||||
|
(render-nix expr)]
|
||||||
|
[`(app ,fun ,arg)
|
||||||
|
(write-string "(")
|
||||||
|
(render-nix fun)
|
||||||
|
(write-string " ")
|
||||||
|
(render-nix arg)
|
||||||
|
(write-string ")")]
|
||||||
|
[`(list ,exprs ...)
|
||||||
|
(write-string "[")
|
||||||
|
(for ([expr (in-list exprs)])
|
||||||
|
(write-string "(")
|
||||||
|
(render-nix expr)
|
||||||
|
(write-string ") "))
|
||||||
|
(write-string "]")]
|
||||||
|
[`(dot ,a ,b)
|
||||||
|
(write-string "(")
|
||||||
|
(render-nix a)
|
||||||
|
(write-string ").")
|
||||||
|
(render-nix b)]
|
||||||
|
[`(templatestring ,exprs ...)
|
||||||
|
(write-string "\"")
|
||||||
|
(for ([expr (in-list exprs)])
|
||||||
|
(if (string? expr)
|
||||||
|
(write-string expr)
|
||||||
|
(begin
|
||||||
|
(write-string "${")
|
||||||
|
(render-nix expr)
|
||||||
|
(write-string "}"))))
|
||||||
|
(write-string "\"")]
|
||||||
|
[`(attrs (,names ,values) ...)
|
||||||
|
(write-string "{\n")
|
||||||
|
(for ([name (in-list names)] [value (in-list values)])
|
||||||
|
(write name)
|
||||||
|
(write-string " = ")
|
||||||
|
(render-nix value)
|
||||||
|
(write-string ";\n"))
|
||||||
|
(write-string "}")])
|
||||||
|
(void))
|
||||||
|
|
||||||
|
(struct nix-repl [proc stdout stdin])
|
||||||
|
|
||||||
|
(define current-nix-repl (make-parameter #f))
|
||||||
|
|
||||||
|
(define (with-nix-repl thk)
|
||||||
|
(parameterize ([current-subprocess-custodian-mode 'kill]
|
||||||
|
[current-environment-variables
|
||||||
|
(environment-variables-copy (current-environment-variables))])
|
||||||
|
(putenv "TERM" "dumb")
|
||||||
|
(putenv "NO_COLOR" "1")
|
||||||
|
(call-with-custodian-shutdown
|
||||||
|
(lambda ()
|
||||||
|
(define-values (proc stdout stdin stderr)
|
||||||
|
(subprocess
|
||||||
|
#f #f 'stdout
|
||||||
|
"/usr/bin/env"
|
||||||
|
"nix"
|
||||||
|
"--extra-experimental-features"
|
||||||
|
"nix-command flakes pipe-operator repl-automation"
|
||||||
|
"repl" "--impure" "."))
|
||||||
|
|
||||||
|
(sync (regexp-match-evt #px"^[^\x05]+\x05" stdout))
|
||||||
|
|
||||||
|
(parameterize ([current-nix-repl (nix-repl proc stdout stdin)])
|
||||||
|
(thk))))))
|
||||||
|
|
||||||
|
(define (nix-eval line)
|
||||||
|
(match-define (nix-repl _ stdout stdin) (current-nix-repl))
|
||||||
|
(write-string line stdin)
|
||||||
|
(newline stdin)
|
||||||
|
(flush-output stdin)
|
||||||
|
|
||||||
|
(string-trim
|
||||||
|
(bytes->string/utf-8
|
||||||
|
(second
|
||||||
|
(sync (regexp-match-evt #px"^([^\x05]+)\x05" stdout))))))
|
||||||
|
|
||||||
|
|
||||||
|
(define (nix-format file*)
|
||||||
|
(displayln "formatting generated nix")
|
||||||
|
(define file (path->string file*))
|
||||||
|
(parameterize ([current-subprocess-custodian-mode 'kill]
|
||||||
|
[current-environment-variables
|
||||||
|
(environment-variables-copy (current-environment-variables))])
|
||||||
|
(putenv "TERM" "dumb")
|
||||||
|
(putenv "NO_COLOR" "1")
|
||||||
|
(call-with-custodian-shutdown
|
||||||
|
(lambda ()
|
||||||
|
(define-values (proc stdout stdin stderr)
|
||||||
|
(subprocess
|
||||||
|
#f #f 'stdout
|
||||||
|
"/usr/bin/env"
|
||||||
|
"alejandra"
|
||||||
|
"--quiet"
|
||||||
|
file))
|
||||||
|
(port->string stdout)
|
||||||
|
(subprocess-wait proc)))
|
||||||
|
(void)))
|
||||||
|
|
||||||
|
(define (add-to-git-maybe file*)
|
||||||
|
(define file (path->string file*))
|
||||||
|
(parameterize ([current-subprocess-custodian-mode 'kill])
|
||||||
|
(call-with-custodian-shutdown
|
||||||
|
(lambda ()
|
||||||
|
(define-values (proc stdout stdin stderr)
|
||||||
|
(subprocess
|
||||||
|
#f #f 'stdout
|
||||||
|
"/usr/bin/env"
|
||||||
|
"git"
|
||||||
|
"rev-parse"
|
||||||
|
"--show-toplevel"))
|
||||||
|
(port->string stdout)
|
||||||
|
(subprocess-wait proc)
|
||||||
|
(when (= 0 (subprocess-status proc))
|
||||||
|
(define-values (proc stdout stdin stderr)
|
||||||
|
(subprocess
|
||||||
|
#f #f 'stdout
|
||||||
|
"/usr/bin/env"
|
||||||
|
"git" "add" file))
|
||||||
|
(port->string stdout)
|
||||||
|
(subprocess-wait proc))))))
|
||||||
|
|
||||||
|
(define (racket2nix
|
||||||
|
pkg-name
|
||||||
|
[force? #f]
|
||||||
|
[base-dir (build-path "racket-catalog")]
|
||||||
|
[acc (make-hash)])
|
||||||
|
(define pkg-dir (build-path base-dir pkg-name))
|
||||||
|
(when
|
||||||
|
(match (hash-ref acc pkg-name #f)
|
||||||
|
['pending (error "circular dependency!" pkg-name)]
|
||||||
|
['installed #f]
|
||||||
|
[#f (or (not (directory-exists? pkg-dir))
|
||||||
|
force?)])
|
||||||
|
|
||||||
|
(hash-set! acc pkg-name 'pending)
|
||||||
|
(printf "fetching info for ~a\n" pkg-name)
|
||||||
|
(define details* (get-pkg-details-from-catalogs pkg-name))
|
||||||
|
|
||||||
|
(define details
|
||||||
|
(if (hash-has-key? catalog-overrides pkg-name)
|
||||||
|
(hash-union
|
||||||
|
details*
|
||||||
|
(hash-ref catalog-overrides pkg-name)
|
||||||
|
#:combine/key (lambda (k v0 v) v))
|
||||||
|
details*))
|
||||||
|
|
||||||
|
(define description (hash-ref details 'description))
|
||||||
|
|
||||||
|
(define license (hash-ref details 'license))
|
||||||
|
(define nix-license (racket-license->nix-license license))
|
||||||
|
|
||||||
|
(define dependencies (process-deps (hash-ref details 'dependencies)))
|
||||||
|
(define nix-deps
|
||||||
|
`(list ,@(map string->symbol dependencies)))
|
||||||
|
|
||||||
|
(for ([dependency (in-list dependencies)])
|
||||||
|
(racket2nix dependency force? base-dir acc))
|
||||||
|
|
||||||
|
(define broken? (not (hash-ref (hash-ref details 'search-terms) ':build-success:)))
|
||||||
|
|
||||||
|
(define source (hash-ref details 'source))
|
||||||
|
(define checksum (hash-ref details 'checksum))
|
||||||
|
(define git-shorthash (substring checksum 0 7))
|
||||||
|
(define source-desc (normalize-source source checksum))
|
||||||
|
|
||||||
|
(define readme (hash-ref details 'readme-url))
|
||||||
|
|
||||||
|
(define modules* (hash-ref details 'modules))
|
||||||
|
(define modules (map module-name modules*))
|
||||||
|
|
||||||
|
(make-directory* pkg-dir)
|
||||||
|
|
||||||
|
(define (generate-spec
|
||||||
|
[nix-hash '(dot lib fakeHash)]
|
||||||
|
[version "0.0"]
|
||||||
|
[racket-launchers '()]
|
||||||
|
[raco-commands '()]
|
||||||
|
[format? #f])
|
||||||
|
(define-values (nix-src* subpath)
|
||||||
|
(match source-desc
|
||||||
|
[(list 'github owner repo rev path)
|
||||||
|
(values
|
||||||
|
`((src
|
||||||
|
(app
|
||||||
|
fetchFromGitHub
|
||||||
|
(attrs
|
||||||
|
(owner ,owner)
|
||||||
|
(repo ,repo)
|
||||||
|
(rev ,rev)
|
||||||
|
(hash ,nix-hash))))
|
||||||
|
(gitSubpath ,(or path ".")))
|
||||||
|
(or path 'same))]
|
||||||
|
[(list 'git url rev path)
|
||||||
|
(values
|
||||||
|
`((src
|
||||||
|
(app
|
||||||
|
fetchgit
|
||||||
|
(attrs
|
||||||
|
(url ,url)
|
||||||
|
(rev ,rev)
|
||||||
|
(hash ,nix-hash))))
|
||||||
|
(gitSubpath ,(or path ".")))
|
||||||
|
(or path 'same))]
|
||||||
|
[(list 'archive url)
|
||||||
|
(values
|
||||||
|
`(app
|
||||||
|
fetchzip
|
||||||
|
(attrs
|
||||||
|
(url ,url)
|
||||||
|
(hash ,nix-hash)))
|
||||||
|
'same)]))
|
||||||
|
|
||||||
|
(define nix-version (format "~a+~a" version git-shorthash))
|
||||||
|
|
||||||
|
(define nix-meta
|
||||||
|
`(attrs
|
||||||
|
(description ,description)
|
||||||
|
(sourceProvenance (list (dot (dot lib sourceTypes) fromSource)))
|
||||||
|
(broken ,broken?)
|
||||||
|
(license ,nix-license)
|
||||||
|
,@(if readme `((homepage ,readme)) '())
|
||||||
|
,@(if (and racket-launchers (not (empty? racket-launchers)))
|
||||||
|
`((mainProgram ,(first racket-launchers)))
|
||||||
|
'())
|
||||||
|
))
|
||||||
|
|
||||||
|
(define nix-passthru
|
||||||
|
`(attrs
|
||||||
|
(racketModules (list ,@modules))
|
||||||
|
(racketLaunchers (list ,@racket-launchers))
|
||||||
|
(racoCommands (list ,@raco-commands))))
|
||||||
|
|
||||||
|
(define nix-spec*
|
||||||
|
`(app
|
||||||
|
buildRacketPackage
|
||||||
|
(attrs
|
||||||
|
(pname ,pkg-name)
|
||||||
|
(version ,nix-version)
|
||||||
|
(dependencies ,nix-deps)
|
||||||
|
,@nix-src*
|
||||||
|
(passthru ,nix-passthru)
|
||||||
|
(meta ,nix-meta))))
|
||||||
|
|
||||||
|
(define nix-spec (callpackageify nix-spec*))
|
||||||
|
|
||||||
|
(define default-nix (build-path pkg-dir "default.nix"))
|
||||||
|
|
||||||
|
(with-output-to-file default-nix
|
||||||
|
(lambda ()
|
||||||
|
(render-nix nix-spec))
|
||||||
|
#:exists 'replace)
|
||||||
|
|
||||||
|
(when format?
|
||||||
|
(nix-format default-nix))
|
||||||
|
|
||||||
|
(add-to-git-maybe default-nix)
|
||||||
|
|
||||||
|
subpath)
|
||||||
|
|
||||||
|
(generate-spec)
|
||||||
|
|
||||||
|
(displayln "fetching source")
|
||||||
|
|
||||||
|
(with-nix-repl
|
||||||
|
(lambda ()
|
||||||
|
(define drv-def-out (nix-eval
|
||||||
|
(format "drv = with legacyPackages.${builtins.currentSystem}; instrumentedFetch (racketPackages.~a.src)" pkg-name)))
|
||||||
|
(nix-eval ":b drv")
|
||||||
|
(define build-log (nix-eval ":log drv"))
|
||||||
|
(match-define (list _ real-hash)
|
||||||
|
(regexp-match #px"FETCH_HASH:([^:]+):FETCH_HASH" build-log))
|
||||||
|
(define subpath (generate-spec real-hash))
|
||||||
|
(nix-eval ":r")
|
||||||
|
(nix-eval
|
||||||
|
(format "drv = with legacyPackages.${builtins.currentSystem}; instrumentedFetch (racketPackages.~a.src)" pkg-name))
|
||||||
|
(define out-path (nix-eval ":p drv.outPath"))
|
||||||
|
(nix-eval ":b drv")
|
||||||
|
|
||||||
|
(define info-proc (get-info/full (build-path out-path subpath)))
|
||||||
|
|
||||||
|
(define version (info-proc 'version (lambda () "0.0")))
|
||||||
|
(define racket-launchers (info-proc 'racket-launcher-names (lambda () '())))
|
||||||
|
(define raco-commands* (info-proc 'raco-commands (lambda () '())))
|
||||||
|
(define raco-commands
|
||||||
|
(and raco-commands*
|
||||||
|
(map first raco-commands*)))
|
||||||
|
|
||||||
|
; generate final nix file
|
||||||
|
(generate-spec real-hash version racket-launchers raco-commands #t)
|
||||||
|
|
||||||
|
(displayln "doing final module build")
|
||||||
|
(nix-eval ":r")
|
||||||
|
(nix-eval
|
||||||
|
(format ":b with legacyPackages.${builtins.currentSystem}; racketPackages.~a" pkg-name))))
|
||||||
|
|
||||||
|
(hash-set! acc pkg-name 'installed)
|
||||||
|
|
||||||
|
(void)))
|
Loading…
Reference in New Issue