From 6324f586c9b96a33da50649d19193f80ac6685de Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Thu, 29 Dec 2022 15:08:02 +0100 Subject: feat(users/Profpatsch/haskell-module-deps): init Three small helper functions that can display module graphs of haskell projects. Change-Id: I7395ffc8b025f4322efc6c1e494e6a6a0145342c Reviewed-on: https://cl.tvl.fyi/c/depot/+/7675 Tested-by: BuildkiteCI Autosubmit: Profpatsch Reviewed-by: Profpatsch --- users/Profpatsch/haskell-module-deps/default.nix | 55 +++++++++++++++++++++ .../example-output-dhall-haskell.png | Bin 0 -> 415873 bytes 2 files changed, 55 insertions(+) create mode 100644 users/Profpatsch/haskell-module-deps/default.nix create mode 100644 users/Profpatsch/haskell-module-deps/example-output-dhall-haskell.png diff --git a/users/Profpatsch/haskell-module-deps/default.nix b/users/Profpatsch/haskell-module-deps/default.nix new file mode 100644 index 000000000000..71cc0a5b0d31 --- /dev/null +++ b/users/Profpatsch/haskell-module-deps/default.nix @@ -0,0 +1,55 @@ +{ depot, pkgs, lib, ... }: + +let + bins = depot.nix.getBins pkgs.zathura [ "zathura" ] + // depot.nix.getBins pkgs.haskellPackages.graphmod [ "graphmod" ] + // depot.nix.getBins pkgs.graphviz [ "dot" ] + ; + + # Display a graph of all modules in a project and how they depend on each other. + # Takes the project directory as argument. + # Open in zathura. + haskell-module-deps = depot.nix.writeExecline "haskell-module-deps" { } [ + "pipeline" + [ haskell-module-deps-with-filetype "pdf" "$@" ] + bins.zathura + "-" + ]; + + # Display a graph of all modules in a project and how they depend on each other. + # Takes the project directory as argument. + # Print a png to stdout. + haskell-module-deps-png = depot.nix.writeExecline "haskell-module-deps-png" { } [ + haskell-module-deps-with-filetype + "png" + "$@" + ]; + + # Display a graph of all modules in a project and how they depend on each other. + # Takes the file type to generate as first argument + # and the project directory as second argument. + haskell-module-deps-with-filetype = pkgs.writers.writeBash "haskell-module-deps-with-filetype" '' + set -euo pipefail + shopt -s globstar + filetype="$1" + rootDir="$2" + ${bins.graphmod} \ + ${/*silence warnings for missing external dependencies*/""} \ + --quiet \ + ${/*applies some kind of import simplification*/""} \ + --prune-edges \ + "$rootDir"/src/**/*.hs \ + | ${bins.dot} \ + ${/*otherwise it’s a bit cramped*/""} \ + -Gsize="20,20!" \ + -T"$filetype" + ''; + +in +depot.nix.readTree.drvTargets { + inherit + haskell-module-deps + haskell-module-deps-png + haskell-module-deps-with-filetype + ; +} diff --git a/users/Profpatsch/haskell-module-deps/example-output-dhall-haskell.png b/users/Profpatsch/haskell-module-deps/example-output-dhall-haskell.png new file mode 100644 index 000000000000..53725c49e8d1 Binary files /dev/null and b/users/Profpatsch/haskell-module-deps/example-output-dhall-haskell.png differ -- cgit 1.4.1