# Sphinx documentation

:::{toctree}
:maxdepth: 2
:hidden:
:caption: Contents:
:glob:

*

:::

This package uses Sphinx to create documentation.

We like sphinx because it is a community driven project with a community
driven theme that the scientific Python community works on:

`pydata_sphinx_theme`

:::{note}
MkDocs is the other most common documentation tool used in the Python
ecosystem.
:::

## Setup your documentation

You can chose to create sphinx documentation using sphinx-quickstart.
Below is the Sphinx-quickstart workflow used to create these docs. However,
inevitably you will likely customize the documentation setup. So you may also
want to just copy this repository's structure.

```bash
➜ sphinx-quickstart
Welcome to the Sphinx 5.3.0 quickstart utility.

Please enter values for the following settings (just press Enter to
accept a default value, if one is given in brackets).

Selected root path: docs

You have two options for placing the build directory for Sphinx output.
Either, you use a directory "_build" within the root path, or you separate
"source" and "build" directories within the root path.
> Separate source and build directories (y/n) [n]: n

The project name will occur in several places in the built documentation.
> Project name: pyosPackage
> Author name(s): pyOpenSci Community
> Project release []: 1.10

If the documents are to be written in a language other than English,
you can select a language here by its language code. Sphinx will then
translate text that it generates into that language.

For a list of supported codes, see
https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-language.
> Project language [en]: en
```

## About the conf.py file

The `conf.py` file is what Sphinx uses to configure your documentation. This is
where you setup all of the features that you want your documentation to have.

:::{note}
Every tool and theme that you might use will have different configuration options
that will be placed in the `conf.py` file.
:::

:::{note}
You can remove the `make.bat` and `Makefile` files included with sphinx build.
In this package demo we use [Hatch environments and scripts](hatch-envs-scripts).
:::

## API / Reference documentation

It's useful to have a reference section in your docs that contains documentation
for your package's methods and classes. In this demo package we are using
[`sphinx-autoapi`](https://sphinx-autoapi.readthedocs.io/en/latest/index.html)
which will create these reference docs for you automatically. It's easy
to setup and creates nice-looking API docs without any needed setup.

`Sphinx-autoapi` is also customizable if you want to display things
differently.
