Browse Source

Merge branch 'stretch' of https://github.com/bashrc/freedombone

Bob Mottram 7 years ago
parent
commit
4a852d5bab

+ 31
- 0
doc/EN/app_edith.org View File

@@ -0,0 +1,31 @@
1
+#+TITLE:
2
+#+AUTHOR: Bob Mottram
3
+#+EMAIL: bob@freedombone.net
4
+#+KEYWORDS: freedombone, edith, notes
5
+#+DESCRIPTION: How to use Edith notes
6
+#+OPTIONS: ^:nil toc:nil
7
+#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="freedombone.css" />
8
+
9
+#+BEGIN_CENTER
10
+[[file:images/logo.png]]
11
+#+END_CENTER
12
+
13
+#+BEGIN_EXPORT html
14
+<center>
15
+<h1>Edith Notes</h1>
16
+</center>
17
+#+END_EXPORT
18
+
19
+Edith notes is the simplest and quickest kind of notes system. It has no complicated user interface. Just enter your domain and a title and a note will be created. Everything typed is saved automatically.
20
+
21
+The speed and minimalism of this type of notes system may make it suitable for things like shopping lists or distraction free writing.
22
+
23
+ssh into the system with:
24
+
25
+#+BEGIN_SRC bash
26
+ssh myusername@mydomain.com -p 2222
27
+#+END_SRC
28
+
29
+Select *Administrator controls* then *App Settings* then *edith*. Enter a subdomain name, such as /notes.mydomain.com/, and optionally a freedns code. When the installation is complete you can then look up the password for the site within the *Passwords* section of the *Administrator control panel*, then  navigate to the subdomain. Log in, then enter something like /notes.mydomain.com/testnote/ and start typing.
30
+
31
+It is possible to turn off the login via *App Settings/edith* if you wish, but this will enable anyone on the internet to view or edit notes on your system, which could have obvious privacy or stability implications. From *App settings/edith* it's also possible to browse through your notes files.

+ 4
- 0
doc/EN/apps.org View File

@@ -41,6 +41,10 @@ Enables you to use the system as a music server which any DLNA compatible device
41 41
 A databaseless wiki system.
42 42
 
43 43
 [[./app_dokuwiki.html][How to use it]]
44
+* Edith
45
+Extremely simple and distraction-free notes system.
46
+
47
+[[./app_edith.html][How to use it]]
44 48
 * Emacs
45 49
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
46 50
 

+ 441
- 0
src/freedombone-app-edith View File

@@ -0,0 +1,441 @@
1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Edith: an ultra simple notes application
12
+#
13
+# License
14
+# =======
15
+#
16
+# Copyright (C) 2018 Bob Mottram <bob@freedombone.net>
17
+#
18
+# This program is free software: you can redistribute it and/or modify
19
+# it under the terms of the GNU Affero General Public License as published by
20
+# the Free Software Foundation, either version 3 of the License, or
21
+# (at your option) any later version.
22
+#
23
+# This program is distributed in the hope that it will be useful,
24
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
25
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
+# GNU Affero General Public License for more details.
27
+#
28
+# You should have received a copy of the GNU Affero General Public License
29
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30
+
31
+VARIANTS='full full-vim writer'
32
+
33
+IN_DEFAULT_INSTALL=0
34
+SHOW_ON_ABOUT=1
35
+
36
+EDITH_REPO="https://github.com/sunny/edith"
37
+EDITH_COMMIT='59f571e24be9e75d127a0f130591acf8d7a86ce3'
38
+EDITH_DOMAIN_NAME=
39
+EDITH_CODE=
40
+EDITH_ONION_PORT=8278
41
+EDITH_LOGIN_TEXT=$"Edith login"
42
+
43
+edith_variables=(MY_USERNAME
44
+                 MY_EMAIL_ADDRESS
45
+                 ONION_ONLY
46
+                 EDITH_DOMAIN_NAME
47
+                 EDITH_CODE
48
+                 DEFAULT_LANGUAGE)
49
+
50
+function change_password_edith {
51
+    curr_username="$1"
52
+    new_user_password="$2"
53
+
54
+    sed -i "/${curr_username}:/d" /etc/nginx/.edithpasswd
55
+    echo -n "$new_user_password" | htpasswd -i -s -c /etc/nginx/.edithpasswd ${curr_username}
56
+
57
+    ${PROJECT_NAME}-pass -u $MY_USERNAME -a ${curr_username} -p "$new_user_password"
58
+}
59
+
60
+function logging_on_edith {
61
+    echo -n ''
62
+}
63
+
64
+function logging_off_edith {
65
+    echo -n ''
66
+}
67
+
68
+function reconfigure_edith {
69
+    echo -n ''
70
+}
71
+
72
+function edith_enable_login {
73
+    read_config_param EDITH_DOMAIN_NAME
74
+
75
+    dialog --title $"Enable Edith login" \
76
+           --backtitle $"Freedombone Control Panel" \
77
+           --defaultno \
78
+           --yesno $"\nDo you want to add a login so that random web users can't access your notes?" 10 60
79
+    sel=$?
80
+    case $sel in
81
+        0) if grep -q '#auth_basic' /etc/nginx/sites-available/$EDITH_DOMAIN_NAME; then
82
+               sed -i 's|#auth_basic|auth_basic|g' /etc/nginx/sites-available/$EDITH_DOMAIN_NAME
83
+               systemctl restart nginx
84
+           fi
85
+           read_config_param $MY_USERNAME
86
+           EDITH_PASSWORD=$(${PROJECT_NAME}-pass -u $MY_USERNAME -a edith)
87
+           dialog --title $"Enable Edith login" \
88
+                  --msgbox $"Edith logins are now enabled with the password $EDITH_PASSWORD" 6 65
89
+           EDITH__PASSWORD=
90
+           ;;
91
+        1) if ! grep -q '#auth_basic' /etc/nginx/sites-available/$EDITH_DOMAIN_NAME; then
92
+               sed -i 's|auth_basic|#auth_basic|g' /etc/nginx/sites-available/$EDITH_DOMAIN_NAME
93
+               systemctl restart nginx
94
+           fi
95
+           dialog --title $"Disable Edith login" \
96
+                  --msgbox $"Edith logins are now disabled. Anyone can access your stream." 6 65
97
+           ;;
98
+    esac
99
+}
100
+
101
+function edith_browse {
102
+    read_config_param EDITH_DOMAIN_NAME
103
+    cd /var/www/$EDITH_DOMAIN_NAME/htdocs/data
104
+    editor /var/www/$EDITH_DOMAIN_NAME/htdocs/data
105
+}
106
+
107
+function configure_interactive_edith {
108
+    while true
109
+    do
110
+        data=$(tempfile 2>/dev/null)
111
+        trap "rm -f $data" 0 1 2 5 15
112
+        dialog --backtitle $"Freedombone Control Panel" \
113
+               --title $"Edith" \
114
+               --radiolist $"Choose an operation:" 10 50 3 \
115
+               1 $"Enable login" off \
116
+               2 $"Browse notes" off \
117
+               3 $"Exit" on 2> $data
118
+        sel=$?
119
+        case $sel in
120
+            1) break;;
121
+            255) break;;
122
+        esac
123
+        case $(cat $data) in
124
+            1) edith_enable_login;;
125
+            2) edith_browse;;
126
+            3) break;;
127
+        esac
128
+    done
129
+}
130
+
131
+function upgrade_edith {
132
+    CURR_EDITH_COMMIT=$(get_completion_param "edith commit")
133
+    if [[ "$CURR_EDITH_COMMIT" == "$EDITH_COMMIT" ]]; then
134
+        return
135
+    fi
136
+
137
+    read_config_param EDITH_DOMAIN_NAME
138
+
139
+    # update to the next commit
140
+    function_check set_repo_commit
141
+    set_repo_commit /var/www/$EDITH_DOMAIN_NAME/htdocs "edith commit" "$EDITH_COMMIT" $EDITH_REPO
142
+
143
+    chown -R www-data:www-data /var/www/$EDITH_DOMAIN_NAME/htdocs
144
+    chmod a+w /var/www/$EDITH_DOMAIN_NAME/htdocs/data
145
+}
146
+
147
+function backup_local_edith {
148
+    read_config_param EDITH_DOMAIN_NAME
149
+
150
+    function_check suspend_site
151
+    suspend_site ${EDITH_DOMAIN_NAME}
152
+
153
+    source_directory=/var/www/${EDITH_DOMAIN_NAME}/htdocs/data
154
+
155
+    function_check backup_directory_to_usb
156
+    dest_directory=edith
157
+    backup_directory_to_usb $source_directory $dest_directory
158
+
159
+    function_check restart_site
160
+    restart_site
161
+}
162
+
163
+function restore_local_edith {
164
+    read_config_param EDITH_DOMAIN_NAME
165
+
166
+    temp_restore_dir=/root/tempedith
167
+    edith_dir=/var/www/${EDITH_DOMAIN_NAME}/htdocs/data
168
+
169
+    function_check restore_directory_from_usb
170
+    restore_directory_from_usb $temp_restore_dir edith
171
+    if [ -d $temp_restore_dir ]; then
172
+        if [ -d cp $temp_restore_dir$edith_dir ]; then
173
+            cp -rp $temp_restore_dir$edith_dir $edith_dir/
174
+        else
175
+            if [ ! -d $edith_dir ]; then
176
+                mkdir $edith_dir
177
+                chmod a+w $edith_dir
178
+            fi
179
+            cp -rp $temp_restore_dir/* $edith_dir
180
+        fi
181
+        chown -R www-data:www-data $edith_dir
182
+        rm -rf $temp_restore_dir
183
+    fi
184
+}
185
+
186
+function backup_remote_edith {
187
+    read_config_param EDITH_DOMAIN_NAME
188
+
189
+    function_check suspend_site
190
+    suspend_site ${EDITH_DOMAIN_NAME}
191
+
192
+    source_directory=/var/www/${EDITH_DOMAIN_NAME}/htdocs/data
193
+
194
+    function_check backup_directory_to_friend
195
+    dest_directory=edith
196
+    backup_directory_to_friend $source_directory $dest_directory
197
+
198
+    function_check restart_site
199
+    restart_site
200
+}
201
+
202
+function restore_remote_edith {
203
+    read_config_param EDITH_DOMAIN_NAME
204
+
205
+    temp_restore_dir=/root/tempedith
206
+    edith_dir=/var/www/${EDITH_DOMAIN_NAME}/htdocs/data
207
+
208
+    function_check restore_directory_from_friend
209
+    restore_directory_from_friend $temp_restore_dir edith
210
+    if [ -d $temp_restore_dir ]; then
211
+        if [ -d cp $temp_restore_dir$edith_dir ]; then
212
+            cp -rp $temp_restore_dir$edith_dir $edith_dir/
213
+        else
214
+            if [ ! -d $edith_dir ]; then
215
+                mkdir $edith_dir
216
+                chmod a+w $edith_dir
217
+            fi
218
+            cp -rp $temp_restore_dir/* $edith_dir
219
+        fi
220
+        chown -R www-data:www-data $edith_dir
221
+        rm -rf $temp_restore_dir
222
+    fi
223
+}
224
+
225
+function remove_edith {
226
+    nginx_dissite $EDITH_DOMAIN_NAME
227
+
228
+    if [ -f /etc/nginx/sites-available/$EDITH_DOMAIN_NAME ]; then
229
+        rm /etc/nginx/sites-available/$EDITH_DOMAIN_NAME
230
+    fi
231
+
232
+    if [ -d /var/www/$EDITH_DOMAIN_NAME ]; then
233
+        rm -rf /var/www/$EDITH_DOMAIN_NAME
234
+    fi
235
+
236
+    function_check remove_onion_service
237
+    remove_onion_service edith ${EDITH_ONION_PORT}
238
+    sed -i '/edith/d' $COMPLETION_FILE
239
+
240
+    if [ -f /etc/nginx/.edithpasswd ]; then
241
+        rm /etc/nginx/.edithpasswd
242
+    fi
243
+
244
+    function_check remove_nodejs
245
+    remove_nodejs edith
246
+
247
+    remove_certs $EDITH_DOMAIN_NAME
248
+    remove_app edith
249
+
250
+    function_check remove_ddns_domain
251
+    remove_ddns_domain $EDITH_DOMAIN_NAME
252
+}
253
+
254
+function install_edith {
255
+    apt-get -yq install php-gettext php-curl php-gd php-mysql git curl
256
+    apt-get -yq install memcached php-memcached php-intl exiftool libfcgi0ldbl
257
+
258
+    function_check install_nodejs
259
+    install_nodejs edith
260
+
261
+    if [ ! ${EDITH_PASSWORD} ]; then
262
+        if [ -f ${IMAGE_PASSWORD_FILE} ]; then
263
+            EDITH_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)"
264
+        else
265
+            EDITH_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
266
+        fi
267
+    fi
268
+
269
+
270
+    if [ -d /var/www/$EDITH_DOMAIN_NAME/htdocs ]; then
271
+        rm -rf /var/www/$EDITH_DOMAIN_NAME/htdocs
272
+    fi
273
+
274
+    if [ -d /repos/edith ]; then
275
+        mkdir /var/www/$EDITH_DOMAIN_NAME/htdocs
276
+        cp -r -p /repos/edith/. /var/www/$EDITH_DOMAIN_NAME/htdocs
277
+        cd /var/www/$EDITH_DOMAIN_NAME/htdocs
278
+        git pull
279
+    else
280
+        function_check git_clone
281
+        git_clone $EDITH_REPO /var/www/$EDITH_DOMAIN_NAME/htdocs
282
+    fi
283
+
284
+    if [ ! -d /var/www/$EDITH_DOMAIN_NAME/htdocs ]; then
285
+        echo $'Unable to clone edith repo'
286
+        exit 537593569
287
+    fi
288
+
289
+    cd /var/www/$EDITH_DOMAIN_NAME/htdocs
290
+    git checkout $EDITH_COMMIT -b $EDITH_COMMIT
291
+    set_completion_param "edith commit" "$EDITH_COMMIT"
292
+
293
+    if [ ! -d /var/www/$EDITH_DOMAIN_NAME/htdocs/data ]; then
294
+        mkdir -p /var/www/$EDITH_DOMAIN_NAME/htdocs/data
295
+    fi
296
+
297
+    EDITH_ONION_HOSTNAME=$(add_onion_service edith 80 ${EDITH_ONION_PORT})
298
+
299
+    edith_nginx_site=/etc/nginx/sites-available/$EDITH_DOMAIN_NAME
300
+    if [[ $ONION_ONLY == "no" ]]; then
301
+        function_check nginx_http_redirect
302
+        nginx_http_redirect $EDITH_DOMAIN_NAME "index index.php"
303
+        echo 'server {' >> $edith_nginx_site
304
+        echo '  listen 443 ssl;' >> $edith_nginx_site
305
+        echo '  listen [::]:443 ssl;' >> $edith_nginx_site
306
+        echo "  server_name $EDITH_DOMAIN_NAME;" >> $edith_nginx_site
307
+        echo '' >> $edith_nginx_site
308
+        function_check nginx_compress
309
+        nginx_compress $EDITH_DOMAIN_NAME
310
+        echo '' >> $edith_nginx_site
311
+        echo '  # Security' >> $edith_nginx_site
312
+        function_check nginx_ssl
313
+        nginx_ssl $EDITH_DOMAIN_NAME
314
+
315
+        function_check nginx_disable_sniffing
316
+        nginx_disable_sniffing $EDITH_DOMAIN_NAME
317
+
318
+        echo '  add_header Strict-Transport-Security max-age=15768000;' >> $edith_nginx_site
319
+        echo '' >> $edith_nginx_site
320
+        echo '  access_log /dev/null;' >> $edith_nginx_site
321
+        echo '  error_log /dev/null;' >> $edith_nginx_site
322
+        echo '' >> $edith_nginx_site
323
+        echo "  root /var/www/$EDITH_DOMAIN_NAME/htdocs;" >> $edith_nginx_site
324
+        echo '' >> $edith_nginx_site
325
+        echo '  index index.php;' >> $edith_nginx_site
326
+        echo '' >> $edith_nginx_site
327
+        echo '  # PHP' >> $edith_nginx_site
328
+        echo '  location ~ \.php {' >> $edith_nginx_site
329
+        echo '    include snippets/fastcgi-php.conf;' >> $edith_nginx_site
330
+        echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> $edith_nginx_site
331
+        echo '    fastcgi_read_timeout 30;' >> $edith_nginx_site
332
+        echo '  }' >> $edith_nginx_site
333
+        echo '' >> $edith_nginx_site
334
+        echo '  # Location' >> $edith_nginx_site
335
+        echo '  location / {' >> $edith_nginx_site
336
+        function_check nginx_limits
337
+        nginx_limits $EDITH_DOMAIN_NAME '15m'
338
+        echo '    try_files $uri $uri/ /index.php?$args;' >> $edith_nginx_site
339
+        echo "    auth_basic \"${EDITH_LOGIN_TEXT}\";" >> $edith_nginx_site
340
+        echo '    auth_basic_user_file /etc/nginx/.edithpasswd;' >> $edith_nginx_site
341
+        echo '  }' >> $edith_nginx_site
342
+        echo '}' >> $edith_nginx_site
343
+    else
344
+        echo -n '' > $edith_nginx_site
345
+    fi
346
+    echo 'server {' >> $edith_nginx_site
347
+    echo "    listen 127.0.0.1:$EDITH_ONION_PORT default_server;" >> $edith_nginx_site
348
+    echo "    server_name $EDITH_ONION_HOSTNAME;" >> $edith_nginx_site
349
+    echo '' >> $edith_nginx_site
350
+    function_check nginx_compress
351
+    nginx_compress $EDITH_DOMAIN_NAME
352
+    echo '' >> $edith_nginx_site
353
+    function_check nginx_disable_sniffing
354
+    nginx_disable_sniffing $EDITH_DOMAIN_NAME
355
+    echo '' >> $edith_nginx_site
356
+    echo '  access_log /dev/null;' >> $edith_nginx_site
357
+    echo '  error_log /dev/null;' >> $edith_nginx_site
358
+    echo '' >> $edith_nginx_site
359
+    echo "  root /var/www/$EDITH_DOMAIN_NAME/htdocs;" >> $edith_nginx_site
360
+    echo '' >> $edith_nginx_site
361
+    echo '  index index.php;' >> $edith_nginx_site
362
+    echo '' >> $edith_nginx_site
363
+    echo '  # PHP' >> $edith_nginx_site
364
+    echo '  location ~ \.php {' >> $edith_nginx_site
365
+    echo '    include snippets/fastcgi-php.conf;' >> $edith_nginx_site
366
+    echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> $edith_nginx_site
367
+    echo '    fastcgi_read_timeout 30;' >> $edith_nginx_site
368
+    echo '  }' >> $edith_nginx_site
369
+    echo '' >> $edith_nginx_site
370
+    echo '  # Location' >> $edith_nginx_site
371
+    echo '  location / {' >> $edith_nginx_site
372
+    function_check nginx_limits
373
+    nginx_limits $EDITH_DOMAIN_NAME '15m'
374
+    echo '    try_files $uri $uri/ /index.php?$args;' >> $edith_nginx_site
375
+    echo "    auth_basic \"${EDITH_LOGIN_TEXT}\";" >> $edith_nginx_site
376
+    echo '    auth_basic_user_file /etc/nginx/.edithpasswd;' >> $edith_nginx_site
377
+    echo '  }' >> $edith_nginx_site
378
+    echo '}' >> $edith_nginx_site
379
+
380
+    function_check configure_php
381
+    configure_php
382
+
383
+    function_check create_site_certificate
384
+    create_site_certificate $EDITH_DOMAIN_NAME 'yes'
385
+
386
+    # create a password for users
387
+    if [ ! -f /etc/nginx/.edithpasswd ]; then
388
+        touch /etc/nginx/.edithpasswd
389
+    fi
390
+    if grep -q "$MY_USERNAME:" /etc/nginx/.edithpasswd; then
391
+        sed -i "/$MY_USERNAME:/d" /etc/nginx/.edithpasswd
392
+    fi
393
+    echo -n "$EDITH_PASSWORD" | htpasswd -i -s -c /etc/nginx/.edithpasswd $MY_USERNAME
394
+    if [ ! -f /etc/nginx/.edithpasswd ]; then
395
+        echo $'/etc/nginx/.edithpasswd not found'
396
+        exit 6537683563
397
+    fi
398
+
399
+    ${PROJECT_NAME}-pass -u $MY_USERNAME -a edith -p "$EDITH_PASSWORD"
400
+
401
+    cp /var/www/$EDITH_DOMAIN_NAME/htdocs/htaccess.example /var/www/$EDITH_DOMAIN_NAME/htdocs/.htaccess
402
+    cd /var/www/$EDITH_DOMAIN_NAME/htdocs
403
+    npm install -g coffeescript uglify-js
404
+    cake build
405
+    if [ ! "$?" = "0" ]; then
406
+        echo $'Unable to build Edith'
407
+        exit 7396483635
408
+    fi
409
+    cp config.example.php config.php
410
+    if [[ $ONION_ONLY == "no" ]]; then
411
+        sed -i "s|define('EDITH_URI'.*|define('EDITH_URI', 'https://$EDITH_DOMAIN_NAME');|g" config.php
412
+    else
413
+        sed -i "s|define('EDITH_URI'.*|define('EDITH_URI', 'http://$EDITH_ONION_HOSTNAME');|g" config.php
414
+    fi
415
+
416
+    set_completion_param "edith domain" "$EDITH_DOMAIN_NAME"
417
+    set_completion_param "edith onion domain" "$EDITH_ONION_HOSTNAME"
418
+    chown -R www-data:www-data /var/www/$EDITH_DOMAIN_NAME/htdocs
419
+    chmod a+w /var/www/$EDITH_DOMAIN_NAME/htdocs/data
420
+    nginx_ensite $EDITH_DAEMON_NAME
421
+    systemctl restart nginx
422
+
423
+    APP_INSTALLED=1
424
+}
425
+
426
+function install_interactive_edith {
427
+    if [ ! $ONION_ONLY ]; then
428
+        ONION_ONLY='no'
429
+    fi
430
+
431
+    if [[ $ONION_ONLY != "no" ]]; then
432
+        GHOST_DOMAIN_NAME='edith.local'
433
+        write_config_param "EDITH_DOMAIN_NAME" "$EDITH_DOMAIN_NAME"
434
+    else
435
+        function_check interactive_site_details
436
+        interactive_site_details "edith" "EDITH_DOMAIN_NAME" "EDITH_CODE"
437
+    fi
438
+    APP_INSTALLED=1
439
+}
440
+
441
+# NOTE: deliberately no exit 0

+ 1
- 1
src/freedombone-app-emacs View File

@@ -188,7 +188,7 @@ function remove_emacs {
188 188
 
189 189
 function install_emacs {
190 190
     apt-get -yq install emacs ispell ibritish ifrench ispanish iitalian irussian iswedish inorwegian iirish ingerman iswiss iogerman idutch idanish ibrazilian ibulgarian ipolish iczech iestonian ilithuanian iukrainian icatalan
191
-    update-alternatives --set editor /usr/bin/emacs
191
+    update-alternatives --set editor /usr/bin/emacs24
192 192
 
193 193
     # A minimal emacs configuration
194 194
     #echo -n "(add-to-list 'load-path " > /home/$MY_USERNAME/.emacs

+ 1
- 1
src/freedombone-app-vim View File

@@ -232,7 +232,7 @@ function remove_vim {
232 232
 
233 233
 function install_vim {
234 234
     apt-get -yq install vim
235
-    update-alternatives --set editor /usr/bin/vim
235
+    update-alternatives --set editor /usr/bin/vim.tiny
236 236
 
237 237
     # add a mutt entry to use Vim to compose emails
238 238
     if [ -f /etc/Muttrc ]; then

+ 1
- 1
src/freedombone-controlpanel View File

@@ -289,7 +289,7 @@ function view_or_change_passwords {
289 289
     trap "rm -f $data" 0 1 2 5 15
290 290
     dialog --title "$titlestr" \
291 291
            --backtitle $"Freedombone Control Panel" \
292
-           --inputbox "$viewstr" 12 60 "$CURR_PASSWORD" 2>$data
292
+           --inputbox "$viewstr" 12 75 "$CURR_PASSWORD" 2>$data
293 293
     sel=$?
294 294
     case $sel in
295 295
         0)

+ 1
- 0
src/freedombone-image-customise View File

@@ -1945,6 +1945,7 @@ function image_preinstall_repos {
1945 1945
     git clone $KEYSERVER_WEB_REPO $rootdir/repos/keyserverweb
1946 1946
     git clone $PEERTUBE_REPO $rootdir/repos/peertube
1947 1947
     git clone $PRIVATEBIN_REPO $rootdir/repos/privatebin
1948
+    git clone $EDITH_REPO $rootdir/repos/edith
1948 1949
     #git clone $WEKAN_REPO $rootdir/repos/wekan
1949 1950
     #git clone $FLOW_ROUTER_REPO $rootdir/repos/flowrouter
1950 1951
     #git clone $METEOR_USERACCOUNTS_REPO $rootdir/repos/meteoruseraccounts

+ 2
- 2
src/freedombone-utils-onion View File

@@ -83,8 +83,8 @@ function remove_onion_service {
83 83
     if [ ${#nick} -gt 0 ]; then
84 84
         sed -i "/stealth ${nick}/d" /etc/tor/torrc
85 85
     fi
86
-    sed -i "/hidden_service_${onion_service_name}/d" /etc/tor/torrc
87
-    sed -i "/hidden_service_${onion_service_name}_mobile/d" /etc/tor/torrc
86
+    sed -i "/hidden_service_${onion_service_name}/,+1 d" /etc/tor/torrc
87
+    sed -i "/hidden_service_${onion_service_name}_mobile/,+1 d" /etc/tor/torrc
88 88
     sed -i "/127.0.0.1:${onion_service_port_to}/d" /etc/tor/torrc
89 89
     if [ $3 ]; then
90 90
         sed -i "/127.0.0.1:${3}/d" /etc/tor/torrc

+ 301
- 0
website/EN/app_edith.html View File

@@ -0,0 +1,301 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
+<head>
6
+<!-- 2018-02-02 Fri 14:45 -->
7
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+<meta name="viewport" content="width=device-width, initial-scale=1" />
9
+<title>&lrm;</title>
10
+<meta name="generator" content="Org mode" />
11
+<meta name="author" content="Bob Mottram" />
12
+<meta name="description" content="How to use Edith notes"
13
+ />
14
+<meta name="keywords" content="freedombone, edith, notes" />
15
+<style type="text/css">
16
+ <!--/*--><![CDATA[/*><!--*/
17
+  .title  { text-align: center;
18
+             margin-bottom: .2em; }
19
+  .subtitle { text-align: center;
20
+              font-size: medium;
21
+              font-weight: bold;
22
+              margin-top:0; }
23
+  .todo   { font-family: monospace; color: red; }
24
+  .done   { font-family: monospace; color: green; }
25
+  .priority { font-family: monospace; color: orange; }
26
+  .tag    { background-color: #eee; font-family: monospace;
27
+            padding: 2px; font-size: 80%; font-weight: normal; }
28
+  .timestamp { color: #bebebe; }
29
+  .timestamp-kwd { color: #5f9ea0; }
30
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
33
+  .underline { text-decoration: underline; }
34
+  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
35
+  p.verse { margin-left: 3%; }
36
+  pre {
37
+    border: 1px solid #ccc;
38
+    box-shadow: 3px 3px 3px #eee;
39
+    padding: 8pt;
40
+    font-family: monospace;
41
+    overflow: auto;
42
+    margin: 1.2em;
43
+  }
44
+  pre.src {
45
+    position: relative;
46
+    overflow: visible;
47
+    padding-top: 1.2em;
48
+  }
49
+  pre.src:before {
50
+    display: none;
51
+    position: absolute;
52
+    background-color: white;
53
+    top: -10px;
54
+    right: 10px;
55
+    padding: 3px;
56
+    border: 1px solid black;
57
+  }
58
+  pre.src:hover:before { display: inline;}
59
+  /* Languages per Org manual */
60
+  pre.src-asymptote:before { content: 'Asymptote'; }
61
+  pre.src-awk:before { content: 'Awk'; }
62
+  pre.src-C:before { content: 'C'; }
63
+  /* pre.src-C++ doesn't work in CSS */
64
+  pre.src-clojure:before { content: 'Clojure'; }
65
+  pre.src-css:before { content: 'CSS'; }
66
+  pre.src-D:before { content: 'D'; }
67
+  pre.src-ditaa:before { content: 'ditaa'; }
68
+  pre.src-dot:before { content: 'Graphviz'; }
69
+  pre.src-calc:before { content: 'Emacs Calc'; }
70
+  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
71
+  pre.src-fortran:before { content: 'Fortran'; }
72
+  pre.src-gnuplot:before { content: 'gnuplot'; }
73
+  pre.src-haskell:before { content: 'Haskell'; }
74
+  pre.src-hledger:before { content: 'hledger'; }
75
+  pre.src-java:before { content: 'Java'; }
76
+  pre.src-js:before { content: 'Javascript'; }
77
+  pre.src-latex:before { content: 'LaTeX'; }
78
+  pre.src-ledger:before { content: 'Ledger'; }
79
+  pre.src-lisp:before { content: 'Lisp'; }
80
+  pre.src-lilypond:before { content: 'Lilypond'; }
81
+  pre.src-lua:before { content: 'Lua'; }
82
+  pre.src-matlab:before { content: 'MATLAB'; }
83
+  pre.src-mscgen:before { content: 'Mscgen'; }
84
+  pre.src-ocaml:before { content: 'Objective Caml'; }
85
+  pre.src-octave:before { content: 'Octave'; }
86
+  pre.src-org:before { content: 'Org mode'; }
87
+  pre.src-oz:before { content: 'OZ'; }
88
+  pre.src-plantuml:before { content: 'Plantuml'; }
89
+  pre.src-processing:before { content: 'Processing.js'; }
90
+  pre.src-python:before { content: 'Python'; }
91
+  pre.src-R:before { content: 'R'; }
92
+  pre.src-ruby:before { content: 'Ruby'; }
93
+  pre.src-sass:before { content: 'Sass'; }
94
+  pre.src-scheme:before { content: 'Scheme'; }
95
+  pre.src-screen:before { content: 'Gnu Screen'; }
96
+  pre.src-sed:before { content: 'Sed'; }
97
+  pre.src-sh:before { content: 'shell'; }
98
+  pre.src-sql:before { content: 'SQL'; }
99
+  pre.src-sqlite:before { content: 'SQLite'; }
100
+  /* additional languages in org.el's org-babel-load-languages alist */
101
+  pre.src-forth:before { content: 'Forth'; }
102
+  pre.src-io:before { content: 'IO'; }
103
+  pre.src-J:before { content: 'J'; }
104
+  pre.src-makefile:before { content: 'Makefile'; }
105
+  pre.src-maxima:before { content: 'Maxima'; }
106
+  pre.src-perl:before { content: 'Perl'; }
107
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
108
+  pre.src-scala:before { content: 'Scala'; }
109
+  pre.src-shell:before { content: 'Shell Script'; }
110
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
111
+  /* additional language identifiers per "defun org-babel-execute"
112
+       in ob-*.el */
113
+  pre.src-cpp:before  { content: 'C++'; }
114
+  pre.src-abc:before  { content: 'ABC'; }
115
+  pre.src-coq:before  { content: 'Coq'; }
116
+  pre.src-groovy:before  { content: 'Groovy'; }
117
+  /* additional language identifiers from org-babel-shell-names in
118
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
119
+     the execution function name together. */
120
+  pre.src-bash:before  { content: 'bash'; }
121
+  pre.src-csh:before  { content: 'csh'; }
122
+  pre.src-ash:before  { content: 'ash'; }
123
+  pre.src-dash:before  { content: 'dash'; }
124
+  pre.src-ksh:before  { content: 'ksh'; }
125
+  pre.src-mksh:before  { content: 'mksh'; }
126
+  pre.src-posh:before  { content: 'posh'; }
127
+  /* Additional Emacs modes also supported by the LaTeX listings package */
128
+  pre.src-ada:before { content: 'Ada'; }
129
+  pre.src-asm:before { content: 'Assembler'; }
130
+  pre.src-caml:before { content: 'Caml'; }
131
+  pre.src-delphi:before { content: 'Delphi'; }
132
+  pre.src-html:before { content: 'HTML'; }
133
+  pre.src-idl:before { content: 'IDL'; }
134
+  pre.src-mercury:before { content: 'Mercury'; }
135
+  pre.src-metapost:before { content: 'MetaPost'; }
136
+  pre.src-modula-2:before { content: 'Modula-2'; }
137
+  pre.src-pascal:before { content: 'Pascal'; }
138
+  pre.src-ps:before { content: 'PostScript'; }
139
+  pre.src-prolog:before { content: 'Prolog'; }
140
+  pre.src-simula:before { content: 'Simula'; }
141
+  pre.src-tcl:before { content: 'tcl'; }
142
+  pre.src-tex:before { content: 'TeX'; }
143
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
144
+  pre.src-verilog:before { content: 'Verilog'; }
145
+  pre.src-vhdl:before { content: 'VHDL'; }
146
+  pre.src-xml:before { content: 'XML'; }
147
+  pre.src-nxml:before { content: 'XML'; }
148
+  /* add a generic configuration mode; LaTeX export needs an additional
149
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
150
+  pre.src-conf:before { content: 'Configuration File'; }
151
+
152
+  table { border-collapse:collapse; }
153
+  caption.t-above { caption-side: top; }
154
+  caption.t-bottom { caption-side: bottom; }
155
+  td, th { vertical-align:top;  }
156
+  th.org-right  { text-align: center;  }
157
+  th.org-left   { text-align: center;   }
158
+  th.org-center { text-align: center; }
159
+  td.org-right  { text-align: right;  }
160
+  td.org-left   { text-align: left;   }
161
+  td.org-center { text-align: center; }
162
+  dt { font-weight: bold; }
163
+  .footpara { display: inline; }
164
+  .footdef  { margin-bottom: 1em; }
165
+  .figure { padding: 1em; }
166
+  .figure p { text-align: center; }
167
+  .inlinetask {
168
+    padding: 10px;
169
+    border: 2px solid gray;
170
+    margin: 10px;
171
+    background: #ffffcc;
172
+  }
173
+  #org-div-home-and-up
174
+   { text-align: right; font-size: 70%; white-space: nowrap; }
175
+  textarea { overflow-x: auto; }
176
+  .linenr { font-size: smaller }
177
+  .code-highlighted { background-color: #ffff00; }
178
+  .org-info-js_info-navigation { border-style: none; }
179
+  #org-info-js_console-label
180
+    { font-size: 10px; font-weight: bold; white-space: nowrap; }
181
+  .org-info-js_search-highlight
182
+    { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
184
+  /*]]>*/-->
185
+</style>
186
+<link rel="stylesheet" type="text/css" href="freedombone.css" />
187
+<script type="text/javascript">
188
+/*
189
+@licstart  The following is the entire license notice for the
190
+JavaScript code in this tag.
191
+
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
193
+
194
+The JavaScript code in this tag is free software: you can
195
+redistribute it and/or modify it under the terms of the GNU
196
+General Public License (GNU GPL) as published by the Free Software
197
+Foundation, either version 3 of the License, or (at your option)
198
+any later version.  The code is distributed WITHOUT ANY WARRANTY;
199
+without even the implied warranty of MERCHANTABILITY or FITNESS
200
+FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
201
+
202
+As additional permission under GNU GPL version 3 section 7, you
203
+may distribute non-source (e.g., minimized or compacted) forms of
204
+that code without the copy of the GNU GPL normally required by
205
+section 4, provided you include this license notice and a URL
206
+through which recipients can access the Corresponding Source.
207
+
208
+
209
+@licend  The above is the entire license notice
210
+for the JavaScript code in this tag.
211
+*/
212
+<!--/*--><![CDATA[/*><!--*/
213
+ function CodeHighlightOn(elem, id)
214
+ {
215
+   var target = document.getElementById(id);
216
+   if(null != target) {
217
+     elem.cacheClassElem = elem.className;
218
+     elem.cacheClassTarget = target.className;
219
+     target.className = "code-highlighted";
220
+     elem.className   = "code-highlighted";
221
+   }
222
+ }
223
+ function CodeHighlightOff(elem, id)
224
+ {
225
+   var target = document.getElementById(id);
226
+   if(elem.cacheClassElem)
227
+     elem.className = elem.cacheClassElem;
228
+   if(elem.cacheClassTarget)
229
+     target.className = elem.cacheClassTarget;
230
+ }
231
+/*]]>*///-->
232
+</script>
233
+</head>
234
+<body>
235
+<div id="preamble" class="status">
236
+<a name="top" id="top"></a>
237
+</div>
238
+<div id="content">
239
+<div class="org-center">
240
+
241
+<div class="figure">
242
+<p><img src="images/logo.png" alt="logo.png" />
243
+</p>
244
+</div>
245
+</div>
246
+
247
+<center>
248
+<h1>Edith Notes</h1>
249
+</center>
250
+
251
+<p>
252
+Edith notes is the simplest and quickest kind of notes system. It has no complicated user interface. Just enter your domain and a title and a note will be created. Everything typed is saved automatically.
253
+</p>
254
+
255
+<p>
256
+The speed and minimalism of this type of notes system may make it suitable for things like shopping lists or distraction free writing.
257
+</p>
258
+
259
+<p>
260
+ssh into the system with:
261
+</p>
262
+
263
+<div class="org-src-container">
264
+<pre class="src src-bash">ssh myusername@mydomain.com -p 2222
265
+</pre>
266
+</div>
267
+
268
+<p>
269
+Select <b>Administrator controls</b> then <b>App Settings</b> then <b>edith</b>. Enter a subdomain name, such as <i>notes.mydomain.com</i>, and optionally a freedns code. When the installation is complete you can then look up the password for the site within the <b>Passwords</b> section of the <b>Administrator control panel</b>, then  navigate to the subdomain. Log in, then enter something like <i>notes.mydomain.com/testnote</i> and start typing.
270
+</p>
271
+
272
+<p>
273
+It is possible to turn off the login via <b>App Settings/edith</b> if you wish, but this will enable anyone on the internet to view or edit notes on your system, which could have obvious privacy or stability implications. From <b>App settings/edith</b> it's also possible to browse through your notes files.
274
+</p>
275
+</div>
276
+<div id="postamble" class="status">
277
+
278
+<style type="text/css">
279
+.back-to-top {
280
+    position: fixed;
281
+    bottom: 2em;
282
+    right: 0px;
283
+    text-decoration: none;
284
+    color: #000000;
285
+    background-color: rgba(235, 235, 235, 0.80);
286
+    font-size: 12px;
287
+    padding: 1em;
288
+    display: none;
289
+}
290
+
291
+.back-to-top:hover {
292
+    background-color: rgba(135, 135, 135, 0.50);
293
+}
294
+</style>
295
+
296
+<div class="back-to-top">
297
+<a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
298
+</div>
299
+</div>
300
+</body>
301
+</html>

+ 133
- 121
website/EN/apps.html View File

@@ -3,7 +3,7 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<!-- 2018-01-10 Wed 22:25 -->
6
+<!-- 2018-02-02 Fri 14:51 -->
7 7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8 8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9 9
 <title>&lrm;</title>
@@ -265,9 +265,9 @@ The base install of the system just contains an email server and Mutt client, bu
265 265
 </div>
266 266
 
267 267
 
268
-<div id="outline-container-org882df4a" class="outline-2">
269
-<h2 id="org882df4a">Akaunting</h2>
270
-<div class="outline-text-2" id="text-org882df4a">
268
+<div id="outline-container-org6873154" class="outline-2">
269
+<h2 id="org6873154">Akaunting</h2>
270
+<div class="outline-text-2" id="text-org6873154">
271 271
 <p>
272 272
 A web based accounts system for small businesses or freelancers.
273 273
 </p>
@@ -277,9 +277,9 @@ A web based accounts system for small businesses or freelancers.
277 277
 </p>
278 278
 </div>
279 279
 </div>
280
-<div id="outline-container-orge821a92" class="outline-2">
281
-<h2 id="orge821a92">CryptPad</h2>
282
-<div class="outline-text-2" id="text-orge821a92">
280
+<div id="outline-container-org7e6ef98" class="outline-2">
281
+<h2 id="org7e6ef98">CryptPad</h2>
282
+<div class="outline-text-2" id="text-org7e6ef98">
283 283
 <p>
284 284
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
285 285
 </p>
@@ -289,9 +289,9 @@ Collaborate on editing documents, presentations and source code, or vote on thin
289 289
 </p>
290 290
 </div>
291 291
 </div>
292
-<div id="outline-container-org6d56481" class="outline-2">
293
-<h2 id="org6d56481">DLNA</h2>
294
-<div class="outline-text-2" id="text-org6d56481">
292
+<div id="outline-container-orgb6914dd" class="outline-2">
293
+<h2 id="orgb6914dd">DLNA</h2>
294
+<div class="outline-text-2" id="text-orgb6914dd">
295 295
 <p>
296 296
 Enables you to use the system as a music server which any DLNA compatible devices can connect to within your home network.
297 297
 </p>
@@ -301,9 +301,9 @@ Enables you to use the system as a music server which any DLNA compatible device
301 301
 </p>
302 302
 </div>
303 303
 </div>
304
-<div id="outline-container-org0aaf2bf" class="outline-2">
305
-<h2 id="org0aaf2bf">Dokuwiki</h2>
306
-<div class="outline-text-2" id="text-org0aaf2bf">
304
+<div id="outline-container-orgc23c65e" class="outline-2">
305
+<h2 id="orgc23c65e">Dokuwiki</h2>
306
+<div class="outline-text-2" id="text-orgc23c65e">
307 307
 <p>
308 308
 A databaseless wiki system.
309 309
 </p>
@@ -313,9 +313,21 @@ A databaseless wiki system.
313 313
 </p>
314 314
 </div>
315 315
 </div>
316
-<div id="outline-container-orga523977" class="outline-2">
317
-<h2 id="orga523977">Emacs</h2>
318
-<div class="outline-text-2" id="text-orga523977">
316
+<div id="outline-container-orgf803ba9" class="outline-2">
317
+<h2 id="orgf803ba9">Edith</h2>
318
+<div class="outline-text-2" id="text-orgf803ba9">
319
+<p>
320
+Extremely simple and distraction-free notes system.
321
+</p>
322
+
323
+<p>
324
+<a href="./app_edith.html">How to use it</a>
325
+</p>
326
+</div>
327
+</div>
328
+<div id="outline-container-orgfd2155a" class="outline-2">
329
+<h2 id="orgfd2155a">Emacs</h2>
330
+<div class="outline-text-2" id="text-orgfd2155a">
319 331
 <p>
320 332
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
321 333
 </p>
@@ -325,9 +337,9 @@ If you use the Mutt client to read your email then this will set it up to use em
325 337
 </p>
326 338
 </div>
327 339
 </div>
328
-<div id="outline-container-org11ae2d9" class="outline-2">
329
-<h2 id="org11ae2d9">Etherpad</h2>
330
-<div class="outline-text-2" id="text-org11ae2d9">
340
+<div id="outline-container-org5fcc9ff" class="outline-2">
341
+<h2 id="org5fcc9ff">Etherpad</h2>
342
+<div class="outline-text-2" id="text-org5fcc9ff">
331 343
 <p>
332 344
 Collaborate on creating documents in real time. Maybe you're planning a holiday with other family members or creating documentation for a Free Software project along with other volunteers. Etherpad is hard to beat for simplicity and speed. Only users of the system will be able to access it.
333 345
 </p>
@@ -337,9 +349,9 @@ Collaborate on creating documents in real time. Maybe you're planning a holiday
337 349
 </p>
338 350
 </div>
339 351
 </div>
340
-<div id="outline-container-org7f75cbc" class="outline-2">
341
-<h2 id="org7f75cbc">Federated wiki</h2>
342
-<div class="outline-text-2" id="text-org7f75cbc">
352
+<div id="outline-container-orgdc50344" class="outline-2">
353
+<h2 id="orgdc50344">Federated wiki</h2>
354
+<div class="outline-text-2" id="text-orgdc50344">
343 355
 <p>
344 356
 A new approach to creating wiki content.
345 357
 </p>
@@ -349,9 +361,9 @@ A new approach to creating wiki content.
349 361
 </p>
350 362
 </div>
351 363
 </div>
352
-<div id="outline-container-org538cc52" class="outline-2">
353
-<h2 id="org538cc52">Friendica</h2>
354
-<div class="outline-text-2" id="text-org538cc52">
364
+<div id="outline-container-org30bda20" class="outline-2">
365
+<h2 id="org30bda20">Friendica</h2>
366
+<div class="outline-text-2" id="text-org30bda20">
355 367
 <p>
356 368
 Federated social network system.
357 369
 </p>
@@ -361,9 +373,9 @@ Federated social network system.
361 373
 </p>
362 374
 </div>
363 375
 </div>
364
-<div id="outline-container-orga0e917c" class="outline-2">
365
-<h2 id="orga0e917c">Ghost</h2>
366
-<div class="outline-text-2" id="text-orga0e917c">
376
+<div id="outline-container-org98e4708" class="outline-2">
377
+<h2 id="org98e4708">Ghost</h2>
378
+<div class="outline-text-2" id="text-org98e4708">
367 379
 <p>
368 380
 Modern looking blogging system.
369 381
 </p>
@@ -373,9 +385,9 @@ Modern looking blogging system.
373 385
 </p>
374 386
 </div>
375 387
 </div>
376
-<div id="outline-container-org5741481" class="outline-2">
377
-<h2 id="org5741481">GNU Social</h2>
378
-<div class="outline-text-2" id="text-org5741481">
388
+<div id="outline-container-orgcd73257" class="outline-2">
389
+<h2 id="orgcd73257">GNU Social</h2>
390
+<div class="outline-text-2" id="text-orgcd73257">
379 391
 <p>
380 392
 Federated social network based on the OStatus protocol. You can "<i>remote follow</i>" other users within the GNU Social federation.
381 393
 </p>
@@ -385,9 +397,9 @@ Federated social network based on the OStatus protocol. You can "<i>remote follo
385 397
 </p>
386 398
 </div>
387 399
 </div>
388
-<div id="outline-container-org0b7fe9f" class="outline-2">
389
-<h2 id="org0b7fe9f">Gogs</h2>
390
-<div class="outline-text-2" id="text-org0b7fe9f">
400
+<div id="outline-container-org5f6afde" class="outline-2">
401
+<h2 id="org5f6afde">Gogs</h2>
402
+<div class="outline-text-2" id="text-org5f6afde">
391 403
 <p>
392 404
 Lightweight git project hosting system. You can mirror projects from Github, or if Github turns evil then just host your own projects while retaining the familiar <i>fork-and-pull</i> workflow. If you can use Github then you can also use Gogs.
393 405
 </p>
@@ -397,9 +409,9 @@ Lightweight git project hosting system. You can mirror projects from Github, or
397 409
 </p>
398 410
 </div>
399 411
 </div>
400
-<div id="outline-container-org0cb9182" class="outline-2">
401
-<h2 id="org0cb9182">HTMLy</h2>
402
-<div class="outline-text-2" id="text-org0cb9182">
412
+<div id="outline-container-org4d1d8ba" class="outline-2">
413
+<h2 id="org4d1d8ba">HTMLy</h2>
414
+<div class="outline-text-2" id="text-org4d1d8ba">
403 415
 <p>
404 416
 Databaseless blogging system. Quite simple and with a markdown-like format.
405 417
 </p>
@@ -409,9 +421,9 @@ Databaseless blogging system. Quite simple and with a markdown-like format.
409 421
 </p>
410 422
 </div>
411 423
 </div>
412
-<div id="outline-container-orgd9569c1" class="outline-2">
413
-<h2 id="orgd9569c1">Hubzilla</h2>
414
-<div class="outline-text-2" id="text-orgd9569c1">
424
+<div id="outline-container-org4039820" class="outline-2">
425
+<h2 id="org4039820">Hubzilla</h2>
426
+<div class="outline-text-2" id="text-org4039820">
415 427
 <p>
416 428
 Web publishing platform with social network like features and good privacy controls so that it's possible to specify who can see which content. Includes photo albums, calendar, wiki and file storage.
417 429
 </p>
@@ -421,9 +433,9 @@ Web publishing platform with social network like features and good privacy contr
421 433
 </p>
422 434
 </div>
423 435
 </div>
424
-<div id="outline-container-orgab4800e" class="outline-2">
425
-<h2 id="orgab4800e">Icecast media stream</h2>
426
-<div class="outline-text-2" id="text-orgab4800e">
436
+<div id="outline-container-orgd7ea9f5" class="outline-2">
437
+<h2 id="orgd7ea9f5">Icecast media stream</h2>
438
+<div class="outline-text-2" id="text-orgd7ea9f5">
427 439
 <p>
428 440
 Make your own internet radio station.
429 441
 </p>
@@ -433,9 +445,9 @@ Make your own internet radio station.
433 445
 </p>
434 446
 </div>
435 447
 </div>
436
-<div id="outline-container-orgd862282" class="outline-2">
437
-<h2 id="orgd862282">IRC Server (ngirc)</h2>
438
-<div class="outline-text-2" id="text-orgd862282">
448
+<div id="outline-container-org4b18262" class="outline-2">
449
+<h2 id="org4b18262">IRC Server (ngirc)</h2>
450
+<div class="outline-text-2" id="text-org4b18262">
439 451
 <p>
440 452
 Run your own IRC chat channel which can be secured with a password and accessible via an onion address. A bouncer is included so that you can receive messages sent while you were offline. Works with Hexchat and other popular clients.
441 453
 </p>
@@ -445,18 +457,18 @@ Run your own IRC chat channel which can be secured with a password and accessibl
445 457
 </p>
446 458
 </div>
447 459
 </div>
448
-<div id="outline-container-orgd19b0f8" class="outline-2">
449
-<h2 id="orgd19b0f8">Jitsi Meet</h2>
450
-<div class="outline-text-2" id="text-orgd19b0f8">
460
+<div id="outline-container-org3244c52" class="outline-2">
461
+<h2 id="org3244c52">Jitsi Meet</h2>
462
+<div class="outline-text-2" id="text-org3244c52">
451 463
 <p>
452 464
 Experimental WebRTC video conferencing system, similar to Google Hangouts. This may not be fully functional, but is hoped to be in the near future.
453 465
 </p>
454 466
 </div>
455 467
 </div>
456 468
 
457
-<div id="outline-container-org4fd23ed" class="outline-2">
458
-<h2 id="org4fd23ed">KanBoard</h2>
459
-<div class="outline-text-2" id="text-org4fd23ed">
469
+<div id="outline-container-org7f54f3b" class="outline-2">
470
+<h2 id="org7f54f3b">KanBoard</h2>
471
+<div class="outline-text-2" id="text-org7f54f3b">
460 472
 <p>
461 473
 A simple kanban system for managing projects or TODO lists.
462 474
 </p>
@@ -466,9 +478,9 @@ A simple kanban system for managing projects or TODO lists.
466 478
 </p>
467 479
 </div>
468 480
 </div>
469
-<div id="outline-container-org091b6da" class="outline-2">
470
-<h2 id="org091b6da">Key Server</h2>
471
-<div class="outline-text-2" id="text-org091b6da">
481
+<div id="outline-container-org511a639" class="outline-2">
482
+<h2 id="org511a639">Key Server</h2>
483
+<div class="outline-text-2" id="text-org511a639">
472 484
 <p>
473 485
 An OpenPGP key server for storing and retrieving GPG public keys.
474 486
 </p>
@@ -478,9 +490,9 @@ An OpenPGP key server for storing and retrieving GPG public keys.
478 490
 </p>
479 491
 </div>
480 492
 </div>
481
-<div id="outline-container-org471027b" class="outline-2">
482
-<h2 id="org471027b">Koel</h2>
483
-<div class="outline-text-2" id="text-org471027b">
493
+<div id="outline-container-org058add3" class="outline-2">
494
+<h2 id="org058add3">Koel</h2>
495
+<div class="outline-text-2" id="text-org058add3">
484 496
 <p>
485 497
 Access your music collection from any internet connected device.
486 498
 </p>
@@ -490,9 +502,9 @@ Access your music collection from any internet connected device.
490 502
 </p>
491 503
 </div>
492 504
 </div>
493
-<div id="outline-container-org0424b63" class="outline-2">
494
-<h2 id="org0424b63">Lychee</h2>
495
-<div class="outline-text-2" id="text-org0424b63">
505
+<div id="outline-container-org611fc47" class="outline-2">
506
+<h2 id="org611fc47">Lychee</h2>
507
+<div class="outline-text-2" id="text-org611fc47">
496 508
 <p>
497 509
 Make your photo albums available on the web.
498 510
 </p>
@@ -502,9 +514,9 @@ Make your photo albums available on the web.
502 514
 </p>
503 515
 </div>
504 516
 </div>
505
-<div id="outline-container-orga6a88dd" class="outline-2">
506
-<h2 id="orga6a88dd">Mailpile</h2>
507
-<div class="outline-text-2" id="text-orga6a88dd">
517
+<div id="outline-container-org3a59d15" class="outline-2">
518
+<h2 id="org3a59d15">Mailpile</h2>
519
+<div class="outline-text-2" id="text-org3a59d15">
508 520
 <p>
509 521
 Modern email client which supports GPG encryption.
510 522
 </p>
@@ -514,9 +526,9 @@ Modern email client which supports GPG encryption.
514 526
 </p>
515 527
 </div>
516 528
 </div>
517
-<div id="outline-container-org6518c3d" class="outline-2">
518
-<h2 id="org6518c3d">Matrix</h2>
519
-<div class="outline-text-2" id="text-org6518c3d">
529
+<div id="outline-container-org36c7c61" class="outline-2">
530
+<h2 id="org36c7c61">Matrix</h2>
531
+<div class="outline-text-2" id="text-org36c7c61">
520 532
 <p>
521 533
 Multi-user chat with some security and moderation controls.
522 534
 </p>
@@ -526,9 +538,9 @@ Multi-user chat with some security and moderation controls.
526 538
 </p>
527 539
 </div>
528 540
 </div>
529
-<div id="outline-container-org1413e81" class="outline-2">
530
-<h2 id="org1413e81">Mediagoblin</h2>
531
-<div class="outline-text-2" id="text-org1413e81">
541
+<div id="outline-container-org69bd95e" class="outline-2">
542
+<h2 id="org69bd95e">Mediagoblin</h2>
543
+<div class="outline-text-2" id="text-org69bd95e">
532 544
 <p>
533 545
 Publicly host video and audio files so that you don't need to use YouTube/Vimeo/etc.
534 546
 </p>
@@ -538,9 +550,9 @@ Publicly host video and audio files so that you don't need to use YouTube/Vimeo/
538 550
 </p>
539 551
 </div>
540 552
 </div>
541
-<div id="outline-container-orgb8d2738" class="outline-2">
542
-<h2 id="orgb8d2738">Mumble</h2>
543
-<div class="outline-text-2" id="text-orgb8d2738">
553
+<div id="outline-container-org083b086" class="outline-2">
554
+<h2 id="org083b086">Mumble</h2>
555
+<div class="outline-text-2" id="text-org083b086">
544 556
 <p>
545 557
 The popular VoIP and text chat system. Say goodbye to old-fashioned telephony conferences with silly dial codes. Also works well on mobile.
546 558
 </p>
@@ -550,9 +562,9 @@ The popular VoIP and text chat system. Say goodbye to old-fashioned telephony co
550 562
 </p>
551 563
 </div>
552 564
 </div>
553
-<div id="outline-container-org78d79cd" class="outline-2">
554
-<h2 id="org78d79cd">NextCloud</h2>
555
-<div class="outline-text-2" id="text-org78d79cd">
565
+<div id="outline-container-orga89941d" class="outline-2">
566
+<h2 id="orga89941d">NextCloud</h2>
567
+<div class="outline-text-2" id="text-orga89941d">
556 568
 <p>
557 569
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
558 570
 </p>
@@ -562,9 +574,9 @@ Store files on your server and sync them with laptops or mobile devices. Include
562 574
 </p>
563 575
 </div>
564 576
 </div>
565
-<div id="outline-container-org40a7fdc" class="outline-2">
566
-<h2 id="org40a7fdc">PeerTube</h2>
567
-<div class="outline-text-2" id="text-org40a7fdc">
577
+<div id="outline-container-org1855642" class="outline-2">
578
+<h2 id="org1855642">PeerTube</h2>
579
+<div class="outline-text-2" id="text-org1855642">
568 580
 <p>
569 581
 Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better enables the streaming load to be shared across servers.
570 582
 </p>
@@ -574,9 +586,9 @@ Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better en
574 586
 </p>
575 587
 </div>
576 588
 </div>
577
-<div id="outline-container-orgfca92a1" class="outline-2">
578
-<h2 id="orgfca92a1">PI-Hole</h2>
579
-<div class="outline-text-2" id="text-orgfca92a1">
589
+<div id="outline-container-org75f549b" class="outline-2">
590
+<h2 id="org75f549b">PI-Hole</h2>
591
+<div class="outline-text-2" id="text-org75f549b">
580 592
 <p>
581 593
 The black hole for web adverts. Block adverts at the domain name level within your local network. It can significantly reduce bandwidth, speed up page load times and protect your systems from being tracked by spyware.
582 594
 </p>
@@ -586,9 +598,9 @@ The black hole for web adverts. Block adverts at the domain name level within yo
586 598
 </p>
587 599
 </div>
588 600
 </div>
589
-<div id="outline-container-org78a2d24" class="outline-2">
590
-<h2 id="org78a2d24">PostActiv</h2>
591
-<div class="outline-text-2" id="text-org78a2d24">
601
+<div id="outline-container-orga1fbb11" class="outline-2">
602
+<h2 id="orga1fbb11">PostActiv</h2>
603
+<div class="outline-text-2" id="text-orga1fbb11">
592 604
 <p>
593 605
 An alternative federated social networking system compatible with GNU Social, Pleroma and Mastodon. It includes some optimisations and fixes currently not available within the main GNU Social project.
594 606
 </p>
@@ -598,9 +610,9 @@ An alternative federated social networking system compatible with GNU Social, Pl
598 610
 </p>
599 611
 </div>
600 612
 </div>
601
-<div id="outline-container-org233a0fb" class="outline-2">
602
-<h2 id="org233a0fb">PrivateBin</h2>
603
-<div class="outline-text-2" id="text-org233a0fb">
613
+<div id="outline-container-org1448160" class="outline-2">
614
+<h2 id="org1448160">PrivateBin</h2>
615
+<div class="outline-text-2" id="text-org1448160">
604 616
 <p>
605 617
 A pastebin where the server has zero knowledge of the content being pasted.
606 618
 </p>
@@ -610,9 +622,9 @@ A pastebin where the server has zero knowledge of the content being pasted.
610 622
 </p>
611 623
 </div>
612 624
 </div>
613
-<div id="outline-container-org70bfbdf" class="outline-2">
614
-<h2 id="org70bfbdf">Profanity</h2>
615
-<div class="outline-text-2" id="text-org70bfbdf">
625
+<div id="outline-container-org9d310cf" class="outline-2">
626
+<h2 id="org9d310cf">Profanity</h2>
627
+<div class="outline-text-2" id="text-org9d310cf">
616 628
 <p>
617 629
 A shell based XMPP client which you can run on the Freedombone server via ssh.
618 630
 </p>
@@ -622,9 +634,9 @@ A shell based XMPP client which you can run on the Freedombone server via ssh.
622 634
 </p>
623 635
 </div>
624 636
 </div>
625
-<div id="outline-container-org3e596b4" class="outline-2">
626
-<h2 id="org3e596b4">Riot Web</h2>
627
-<div class="outline-text-2" id="text-org3e596b4">
637
+<div id="outline-container-orge6aa619" class="outline-2">
638
+<h2 id="orge6aa619">Riot Web</h2>
639
+<div class="outline-text-2" id="text-orge6aa619">
628 640
 <p>
629 641
 A browser based user interface for the Matrix federated communications system, including WebRTC audio and video chat.
630 642
 </p>
@@ -634,9 +646,9 @@ A browser based user interface for the Matrix federated communications system, i
634 646
 </p>
635 647
 </div>
636 648
 </div>
637
-<div id="outline-container-org19a30bc" class="outline-2">
638
-<h2 id="org19a30bc">SearX</h2>
639
-<div class="outline-text-2" id="text-org19a30bc">
649
+<div id="outline-container-org50e63cb" class="outline-2">
650
+<h2 id="org50e63cb">SearX</h2>
651
+<div class="outline-text-2" id="text-org50e63cb">
640 652
 <p>
641 653
 A metasearch engine for customised and private web searches.
642 654
 </p>
@@ -646,9 +658,9 @@ A metasearch engine for customised and private web searches.
646 658
 </p>
647 659
 </div>
648 660
 </div>
649
-<div id="outline-container-orgfdae631" class="outline-2">
650
-<h2 id="orgfdae631">tt-rss</h2>
651
-<div class="outline-text-2" id="text-orgfdae631">
661
+<div id="outline-container-orgec6ad33" class="outline-2">
662
+<h2 id="orgec6ad33">tt-rss</h2>
663
+<div class="outline-text-2" id="text-orgec6ad33">
652 664
 <p>
653 665
 Private RSS reader. Pulls in RSS/Atom feeds via Tor and is only accessible via an onion address. Have "<i>the right to read</i>" without the Surveillance State knowing what you're reading. Also available with a user interface suitable for viewing on mobile devices via a browser such as OrFox.
654 666
 </p>
@@ -658,9 +670,9 @@ Private RSS reader. Pulls in RSS/Atom feeds via Tor and is only accessible via a
658 670
 </p>
659 671
 </div>
660 672
 </div>
661
-<div id="outline-container-org6c1fb9a" class="outline-2">
662
-<h2 id="org6c1fb9a">Syncthing</h2>
663
-<div class="outline-text-2" id="text-org6c1fb9a">
673
+<div id="outline-container-org4de6eec" class="outline-2">
674
+<h2 id="org4de6eec">Syncthing</h2>
675
+<div class="outline-text-2" id="text-org4de6eec">
664 676
 <p>
665 677
 Possibly the best way to synchronise files across all of your devices. Once it has been set up it "just works" with no user intervention needed.
666 678
 </p>
@@ -670,9 +682,9 @@ Possibly the best way to synchronise files across all of your devices. Once it h
670 682
 </p>
671 683
 </div>
672 684
 </div>
673
-<div id="outline-container-org313c9b7" class="outline-2">
674
-<h2 id="org313c9b7">Tahoe-LAFS</h2>
675
-<div class="outline-text-2" id="text-org313c9b7">
685
+<div id="outline-container-orgebbf48a" class="outline-2">
686
+<h2 id="orgebbf48a">Tahoe-LAFS</h2>
687
+<div class="outline-text-2" id="text-orgebbf48a">
676 688
 <p>
677 689
 Robust and encrypted storage of files on one or more server.
678 690
 </p>
@@ -682,9 +694,9 @@ Robust and encrypted storage of files on one or more server.
682 694
 </p>
683 695
 </div>
684 696
 </div>
685
-<div id="outline-container-org74af2ab" class="outline-2">
686
-<h2 id="org74af2ab">Tox</h2>
687
-<div class="outline-text-2" id="text-org74af2ab">
697
+<div id="outline-container-org3275ee7" class="outline-2">
698
+<h2 id="org3275ee7">Tox</h2>
699
+<div class="outline-text-2" id="text-org3275ee7">
688 700
 <p>
689 701
 Client and bootstrap node for the Tox chat/VoIP system.
690 702
 </p>
@@ -694,9 +706,9 @@ Client and bootstrap node for the Tox chat/VoIP system.
694 706
 </p>
695 707
 </div>
696 708
 </div>
697
-<div id="outline-container-org5d5986e" class="outline-2">
698
-<h2 id="org5d5986e">Turtl</h2>
699
-<div class="outline-text-2" id="text-org5d5986e">
709
+<div id="outline-container-orgceb6c24" class="outline-2">
710
+<h2 id="orgceb6c24">Turtl</h2>
711
+<div class="outline-text-2" id="text-orgceb6c24">
700 712
 <p>
701 713
 A system for privately creating and sharing notes and images, similar to Evernote but without the spying.
702 714
 </p>
@@ -706,18 +718,18 @@ A system for privately creating and sharing notes and images, similar to Evernot
706 718
 </p>
707 719
 </div>
708 720
 </div>
709
-<div id="outline-container-org2b614c0" class="outline-2">
710
-<h2 id="org2b614c0">Vim</h2>
711
-<div class="outline-text-2" id="text-org2b614c0">
721
+<div id="outline-container-org1216de4" class="outline-2">
722
+<h2 id="org1216de4">Vim</h2>
723
+<div class="outline-text-2" id="text-org1216de4">
712 724
 <p>
713 725
 If you use the Mutt client to read your email then this will set it up to use vim for composing new mail.
714 726
 </p>
715 727
 </div>
716 728
 </div>
717 729
 
718
-<div id="outline-container-orgdb6427c" class="outline-2">
719
-<h2 id="orgdb6427c">Virtual Private Network (VPN)</h2>
720
-<div class="outline-text-2" id="text-orgdb6427c">
730
+<div id="outline-container-org057b184" class="outline-2">
731
+<h2 id="org057b184">Virtual Private Network (VPN)</h2>
732
+<div class="outline-text-2" id="text-org057b184">
721 733
 <p>
722 734
 Set up a VPN on your server so that you can bypass local internet censorship.
723 735
 </p>
@@ -727,9 +739,9 @@ Set up a VPN on your server so that you can bypass local internet censorship.
727 739
 </p>
728 740
 </div>
729 741
 </div>
730
-<div id="outline-container-org15bc23b" class="outline-2">
731
-<h2 id="org15bc23b">XMPP</h2>
732
-<div class="outline-text-2" id="text-org15bc23b">
742
+<div id="outline-container-org93a66a0" class="outline-2">
743
+<h2 id="org93a66a0">XMPP</h2>
744
+<div class="outline-text-2" id="text-org93a66a0">
733 745
 <p>
734 746
 Chat server which can be used together with client such as Gajim or Conversations to provide end-to-end content security and also onion routed metadata security. Includes advanced features such as <i>client state notification</i> to save battery power on your mobile devices, support for seamless roaming between networks and <i>message carbons</i> so that you can receive the same messages while being simultaneously logged in to your account on more than one device.
735 747
 </p>