about summary refs log blame commit diff stats
path: root/README
blob: 2f52d7151bf93500e4c19da533368bf72e8195a3 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
                                                          


                                       






                                                          




                        

         

 
                                                                      
                                             
 
                                           






                                                     






                                                                       


                                                                     




                                                                   
                      



                                                            

             
        

                 



























                                                                            
 









                                                                     
 

                                                      








                                                                        



                                                                       
 

                                    




                                                                        

                              
 
                                     

 















                                                                           
                           
 
                                     
 


                                                                  
 


                                                                        
 



                                                                       
                               ━━━━━━━━━
                                  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.