Simple shell meant to be compatible with bash with added usability.
  • Rust 97.2%
  • Shell 2.3%
  • Nix 0.5%
Find a file
2026-06-24 11:28:14 +02:00
assets make logo transparent 2026-02-24 13:46:25 +01:00
docs feat(lang) WIP parse io_redirect 2026-06-08 21:13:43 +02:00
scripts feat(lang) WIP finish implement very basic command parsing 2026-06-05 10:28:06 +02:00
src feat(lang) WIP parse io_redirect 2026-06-08 21:13:43 +02:00
.envrc add flake 2025-11-12 09:37:56 +01:00
.gitignore chore() update .gitignore 2026-06-03 11:34:26 +02:00
Cargo.lock improv(*) minor cleanup + rust fix 2026-01-30 16:57:40 +01:00
Cargo.toml improv(*) minor cleanup + rust fix 2026-01-30 16:57:40 +01:00
flake.lock chore() update flake 2026-06-05 16:43:34 +02:00
flake.nix chore() update flake 2026-06-05 16:43:34 +02:00
LICENSE Add LICENSE 2025-10-21 16:27:54 +02:00
README.md chore() remove useless README sections 2026-06-24 11:28:14 +02:00

selo-pona

Two black sitelen pona characters in column, the top one is 'selo', the second one is 'pona'

selo pona (no caps, simple shell in toki pona) is an interactive shell and (planned) a tree-walking interpeter (planned) for a scripting language that is a (planned) superset of bash. That is, every bash script is also a selo pona script (planned), but selo pona adds some nicer syntax, on top. (planned)

Built in Rust, with minimal dependencies (for now, only libc, and leftpad).

enbyware License MSRV

Why this exists

I've created this because I like fish but, I find annoying that it's not compatible with regular shell scripts and their scripting language sucks (source: my personal taste (why are we assigning variables with set, c'mon )).

This is made to be minimalist, useful out-of-the-box, and unintrusive. I want a shell that can do what I want to do as fast as possible and with the least hassle and verbosity possible. You can leave your default bashrc and it'll work (planned).

The target user for this is primarily me, with the hope that someone may find it useful. That means the UX is built around my tastes, but in the future there might be some config or something that allows to tweak the behavior. If you think of an improvement or find a bug you are still encouraged to file an issue or submit a pull request (no AI slop though or I will personally come poison your water supply).

This is not a Rust rewrite of bash. I used Rust because I like it and find it quite expressive, I have no guarantee about neither safety or performance.

"But there's already something called x that does this !"

I genuinely don't care.

Installation

You have to compile from source for now, some packages may be available when this project's out of pre-alpha someday and if someone's out there to maintain them.

Compiling from source

This project uses cargo (for now, will probably move to gcc-rs when it comes out). MSRV is 1.95. The only dependency you need is libc, it should work with either glibc or musl. File an issue if you find some discrepancy between them.

Clone the project, and run cargo build --release. Output is in target/release/selo-pona.

Usage

Like a regular shell. You start it, and you can type commands, or you can run scripts (planned).

Autocompletion

Autocompletion is a little unusual. When you hit Tab, you go into autocompletion mode. You can hit Tab (Shift-Tab) to cycle (backwards) through the list of entries. You can also type to fuzzy search through the entries, and as soon as there is only one entry left, it is automatically filled in, and you can type the rest of your command. To avoid being taken by surprise and typing extra characters, subsequent keystrokes that correspond to the entry are ignored.

History

You can hit up/down to cycle through your previous commands. You can hit Ctrl-r to search through the entries (planned).

Unlike bash, history is not saved per-session but instead whenever a command is ran in interactive mode. You can use the builtin history to edit the file (currently broken (i think)).