initial commit
This commit is contained in:
commit
2c1bf5444e
6 changed files with 261 additions and 0 deletions
12
.gitignore
vendored
Normal file
12
.gitignore
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# direnv
|
||||||
|
.envrc
|
||||||
|
.direnv
|
||||||
|
|
||||||
|
# test d2
|
||||||
|
*.d2
|
||||||
|
|
||||||
|
# generated by d2
|
||||||
|
*.svg
|
||||||
|
|
||||||
|
# built
|
||||||
|
result/
|
42
README.md
Normal file
42
README.md
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# *W*rapped _d2_
|
||||||
|
|
||||||
|
A wrapper over [d2] which allows to use \`layout\`, \`theme\`, \`pad\`
|
||||||
|
attributes from d2 file. All arguments will be passed to the d2 cli, but these
|
||||||
|
additional configs overwrite cli arguments with the same name.
|
||||||
|
|
||||||
|
[d2]: https://github.com/terrastruct/d2
|
||||||
|
|
||||||
|
# Install
|
||||||
|
|
||||||
|
## Nix Flake
|
||||||
|
|
||||||
|
This repo is also packaged via Nix flakes, the language server binary package is
|
||||||
|
available through the default flake output `github:pleshevskiy/wd2` with the
|
||||||
|
path `bin/wd2`.
|
||||||
|
|
||||||
|
You can enable flakes support in your nix configuration, and then run nix
|
||||||
|
profile install `github:pleshevskiy/wd2` to get `wd2` installed. You can also
|
||||||
|
use this repository as a flake input and add its output to your own
|
||||||
|
flake-managed systemwide or home configuration.
|
||||||
|
|
||||||
|
## Other
|
||||||
|
|
||||||
|
Copy `wd2` script to `/usr/local/bin` folder.
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
|
||||||
|
Create a d2 file with additional configs at the top.
|
||||||
|
|
||||||
|
```d2
|
||||||
|
# layout: elk
|
||||||
|
# theme: 101
|
||||||
|
# pad: 5
|
||||||
|
|
||||||
|
x -> y -> z
|
||||||
|
```
|
||||||
|
|
||||||
|
Then run the `wd2` script
|
||||||
|
|
||||||
|
```sh
|
||||||
|
wd2 -w path/to/your/file.d2
|
||||||
|
```
|
90
flake.lock
Normal file
90
flake.lock
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667395993,
|
||||||
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667395993,
|
||||||
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1670827406,
|
||||||
|
"narHash": "sha256-nLNk7uiLbhbvb4TVz67XK7+Ezr1zcWYDWmNrWGmEUqA=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "ffca9ffaaafb38c8979068cee98b2644bd3f14cb",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1669261230,
|
||||||
|
"narHash": "sha256-AjddxRPd5y5jge77281P3O8+Cnafj842Xg59rwV4x+0=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "8e8b5f3b1e899bf5d250279578c0283705b8cdb4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"tools": "tools"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tools": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils_2",
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1670842919,
|
||||||
|
"narHash": "sha256-4SpFhzzGGg7yppVCZvx0rDdVScXc/m6rZe4BYnNoOQ4=",
|
||||||
|
"ref": "refs/heads/main",
|
||||||
|
"rev": "79301872e58bf199118ba163d95f54e6fbefcd75",
|
||||||
|
"revCount": 11,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.pleshevski.ru/mynix/tools"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.pleshevski.ru/mynix/tools"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
47
flake.nix
Normal file
47
flake.nix
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
tools.url = "git+https://git.pleshevski.ru/mynix/tools";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, flake-utils, tools, ... }:
|
||||||
|
let
|
||||||
|
inherit (builtins) readFile;
|
||||||
|
|
||||||
|
mkWd2 = { writeShellApplication, symlinkJoin, d2, ... }:
|
||||||
|
writeShellApplication {
|
||||||
|
name = "wd2";
|
||||||
|
runtimeInputs = [ d2 ];
|
||||||
|
text = (readFile ./wd2);
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
overlays = {
|
||||||
|
default = final: prev: {
|
||||||
|
wd2 = prev.callPackage mkWd2 { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} //
|
||||||
|
flake-utils.lib.eachDefaultSystem (system:
|
||||||
|
let
|
||||||
|
inherit (builtins) mapAttrs;
|
||||||
|
pkgs = import nixpkgs { inherit system; };
|
||||||
|
|
||||||
|
wd2 = pkgs.callPackage mkWd2 {
|
||||||
|
d2 = tools.packages.${system}.d2;
|
||||||
|
};
|
||||||
|
|
||||||
|
mkApp = drv: flake-utils.lib.mkApp { inherit drv; };
|
||||||
|
packages = {
|
||||||
|
inherit wd2;
|
||||||
|
default = wd2;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
check = packages;
|
||||||
|
|
||||||
|
inherit packages;
|
||||||
|
|
||||||
|
apps = mapAttrs (name: mkApp) packages;
|
||||||
|
});
|
||||||
|
}
|
1
result
Symbolic link
1
result
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/paxh7dav8nq2s5lvijq192kz3p7jhgas-wd2
|
69
wd2
Executable file
69
wd2
Executable file
|
@ -0,0 +1,69 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
d2_args=( )
|
||||||
|
d2_input_file=
|
||||||
|
|
||||||
|
function print_help() {
|
||||||
|
cat <<EOF
|
||||||
|
Usage:
|
||||||
|
wd2 [FLAGS...] file.d2 [file.svg | file.png]
|
||||||
|
|
||||||
|
A wrapper over d2 which allows to use \`layout\`, \`theme\`, \`pad\`
|
||||||
|
attributes from d2 file. All arguments will be passed to the d2 cli,
|
||||||
|
but these additional configs overwrite cli arguments with the
|
||||||
|
same name.
|
||||||
|
|
||||||
|
See \`d2 --help\` or \`man d2\` for detailed docs.
|
||||||
|
|
||||||
|
See more docs and the source code at https://oss.terrastruct.com/d2
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function parse_args() {
|
||||||
|
if [ "$#" == "0" ]; then
|
||||||
|
print_help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
while (( "$#" )); do
|
||||||
|
case "$1" in
|
||||||
|
--help)
|
||||||
|
print_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
# extract input file arg
|
||||||
|
*.d2)
|
||||||
|
d2_input_file="$1"
|
||||||
|
d2_args+=( "$1" )
|
||||||
|
;;
|
||||||
|
# other args
|
||||||
|
*)
|
||||||
|
d2_args+=( "$1" )
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_attr_value() {
|
||||||
|
head -n3 "$d2_input_file" | grep "$1" | awk '{ print $3 }'
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_args "$@"
|
||||||
|
|
||||||
|
if [ -z "$d2_input_file" ]; then
|
||||||
|
print_help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
d2_layout=$(get_attr_value "layout")
|
||||||
|
d2_theme=$(get_attr_value "theme")
|
||||||
|
d2_pad=$(get_attr_value "pad")
|
||||||
|
|
||||||
|
d2 "${d2_args[@]}" \
|
||||||
|
${d2_layout:+--layout ${d2_layout}} \
|
||||||
|
${d2_theme:+--theme ${d2_theme}} \
|
||||||
|
${d2_pad:+--pad ${d2_pad}}
|
||||||
|
|
Loading…
Reference in a new issue