# nix-plugin-pijul
This [Nix](https://nixos.org/) plugin adds Pijul support to Nix
in the form of a fetcher. This means that `builtins.fetchTree`,
`builtins.getFlake` and the nix3 CLI tools now support Pijul
repositories.
The following new URL schemes are supported:
- pijul+https
- pijul+http
- pijul+ssh
- pijul+file
Right now, the first three support specifying channel and state for
pure fetching, pijul+file right now only fetches from the worktree
and doesn't support these yet.
NB: The fetcher from this plugin does not automatically get used when running
nix commands (e.g. `nix build`) in a Pijul repository, since this is hardcoded
for Git and Mercurial in Nix. For this, I have a patch that adds the relevant
code for Pijul, it's available as
[nix-pijul](https://git.sr.ht/~dblsaiko/nix-extras/tree/master/item/packages/nix-pijul.nix)
in my *nix-extras* flake. It replaces the normal Nix installation and can be
used in addition to this plugin.
## Releases
Released version archives are available [here](https://dblsaiko.net/pub/nix-plugin-pijul).
## Installing
The package is available in nixpkgs:
```
% nix build nixpkgs#nix-plugin-pijul
```
Add the built pijul.so module to plugin-files in nix.conf. Make sure it is built
for the Nix version you are using it with.
The plugin executes pijul to actually fetch repositories, make sure
that is available in the PATH.
The package is also available as part of my *nix-extras* flake:
```
% nix build sourcehut:~dblsaiko/nix-extras#nix-plugin-pijul
```
### NixOS (with the nix-extras overlay):
```nix
{pkgs, config, ...}: {
environment.systemPackages = [pkgs.pijul];
nix.settings.plugin-files = "${pkgs.nix-plugin-pijul.override { nix = config.nix.package; }}/lib/nix/plugins/pijul.so";
# Optional: Use the patched Nix to automatically use Pijul fetcher in local
# repositories
nix.package = pkgs.nix-pijul;
}
```
## Examples
- `nix build pijul+https://nest.pijul.com/pijul/pijul`
- `nix build pijul+https://nest.pijul.com/pijul/pijul?channel=main&state=PNJL5TPZLQ3VXAASTLUX7462RCRPO7TV3GKOTTHDZABDQCBMXPRQC`
- ```nix
{
inputs = {
nix-plugin-pijul.url = "pijul+https://nest.pijul.com/dblsaiko/nix-plugin-pijul";
};
outputs = { self, nix-plugin-pijul }: {
# ...
};
}
```
## Acknowledgements
Code based on the [pijul fetcher
PR](https://github.com/NixOS/nix/pull/8730) by Nikodem Rabuliński.