luish

🐚 A fast, modern shell for Linux, written in Rust.

luish can replace zsh or bash as your interactive shell, and dash or bash as the shell that runs scripts: as fast as dash, with tab completion, history, line editing, globbing, and a modern plugin architecture.

Install it in one line (Linux on x86_64 or aarch64):

curl -fsSL https://raw.githubusercontent.com/luispedro/luish/main/install.sh | sh
up to 5×

faster than bash and zsh on scripts, and as fast as dash

Performance
~8 ms

to start an interactive shell, even with nvm or conda set up

Usage
270+

commands with Tab completion, with the standard plugins and luish-extra

Plugins

Highlights

🧩 A modern plugin architecture

Plugins package configuration and shell files, and can include an extension written in Rhai, a small embedded language, for hooks, prompt variables, Tab completion and commands. They are fetched from GitHub or any git repository, and pinned to specific commits.

Plugins
🌍 Remote shells that feel local

luish --ssh HOST runs your commands on HOST, but edits the command line on your own machine: typing, history and the completion menu don’t wait for the network, however slow the connection. luish needn’t be installed on HOST, as it copies itself there.

Remote shells over SSH
⚡ As fast as dash, with zsh’s features

Scripts run as fast as under dash, while interactive use is meant to be as full-featured as zsh’s. What luish adds costs scripts nothing unless they use it.

Performance
🧰 bash’s and zsh’s scripting extensions

Arrays and associative arrays, [[ ... ]], ${x/pattern/replacement}, typeset, zsh’s parameter flags and pipefail work in scripts and interactively, without slowing down scripts that don’t use them.

Usage
🏎️ Instant startup through caching

luish caches the effect of your startup files, so a new shell starts in milliseconds even with conda, nvm and the like, which can take seconds in other shells.

Usage
⚙️ Modern configuration

Set options, aliases and plugins in a TOML file, with options grouped in meaningful categories. A personal plugin on GitHub can carry your configuration to every machine you use.

Getting started

⚙️ Configuration at a glance

~/.config/luish/config.toml sets options, aliases, and the plugins to enable:

[options.history]
file = "~/.histfile"
share = true

[alias]
ll = "ls -l"

[plugins.enabled]
std.completion = "*"         # completion for common commands, and git

luish-extra adds completion for about 270 more commands, from bioinformatics, science, desktop and Python tools.

Plugins can also set options. You can have a personal plugin on GitHub that sets your favourite options, aliases, plugins, and functions, then enable it on every machine you use to keep your configuration in sync (see A personal plugin).

🚀 Getting started

Install luish (see Installation), and start it:

luish                             # an interactive shell
luish script.sh                   # run a script, as sh script.sh does

Getting started then sets up a first configuration, with the standard plugins, a few aliases and good options.