about summary refs log tree commit diff stats
path: root/README
blob: f46ba920e8da51bfd7ceaee351c5cea67edc881f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
                               ━━━━━━━━━
                                  LEO

                                Andinus
                               ━━━━━━━━━


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

1 Demo
2 Documentation
.. 2.1 Profile
.. 2.2 Options
..... 2.2.1 encrypt/sign
..... 2.2.2 delete
..... 2.2.3 help
.. 2.3 Configuration
3 Example
4 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).

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


1 Demo
══════

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

  • 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


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 relative to
  `$HOME' 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
   delete   LEO_DELETE
  ━━━━━━━━━━━━━━━━━━━━━━


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

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

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

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


2.2.2 delete
╌╌╌╌╌╌╌╌╌╌╌╌

  Removes the tar file after running gpg2(1). This means that either
  `encrypt' or `sign' option must be passed.


2.2.3 help
╌╌╌╌╌╌╌╌╌╌

  Running just `leo' will print help.


2.3 Configuration
─────────────────

  There is an example config file under `share/config.pl', move it to
  config directory & rename to `leo.pl'.

  ┌────
  │ cp share/config.pl $HOME/.config/leo.pl # Copy the config.
  │ chmod -w $HOME/.config/leo.pl # Make it read-only.
  └────

  *Warning*: Leo will evaluate the configuration file, which means an
  attacker can use it to run malicious code.

  *Note*: They could always add malicious code to `.profile' & do harm.
  Just thought I should put the warning.

  To edit the config run `chmod +w' on it but please make it read-only
  again after editing.


3 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
  └────


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