━━━━━━━━━ LEO Andinus ━━━━━━━━━ Table of Contents ───────────────── 1 Documentation .. 1.1 Dispatch table .. 1.2 Options ..... 1.2.1 encrypt/sign ..... 1.2.2 delete ..... 1.2.3 help 2 Example 3 History Leo is my archival program. It creates tar(1) files from a pre-defined list. It can encrypt/sign files with gpg2(1). • Web-site: [https://andinus.nand.sh/leo] • Source: [https://git.tilde.institute/andinus/leo] • Source (mirror): [https://github.com/andinus/leo] 1 Documentation ═══════════════ I use this to quickly archive some of my files & copy them to another computer as a backup. 1.1 Dispatch table ────────────────── `%dispatch' has the pre-defined list. Learn the list directly from `leo.pl', it's self-explanatory. Or check the sub `HelpMessage', it explains what each command does. For example, `documents' will archive `$ENV{HOME}/documents' to `/tmp/archive/documents_$ymd.tar' where `$ymd' is current date in `YYYY-MM-DD' format. ┌──── │ my %dispatch = ( │ journal => sub { │ archive("$archive_dir/journal_$ymd.tar", │ "-C", "$ENV{HOME}/documents", │ "andinus.org.gpg", "archive.org.gpg"); │ }, │ ... │ ); └──── Currently I generate the dispatch table with a function & only special profiles are added manually like above. `journal' is a special profile because I don't want encryption on it. Other profiles are added by this function: ┌──── │ # This adds the directories that have same path relative to $ENV{HOME} │ # as profile name. │ foreach my $profile (qw( emails music projects documents .ssh │ .password-store)) { │ $dispatch{$profile} = sub { │ archive("$archive_dir/${profile}_$ymd.tar", │ "-C", "$ENV{HOME}/$profile", "."); │ }; │ } └──── I alias paths like `.ssh' to make it convenient to type: ┌──── │ # Aliases for inconvenient paths. │ $dispatch{ssh} = $dispatch{".ssh"}; │ $dispatch{pass} = $dispatch{".password-store"}; └──── 1.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 delete LEO_DELETE ━━━━━━━━━━━━━━━━━━━━━━ 1.2.1 encrypt/sign ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ `encrypt_sign' handles `gpg2' related functions. It passes `--yes' by default. *Note*: `gpg2' might compress the archives 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. *Note*: My journal is encrypted so to prevent re-encryption `encrypt' option is not passed to gpg2. This only affects journal profile. So `leo --encrypt journal pass' will still encrypt pass. 1.2.2 delete ╌╌╌╌╌╌╌╌╌╌╌╌ Removes the archive file after running gpg2(1). This means that either `encrypt' or `sign' option must be passed. 1.2.3 help ╌╌╌╌╌╌╌╌╌╌ Running just `leo' will print help. 2 Example ═════════ ┌──── │ # This will encrypt, sign & also delete the tar file for documents, │ # journal, pass & ssh profile. │ leo --encrypt --sign --delete 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_DELETE=1 leo documents journal ssh pass └──── 3 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.