about summary refs log tree commit diff stats
path: root/README
blob: 2f52d7151bf93500e4c19da533368bf72e8195a3 (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
                               ━━━━━━━━━
                                  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.























                                                            

                                     

                       
                       



                                                       
                                                                       

 
#############################################################
##  This config file can live in the following locations:  ##
##                                                         ##
##      ./                                                 ##
##      /usr/local/getwtxt/                                ##
##      /etc/                                              ##
##      /usr/local/etc/                                    ##
##                                                         ##
##  The first location found wins. The default filename    ##
##  is getwtxt.yml. This can be configured via command     ##
##  line flags:                                            ##
##                                                         ##
##  For "myconfig.json"                                    ##
##    ./getwtxt -config myconfig -type json                ##
##                                                         ##
#############################################################

#############################################################
##  Changing the following options requires a restart.     ##
#############################################################

# Set to true if getwtxt will be behind a reverse
# proxy server, such as Caddy or nginx
BehindProxy: true

# This is the port that getwtxt will bind to.
# If BehindProxy is false, you should probably
# set this to 80 or 443
ListenPort: 9001

# Determines whether we're using SSL/TLS. If so,
# you should set the Cert and Key files.
# Don't use TLS if you're setting up getwtxt
# behind a reverse proxy - just let the proxy
# handle the connection.
UseTLS: false
TLSCert: "/etc/ssl/getwtxt.pem"
TLSKey: "/etc/ssl/private/getwtxt.pem"

# The type of database you want to use. Currently,
# the following are supported:
#   leveldb (default)
#   sqlite
DatabaseType: "leveldb"

# The location of the database structure. Can be
# a relative or absolute path.
DatabasePath: "getwtxt.db"

# The path to the assets directory, which contains:
#     style.css
#     tmpl/index.html
AssetsDirectory: "assets"

#############################################################
##  The following options may be changed at any time.      ##
##  getwtxt will automatically reload the config when      ##
##  changes are detected.                                  ##
#############################################################

# If true, getwtxt will send all log messages, including
# requests, to stdout. It will ignore any set log file.
# Useful for debugging, but you probably want to keep
# logs.
StdoutLogging: false

# The file getwtxt will append log messages to. Can be a
# relative or absolute path.
LogFile: "getwtxt.log"

# This is the interval between data pushes from the 
# in-memory cache to the on-disk database. 
DatabasePushInterval: "5m"

# The time getwtxt will wait between attempts to scrape
# users' statuses from their twtxt.txt files
StatusFetchInterval: "1h"

# The following options pertain to your particular instance.
# They are used in the default page shown when you visit
# getwtxt in a web browser.
Instance:

  # The name of your instance.
  SiteName: "getwtxt"

  # Your instance's web address.
  URL: "https://twtxt.example.com"

  # Your name. 
  OwnerName: "Anonymous Microblogger"
  
  # Your email address.
  Email: "nobody@knows"

  # A short description of your instance, or your site.
  # This is shown at the top of the default web page
  # below your instance's name.
  Description: "A fast, resilient twtxt registry server written in Go!"