23 KiB
Executable File
23 KiB
Executable File
Changelog
All notable changes to this project will be documented in this file.
The format follows Keep a Changelog.
Versions follow MAJOR.MINOR.PATCH-REVISION_STAGE_N (e.g. 3.99.1-4_rc_1).
[Unreleased]
Added
pkgi(install) andpkgr(uninstall, with-p/--purgeand-d/--deps) commands for apt, dnf/yum, zypper, pacman, apk, portage, xbps and nix; both accept-y/--yesand-n/--dry-runand usesudo(ordoas) when needed.utaz -i/--ignore-caseand-s/--case-sensitiveswitches to match archive extensions case-insensitively or not; the default is set by the newUTAZ_DEFAULT_IGNORE_CASEkey of the[compress]section (default0).SETTRACE_DEFAULT_ENABLEDkey in the new[debug]configuration options (default0): activatessettrace --onat startup of interactive shells.utazsupports bare.zstfiles and.tzstarchives;taz -qis now effective.
Fixed
taz: a plain file with thetarformat could be deleted instead of being archived; existing<item>.tarfiles are no longer overwritten; trailing slashes,./..and names starting with-are handled; thegzipfallback (nopigz) works again.utaz: single top-level directory flattening,--no-dirtarget location,foo.tar.gzhost directory name and.tar.lzextraction.conf_save: no longer replaces a symlinked configuration file by a regular one, keeps the file permissions, rejects multi-line values, and inserts a new key before the trailing comments/banner of its section instead of under the next section's banner; leading blanks before a[section]are recognised.conf_dump -a: a commented default is no longer listed when the key is set later in the same section;NO_COLORis honoured; names with newlines or backslashes in arguments are handled.term_set:COLORTERM=truecolorno longer short-circuits every other probe (it selectedxterm-directeven inside tmux/screen or VTE terminals); multiplexers (tmux, screen) are now checked before emulator hints, since they inherit the emulator's variables.debug.sh: the trace is now written to stderr (it used to pollute captured$(...)output) and includes the exit status;backtraceanderrorare exported likesettrace;settracetells its own trap from a foreign one (--status, and--offno longer removes a foreign trap without--force);--onwhen already active is only a warning;getopterrors name the command.- All modules: counters updated with
((x++))-style commands (which return a non-zero status when the value was 0) now use plain assignments, so they no longer trigger the ERR trace or breakset -e. disp: a message hidden byQUIET/DEBUGno longer returns a non-zero status; no reset escape sequence underNO_COLOR; debug messages go to stderr; works underset -u; faster wrapping.mdcat: tables inside fenced code blocks are shown as code; code spans and\_-style escapes are protected from emphasis/link parsing;NO_COLORis honoured in tables and headings; fewer subprocesses when rendering tables; newlines in arguments no longer break option parsing.filefct.sh:findzerowithfdlisted (and--deleteremoved) one-byte files;findzero --deletecould remove symlinks to empty files;rmspcoverwrote existing files, passed a wrong replacement character to subdirectories with-r -c X, followed symlinked directories and mishandled&as replacement;expandlistsplit names containing spaces, ignored\nin its separator and reset the caller'snullglob;file_statshistogram was unordered,--minwas exclusive and invalid sizes silently gave no result;findbigaccepted an invalid configured limit; names starting with-are handled;finddeadandfindzerono longer return 1 when the last entry was skipped.fun.sh: the configured delays and language ofbusy,fake_compileandhackare now validated (a non-numeric value was evaluated as an arithmetic expression, and an invalid language looped without sleeping); Ctrl-C no longer leaves the background job running, nor does a shell without job control; a missing terminal is reported; the positional pattern ofbusydocumented in its usage now works;grep/readno longer mangle patterns starting with-or lines with leading blanks;awkis no longer forked for each pause.git.sh:gprune --deepnever deleted anything (<branch>@{upstream}fails once the remote branch is gone; it now reads the configured upstream ref);gprunereturned 1 on success and could not be told which branches are protected (GIT_MAIN_BRANCHis now honoured);gresetstashed the local changes before checking that the target exists, ignored untracked files outside the current directory and cleaned only below it;gsynccould fetch a different remote than the one it rebased on;gacp/gsynchandle remote and branch names containing slashes, and refuse a detached HEAD;ggraphrejects a limit of 0; internal helpers are exported with the commands.help:help <command>no longer runs arbitrary external programs with--help(profile functions only);NO_COLORis honoured;kt,pinfoandhelpitself are listed, and the list is in alphabetical order again.pinfo: GPUs were listed once per display connector (nine "GPUs" on a single-GPU laptop); the/proc/bus/pcifallback could never match; free memory is estimated on kernels withoutMemAvailable;/usr/lib/os-releaseis used as a fallback;NO_COLORis honoured; internal variables and the helper no longer leak into the shell.showinfono longer needs thehostnamebinary.showinfo:fastfetchis now preferred over the unmaintainedneofetch.lang.sh:setlocale(and theSET_LOCALEshortcuts) had no effect aftersetc, becauseLC_ALLstayed set;setcand the shortcuts changed the locale when called with--help(and thus throughhelp <command>);setlocale fr_FRcould pick a non-UTF-8 charset; shortcut functions are built without evaluating the raw configuration value, and an alias cannot replacesetlocaleorsetc.myextip: now uses the HTTPShttps://ipinfo.io/jsonAPI by default, since the free ip-api.com tier is HTTP only (HTTPS answers 403); ipwho.is and the ip-api.com format are still understood, a Timezone line and the postal code are shown, an unexpected answer is reported instead of printingjqerrors, and a non-HTTPS URL gives a warning.net.sh:dwlalways returned 0 (the cleanup after the transfer masked curl's status), so no caller ever saw a failed download; HTTP errors (404, 403, ...) are now failures instead of saved error pages;urlencodemis-encoded accents underLC_ALLand now uses%20for spaces;isipv4leaked a variable.packages.sh:pkgf lsnow looks the command up in thePATH;pkgsaccepts patterns starting with-;suseis recognised inID_LIKE.processes.sh:ku -9 user/kt -KILL pidwere rejected by option parsing although documented (kill-style signals are now extracted beforegetopt);kuaccepts numeric user IDs (killall only takes names), checks all users before killing, returns a failure status when a kill fails, and refuses root and the current user;ktno longer re-parses its options for each child, validates the PID and refuses the current shell;ppnmatched PIDs and names such askde-bash(now exact);ppg/gpidfallbacks no longer match their ownawk;PPU_DEFAULT_FORMATdocumented with its real value.prompt.sh(security): a git branch, conda environment or virtualenv named likex$(command)was executed each time the prompt was drawn, because the names were copied intoPS1; the context segment is now referenced as a variable and never re-expanded.prompt.sh: the exit status shown in the prompt was always0(the nested function definitions at the top ofset_promptreset$?; they are now defined once at load time);PROMPT_COLOR_*overrides of the[prompt]section never beat the theme and$ColorNamevalues were emptied byparse_confin a fresh login shell (now resolved, validated, and re-applied afterset_theme);set_theme --previewleft the previewed colours behind when none were set before, and a switch to a partial theme kept the previous theme's colours; the prompt no longer forksdatetwice per command ($EPOCHREALTIME) and runs onegit statusinstead of three git commands, without taking the index lock.pwd.sh(security):genpwddrew its characters from$RANDOM(15 bits, predictable seed); it now uses$SRANDOMor/dev/urandomwith unbiased selection and shuffle. Its info message goes to stderr, sopw=$(genpwd)captures only the password; theGENPWD_DEFAULT_*values are validated (they were evaluated as arithmetic expressions);pwdscoreclassifies characters with locale-proof classes; README default ofGENPWD_DEFAULT_OCCURScorrected.rain.sh: the terminal was left with the last drop colour active, the cursor parked over the frozen last frame and the user'sINT/TERM/WINCHtraps deleted andsttyforced toecho: the screen is now cleared and the traps and terminal settings restored; a resize now clears the screen and drops (drops placed for the old size lingered); a drop vanished for one frame each time another one left the screen; each frame is written with oneprintfinstead of one per character (output is byte-identical, a lot faster); colour and charset names are case-insensitive (RAIN_DEFAULT_COLOR=Green, as documented, fell back to white), an unknown colour is an error instead of a silent white, a null speed no longer spins the CPU, a non-terminal stdin or stdout is refused instead of looping, and the usage mentionsqto quit; README defaults of the[rain]keys corrected.ssh.sh:rmhostwith a wildcard that matched nothing tried to remove an empty host name; it removed only the first IP of a name (all addresses are now handled);[host]:portarguments were taken for glob patterns; each match was removed from every file with warnings for the others (now per file); with--all-users,ssh-keygenleft other users' files owned by root (owner and mode are restored) and a shared home directory was processed twice;@cert-authoritylines are never touched.ssrignored an emptySSH_DEFAULT_OPT(documented as "no option") and now rejects an option given in place of the server.updates.sh: the published version file, read from the network, was displayed without checking (escape sequences could reach the terminal at every startup): it is now validated, and compared as a version (an installed development version was reported as outdated); in quiet mode errors are really silent;profile_upgrade --switch-to-gitleft the user'sprofile.confand custom themes in the backup directory (they are now copied to the new clone);git pullcould create merge commits or conflict markers in the installed scripts (now--ff-only); the branch name is validated; archives with absolute or..paths are refused and extracted without their owners; modules removed upstream and still loaded are reported; git operations no longer change the shell's directory stack.- All modules: the option parsing no longer uses
xargs, which broke on arguments or file names containing a newline, noreval: a newprofile.d/args.shprovides_getopt_split(and_trap_restore), pure bash helpers; thenullgloband trap restorations no longer useevaleither. profile.sh: the shell check used$SHELL(the login shell: unset under cron or systemd, unrelated to the running shell) and made the profile refuse to load; it now testsBASH_VERSION; options are only handled when the file is executed (a script with its own arguments that sources the profile no longer gets--installrun, or "Unknown option" and a profile that does not load);PROMPT_COMMANDis no longer replaced (VTE, direnv,history -a, ... keep working;set_promptruns last and the exit status is saved first);INTERACTIVE, exported to the environment, made non-interactive child shells run the whole interactive start-up;pathappendmoved existing entries to the end ofPATH(demoting~/.local/binset by Debian's~/.profile) and root's/sbin:/usr/sbinwas added as one unmatchable entry on each load; a symlinkedprofile.shwas not followed; inline comments inprofile.conf(KEY = value # note, as the README shows) became part of the value, and a line that is notkey = valuecreated a bogus key; the caller'snullglobsetting was reset;--installadded a second line when the profile was already sourced in another form, and did not escape special characters in the path; loop variables leaked.lang.sh: no more "Overriding existing function" warning for locale shortcuts inherited from a parent shell.compress.sh:mapfile -d(bash 4.4) replaced, the profile supports bash 4.3.compress.sh: option flags and loop variables no longer leak into the interactive shell.
[4.1.0] — 2026-05-07
Added
profile.sh --installcommand to automatically configure profile loading in shell startup files.--install --bashrcand--install --profiletarget selectors for single-file installation.git.sh— entirely new module providing git workflow helpers:gst,ggraph,gsync,gacp,greset,gwip,gprune,groot.- Dedicated git helper completions under
profile.d/bash-completion/, loaded automatically in interactive sessions fromprofile.d/bash-completion/*.sh.
Changed
dispnow wraps long messages on terminal width, avoids mid-word splits, and aligns continuation lines with the message body after the prefix.helpnow supportshelp <command>and delegates to<command> --help.taznow supports-p auto/--parallel=autoto automatically use the runtime CPU count. This mode is now the default viaTAZ_DEFAULT_THREADS=auto. Backward compatibility with 0 being interpreted as auto is maintained.
Fixed
- Startup responsiveness improved:
check_updates -qnow uses a short network timeout so unavailable/slow networks no longer delay prompt readiness. dwlgained timeout support (-t/--timeout) and is now used by quiet startup update checks to enforce fast failure.profile.shnow detects direct execution and warns that it is designed to be sourced.
[4.0.0] — 2026-04-23
Added
- New
profile.confreference template atdoc/profile.conf.example. - Dynamic locale shortcuts generated from
SET_LOCALEand startup default language selection throughDEFAULT_LANG. - Prompt theming system with bundled themes (
default,dark,light,solarized,solarized-light,monokai,monochrome,abyss,plasma,adwaita) and per-key prompt color overrides. - Module defaults exposed as configuration keys in
profile.conf.
Changed
utaznow supports a wider range of archive formats.- Prompt and theme rendering improved, including better 24-bit color support.
- Overall code quality and maintainability improved across modules.
Documentation
- README updated with full function reference and configuration tables.
- New and expanded docs in
doc/(CONTRIBUTING.md,FAQ.md,todo.md). - Historical releases imported from
history.txtinto this changelog.
[3.99.2-4_rc_2] — 2026-04-21
Fixed
prompt.sh—\$Last_Commandin PS1 was escaped, preventing the exit code from ever appearing in the prompt (the local variable no longer exists when PS1 is rendered by bash). Removed the backslash so the value is embedded atset_promptbuild time.filefct.sh—file_stats()— a stray unconditionalshiftafteresacdoubled-shifted arguments already shifted by eachcasebranch; successive options such as-H -dwere silently skipped.packages.sh—pkgs()— replaced the unreliable binary-presence test (command -v dpkg / rpm) with the newget_pkgmgrfunction. Also corrected a typo in the "no package manager" error message (avialable→available).processes.sh—kt()— copy-paste error: usage error message read"Usage: ppg <string>"instead of"Usage: kt <pid>".
Added
packages.sh—get_pkgmgr()— new exported helper that detects the active package manager of the running distribution. Detection first reads/etc/os-release(IDthenID_LIKE), then falls back to a fixed-priority binary scan. Supported families:apt,dnf,yum,zypper,pacman,apk,portage,xbps,nix. Returns 1 when nothing is identified. Available to all future commands inpackages.sh.
[3.99.1-4_rc_1] — 2026
Added
- Theming system —
load_themeinprofile.d/prompt.shloads.themefiles fromprofile.d/themes/(or a custom directory set viaPROMPT_THEME_DIR). Theme files are parsed, not executed — no shell code ever runs from a theme. - Built-in themes —
default,dark,light,solarized(24-bit true-colour),solarized-light(24-bit),monokai,monochrome,abyss,plasma,adwaita. [prompt]section —PROMPT_THEMEandPROMPT_THEME_DIRkeys to select a theme; elevenPROMPT_COLOR_*keys for per-key overrides inprofile.conf.- Standard colour variables as theme keys — theme files may also override
the
disp.shcolour variables (Black,Blue,On_IBlack, …) to remap the terminal palette used byls,grep, and colour-aware tools. - Module configuration defaults — all modules now expose their hardcoded
defaults as
profile.confkeys:TAZ_*,UTAZ_*,EXPANDLIST_*,CLEAN_*,RMSPC_*,FINDBIG_*,RAIN_*,MATRIX_*,SSH_DEFAULT_OPT,GENPWD_*,PWDSCORE_*,BUSY_*,METEO_DEFAULT_CITY,DWL_*,MYEXTIP_*,PKGS_*,PPU_*,KU_*,UPDT_DEFAULT_BRANCH. UPDT_DEFAULT_BRANCH— configures the git branch used bycheck_updatesandprofile_upgrade. Changing the key causesprofile_upgradeto automatically switch the local checkout to the new branch and display a warning.doc/directory —CONTRIBUTING.md,FAQ.md,profile.conf.example(annotated template),todo.md..gitignore—profile.confis now git-ignored so personal settings are never accidentally staged.
Changed
- README §2 now explains how to create
profile.conffromdoc/profile.conf.example(new section 2.1 "Initial configuration"). - README §4 updated with full module-defaults tables, theming reference, and a
note about
profile.confbeing git-ignored. - Theme values no longer carry the
exportkeyword (they are not shell variables, only data).
Security
load_themeuses a strict allowlist (noeval, no sourcing). OnlyPROMPT_COLOR_*keys and knowndisp.shcolour variable names are accepted. Values must match\$[A-Za-z_][A-Za-z0-9_]*or\\e\[[0-9;]*m; any other value is discarded with a warning.
[3.95.3-4_beta_3] — 2024
Added
- Initial public release candidate series.
- Core modules:
compress,disp,filefct,fun,help,info,lang,net,packages,processes,prompt,pwd,rain,ssh,updates. - Bar-style prompt with time, command duration, and exit code.
taz/utazarchive helpers.genpwd/pwdscorepassword tools.matrix/rainscreensavers.profile_upgradewith git and archive download support.
Note: The section below was imported from
history.txtto preserve pre-3.95.x-4_betarelease notes.
Legacy releases (imported from history.txt)
[3.6.1] — 2026-03-05
- Fix typo in
compress.sh.
[3.6.0] — 2026-03-05
- Improved
utazwith broader multi-format support. - Introduced
ppuandppn. - Improved update system.
[3.5.0] — 2026-03-04
rainnow has configurable speed and color.showinfoadapted tofastfetch(in addition toneofetch).
[3.3.1] — 2022-02-24
- Fixed version detection.
- Added
busy. - Fixed use of library functions before loading.
[3.3.0] — 2022-11-28
- Initial version update support.
- Changed versioning code.
- Added installation path detection.
[3.2.3] — 2022-11-28
- Improved README.
[3.2.2] — 2022-11-21
- Fixed
tazcompression level parsing. - Fixed typo in
dpkgs.
[3.2.1] — 2022-11-20
- Fixed several messages.
- Made
dpkgsRPM-aware (initial support). - Removed version history from main script and reverted declaration order.
- Added required license information in all files.
- Completed
LICENSEfile.
[3.2.0] — 2022-11-18
- Created
dispcommand and integrated it across the codebase.
[3.1.1] — 2022-11-10
genpwd: added feasibility check for requested password constraints.
[3.1.0] — 2022-11-08
- Added password generator.
[3.0.1] — 2022-11-07
- Added concatenation option to
rmspc. - Added
ku. - Improved error handling in
meteo.
[3.0.0] — 2022-08-27
- Split code into several files/modules.
- Added
rainscreensaver.
[2.8.2] — 2022-07-29
- Added warning for non-bash users.
[2.8.1] — 2022-07-19
- Cleanup, fixes and optimizations.
[2.8.0] — 2022-06-24
- Added
backtrace,errorandsettrace. - Bugfixes in
showinfo.
[2.7.1] — 2022-06-22
- Minor corrections.
- Added
helpcommand.
[2.7.0] — 2022-06-21
- Added
isipv4andisipv6, integrated intormhost. - Removed broken Konsole save/restore support.
[2.6.3] — 2021-10-18
- Changed PS1 to status-bar style.
- Minor improvements.
[2.6.2] — 2021-02-26
- Bugfix in
tazfor directories with trailing slash.
[2.6.1] — 2020-12-25
- Added checks in
rmhost. - Improved
rmspc. - Created
expandlist.
[2.6.0] — 2020-10-24
- Added Konsole session save/restore.
[2.5.3] — 2020-09-11
- Added aliases, improved code consistency and fixed typos.
- Improved
utaz, removedshowdiskmap, removed remaining French text. - Added license information for future publication.
[2.5.2] — 2020-03-06
- Sorted and improved aliases.
[2.5.1] — 2020-03-05
- Language consistency fixes.
- Added
pigzsupport intaz.
[2.5.0] — 2020-03-03
- Added
tazandrmspc. - Renamed
auziptoutazand improved it.
[2.4.0] — 2020-03-02
- Added
auzip.
[2.3.2] — 2020-01-31
figlet: changed default font toansi_shadow.
[2.3.1] — 2020-01-16
- Bugfix: non-interactive shells were blocked by some functions.
[2.3.0] — 2020-01-08
- Added
figletandneofetchas MOTD replacement.
[2.2.0] — 2019-12-16
- Added
showinfo. - First implementation of
showdiskmap.
[2.1.2] — 2019-09-24
- Bugfix in profile version display.
[2.1.1] — 2019-09-23
- Bugfix in
dpkgs.
[2.1.0] — 2018-09-16
- Added
rmhost,setc,setfr. - Improved locale management.
[2.0.1] — 2017-02-04
cleanimprovements (--shell).
[2.0.0] — 2015-10-24
- Added advanced functions (
clean,ssr, etc.).
[1.0.0] — 2013-02-16
- Initial version.
[Initial fork]
Forked default Bash profile from Beyond Linux From Scratch by:
- James Robertson jameswrobertson@earthlink.net
- Dagmar d'Surreal rivyqntzne@pbzpnfg.arg