# Recluse — tiny packages caching proxy

Soon humanity will go to Mars and in order for the colonists to be able
to program, we will need a local mirror of packages.

## Installation

Please note that the project is in its infancy and
is **not** intended for production use.

**Debian/Ubuntu:**

```bash
sudo apt install curl gnupg

curl -fsSL https://pkg.dimidiumlabs.io/packages.gpg | sudo gpg --dearmor -o /usr/share/keyrings/dimidiumlabs.gpg
echo "deb [signed-by=/usr/share/keyrings/dimidiumlabs.gpg] https://pkg.dimidiumlabs.io/recluse/apt/ nightly main" | sudo tee /etc/apt/sources.list.d/recluse.list
sudo apt update && sudo apt install recluse

sudo systemctl enable --now recluse
```

**Fedora/RHEL:**

```bash
# DNF5 (Fedora 41+, RHEL 10+)
sudo dnf config-manager addrepo --from-repofile=https://pkg.dimidiumlabs.io/recluse/rpm/nightly/recluse-nightly.repo

# DNF4 (Fedora 40 and older, RHEL 8/9)
sudo curl -o /etc/yum.repos.d/recluse-nightly.repo https://pkg.dimidiumlabs.io/recluse/rpm/nightly/recluse-nightly.repo

sudo dnf install recluse
sudo systemctl enable --now recluse
```

**openSUSE:**

```bash
sudo rpm --import https://pkg.dimidiumlabs.io/packages.gpg
sudo zypper addrepo https://pkg.dimidiumlabs.io/recluse/rpm/nightly/ recluse-nightly
sudo zypper refresh
sudo zypper install recluse

sudo systemctl enable --now recluse
```

## Build from source

1. Clone repo: `git clone https://github.com/dimidiumlabs/recluse.git && cd recluse`
1. Provision the toolchain and system build dependencies: `mise bootstrap`
1. Build from source: `mise exec -- cargo build --release`
1. Install manually

    ```bash
    sudo groupadd --system recluse
    sudo useradd --system --gid recluse --no-create-home --shell /usr/sbin/nologin recluse
    sudo install -m 700 -o recluse ./pkg/recluse.toml     /etc/
    sudo install -m 755 -o root   ./pkg/recluse.service  /usr/lib/systemd/system
    sudo install -m 755 -o root   target/release/recluse /usr/local/bin/
    ```

1. start systemd service: `sudo systemctl enable --now recluse`

## Contributing

We welcome your contributions, including code, bug reports, ideas, and success
stories.

If you are making a contribution for the first time or from a new email, please
add yourself to the `.mailmap`.

### Signoff

To include your code, we ask that you read and agree to the [CLA](./CLA.md). To
sign, add a `CLA-Version: 1.0` and a `Signed-off-by` trailer to every commit
(`git commit -s --trailer "CLA-Version: 1.0"`). Each commit in a pull request
must carry a valid `Signed-off-by` line matching the commit author. Please use
your real name. We cannot include code from anonymous contributors.

AI agents MUST NOT add Signed-off-by tags. Only humans can legally certify the
Contributor License Agreement.

### AI policy

You may use AI agents when writing code and documentation. AI is not allowed for
media including images, videos, fonts at all. You must fully read, understand,
and cleanup any code generated by the agent. We ask that you disclose the
agent's use and indicate the tool, model, and extent of contribution.

Contributions should include an Assisted-by tag in the following format:
`Assisted-by: AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2]`, for example:
`Assisted-by: Claude:claude-4.6-opus coccinelle sparse`

Remember, AI agents should make software better, not worse.

## Licensing

Recluse source code is licensed under AGPL-3.0-or-later. Documentation is
licensed under CC-BY-4.0.

The bundled JetBrains Mono font files are licensed under OFL-1.1.
