6cee6e9d87
patterns matching the files which should not figure in module-list.nix. svn path=/nixos/branches/modular-nixos/; revision=15941
68 lines
1.4 KiB
Bash
Executable file
68 lines
1.4 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
prog=$0
|
|
|
|
usage(){
|
|
echo 1>&2 "
|
|
$prog module-dir
|
|
|
|
This script generates the \`module-list.nix' 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
|
|
}
|
|
|
|
find_mask(){
|
|
local maskfile="$1"
|
|
if test -r "${maskfile}"; then
|
|
cat "${maskfile}"
|
|
echo
|
|
echo "./module-list.nix"
|
|
else
|
|
echo "./module-list.nix"
|
|
fi | \
|
|
sed -ne 's/[ ]*#.*//; /^[ ]*$/ d; s/\(.*\)/-wholename '"'\1'"' -or /p' | tr -d '\n'
|
|
}
|
|
|
|
generate_index(){
|
|
local path="$1"
|
|
cd "$path"
|
|
echo -n "$path: " 1>&2
|
|
{ echo "[ # This file has been generated by $(basename $prog)";
|
|
for file in : $(eval find ./ $(find_mask ./module-list.mask) -type f -name "'*.nix'" -print | sort); 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/^/# /; s,$(pwd),.,"
|
|
fi
|
|
done
|
|
echo ']';
|
|
} > ./module-list.nix
|
|
echo 1>&2
|
|
cd - > /dev/null
|
|
}
|
|
|
|
[ $# -eq 1 ] || usage;
|
|
|
|
generate_index "$1"
|