{"id":15061140,"url":"https://github.com/nao1215/selfish","last_synced_at":"2026-01-18T01:36:01.671Z","repository":{"id":224555725,"uuid":"763546798","full_name":"nao1215/selfish","owner":"nao1215","description":"selfish - the shell dyed in your selfish colors.","archived":false,"fork":false,"pushed_at":"2024-07-02T08:43:08.000Z","size":41,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-10T13:12:15.429Z","etag":null,"topics":["ocaml","shell","shell-script","wip"],"latest_commit_sha":null,"homepage":"","language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nao1215.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"nao1215"}},"created_at":"2024-02-26T13:56:34.000Z","updated_at":"2024-07-02T08:43:06.000Z","dependencies_parsed_at":"2024-09-29T06:40:38.171Z","dependency_job_id":"036cda30-2006-4e16-a819-aab6b9824c76","html_url":"https://github.com/nao1215/selfish","commit_stats":null,"previous_names":["nao1215/selfish"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nao1215%2Fselfish","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nao1215%2Fselfish/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nao1215%2Fselfish/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nao1215%2Fselfish/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nao1215","download_url":"https://codeload.github.com/nao1215/selfish/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247289430,"owners_count":20914464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ocaml","shell","shell-script","wip"],"created_at":"2024-09-24T23:09:47.170Z","updated_at":"2026-01-18T01:36:01.014Z","avatar_url":"https://github.com/nao1215.png","language":"OCaml","funding_links":["https://github.com/sponsors/nao1215"],"categories":[],"sub_categories":[],"readme":"## selfish - the shell dyed in your selfish colors\nselfish 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.\n\nFor 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.\n\n### Development Eviorment Setup\nRef. [https://ocaml.org/install](https://ocaml.org/install)\n\n1. Install the opam package manager\n2. Initialise opam\n3. Activate the opam switch\n4. Set Up an OCaml Development Environment\n   \n```shell\n$ bash -c \"sh \u003c(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)\"\n$ opam init\n$ eval $(opam env)\n$ opam install ocaml-lsp-server odoc ocamlformat utop\n```\n\n### How to build\n```shell\n$ make build\n```\n\n### How to install\nBy default, the shell will be installed in `~/.opam/default/bin/selfish`.\n\n```shell\n$ make install\n```\n\n### Implemented Status\n#### Built-in Commands\n| Command   | Implemented | Description                                      |\n|-----------|-------------|--------------------------------------------------|\n| cd        | Yes         | Change the current working directory.            |\n| pwd       | Yes          | Print the current working directory.             |\n| echo      | Yes         | Display a line of text/string on the standard output. |\n| exit      | Yes         | Terminate the shell.                             |\n| alias     | No          | Create or display command aliases.               |\n| export    | No          | Set environment variables.                       |\n| unset     | No          | Unset environment variables.                     |\n| source/.   | No          | Execute commands from a file in the current shell. |\n| history   | No          | Display command history.                         |\n| jobs      | No          | Display status of jobs.                          |\n| fg        | No          | Bring a job to the foreground.                   |\n| bg        | No          | Resume suspended jobs in the background.         |\n| kill      | No          | Send a signal to a process.                      |\n| umask     | No          | Set the file mode creation mask.                 |\n| time      | No          | Measure program execution time.                  |\n| type      | No          | Display information about command type.          |\n| wait      | No          | Wait for process completion.                     |\n| exec      | No          | Replace the shell with the specified command.    |\n| read      | No          | Read a line from standard input.                 |\n| shift     | No          | Shift positional parameters in a script.         |\n| test/[    | No          | Evaluate conditional expressions.                |\n| eval      | No          | Evaluate arguments as shell script.              |\n\n#### Features\n[WIP]\n\n### LICENSE\n[MIT License](LICENSE) ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnao1215%2Fselfish","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnao1215%2Fselfish","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnao1215%2Fselfish/lists"}