rash, the rat ass shell, is a rudimentary shell written in C
  • C 97.5%
  • Nix 1.2%
  • Makefile 1.2%
  • Shell 0.1%
Find a file
2026-07-15 19:08:11 -06:00
.woodpecker add more stages to pipeline 2025-10-22 16:24:19 -06:00
doc update docs 2026-07-04 21:04:42 -06:00
examples update ssh_agent example 2026-01-17 23:06:39 -07:00
src variable casting 2026-07-11 22:21:36 -06:00
test store type information with shell variables 2026-07-02 23:53:02 -06:00
.clang-format make format 2025-10-22 16:23:41 -06:00
.clang-tidy linter errors 2026-07-03 10:26:58 -06:00
.envrc Add nix direnv, package, and fix an unused result Werror 2025-03-04 16:34:13 -07:00
.gitignore restructure some files (along with fixes for clangd) 2026-01-08 13:05:57 -07:00
flake.lock lock file 2026-06-16 20:59:28 -06:00
flake.nix add bear to nix dev shell 2026-01-11 11:10:22 -07:00
LICENSE Initial commit 2025-01-29 02:12:44 -07:00
Makefile i love libunwind as much as the next guy, but no exernal dependencies 2026-07-11 14:26:34 -06:00
package.nix bump version 2026-07-07 22:18:53 -06:00
README.md update readme 2026-01-08 16:44:21 -07:00

rash logo

rash, the rat ass shell, is a rudimentary shell written in C.

Features

While not as featureful as other shells, rash is still very usable.

Some of rash's current features include:

  • Environment variable modification
  • Shell variables
  • Globbing (using wildcards to match files)
  • Auto Completion
  • Job management
  • Storing command history
  • Custom prompts
  • ...and much more!

Getting Started

To build rash, take a look at the build guide.

Once you have built rash, feel free to take a look at the user guide.

Setting up clangd

To setup clangd for this project, you will need to generate a compile_commands.json file.

For this, I use Bear, but you can use other tools if you're more familiar with them.

make clean # make sure no build files exist so that bear knows how to compile all source files
bear -- make # this will generate a compile_commands.json in the root of the project

You can also specify make flags here, for example:

bear -- make ERROR_HELL=1 # this will generate a compile_commands.json with all errors enabled (not recommended for development)

For more if more info on make flags, check out the build guide.

Once you have a compile_commands.json file in the root of the project, clangd should work fine.