saturnin.skel 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #!/bin/bash
  2. . $(ffoom path) || exit 3
  3. ffoo import exit
  4. ffoo import inigrep
  5. ffoo import pretty
  6. #
  7. # =====BEGIN BUILT PART=====
  8. #
  9. FFOO_INIGREP_PATH="$(
  10. inigrep__mkpath \
  11. __SATURNIN_CONFIG_USER__/ini.d \
  12. __SATURNIN_CONFIG_USER__ \
  13. __SATURNIN_CONFIG_LOCAL__ \
  14. __SATURNIN_SHARE__/ini.d
  15. )"
  16. FFOO_PATH="__SATURNIN_FFOO_DIR__"
  17. FFOO_PRETTY_USAGE="subcommand"
  18. SATURNIN_CACHE_HOME="__SATURNIN_CACHE_HOME__"
  19. SATURNIN_LIBEXEC="__SATURNIN_LIBEXEC__"
  20. SATURNIN_VERSION="__VERSION__"
  21. #
  22. # =====END BUILT PART=====
  23. #
  24. export FFOO_INIGREP_PATH FFOO_PATH FFOO_PRETTY_USAGE \
  25. SATURNIN_VERSION SATURNIN_CACHE_HOME
  26. usage() {
  27. mkusage "[-d|-v] command [args...]" \
  28. "help" \
  29. "--version"
  30. }
  31. print_help() {
  32. echo ""
  33. echo "built-in sub-commands:"
  34. echo ""
  35. echo " conf"
  36. echo " help"
  37. echo ""
  38. echo "installed sub-commands:"
  39. echo ""
  40. ls_subcommands | sed -e 's/^/ /'
  41. return "$FFOO_EXIT_OK"
  42. }
  43. ls_subcommands() {
  44. find "$SATURNIN_LIBEXEC" \
  45. -mindepth 1 \
  46. -maxdepth 1 \
  47. -executable \
  48. | sed -e 's/.*saturnin-//' \
  49. | sort
  50. }
  51. version_info() {
  52. echo "$(basename $0) (Smart and ready desktop helper) $SATURNIN_VERSION"
  53. exit $FFOO_EXIT_OK
  54. }
  55. run_hook() {
  56. inigrep -j -p hook.$SATURNIN_SUBCOMMAND.$1 \
  57. | debug_pipe hook_$1 \
  58. | bash
  59. }
  60. subcommand() {
  61. local sc_es=0 # future exit (return) status
  62. local lexpath="$SATURNIN_LIBEXEC/saturnin-$SATURNIN_SUBCOMMAND"
  63. debug -v lexpath
  64. debug "\$*='$*'"
  65. test -x "$lexpath" || {
  66. warn "invalid sub-command: $SATURNIN_SUBCOMMAND"
  67. print_help
  68. return $FFOO_EXIT_USAGE
  69. }
  70. run_hook pre
  71. "$lexpath" "$@" || return $?
  72. sc_es=$?
  73. run_hook post
  74. return $sc_es
  75. }
  76. while true; do case $1 in
  77. -d|--debug) export FFOO_DEBUG=true; shift ;;
  78. -v|--verbose) export FFOO_VERBOSE=true; shift ;;
  79. --version) version_info ;;
  80. --version-semver) echo "$SATURNIN_VERSION"; exit ;;
  81. -*) usage; ;;
  82. --*) usage; ;;
  83. --) shift; break ;;
  84. "") usage; ;;
  85. *) break; ;;
  86. esac done
  87. debug -v FFOO_PATH SATURNIN_LIBEXEC FFOO_INIGREP_PATH
  88. debug "\$*='$*'"
  89. export SATURNIN_SUBCOMMAND="$1"
  90. shift
  91. case "$SATURNIN_SUBCOMMAND" in
  92. conf) inigrep "$@" ;;
  93. help) print_help ;;
  94. _ls_subcommands) ls_subcommands ;;
  95. _lsfun) ffoom lsfun ;;
  96. _lsmod) ffoom lsmod ;;
  97. _ffrun) ffrun "$@" ;;
  98. *) subcommand "$@" ;;
  99. esac