Package Manager
===============

You can install xonsh using ``conda``, ``pip`` or the package manager for 
your operating system distribution.

For the fullest interactive user experience, these additional packages should also be installed:

  :prompt-toolkit: for command completion, configurable key bindings and especially multi-line line editing.
  :pygments: for xonsh and Python syntax-specific highlighting
  :setproctitle: updates process title (in terminal window and process monitor) to match Xonsh arguments.

Installing with these packages is the recommended configuration and is documented first.   
If you are operating in a specialized or restricted environment, you can install just the xonsh package, as 
described in `fewer prerequisites`_


**conda:**

.. code-block:: console

    $ conda config --add channels conda-forge
    $ conda install xonsh


**pip:** Typically you will activate a virtual environment and install xonsh there.  This will ensure that you invoke the 
correct Python interpreter and ``pip`` module. 

.. code-block:: console

    $ pip install 'xonsh[full]'

This uses the pip 'extras' syntax, and is equivalent to:

.. code-block:: console

    $ pip install pygments prompt-toolkit setproctitle xonsh

The above ``pip`` commands may have to be spelled ``pip3`` or ``sudo pip3`` if you are not installing in a virtual environment.

**source:** Pip can also install the most recent xonsh source code from the 
`xonsh project repository <https://github.com/xonsh/xonsh>`_.

.. code-block:: console

    $ pip install pygments prompt-toolkit setproctitle https://github.com/xonsh/xonsh/archive/main.zip

Spelling of ``pip`` command may likewise have to be amended as noted above.

**platform package managers**
Various operating system distributions have platform-specific package managers which may offer a xonsh package.  
This may not be  the most current version of xonsh, but it should have been tested for stability on that platform
by the distribution managers.


   +---------------------------+-----------------------------+---------------------+
   | OS or distribution        |  command                    |   Package(s)        |
   +===========================+=============================+=====================+
   | Debian/Ubuntu             | ``$ [sudo] apt install``    |                     |
   +---------------------------+-----------------------------+    pygments         |
   | Fedora                    | ``$ [sudo] dnf install``    |    prompt-toolkit   |
   +---------------------------+-----------------------------+    setproctitle     |
   | Arch Linux                | ``$ [sudo] pacman -S``      |    xonsh            |
   +---------------------------+-----------------------------+                     |
   | OSX                       | ``$ [sudo] brew install``   |                     |
   +---------------------------+-----------------------------+---------------------+


If you run into any problems, please let us know!

Fewer Prerequisites
--------------------

A design goal of Xonsh is to run in any environment that supports a (supported) Python interpreter, you 
can install just the ``xonsh`` package (using any package manager).

.. code-block:: console

    pip install xonsh

When it starts up, if xonsh does not find ``pygments`` or ``setproctitle`` packages, it simply does not colorize 
or highlight syntax or set process title, respectively.  

If it does not find ``prompt-toolkit`` package, it will 
use the Python ``readline`` module (which reads configuration  file ``.inputrc`` in a manner compatible with ``GNU readline``).  
To ensure xonsh uses ``readline`` even if ``prompt-toolkit`` is installed, configure this in your
``.xonshrc`` file:

.. code-block:: xonshcon

    $SHELL_TYPE = 'readline'

Windows
-------

On Windows 10, the separately-installable `Windows Terminal app`_ is recommended.

.. _`Windows Terminal app`: https://github.com/microsoft/terminal/releases