{"id":26222209,"url":"https://github.com/walles/vpixsh","last_synced_at":"2026-05-05T14:08:10.465Z","repository":{"id":45634025,"uuid":"434683480","full_name":"walles/vpixsh","owner":"walles","description":"A bash compatible shell (unlike fish) which interactive nicities (unlike bash)","archived":false,"fork":false,"pushed_at":"2022-01-05T17:04:10.000Z","size":114,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2023-03-31T12:06:28.388Z","etag":null,"topics":["bash","fish-shell","shell"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/walles.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-03T17:42:52.000Z","updated_at":"2022-01-05T15:54:23.000Z","dependencies_parsed_at":"2022-08-28T01:20:59.583Z","dependency_job_id":null,"html_url":"https://github.com/walles/vpixsh","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walles%2Fvpixsh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walles%2Fvpixsh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walles%2Fvpixsh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walles%2Fvpixsh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/walles","download_url":"https://codeload.github.com/walles/vpixsh/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243258493,"owners_count":20262297,"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":["bash","fish-shell","shell"],"created_at":"2025-03-12T16:51:33.740Z","updated_at":"2025-10-26T19:34:13.280Z","avatar_url":"https://github.com/walles.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `vpixsh`\n\n`vpixsh` is a shell featuring:\n\n- [`sh` compatible\n  grammar](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10)\n  (unlike `fish`)\n  - (But no Here-Documents, they make no sense on the commandline)\n- Syntax highlighting at the prompt\n- No scripting support except what's required below, `vpixsh` should be a\n  commandline first experience\n- Support [the `export X=y`\n  construct](https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#index-export)\n  because I like it\n- Support [the `$()` command substitution\n  syntax](https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution)\n  because I like it\n- The [`venv`](https://docs.python.org/3/library/venv.html) `bash` scripts\n  should work:\n  - [`. ./env/bin/activate`](https://github.com/pypa/virtualenv/blob/main/src/virtualenv/activation/bash/activate.sh)\n    (not entirely sure about this link)\n  - Prompt should now show the `(env)` prefix\n  - Some `pip install` invocation\n  - `deactivate`\n- Consider whether we should be able to use `bash` command completions. This\n  probably scales better than trying to roll our own, no matter how automated we\n  can make that.\n- Configuration in `~/.vpixsh/config.yaml`\n  - Default environment variables\n  - `$PATH` value\n- `git` friendly prompt. Maybe as a separate binary?\n- Command line history stored in `~/.vpixsh/history`. No suffix to this file,\n  this enables us to switch formats if needed. Start out with whatever format\n  `fish` is using, they probably thought this through already.\n- `fzf` based fuzzy history search\n\nCred to\n[https://random.org](https://random.org/strings/?num=10\u0026len=4\u0026loweralpha=on\u0026unique=on\u0026format=html\u0026rnd=new)\nfor the name.\n\n## Development\n\nDo `cargo test` to run the test suite.\n\n## TODO\n\n### Before Johan can use it as his default shell\n\n- Basic completion of binaries, and arg file names\n- Suggestions from history\n- Read environment from a config file, useful for `PAGER` and `EDITOR` variables\n- Smart completion (`man signa` then TAB should complete into `man signal`)\n- Syntax highlighted command line\n- Informative VCS prompt\n- Pipes (`echo hej | wc -l`)\n- Handle ctrl-c on the command line as expected\n- Start `cat`, do ctrl-c, `cat` should now terminate with a signal and you\n  should get your shell prompt back\n\n### Before others can use it\n\n- Print `^^^` markers pointing out any parse errors\n- Support for `exit` command\n- Print useful error diagnostics on command line parse errors\n- Print a report-errors-here message on crashes and on startup\n- Job control, backgrounding things with ctrl-z or `\u0026`, `fg`, `bg`, `jobs`\n\n### Misc\n\n- Typing just a directory name should `cd` into that directory\n- After you enter commands in two shells running at the same time, then exit\n  both shells, all commands should then be visible in the history file\n- Complete `tokenizer.rs` with support for all kinds of quoting\n- Fully `bash` compatible command line parser\n- Print hints on `cd` so we know where we're going on `cd ../..`\n- Smart history search using `fzf` (or whatever)\n- `shellcheck` command lines and show as-you-type hints\n- Handle multiline input at the prompt; `for` loops, function declarations...\n- `fish` has automatic coloring of both BSD `ls` (set `CLICOLOR`) and GNU `ls`\n  (pass `--color=auto`), should we do that as well?\n- Prompt works OK if current directory is inaccessible\n- `cd` works OK if current directory is inaccessible\n\n### DONE\n\n- Support for ctrl-d to exit\n- Main loop:\n  - Print prompt\n  - Read command line\n  - Parse the command line we just read\n  - Execute the command line\n- Basic prompt with path and a `$`\n- `cd` support\n  - Prompt should change after `cd`\n  - Spawned processes should get new CWDs after `cd`\n  - `cd` should handle relative directories\n  - `cd ..` should go one notch up, not add `..` to the current path\n  - `cd -` should go back to the previous directory\n- Print prompt in green (same as `fish`)\n- When people do `ls`, they should get color. Export CLICOLOR=1 by default!\n- If the last command failed, show its exit code in red at the prompt\n- Test prompt exit status display with:\n  - Success\n  - Failure\n  - Kill by signal\n  - Command not found\n  - Various `cd` issues\n  - `cd` into disallowed directory\n- Command line editing\n- History collection\n- Arrow up to go back in history\n- History persistence between sessions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalles%2Fvpixsh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwalles%2Fvpixsh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalles%2Fvpixsh/lists"}