Status update 2022: Closh is now on hiatus.
Although the initial proof of concept turned out promising, it would take much more work to make it a robust tool that could be relied upon by a wider audience.
For now I recommend using fish as an interactive shell and babashka for scripts.
Closh combines the best of traditional unix shells with the power of Clojure. It aims to be a modern alternative to bash.
Demo showing how to execute commands and using Clojure to manipulate outputs in shell:
Why try to reinvent bash?
Why shell based on Clojure(Script)?
Warning: Closh is still in a early stage and under a heavy development, has many rough edges and is subject to change a lot. Closh is tested on Linux, should run on macOS too.
If you have feedback about a specific feature or found a bug please open an issue.
Use reddit for general discussion and to share scripts and workflows.
Chat room is on zulip or gitter.
If you would like to contribute take look at open issues. Leave a comment if you find anything interesting and we can improve the project together.
Windows proper is currently NOT supported, but it should run under WSL 2. If you know your way around with Windows, we need your help (see #54).
Try closh online in the browser without installing anything.
Download the jar file from the releases page and run it with:
java -jar closh-zero.jar
The jar file also contains a special header, so once you make it executable you can run it directly:
chmod +x closh-zero.jar
./closh-zero.jar
It can also run with clojure
CLI:
clojure -Sdeps '{:deps {closh {:git/url "https://github.com/dundalek/closh.git" :tag "v0.5.0" :sha "6a7c0aa293616e2d28f7f735e915a301e44d2121"}}}' -m closh.zero.frontend.rebel
Install closh (requires Node.js version 9.x, support for version 10 is in progress, see #113):
npm install -g closh
If you get a permission error then try:
npm install -g closh --unsafe-perm
To install development version from master branch:
npm i -g dundalek/closh
Start the shell:
closh
Run simple commands like you are used to:
$ echo hi
$ git status
$ ls -l *.json
Commands starting with a parenthesis are evaluated as Clojure code:
$ (+ 1 2)
; => 3
The power comes from combining shell commands and Clojure:
$ echo hi | (clojure.string/upper-case)
; => HI
$ ls *.json |> (reverse)
; Count number of files grouped by first letter sorted by highest count first
$ ls |> (group-by first) | (map #(update % 1 count)) | (sort-by second) | (reverse)
If you like closh you can set it as your default shell.
Be careful and first test closh from other shell to make sure it works on your machine so you don't get locked out of shell (after chsh
you need to log out and log back in for changes to take effect):
which closh | sudo tee -a /etc/shells
chsh -s $(which closh)
For the JVM version you can make it the default shell similarly like:
closh=/path/to/closh-zero.jar
chmod +x $closh
echo $closh | sudo tee -a /etc/shells
chsh -s $closh
Explore innovate UI ideas, explore what a shell could become and all possibilities within an ASCII terminal. The goal is to reimagine what people think a command line interface is without having to lose its core power.
Explore if we could take shell power and functionality and lift it from the boundaries set by ASCII terminals.
I hope that new UI ideas above will get people excited and interested. After that we should work on stabilization and adding all the remaining features people are used to from traditional shells.
Clone the repo and install dependencies
git clone git@github.com:dundalek/closh.git
cd closh
npm install
Run the cljs app
npm start
Run the clj app
clojure -m closh.zero.frontend.rebel
Run tests once
npm run test
Re-run tests on change
npm run test-auto
Run npm run pkg-java
. The resulting binary will be in target/closh-zero.jar
.
Thank you for the support:
Copyright (c) Jakub Dundalek and contributors
Distributed under the Eclipse Public License 1.0 (same as Clojure).
Logo created by @batarian71 under CC BY 4.0.