# Olive

Olive is a private Microsoft PowerToys Command Palette extension. It searches animated GIFs with Klipy and allows you to quickly use the one that suits you best!

## Requirements

- Windows 10/11 with PowerToys and Command Palette enabled.
- .NET SDK 10.
- Windows SDK `10.0.22621.0` or a compatible newer SDK.
- A Klipy API key.

## Klipy API Key

Olive stores the Klipy key locally in its Command Palette settings. Do not put the key in source code, Git, environment variables, or the package.

To configure it, open Command Palette, open the context commands for `Olive GIF Picker`, open Olive settings, paste the key into `Klipy API key`, then save.

## Build

```powershell
dotnet build .\Olive.sln -c Debug -p:Platform=x64
```

## Package

```powershell
.\scripts\Build-OlivePackage.ps1
```

Or double-click:

```text
scripts\Build-OlivePackage.cmd
```

This creates the shareable package in `dist\OlivePackage`.

The private signing file is exported to `dist\private\OlivePrivate.pfx`. Do not share it unless the recipient must be able to sign Olive builds.

## Install

From `dist\OlivePackage`:

```powershell
.\Install-Olive.ps1
```

Or double-click:

```text
Install-Olive.cmd
```

The script asks for administrator rights, imports `OlivePrivate.cer` into `Cert:\LocalMachine\Root`, then opens the `.msix` with Windows App Installer.

Restart PowerToys after installation.

## Uninstall

From `dist\OlivePackage` or `scripts\`:

```powershell
.\Uninstall-Olive.ps1
```

Or double-click:

```text
Uninstall-Olive.cmd
```

By default, uninstall removes the Olive package, the Olive certificate from `Cert:\LocalMachine\Root`, and Olive user data.

Use `-KeepCertificate` to keep the certificate.

Use `-KeepUserData` to keep Olive user data.

## Usage

1. Open PowerToys Command Palette.
2. Launch `Olive GIF Picker`.
3. Search for a GIF.
4. Select a result with Enter.
5. Paste with Ctrl+V in an app that accepts animated GIF files.

## Sharing

- Share only `dist\OlivePackage`.
- Do not share `dist\private\OlivePrivate.pfx`.
- Do not include the Klipy API key in the package.
- Each user must set the Klipy key in Olive settings.

## Notes

- Olive copies GIFs as files to preserve animation.
- Some apps may reject file pasting or use fallback text only.
- GIFs are downloaded in memory when copied.
