The user-friendly command line shell.
Go to file
Johannes Altmanninger 97db461e7f README for this fork
2025-01-19 18:29:07 +01:00
.builds sourcehut builds: remove obsolete "env" 2024-12-23 08:40:02 +01:00
.cargo .cargo/config.toml: exclude from tarball 2025-01-12 10:34:16 +08:00
.github README for this fork 2025-01-19 18:29:07 +01:00
benchmarks Remove redundant newlines, add .idea to gitignore 2024-12-29 15:31:03 +01:00
build_tools README for this fork 2025-01-19 18:29:07 +01:00
cmake cmake/Tests: Default to half the cores 2025-01-14 17:55:09 +01:00
debian README for this fork 2025-01-19 18:29:07 +01:00
doc_internal Build, codesign, and notarize macOS packages in CI 2024-07-05 17:29:28 -07:00
doc_src Back out "bind: Remove "c-" and "a-" shortcut notation" 2025-01-19 18:29:07 +01:00
docker Remove redundant newlines, add .idea to gitignore 2024-12-29 15:31:03 +01:00
etc Update /etc/config.fish to use current syntax 2020-05-08 15:20:36 +08:00
osx Remove redundant newlines, add .idea to gitignore 2024-12-29 15:31:03 +01:00
po Update German translation 2025-01-10 14:10:36 +01:00
printf README for this fork 2025-01-19 18:29:07 +01:00
share Un-hide documentation of non-fish shell builtins 2025-01-19 18:29:07 +01:00
src Allow foo=bar global variable assignments 2025-01-19 18:29:07 +01:00
tests Allow foo=bar global variable assignments 2025-01-19 18:29:07 +01:00
.cirrus.yml Remove redundant newlines, add .idea to gitignore 2024-12-29 15:31:03 +01:00
.clang-format Add back .clang-format 2024-08-07 13:11:22 +02:00
.editorconfig Update .editorconfig to use "unset" instead of "off" (#10972) 2024-12-31 15:04:37 -06:00
.gitattributes .gitattributes: fixup e4674cd7 2025-01-12 11:32:34 +08:00
.gitignore Remove redundant newlines, add .idea to gitignore 2024-12-29 15:31:03 +01:00
BSDmakefile Preserve CMake options when make is invoked 2020-07-12 18:26:12 -05:00
build.rs Add status buildinfo (#10896) 2024-12-29 13:37:28 +01:00
Cargo.lock Update cargo dependencies 2025-01-09 17:00:30 -06:00
Cargo.toml README for this fork 2025-01-19 18:29:07 +01:00
CHANGELOG.rst Always treat brace at command start as compound statement 2025-01-19 18:29:07 +01:00
CMakeLists.txt cmake: Remove some more dead gunk 2025-01-12 17:52:59 +01:00
CODE_OF_CONDUCT.md Remove redundant newlines, add .idea to gitignore 2024-12-29 15:31:03 +01:00
CONTRIBUTING.rst Rewrite test driver in python (#11028) 2025-01-11 21:13:19 +01:00
COPYING update copyright years to be unbounded 2025-01-08 20:38:43 +08:00
deny.toml deny.toml: Add Unicode license 2025-01-11 21:14:01 +01:00
Dockerfile Remove redundant newlines, add .idea to gitignore 2024-12-29 15:31:03 +01:00
fish.desktop Update fish.desktop (#8584) 2021-12-25 23:52:54 -08:00
fish.pc.in Use pkg-config variables 2020-04-04 13:07:54 +02:00
fish.png fish.png: use the same thing we ship with the docs 2021-10-16 14:12:44 -07:00
fish.spec.in update CMake requirement 2024-12-26 13:20:00 +08:00
GNUmakefile GNUMakefile: remove redundant CMake arguments 2020-12-29 16:31:43 +01:00
README.rst README for this fork 2025-01-19 18:29:07 +01:00

neofish
=======

This is a soft fork of `fish shell <https://fishshell.com/>`_, a Unix shell for interactive use.

Our goal is to further improve the interactive shell experience, especially for users who are
already familiar with POSIX shells.

Most of the current changes add well-known syntax present in other shells. Just like ZSH, neofish
will not be strictly POSIX compatible (at least not in the default mode). For scripting, we
recommend using ``/bin/sh`` instead.

Our ``master`` branch is frequently rebased on `upstream
<https://github.com/fish-shell/fish-shell/>`_ and force-pushed. This makes it easy to both see the
net difference and to reintegrate any changes into upstream, which we're happy work on. Maybe some
features should be opt-in?

Here is an overview of the changes, at various stages of completion.
Some already integrated into upstream, some others are functional but lack polish.

- ☑ ``$()`` command substitutions
- ☑ ``$()`` in command position (to compute the command to run)
- ☑ ``{}`` compound commands
- ☑ ``()`` subshells
- ☐ ``$(())`` arithmetic expansion
- ☑ control flow like  ``if foo; then; fi`` and ``for; do; done``.
- ☑ ``foo=bar`` variable overrides
- ☑ ``foo=bar`` global variable assignments
- ☐ ``foo() { :; }`` function definitions
- ☐ POSIX-style single quotes
- ☐ POSIX-like heredocs (`cat << EOF`)
- ☑ variables like ``$?``, ``$$``, ``$#`` and ``$@``
- ☐ ``${foo#prefix}`` variable expansion
- ☐ process substitution (``<(foo)``)
- ☐ maybe add nestable and raw quoting syntax
- ☑ stop overriding ``MANPATH`` which shadows docs of POSIX utilties like ``exec``
- ☑ familiar abbreviations for modifier keys like ``bind c-x`` for ``bind ctrl-x``

Installation
------------

Compiling fish requires:

- Rust (version 1.70 or later)
- a C compiler
- Sphinx (to build documentation)

.. code:: shell

   git clone https://github.com/krobelus/neofish
   cd neofish
   cargo install --path .
   ~/.cargo/bin/fish
   # configure your terminal to run that binary

Optional Dependencies
---------------------

The following optional features also have specific requirements:

-  builtin commands that have the ``--help`` option or print usage
   messages require ``nroff`` or ``mandoc`` 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
-  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

Additionally, running the full test suite requires Python 3, tmux, and the pexpect package.