about summary refs log tree commit diff stats
                               ━━━━━━━━━
                                  LEO

                                Andinus
                               ━━━━━━━━━


Table of Contents
─────────────────

1. Installation
2. Documentation
.. 1. Profile
.. 2. Options
..... 1. encrypt/sign
..... 2. signify
..... 3. gzip
..... 4. help
3. Example
4. Demo
5. History


Leo is a simple backup program. It creates tar(1) files from a
pre-defined list. It can encrypt/sign files with gpg2(1) & sign files
with signify(1).

• Web-site: <https://andinus.nand.sh/leo>
• Source: <https://git.tilde.institute/andinus/leo>
• Source (mirror): <https://github.com/andinus/leo>


1 Installation
══════════════

  ┌────
  │ # Install all the dependencies. (OpenBSD)
  │ doas pkg_add p5-IPC-Run3 p5-Config-Tiny p5-Path-Tiny
  │
  │ # Clone the project.
  │ git clone https://git.tilde.institute/andinus/leo && \
  │     cd leo
  │
  │ # Install dependencies with cpanm.
  │ cpanm --installdeps .
  │
  │ # Copy the config.
  │ cp share/leo.conf $HOME/.config/leo.conf
  │
  │ # Copy the script & make it executable.
  │ cp leo.pl $HOME/bin/leo && \
  │     chmod +x $HOME/bin/leo
  └────


2 Documentation
═══════════════

  I use this to quickly backup some of my files. It works on profiles,
  profiles are simple lists of files which get backed up.


2.1 Profile
───────────

  Profile is a simple hash table (`%profile') which contains the list of
  profiles. The profiles are mapped to a list of file paths which are to
  be backed up.

  You can run `help' to see all the profiles along with the paths.


2.2 Options
───────────

  Some options can also be passed through environment variables. That
  allows for configuration in shell rc file & the user can run leo
  directly without looking at options.

  ━━━━━━━━━━━━━━━━━━━━━━━━
   encrypt  `LEO_ENCRYPT'
   sign     `LEO_SIGN'
   signify  `LEO_SIGNIFY'
   gzip     `LEO_GZIP'
  ━━━━━━━━━━━━━━━━━━━━━━━━


2.2.1 encrypt/sign
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  `encrypt_sign' handles `gpg2' related functions. It passes `--yes' by
  default.

  • `encrypt' / `sign' can also be set in configuration file, one can
    also configure it for specific profile.

  *Note*: `gpg2' might compress the backups depending on your config.
   Default is to enable compression, if you don't want this then add `-z
   0' to `@options'. `-z' specifies the compression level & 0 means no
   compression.


2.2.2 signify
╌╌╌╌╌╌╌╌╌╌╌╌╌

  `signify' will invoke `signify(1)' & the file will be signed.


2.2.3 gzip
╌╌╌╌╌╌╌╌╌╌

  `gzip' will compress the tar archive with `gzip(1)'.


2.2.4 help
╌╌╌╌╌╌╌╌╌╌

  Running just `leo' will print help.


3 Example
═════════

  ┌────
  │ # This will encrypt, sign the tar file for documents, journal, pass &
  │ # ssh profile.
  │ leo --encrypt --sign documents journal pass ssh
  │
  │ # This will do the same. You can add these environment variables to
  │ # your shell rc & then just run ``leo documents journal ssh pass'' to
  │ # do the same.
  │ LEO_ENCRYPT=1 LEO_SIGN=1 leo documents journal ssh pass
  │
  │ # Sign the file with signify(1).
  │ leo --signify journal
  └────


4 Demo
══════

  It's very easy to setup `leo', I made a demo video to show this. I
  already have Perl environment setup for this.

  *Note*: Leo has changed since this was published.

  • Leo 2020-08-31: <https://asciinema.org/a/F97hVfgXDcd9g5IlST1t27ps3>

  You can also download the [cast file] directly & play it with
  `asciinema'.


[cast file]
<https://andinus.nand.sh/static/leo/2020-08-31_leo-demo.cast>


5 History
═════════

  This was Leo's initial description:

        Leo is a program to run my personal scripts. You might not
        find them useful, these were previously shell scripts that
        I rewrote in Perl.

  I had created a sync function initially & was going to expand it. Then
  I decided to remove those sync functions because it was too complex, I
  replaced then with simple `sh' scripts.

  I added a simple `archive' function later & decided to turn Leo into
  that function. So, it's not a meta-program anymore. I was thinking of
  creating something that does all the things for me but that'll be too
  complex.

  Later on the same day I removed dispatch table & switched to using
  simple hash of lists to store backup paths mapped to profiles. And
  also changed the word "archive" to "backup" everywhere.

  I added a simple INI based config file before 0.1.0 release.