this shouldn't be used yet
  • Shell 57.2%
  • Rust 38.5%
  • Python 3%
  • HTML 0.3%
  • JavaScript 0.3%
  • Other 0.4%
Find a file
Luna Borowska c24c09fd38
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Remove Cirrus configuration
2026-03-11 11:29:03 +01:00
.cargo xtask: add initial setup 2026-01-21 17:43:26 +01:00
benchmarks Clean up shell scripts 2025-04-29 10:14:06 +02:00
build_tools Remove changelog 2026-03-10 17:41:24 +01:00
cmake format: use 4-space indents in more files 2026-03-09 16:52:07 +11:00
contrib/debian Release 4.5.0 2026-02-17 11:32:33 +11:00
crates refactor: extract perror 2026-03-09 16:52:08 +11:00
doc_internal rename: crate::wchar::prelude -> crate::prelude 2025-12-19 19:37:11 +01:00
doc_src Put shork logo in documentation 2026-03-11 11:13:25 +01:00
docker format: use 4-space indents in more files 2026-03-09 16:52:07 +11:00
etc
localization/po feat: add completions for tflint 2026-03-10 09:56:05 +08:00
osx format: use 4-space indents in more files 2026-03-09 16:52:07 +11:00
share Revert "Vi bindings: remove unused special input functions" 2026-03-10 17:06:30 +01:00
src Revert "Address MSRV clippy lint" 2026-03-10 17:21:07 +01:00
tests Add basic Woodpecker CI configuration 2026-03-10 23:55:59 +01:00
updatecli.d Remove Cirrus configuration 2026-03-11 11:29:03 +01:00
vagrants/bsds build.rs: remove code duplication in version computation 2026-01-12 12:17:48 +01:00
.clang-format Add back .clang-format 2024-08-07 13:11:22 +02:00
.editorconfig format: use 4-space indents in more files 2026-03-09 16:52:07 +11:00
.gitattributes Remove .builds directory 2026-03-11 11:27:20 +01:00
.gitignore More automation for updating dependencies 2025-11-01 12:55:01 +01:00
.rustfmt.toml build_tools/style.fish: check that {rustfmt,Cargo}.toml edition specs are in sync 2025-11-01 12:42:55 +01:00
.woodpecker.yml Deploy codeberg pages with documentation 2026-03-11 00:45:17 +01:00
BSDmakefile BSD/GNUmakefile: update to use new fish_run_tests target 2025-02-12 08:56:38 +08:00
build.rs clippy: fix str_to_string lint 2026-02-17 11:13:34 +11:00
Cargo.lock refactor: extract perror 2026-03-09 16:52:08 +11:00
Cargo.toml Revert "Reliably suppress warning about unknown Rust lints" 2026-03-10 16:03:08 +01:00
CHANGELOG.rst Remove changelog 2026-03-10 17:41:24 +01:00
CMakeLists.txt format: use 4-space indents in more files 2026-03-09 16:52:07 +11:00
CODE_OF_CONDUCT.md Remove redundant newlines, add .idea to gitignore 2024-12-29 15:31:03 +01:00
CONTRIBUTING.rst format: replace style.fish by xtask 2026-02-24 16:33:04 +11:00
COPYING update copyright years to be unbounded 2025-01-08 20:38:43 +08:00
deny.toml widecharwidth: extract into separate crate 2025-12-18 15:13:50 +01:00
fish.pc.in
fish.png fish.png: use the same thing we ship with the docs 2021-10-16 14:12:44 -07:00
fish.spec.in fish.spec: clean up dependencies 2025-12-17 10:32:20 +08:00
GNUmakefile editorconfig: set indent_style=tab for makefiles 2026-02-03 11:26:59 +11:00
pyproject.toml Revert "Update to sphinx 9.1" 2026-03-10 16:54:36 +01:00
README.rst Fix header syntax mistake in readme 2026-03-11 11:23:35 +01:00
SECURITY.md Add myself as SECURITY contact and reformat 2025-05-11 11:48:03 -07:00
uv.lock Add basic Woodpecker CI configuration 2026-03-10 23:55:59 +01:00

shork - finally, a command line shell for lesbians Build Status

shork is a smart and user-friendly command line shell for Linux. shork includes features like syntax highlighting, autosuggest-as-you-type, and fancy tab completions that just work, with no configuration required.

Quick Start

shork generally works like other shells, like bash or zsh. A few important differences can be found at https://sugar700.codeberg.page/shork/tutorial.html by searching for the magic phrase “unlike other shells”.

Detailed user documentation is available by running help within shork, and also at https://sugar700.codeberg.page/shork/

Getting shork

See the Building section for instructions.

Running shork

Once installed, run shork from your current shell to try shork out!

Dependencies

Running shork requires:

  • some common *nix system utilities (currently mktemp), in addition to the basic POSIX utilities (cat, cut, dirname, ls, mkdir, mkfifo, rm, sh, sort, tee, tr, uname and sed at least, but the full coreutils plus find and awk is preferred)

The following optional features also have specific requirements:

  • builtin commands that have the --help option or print usage messages require man for display
  • automated completion generation from manual pages requires Python 3.5+
  • the fish_config web configuration tool requires Python 3.5+ and a web browser
  • the alt-o <shared-binds-alt-o> binding requires the file program.
  • system clipboard integration (with the default Ctrl-V and Ctrl-X bindings) require either the xsel, xclip, wl-copy/wl-paste or pbcopy/pbpaste utilities
  • full completions for yarn and npm require the all-the-package-names NPM module
  • colorls is used, if installed, to add color when running ls on platforms that do not have color support (such as OpenBSD)

Building

Dependencies

Compiling shork requires:

  • Rust (version 1.85 or later), including cargo
  • CMake (version 3.15 or later)
  • a C compiler (for system feature detection and the test helper binary)
  • PCRE2 (headers and libraries) - optional, this will be downloaded if missing
  • gettext (only the msgfmt tool) - optional, for translation support
  • an Internet connection, as other dependencies will be downloaded automatically

Sphinx is also optionally required to build the documentation from a cloned git repository.

Additionally, running the full test suite requires diff, git, Python 3.5+, pexpect, less, tmux and wget.

Building from source with CMake

Using the steps below makes shork difficult to uninstall or upgrade.

To install into /usr/local, run:

mkdir build; cd build
cmake ..
cmake --build .
sudo cmake --install .

The install directory can be changed using the -DCMAKE_INSTALL_PREFIX parameter for cmake.

CMake Build options

In addition to the normal CMake build options (like CMAKE_INSTALL_PREFIX), shork's CMake build has some other options available to customize it.

  • Rust_COMPILER=path - the path to rustc. If not set, cmake will check $PATH and ~/.cargo/bin
  • Rust_CARGO=path - the path to cargo. If not set, cmake will check $PATH and ~/.cargo/bin
  • Rust_CARGO_TARGET=target - the target to pass to cargo. Set this for cross-compilation.
  • WITH_DOCS=ON|OFF - whether to build the documentation. By default, this is ON when Sphinx is installed.
  • FISH_INDENT_FOR_BUILDING_DOCS - useful for cross-compilation. Set this to the path to the fish_indent executable to use for building HTML docs. By default, ${CMAKE_BINARY_DIR}/fish_indent will be used. If that's not runnable on the compile host, you can build a native one with cargo build --bin fish_indent and set this to $PWD/target/debug/fish_indent.
  • FISH_USE_SYSTEM_PCRE2=ON|OFF - whether to use an installed pcre2. This is normally autodetected.
  • WITH_MESSAGE_LOCALIZATION=ON|OFF - whether to include translations.
  • extra_functionsdir, extra_completionsdir and extra_confdir - to compile in an additional directory to be searched for functions, completions and configuration snippets

Building shork with Cargo

You can also build shork with Cargo. This example uses uv to install Sphinx (which is used for man-pages and --help options). You can also install Sphinx another way and drop the uv run --no-managed-python prefix.

git clone https://codeberg.org/sugar700/shork
cd shork

# Optional: check out a specific version rather than building the latest
# development version.
git checkout "$(git for-each-ref refs/tags/ | awk '$2 == "tag" { print $3 }' | tail -1)"

uv run --no-managed-python \
    cargo install --path .

This will place standalone binaries in ~/.cargo/bin/, but you can move them wherever you want.

To disable translations, disable the localize-messages feature by passing --no-default-features --features=embed-manpages to cargo.

You can also link this build statically (but not against glibc) and move it to other computers.

Here are the remaining advantages of a full installation, as currently done by CMake:

  • Man pages like shork(1) installed in standard locations, easily accessible from outside shork.
  • Separate files for builtins (e.g. $PREFIX/share/shork/man/man1/abbr.1).
  • A local copy of the HTML documentation, typically accessed via the help shork function. In Cargo builds, help will redirect to https://sugar700.codeberg.page/shork/
  • Ability to use our CMake options extra_functionsdir, extra_completionsdir and extra_confdir, (also recorded in $PREFIX/share/pkgconfig/shork.pc) which are used by some package managers to house third-party completions. Regardless of build system, shork uses $XDG_DATA_DIRS/{vendor_completion.d,vendor_conf.d,vendor_functions.d}.

Contributing Changes to the Code

See the Guide for Developers.

Contact Us

Found a bug? Have an awesome idea? Please open an issue.