[ Frobulator // Project Page ] [ Version // 05-31-2026 ]
Frobulator is a custom shell parser and scripting function library: Frobulate all the things!
Frobulator is easy to use and understand and is meant to help streamline your shell scripting projects while providing you with:
…all while making redundant and complex code bits a thing of the past!
The current set of assertions upon which Frobulator is built restricts its functionality to scripts exclusively, at least for the time being.
. "${HOME}"/.local/bin/frobulator
#!/bin/bash
# dependencies /////////////////////////////////////////////////////////////////
if [ -f "${HOME}"/.local/bin/frobulator ]
then
rm -r -f "${HOME}"/.local/bin/frobulator
fi
if [[ -z $(command -v frobulator) ]]
then
if [[ $(id -u -n) = "root" ]]
then
SUDO_HOME=/root
USER="${SUDO_USER}"
HOME=/home/"${USER}"
fi
if [[ -z $(command -v curl) ]]
then
yes | apt-get install curl
fi
if [ ! -d "${HOME}"/.local/bin ]
then
mkdir -p "${HOME}"/.local/bin
fi
curl -s -L get.frbltr.app > "${HOME}"/.local/bin/frobulator
chmod +x "${HOME}"/.local/bin/frobulator
fi
. "${HOME}"/.local/bin/frobulator
# superuser ////////////////////////////////////////////////////////////////////
export self_arguments="${@}"
frobulator.escalate
# script ///////////////////////////////////////////////////////////////////////
script=$(basename -- "${BASH_SOURCE[0]}")
# version //////////////////////////////////////////////////////////////////////
version="MM-DD-YY"
# usage ////////////////////////////////////////////////////////////////////////
# prompt ///////////////////////////////////////////////////////////////////////
frobulator.script "Setting up ${script#*-}"
# variables ////////////////////////////////////////////////////////////////////
# defaults /////////////////////////////////////////////////////////////////////
# functions ////////////////////////////////////////////////////////////////////
clears and rewrites prompt output above the current cursor position.
frobulator.plo 1
normalizes prompt strings, handles span padding, and folds long lines.
frobulator.pmt "Downloading" "[ package.tar.gz ]"
generic color engine used by the named color wrappers.
frobulator.color blue "Building" "[ frobulator ]"
All color wrappers use the same prompt formatting rules as frobulator.color.
| command | example |
|---|---|
frobulator.black |
frobulator.black "Highlighted" "[ value ]" |
frobulator.silver |
frobulator.silver "Highlighted" "[ value ]" |
frobulator.grey |
frobulator.grey "Highlighted" "[ value ]" |
frobulator.white |
frobulator.white "Highlighted" "[ value ]" |
frobulator.red |
frobulator.red "Highlighted" "[ value ]" |
frobulator.crimson |
frobulator.crimson "Highlighted" "[ value ]" |
frobulator.green |
frobulator.green "Highlighted" "[ value ]" |
frobulator.lime |
frobulator.lime "Highlighted" "[ value ]" |
frobulator.yellow |
frobulator.yellow "Highlighted" "[ value ]" |
frobulator.orange |
frobulator.orange "Highlighted" "[ value ]" |
frobulator.blue |
frobulator.blue "Highlighted" "[ value ]" |
frobulator.navy |
frobulator.navy "Highlighted" "[ value ]" |
frobulator.magenta |
frobulator.magenta "Highlighted" "[ value ]" |
frobulator.purple |
frobulator.purple "Highlighted" "[ value ]" |
frobulator.fuschia |
frobulator.fuschia "Highlighted" "[ value ]" |
frobulator.pink |
frobulator.pink "Highlighted" "[ value ]" |
frobulator.aqua |
frobulator.aqua "Highlighted" "[ value ]" |
frobulator.teal |
frobulator.teal "Highlighted" "[ value ]" |
These commands print standard frobulator markers using their configured colors. Most prompt marker commands accept a message, an optional detail string, and an optional fill character.
| command | purpose | example |
|---|---|---|
frobulator.nil |
empty marker line | frobulator.nil "Message" "[ detail ]" |
frobulator.inf |
information line | frobulator.inf "Message" "[ detail ]" |
frobulator.wrn |
warning line | frobulator.wrn "Message" "[ detail ]" |
frobulator.msg |
message line | frobulator.msg "Message" "[ detail ]" |
frobulator.add |
add/create line | frobulator.add "Message" "[ detail ]" |
frobulator.rem |
remove/delete line | frobulator.rem "Message" "[ detail ]" |
frobulator.ret |
retain/keep line | frobulator.ret "Message" "[ detail ]" |
frobulator.rel |
release line | frobulator.rel "Message" "[ detail ]" |
frobulator.fwd |
forward/progress line | frobulator.fwd "Message" "[ detail ]" |
frobulator.rev |
reverse/back line | frobulator.rev "Message" "[ detail ]" |
frobulator.stp |
stop line | frobulator.stp "Message" "[ detail ]" |
frobulator.dwl |
download line | frobulator.dwl "Message" "[ detail ]" |
frobulator.upl |
upload line | frobulator.upl "Message" "[ detail ]" |
frobulator.lnk |
link line | frobulator.lnk "Message" "[ detail ]" |
frobulator.scs |
success line | frobulator.scs "Message" "[ detail ]" |
frobulator.err |
error line | frobulator.err "Message" "[ detail ]" |
frobulator.ins |
insert/input line | frobulator.ins "Message" "[ detail ]" |
frobulator.cpt |
complete line | frobulator.cpt "Message" "[ detail ]" |
frobulator.url |
url line | frobulator.url "https://example.com" |
frobulator.ask |
question prompt (no newline) | frobulator.ask "Enter value" |
frobulator.ipt |
input prompt (no newline) | frobulator.ipt "Enter value" |
frobulator.usr |
user prompt (no newline) | frobulator.usr "Enter value" |
frobulator.nul |
continue line, retain color | frobulator.nul "continued output" |
frobulator.ind |
continue line, clear color | frobulator.ind "continued output" |
Most frobulator prompt commands accept either direct string arguments or array-expanded arguments.
Direct arguments:
frobulator.inf "Checking dependencies" "[ curl ]"
Array arguments:
prompt_arguments=(
"Checking dependencies"
"[ curl ]"
)
frobulator.inf "${prompt_arguments[@]}"
Output:
[ i ] Checking dependencies ///////////////////////////////// [ curl ]
This pattern applies to most commands that forward their arguments through frobulator.pmt, including color commands, marker commands, and structured prompt helpers.
Arguments may be provided as:
Examples:
message="Checking dependencies"
detail="[ curl ]"
frobulator.inf \
"${message}" \
"${detail}"
package=$(basename "${archive_path}")
frobulator.inf \
"Processing package" \
"[ ${package} ]"
prompt_arguments=(
"Checking dependencies"
"[ curl ]"
)
frobulator.inf "${prompt_arguments[@]}"
frobulator.inf \
"Current user" \
"[ $(frobulator.user) ]"
All argument types are normalized internally through frobulator.pmt, allowing prompt formatting, alignment, wrapping, and span generation to remain consistent regardless of how values are supplied.
### frobulator.prompt
generic marker/color prompt engine used by status marker wrappers.
```bash
frobulator.prompt blue "${marker_inf}" true "" set "Building" "[ frobulator ]"
prints a lettered step marker.
frobulator.ltr "a" "Select source directory"
prints a numbered step marker.
frobulator.num "1" "Install dependencies"
prints a separator line.
frobulator.sep
prints a framed notice block.
frobulator.ntf round inf "Notice" "The setup process is ready."
prints a larger separation block for prompts or warnings.
frobulator.separate
captures user input after prompt helpers.
frobulator.ask "Continue?" "[ y/n ]"
frobulator.read
prints a script startup banner.
frobulator.script "Setting up ${script#*-}"
types text gradually for prompt effects.
frobulator.type 0.03 "Preparing environment..."
shows a timeout marker for a number of seconds.
frobulator.timeout 5
clears prompt output during checkpointed script paging.
frobulator.clear
shows a countdown before continuing.
frobulator.countdown 10 "Starting install" "[ press ctrl+c to cancel ]"
waits on a background process and prints process completion feedback.
apt-get update &
frobulator.process "Updating package index"
waits on a background process and prints ongoing progress feedback.
curl -L "${url}" -o "${file}" &
frobulator.progress "Downloading" "[ ${file} ]"
runs a command with an estimated progress bar.
frobulator.bar sleep 5
creates temporary directories from a string or array.
frobulator.temporary "build"
registers cleanup handling for temporary runtime resources.
frobulator.temporary "build"
frobulator.trap
evaluates and reports the previous command exit status.
make all
frobulator.continue
runs a command and reports completion through frobulator status output.
frobulator.complete "make all"
creates directories from a path/name or array.
frobulator.directory "${HOME}/.config" "frobulator"
appends content to files.
frobulator.write "enabled=true" "${HOME}/.config/frobulator" "config"
overwrites content to files, useful for checkpoint flags.
frobulator.flag "ready" "${temporary_directory}" "checkpoint"
creates files from a path/name or array.
frobulator.file "${HOME}/.config/frobulator" "config"
keeps selected files and removes unselected files from a directory.
frobulator.keep "${HOME}/Downloads" "important.zip"
deletes selected files from a directory.
frobulator.delete "${temporary_directory}" "old-file.tmp"
copies files or directories.
frobulator.copy "${source_directory}" "${target_directory}" "config"
moves files or directories.
frobulator.move "${source_directory}" "${target_directory}" "archive.tar.gz"
creates symbolic links.
frobulator.link "${source_directory}" "${target_directory}" "config"
handles image-related output/operations.
frobulator.image "${image_file}"
validates HTTP status before network operations.
frobulator.http "https://example.com/file.tar.gz"
parses HTTP status responses for download/upload flows.
frobulator.status "https://example.com/file.tar.gz"
downloads files after status verification.
frobulator.download "https://example.com/file.tar.gz" "${download_directory}" "file.tar.gz"
uploads data or files.
frobulator.upload POST "https://example.com/upload" "${archive_file}"
runs a command with all output redirected to the sink.
frobulator.silence "apt-get update"
runs a command and redirects output to a timestamped log.
frobulator.log "apt-get install curl"
captures masked password input.
frobulator.password
captures and validates user input against an array.
options=( "one" "two" "three" )
frobulator.input options
generates desktop dialogs through supported desktop helpers.
frobulator.dialog "info" "Setup complete"
runs package-manager cleanup.
frobulator.clean
marks packages as held/frozen.
frobulator.hold "firefox-esr"
removes package hold/freeze state.
frobulator.release "firefox-esr"
updates package sources before installing to avoid missing package errors.
frobulator.failsafe "curl"
installs packages.
frobulator.install "curl"
checks and installs required packages.
frobulator.require "curl"
reinstalls packages.
frobulator.reinstall "curl"
updates package lists.
frobulator.update
upgrades installed packages.
frobulator.upgrade
purges packages.
frobulator.purge "unused-package"
forcefully terminates processes.
frobulator.terminate "rogue-process"
exits a process/program instance with frobulator messaging.
frobulator.exit "setup"
reports checkpoint result status.
frobulator.result "${checkpoint_file}"
prints the active shell user.
frobulator.user
assesses privileges and requirements.
requirements=( curl git )
frobulator.assess requirements
relaunches the current script as superuser.
export self_arguments="${@}"
frobulator.escalate
creates archives for backup or packaging.
frobulator.archive "backup.tar.gz" "gz" "${HOME}/Documents"
extracts known archive types.
frobulator.extract "backup.tar.gz" "${target_directory}"
frobulator.plo
frobulator.pmt
frobulator.color
frobulator.black
frobulator.silver
frobulator.grey
frobulator.white
frobulator.red
frobulator.crimson
frobulator.green
frobulator.lime
frobulator.yellow
frobulator.orange
frobulator.blue
frobulator.navy
frobulator.magenta
frobulator.purple
frobulator.fuschia
frobulator.pink
frobulator.aqua
frobulator.teal
frobulator.prompt
frobulator.nil
frobulator.inf
frobulator.wrn
frobulator.msg
frobulator.add
frobulator.rem
frobulator.ret
frobulator.rel
frobulator.fwd
frobulator.rev
frobulator.stp
frobulator.dwl
frobulator.upl
frobulator.lnk
frobulator.scs
frobulator.err
frobulator.ins
frobulator.cpt
frobulator.url
frobulator.ask
frobulator.ipt
frobulator.usr
frobulator.nul
frobulator.ind
frobulator.ltr
frobulator.num
frobulator.sep
frobulator.ntf
frobulator.separate
frobulator.read
frobulator.script
frobulator.type
frobulator.timeout
frobulator.clear
frobulator.countdown
frobulator.process
frobulator.progress
frobulator.bar
frobulator.temporary
frobulator.trap
frobulator.continue
frobulator.complete
frobulator.directory
frobulator.write
frobulator.flag
frobulator.file
frobulator.keep
frobulator.delete
frobulator.copy
frobulator.move
frobulator.link
frobulator.image
frobulator.http
frobulator.status
frobulator.download
frobulator.upload
frobulator.silence
frobulator.log
frobulator.password
frobulator.input
frobulator.clean
frobulator.hold
frobulator.release
frobulator.failsafe
frobulator.install
frobulator.require
frobulator.reinstall
frobulator.update
frobulator.upgrade
frobulator.purge
frobulator.dialog
frobulator.terminate
frobulator.exit
frobulator.result
frobulator.user
frobulator.assess
frobulator.escalate
frobulator.archive
frobulator.extract
The following projects incorporate Frobulator in their usage:
[ Mecha // Blocks // Project Page ]
[ Nathanel + Titane // Project Page ]
GNU/Bash as the shell environment on top of which the scripts function.
Submit bug report or feature request
[ Frobulator // Project Page ] [ Version // 05-31-2026 ]