make defaults configurable

This commit is contained in:
fatalerrors
2026-04-15 13:38:08 +02:00
parent 85f02f4498
commit 9a006883b8
11 changed files with 269 additions and 40 deletions

View File

@@ -12,26 +12,71 @@ PAGER=less
TERM=xterm-256color
[compress]
# Section used by compress.sh
# Section used by compress.sh (taz and utaz functions).
# taz: Default archive format when -f/--format is not specified.
# Supported values: lz (default), xz, bz2, gz, lzo, tar
#TAZ_DEFAULT_FORMAT=lz
# taz: Default number of compression threads when -p/--parallel is not specified.
# Set to the number of CPU cores to use parallel compression where supported.
#TAZ_DEFAULT_THREADS=1
# taz: Default compression level when none is given (1=fast/big .. 9=slow/small).
#TAZ_DEFAULT_LEVEL=6
# utaz: Delete source archives after successful extraction (0=no, 1=yes).
#UTAZ_DEFAULT_DELETE=0
# utaz: Default directory creation mode when neither --create-dir nor --no-dir is given.
# Supported values:
# auto (default) — create a subdirectory only when the archive contains
# multiple top-level entries or a bare file
# always — always extract into a new subdirectory
# never — always flatten extraction into the current directory
#UTAZ_DEFAULT_DIR_MODE=auto
[debug]
# Section used by debug.sh
# Section used by debug.sh (nothing yet)
[disp]
# Section used by disp.sh
# Set to any value to disable colors in internal profile output (not controling binary output)
# NO_COLOR=1
[filefct]
# Section used by filefct.sh
# expandlist: Default output separator between items (default: space).
# Use \n for newline, or any other character/string.
#EXPANDLIST_DEFAULT_SEPARATOR=" "
# clean: Enable recursive mode by default (0=no, 1=yes).
#CLEAN_DEFAULT_RECURSIVE=0
# rmspc: Default character used to replace spaces in filenames (default: underscore).
# Set to empty to concatenate words without separator (equivalent to --subst-char with no value).
#RMSPC_DEFAULT_CHAR=_
# findbig: Default number of results to return (default: 10).
#FINDBIG_DEFAULT_LIMIT=10
[fun]
# Section used by fun.sh
# Section used by fun.sh (busy function).
# busy: Default hex pattern to search for in /dev/urandom hexdump (default: "ca fe").
#BUSY_DEFAULT_PATTERN=ca fe
# busy: Default delay between matched lines in milliseconds (default: 0 = no delay).
#BUSY_DEFAULT_DELAY=0
[info]
# Section used by info.sh
# Default city for weather forcast and local news
DEFAULT_CITY="Toulouse"
# meteo: Default city used when no city argument is given.
# Unset or empty disables the fallback and requires an explicit city argument.
METEO_DEFAULT_CITY="Toulouse"
[lang]
# Section used by lang.sh
@@ -40,23 +85,136 @@ DEFAULT_CITY="Toulouse"
SET_LOCALE="fr:fr_FR.UTF-8,us:en_US.UTF-8"
[net]
# Section used by net.sh
# Section used by net.sh (dwl, myextip functions).
# dwl: Force a specific download tool instead of auto-detecting (curl → wget → fetch).
# Supported values: curl, wget, fetch. Unset uses auto-detection (default).
#DWL_PREFERRED_TOOL=curl
# myextip: API endpoint URL used to retrieve external IP information.
# Default: https://ip-api.com/json/
# Compatible alternatives: https://ipinfo.io/json, https://ip-api.com/json/
#MYEXTIP_DEFAULT_URL=https://ip-api.com/json/
[packages]
# Section used by packages.sh
# pkgs: Enable case-insensitive search by default (1=yes, 0=no; default: 0).
#PKGS_DEFAULT_IGNORE_CASE=0
[processes]
# Section used by processes.sh
# ppu: Output columns passed to ps -o when listing processes for a user.
# Comma-separated list of ps field names. Default: pid,user,%cpu,%mem,start,time,command
#PPU_DEFAULT_FORMAT=pid,user,%cpu,%mem,start,time,command
# ku: Signal sent to processes when killing a user's session (default: TERM).
# Use signal names without the SIG prefix (e.g. TERM, KILL, HUP).
#KU_DEFAULT_SIGNAL=TERM
[prompt]
# Section used by prompt.sh
# Name of the theme to load, or an explicit path to a .theme file.
# Bare names are resolved as $PROMPT_THEME_DIR/<name>.theme.
# When unset, no theme is loaded and the hardcoded fallback colours are used.
#PROMPT_THEME=default
# Directory that contains .theme files. Defaults to profile.d/themes/ inside
# the profile installation directory.
#PROMPT_THEME_DIR=/path/to/themes
# Individual colour overrides. These always win over the loaded theme.
# Values must be valid ANSI escape sequences as exported by disp.sh, e.g.:
# \e[0;34m (Blue) \e[42m (On_Green) \e[1;32m (BGreen)
# All keys listed below correspond to variables exported by disp.sh.
# Clock segment
#PROMPT_COLOR_TIME_FG=$Blue
#PROMPT_COLOR_TIME_BG=$On_IBlack
# Main bar background (success and info)
#PROMPT_COLOR_BAR_BG=$On_Blue
# Exit-code segment — success state
#PROMPT_COLOR_OK_FG=$White
#PROMPT_COLOR_OK_MARK=$Green
# Exit-code segment — failure state
#PROMPT_COLOR_ERR_BG=$On_Red
#PROMPT_COLOR_ERR_FG=$White
#PROMPT_COLOR_ERR_MARK=$BYellow
# User/host colours
#PROMPT_COLOR_ROOT_FG=$Red
#PROMPT_COLOR_USER_FG=$Green
# Working directory
#PROMPT_COLOR_DIR_FG=$ICyan
[pwd]
# Section used by pwd.sh
# Section used by pwd.sh (genpwd and pwdscore functions).
# genpwd: Default password length (default: 16).
#GENPWD_DEFAULT_LENGTH=16
# genpwd: Maximum occurrences of any single character (default: 2).
#GENPWD_DEFAULT_OCCURS=2
# genpwd: Number of passwords generated when no count argument is given (default: 1).
#GENPWD_DEFAULT_COUNT=1
# genpwd: Include symbols in the character pool (1=yes, 0=no; default: 1).
#GENPWD_DEFAULT_SYMBOLS=1
# genpwd: Include uppercase letters in the character pool (1=yes, 0=no; default: 1).
#GENPWD_DEFAULT_UPPERCASE=1
# genpwd: Include lowercase letters in the character pool (1=yes, 0=no; default: 1).
#GENPWD_DEFAULT_LOWERCASE=1
# genpwd: Include digits in the character pool (1=yes, 0=no; default: 1).
#GENPWD_DEFAULT_NUMBERS=1
# pwdscore: Show verbose breakdown by default (1=yes, 0=no; default: 0).
#PWDSCORE_DEFAULT_VERBOSE=0
[rain]
# Section used by rain.sh
# Section used by rain.sh (rain and matrix functions).
# rain: Default speed value, using the /100 scale (5 => 0.050s, 10 => 0.100s).
# Values < 1 are interpreted as raw seconds.
#RAIN_DEFAULT_SPEED=5
# rain: Default color theme.
# Supported values: white (default), green, blue, red, yellow, cyan
#RAIN_DEFAULT_COLOR=white
# matrix: Default speed value, using the /100 scale (3.5 => 0.035s).
#MATRIX_DEFAULT_SPEED=3.5
# matrix: Default color theme.
# Supported values: green (default), blue, red, yellow, cyan, white
#MATRIX_DEFAULT_COLOR=green
# matrix: Default character set.
# Supported values: binary (default), kana, ascii
MATRIX_DEFAULT_CHARSET=kana
[ssh]
# Section used by ssh.sh
# ssr: Default SSH options prepended to every ssr invocation.
# Options are word-split, so space-separated flags are supported.
# The default behaviour without this key is equivalent to: SSH_DEFAULT_OPT=-Y
# Set to an empty value to pass no default options.
# Examples:
# SSH_DEFAULT_OPT=-Y # X11 forwarding (original default)
# SSH_DEFAULT_OPT=-Y -o StrictHostKeyChecking=accept-new
# SSH_DEFAULT_OPT= # no default options
#SSH_DEFAULT_OPT=-Y
[updates]
# Section used by updates.sh

View File

@@ -204,6 +204,15 @@ utaz()
local FILES=("$@")
[[ ${#FILES[@]} -eq 0 ]] && FILES=(".")
# Apply defaults from [compress] configuration if not overridden by flags
[[ -z ${willrm+x} ]] && [[ ${UTAZ_DEFAULT_DELETE:-0} -eq 1 ]] && willrm=1
if [[ -z ${createdir+x} && -z ${nodir+x} ]]; then
case "${UTAZ_DEFAULT_DIR_MODE:-auto}" in
always) createdir=1 ;;
never) nodir=1 ;;
esac
fi
[[ -n ${createdir} && -n ${nodir} ]] && \
disp E "The --create-dir and --no-dir options are mutually exclusive."
@@ -565,9 +574,9 @@ taz()
local FILES=("$@")
[[ ${#FILES[@]} -eq 0 ]] && FILES=(".")
[[ ! $compform ]] && compform=lz # safe and efficient (unless data are already compressed)
[[ ! $nproc ]] && nproc=1
[[ ! $complevel ]] && complevel=6
[[ ! $compform ]] && compform=${TAZ_DEFAULT_FORMAT:-lz}
[[ ! $nproc ]] && nproc=${TAZ_DEFAULT_THREADS:-1}
[[ ! $complevel ]] && complevel=${TAZ_DEFAULT_LEVEL:-6}
[[ $verbose -gt 1 && $quiet -gt 1 ]] &&
disp E "The --verbose and --quiet options can't be used together."
@@ -619,4 +628,6 @@ export -f taz
# ------------------------------------------------------------------------------
load_conf "compress"
# EOF

View File

@@ -39,7 +39,7 @@
# Usage: expandlist [options] <item1 [item2 ... itemN]>
expandlist()
{
local separator=" "
local separator="${EXPANDLIST_DEFAULT_SEPARATOR:- }"
local PARSED
PARSED=$(getopt -o hs:n --long help,separator:,newline -n 'expandlist' -- "$@")
@@ -122,7 +122,7 @@ export -f expandlist
# -s, --shell: do nothing and display what will be executed
clean()
{
local recursive=0 force=0 outshell=0
local recursive=${CLEAN_DEFAULT_RECURSIVE:-0} force=0 outshell=0
# Define short and long options
local PARSED
@@ -236,7 +236,7 @@ export -f mcd
rmspc()
{
local recurs=0 verb=0 shell=0
local substchar="_" substchar_set=0
local substchar="${RMSPC_DEFAULT_CHAR:-_}" substchar_set=0
local mvopt=()
local PARSED
@@ -574,7 +574,7 @@ export -f file_stats
# -l : limit : number of files to return (default is 10)
findbig()
{
local details=0 limit=10 one_fs=0
local details=0 limit=${FINDBIG_DEFAULT_LIMIT:-10} one_fs=0
local PARSED
PARSED=$(getopt -o hdl:x --long help,details,limit:,one-fs -n 'findbig' -- "$@")
@@ -792,4 +792,6 @@ export -f finddead
# ------------------------------------------------------------------------------
load_conf "filefct"
# EOF

View File

@@ -42,7 +42,7 @@
# pattern : the string to search for in the hexdump output (default is "ca fe")
busy()
{
local pattern="ca fe" delay_ms=0
local pattern="${BUSY_DEFAULT_PATTERN:-ca fe}" delay_ms="${BUSY_DEFAULT_DELAY:-0}"
local PARSED
# Short: h, p:, d:
@@ -109,4 +109,6 @@ busy()
# ------------------------------------------------------------------------------
load_conf "fun"
# EOF

View File

@@ -108,7 +108,12 @@ meteo()
local cities=("$@")
local city="" encoded=""
[[ $# -eq 0 ]] && cities=("$DEFAULT_CITY")
[[ $# -eq 0 ]] && cities=("${METEO_DEFAULT_CITY:-}")
if [[ ${#cities[@]} -eq 0 || -z "${cities[0]}" ]]; then
disp E "No city given and METEO_DEFAULT_CITY is not set. Use 'meteo <city>'."
return 1
fi
for city in "${cities[@]}"; do
encoded=$(urlencode "$city")

View File

@@ -67,16 +67,38 @@ dwl()
local url="$1"
local output="$2"
if command -v curl >/dev/null 2>&1; then
[ -z "$output" ] && curl -sL "$url" || curl -sL -o "$output" "$url"
# Honour preferred tool from configuration; fall back to auto-detection.
local preferred="${DWL_PREFERRED_TOOL:-}"
_try_curl() { [ -z "$output" ] && curl -sL "$url" || curl -sL -o "$output" "$url"; }
_try_wget() { [ -z "$output" ] && wget -qO- "$url" || wget -q -O "$output" "$url"; }
_try_fetch() { [ -z "$output" ] && fetch -o - "$url" || fetch -o "$output" "$url"; }
if [[ -n "$preferred" ]]; then
command -v "$preferred" >/dev/null 2>&1 || {
echo "Error: preferred download tool '$preferred' is not installed." >&2
return 1
}
case "$preferred" in
curl) _try_curl ;;
wget) _try_wget ;;
fetch) _try_fetch ;;
*)
echo "Error: DWL_PREFERRED_TOOL '$preferred' is not supported (use curl, wget or fetch)." >&2
return 1
;;
esac
elif command -v curl >/dev/null 2>&1; then
_try_curl
elif command -v wget >/dev/null 2>&1; then
[ -z "$output" ] && wget -qO- "$url" || wget -q -O "$output" "$url"
_try_wget
elif command -v fetch >/dev/null 2>&1; then
[ -z "$output" ] && fetch -o - "$url" || fetch -o "$output" "$url"
_try_fetch
else
echo "Error: No download utility (curl, wget, or fetch) found." >&2
return 1
fi
unset -f _try_curl _try_wget _try_fetch
}
export -f dwl
# ------------------------------------------------------------------------------
@@ -236,13 +258,12 @@ myextip()
shift
done
# Fetch data. Allow overriding endpoint via env var MYEXTIP_URL
local MYEXTIP_URL
MYEXTIP_URL=${MYEXTIP_URL:-https://ip-api.com/json/}
# Fetch data. Allow overriding endpoint via MYEXTIP_DEFAULT_URL config key.
local api_url="${MYEXTIP_DEFAULT_URL:-https://ip-api.com/json/}"
local response
if ! response=$(dwl "$MYEXTIP_URL"); then
disp E "Failed to fetch external IP information from $MYEXTIP_URL"
if ! response=$(dwl "$api_url"); then
disp E "Failed to fetch external IP information from $api_url"
return 2
fi
@@ -272,3 +293,7 @@ export -f myextip
# ------------------------------------------------------------------------------
# EOF
load_conf "net"
# EOF

View File

@@ -39,7 +39,7 @@
# Usage: dpkgs <string>
pkgs()
{
local ignore_case=0
local ignore_case=${PKGS_DEFAULT_IGNORE_CASE:-0}
local PARSED
PARSED=$(getopt -o hi --long help,ignore-case -n 'pkgs' -- "$@")
@@ -96,4 +96,6 @@ export -f pkgs
# ------------------------------------------------------------------------------
load_conf "packages"
# EOF

View File

@@ -95,7 +95,7 @@ ppu()
# -u lists processes for a specific user
# -o provides a clean, standard output format
ps -u "$1" -o pid,user,%cpu,%mem,start,time,command
ps -u "$1" -o "${PPU_DEFAULT_FORMAT:-pid,user,%cpu,%mem,start,time,command}"
}
export -f ppu
# ------------------------------------------------------------------------------
@@ -206,7 +206,7 @@ ku()
disp E "User '$u' does not exist."
return 1
else
killall -u "$u"
killall ${KU_DEFAULT_SIGNAL:+-${KU_DEFAULT_SIGNAL}} -u "$u"
fi
done
}
@@ -249,5 +249,7 @@ export -f kt
# ------------------------------------------------------------------------------
load_conf "processes"
# EOF

View File

@@ -52,10 +52,13 @@
# The function is very slow on Windows
genpwd()
{
local length=16
local occurs=2
local symb=1 maj=1 min=1 numb=1
local nbpwd=1
local length=${GENPWD_DEFAULT_LENGTH:-16}
local occurs=${GENPWD_DEFAULT_OCCURS:-2}
local symb=${GENPWD_DEFAULT_SYMBOLS:-1}
local maj=${GENPWD_DEFAULT_UPPERCASE:-1}
local min=${GENPWD_DEFAULT_LOWERCASE:-1}
local numb=${GENPWD_DEFAULT_NUMBERS:-1}
local nbpwd=${GENPWD_DEFAULT_COUNT:-1}
local extcar=""
local PARSED
@@ -272,7 +275,7 @@ export -f genpwd
# Usage: pwdscore [options] <password>
pwdscore()
{
local verbose=0
local verbose=${PWDSCORE_DEFAULT_VERBOSE:-0}
local read_stdin=0
local password=""
@@ -474,4 +477,6 @@ export -f pwdscore
# ------------------------------------------------------------------------------
load_conf "pwd"
# EOF

View File

@@ -292,8 +292,10 @@ rain()
printf "Example: rain --color green --speed 3\n"
}
local step_duration=0.050
local base_color="white"
local _raw_speed="${RAIN_DEFAULT_SPEED:-5}"
local step_duration
step_duration=$(_rain_normalize_speed "$_raw_speed") || step_duration=0.050
local base_color="${RAIN_DEFAULT_COLOR:-white}"
while [[ "$#" -gt 0 ]]; do
case $1 in
@@ -360,9 +362,11 @@ matrix()
printf "Example: matrix -C kana -c green --speed 2\n"
}
local step_duration=0.035
local base_color="green"
local charset="binary"
local _raw_speed="${MATRIX_DEFAULT_SPEED:-3.5}"
local step_duration
step_duration=$(_rain_normalize_speed "$_raw_speed") || step_duration=0.035
local base_color="${MATRIX_DEFAULT_COLOR:-green}"
local charset="${MATRIX_DEFAULT_CHARSET:-binary}"
while [[ "$#" -gt 0 ]]; do
case $1 in
@@ -430,4 +434,7 @@ matrix()
export -f matrix
# ------------------------------------------------------------------------------
load_conf "rain"
# EOF

View File

@@ -186,10 +186,20 @@ ssr()
local srv=$1
shift
ssh -Y root@"$srv" "$@"
# Build default options array from config, falling back to -Y (X11 forwarding)
local -a ssh_default_opts=()
if [[ -n "${SSH_DEFAULT_OPT:-}" ]]; then
read -ra ssh_default_opts <<< "${SSH_DEFAULT_OPT}"
else
ssh_default_opts=(-Y)
fi
ssh "${ssh_default_opts[@]}" root@"$srv" "$@"
}
export -f ssr
# ------------------------------------------------------------------------------
load_conf "ssh"
# EOF