Metadata-Version: 2.4
Name: lolbin
Version: 2.0.1
Summary: A small python cli to manage paste.lol from cli
Project-URL: Homepage, https://git.ache.one/lolbin
Author-email: ache <ache@ache.one>
License-File: LICENSE
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.10
Requires-Dist: humanize
Requires-Dist: requests
Requires-Dist: tomli
Description-Content-Type: text/markdown

# lolbin

A command-line interface tool for managing pastes on [paste.lol](http://paste.lol), a service of omg.lol.  
It does only that but it does it well.

**WARNING**: Remember that every past on paste.lol is **public**.
If you have the URL of the paste, you can fetch it without authentication.

You can access every listed paste of someone on the web at "https://paste.lol/<address>".
Mines are here: <https://paste.lol/ache>.

## Table of Contents

- [Features](#features)
- [Installation](#installation)
- [Configuration](#configuration)
- [Examples](#examples-of-use)
- [Similar projects](#similar-projects)
- [License](#license)
- [Requirements](#requirements)

## Features

- **Create/Update Paste** - Allows you to create or update a paste with a specified title and content.
- **List Pastes** - Lists all your pastes along with their titles and the time they were last modified.
- **Show Paste** - Displays the content of a specific paste by its title.
- **Delete Paste** - Deletes a specific paste by its title.
- **Help Message** - Provides usage instructions for the tool.
- **Debug Mode** - Prints the action to be performed, the paste name, address, and bearer token (but does not actually perform the action).

<!--
 TODO: Make a manuel page! (`man lolbin`)
-->

### Very quick use

- **List Pastes** - `lolbin`
- **List public Pastes**- `lolbin -P`
- **Show Paste** - `lolbin paste-name`
- **Create paste** - `echo 'My paste' | lolbin paste-name` (will also replace a paste).
- **Create listed paste** - `echo 'My paste' | lolbin paste-name -L`
- **Edit paste** - `lolbin -e paste-nameP`
- **Delete Paste** - `lolbin -d paste-name`

## Installation

To install the tool, you can use pip:

```shell
$ pip install lolbin
```

But the recommanded way is via [pipx](https://github.com/pypa/pipx):

```shell
$ pipx install lolbin
```

You can run it with [uv](https://github.com/astral-sh/uv):

```shell
$ uv run lolbin
```

On Arch Linux, there is a package on the AUR, so use your prefered AUR packages manager, mine is [yay](https://github.com/Jguer/yay):

```shell
$ yay -S lolbin
```

## Configuration

To configure the tool, create a file `~/.config/lolbin/config.toml` with the following content:

```toml
address = "your_address"
bearer_token = "your_bearer_token"
```

You can obtain a bearer token by logging in to the <omg.lol> website, in [you account](https://home.omg.lol/account), at the end of the page, section 'API Key'.

If you don't want to store you API token inside a config file, you can call external command to retrieve it from you secret manager.

With the backtick syntax for command substitution:

```toml
address = "your_address"
bearer_token = "`bws secret get XXXXXX` | jq .key --raw-output"
```

Or with the dollard based one:

```toml
address = "your_address"
bearer_token = "$ pass api.omg.lol/token_lolbin"
```

## Examples of Use

1. To create/update a paste:

   ```shell
   $ echo "My awesome content" | lolbin --paste my_awesome_paste
   ```

   If you want to paste content from a file, use the `--file` flag:

   ```shell
   $ echo "My awesome content" > my_content.txt
   $ lolbin --paste --file my_content.txt my_awesome_paste
   ```

   The `--past` part is optional, as lolbin can deduct the action from the input.

   ```shell
   $ cat my_content.txt | lolbin --paste my_awesome_paste
   ```

   For obvious reasons, by default a past is private (aka non-listed, remember _every past is exposed on the public web_), to make it public (aka listed in the paste.lol jargon) use the "--public" (or "-P") option.

   ```shell
   $ echo "This is public !" | lolbin public-message -P
   ```

   I know that "-P" can be confused with "private", the idea is that, by default it's private so you don't need a private option.
   If you find it confusing, you can also use the paste.lol jargon with "--listed" (and "-L").

2. To list your pastes:

   ```shell
   $ lolbin --list
    - my_awesome_paste (10s ago)
   ```

   List is the default action so you can also ommit the `--list`.

   Also, by default, it only list all the paste, so the private one too (aka non-listed).
   To list only the public paste (aka listed in the paste.lol jargon), use the "--public" option (or "-P", or "--listed" and "-L").

   It's conveniant to remember that "-l" is for private and "-L" will list every paste.

   ```shell
   $ lolbin -l
    - my_awesome_listed_paste (30s ago)
    - my-awesome-private-paste (1min ago)
   $ lolbin -L
    - my_awesome_listed_paste (33s ago)
   ```

3. To show the content of a specific paste:

   ```shell
   $ lolbin --show my_awesome_paste
   My awesome content
   ```

   As with the `--paste` option, lolbin can deduct the action without the `--show` option.

   ```shell
   $ lolbin my_awesome_paste
   My awesome content
   ```

4. To delete a specific paste:

   ```shell
   $ lolbin --delete my_awesome_paste
   ```

   Or use the `-d` short option.

5. To edit a specific paste:

   ```shell
   $ lolbin --edit my_awesome_paste
   ```

   The editor will be opened with the content of the paste. The content will be replaced with the edited content.
   The editor is determined by the `EDITOR` environment variable. If it is not set, the vim is used.

6. For help:

   ```shell
   $ lolbin --help
   ```

7. To run in debug mode, use the `--debug` flag with any command:

   ```shell
   $ lolbin --debug --list
   ```

   It will not do anything.

## Similar projects

- [clilol](https://source.tube/mcornick/clilol): A CLI that support all the APIs of omg.lol.
  But too inconvenient to use for me for paste, ideal for status.
- [Pastol](https://github.com/M1n-74316D65/Pastol): A CLI for paste.lol.
  Nice and in Rust ! 🦀. But again, it lakes some usefull features like retrieve the API token from a manager.
  But have some others nice features. (search ! And a nice UI to show a paste).
- [omglolcli](https://github.com/rknightuk/omglolcli): A CLI that support some of the APIs of omg.lol.
  Nice but incomplet.

## License

`lolbin` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.

## Requirements

- Python 3.10 or higher, Python syntax
- requests library, for HTTP requests to the api.omg.lol API.
- tomli library, for configuration
