90 lines
2.8 KiB
Nix
90 lines
2.8 KiB
Nix
{
|
|
lib,
|
|
stdenv,
|
|
fetchzip,
|
|
jre,
|
|
makeWrapper,
|
|
plantuml-c4,
|
|
plantuml,
|
|
runCommand,
|
|
}:
|
|
|
|
# The C4-PlantUML docs say that it suffices to run plantuml with the
|
|
# -DRELATIVE_INCLUDE="..." arg to make plantuml find the C4 templates
|
|
# when included like "!include C4_Container.puml".
|
|
# Unfortunately, this is not sufficient in practise, when the path is not ".".
|
|
# What helps is setting -Dplantuml.include.path="..." *before* the jar
|
|
# parameter.
|
|
# The -DRELATIVE_INCLUDE param then *still* needs to be set (*after* the jar
|
|
# argument), because the C4 template vars check for existence of this variable
|
|
# and if it is not set, reference paths in the internet.
|
|
|
|
let
|
|
c4-lib = fetchzip {
|
|
url = "https://github.com/plantuml-stdlib/C4-PlantUML/archive/refs/tags/v2.10.0.zip";
|
|
hash = "sha256-p9Njb7VauXVf6yOBDQrO9mS+za9NntFUCK5tig0mH3U=";
|
|
};
|
|
|
|
sprites = fetchzip {
|
|
url = "https://github.com/tupadr3/plantuml-icon-font-sprites/archive/refs/tags/v3.0.0.zip";
|
|
hash = "sha256-I/cR1VPR7aKyTZF9X/4GkgcxV9+sLgNpTZugvCy0Dvs=";
|
|
};
|
|
|
|
# In order to pre-fix the plantuml.jar parameter with the argument
|
|
# -Dplantuml.include.path=..., we post-fix the java command using a wrapper.
|
|
# This way the plantuml derivation can remain unchanged.
|
|
plantumlWithExtraPath =
|
|
let
|
|
plantumlIncludePath = lib.concatStringsSep ":" [
|
|
c4-lib
|
|
sprites
|
|
];
|
|
includeFlag = "-Dplantuml.include.path=${lib.escapeShellArg plantumlIncludePath}";
|
|
postFixedJre = runCommand "jre-postfixed" { nativeBuildInputs = [ makeWrapper ]; } ''
|
|
mkdir -p $out/bin
|
|
|
|
makeWrapper ${jre}/bin/java $out/bin/java \
|
|
--add-flags ${lib.escapeShellArg includeFlag}
|
|
'';
|
|
in
|
|
plantuml.override { jre = postFixedJre; };
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
pname = "plantuml-c4";
|
|
version = "2.10.0";
|
|
|
|
nativeBuildInputs = [ makeWrapper ];
|
|
|
|
buildCommand = ''
|
|
mkdir -p $out/bin
|
|
|
|
makeWrapper ${plantumlWithExtraPath}/bin/plantuml $out/bin/plantuml \
|
|
--add-flags "-DRELATIVE_INCLUDE=\"${c4-lib}\""
|
|
|
|
$out/bin/plantuml -help
|
|
'';
|
|
|
|
passthru.tests.example-c4-diagram =
|
|
runCommand "c4-plantuml-sample.png" { nativeBuildInputs = [ plantuml-c4 ]; }
|
|
''
|
|
sed 's/https:.*\///' "${c4-lib}/samples/C4_Context Diagram Sample - enterprise.puml" > sample.puml
|
|
plantuml sample.puml -o $out
|
|
|
|
sed 's/!include ..\//!include /' ${sprites}/examples/complex-example.puml > sprites.puml
|
|
plantuml sprites.puml -o $out
|
|
'';
|
|
|
|
meta = with lib; {
|
|
description = "PlantUML bundled with C4-Plantuml and plantuml sprites library";
|
|
mainProgram = "plantuml";
|
|
homepage = "https://github.com/plantuml-stdlib/C4-PlantUML";
|
|
license = licenses.mit;
|
|
maintainers = with maintainers; [
|
|
tfc
|
|
anthonyroussel
|
|
];
|
|
platforms = platforms.unix;
|
|
};
|
|
}
|