Repository navigation
Releases
Limon 1.4.0
Added
limon config k8s_ns=1adds the current namespace to the Kubernetes badge,
e.g.(k8s:kind-dev/default), matching what kube-ps1 shows. A context with
no namespace set showsdefault.limon config k8s_danger='*prod*,*-prd'takes comma-separated,
case-insensitive globs and shows a red⚠badge (!withascii=1)
whenever the current context matches one, so a production cluster stands
out the same wayLIMON_ENV=proddoes.
Changed
- The
k8s=1badge no longer forkskubectlto find the context. It reads
the files in$KUBECONFIG(or~/.kube/config) in pure bash, following
kubectl's merge rules, and only falls back tokubectlfor a kubeconfig
written as JSON or flow-style YAML. The 2s cache now also covers "no
context", so the fallback forks at most once every 2 seconds. kube-ps1's
KUBE_PS1_NAMESPACEis used alongsideKUBE_PS1_CONTEXTwhen it is set.
Fixed
limon upgrade beta/limon upgrade devfailed with "remote branch
'origin/dev' not found" on installs made byget-limon.sh. Its shallow
--depth 1clone only tracksmaster, so a plain fetch never brought in
other branches. Limon now fetches the channel's branch explicitly and adds
it to the remote's tracked branches, and reports a branch that is genuinely
missing on the remote separately from a network failure.
Install
curl -fsSL https://raw.githubusercontent.com/faridrasidov/limon/master/get-limon.sh | bashOr download an archive below and run bash limon-1.4.0/install.sh.
Verify a download with sha256sum -c SHA256SUMS --ignore-missing.
Limon 1.3.0
Added
- Two opt-in, ble.sh-only editor extras, both off by default and zero cost
unless enabled:limon config highlight=1turns on ble.sh's already-bundled
syntax highlighting (colors commands as you type), andlimon config fzf=1
sources ble.sh's vendored fzf key bindings (Ctrl+R history, Ctrl+T file,
Alt+C cd) whenfzfis installed. Both apply immediately in the current
shell; ble.sh has no silent unbind, so turningfzfback off needs a new
shell to fully clear its keys (the same limitationlimon offalready has).
Changed
- The git segment no longer forks
gitat all in a directory that is not a
repository (a home directory,/tmp, ...). It now checks for a.gitentry
by walking up from$PWDin pure bash before deciding whether to fork, and
caches that "no repo here" result the same way it already cached a
repo's branch and status. Process-spawn cost dominates prompt render time on
small or loaded machines, so this removes the single biggest cost of
limon config git=full(the default) for the common case of sitting outside
a repo. limon bench's "most cost is the git status call" tip now only prints when
the benchmark actually ran inside a repository, since that fork no longer
happens, and dominates nothing, outside one.
Install
curl -fsSL https://raw.githubusercontent.com/faridrasidov/limon/master/get-limon.sh | bashOr download an archive below and run bash limon-1.3.0/install.sh.
Verify a download with sha256sum -c SHA256SUMS --ignore-missing.
Limon 1.2.2
Changed
- The git segment no longer forks
gitat all in a directory that is not a
repository (a home directory,/tmp, ...). It now checks for a.gitentry
by walking up from$PWDin pure bash before deciding whether to fork, and
caches that "no repo here" result the same way it already cached a
repo's branch and status. Process-spawn cost dominates prompt render time on
small or loaded machines, so this removes the single biggest cost of
limon config git=full(the default) for the common case of sitting outside
a repo. limon bench's "most cost is the git status call" tip now only prints when
the benchmark actually ran inside a repository, since that fork no longer
happens, and dominates nothing, outside one.
Install
curl -fsSL https://raw.githubusercontent.com/faridrasidov/limon/master/get-limon.sh | bashOr download an archive below and run bash limon-1.2.2/install.sh.
Verify a download with sha256sum -c SHA256SUMS --ignore-missing.
Limon 1.2.1
Fixed
- Alt+Backspace deletes the previous path component or word again. The bundled
ble.sh bound it tocopy-backward-sword, which copied instead of deleting
and ignored/; Limon now binds it tokill-backward-cwordin its own
ble.sh instance only (#11).
Install
curl -fsSL https://raw.githubusercontent.com/faridrasidov/limon/master/get-limon.sh | bashOr download an archive below and run bash limon-1.2.1/install.sh.
Verify a download with sha256sum -c SHA256SUMS --ignore-missing.
Limon 1.2.0
Upgrade notes
- Bash 4.4 or newer is now required. Limon's native timer uses Bash 4.4's
PS0support so it no longer needs a globalDEBUGtrap. - Release archives are about 2.3 MB larger because they bundle the
architecture-independent ble.sh runtime. No compiler, platform-specific
binary, or runtime download is required.
Added
- Fish/Zsh-style inline ghost autosuggestions for command history, commands,
paths, and programmable completions. Right Arrow or End accepts the full
suggestion; Ctrl+Right accepts one word; Tab remains normal completion. - Autosuggestions are enabled by default and can be controlled with
autosuggest=0|1,autosuggest_delay=0..2000, and
autosuggest_color=auto|0..255. - Limon reuses an already-loaded ble.sh session or loads its bundled pinned
copy.limon statusandlimon healthreport the editor, hook provider, and
bash-completion state. - PTY coverage for rendering and accepting a real history suggestion, plus
lifecycle tests for scalar and arrayPROMPT_COMMANDvalues.
Changed
- The command timer and prompt renderer use ble.sh's public
PREEXECand
PRECMDhooks when its editor is active. The native fallback usesPS0and
a composablePROMPT_COMMANDentry. - Bash 5.1+ preserves
PROMPT_COMMANDas an array. Bash 4.4-5.0 uses an exact,
removable scalar prefix and does not restore a stale startup snapshot. - The bundled editor enables only ghost suggestions: syntax highlighting,
completion menus, EOF markers, and other visual ble.sh defaults are disabled. limon offdisables every Limon-owned editor feature and hook. A bundled
ble.sh runtime already sourced into the current Bash process stays resident
but inert until that shell exits; ble.sh does not support a silent full
unload back into Readline.- The installer no longer forces
TERM=xterm-256colorand now safely quotes
installed paths written to.bashrc.
Fixed
limon offremoves only Limon-owned hooks and restores an existing ble.sh
configuration without detaching a user-owned editor.- Existing
DEBUGtraps are no longer replaced by Limon, fixing compatibility
with debuggers and other shell frameworks.
Install
curl -fsSL https://raw.githubusercontent.com/faridrasidov/limon/master/get-limon.sh | bashOr download an archive below and run bash limon-1.2.0/install.sh.
Verify a download with sha256sum -c SHA256SUMS --ignore-missing.
Limon 1.1.0
Upgrade notes
- Bash 4.0 or newer is now required, and Limon checks for it at startup
instead of failing somewhere deep in the script. macOS ships Bash 3.2 as
/bin/bash; install a current one withbrew install bashand use that
shell. Limon never fully worked on 3.2 — it installed the prompt but silently
failed to persist config options — so this names a broken setup rather than
dropping a working one. LIMON_*configuration options are no longer exported into child processes.
Nothing documented relied on this, but a script reading e.g.$LIMON_GIT_MODE
from a subprocess started by your shell will no longer see it.timer_thresholdnow rejects values it used to accept silently. If your
config has a non-numeric value there, Limon falls back to the 2 second
default andlimon config timer_threshold=...will tell you why.
Added
- A dependency-free test suite (
bash tests/run.sh) and CI running it on Bash
4.4, 5.0 and 5.2 alongside ShellCheck and a prompt render-time guard. limon bench --breakdownreports per-segment render timings, so a slowdown
can be attributed instead of guessed at.- Sub-second command timer: durations now render as
1.4s,2m 05sor
1h 02m 05s. Bash 4 has no fork-free high-resolution clock, so those shells
keep whole-second timing rather than paying adatecall before every
command. timer_thresholdaccepts fractions, e.g.limon config timer_threshold=0.5.LIMON_SOURCE_ONLY=1loads Limon's functions without parsing a subcommand or
installing the prompt, for testing and debugging.
Changed
- Prompt rendering is roughly 70 times faster — about 21 ms per prompt down to
about 0.3 ms. The theme file was being re-validated and re-sourced on every
keypress, and every prompt segment was assembled through a subshell. Themes
are now cached, and the segments no longer fork. limon reloadre-sources Limon, so a shell left open acrosslimon upgrade
picks up the new code instead of silently running the old prompt renderer.- Default
host_coloris nowoff, so Limon uses the selected theme's host
color unless you enable automatic hostname coloring with
limon config host_color=auto. - Default
show_rootis now0, so the ROOT warning banner is opt-in with
limon config show_root=1.
Fixed
limon config max_path=Nwith a smallNcould hang the shell on every
prompt. The path-shortening loop could never make progress, so the prompt
never returned.limon offleft itsDEBUGtrap installed, so Limon's timing hook kept
running on every command in a shell you had turned Limon off in. The trap is
now disarmed. Note that Bash does not let a sourced script see the caller's
DEBUGtrap, solimon offcannot restore a trap you had set before
limon on— it clears Limon's instead of putting yours back.- Limon failed with "unbound variable" errors in shells using
set -u. - Limon exported a shell function named
maininto every child process, where
a script callingmainbefore defining it would run Limon's prompt renderer
instead of its own entry point. - Command timing starts only when Bash is about to run a real command, so idle
time spent sitting at the prompt is no longer counted as command duration. - On Bash 4, where timing has whole-second resolution, the timer rendered
1.0s— claiming a precision the measurement did not have. It now shows1s.
Install
curl -fsSL https://raw.githubusercontent.com/faridrasidov/limon/master/get-limon.sh | bashOr download an archive below and run bash limon-1.1.0/install.sh.
Verify a download with sha256sum -c SHA256SUMS --ignore-missing.