modularise ides workings
This commit is contained in:
parent
9248cc0945
commit
caa156daf4
6 changed files with 470 additions and 440 deletions
132
lib/cli.nix
Normal file
132
lib/cli.nix
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
{
|
||||
foldlAttrs,
|
||||
writeShellScriptBin,
|
||||
works,
|
||||
}:
|
||||
let
|
||||
runAll = foldlAttrs (
|
||||
acc: name: works:
|
||||
acc + "${works.runner}/bin/run\n"
|
||||
) "" works;
|
||||
runFns = foldlAttrs (
|
||||
acc: name: works:
|
||||
acc
|
||||
+ ''
|
||||
function run-${name}() {
|
||||
${works.runner}/bin/run
|
||||
}
|
||||
''
|
||||
) "" works;
|
||||
cleanAll = foldlAttrs (
|
||||
acc: name: works:
|
||||
acc + "${works.cleaner}/bin/clean\n"
|
||||
) "" works;
|
||||
cleanFns = foldlAttrs (
|
||||
acc: name: works:
|
||||
acc
|
||||
+ ''
|
||||
function clean-${name}() {
|
||||
${works.cleaner}/bin/clean
|
||||
}
|
||||
''
|
||||
) "" works;
|
||||
names = foldlAttrs (
|
||||
acc: name: _:
|
||||
acc ++ [ name ]
|
||||
) [ ] works;
|
||||
help = ''
|
||||
[ides]: use "ides [action] [target]" to control services.
|
||||
actions:
|
||||
start synonyms: run r
|
||||
- start a service
|
||||
|
||||
stop synonyms: s clean et-tu
|
||||
- stop a service
|
||||
|
||||
restart synonyms: qq
|
||||
- stop and then restart all services
|
||||
|
||||
targets synonyms: t
|
||||
- print a list of available targets
|
||||
|
||||
help
|
||||
- print this helpful information
|
||||
|
||||
target names are the same as the attribute used to define a service.
|
||||
an empty target will execute the action on all available services.
|
||||
|
||||
current targets:
|
||||
'';
|
||||
in
|
||||
writeShellScriptBin "ides" ''
|
||||
targets=(${builtins.concatStringsSep " " names})
|
||||
|
||||
function print-help() {
|
||||
printf '${help}'
|
||||
list-targets
|
||||
}
|
||||
|
||||
function list-targets() {
|
||||
echo ''${targets[@]}
|
||||
}
|
||||
|
||||
function check-target() {
|
||||
found=1
|
||||
for target in "''${targets[@]}"; do
|
||||
if [ "$1" == "$target" ]; then
|
||||
found=0
|
||||
break
|
||||
fi
|
||||
done
|
||||
printf $found
|
||||
}
|
||||
|
||||
${runFns}
|
||||
|
||||
function run-all() {
|
||||
${runAll}
|
||||
}
|
||||
|
||||
${cleanFns}
|
||||
|
||||
function clean-all() {
|
||||
${cleanAll}
|
||||
}
|
||||
|
||||
function action() {
|
||||
action=$1
|
||||
if [[ $# -gt 1 ]]; then
|
||||
shift
|
||||
for service in "$@"; do
|
||||
if [[ $(check-target $service) -eq 0 ]]; then
|
||||
$action-$service
|
||||
else
|
||||
echo "[ides]: no such target: $service"
|
||||
fi
|
||||
done
|
||||
else
|
||||
$action-all
|
||||
fi
|
||||
}
|
||||
|
||||
case $1 in
|
||||
start|run|r)
|
||||
shift
|
||||
action run $@
|
||||
;;
|
||||
clean|stop|et-tu|s)
|
||||
shift
|
||||
action clean $@
|
||||
;;
|
||||
restart|qq)
|
||||
clean-all
|
||||
run-all
|
||||
;;
|
||||
targets|t)
|
||||
list-targets
|
||||
;;
|
||||
-h|h|help|*)
|
||||
print-help
|
||||
;;
|
||||
esac
|
||||
''
|
||||
Loading…
Add table
Add a link
Reference in a new issue