home · contact · privacy
Restructure source file tree.
authorChristian Heller <c.heller@plomlompom.de>
Sun, 11 Aug 2019 18:25:00 +0000 (20:25 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Sun, 11 Aug 2019 18:34:11 +0000 (20:34 +0200)
42 files changed:
buster/apt-mark/eeepc
buster/apt-mark/user [new file with mode: 0644]
buster/apt-mark/x200s [new file with mode: 0644]
buster/etc_files/eeepc/etc/default/console-setup [deleted file]
buster/etc_files/eeepc/etc/systemd/logind.conf [deleted file]
buster/etc_files/eeepc/opt/firefox/blank.html [deleted file]
buster/etc_files/eeepc/opt/firefox/defaults/pref/autoconfig.js [deleted file]
buster/etc_files/eeepc/opt/firefox/firefox.cfg [deleted file]
buster/etc_files/user/etc/default/console-setup [new file with mode: 0644]
buster/etc_files/user/etc/systemd/logind.conf [new file with mode: 0644]
buster/etc_files/user/opt/firefox/blank.html [new file with mode: 0644]
buster/etc_files/user/opt/firefox/defaults/pref/autoconfig.js [new file with mode: 0644]
buster/etc_files/user/opt/firefox/firefox.cfg [new file with mode: 0644]
buster/home_files/eeepc/.config/i3status/config [new file with mode: 0644]
buster/home_files/user/.Xresources [new file with mode: 0644]
buster/home_files/user/.borgrepos [new file with mode: 0644]
buster/home_files/user/.config/i3/config [new file with mode: 0644]
buster/home_files/user/.emacs.d/init.el [new file with mode: 0644]
buster/home_files/user/.mbsyncrc [new file with mode: 0644]
buster/home_files/user/.notmuch-config [new file with mode: 0644]
buster/home_files/user/.shell_prompt_color [new file with mode: 0644]
buster/home_files/user/.tridactylrc [new file with mode: 0644]
buster/home_files/user/.xinitrc [new file with mode: 0644]
buster/home_files/user/mail_sync.sh [new file with mode: 0755]
buster/home_files/user/public_repos/repos [new file with mode: 0644]
buster/home_files/user_eeepc/.Xresources [deleted file]
buster/home_files/user_eeepc/.borgrepos [deleted file]
buster/home_files/user_eeepc/.config/i3/config [deleted file]
buster/home_files/user_eeepc/.config/i3status/config [deleted file]
buster/home_files/user_eeepc/.emacs.d/init.el [deleted file]
buster/home_files/user_eeepc/.mbsyncrc [deleted file]
buster/home_files/user_eeepc/.notmuch-config [deleted file]
buster/home_files/user_eeepc/.shell_prompt_color [deleted file]
buster/home_files/user_eeepc/.tridactylrc [deleted file]
buster/home_files/user_eeepc/.xinitrc [deleted file]
buster/home_files/user_eeepc/mail_sync.sh [deleted file]
buster/home_files/user_eeepc/public_repos/repos [deleted file]
buster/home_files/x200s/.config/i3status/config [new file with mode: 0644]
buster/setup_scripts/setup_desktop.sh [new file with mode: 0755]
buster/setup_scripts/setup_eeepc.sh [deleted file]
buster/setup_scripts/setup_home.sh [new file with mode: 0755]
buster/setup_scripts/setup_home_eeepc.sh [deleted file]

index a8cd150cc87c3e2075c1b8f023a59206be05c9a0..73a755fdc3bd07b306fd03186f3e56a964b6e0d2 100644 (file)
@@ -1,65 +1,3 @@
-# to avoid booting problems with encrypted LVM, see <https://askubuntu.com/a/1105848>
-cryptsetup-initramfs
-lvm2
-# this provides setupcon which reads /etc/default/console-setup
-console-setup
-# without this, systemd-logind won't run, and so not detect lid close for hibernation
-dbus
 # for wifi
 firmware-ralink
-wicd-curses
-# for X to start at all
-xserver-xorg-video-intel
-# X input: keyboard and touchpad
-xserver-xorg-input-evdev
-xserver-xorg-input-synaptics
-# for startx
-xinit
-# for xrdb
-x11-xserver-utils
-# for startx to run for non-root user
-libpam-systemd
-# window environment
-i3
-i3status
-suckless-tools
-xterm
-# to get sleepy at night
-redshift
-# for alsamixer
-alsa-utils
-# for xterm and browser unicode display
-ttf-unifont
-# also useful
-vim
-sudo
-less
-man-db
-manpages
-procps
-# firefox dependencies
-libdbus-glib-1-2
-libgtk-3-0
-# firefox installation dependencies (remove later?)
-curl
-python3
-bzip2
-wget
-jq
-unzip
-# to mount encrypted USB stick and use its contents
-pmount
-cryptsetup
-openssh-client
-# for syncing
-borgbackup
-# emacs
-emacs25
-elpa-ledger
-elpa-elfeed
-# mail setup
-isync
-notmuch
-elpa-notmuch
-pinentry-gtk2
 #
diff --git a/buster/apt-mark/user b/buster/apt-mark/user
new file mode 100644 (file)
index 0000000..3d5ee05
--- /dev/null
@@ -0,0 +1,65 @@
+# to avoid booting problems with encrypted LVM, see <https://askubuntu.com/a/1105848>
+cryptsetup-initramfs
+lvm2
+# this provides setupcon which reads /etc/default/console-setup
+console-setup
+# without this, systemd-logind won't run, and so not detect lid close for hibernation
+dbus
+# for wifi
+wicd-curses
+wicd-gtk
+# for X to start at all
+xserver-xorg-video-intel
+# X input: keyboard and touchpad
+xserver-xorg-input-evdev
+xserver-xorg-input-synaptics
+# for startx
+xinit
+# for xrdb
+x11-xserver-utils
+# for startx to run for non-root user
+libpam-systemd
+# window environment
+i3
+i3status
+suckless-tools
+xterm
+# to get sleepy at night
+redshift
+# for alsamixer
+alsa-utils
+# for xterm and browser unicode display
+ttf-unifont
+# also useful
+vim
+sudo
+less
+man-db
+manpages
+procps
+# firefox dependencies
+libdbus-glib-1-2
+libgtk-3-0
+# firefox installation dependencies (remove later?)
+curl
+python3
+bzip2
+wget
+jq
+unzip
+# to mount encrypted USB stick and use its contents
+pmount
+cryptsetup
+openssh-client
+# for syncing
+borgbackup
+# emacs
+emacs25
+elpa-ledger
+elpa-elfeed
+# mail setup
+isync
+notmuch
+elpa-notmuch
+pinentry-gtk2
+#
diff --git a/buster/apt-mark/x200s b/buster/apt-mark/x200s
new file mode 100644 (file)
index 0000000..d06ad3f
--- /dev/null
@@ -0,0 +1,3 @@
+# for wifi
+firmware-iwlwifi
+#
diff --git a/buster/etc_files/eeepc/etc/default/console-setup b/buster/etc_files/eeepc/etc/default/console-setup
deleted file mode 100644 (file)
index 090d241..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-CHARMAP="UTF-8"
-CODESET="Lat15"
-FONTFACE="Terminus"
-FONTSIZE="6x12"
diff --git a/buster/etc_files/eeepc/etc/systemd/logind.conf b/buster/etc_files/eeepc/etc/systemd/logind.conf
deleted file mode 100644 (file)
index 6a61f0b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#  This file is part of systemd.
-#
-# See logind.conf(5) for details.
-
-[Login]
-# Note that with the standard Buster kernel this won't work due to
-# <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919227>.
-HandleLidSwitch=hibernate
diff --git a/buster/etc_files/eeepc/opt/firefox/blank.html b/buster/etc_files/eeepc/opt/firefox/blank.html
deleted file mode 100644 (file)
index 79e707e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-not quite blank
diff --git a/buster/etc_files/eeepc/opt/firefox/defaults/pref/autoconfig.js b/buster/etc_files/eeepc/opt/firefox/defaults/pref/autoconfig.js
deleted file mode 100644 (file)
index cf8ea80..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-// We set up AutoConfig according to <https://support.mozilla.org/en-US/kb/customizing-firefox-using-autoconfig>, see firefox.cfg comments on why we need it
-pref("general.config.filename", "firefox.cfg");
-pref("general.config.obscure_value", 0);
-
diff --git a/buster/etc_files/eeepc/opt/firefox/firefox.cfg b/buster/etc_files/eeepc/opt/firefox/firefox.cfg
deleted file mode 100644 (file)
index cf6b0a2..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-// do not put any code into this first line, as it gets ignored by Firefox
-
-// we zero extensions.autoDisableScopes so our pre-installed extensions activate by default
-pref("extensions.autoDisableScopes", 0);
-
-// we turn off annoying setup popups and pages; these settings are the result more of trial and error than thorough understanding by me, so more research might be warranted to discipline them
-pref("startup.homepage_welcome_url", "file:///opt/firefox/blank.html");
-pref("browser.startup.homepage", "file:///opt/firefox/blank.html");
-pref("browser.startup.blankWindow", true);
-pref("datareporting.policy.firstRunURL", "");
-pref("browser.shell.checkDefaultBrowser", false);
-pref("datareporting.policy.dataSubmissionPolicyBypassNotification", true);
diff --git a/buster/etc_files/user/etc/default/console-setup b/buster/etc_files/user/etc/default/console-setup
new file mode 100644 (file)
index 0000000..090d241
--- /dev/null
@@ -0,0 +1,4 @@
+CHARMAP="UTF-8"
+CODESET="Lat15"
+FONTFACE="Terminus"
+FONTSIZE="6x12"
diff --git a/buster/etc_files/user/etc/systemd/logind.conf b/buster/etc_files/user/etc/systemd/logind.conf
new file mode 100644 (file)
index 0000000..6a61f0b
--- /dev/null
@@ -0,0 +1,8 @@
+#  This file is part of systemd.
+#
+# See logind.conf(5) for details.
+
+[Login]
+# Note that with the standard Buster kernel this won't work due to
+# <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919227>.
+HandleLidSwitch=hibernate
diff --git a/buster/etc_files/user/opt/firefox/blank.html b/buster/etc_files/user/opt/firefox/blank.html
new file mode 100644 (file)
index 0000000..79e707e
--- /dev/null
@@ -0,0 +1 @@
+not quite blank
diff --git a/buster/etc_files/user/opt/firefox/defaults/pref/autoconfig.js b/buster/etc_files/user/opt/firefox/defaults/pref/autoconfig.js
new file mode 100644 (file)
index 0000000..cf8ea80
--- /dev/null
@@ -0,0 +1,4 @@
+// We set up AutoConfig according to <https://support.mozilla.org/en-US/kb/customizing-firefox-using-autoconfig>, see firefox.cfg comments on why we need it
+pref("general.config.filename", "firefox.cfg");
+pref("general.config.obscure_value", 0);
+
diff --git a/buster/etc_files/user/opt/firefox/firefox.cfg b/buster/etc_files/user/opt/firefox/firefox.cfg
new file mode 100644 (file)
index 0000000..cf6b0a2
--- /dev/null
@@ -0,0 +1,12 @@
+// do not put any code into this first line, as it gets ignored by Firefox
+
+// we zero extensions.autoDisableScopes so our pre-installed extensions activate by default
+pref("extensions.autoDisableScopes", 0);
+
+// we turn off annoying setup popups and pages; these settings are the result more of trial and error than thorough understanding by me, so more research might be warranted to discipline them
+pref("startup.homepage_welcome_url", "file:///opt/firefox/blank.html");
+pref("browser.startup.homepage", "file:///opt/firefox/blank.html");
+pref("browser.startup.blankWindow", true);
+pref("datareporting.policy.firstRunURL", "");
+pref("browser.shell.checkDefaultBrowser", false);
+pref("datareporting.policy.dataSubmissionPolicyBypassNotification", true);
diff --git a/buster/home_files/eeepc/.config/i3status/config b/buster/home_files/eeepc/.config/i3status/config
new file mode 100644 (file)
index 0000000..0acc8c9
--- /dev/null
@@ -0,0 +1,75 @@
+# plomlompom's i3 status bar configuration
+
+# Activate colors; set update interval of one second.
+general {
+  colors = true
+  interval = 1
+}
+
+# Selection / order of status elements.
+order += "disk /"
+order += "wireless wlp2s0"
+order += "ethernet enp1s0"
+order += "battery 0"
+order += "cpu_usage"
+order += "load"
+order += "cpu_temperature 0"
+order += "time"
+order += "volume master"
+
+# How much space is left in / ?
+disk "/" {
+  format = "/: %avail available of %total"
+  separator_block_width = 25
+}
+
+# WLAN status: show IP and connection quality or "down".
+wireless wlp2s0 {
+  format_up = "w: (%quality at %essid) %ip"
+  format_down = "w: down"
+  separator_block_width = 10
+}
+
+# Ethernet status: show IP or "down".
+ethernet enp1s0 {
+  format_up = "e: %ip"
+  format_down = "e: down"
+  separator_block_width = 25
+}
+
+# Battery status: show FULL/CHARGING/BATTERY, storage, time left.
+battery 0 {
+  format = "b: %status %percentage %remaining"
+  separator_block_width = 25
+}
+
+# Show CPU usage.
+cpu_usage {
+  format = "cpu: %usage"
+  separator_block_width = 10
+}
+
+# Show system load during last 1/5/15 minutes.
+load {
+  format = "%1min %5min %15min"
+  separator_block_width = 25
+}
+
+# Show CPU temperature in degrees of celsius.
+cpu_temperature 0 {
+  format = "%degrees °C"
+  separator_block_width = 25
+}
+
+# Show date/time/timezone as "year-month-day hour:minute:second
+# timezone_numeric/timezone_alphabetic".
+time {
+  format = "%Y-%m-%d %H:%M:%S %z/%Z"
+  separator_block_width = 25
+}
+
+volume master {
+  format = "♪: %volume"
+  format_muted = "♪: muted (%volume)"
+  separator_block_width = 25
+}
diff --git a/buster/home_files/user/.Xresources b/buster/home_files/user/.Xresources
new file mode 100644 (file)
index 0000000..45b10af
--- /dev/null
@@ -0,0 +1,56 @@
+! otherwise various applications will assume merely 8 colors
+XTerm.termName: xterm-256color
+
+! font
+! actually, "mono" is already the default for faceName (it will
+! pick whatever fc-match mono delivers), but we need to set _some_
+! faceName to trigger XTerm activating TrueType fonts
+! (XTerm*fontRender by itself won't do the trick), and we want
+! TrueType fonts because, well, they scale better, and XTerm lets them
+! fall back on alternatives (hi there ttf-unifont) when a Unicode
+! glyph is not found
+XTerm*faceName: mono
+
+! white on black
+XTerm*reverseVideo: on
+
+! blink screen instead of sound
+XTerm*visualBell: on
+
+! proper ALT as META key treatment
+XTerm*eightBitInput: false
+
+! font sizes
+XTerm*faceSize: 8
+XTerm*faceSize1: 4
+XTerm*faceSize2: 5
+XTerm*faceSize3: 6
+XTerm*faceSize4: 8
+XTerm*faceSize5: 14
+XTerm*faceSize6: 25
+
+! colors
+! black
+XTerm*color0: #202020
+XTerm*color8: #3F3F3F
+! red
+XTerm*color1: #A82020
+XTerm*color9: #E82020
+! green
+XTerm*color2: #20A820
+XTerm*color10: #20E820
+! yellow
+XTerm*color3: #A8A820
+XTerm*color11: #E8E820
+! blue
+XTerm*color4: #3F3FFF
+XTerm*color12: #9F9FFF
+! magenta
+XTerm*color5: #A83FFF
+XTerm*color13: #E89FFF
+! cyan
+XTerm*color6: #3FA8FF
+XTerm*color14: #9FE8FF
+! white
+XTerm*color7: #A8A8A8
+XTerm*color15: #E8E8E8
diff --git a/buster/home_files/user/.borgrepos b/buster/home_files/user/.borgrepos
new file mode 100644 (file)
index 0000000..423e430
--- /dev/null
@@ -0,0 +1,4 @@
+plom@plomlompom.com
+plom@core.plomlompom.com
+plom@play.plomlompom.com
+# file read ends at last newline
diff --git a/buster/home_files/user/.config/i3/config b/buster/home_files/user/.config/i3/config
new file mode 100644 (file)
index 0000000..19c654e
--- /dev/null
@@ -0,0 +1,83 @@
+# plomlompom's i3-wm configuration
+
+# Font for i3 text
+font pango:Terminus 8px
+
+# Force "tabbed" as default layout for new windows.
+workspace_layout              tabbed
+
+# Make the Windows key the modifier key for all i3-wm actions.
+set                           $mod Mod4
+floating_modifier             $mod
+
+# Launch xterm.
+bindsym $mod+Return           exec xterm
+
+# Launch programs via dmenu.
+bindsym $mod+d                exec dmenu_run
+bindsym $mod+x                exec dmenu_run
+
+# Kill window.
+bindsym $mod+Shift+Q          kill
+
+# Move focus between windows.
+bindsym $mod+Left             focus left
+bindsym $mod+Down             focus down
+bindsym $mod+Up               focus up
+bindsym $mod+Right            focus right
+
+# Don't move focus with mouse.
+focus_follows_mouse           no
+
+# Move windows.
+bindsym $mod+Shift+Left       move left
+bindsym $mod+Shift+Down       move down
+bindsym $mod+Shift+Up         move up
+bindsym $mod+Shift+Right      move right
+
+# Resize windows
+bindsym $mod+h                resize shrink width 1 px or 1 ppt
+bindsym $mod+l                resize grow width 1 px or 1 ppt
+bindsym $mod+j                resize shrink height
+bindsym $mod+k                resize grow height
+
+# Toggle fullscreen for focused window.
+bindsym $mod+f                fullscreen
+
+# Toggle floating of window, focus on floating or tabbed windows.
+bindsym $mod+Shift+space      floating toggle
+bindsym $mod+space            focus mode_toggle
+
+# Switch to workspace x.
+bindsym $mod+1                workspace 1
+bindsym $mod+2                workspace 2
+bindsym $mod+3                workspace 3
+bindsym $mod+4                workspace 4
+bindsym $mod+5                workspace 5
+bindsym $mod+6                workspace 6
+bindsym $mod+7                workspace 7
+bindsym $mod+8                workspace 8
+bindsym $mod+9                workspace 9
+bindsym $mod+0                workspace 10
+
+# Move window to workspace x.
+bindsym $mod+Shift+exclam     move workspace 1
+bindsym $mod+Shift+quotedbl   move workspace 2
+bindsym $mod+Shift+section    move workspace 3
+bindsym $mod+Shift+dollar     move workspace 4
+bindsym $mod+Shift+percent    move workspace 5
+bindsym $mod+Shift+ampersand  move workspace 6
+bindsym $mod+Shift+slash      move workspace 7
+bindsym $mod+Shift+parenleft  move workspace 8
+bindsym $mod+Shift+parenright move workspace 9
+bindsym $mod+Shift+equal      move workspace 10
+
+# Reload i3 config file, restart (keeping sesion) i3, exit i3.
+bindsym $mod+Shift+C          reload
+bindsym $mod+Shift+R          restart
+bindsym $mod+Shift+P          exit
+
+# Select "i3status" as i3 status bar.
+bar {
+  status_command i3status
+}
diff --git a/buster/home_files/user/.emacs.d/init.el b/buster/home_files/user/.emacs.d/init.el
new file mode 100644 (file)
index 0000000..31a4dcb
--- /dev/null
@@ -0,0 +1,289 @@
+;; general layout
+;; ==============
+
+;; need no stinkin emacs help screen as start up, and no menu bar
+(setq inhibit-startup-screen t)
+(menu-bar-mode -1)
+
+;; highlight cursor line, parentheses
+(global-hl-line-mode 1)
+(show-paren-mode 1)
+
+;; show line numbers, use separator space
+(global-linum-mode)
+(setq linum-format "%d ")
+
+;; count cursor column, row in mode line
+(setq column-number-mode t)
+
+;; settings to make GUI tolerable
+(if window-system
+  (progn
+    (add-to-list 'default-frame-alist '(foreground-color . "white"))
+    (add-to-list 'default-frame-alist '(background-color . "black"))
+    (set-face-attribute 'default nil :height 80)
+    (scroll-bar-mode -1)
+    (setq visible-bell t)
+    (setq linum-format "%d")))
+
+;; use as default browser what XDG offers
+(setq-default browse-url-browser-function 'browse-url-xdg-open)
+
+;; general keybindings
+;; ===================
+
+;; create and use a minimal global map using just the self-insert command
+;; bindings and a selection of some to me very common keystrokes
+(setq minimal-map (make-sparse-keymap))
+(substitute-key-definition 'self-insert-command 'self-insert-command
+                           minimal-map global-map)
+(use-global-map minimal-map)
+(global-set-key (kbd "DEL") 'backward-delete-char-untabify)
+(global-set-key (kbd "RET") 'newline)
+(global-set-key (kbd "TAB") 'indent-for-tab-command)
+(global-set-key (kbd "<up>") 'previous-line)
+(global-set-key (kbd "<down>") 'next-line)
+(global-set-key (kbd "<left>") 'left-char)
+(global-set-key (kbd "<right>") 'right-char)
+(global-set-key (kbd "<prior>") 'scroll-down-command)
+(global-set-key (kbd "<next>") 'scroll-up-command)
+(global-set-key (kbd "M-x") 'execute-extended-command)
+(global-set-key (kbd "C-g") 'keyboard-quit)
+;(global-set-key (kbd "<f3>") 'kmacro-start-macro-or-insert-counter)
+;(global-set-key (kbd "<f4>") 'kmacro-end-or-call-macro)
+;; note how to switch back to the original map: (use-global-map global-map)
+(setq shr-map (make-sparse-keymap))  ; got annoying in elfeed-show on URLs
+
+
+;; minibuffer
+;; ==========
+
+;; incremental minibuffer completion
+(icomplete-mode 1)
+
+
+
+;; text editing
+;; ============
+
+;; tabs are evil
+(setq-default indent-tabs-mode nil)
+(setq-default tab-width 4)
+(setq indent-line-function 'insert-tab)
+
+;; show trailing whitespace
+(setq-default show-trailing-whitespace 1)
+
+;; on save, ask whether to ensure text file's last line ends in a
+;; newline character
+(setq require-final-newline 1)
+
+;; use dedicated directory for version-controlled, endless backups;
+;; never delete old versions
+(setq make-backup-files t
+      backup-directory-alist `(("." . "~/.emacs_backups"))
+      backup-by-copying t
+      version-control t
+      delete-old-versions 1)  ;; neither t nor nil: never delete
+
+
+
+;; package management
+;; ==================
+
+;; where we get packages from
+(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
+                         ("melpa-unstable" . "https://melpa.org/packages/")
+                         ("melpa-stable" . "https://stable.melpa.org/packages/")))
+
+;; ensure certain packages are installed (actually, we use Debian repos here)
+;; credit to <https://stackoverflow.com/a/10093312>
+;(setq package-list '(elfeed ledger-mode))
+;(package-initialize)
+;(dolist (package package-list)
+;  (unless (package-installed-p package)
+;    (package-install package)))
+
+
+
+;;; window management
+;;; =================
+;
+;;; track window configurations to allow window config undo
+;(winner-mode 1)
+
+
+
+;; mail setup
+;; ==========
+
+(setq send-mail-function 'smtpmail-send-it)
+(setq smtpmail-smtp-server "core.plomlompom.com")
+(setq smtpmail-smtp-service 465)
+(setq smtpmail-stream-type 'ssl)
+(setq smtpmail-smtp-user "plom")
+(setq mml-secure-openpgp-encrypt-to-self t)
+(add-hook 'message-setup-hook 'mml-secure-sign-pgpmime)
+
+;; constructs From: domain if mail composer directly called (from without
+;; notmuch), but we don't actually intend to do that
+;(setq mail-host-address "plomlompom.com")
+
+;; otherwise notmuch becomes extremely slow in some cases
+(setq-default notmuch-show-indent-content nil)
+
+;; this only works if we use notmuch-mua-send instead of message-send
+(setq notmuch-fcc-dirs '(("plom@plomlompom.com" . "maildir/Sent")))
+
+;; this gets rid of "i-did-not-set--mail-host-address--so-tickle-me"
+;; in the message ID
+(setq mail-host-address "plomlompom.com")
+
+;; org mode
+;; ========
+
+;; unsure why, but to re-set the key map, we not only have to explicitely do it
+;; only after org-mode loading, but also have to explicitely overwrite the
+;; C-c keybinding; TODO: investigate
+(with-eval-after-load 'org
+    (setq org-mode-map (make-sparse-keymap))
+    (define-key org-mode-map (kbd "C-c") nil)
+    (define-key org-mode-map (kbd "TAB") 'org-cycle)
+    (define-key org-mode-map (kbd "<backtab>") 'org-shifttab))
+
+;; basic org-capture config
+(setq org-capture-templates
+      '(("x" "test" plain (file "~/org/notes.org") "%T: %?")))
+(add-hook 'org-capture-mode-hook 'evil-insert-state)
+
+;; agenda view on startup
+(load-library "find-lisp")
+(setq org-agenda-files (find-lisp-find-files "~/org" "\.org$"))
+(setq org-agenda-span 90)
+(setq org-agenda-use-time-grid nil)
+(add-hook 'emacs-startup-hook (lambda ()
+                                 (org-agenda-list)
+                                 (switch-to-buffer "*Org Agenda*")
+                                 (other-window 1)))
+
+;;; for calendar, use ISO date style
+;(setq calendar-date-style 'iso)
+;(setq diary-number-of-entries 7)
+;(diary)
+;(setq org-agenda-time-grid '((today require-timed remove-match)
+;                             #("----------------" 0 16 (org-heading t))
+;                             (0 200 400 600 800 1000 1200
+;                                1400 1600 1800 2000 2200)))
+
+;; empty org-agenda-mode keybindings
+(add-hook 'org-agenda-mode-hook
+          (lambda ()
+            (setq org-agenda-mode-map (make-sparse-keymap))))
+(add-hook 'org-agenda-mode-hook
+          (lambda ()
+            (use-local-map (make-sparse-keymap))))
+
+;; org-publish-all
+(setq org-publish-project-alist
+      '(
+        ("website"
+         :base-directory "~/org/web/"
+         :base-extension "org"
+         :publishing-directory "~/html/"
+         :recursive t
+         :publishing-function org-html-publish-to-html
+         :headline-levels 4             ; Just the default for this project.
+         :auto-preamble t
+          )))
+
+;; use [ki:] syntax to hide stuff from exports
+(defun classify-information (text backend info)
+  "Replaces '[ki:WHATEVER]' with '[klassifizierte Information]'."
+  (replace-regexp-in-string "\\[ki:[^\]]*\]" "[klassifizierte Information]" text))
+(add-hook 'org-export-filter-plain-text-functions 'classify-information)
+
+;; add HTML validator link to exports
+(setq org-html-validation-link "<a href=\"https://validator.w3.org/check?uri=referer\">Validate</a>")
+
+
+
+;;; plomvi mode
+;;; ===========
+(load "~/public_repos/plomvi.el/plomvi.el")
+(global-set-key (kbd "C-c") 'plomvi-activate)
+(plomvi-global-mode 1)
+
+
+
+;;; Info mode
+;;; =========
+
+(setq Info-mode-map (make-sparse-keymap))
+(define-key Info-mode-map (kbd "RET") 'Info-follow-nearest-node)
+(define-key Info-mode-map (kbd "u") 'Info-up)
+(define-key Info-mode-map (kbd "TAB") 'Info-next-reference)
+(define-key Info-mode-map (kbd "<backtab>") 'Info-prev-reference)
+(define-key Info-mode-map (kbd "H") 'Info-history-back)
+(define-key Info-mode-map (kbd "L") 'Info-history-forward)
+(define-key Info-mode-map (kbd "I") 'Info-goto-node)
+(define-key Info-mode-map (kbd "i") 'Info-index)
+
+;; help mode
+;; =========
+
+(setq help-mode-map (make-sparse-keymap))
+(define-key help-mode-map (kbd "TAB") 'forward-button)
+(define-key help-mode-map (kbd "RET") 'help-follow)
+(define-key help-mode-map (kbd "<backtab>") 'backward-button)
+
+;; elfeed
+;; ======
+
+(require 'elfeed)  ; needed so we can set the font faces
+(set-face-background 'elfeed-search-title-face "magenta")
+(set-face-background 'elfeed-search-unread-count-face "magenta")
+(setq elfeed-feeds
+      '("https://capsurvival.blogspot.com/feeds/posts/default"
+        "https://jungle.world/rss.xml"
+        "http://news.dieweltistgarnichtso.net/bin/index.xml"
+        "https://taz.de/!s=&ExportStatus=Intern&SuchRahmen=Online;rss/"
+        "http://www.tagesschau.de/xml/atom"))
+(setq elfeed-search-mode-map (make-sparse-keymap))
+(define-key elfeed-search-mode-map (kbd "RET") 'elfeed-search-show-entry)
+(defun elfeed-search-mark-as-read() (interactive)
+  (elfeed-search-untag-all 'unread))
+(define-key elfeed-search-mode-map (kbd "r") 'elfeed-search-mark-as-read)
+(define-key elfeed-search-mode-map (kbd "R") 'elfeed-search-tag-all-unread)
+(define-key elfeed-search-mode-map (kbd "f") 'elfeed-search-live-filter)
+(define-key elfeed-search-mode-map (kbd "u") 'elfeed-update)
+(setq elfeed-show-mode-map (make-sparse-keymap))
+(define-key elfeed-show-mode-map (kbd "u") 'elfeed)
+(define-key elfeed-show-mode-map (kbd "TAB") 'shr-next-link)
+(define-key elfeed-show-mode-map (kbd "<backtab>") 'shr-previous-link)
+(define-key elfeed-show-mode-map (kbd "a") 'elfeed-show-prev)
+(define-key elfeed-show-mode-map (kbd "d") 'elfeed-show-next)
+(define-key elfeed-show-mode-map (kbd "y") 'shr-copy-url)
+(define-key elfeed-show-mode-map (kbd "RET") 'shr-browse-url)
+
+;; eww
+;; ===
+
+(setq eww-mode-map (make-sparse-keymap))
+(define-key eww-mode-map (kbd "TAB") 'shr-next-link)
+(define-key eww-mode-map (kbd "<backtab>") 'shr-previous-link)
+(define-key eww-mode-map (kbd "H") 'eww-back-url)
+(define-key eww-mode-map (kbd "L") 'eww-forward-url)
+
+;; ledger
+;; ======
+(setq ledger-mode-map (make-sparse-keymap))
+(define-key ledger-mode-map (kbd "TAB") 'ledger-magic-tab)
+
+
+;; unset other maps so they don't disturb C-c keybinding
+;; =====================================================
+;; TODO: saner solution would be a default-activated minor mode that binds
+;; C-c
+(setq conf-mode-map (make-sparse-keymap))
+(setq sh-mode-map (make-sparse-keymap))
+(setq python-mode-map (make-sparse-keymap))
diff --git a/buster/home_files/user/.mbsyncrc b/buster/home_files/user/.mbsyncrc
new file mode 100644 (file)
index 0000000..41c9dd4
--- /dev/null
@@ -0,0 +1,28 @@
+IMAPAccount plom
+# Address to connect to
+Host core.plomlompom.com
+User plom
+# For some reason, mbsync doesn't accept a PassCmd output beyond 79 chars,
+# therefore the pw in ~/.authinfo should not be longer than that.
+PassCmd "cat ~/.authinfo | cut -d' ' -f8-"
+SSLType IMAPS
+AuthMechs LOGIN
+
+IMAPStore core-remote
+Account plom
+
+MaildirStore core-local
+# The trailing "/" is important
+Path ~/mail/maildir/
+Inbox ~/mail/inbox/
+
+Channel core
+Master :core-remote:
+Slave :core-local:
+Patterns *
+# Automatically create missing mailboxes, both locally and on the server
+Create Both
+# Save the synchronization state files in the relevant directory
+SyncState *
+# If a mail is marked T ("Trashed") or deleted, remove it for real everywhere
+Expunge Both
diff --git a/buster/home_files/user/.notmuch-config b/buster/home_files/user/.notmuch-config
new file mode 100644 (file)
index 0000000..9532761
--- /dev/null
@@ -0,0 +1,9 @@
+[database]
+path=/home/plom/mail
+[search]
+exclude_tags=deleted;spam;
+# the fields below set the From: if the mail composer is called from
+# within notmuch
+[user]
+name=Christian Heller
+primary_email=plom@plomlompom.com
diff --git a/buster/home_files/user/.shell_prompt_color b/buster/home_files/user/.shell_prompt_color
new file mode 100644 (file)
index 0000000..0cfbf08
--- /dev/null
@@ -0,0 +1 @@
+2
diff --git a/buster/home_files/user/.tridactylrc b/buster/home_files/user/.tridactylrc
new file mode 100644 (file)
index 0000000..c46948a
--- /dev/null
@@ -0,0 +1,2 @@
+guiset statuspanel top-left
+set newtab file:///opt/firefox/blank.html
diff --git a/buster/home_files/user/.xinitrc b/buster/home_files/user/.xinitrc
new file mode 100644 (file)
index 0000000..250fd77
--- /dev/null
@@ -0,0 +1,13 @@
+# X init configuration
+
+# Set keymap.
+setxkbmap de
+
+# Load xterm settings
+xrdb -merge ~/.Xresources
+
+# Redshift to Berlin, Germany.
+redshift -rl 53:13 &
+
+# Launch window manager.
+i3
diff --git a/buster/home_files/user/mail_sync.sh b/buster/home_files/user/mail_sync.sh
new file mode 100755 (executable)
index 0000000..0837390
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+set -e
+
+# Ensure all "dir:*"-tagged mails are in proper directories,
+# remove all "dir:*" tags.
+basedir="/home/plom/mail/maildir/"
+for tag in $(notmuch search --output=tags '*'); do
+    if [ ! $(echo "${tag}" | cut -c-4) = "dir:" ]; then
+        continue
+    fi
+    target_dir="${basedir}"$(echo "${tag}" | cut -c5-)"/cur/"
+    for f in $(notmuch search --output=files tag:"${tag}"); do
+         new_name=$(basename "${f}" | sed -e 's/,U=[0-9]*//')
+         target_path="${target_dir}${new_name}"
+         if [ ! "${target_path}" = "${f}" ]; then
+             echo "Moving ${f} to ${target_path}."
+             mv "${f}" "${target_path}"
+         fi
+    done
+    notmuch tag -"${tag}" tag:"${tag}"
+done
+
+# Remove all "deleted"-tagged files from maildirs.
+notmuch search --output=files tag:deleted | while read f; do
+    echo "Deleting ${f}"
+    rm "${f}"
+done
+
+# Sync changes back to server and update notmuch index.
+mbsync -a
+notmuch new
diff --git a/buster/home_files/user/public_repos/repos b/buster/home_files/user/public_repos/repos
new file mode 100644 (file)
index 0000000..27eb028
--- /dev/null
@@ -0,0 +1,7 @@
+# List of repos we want cloned in ~/public_repos
+config
+pingmail.git
+plomlombot-irc.git
+plomrogue
+plomrogue2-experiments
+plomvi.el
diff --git a/buster/home_files/user_eeepc/.Xresources b/buster/home_files/user_eeepc/.Xresources
deleted file mode 100644 (file)
index 45b10af..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-! otherwise various applications will assume merely 8 colors
-XTerm.termName: xterm-256color
-
-! font
-! actually, "mono" is already the default for faceName (it will
-! pick whatever fc-match mono delivers), but we need to set _some_
-! faceName to trigger XTerm activating TrueType fonts
-! (XTerm*fontRender by itself won't do the trick), and we want
-! TrueType fonts because, well, they scale better, and XTerm lets them
-! fall back on alternatives (hi there ttf-unifont) when a Unicode
-! glyph is not found
-XTerm*faceName: mono
-
-! white on black
-XTerm*reverseVideo: on
-
-! blink screen instead of sound
-XTerm*visualBell: on
-
-! proper ALT as META key treatment
-XTerm*eightBitInput: false
-
-! font sizes
-XTerm*faceSize: 8
-XTerm*faceSize1: 4
-XTerm*faceSize2: 5
-XTerm*faceSize3: 6
-XTerm*faceSize4: 8
-XTerm*faceSize5: 14
-XTerm*faceSize6: 25
-
-! colors
-! black
-XTerm*color0: #202020
-XTerm*color8: #3F3F3F
-! red
-XTerm*color1: #A82020
-XTerm*color9: #E82020
-! green
-XTerm*color2: #20A820
-XTerm*color10: #20E820
-! yellow
-XTerm*color3: #A8A820
-XTerm*color11: #E8E820
-! blue
-XTerm*color4: #3F3FFF
-XTerm*color12: #9F9FFF
-! magenta
-XTerm*color5: #A83FFF
-XTerm*color13: #E89FFF
-! cyan
-XTerm*color6: #3FA8FF
-XTerm*color14: #9FE8FF
-! white
-XTerm*color7: #A8A8A8
-XTerm*color15: #E8E8E8
diff --git a/buster/home_files/user_eeepc/.borgrepos b/buster/home_files/user_eeepc/.borgrepos
deleted file mode 100644 (file)
index 423e430..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-plom@plomlompom.com
-plom@core.plomlompom.com
-plom@play.plomlompom.com
-# file read ends at last newline
diff --git a/buster/home_files/user_eeepc/.config/i3/config b/buster/home_files/user_eeepc/.config/i3/config
deleted file mode 100644 (file)
index 19c654e..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-# plomlompom's i3-wm configuration
-
-# Font for i3 text
-font pango:Terminus 8px
-
-# Force "tabbed" as default layout for new windows.
-workspace_layout              tabbed
-
-# Make the Windows key the modifier key for all i3-wm actions.
-set                           $mod Mod4
-floating_modifier             $mod
-
-# Launch xterm.
-bindsym $mod+Return           exec xterm
-
-# Launch programs via dmenu.
-bindsym $mod+d                exec dmenu_run
-bindsym $mod+x                exec dmenu_run
-
-# Kill window.
-bindsym $mod+Shift+Q          kill
-
-# Move focus between windows.
-bindsym $mod+Left             focus left
-bindsym $mod+Down             focus down
-bindsym $mod+Up               focus up
-bindsym $mod+Right            focus right
-
-# Don't move focus with mouse.
-focus_follows_mouse           no
-
-# Move windows.
-bindsym $mod+Shift+Left       move left
-bindsym $mod+Shift+Down       move down
-bindsym $mod+Shift+Up         move up
-bindsym $mod+Shift+Right      move right
-
-# Resize windows
-bindsym $mod+h                resize shrink width 1 px or 1 ppt
-bindsym $mod+l                resize grow width 1 px or 1 ppt
-bindsym $mod+j                resize shrink height
-bindsym $mod+k                resize grow height
-
-# Toggle fullscreen for focused window.
-bindsym $mod+f                fullscreen
-
-# Toggle floating of window, focus on floating or tabbed windows.
-bindsym $mod+Shift+space      floating toggle
-bindsym $mod+space            focus mode_toggle
-
-# Switch to workspace x.
-bindsym $mod+1                workspace 1
-bindsym $mod+2                workspace 2
-bindsym $mod+3                workspace 3
-bindsym $mod+4                workspace 4
-bindsym $mod+5                workspace 5
-bindsym $mod+6                workspace 6
-bindsym $mod+7                workspace 7
-bindsym $mod+8                workspace 8
-bindsym $mod+9                workspace 9
-bindsym $mod+0                workspace 10
-
-# Move window to workspace x.
-bindsym $mod+Shift+exclam     move workspace 1
-bindsym $mod+Shift+quotedbl   move workspace 2
-bindsym $mod+Shift+section    move workspace 3
-bindsym $mod+Shift+dollar     move workspace 4
-bindsym $mod+Shift+percent    move workspace 5
-bindsym $mod+Shift+ampersand  move workspace 6
-bindsym $mod+Shift+slash      move workspace 7
-bindsym $mod+Shift+parenleft  move workspace 8
-bindsym $mod+Shift+parenright move workspace 9
-bindsym $mod+Shift+equal      move workspace 10
-
-# Reload i3 config file, restart (keeping sesion) i3, exit i3.
-bindsym $mod+Shift+C          reload
-bindsym $mod+Shift+R          restart
-bindsym $mod+Shift+P          exit
-
-# Select "i3status" as i3 status bar.
-bar {
-  status_command i3status
-}
diff --git a/buster/home_files/user_eeepc/.config/i3status/config b/buster/home_files/user_eeepc/.config/i3status/config
deleted file mode 100644 (file)
index 0acc8c9..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-# plomlompom's i3 status bar configuration
-
-# Activate colors; set update interval of one second.
-general {
-  colors = true
-  interval = 1
-}
-
-# Selection / order of status elements.
-order += "disk /"
-order += "wireless wlp2s0"
-order += "ethernet enp1s0"
-order += "battery 0"
-order += "cpu_usage"
-order += "load"
-order += "cpu_temperature 0"
-order += "time"
-order += "volume master"
-
-# How much space is left in / ?
-disk "/" {
-  format = "/: %avail available of %total"
-  separator_block_width = 25
-}
-
-# WLAN status: show IP and connection quality or "down".
-wireless wlp2s0 {
-  format_up = "w: (%quality at %essid) %ip"
-  format_down = "w: down"
-  separator_block_width = 10
-}
-
-# Ethernet status: show IP or "down".
-ethernet enp1s0 {
-  format_up = "e: %ip"
-  format_down = "e: down"
-  separator_block_width = 25
-}
-
-# Battery status: show FULL/CHARGING/BATTERY, storage, time left.
-battery 0 {
-  format = "b: %status %percentage %remaining"
-  separator_block_width = 25
-}
-
-# Show CPU usage.
-cpu_usage {
-  format = "cpu: %usage"
-  separator_block_width = 10
-}
-
-# Show system load during last 1/5/15 minutes.
-load {
-  format = "%1min %5min %15min"
-  separator_block_width = 25
-}
-
-# Show CPU temperature in degrees of celsius.
-cpu_temperature 0 {
-  format = "%degrees °C"
-  separator_block_width = 25
-}
-
-# Show date/time/timezone as "year-month-day hour:minute:second
-# timezone_numeric/timezone_alphabetic".
-time {
-  format = "%Y-%m-%d %H:%M:%S %z/%Z"
-  separator_block_width = 25
-}
-
-volume master {
-  format = "♪: %volume"
-  format_muted = "♪: muted (%volume)"
-  separator_block_width = 25
-}
diff --git a/buster/home_files/user_eeepc/.emacs.d/init.el b/buster/home_files/user_eeepc/.emacs.d/init.el
deleted file mode 100644 (file)
index 31a4dcb..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-;; general layout
-;; ==============
-
-;; need no stinkin emacs help screen as start up, and no menu bar
-(setq inhibit-startup-screen t)
-(menu-bar-mode -1)
-
-;; highlight cursor line, parentheses
-(global-hl-line-mode 1)
-(show-paren-mode 1)
-
-;; show line numbers, use separator space
-(global-linum-mode)
-(setq linum-format "%d ")
-
-;; count cursor column, row in mode line
-(setq column-number-mode t)
-
-;; settings to make GUI tolerable
-(if window-system
-  (progn
-    (add-to-list 'default-frame-alist '(foreground-color . "white"))
-    (add-to-list 'default-frame-alist '(background-color . "black"))
-    (set-face-attribute 'default nil :height 80)
-    (scroll-bar-mode -1)
-    (setq visible-bell t)
-    (setq linum-format "%d")))
-
-;; use as default browser what XDG offers
-(setq-default browse-url-browser-function 'browse-url-xdg-open)
-
-;; general keybindings
-;; ===================
-
-;; create and use a minimal global map using just the self-insert command
-;; bindings and a selection of some to me very common keystrokes
-(setq minimal-map (make-sparse-keymap))
-(substitute-key-definition 'self-insert-command 'self-insert-command
-                           minimal-map global-map)
-(use-global-map minimal-map)
-(global-set-key (kbd "DEL") 'backward-delete-char-untabify)
-(global-set-key (kbd "RET") 'newline)
-(global-set-key (kbd "TAB") 'indent-for-tab-command)
-(global-set-key (kbd "<up>") 'previous-line)
-(global-set-key (kbd "<down>") 'next-line)
-(global-set-key (kbd "<left>") 'left-char)
-(global-set-key (kbd "<right>") 'right-char)
-(global-set-key (kbd "<prior>") 'scroll-down-command)
-(global-set-key (kbd "<next>") 'scroll-up-command)
-(global-set-key (kbd "M-x") 'execute-extended-command)
-(global-set-key (kbd "C-g") 'keyboard-quit)
-;(global-set-key (kbd "<f3>") 'kmacro-start-macro-or-insert-counter)
-;(global-set-key (kbd "<f4>") 'kmacro-end-or-call-macro)
-;; note how to switch back to the original map: (use-global-map global-map)
-(setq shr-map (make-sparse-keymap))  ; got annoying in elfeed-show on URLs
-
-
-;; minibuffer
-;; ==========
-
-;; incremental minibuffer completion
-(icomplete-mode 1)
-
-
-
-;; text editing
-;; ============
-
-;; tabs are evil
-(setq-default indent-tabs-mode nil)
-(setq-default tab-width 4)
-(setq indent-line-function 'insert-tab)
-
-;; show trailing whitespace
-(setq-default show-trailing-whitespace 1)
-
-;; on save, ask whether to ensure text file's last line ends in a
-;; newline character
-(setq require-final-newline 1)
-
-;; use dedicated directory for version-controlled, endless backups;
-;; never delete old versions
-(setq make-backup-files t
-      backup-directory-alist `(("." . "~/.emacs_backups"))
-      backup-by-copying t
-      version-control t
-      delete-old-versions 1)  ;; neither t nor nil: never delete
-
-
-
-;; package management
-;; ==================
-
-;; where we get packages from
-(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
-                         ("melpa-unstable" . "https://melpa.org/packages/")
-                         ("melpa-stable" . "https://stable.melpa.org/packages/")))
-
-;; ensure certain packages are installed (actually, we use Debian repos here)
-;; credit to <https://stackoverflow.com/a/10093312>
-;(setq package-list '(elfeed ledger-mode))
-;(package-initialize)
-;(dolist (package package-list)
-;  (unless (package-installed-p package)
-;    (package-install package)))
-
-
-
-;;; window management
-;;; =================
-;
-;;; track window configurations to allow window config undo
-;(winner-mode 1)
-
-
-
-;; mail setup
-;; ==========
-
-(setq send-mail-function 'smtpmail-send-it)
-(setq smtpmail-smtp-server "core.plomlompom.com")
-(setq smtpmail-smtp-service 465)
-(setq smtpmail-stream-type 'ssl)
-(setq smtpmail-smtp-user "plom")
-(setq mml-secure-openpgp-encrypt-to-self t)
-(add-hook 'message-setup-hook 'mml-secure-sign-pgpmime)
-
-;; constructs From: domain if mail composer directly called (from without
-;; notmuch), but we don't actually intend to do that
-;(setq mail-host-address "plomlompom.com")
-
-;; otherwise notmuch becomes extremely slow in some cases
-(setq-default notmuch-show-indent-content nil)
-
-;; this only works if we use notmuch-mua-send instead of message-send
-(setq notmuch-fcc-dirs '(("plom@plomlompom.com" . "maildir/Sent")))
-
-;; this gets rid of "i-did-not-set--mail-host-address--so-tickle-me"
-;; in the message ID
-(setq mail-host-address "plomlompom.com")
-
-;; org mode
-;; ========
-
-;; unsure why, but to re-set the key map, we not only have to explicitely do it
-;; only after org-mode loading, but also have to explicitely overwrite the
-;; C-c keybinding; TODO: investigate
-(with-eval-after-load 'org
-    (setq org-mode-map (make-sparse-keymap))
-    (define-key org-mode-map (kbd "C-c") nil)
-    (define-key org-mode-map (kbd "TAB") 'org-cycle)
-    (define-key org-mode-map (kbd "<backtab>") 'org-shifttab))
-
-;; basic org-capture config
-(setq org-capture-templates
-      '(("x" "test" plain (file "~/org/notes.org") "%T: %?")))
-(add-hook 'org-capture-mode-hook 'evil-insert-state)
-
-;; agenda view on startup
-(load-library "find-lisp")
-(setq org-agenda-files (find-lisp-find-files "~/org" "\.org$"))
-(setq org-agenda-span 90)
-(setq org-agenda-use-time-grid nil)
-(add-hook 'emacs-startup-hook (lambda ()
-                                 (org-agenda-list)
-                                 (switch-to-buffer "*Org Agenda*")
-                                 (other-window 1)))
-
-;;; for calendar, use ISO date style
-;(setq calendar-date-style 'iso)
-;(setq diary-number-of-entries 7)
-;(diary)
-;(setq org-agenda-time-grid '((today require-timed remove-match)
-;                             #("----------------" 0 16 (org-heading t))
-;                             (0 200 400 600 800 1000 1200
-;                                1400 1600 1800 2000 2200)))
-
-;; empty org-agenda-mode keybindings
-(add-hook 'org-agenda-mode-hook
-          (lambda ()
-            (setq org-agenda-mode-map (make-sparse-keymap))))
-(add-hook 'org-agenda-mode-hook
-          (lambda ()
-            (use-local-map (make-sparse-keymap))))
-
-;; org-publish-all
-(setq org-publish-project-alist
-      '(
-        ("website"
-         :base-directory "~/org/web/"
-         :base-extension "org"
-         :publishing-directory "~/html/"
-         :recursive t
-         :publishing-function org-html-publish-to-html
-         :headline-levels 4             ; Just the default for this project.
-         :auto-preamble t
-          )))
-
-;; use [ki:] syntax to hide stuff from exports
-(defun classify-information (text backend info)
-  "Replaces '[ki:WHATEVER]' with '[klassifizierte Information]'."
-  (replace-regexp-in-string "\\[ki:[^\]]*\]" "[klassifizierte Information]" text))
-(add-hook 'org-export-filter-plain-text-functions 'classify-information)
-
-;; add HTML validator link to exports
-(setq org-html-validation-link "<a href=\"https://validator.w3.org/check?uri=referer\">Validate</a>")
-
-
-
-;;; plomvi mode
-;;; ===========
-(load "~/public_repos/plomvi.el/plomvi.el")
-(global-set-key (kbd "C-c") 'plomvi-activate)
-(plomvi-global-mode 1)
-
-
-
-;;; Info mode
-;;; =========
-
-(setq Info-mode-map (make-sparse-keymap))
-(define-key Info-mode-map (kbd "RET") 'Info-follow-nearest-node)
-(define-key Info-mode-map (kbd "u") 'Info-up)
-(define-key Info-mode-map (kbd "TAB") 'Info-next-reference)
-(define-key Info-mode-map (kbd "<backtab>") 'Info-prev-reference)
-(define-key Info-mode-map (kbd "H") 'Info-history-back)
-(define-key Info-mode-map (kbd "L") 'Info-history-forward)
-(define-key Info-mode-map (kbd "I") 'Info-goto-node)
-(define-key Info-mode-map (kbd "i") 'Info-index)
-
-;; help mode
-;; =========
-
-(setq help-mode-map (make-sparse-keymap))
-(define-key help-mode-map (kbd "TAB") 'forward-button)
-(define-key help-mode-map (kbd "RET") 'help-follow)
-(define-key help-mode-map (kbd "<backtab>") 'backward-button)
-
-;; elfeed
-;; ======
-
-(require 'elfeed)  ; needed so we can set the font faces
-(set-face-background 'elfeed-search-title-face "magenta")
-(set-face-background 'elfeed-search-unread-count-face "magenta")
-(setq elfeed-feeds
-      '("https://capsurvival.blogspot.com/feeds/posts/default"
-        "https://jungle.world/rss.xml"
-        "http://news.dieweltistgarnichtso.net/bin/index.xml"
-        "https://taz.de/!s=&ExportStatus=Intern&SuchRahmen=Online;rss/"
-        "http://www.tagesschau.de/xml/atom"))
-(setq elfeed-search-mode-map (make-sparse-keymap))
-(define-key elfeed-search-mode-map (kbd "RET") 'elfeed-search-show-entry)
-(defun elfeed-search-mark-as-read() (interactive)
-  (elfeed-search-untag-all 'unread))
-(define-key elfeed-search-mode-map (kbd "r") 'elfeed-search-mark-as-read)
-(define-key elfeed-search-mode-map (kbd "R") 'elfeed-search-tag-all-unread)
-(define-key elfeed-search-mode-map (kbd "f") 'elfeed-search-live-filter)
-(define-key elfeed-search-mode-map (kbd "u") 'elfeed-update)
-(setq elfeed-show-mode-map (make-sparse-keymap))
-(define-key elfeed-show-mode-map (kbd "u") 'elfeed)
-(define-key elfeed-show-mode-map (kbd "TAB") 'shr-next-link)
-(define-key elfeed-show-mode-map (kbd "<backtab>") 'shr-previous-link)
-(define-key elfeed-show-mode-map (kbd "a") 'elfeed-show-prev)
-(define-key elfeed-show-mode-map (kbd "d") 'elfeed-show-next)
-(define-key elfeed-show-mode-map (kbd "y") 'shr-copy-url)
-(define-key elfeed-show-mode-map (kbd "RET") 'shr-browse-url)
-
-;; eww
-;; ===
-
-(setq eww-mode-map (make-sparse-keymap))
-(define-key eww-mode-map (kbd "TAB") 'shr-next-link)
-(define-key eww-mode-map (kbd "<backtab>") 'shr-previous-link)
-(define-key eww-mode-map (kbd "H") 'eww-back-url)
-(define-key eww-mode-map (kbd "L") 'eww-forward-url)
-
-;; ledger
-;; ======
-(setq ledger-mode-map (make-sparse-keymap))
-(define-key ledger-mode-map (kbd "TAB") 'ledger-magic-tab)
-
-
-;; unset other maps so they don't disturb C-c keybinding
-;; =====================================================
-;; TODO: saner solution would be a default-activated minor mode that binds
-;; C-c
-(setq conf-mode-map (make-sparse-keymap))
-(setq sh-mode-map (make-sparse-keymap))
-(setq python-mode-map (make-sparse-keymap))
diff --git a/buster/home_files/user_eeepc/.mbsyncrc b/buster/home_files/user_eeepc/.mbsyncrc
deleted file mode 100644 (file)
index 41c9dd4..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-IMAPAccount plom
-# Address to connect to
-Host core.plomlompom.com
-User plom
-# For some reason, mbsync doesn't accept a PassCmd output beyond 79 chars,
-# therefore the pw in ~/.authinfo should not be longer than that.
-PassCmd "cat ~/.authinfo | cut -d' ' -f8-"
-SSLType IMAPS
-AuthMechs LOGIN
-
-IMAPStore core-remote
-Account plom
-
-MaildirStore core-local
-# The trailing "/" is important
-Path ~/mail/maildir/
-Inbox ~/mail/inbox/
-
-Channel core
-Master :core-remote:
-Slave :core-local:
-Patterns *
-# Automatically create missing mailboxes, both locally and on the server
-Create Both
-# Save the synchronization state files in the relevant directory
-SyncState *
-# If a mail is marked T ("Trashed") or deleted, remove it for real everywhere
-Expunge Both
diff --git a/buster/home_files/user_eeepc/.notmuch-config b/buster/home_files/user_eeepc/.notmuch-config
deleted file mode 100644 (file)
index 9532761..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[database]
-path=/home/plom/mail
-[search]
-exclude_tags=deleted;spam;
-# the fields below set the From: if the mail composer is called from
-# within notmuch
-[user]
-name=Christian Heller
-primary_email=plom@plomlompom.com
diff --git a/buster/home_files/user_eeepc/.shell_prompt_color b/buster/home_files/user_eeepc/.shell_prompt_color
deleted file mode 100644 (file)
index 0cfbf08..0000000
+++ /dev/null
@@ -1 +0,0 @@
-2
diff --git a/buster/home_files/user_eeepc/.tridactylrc b/buster/home_files/user_eeepc/.tridactylrc
deleted file mode 100644 (file)
index 7c9e184..0000000
+++ /dev/null
@@ -1 +0,0 @@
-set newtab file:///opt/firefox/blank.html
diff --git a/buster/home_files/user_eeepc/.xinitrc b/buster/home_files/user_eeepc/.xinitrc
deleted file mode 100644 (file)
index 250fd77..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# X init configuration
-
-# Set keymap.
-setxkbmap de
-
-# Load xterm settings
-xrdb -merge ~/.Xresources
-
-# Redshift to Berlin, Germany.
-redshift -rl 53:13 &
-
-# Launch window manager.
-i3
diff --git a/buster/home_files/user_eeepc/mail_sync.sh b/buster/home_files/user_eeepc/mail_sync.sh
deleted file mode 100755 (executable)
index 0837390..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-set -e
-
-# Ensure all "dir:*"-tagged mails are in proper directories,
-# remove all "dir:*" tags.
-basedir="/home/plom/mail/maildir/"
-for tag in $(notmuch search --output=tags '*'); do
-    if [ ! $(echo "${tag}" | cut -c-4) = "dir:" ]; then
-        continue
-    fi
-    target_dir="${basedir}"$(echo "${tag}" | cut -c5-)"/cur/"
-    for f in $(notmuch search --output=files tag:"${tag}"); do
-         new_name=$(basename "${f}" | sed -e 's/,U=[0-9]*//')
-         target_path="${target_dir}${new_name}"
-         if [ ! "${target_path}" = "${f}" ]; then
-             echo "Moving ${f} to ${target_path}."
-             mv "${f}" "${target_path}"
-         fi
-    done
-    notmuch tag -"${tag}" tag:"${tag}"
-done
-
-# Remove all "deleted"-tagged files from maildirs.
-notmuch search --output=files tag:deleted | while read f; do
-    echo "Deleting ${f}"
-    rm "${f}"
-done
-
-# Sync changes back to server and update notmuch index.
-mbsync -a
-notmuch new
diff --git a/buster/home_files/user_eeepc/public_repos/repos b/buster/home_files/user_eeepc/public_repos/repos
deleted file mode 100644 (file)
index 27eb028..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# List of repos we want cloned in ~/public_repos
-config
-pingmail.git
-plomlombot-irc.git
-plomrogue
-plomrogue2-experiments
-plomvi.el
diff --git a/buster/home_files/x200s/.config/i3status/config b/buster/home_files/x200s/.config/i3status/config
new file mode 100644 (file)
index 0000000..0acc8c9
--- /dev/null
@@ -0,0 +1,75 @@
+# plomlompom's i3 status bar configuration
+
+# Activate colors; set update interval of one second.
+general {
+  colors = true
+  interval = 1
+}
+
+# Selection / order of status elements.
+order += "disk /"
+order += "wireless wlp2s0"
+order += "ethernet enp1s0"
+order += "battery 0"
+order += "cpu_usage"
+order += "load"
+order += "cpu_temperature 0"
+order += "time"
+order += "volume master"
+
+# How much space is left in / ?
+disk "/" {
+  format = "/: %avail available of %total"
+  separator_block_width = 25
+}
+
+# WLAN status: show IP and connection quality or "down".
+wireless wlp2s0 {
+  format_up = "w: (%quality at %essid) %ip"
+  format_down = "w: down"
+  separator_block_width = 10
+}
+
+# Ethernet status: show IP or "down".
+ethernet enp1s0 {
+  format_up = "e: %ip"
+  format_down = "e: down"
+  separator_block_width = 25
+}
+
+# Battery status: show FULL/CHARGING/BATTERY, storage, time left.
+battery 0 {
+  format = "b: %status %percentage %remaining"
+  separator_block_width = 25
+}
+
+# Show CPU usage.
+cpu_usage {
+  format = "cpu: %usage"
+  separator_block_width = 10
+}
+
+# Show system load during last 1/5/15 minutes.
+load {
+  format = "%1min %5min %15min"
+  separator_block_width = 25
+}
+
+# Show CPU temperature in degrees of celsius.
+cpu_temperature 0 {
+  format = "%degrees °C"
+  separator_block_width = 25
+}
+
+# Show date/time/timezone as "year-month-day hour:minute:second
+# timezone_numeric/timezone_alphabetic".
+time {
+  format = "%Y-%m-%d %H:%M:%S %z/%Z"
+  separator_block_width = 25
+}
+
+volume master {
+  format = "♪: %volume"
+  format_muted = "♪: muted (%volume)"
+  separator_block_width = 25
+}
diff --git a/buster/setup_scripts/setup_desktop.sh b/buster/setup_scripts/setup_desktop.sh
new file mode 100755 (executable)
index 0000000..b76fa56
--- /dev/null
@@ -0,0 +1,84 @@
+#!/bin/sh
+set -e
+
+if [ "$#" -ne 1 ]; then
+    echo 'Need exactly one argument (system name).'
+    false
+fi
+if [ ! "$1" = "eeepc" ] && [ ! "$1" = "x200s" ]; then
+    echo "Need legal system name."
+    false
+fi
+system_name="$1"
+
+# Set up system without user environment.
+config_tree_prefix="${HOME}/config/buster"
+setup_scripts_dir="${config_tree_prefix}/setup_scripts"
+cd "${setup_scripts_dir}"
+./setup.sh "${system_name}" ""
+./copy_dirtree.sh "${config_tree_prefix}/etc_files" "" user "${system_name}"
+./install_for_target.sh user "${system_name}"
+
+# Install Firefox directly from Mozilla.
+firefox_release="68.0esr"
+firefox_filename="firefox-${firefox_release}.tar.bz2"
+url_firefox="https://ftp.mozilla.org/pub/firefox/releases/${firefox_release}/linux-x86_64/en-US/${firefox_filename}"
+wget "${url_firefox}"
+mv "${firefox_filename}" /opt/
+cd /opt/
+tar xf "${firefox_filename}"
+rm "${firefox_filename}"
+ln -s /opt/firefox/firefox /usr/local/bin/
+update-alternatives --install /usr/bin/x-www-browser x-www-browser /opt/firefox/firefox 200
+update-alternatives --set x-www-browser /opt/firefox/firefox
+
+# Install Firefox plugins.
+# See <https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Distribution_options/Sideloading_add-ons>
+extensions_dir="/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/"
+mkdir -p "${extensions_dir}"
+umatrix_xpi="uMatrix.firefox.signed.xpi"
+url_umatrix="https://github.com/gorhill/uMatrix/releases/download/1.3.17rc4/${umatrix_xpi}"
+wget "${url_umatrix}"
+name=$(unzip -p "${umatrix_xpi}" manifest.json | jq -r .applications.gecko.id)
+mv "${umatrix_xpi}" "${name}".xpi
+#noscript_xpi="noscript-11.0.2.xpi"
+#url_noscript="https://secure.informaction.com/download/releases/${noscript_xpi}"
+#wget "${url_noscript}"
+#name=$(unzip -p "${noscript_xpi}" manifest.json | jq -r .applications.gecko.id)
+#mv "${noscript_xpi}" "${name}.xpi"
+tridactyl_xpi="tridactyl-latest.xpi"
+url_tridactyl="https://tridactyl.cmcaine.co.uk/betas/${tridactyl_xpi}"
+wget "${url_tridactyl}"
+name=$(unzip -p "${tridactyl_xpi}" manifest.json | jq -r .applications.gecko.id)
+mv "${tridactyl_xpi}" "${name}.xpi"
+mv *.xpi "${extensions_dir}"
+
+# Set up user environments.
+secrets_dev="sdb"
+source_dir_secrets="/media/${secrets_dev}/to_usb"
+target_dir_secrets="/home/plom/tmp_secrets"
+cd "${setup_scripts_dir}"
+./copy_dirtree.sh "${config_tree_prefix}/home_files" "/root" minimal root
+HOME_DIR_EXISTS=$([ ! -d "/home/plom" ]; echo $?)
+adduser --disabled-password --gecos "" plom
+usermod -a -G sudo plom
+passwd plom
+if [ "${HOME_DIR_EXISTS}" -eq 0 ]; then
+    echo "Put secrets drive into slot for /dev/${secrets_dev}."
+    while [ ! -e /dev/"${secrets_dev}" ]; do
+        sleep 1
+    done
+    stty -echo
+    printf "Secrets passphrase: "
+    read secrets_pass
+    stty echo
+    echo "" # newline so user knows their input return was accepted
+    echo "${secrets_pass}" | pmount /dev/"${secrets_dev}"
+    cp -a "${source_dir_secrets}" "${target_dir_secrets}"
+    chown -R plom:plom "${target_dir_secrets}"
+    pumount "${secrets_dev}"
+    echo "You can remove /dev/${secrets_dev} now."
+    cp setup_home.sh /home/plom
+    chown plom:plom /home/plom/setup_home_eeepc.sh
+    SECRETS_PASS="${secrets_pass}" su -c "cd && ./setup_home.sh ${system_name}" plom
+fi
diff --git a/buster/setup_scripts/setup_eeepc.sh b/buster/setup_scripts/setup_eeepc.sh
deleted file mode 100755 (executable)
index 997650a..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/bin/sh
-set -e
-
-if [ "$#" -ne 1 ]; then
-    echo 'Need exactly one argument (hostname).'
-    false
-fi
-hostname="$1"
-
-# Set up system without user environment.
-config_tree_prefix="${HOME}/config/buster"
-setup_scripts_dir="${config_tree_prefix}/setup_scripts"
-cd "${setup_scripts_dir}"
-./setup.sh "${hostname}" ""
-./copy_dirtree.sh "${config_tree_prefix}/etc_files" "" eeepc
-./install_for_target.sh eeepc
-
-# Install Firefox directly from Mozilla.
-firefox_release="68.0esr"
-firefox_filename="firefox-${firefox_release}.tar.bz2"
-url_firefox="https://ftp.mozilla.org/pub/firefox/releases/${firefox_release}/linux-x86_64/en-US/${firefox_filename}"
-wget "${url_firefox}"
-mv "${firefox_filename}" /opt/
-cd /opt/
-tar xf "${firefox_filename}"
-rm "${firefox_filename}"
-ln -s /opt/firefox/firefox /usr/local/bin/
-update-alternatives --install /usr/bin/x-www-browser x-www-browser /opt/firefox/firefox 200
-update-alternatives --set x-www-browser /opt/firefox/firefox
-
-# Install Firefox plugins.
-# See <https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Distribution_options/Sideloading_add-ons>
-extensions_dir="/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/"
-mkdir -p "${extensions_dir}"
-umatrix_xpi="uMatrix.firefox.signed.xpi"
-url_umatrix="https://github.com/gorhill/uMatrix/releases/download/1.3.17rc4/${umatrix_xpi}"
-wget "${url_umatrix}"
-name=$(unzip -p "${umatrix_xpi}" manifest.json | jq -r .applications.gecko.id)
-mv "${umatrix_xpi}" "${name}".xpi
-#noscript_xpi="noscript-11.0.2.xpi"
-#url_noscript="https://secure.informaction.com/download/releases/${noscript_xpi}"
-#wget "${url_noscript}"
-#name=$(unzip -p "${noscript_xpi}" manifest.json | jq -r .applications.gecko.id)
-#mv "${noscript_xpi}" "${name}.xpi"
-tridactyl_xpi="tridactyl-latest.xpi"
-url_tridactyl="https://tridactyl.cmcaine.co.uk/betas/${tridactyl_xpi}"
-wget "${url_tridactyl}"
-name=$(unzip -p "${tridactyl_xpi}" manifest.json | jq -r .applications.gecko.id)
-mv "${tridactyl_xpi}" "${name}.xpi"
-mv *.xpi "${extensions_dir}"
-
-# Set up user environments.
-secrets_dev="sdb"
-source_dir_secrets="/media/${secrets_dev}/to_usb"
-target_dir_secrets="/home/plom/tmp_secrets"
-cd "${setup_scripts_dir}"
-./copy_dirtree.sh "${config_tree_prefix}/home_files" "/root" minimal root
-HOME_DIR_EXISTS=$([ ! -d "/home/plom" ]; echo $?)
-adduser --disabled-password --gecos "" plom
-usermod -a -G sudo plom
-passwd plom
-if [ "${HOME_DIR_EXISTS}" -eq 0 ]; then
-    echo "Put secrets drive into slot for /dev/${secrets_dev}."
-    while [ ! -e /dev/"${secrets_dev}" ]; do
-        sleep 1
-    done
-    stty -echo
-    printf "Secrets passphrase: "
-    read secrets_pass
-    stty echo
-    echo "" # newline so user knows their input return was accepted
-    echo "${secrets_pass}" | pmount /dev/"${secrets_dev}"
-    cp -a "${source_dir_secrets}" "${target_dir_secrets}"
-    chown -R plom:plom "${target_dir_secrets}"
-    pumount "${secrets_dev}"
-    echo "You can remove /dev/${secrets_dev} now."
-    cp setup_home_eeepc.sh /home/plom
-    chown plom:plom /home/plom/setup_home_eeepc.sh
-    SECRETS_PASS="${secrets_pass}" su -c "cd && ./setup_home_eeepc.sh" plom
-fi
diff --git a/buster/setup_scripts/setup_home.sh b/buster/setup_scripts/setup_home.sh
new file mode 100755 (executable)
index 0000000..4a9303d
--- /dev/null
@@ -0,0 +1,95 @@
+#!/bin/sh
+set -e
+
+if [ "$#" -ne 1 ]; then
+    echo 'Need exactly one argument (system name).'
+    false
+fi
+if [ ! "$1" = "eeepc" ] && [ ! "$1" = "x200s" ]; then
+    echo "Need legal system name."
+    false
+fi
+system_name="$1"
+
+public_repos_dir="${HOME}/public_repos"
+config_tree_prefix="${public_repos_dir}/config"
+path_borgscript="${config_tree_prefix}/all_new_2018/borg.sh"
+config_tree_buster="${config_tree_prefix}/buster"
+setup_scripts_dir="${config_tree_buster}/setup_scripts"
+repos_list_file="${public_repos_dir}/repos"
+dir_secrets="${HOME}/tmp_secrets"
+borgkeys_dir=~/.config/borg/keys
+borgrepos_file=~/.borgrepos
+ssh_dir=~/.ssh
+authinfo_file=.authinfo
+maildir=~/mail/maildir
+
+ensure_repo() {
+    repo_name="${1}"
+    if [ ! -d "${public_repos_dir}/${repo_name}" ]; then
+        cd "${public_repos_dir}"
+        git clone https://plomlompom.com/repos/clone/${repo_name}
+    fi
+}
+
+# Clone config to copy dotfiles etc. from it.
+cd
+mkdir -p "${public_repos_dir}"
+ensure_repo config
+cd "${setup_scripts_dir}"
+./copy_dirtree.sh "${config_tree_buster}/home_files" "${HOME}" minimal user "${system_name}"
+
+# Set up native messenger for tridactyl.
+curl -fsSl https://raw.githubusercontent.com/tridactyl/tridactyl/78e662efefd1f4af2bdb2a53edecf03b535b997b/native/install.sh | bash
+
+# Set up non-public parts of infrastructure.
+cd "${dir_secrets}"
+mkdir -p "${ssh_dir}"
+echo "Setting up .ssh"
+cp id_rsa ~/.ssh
+stty -echo
+ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
+stty echo
+script -c 'gpg --import secret_keys.asc' /dev/null
+tar xf borg_keyfiles.tar
+mkdir -p "${borgkeys_dir}"
+mv borg_keyfiles/* "${borgkeys_dir}"
+# .authinfo may not be present on every secrets drive yet
+if [ -f "${authinfo_file}" ]; then
+    cp "${authinfo_file}" ~
+fi
+cd
+rm -rf "${dir_secrets}"
+
+# Sync org dir via borgbackup. For this we need the borgbackup servers
+# in our .ssh/known_hosts file.
+cat "${borgrepos_file}" | while read line; do
+    first_char=$(echo "${line}" | cut -c1)
+    if [ "${first_char}" = "#" ]; then
+        continue
+    fi
+    server=$(echo "${line}" | sed 's/.*@//')
+    ssh-keyscan "${server}" >> "${ssh_dir}"/known_hosts
+done
+BORG_PASSPHRASE="${SECRETS_PASS}" "${path_borgscript}" orgpull
+
+# Fill ~/public_repos.
+cat "${repos_list_file}" | while read line; do
+    first_char=$(echo "${line}" | cut -c1)
+    if [ "${first_char}" = "#" ]; then
+        continue
+    fi
+    ensure_repo "${line}"
+done
+
+# Set up e-mail system. Note that we only do mbsync if the imap pass file
+# is found. It may not be present on every secrets drive yet, so we have to
+# deal with the possibility of it being absent at this point.
+mkdir -p "${maildir}"  # expected by mbsync/isync
+if [ -f "${HOME}/${authinfo_file}" ]; then
+    mbsync -a
+    notmuch new
+fi
+
+# Final note on how to integrate tridactyl.
+echo "TODO: As tridactyl user, don't forget to do :source on the first Firefox run and then re-start."
diff --git a/buster/setup_scripts/setup_home_eeepc.sh b/buster/setup_scripts/setup_home_eeepc.sh
deleted file mode 100755 (executable)
index 6e58ef4..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/sh
-set -e
-
-public_repos_dir="${HOME}/public_repos"
-config_tree_prefix="${public_repos_dir}/config"
-path_borgscript="${config_tree_prefix}/all_new_2018/borg.sh"
-config_tree_buster="${config_tree_prefix}/buster"
-setup_scripts_dir="${config_tree_buster}/setup_scripts"
-repos_list_file="${public_repos_dir}/repos"
-dir_secrets="${HOME}/tmp_secrets"
-borgkeys_dir=~/.config/borg/keys
-borgrepos_file=~/.borgrepos
-ssh_dir=~/.ssh
-authinfo_file=.authinfo
-maildir=~/mail/maildir
-
-ensure_repo() {
-    repo_name="${1}"
-    if [ ! -d "${public_repos_dir}/${repo_name}" ]; then
-        cd "${public_repos_dir}"
-        git clone https://plomlompom.com/repos/clone/${repo_name}
-    fi
-}
-
-# Clone config to copy dotfiles etc. from it.
-cd
-mkdir -p "${public_repos_dir}"
-ensure_repo config
-cd "${setup_scripts_dir}"
-./copy_dirtree.sh "${config_tree_buster}/home_files" "${HOME}" minimal user_eeepc
-
-# Set up native messenger for tridactyl.
-curl -fsSl https://raw.githubusercontent.com/tridactyl/tridactyl/78e662efefd1f4af2bdb2a53edecf03b535b997b/native/install.sh | bash
-
-# Set up non-public parts of infrastructure.
-cd "${dir_secrets}"
-mkdir -p "${ssh_dir}"
-echo "Setting up .ssh"
-cp id_rsa ~/.ssh
-stty -echo
-ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
-stty echo
-script -c 'gpg --import secret_keys.asc' /dev/null
-tar xf borg_keyfiles.tar
-mkdir -p "${borgkeys_dir}"
-mv borg_keyfiles/* "${borgkeys_dir}"
-# .authinfo may not be present on every secrets drive yet
-if [ -f "${authinfo_file}" ]; then
-    cp "${authinfo_file}" ~
-fi
-cd
-rm -rf "${dir_secrets}"
-
-# Sync org dir via borgbackup. For this we need the borgbackup servers
-# in our .ssh/known_hosts file.
-cat "${borgrepos_file}" | while read line; do
-    first_char=$(echo "${line}" | cut -c1)
-    if [ "${first_char}" = "#" ]; then
-        continue
-    fi
-    server=$(echo "${line}" | sed 's/.*@//')
-    ssh-keyscan "${server}" >> "${ssh_dir}"/known_hosts
-done
-BORG_PASSPHRASE="${SECRETS_PASS}" "${path_borgscript}" orgpull
-
-# Fill ~/public_repos.
-cat "${repos_list_file}" | while read line; do
-    first_char=$(echo "${line}" | cut -c1)
-    if [ "${first_char}" = "#" ]; then
-        continue
-    fi
-    ensure_repo "${line}"
-done
-
-# Set up e-mail system. Note that we only do mbsync if the imap pass file
-# is found. It may not be present on every secrets drive yet, so we have to
-# deal with the possibility of it being absent at this point.
-mkdir -p "${maildir}"  # expected by mbsync/isync
-if [ -f "${HOME}/${authinfo_file}" ]; then
-    mbsync -a
-    notmuch new
-fi
-
-# Final note on how to integrate tridactyl.
-echo "TODO: As tridactyl user, don't forget to do :source on the first Firefox run and then re-start."