baz/doc/LOADER.md
Ari Archer 2cc08e9f05
6.2.0 : rewrite the loader in C89
i will keep maintaining the bash one too for people who dont want to
install a c compiler

Signed-off-by: Ari Archer <ari.web.xyz@gmail.com>
2023-02-19 15:37:59 +02:00

3 KiB

baz loader specification

this specification goes for baz v5.4.0 and up

environment variables

there should be at least these environment variables :

  • BAZ_LOADER_VERSION -- your baz plugin loader version, should be the same as baz version

functions

most function names can be mangled, only these cannot :

  • baz_load_plugin_low <plugin-directory> -- this function takes plugin-directory as its argument and loads that plugin ( keep in mind THIS IS A VERY INPUT-SENSITIVE function, read more in baz help )
  • baz_loader -- the loader "main" function

conditions

your plugin loader should take these environment variables into consideration at runtime :

  • BAZ_LOADER_ENABLED -- if this environment variable is not set, you should not start loading your plugins
  • BAZ_DEBUG_LOAD -- this should log what its loading if logging is enabled

pre-processor

  • all expansions should be #{...} ( e.g. #{BAZ_VER} )

your pre-processor variables are only going to be used for your loader, if you want, here are some nice variables to have:

  • BAZ_DATA_DIR -- the baz data directory ( ~/.local/share/baz/ )
  • BAZ_PLUG_DIR -- the baz plugin directory ( $BAZ_PLUG_DIR/plugins )
  • BAZ_RDELIM -- random delimiter to be used in environment variable expansion
  • BAZ_VER -- baz version
  • BAZ_LOGGING_FN -- if logging is enabled -- the logging function for the loader, else pass
    • logging is enabled if BAZ_LOGGING_ENABLED is set
  • BAZ_LOG -- if logging is enabled -- call the logging function, else pass
  • BAZ_NOP -- expands to : if BAZ_ENSURE_OK is set at pre-processing step
  • BAZ_RD -- expands to read -rd ''

the pre-processor should also handle optimisation of size and mangling of function names, it pre-processes *.sht (Shell Template) files

function name mangling

the pre-processor should mangle all function names starting with _, the mangle can be anything, but preferred is .<incremental number starting from 0>, for example: .0, .1 and so on

yes, BASH allows . in function names

directories and files

your loader should implement loading of all files and directories specified in the plugin structure documentation

licensing

preferred licenses :

load order

  • environment variables
  • commands
  • functions
  • aliases
  • runners
  • BASH completions
  • key bindings

tips