▄████████ ▄████████ ███ █▄ ▄████████ ███
███ ███ ███ ███ ███ ███ ███ ███ ▀█████████▄
███ █▀ ███ ███ ███ ███ ███ █▀ ▀███▀▀██
███ ▄███▄▄▄▄██▀ ███ ███ ███ ███ ▀
███ ▀▀███▀▀▀▀▀ ███ ███ ▀███████████ ███
███ █▄ ▀███████████ ███ ███ ███ ███
███ ███ ███ ███ ███ ███ ▄█ ███ ███
████████▀ ███ ███ ████████▀ ▄████████▀ ▄████▀
███ ███^ Say hello to crust's mascot :D ^
crust is a WIP shell written in Rust by Phate6660 and Zenomat.
Some of the functionality is split off into features, to reduce the amount of crates pulled in by default. They are:
- colors (for colorized output in ls (and other builtins once implemented))
- readline (a default feature (but can be turned off), for having a nice interactible prompt)
- when disabled, you'll have very basic line input (think of shells like dash)
- NOTE: the prompt is customizable regardless of whether or not you choose to enable the feature
- time (for getting the time with the %{D12} and %{D24} variables)
If you don't want any features at all, then build or run with the arg --no-default-features.
To run an interactive shell:
cargo run --release
To run a non-interactive shell with a command:
cargo run --release -- -c "echo test | sed s/test/success/g"
| FEATURE | TODO | WIP | DONE |
| Basic commands | X | ||
| CMDs with args | X | ||
| Paging | X | ||
| Piping | X | ||
| Prompt | X | ||
| Redirection | X | ||
| Builtins | X | ||
| Config file | X | ||
| Job control | X | ||
| Line editor | X | ||
| Env variables | X | ||
| Scripting | X |
| FEATURE | TODO | WIP | DONE |
| Automatically update | X | ||
| Colors | X | ||
| Command output | X | ||
| File content | X | ||
| Replaceable variables | X | ||
| Set via env var | X |
The default prompt looks like:

Customize the prompt by setting the PROMPT variable in the environment or through the config.
What you can use in the prompt:
Information variables:
- %{CL} for the full current working directory (e.g. /home/valley/projects/crust).
- %{CS} for the short current working directory (e.g. crust).
- %{D} for the date (e.g. Wed Dec 15).
- %{H} for the current user's home directory.
- %{T12} and %{T24} for 12 and 24 hour time respectively.
- %{U} for the current user.
- %(command) for capturing the output of command.
- %[file] to get the contents of file.
Formatting:
- %{b} to make text bold.
- %{i} to italicize text.
- %{rb} to reset the background color.
- %{re} to reset all text attributes.
- %{rf} to reset the text color.
- %{u} to underline text.
- B<COLOR> for changing the background color.
- F<COLOR> for changing the text color.
- \n for newline.
- Anything else will be printed as-is.
COLOR should be replaced with one of:
- BLACK
- RED
- GREEN
- YELLOW
- BLUE
- MAGENTA
- CYAN
- WHITE
Example for formatting:
PROMPT="%{b}F<MAGENTA>%{T24}%{re} - %{i}%{U}@%(hostname)%{re}\nB<GREEN>F<BLACK>%{CL}%{re}» "
Which for me looks like this:

This showcases a multiline prompt with different foreground and background colors, as well as a command substitution and shell-prompt-features, like time and user.
| FEATURE | TODO | WIP | DONE |
| Command Input | X | ||
| Arrow Keys | X | ||
| Backspace | X |
| FEATURE | TODO | WIP | DONE |
| Basic line editing | X | ||
| Command history | X | ||
| Completions | X | ||
| Modifiable keybindings | X | ||
| Syntax highlighting | X |
| FEATURE | TODO | WIP | DONE |
| Basic math | X | ||
| Equations | X | ||
| PEMDAS | X |
| FEATURE | TODO | WIP | DONE |
| Read file | X | ||
| Print line numbers | X | ||
| Print specific line | X | ||
| Paging support | X | ||
| Syntax highlighting | X |
| FEATURE | TODO | WIP | DONE |
| Exact paths | X | ||
| Relative paths | X | ||
| Previous dir | X |
| FEATURE | TODO | WIP | DONE |
| Basic output | X | ||
| Escape sequences | X |
| FEATURE | TODO | WIP | DONE |
| Invidual helps for builtins | X | ||
| List builtins | X | ||
| Quick start / tutorial | X |
| FEATURE | TODO | WIP | DONE |
| Basic colored output | X | ||
| Cross-platform | X | ||
| List files | X | ||
| Additional details | X |
| OPTION | TODO | WIP | DONE |
| Edit mode | X | ||
| History auto add lines | X | ||
| History file | X | ||
| History ignore spaces | X | ||
| History size | X | ||
| Prompt | X |
Notes:
- A default config is created for you if non-existant, look at example-config in the repo for an example.
- Comments (lines that start with *) or ignored.
- Invalid options are ignored and a warning is issued.
