56 lines
1.1 KiB
Bash
56 lines
1.1 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
prog=$0
|
||
|
|
||
|
usage(){
|
||
|
echo 1>&2 "
|
||
|
$prog module-dir
|
||
|
|
||
|
This script generate the index file inside the module directory.
|
||
|
"
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
: ${NIXPKGS=/etc/nixos/nixpkgs}
|
||
|
|
||
|
is_module(){
|
||
|
local file=$1
|
||
|
echo "
|
||
|
let
|
||
|
appIfFun = f: x: if builtins.isFunction f then f x else f;
|
||
|
in
|
||
|
builtins.isAttrs (
|
||
|
appIfFun (import $file) {
|
||
|
pkgs = (import $NIXPKGS) {};
|
||
|
config = {};
|
||
|
dummy = 42;
|
||
|
}
|
||
|
)
|
||
|
" | nix-instantiate - --eval-only
|
||
|
}
|
||
|
|
||
|
generate_index(){
|
||
|
local path="$1"
|
||
|
cd "$path"
|
||
|
echo -n "$path: " 1>&2
|
||
|
{ echo "[ # This file have been generated by $(basename $prog)";
|
||
|
for file in : $(find ./ -wholename '*.impl[./]*' -or -wholename './module-list.nix' -or -type f -name '*.nix' -print); do
|
||
|
[ "$file" = ':' ] && continue;
|
||
|
echo -n . 1>&2
|
||
|
if test "$(is_module "$file" 2> /dev/null)" = "Bool(True)"; then
|
||
|
echo " $file"
|
||
|
else
|
||
|
echo "##### $file"
|
||
|
is_module "$file" 2>&1 | sed 's/^/# /'
|
||
|
fi
|
||
|
done
|
||
|
echo ']';
|
||
|
} > ./module-list.nix
|
||
|
echo 1>&2
|
||
|
cd - > /dev/null
|
||
|
}
|
||
|
|
||
|
[ $# -eq 1 ] || usage;
|
||
|
|
||
|
generate_index "$1"
|