Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nao1215/selfish
selfish - the shell dyed in your selfish colors.
https://github.com/nao1215/selfish
ocaml shell shell-script wip
Last synced: about 1 month ago
JSON representation
selfish - the shell dyed in your selfish colors.
- Host: GitHub
- URL: https://github.com/nao1215/selfish
- Owner: nao1215
- License: mit
- Created: 2024-02-26T13:56:34.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-07-02T08:43:08.000Z (7 months ago)
- Last Synced: 2024-10-30T20:03:03.062Z (3 months ago)
- Topics: ocaml, shell, shell-script, wip
- Language: OCaml
- Homepage:
- Size: 40 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
## selfish - the shell dyed in your selfish colors
selfish is an experimental shell and a project that will become my life's work. Over my ten-year engineering career, I've used bash, zsh, fish (and indirectly dash). All of them were great shells. However, I haven't found the perfect shell to suit my preferences entirely. So, I decided to create my own. I'll be using selfish in my everyday work and refine it to a level where I can dogfood it.For the programming language, I've chosen OCaml. Although I'm a Gopher, I wanted to take some time away from Golang, hence the choice of OCaml. Rust, with its functional language elements, was also an appealing option since I plan to study OCaml alongside selfish. However, the project of creating a shell in Rust will likely be undertaken by other clever engineers. The quintessential shell will likely emerge from Rust. I want to create a shell in a different ecosystem with a different methodology.
### Development Eviorment Setup
Ref. [https://ocaml.org/install](https://ocaml.org/install)1. Install the opam package manager
2. Initialise opam
3. Activate the opam switch
4. Set Up an OCaml Development Environment
```shell
$ bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)"
$ opam init
$ eval $(opam env)
$ opam install ocaml-lsp-server odoc ocamlformat utop
```### How to build
```shell
$ make build
```### How to install
By default, the shell will be installed in `~/.opam/default/bin/selfish`.```shell
$ make install
```### Implemented Status
#### Built-in Commands
| Command | Implemented | Description |
|-----------|-------------|--------------------------------------------------|
| cd | Yes | Change the current working directory. |
| pwd | Yes | Print the current working directory. |
| echo | Yes | Display a line of text/string on the standard output. |
| exit | Yes | Terminate the shell. |
| alias | No | Create or display command aliases. |
| export | No | Set environment variables. |
| unset | No | Unset environment variables. |
| source/. | No | Execute commands from a file in the current shell. |
| history | No | Display command history. |
| jobs | No | Display status of jobs. |
| fg | No | Bring a job to the foreground. |
| bg | No | Resume suspended jobs in the background. |
| kill | No | Send a signal to a process. |
| umask | No | Set the file mode creation mask. |
| time | No | Measure program execution time. |
| type | No | Display information about command type. |
| wait | No | Wait for process completion. |
| exec | No | Replace the shell with the specified command. |
| read | No | Read a line from standard input. |
| shift | No | Shift positional parameters in a script. |
| test/[ | No | Evaluate conditional expressions. |
| eval | No | Evaluate arguments as shell script. |#### Features
[WIP]### LICENSE
[MIT License](LICENSE)