Manual for Pijul
# Installing

## Releases

The main channel to compile **Pijul** from source is the Rust Language
package manager: **cargo**. You'll need to download **rustup** from [here]https://www.rust-lang.org/tools/install to install **cargo**. 

After installing **cargo**, there are also three different channels to choose from: stable, beta, and nightly. If you're unsure of which channel to choose, go with *stable* as your default rust toolchain:

```
rustup default stable
```

You can find more information about channels [here]https://rust-lang.github.io/rustup/concepts/channels.html. 

If you've already installed **rustup** before, make sure to *update* it.

Next, you'll need the necessary **libraries and header files** installed on your computer and clang compiler:

<br />

**On Debian:**

```
sudo apt install make libsodium-dev libclang-dev pkg-config libssl-dev libxxhash-dev libzstd-dev clang
```

**On OSX:**

```
brew install llvm libsodium openssl xxhash zstd
```

**On Arch Linux:**

```
sudo pacman -S clang libsodium gcc-libs rustup pkgconf diffutils make xxhash
```

**On openSUSE Tumbleweed:**

```
sudo zypper in clang-devel libopenssl-devel libsodium-devel libzstd-devel pkgconfig xxhash-devel
```

**On Void (Linux):**

```
sudo xbps-install libgcc-devel libressl-devel libsodium-devel libzstd-devel xxHash-devel
```

**On Fedora Linux**
```
sudo dnf install clang-devel openssl-devel libsodium-devel libzstd-devel pkgconfig xxhash-devel
```

<br />

After installing the necessary libraries and header files, it's time to install **Pijul**!

Run the following command in your terminal:

```
cargo install pijul --version "~1.0.0-beta"
```

You might need to add the install directory to your \$PATH environment
variable. For example: adding the following to your
`~/.config/environment.d/envvars.conf`:

```
export PATH="\$PATH:$HOME/.cargo/bin/"
```

## Distribution packages

### Nix and NixOS

Nix is a package manager that can be installed on any Linux distribution and OSX.

```
nix-env --upgrade
nix-env -iA pijul
```

### Debian

```
curl https://nixos.org/nix/install | sh
```

If it fails with the following error:

```
nix error: cloning builder process: Operation not permitted
```

Then create a file as root:
```
sudo su root -c 'echo "kernel.unprivileged_userns_clone=1" >> /etc/sysctl.d/nix.conf'
```

### Arch Linux

Pijul is packaged in [AUR]https://aur.archlinux.org/packages/pijul/. It should be up-to-date or at least close.

### openSUSE

For the development version (`1.0.0-beta.X`) of Pijul,
[a package]https://build.opensuse.org/package/show/devel:tools:scm/pijul for
openSUSE Tumbleweed in the openSUSE Build Service:

```
sudo zypper addrepo -f -r https://download.opensuse.org/repositories/devel:/tools:/scm/openSUSE_Tumbleweed/devel:tools:scm.repo
sudo zypper install --allow-vendor-change pijul
```

Use the development version at your own risk. As soon as Pijul 1.0.0 is
published, the package will be updated and submitted to openSUSE Tumbleweed.

### Void (Linux)

```
xbps-install pijul
```

### FreeBSD

```
pkg install pijul
```

Alternatively, you can install the [port]https://www.freshports.org/devel/pijul, which is more likely to be up-to-date but means you have to wait for `rust` and `pijul` to build from scratch:
```
cd /usr/ports/devel/pijul/ && make install clean
```

### Windows

We do not provide official Windows binaries at the moment, but
[community-provided binaries are available]https://github.com/boringcactus/pijul-windows-builds/releases/latest.