tvl-depot/users/Profpatsch/haskell-module-deps/default.nix
Profpatsch 6324f586c9 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 <mail@profpatsch.de>
Reviewed-by: Profpatsch <mail@profpatsch.de>
2022-12-29 15:52:16 +00:00

55 lines
1.7 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ 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 its 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
;
}