Changelog¶
Note
All notable changes to this project are documented below. This changelog is automatically generated from GitHub Releases.
v4.15.0: Option to display exit pipe status¶
2026-01-07
List Exit Statuses¶
- feat: add option to display exit pipe status by @Maritsu
in pure-fish/pure!395
| State | Preview |
|---|---|
| Enabled (list exit statuses) | |
| Enabled (convert statuses to signals) |
| Option | Default | Description |
|---|---|---|
pure_show_exit_status |
false |
true: Show list of status codes if the last command failed |
pure_convert_exit_status_to_signal |
false |
true: Convert statuses 129 and up to their signal names |
pure_symbol_exit_status_prefix |
\| |
Prefix when the last command failed |
pure_symbol_exit_status_separator |
\| |
Separator between statuses in a pipeline |
New Contributors¶
- @Maritsu made their first contribution in pure-fish/pure!395
Full Changelog: https://github.com/pure-fish/pure/compare/v4.14.1...v4.15.0
v4.14.0: π Being polite¶
2025-12-04
What's Changed¶
- feat/show version on install update by @edouard-lopez in pure-fish/pure!390
We do our best to clean up after ourselves and provides information on the version installed or updated.
Plugin Fresh Install¶

Plugin Update¶

Full Changelog: https://github.com/pure-fish/pure/compare/v4.13.0...v4.14.0
v4.13.0: Support Transient prompt¶
2025-12-03
What's Changed¶
- feat: add transient prompt support (Fish 4.1.0+) by @Copilot in pure-fish/pure!389
- Remove
fish_greeting.fishto stop overriding user's custom greeting by @Copilot in pure-fish/pure!387 - docs/screenshot automation by @edouard-lopez in pure-fish/pure!345
- ci/extract terminal screenshot to a docker image by @edouard-lopez in pure-fish/pure!386
Features¶
Transient Prompt¶
Simplify previous prompts in scrollback history (Fish 4.1.0+)
| Option | Default | Description |
|---|---|---|
fish_transient_prompt |
- | Fish built-in variable. Set to 1 to enable transient prompt. |
Shows a simplified prompt (just the prompt symbol) for previous commands, keeping your scrollback clean while maintaining full context on the current prompt.
When enabled, Fish re-runs the prompt with --final-rendering before executing a command.
Transient prompt works best with single line prompt enabled:
set --universal fish_transient_prompt 1
set --universal pure_enable_single_line_prompt true
Preview¶
| Enabled (simplified previous prompts, single line) | Disabled (full prompts in scrollback) |
|
|
Changes¶
π Customizing Fish Greeting¶
Since version
β₯4.13.x,puredoes not override yourfish_greetingfunction anymore, allowing you to use your own custom greeting.
To configure your Fish's greeting, edit $__fish_config_dir/functions/fish_greeting.fish function or the related variable:
Check for new release¶
Add the following to call pure_check_for_new_release on each new shell (i.e., when a new terminal session or tmux tab starts):
function fish_greeting
_pure_check_for_new_release
end
Void fish_greeting function¶
Voiding the fish_greeting.fish function will stop printing any greeting:
function fish_greeting
# remove content to disable greeting
end
Empty fish_greeting variable¶
Or set the greeting to an empty string to stop printing any greeting:
set --universal fish_greeting
Screenshots Automation for the Documentation¶
We automated the tedious task of taking screenshots of the prompt features and build the documentation. Thus, we have always-up-to-date features screenshots! πΈ
Dedicated project¶
This feature has been extracted to a dedicated repo pure-fish/docker-terminal-screenshot to allow a maximum of people to use it
Pre-built Docker image with OmarTawfik/terminal-screenshot!11 for automated terminal screenshot generation.
New Contributors¶
- @Copilot made their first contribution in pure-fish/pure!387 IA congratulating itself
(nice help bootstrapping PR, but still need human touch)
Full Changelog: https://github.com/pure-fish/pure/compare/v4.12.0...v4.13.0
v4.12.0: Shows git stash, commits ahead/behind count next to indicator¶
2025-09-23
What's Changed¶
- feat: numbered git stash, commits ahead/behind indicator by @lungsin in pure-fish/pure!382
- ci/fix nixos tests by @edouard-lopez in pure-fish/pure!384
Numbered git stash, commits ahead/behind indicator¶
β― set --universal pure_show_numbered_git_indicator false # default
β― set --universal pure_show_numbered_git_indicator true
Default (disabled) | Feature enabled
| --- | ---
| nothing next to stash, pull/push indicator
| count of stash entries, commit ahead/behind next to indicators
CI/Tests¶
- Test jobs now show fish version used ;
- update NixOS image to
2.31.2; - Fix all test on NixOS due to missing package ;
- Add AGENTS.md file to project ;
- support pre-release version number when bumping version (used in PR tests)
New Contributors¶
- @lungsin made their first Pull request contribution in pure-fish/pure!382
Full Changelog: https://github.com/pure-fish/pure/compare/v4.11.4...v4.12.0
v4.11.4: Improve VS Code Shell integration and NixOS tests¶
2025-09-22
What's Changed¶
- fix(vscode): prevent vscode from adding extra line by @edouard-lopez in pure-fish/pure!381
- docs/contributing.md by @edouard-lopez in pure-fish/pure!374
- ci: Update
nix.Dockerfileby @Pamplemousse in pure-fish/pure!376
Use source in NixOS¶
We use pure current source code when running the tests instead of the package from Nix repository. This way, tests are relevant to what is being developed (not was is already published).
Improve VS Code Shell integration¶
Prevent vscode from adding extra line
| Before | After |
|---|---|
New Contributors¶
- @Pamplemousse made their first contribution in pure-fish/pure!376
Thanks¶
- @Perlence for raising the issue, providing insight and feedback before release
Full Changelog: https://github.com/pure-fish/pure/compare/v4.11.3...v4.11.4
v4.11.3: NixOS fix sourcing from vendor directory¶
2025-06-06
What's Changed¶
- fix(nixOS): use relative path resolution so it works in vendor directory too by @edouard-lopez in pure-fish/pure!371
- docs: fix preview url by @edouard-lopez in pure-fish/pure!367
- ci/post release on social networks by @edouard-lopez in pure-fish/pure!372
- chore: Create FUNDING.yml by @edouard-lopez in pure-fish/pure!366
Thanks¶
- caspervk for the NixOs insights
Full Changelog: https://github.com/pure-fish/pure/compare/v4.11.2...v4.11.3
v4.11.2¶
2025-05-20
What's Changed¶
- fix: add shepherd to the list of supported init programs by @jbweston in pure-fish/pure!354
New Contributors¶
- @jbweston made their first contribution in pure-fish/pure!354
Full Changelog: https://github.com/pure-fish/pure/compare/v4.11.1...v4.11.2
v4.11.1¶
2025-05-19
What's Changed¶
- ci: allow manually running a workflow by @edouard-lopez in pure-fish/pure!361
- ci: drop 3.6.3 and 3.7.0 in favour of 3.7.1 and 4.0.2 by @edouard-lopez in pure-fish/pure!363
- fix: source _pure_prompt_new_line event handler instead of relying on autoloading by @edouard-lopez in pure-fish/pure!357
- fix/360 fish title append an extra space in 4 0 2 by @edouard-lopez in pure-fish/pure!365
Full Changelog: https://github.com/pure-fish/pure/compare/v4.11.0...v4.11.1
v4.11.0: π New Doc! β¨ AWS Profile Support and π€ tests on MacOS¶
2024-02-16
What's Changed¶
docs/revamp documentation and automate screenshots by @edouard-lopez in pure-fish/pure!343
feat: AWS profile prompt by @kwigley in pure-fish/pure!346
ci: Pass tests under macOS by @hyperupcall in pure-fish/pure!340
New Documentation¶
- a better User eXperience (UX)
- a dedicated site,
- searchable content (thanks to mkdocs)
- screenshot of prompt with/without feature enabled (thanks to terminal-screenshot)
- a better organization for options
- linkable content you can share/bookmark
rAWS Profile¶
| Option | Default | Description |
|---|---|---|
pure_enable_aws_profile |
true |
Show AWS profile name (based on AWS_VAULT or AWS_PROFILE). |
pure_symbol_aws_profile_prefix |
Prefix when a AWS profile is activated (default: undefined) |
| with a AWS Vault | with a AWS Profile |
|---|---|
Test against MacOS in CI¶
We use brew to install Fish.
New Contributors¶
- @hyperupcall made their first contribution in pure-fish/pure!340
Full Changelog: https://github.com/pure-fish/pure/compare/v4.10.1...v4.11.0
v4.10.1: Add support for Nix build environment¶
2024-01-25
What's Changed¶
- Add support for Nix build environment by @m15a in pure-fish/pure!338
Nix develop Shell activation¶
| Option | Default | Description |
|---|---|---|
pure_enable_nixdevshell |
false |
Indicate if a nix develop shell is activated (based on IN_NIX_SHELL). |
pure_symbol_nixdevshell_prefix |
βοΈ |
otherwise nerdfonts: 'σ± ' or 'ο' |
pure_color_nixdevshell_prefix |
pure_color_info |
prefix color |
pure_color_nixdevshell_symbol |
pure_color_mute |
symbol color |
Usage¶
set --universal pure_enable_nixdevshell true
New Contributors¶
-
@m15a made their first contribution in pure-fish/pure!338
-
Full Changelog: https://github.com/pure-fish/pure/compare/v4.9.0...v4.10.1
v4.9.0: Truncate prompt current_directory and title to keep last components¶
2024-01-23
What's Changed¶
- feat: truncate prompt current_directory and title to keep last components by @edouard-lopez in pure-fish/pure!337
Config¶
Prompt shortening¶
| Option | Default | Description |
|---|---|---|
pure_truncate_prompt_current_directory_keeps |
0 |
Truncate working directory path in prompt, but keeps the last to n components (0 full path in current directory) |
set --universal pure_truncate_prompt_current_directory_keeps 2
Window's title shortening¶
| Option | Default | Description |
|---|---|---|
pure_truncate_window_title_current_directory_keeps |
0 |
Truncate working directory path in window title, but keeps the last to n components (0 keep full path in window title) |
set --universal pure_truncate_window_title_current_directory_keeps 2
Thanks¶
- @1999masih for suggesting the idea
Full Changelog: https://github.com/pure-fish/pure/compare/v4.8.3...v4.9.0
v4.8.2: fix k8s context checking¶
2023-12-01
What's Changed¶
- fixed duplicate lines in readme by @n-crespo in pure-fish/pure!333
- fix k8s context checking by @edouard-lopez in pure-fish/pure!334
- Thanks to @bobsoppe #331 for the initial work
Default when no namespace set¶
New Contributors¶
- @n-crespo made their first contribution in pure-fish/pure!333
Full Changelog: https://github.com/pure-fish/pure/compare/v4.8.1...v4.8.2
v4.8.1: Add color customization to kubernestes symbol¶
2023-09-26
What's Changed¶
- refactor k8s support #330
New config in conf.d/pure.fish¶
_pure_set_default pure_color_k8s_symbol pure_color_dark
Usage¶
set --universal pure_enable_k8s true # enable the featyre
set --universal pure_color_k8s_symbol cyan # customize color
Preview¶
Thanks¶
- @bobsoppe for spotting the gap and submitting the PR
v4.8.0: NixOS support¶
2023-08-30
What's Changed¶
- feat: add NixOs Dockerfile by @edouard-lopez in pure-fish/pure!328
NixOS Support¶
Some of the tests and test utils assumed they were ran by $USER=nemo. This is not the case in NixOS and probably other distros as well. We fixed the tests for NixOS, but there is still work to do ensure
CI¶
NixOS Job¶
We added a job to run the test again NixOS 2.17.0 using Fish 3.6.1 only
Dropping Versions Support¶
The following versions have been dropped, following our Versions Support Strategy
- Fish: 3.0.2
- Fish: 3.1.2
- Fish: 3.2.2
- Fish: 3.3.1
Mocks¶
We recently introduced a set of helpers functions to mock and spy system or pure's function. Here is a summary, but be sure to check the content of https://github.com/pure-fish/pure/tree/master/tests/mocks for implementation details.
Mocking¶
_mock: Mock a function using the mock intests/mocks/function_name: name of the method to mock_mock_exit_status: Mock a response exit status for a mock functionfunction_name: name of the method to mockstatus_code: response to return_mock_response: Mock a response for a mock functionfunction_name: name of the method to mockresponse: response to return_clean_mock: Clean a mock function (warning: erase the function)function_name: name of the method to mock
Spying¶
_spy: Create a spy method so, you can check it's been called with_has_calledfunction_name: name of the method to spy_has_called: check spy method has been called, i.e has written to the /tmp/$function_name.mock_callsfunction_name: name of the that have been spied onfunction_args# arguments to passed to the spy
Cleaning¶
_clean_all_mocks: Clean all mock functions created by_mock_pure_unmock: Restore a pure function by reloading its sourcefunction_name: name of the method to mock_clean_all_spy_calls: Clean all spy calls created by_spy
Installation¶
fisher update pure-fish/pure; or fisher install pure-fish/pure
Thanks¶
- @pacien for spotting the issue, providing feedback about NixOS and his patience
Full Changelog: https://github.com/pure-fish/pure/compare/v4.7.1...v4.8.0
v4.7.1¶
2023-08-29
What's Changed¶
- fix/missing blank line between prompts 293 by @edouard-lopez in pure-fish/pure!326
Full Changelog: https://github.com/pure-fish/pure/compare/v4.7.0...v4.7.1
v4.7.0: Virtualenv feature flag and customization symbol¶
2023-08-22
What's Changed¶
- feat(python): add feature flag to control virtualenv behavior by @edouard-lopez in pure-fish/pure!325
Add feature flag and customization symbol for Virtualenv¶
Preview¶
Configuration¶
| Option | Default | Description |
|---|---|---|
pure_symbol_virtualenv_prefix |
Prefix when a Python virtual env is activated (default: undefined) | |
pure_enable_virtualenv |
true |
Show virtual env name (based on VIRTUAL_ENV or CONDA_DEFAULT_ENV). |
Default Behaviour: true¶
β― set --universal pure_enable_virtualenv true
Feature Enable: true¶
β― set --universal pure_enable_virtualenv true
β― set --universal pure_symbol_virtualenv_prefix "π "
Then activate a virtualenv or simulate one:
β― set VIRTUAL_ENV /home/test/fake/project/ # simulate virtualenv
~/projects/contributions/pure master β‘
π project β―
Installation¶
fisher install pure-fish/pure
Thanks¶
Full Changelog: https://github.com/pure-fish/pure/compare/v4.6.4...v4.7.0
v4.6.4¶
2023-08-21
What's Changed¶
- fix/remove user and host when outside container by @edouard-lopez in pure-fish/pure!327
Full Changelog: https://github.com/pure-fish/pure/compare/v4.6.3...v4.6.4
v4.6.3¶
2023-08-21
What's Changed¶
- Refrain from printing container string matches by @erik-inkapool in pure-fish/pure!283
New Contributors¶
- @erik-inkapool made their first contribution in pure-fish/pure!283
Full Changelog: https://github.com/pure-fish/pure/compare/v4.6.2...v4.6.3
v4.6.2¶
2023-08-21
What's Changed¶
Full Changelog: https://github.com/pure-fish/pure/compare/v4.6.1...v4.6.2
v4.6.1¶
2023-08-21
What's Changed¶
- fix/tests by @edouard-lopez in pure-fish/pure!324
- Add test helpers function:
_spy,_has_called,_cleanup_spy_calls - renaming:
setupβbefore_all,teardownβafter_all
Full Changelog: https://github.com/pure-fish/pure/compare/v4.6.0...v4.6.1
v4.6.0: Kubernetes context and namespace, message warn missing requirement, pull request template¶
2023-08-16
What's Changed¶
- feat/add kubernetes k8s support by @edouard-lopez in pure-fish/pure!323
- Pull request template
- Full Changelog: https://github.com/pure-fish/pure/compare/v4.5.0...v4.6.0
Kubernetes Context and Namespace¶
Configuration¶
| Option | Default | Description |
|---|---|---|
pure_symbol_k8s_prefix |
βΈ |
Prefix when being connected to Kubernetes/K8s |
pure_enable_k8s |
false |
true: shows kubernetes context and namespace. |
Default Behaviour: false¶
β― set --universal pure_enable_k8s false
~/projects/contributions/pure master β‘
Feature Enable: true¶
β― set --universal pure_enable_k8s true
~/projects/contributions/pure master β‘ βΈ int-infra-eks-cluster-eu-west-3/qraft
Warning Message When Command Required by Feature is Missing¶
For now, this mechanism is only on the k8s feature, but that's something I would like to add to other features.
The detection behaviour is implemented in _pure_check_availability function & tests and it's used like:
_pure_check_availability <feature_name> <cmd>
feature_name is the feature that requires the command/function cmd
Pull request template¶
Link to resources and how-tos to give contributors autonomy. See .github/pull_request_template.md for full content.
Preview¶
Installation¶
fisher install pure-fish/pure
Thanks¶
4.5.0: Custom window's and prompt's title shortening flag¶
2023-08-01
fish_title: add setting to configure pwd dir length¶
Add new pure_title_dir_length setting (default to 0) to configure the pwd dir length. 0 means complete directory name.
Prompt shortening¶
| Option | Default | Description |
|---|---|---|
pure_shorten_prompt_current_directory_length |
0 |
Shorten every prompt path component but the last to X characters (0 do not shorten) |
No shortening with 0¶
β― set --universal --export pure_shorten_prompt_current_directory_length 0
~/projects/contributions/pure master β‘ β‘
Custom shortening¶
β― set --universal --export pure_shorten_prompt_current_directory_length 1
~/p/c/pure master β‘ β‘
β― set --universal --export pure_shorten_prompt_current_directory_length 2
~/pr/co/pure master β‘ β‘
Window's title shortening¶
| Option | Default | Description |
|---|---|---|
pure_shorten_window_title_current_directory_length |
0 |
Shorten every window title path component but the last to X characters (0 do not shorten) |
No shortening with 0¶
β― set --universal --export pure_shorten_window_title_current_directory_length 0
Custom shortening¶
β― set --universal --export pure_shorten_window_title_current_directory_length 1
Installation¶
fisher install pure-fish/pure
Thanks¶
v4.4.4: Fish 3.6.1 and fix container detection default behavior¶
2023-06-29
Remove user@host information by default¶
The prompt behaviour was inconsistent with the pure_enable_container_detection flag. The component user@host was shown when it was not supposed to be (cf. #319).
Now, you need to enable the feature to see the prompt when inside container:
set --universal pure_enable_container_detection true
Installation¶
fisher install pure-fish/pure
Thanks¶
@broizter WSL 1 shows user@hostname #319
Fish 3.6.1 is supported¶
I updated the CI to test against 3.6.1 using pure-fish/docker-fish image.
v4.4.2: Restore fish_prompt to default content after _pure_uninstall run #316 ¶
2023-06-29
Restore fish_prompt to default content after _pure_uninstall run¶
pure-related variables were erased, but the fish_prompt file was still calling pure functions and throwing a lot of errors.
To mitigate this, we replace fish_prompt.fish from the user ($__fish_config_dir) by the default one (__fish_data_dir)
Thanks¶
- @andreysoktoev for raising #314
Installation¶
fisher install pure-fish/pure
What's Changed¶
- fix: restore fish_prompt to default content after _pure_uninstall run by @edouard-lopez in pure-fish/pure!316
Full Changelog: https://github.com/pure-fish/pure/compare/v4.4.1...v4.4.2
v4.4.1: Fix The path part doesn't show¶
2023-01-31
The path part doesn't show¶
When git is missing from the system, we incorrectly aborted the whole prompt, and we even had a test case for that
So now, we simply skip
git-related features when it is missing and carry on (cf. #313).
Thanks¶
Installation¶
fisher install pure-fish/pure
π¦ v4.4.0: Add SSH and container symbol customization¶
2022-12-14
As for previous features, the customization is opt-in, and it's up to the user to configure it.
π Container detection and prefix¶
The container detection is enabled by default, but you need to be inside a container to see its effect:

Default settings¶
pure_enable_container_detection true
pure_symbol_container_prefix "" # suggestion: 'π' or 'π¦'
Usage¶
The default symbol is an empty string, you will need to set what you want like:
β― set --universal pure_symbol_container_prefix 'π'
SSH detection and prefix¶
The SSH detection is enabled by default, but you need to be inside a container to see its effect:

Default settings¶
_pure_set_default pure_symbol_ssh_prefix "" # suggestion: 'ssh:/' or 'ππππ'
Usage¶
The default symbol is an empty string, you will need to set what you want like:
β― set --universal pure_symbol_ssh_prefix 'ssh:/'
Installation¶
fisher install pure-fish/pure
v4.3.1: Fix SSH prompt¶
2022-10-18
Remove unwanted character¶
- [x] fix(prompt): remove unwanted characters in my prompt #305
Installation¶
fisher install pure-fish/pure
Thanks¶
- @patricklewis for raising the #305
v4.3.0: Add flag to disable container detection¶
2022-10-18
Remove unwanted character¶
- [x] fix/301 voidlinux container detection #302
Add flag to disable container detection¶
Let user disable container detection as detecting this is not an exact science.
| Option | Default | Description |
|---|---|---|
pure_enable_container_detection |
true |
false: Do not check if run in container (e.g. docker, podman, LXC/LXD, etc.). |
Enable feature
β― set --universal pure_enable_container_detection true
Installation¶
fisher install pure-fish/pure
Thanks¶
v4.2.3: Skip Linux-only methods to detect container on MacOS ¶
2022-10-08
Fix: Linux-only methods to detect container on MacOS¶
Issue #295 was caused by functions that expected /proc/ to exist on the system to be executed. However, those are Linux-only approach.
So, running them only for Linux declared OS (cf. uname -s) fixed the issue in #298 .
### Installation
The project has a new home, thanks to @rafaelrinaldi. It's now under pure-fish organization:
fisher install pure-fish/pure
Thanks¶
- @Defman21 @nertzy @externl for helping the resolution
- @orf for making me aware of
fisher install pure-fish/pure@<BRANCH_NAME>
v4.2.2: Fix MacOS container detection #295¶
2022-10-06
Fix MacOS container detection¶
Detecting if we run inside a container or a bare OS require hacks specific to OS. The _pure_detect_container_by_pid_method isn't compatible with MacOS, as it's based on /proc/ contains.
- [x] warning: An error occurred while redirecting file '/proc/1/cgroup' #295
Installation¶
The project has a new home, thanks to @rafaelrinaldi. It's now under pure-fish organization:
fisher install pure-fish/pure
Thanks¶
- @Defman21 for spotting the issue