Xonsh Mamba Installer¶
Xonsh is a Python-based shell, and running xonsh requires Python to be installed.
The Python version and its packages can be installed in various locations. When
you execute import or any other Python code during a xonsh session, it is
executed in the Python environment that was used to start the current xonsh
instance.
When xonsh is used as a core shell, it is necessary to keep the Python environment
with xonsh stable, predictable, and independent of system changes. Lightweight
environment managers such as venv, pipx, or rye do not fully address
this requirement. Package managers that can install fully isolated Python
environments as a core feature, such as miniconda or micromamba, should
be used.
The mamba-install-xonsh.sh script creates an independent Python environment
for xonsh using mamba in $TARGET_DIR without
affecting any other components of the system. This is an isolated,
xonsh-specific environment that is not affected by system package upgrades,
Python version changes, or other experiments with environments. You can use
xpip and xmamba to intentionally install packages into this environment.
Install the latest xonsh release with a well-tested Python version:
TARGET_DIR=$HOME/.local/xonsh-env PYTHON_VER=3.11 XONSH_VER='xonsh[full]' \
/bin/bash -c "$(curl -fsSL https://xon.sh/install/mamba-install-xonsh.sh)"
Install xonsh from the main Git branch with a stable Python version
TARGET_DIR=$HOME/.local/xonsh-env PYTHON_VER=3.11 XONSH_VER='git+https://github.com/xonsh/xonsh#egg=xonsh[full]' \
/bin/bash -c "$(curl -fsSL https://xon.sh/install/mamba-install-xonsh.sh)"
Preinstall and preload xontribs:
TARGET_DIR=$HOME/.local/xonsh-env PYTHON_VER=3.11 XONSH_VER='git+https://github.com/xonsh/xonsh#egg=xonsh[full]' \
PIP_INSTALL="uv xontrib-sh xontrib-jump-to-dir xontrib-dalias xontrib-pipeliner xontrib-whole-word-jumping" \
XONSHRC="\$XONSH_HISTORY_BACKEND = 'sqlite'; xontrib load -s sh jump_to_dir pipeliner whole_word_jumping dalias; \$PROMPT = \$PROMPT.replace('{prompt_end}', '\n{prompt_end}')" \
/bin/bash -c "$(curl -fsSL https://xon.sh/install/mamba-install-xonsh.sh)"
Usage¶
After installation, you no longer need to worry about Python or package
manipulations unintentionally breaking the shell. You can safely use pip,
brew, and other package managers without corrupting the xonsh environment.
After installation:
xonshrefers to~/.local/xonsh-env/xbin/xonsh.xpythonrefers to~/.local/xonsh-env/bin/python.xpiprefers to~/.local/xonsh-env/bin/python -m pip.xcontextshows the current context.You can run
source xmambato activate mamba (see below).
Additions:
xbin-xonshruns xonsh from xonsh-env ifxonshis overridden in$PATH.xbin-pythonruns Python from xonsh-env.Executable helpers from xonsh-env:
xbin-hiddenlists the internal hiddenbindirectory of xonsh-env. Example:xpip install lolcat && xbin-hidden.xbin-addadds an executable from the hiddenbindirectory to the visiblexbin. Example:xbin-add lolcat.xbin-listlists executables in the visiblexbindirectory.xbin-delremoves an executable fromxbin. The executable remains inbin.
Tips and Tricks¶
Using mamba from xonsh-env¶
To bind the xonsh-env micromamba to the xmamba alias, run:
source xmamba
You can then use:
xmamba activate base # Environment where xonsh was installed.
pip install lolcat # Install ``lolcat`` into the ``base`` environment.
xmamba deactivate
xmamba create --name myenv python=3.12
xmamba activate myenv
pip install lolcat # Install ``lolcat`` into ``myenv``.
xmamba deactivate
Cleaning¶
If you do not plan to use xmamba, you can reclaim disk space using
mamba clean:
source xmamba
xmamba clean -a
Uninstall¶
Simply delete $TARGET_DIR. For example:
rm -rf ~/.local/xonsh-env/
Known Issues¶
Do not blindly use as a login shell¶
Using xonsh as a login shell is not recommended unless you are experienced and understand the implications. Many tools expect the login shell to be POSIX-compliant, and issues may arise when such tools attempt to run POSIX-specific commands in xonsh.
std::bad_alloc¶
If you encounter the error:
terminate called after throwing an instance of 'std::bad_alloc'
delete the target directory (for example, rm -rf ~/.local/xonsh-env/) and
repeat the installation.