Files
profile/doc/CHANGELOG.md
T
2026-10-13 14:35:00 +02:00

476 lines
19 KiB
Markdown
Executable File

# Changelog
All notable changes to this project will be documented in this file.
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
Versions follow `MAJOR.MINOR.PATCH-REVISION_STAGE_N` (e.g. `3.99.1-4_rc_1`).
---
## [Unreleased]
### Added
- `pkgi` (install) and `pkgr` (uninstall, with `-p`/`--purge` and `-d`/`--deps`)
commands for apt, dnf/yum, zypper, pacman, apk, portage, xbps and nix; both
accept `-y`/`--yes` and `-n`/`--dry-run` and use `sudo` (or `doas`) when needed.
- `utaz -i` / `--ignore-case` and `-s` / `--case-sensitive` switches to match
archive extensions case-insensitively or not; the default is set by the new
`UTAZ_DEFAULT_IGNORE_CASE` key of the `[compress]` section (default `0`).
- `SETTRACE_DEFAULT_ENABLED` key in the new `[debug]` configuration options
(default `0`): activates `settrace --on` at startup of interactive shells.
- `utaz` supports bare `.zst` files and `.tzst` archives; `taz -q` is now
effective.
### Fixed
- `taz`: a plain file with the `tar` format could be deleted instead of being
archived; existing `<item>.tar` files are no longer overwritten; trailing
slashes, `.`/`..` and names starting with `-` are handled; the `gzip`
fallback (no `pigz`) works again.
- `utaz`: single top-level directory flattening, `--no-dir` target location,
`foo.tar.gz` host directory name and `.tar.lz` extraction.
- `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_COLOR` is honoured; names with newlines or
backslashes in arguments are handled.
- `term_set`: `COLORTERM=truecolor` no longer short-circuits every other probe
(it selected `xterm-direct` even 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; `backtrace` and `error` are
exported like `settrace`; `settrace` tells its own trap from a foreign one
(`--status`, and `--off` no longer removes a foreign trap without `--force`);
`--on` when already active is only a warning; `getopt` errors 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 break `set -e`.
- `disp`: a message hidden by `QUIET`/`DEBUG` no longer returns a non-zero
status; no reset escape sequence under `NO_COLOR`; debug messages go to
stderr; works under `set -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_COLOR` is
honoured in tables and headings; fewer subprocesses when rendering tables;
newlines in arguments no longer break option parsing.
- `filefct.sh`: `findzero` with `fd` listed (and `--delete` removed) one-byte
files; `findzero --delete` could remove symlinks to empty files; `rmspc`
overwrote existing files, passed a wrong replacement character to
subdirectories with `-r -c X`, followed symlinked directories and mishandled
`&` as replacement; `expandlist` split names containing spaces, ignored `\n` in
its separator and reset the caller's `nullglob`; `file_stats` histogram was
unordered, `--min` was exclusive and invalid sizes silently gave no result;
`findbig` accepted an invalid configured limit; names starting with `-` are
handled; `finddead` and `findzero` no longer return 1 when the last entry
was skipped.
- `fun.sh`: the configured delays and language of `busy`, `fake_compile` and
`hack` are 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 of
`busy` documented in its usage now works; `grep`/`read` no longer mangle
patterns starting with `-` or lines with leading blanks; `awk` is no longer
forked for each pause.
- `git.sh`: `gprune --deep` never deleted anything (`<branch>@{upstream}` fails
once the remote branch is gone; it now reads the configured upstream ref);
`gprune` returned 1 on success and could not be told which branches are
protected (`GIT_MAIN_BRANCH` is now honoured); `greset` stashed the local
changes before checking that the target exists, ignored untracked files
outside the current directory and cleaned only below it; `gsync` could fetch
a different remote than the one it rebased on; `gacp`/`gsync` handle remote
and branch names containing slashes, and refuse a detached HEAD; `ggraph`
rejects 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_COLOR` is honoured; `kt`, `pinfo` and
`help` itself 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/pci` fallback could never match; free
memory is estimated on kernels without `MemAvailable`; `/usr/lib/os-release`
is used as a fallback; `NO_COLOR` is honoured; internal variables and the
helper no longer leak into the shell. `showinfo` no longer needs the
`hostname` binary.
- `showinfo`: `fastfetch` is now preferred over the unmaintained `neofetch`.
- `lang.sh`: `setlocale` (and the `SET_LOCALE` shortcuts) had no effect after
`setc`, because `LC_ALL` stayed set; `setc` and the shortcuts changed the
locale when called with `--help` (and thus through `help <command>`);
`setlocale fr_FR` could pick a non-UTF-8 charset; shortcut functions are built
without evaluating the raw configuration value, and an alias cannot replace
`setlocale` or `setc`.
- `myextip`: now uses the HTTPS `https://ipinfo.io/json` API 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 printing `jq` errors,
and a non-HTTPS URL gives a warning.
- `net.sh`: `dwl` always 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; `urlencode`
mis-encoded accents under `LC_ALL` and now uses `%20` for spaces; `isipv4`
leaked a variable.
- `packages.sh`: `pkgf ls` now looks the command up in the `PATH`; `pkgs`
accepts patterns starting with `-`; `suse` is recognised in `ID_LIKE`.
- `processes.sh`: `ku -9 user` / `kt -KILL pid` were rejected by option parsing
although documented (kill-style signals are now extracted before `getopt`);
`ku` accepts 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; `kt` no longer re-parses its options for each
child, validates the PID and refuses the current shell; `ppn` matched PIDs
and names such as `kde-bash` (now exact); `ppg`/`gpid` fallbacks no longer
match their own `awk`; `PPU_DEFAULT_FORMAT` documented with its real value.
- `prompt.sh` (security): a git branch, conda environment or virtualenv named
like `x$(command)` was **executed** each time the prompt was drawn, because the
names were copied into `PS1`; the context segment is now referenced as a
variable and never re-expanded.
- `prompt.sh`: the exit status shown in the prompt was always `0` (the nested
function definitions at the top of `set_prompt` reset `$?`; they are now
defined once at load time); `PROMPT_COLOR_*` overrides of the `[prompt]`
section never beat the theme and `$ColorName` values were emptied by
`parse_conf` in a fresh login shell (now resolved, validated, and re-applied
after `set_theme`); `set_theme --preview` left 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 forks `date` twice per command
(`$EPOCHREALTIME`) and runs one `git status` instead of three git commands,
without taking the index lock.
- `compress.sh`: option flags and loop variables no longer leak into the
interactive shell.
---
## [4.1.0] — 2026-05-07
### Added
- `profile.sh --install` command to automatically configure profile loading in
shell startup files.
- `--install --bashrc` and `--install --profile` target 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 from `profile.d/bash-completion/*.sh`.
### Changed
- `disp` now wraps long messages on terminal width, avoids mid-word splits, and
aligns continuation lines with the message body after the prefix.
- `help` now supports `help <command>` and delegates to `<command> --help`.
- `taz` now supports `-p auto` / `--parallel=auto` to automatically use the
runtime CPU count. This mode is now the default via
`TAZ_DEFAULT_THREADS=auto`. Backward compatibility with 0 being interpreted as
auto is maintained.
### Fixed
- Startup responsiveness improved: `check_updates -q` now uses a short network
timeout so unavailable/slow networks no longer delay prompt readiness.
- `dwl` gained timeout support (`-t` / `--timeout`) and is now used by quiet
startup update checks to enforce fast failure.
- `profile.sh` now detects direct execution and warns that it is designed to be
sourced.
## [4.0.0] — 2026-04-23
### Added
- New `profile.conf` reference template at `doc/profile.conf.example`.
- Dynamic locale shortcuts generated from `SET_LOCALE` and startup default
language selection through `DEFAULT_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
- `utaz` now 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.txt` into this changelog.
---
## [3.99.2-4_rc_2] — 2026-04-21
### Fixed
- **`prompt.sh`** — `\$Last_Command` in 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
at `set_prompt` build time.
- **`filefct.sh` — `file_stats()`** — a stray unconditional `shift` after
`esac` doubled-shifted arguments already shifted by each `case` branch;
successive options such as `-H -d` were silently skipped.
- **`packages.sh` — `pkgs()`** — replaced the unreliable binary-presence test
(`command -v dpkg / rpm`) with the new `get_pkgmgr` function. 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` (`ID` then `ID_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 in `packages.sh`.
---
## [3.99.1-4_rc_1] — 2026
### Added
- **Theming system** — `load_theme` in `profile.d/prompt.sh` loads `.theme`
files from `profile.d/themes/` (or a custom directory set via
`PROMPT_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_THEME` and `PROMPT_THEME_DIR` keys to select
a theme; eleven `PROMPT_COLOR_*` keys for per-key overrides in `profile.conf`.
- **Standard colour variables as theme keys** — theme files may also override
the `disp.sh` colour variables (`Black`, `Blue`, `On_IBlack`, …) to remap the
terminal palette used by `ls`, `grep`, and colour-aware tools.
- **Module configuration defaults** — all modules now expose their hardcoded
defaults as `profile.conf` keys: `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 by `check_updates`
and `profile_upgrade`. Changing the key causes `profile_upgrade` to
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.conf` is now git-ignored so personal settings are
never accidentally staged.
### Changed
- README §2 now explains how to create `profile.conf` from
`doc/profile.conf.example` (new section 2.1 "Initial configuration").
- README §4 updated with full module-defaults tables, theming reference, and a
note about `profile.conf` being git-ignored.
- Theme values no longer carry the `export` keyword (they are not shell
variables, only data).
### Security
- `load_theme` uses a strict allowlist (no `eval`, no sourcing). Only
`PROMPT_COLOR_*` keys and known `disp.sh` colour 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` / `utaz` archive helpers.
- `genpwd` / `pwdscore` password tools.
- `matrix` / `rain` screensavers.
- `profile_upgrade` with git and archive download support.
---
> **Note:** The section below was imported from `history.txt` to preserve
> pre-`3.95.x-4_beta` release 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 `utaz` with broader multi-format support.
- Introduced `ppu` and `ppn`.
- Improved update system.
### [3.5.0] — 2026-03-04
- `rain` now has configurable speed and color.
- `showinfo` adapted to `fastfetch` (in addition to `neofetch`).
### [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 `taz` compression level parsing.
- Fixed typo in `dpkgs`.
### [3.2.1] — 2022-11-20
- Fixed several messages.
- Made `dpkgs` RPM-aware (initial support).
- Removed version history from main script and reverted declaration order.
- Added required license information in all files.
- Completed `LICENSE` file.
### [3.2.0] — 2022-11-18
- Created `disp` command 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 `rain` screensaver.
### [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`, `error` and `settrace`.
- Bugfixes in `showinfo`.
### [2.7.1] — 2022-06-22
- Minor corrections.
- Added `help` command.
### [2.7.0] — 2022-06-21
- Added `isipv4` and `isipv6`, integrated into `rmhost`.
- 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 `taz` for 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`, removed `showdiskmap`, 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 `pigz` support in `taz`.
### [2.5.0] — 2020-03-03
- Added `taz` and `rmspc`.
- Renamed `auzip` to `utaz` and improved it.
### [2.4.0] — 2020-03-02
- Added `auzip`.
### [2.3.2] — 2020-01-31
- `figlet`: changed default font to `ansi_shadow`.
### [2.3.1] — 2020-01-16
- Bugfix: non-interactive shells were blocked by some functions.
### [2.3.0] — 2020-01-08
- Added `figlet` and `neofetch` as 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
- `clean` improvements (`--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>