luish

luish is a shell for Linux, written in Rust.

It can replace zsh or bash as your interactive shell, and dash or bash as the shell that runs scripts.

It is fast, and full featured: tab completion, history, line editing, globbing, and a modern plugin architecture.

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 (see Extensions). They can be automatically fetched from github or other git repositories and pinned to specific commits.

Remote shells that feel local. luish --ssh HOST runs your commands on HOST, but edits the command line on your own machine: typing, moving in the line, the 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 (see Remote shells over SSH).

As fast as dash, with zsh’s features. Scripts run as fast as under dash (see Performance) while interactive use is intended to be as full-featured as zsh.

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 (see Shell language extensions), without slowing down scripts that don’t use them.

Instant startup through caching. luish caches the effect of your startup files. The result is that a new shell starts instantly (< 20ms) even if you are using conda, nvm and the like (which can take several seconds in a normal shell).

Modern configuration. You can use TOML file (~/.config/luish/config.toml) to set options, aliases, and enable plugins. Options are grouped in meaningful categories, for example:

[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 favorite options, aliases, plugins, and functions. Then just enable it for every machine you use and 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.