From 9700dd72aabb49b3329c56d1db5b563d56beba86 Mon Sep 17 00:00:00 2001 From: Ingolf Wagner Date: Fri, 28 Jun 2024 11:30:37 +0200 Subject: [PATCH] add pkl --- flake.nix | 7 +- homes/palo/packages/development.nix | 3 + pkgs/pkl/default.nix | 114 ++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 pkgs/pkl/default.nix diff --git a/flake.nix b/flake.nix index 7be992b..2b95cee 100644 --- a/flake.nix +++ b/flake.nix @@ -166,6 +166,7 @@ kmonad = kmonad.packages.${system}.kmonad; tasksh = taskshell.packages.${system}.tasksh; overviewer = overviewer.packages.${system}.overviewer; + pkl = self.packages.${system}.pkl; }) (import ./pkgs) ]; @@ -324,13 +325,17 @@ flake-parts.lib.mkFlake { inherit inputs; } ({ self, pkgs, ... }: { # We define our own systems below. you can still use this to add system specific outputs to your flake. # See: https://flake.parts/getting-started - systems = [ ]; + systems = [ "x86_64-linux" ]; # import clan-core modules imports = [ clan-core.flakeModules.default ]; + perSystem = { + packages.pkl = pkgs.callPackage ./pkgs/pkl { }; + }; + # Define your clan clan = { # Clan wide settings. diff --git a/homes/palo/packages/development.nix b/homes/palo/packages/development.nix index e3978ff..f9c50f8 100644 --- a/homes/palo/packages/development.nix +++ b/homes/palo/packages/development.nix @@ -37,6 +37,9 @@ with lib; }; })) + # Pkl + # --- + # pkl (not working yet) # terminal code to image/movie renderer vhs diff --git a/pkgs/pkl/default.nix b/pkgs/pkl/default.nix new file mode 100644 index 0000000..a189e6a --- /dev/null +++ b/pkgs/pkl/default.nix @@ -0,0 +1,114 @@ +{ stdenv +, jdk17 +, gradle_7 +, lib +, fetchFromGitHub +, jre +, perl +, git +, util-linux +}: + +let + pname = "pkl"; + version = "0.25.1"; + src = fetchFromGitHub { + owner = "apple"; + repo = "pkl"; + rev = "0.25.1"; + sha256 = "sha256-/I1dxGXYVUClEQXXtSqEyopClNTqseeWpAiyeaPrIGo="; + }; + + # fake build to pre-download deps into fixed-output derivation + deps = stdenv.mkDerivation { + pname = "${pname}-deps"; + inherit src version; + + nativeBuildInputs = [ + git + gradle_7 + jdk17 + perl + ]; + + # Here we download dependencies for both the server and the client so + # we only have to specify one hash for 'deps'. Deps can be garbage + # collected after the build, so this is not really an issue. + buildPhase = '' + export GRADLE_USER_HOME=$(mktemp -d) + # https://github.com/apple/pkl/issues/66 + gradle --no-daemon \ + bench:dependencies \ + docs:dependencies \ + pkl-cli:dependencies \ + pkl-codegen-java:dependencies \ + pkl-codegen-kotlin:dependencies \ + pkl-commons:dependencies \ + pkl-commons-cli:dependencies \ + pkl-commons-test:dependencies \ + pkl-config-java:dependencies \ + pkl-config-kotlin:dependencies \ + pkl-core:dependencies \ + pkl-doc:dependencies \ + pkl-executor:dependencies \ + pkl-gradle:dependencies \ + pkl-server:dependencies \ + pkl-tools:dependencies \ + stdlib:dependencies \ + bench:spotlessJava + ''; + + # Taken from Mindustry derivation + # perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar) + installPhase = '' + find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \ + | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \ + | sh + + # For some reason, some of the jars, but not all, had the unexpected + # string "-gradle70" before its extension. This snippet removes it + find "$out" -type f -iname "*-gradle70.jar" -exec ${util-linux}/bin/rename -- "-gradle70" "" {} \; + ''; + outputHashMode = "recursive"; + outputHash = "sha256-iLC2WI9UJWOQ14U6Rd+B+8OPD/ji+aTsjUT+YMbJuv0="; + }; +in +stdenv.mkDerivation rec { + inherit pname version src deps; + + nativeBuildInputs = [ + git + gradle_7 + jdk17 + ]; + + buildInputs = [ + jre + ]; + + buildPhase = '' + export GRADLE_USER_HOME=$(mktemp -d) + sed -ie "s#repositories {#repositories { maven { url = uri(\"${deps}\") }#g" settings.gradle.kts + sed -ie "s#repositories {#repositories { maven { url = uri(\"${deps}\") }#g" ./buildSrc/src/main/kotlin/pklAllProjects.gradle.kts + sed -ie "s#repositories {#repositories { maven { url = uri(\"${deps}\") }#g" ./pkl-gradle/src/test/kotlin/org/pkl/gradle/JavaCodeGeneratorsTest.kt + sed -ie "s#repositories {#repositories { maven { url = uri(\"${deps}\") }#g" ./pkl-gradle/src/test/kotlin/org/pkl/gradle/KotlinCodeGeneratorsTest.kt + sed -ie "s#repositories {#repositories { maven { url = uri(\"${deps}\") }#g" ./buildSrc/settings.gradle.kts + + gradle --no-daemon --offline --info --stacktrace build + ''; + + installPhase = '' + mkdir -p "$out/bin" + install -Dm755 "./pkl-cli/build/executable/jpkl" "$out/bin/pkl" + ''; + + meta = with lib; { + description = "A configuration as code language with rich validation and tooling. "; + homepage = "https://pkl-lang.org/main/current/index.html"; + licence = licenses.asl20; + platforms = platforms.all; + maintainers = with maintainers; [ rafaelrc ]; + mainProgram = "pkl"; + }; +} +