# profile — to-do list Items marked **[easy]**, **[medium]**, or **[hard]** give a rough effort hint. Items marked **[breaking]** would change existing behaviour and require a version-bump. --- ## Shell / compatibility - [ ] **ZSH compatibility layer** — most functions work already; the remaining blockers are `local -A` (no associative arrays in ZSH without `typeset -A`) and `local -n` namerefs. A thin compatibility shim would open the project to ZSH users. **[hard]** - [ ] **Bash completion** — add a more bash completion directory and write `_profile_upgrade`, `_taz`, `_utaz`, `_meteo`, etc. completions so that `` works on all public functions. **[medium]** --- ## Prompt & theming - [ ] **Git branch in prompt** — show the current branch name (and dirty indicator) in the PS1 bar when inside a Git repository. Should be gated behind a `[prompt]` config key so it can be disabled. **[medium]** - [ ] **Virtual-env / conda indicator** — detect `$VIRTUAL_ENV` / `$CONDA_DEFAULT_ENV` and display the name in the prompt bar. **[easy]** - [ ] **True-colour terminal auto-detection** — query `$COLORTERM` and `$TERM` at load time; automatically fall back from a 24-bit theme to its 16-colour equivalent when the terminal does not support true colour. **[medium]** - [ ] **True-colour variants of other themes** — create `monokai-tc.theme`, `abyss-tc.theme`, etc. using the same `\e[38;2;R;G;Bm` approach as the Solarized themes. **[easy]** _(per theme)_ - [ ] **Theme preview command** — add a `theme_preview` (or `profile_theme`) function that renders a colour swatch and a sample prompt line for the currently loaded theme, so users can evaluate themes without reloading the session. **[medium]** - [ ] **`load_theme` — DEFAULTCOL rebuild** — after overriding `DEFAULTFG` and `DEFAULTBG`, automatically recompute `DEFAULTCOL` from the new values instead of requiring the theme file to set it explicitly. **[easy]** --- ## Module improvements ### compress - [ ] **`taz` progress bar** — show a `pv` / `dd`-based progress indicator when compressing large trees, gated behind a `-p` flag. **[medium]** - [ ] **`utaz` integrity check** — run `tar -tOf` / `unzip -t` / `7z t` before extracting and abort if the archive is corrupt. **[easy]** ### filefct - [ ] **`findbig` / `findzero` / `finddead` — `fd` integration** — optionally use `fd` instead of `find` when available for faster traversal. **[easy]** - [ ] **`file_stats` — human-readable totals** — add `--human` flag to emit sizes in K/M/G instead of bytes. **[easy]** ### info - [ ] **`showinfo` fallback** — when neither `neofetch` nor `fastfetch` is installed, print a minimal sysinfo block (hostname, OS, kernel, uptime, CPU, RAM) using pure Bash + `/proc`. **[medium]** ### net - [ ] **`dwl` resume support** — pass `-C -` to curl / `--continue-at -` to wget for interrupted downloads; gate behind a `-r` flag. **[easy]** - [ ] **`myextip` multiple providers** — fall back to a secondary URL (configurable via `MYEXTIP_FALLBACK_URL`) when the primary times out. **[easy]** ### processes - [ ] **`ku` dry-run flag** — add `-n` / `--dry-run` to print what would be killed without acting. **[easy]** ### pwd - [ ] **`genpwd` passphrase mode** — add `-w` / `--words N` to generate word-based passphrases (diceware-style) from `/usr/share/dict/words`. **[medium]** ### ssh - [ ] **SSH agent management** — add `ssh_agent_start` / `ssh_agent_stop` helpers that start a persistent `ssh-agent`, add configured keys, and survive re-login via a socket stored in `~/.ssh/agent.env`. **[medium]** - [ ] **`rmhost` glob support** — allow `rmhost '*.example.com'` to remove all matching entries in one call. **[easy]** ### updates - [ ] **Automatic update check age** — store a timestamp in `~/.cache/profile_last_check`; skip the network request in `check_updates -q` if the last check was less than `UPDT_CHECK_INTERVAL` hours ago (configurable, default 24). **[medium]** - [ ] **Changelog display** — after a successful `profile_upgrade`, fetch and display `CHANGELOG.md` entries newer than the previously installed version. **[medium]** --- ## Infrastructure - [ ] **Test suite** — add a `test/` directory with `bats` (Bash Automated Testing System) unit tests for pure functions (`expandlist`, `genpwd`, `pwdscore`, `isipv4`, `isipv6`, `parse_conf`, `load_theme`, …). Target for CI. **[hard]** - [ ] **CI pipeline** — Gitea Actions (or similar) job that runs `shellcheck` and the `bats` suite on every push. **[medium]** - [ ] **`profile_status` function** — print a diagnostic summary: installed version, active theme, loaded modules, detected Bash version, interactive / login shell flags, and `profile.conf` path. **[easy]** - [ ] **`profile_uninstall` function** — remove the `source` line from `~/.bashrc` / `~/.profile` and optionally delete the install directory, with a dry-run mode. **[medium]** - [ ] **`disp` syslog integration** — add a `DISP_SYSLOG=1` config key that additionally pipes E/W messages to `logger`. **[easy]** - [ ] **XDG base-dir support** — honour `$XDG_CONFIG_HOME` as an alternative location for `profile.conf` so users can keep `~` tidy. **[medium]** **[breaking]**