11#! /usr/bin/env bash
2- source ~ /.dotfiles/config/setup.sh
2+ # DO NOT source setup.sh here. Otherwise, "_private" variables
3+ # cannot be accessed. This needs to be standalone and work before
4+ # running "doctor.sh".
35
46main () {
7+ FORCE_SOURCE=1 source ~ /.dotfiles/bootstrap-linux.sh
8+ installcif [ -n " $FORCE_SOURCE " ]; then
9+ return 0
10+ fi
11+
12+ # shellcheck disable=SC3028,SC3054,SC2039
13+ if [ -n " $BASH " ] && [ " ${BASH_SOURCE[0]} " != " $0 " ]; then
14+ printf ' %s\n' " Error: This file should not be sourced"
15+ return 1
16+ fimd ' jq'
17+
518 local mode=
619 while : ; do
720 local options=' save|restore'
@@ -35,8 +48,8 @@ main() {
3548
3649 local answer=
3750 while : ; do
38- read -re -p ' Choose directory to put temporary file : ' answer
39- if [[ $answer =~ [0-9]+ ]] && (( answer >= 0 )) && (( answer < ${# options[@]} )) ; then
51+ read -re -p ' Choose directory for temporary files : ' answer
52+ if [[ $answer =~ ^ [0-9]+$ ]] && (( answer >= 0 )) && (( answer < ${# options[@]} )) ; then
4053 break
4154 fi
4255 done
@@ -47,15 +60,12 @@ main() {
4760 read -re -p ' Enter directory path: ' device_path
4861 fi
4962 device_path=${device_path%/ }
50- local -A paths=(
51- [libreoffice]=" $XDG_CONFIG_HOME /libreoffice/4/user"
52- [fonts]=" $XDG_DATA_HOME /fonts"
53- [dbeaver]=" $XDG_DATA_HOME /DBeaverData/workspace6/General/Scripts"
54- [ankiuserdata]=" $XDG_DATA_HOME /Anki2/Default User"
55- [ankiaddons]=" $XDG_DATA_HOME /Anki2/addons21"
56- [applicationsdir]=" $HOME /Other/Application Data"
57- [devresources]=" $HOME /.devresources"
58- )
63+
64+ local tmp_gnupg_dir=$( mktemp -d --suffix=' -gnupg' )
65+ gpg --homedir " $tmp_gnupg_dir " --no-keyring --batch --yes --pinentry-mode loopback --passphrase-fd 3 --no-symkey-cache --decrypt " $device_path /_data/setup_private_sh.asc" 3<<< $( cat " $device_path /_data/pw.txt" ) | tar -xO > " $HOME /.dotfiles/config/setup-private.sh"
66+
67+ source ~ /.dotfiles/config/setup.sh
68+
5969 local -A paths_encrypt=(
6070 [gnupg]=" $HOME /.gnupg"
6171 [ssh]=" $HOME /.ssh"
@@ -69,6 +79,15 @@ main() {
6979 [setup_private_sh]=" $HOME /.dotfiles/config/setup-private.sh"
7080 [dotfiles_git_exclude]=" $HOME /.dotfiles/.git/info/exclude"
7181 )
82+ local -A paths=(
83+ [libreoffice]=" $XDG_CONFIG_HOME /libreoffice/4/user"
84+ [fonts]=" $XDG_DATA_HOME /fonts"
85+ [dbeaver]=" $XDG_DATA_HOME /DBeaverData/workspace6/General/Scripts"
86+ [ankiuserdata]=" $XDG_DATA_HOME /Anki2/Default User"
87+ [ankiaddons]=" $XDG_DATA_HOME /Anki2/addons21"
88+ [applicationsdir]=" $HOME /Other/Application Data"
89+ [devresources]=" $HOME /.devresources"
90+ )
7291
7392 if [ " $mode " = save ]; then
7493 if [ " $device_path_is_manual " = true ]; then
@@ -79,7 +98,7 @@ main() {
7998
8099 local password= temp_gnupg=
81100 password=$( LC_ALL=C tr -dc ' [:graph:]' < /dev/urandom | head -c 14)
82- temp_gnupg=$( mktemp -d --suffix ' -gnupg' )
101+ temp_gnupg=$( mktemp -d --suffix= ' -gnupg' )
83102 mkdir -p " $temp_gnupg "
84103 core.print_info " Password: $password "
85104
@@ -112,7 +131,7 @@ main() {
112131 cp -rT " $dir " " $dest "
113132 done
114133
115- elif [ " $mode " = restore ]; then
134+ elif [ " $mode " = resto~/scripts/doctor.sh re ]; then
116135 local password= pw_file=" $device_path /_data/pw.txt"
117136 if [ -f " $pw_file " ]; then
118137 password=$( < " $pw_file " )
@@ -122,7 +141,7 @@ main() {
122141 fi
123142
124143 local temp_gnupg=
125- temp_gnupg=$( mktemp -d --suffix ' -gnupg' )
144+ temp_gnupg=$( mktemp -d --suffix= ' -gnupg' )
126145
127146 for name in " ${! paths_encrypt[@]} " ; do
128147 local dir=" ${paths_encrypt[$name]} "
@@ -179,7 +198,7 @@ main() {
179198 core.print_die " Invalid mode: $mode "
180199 fi
181200
182- core.print_info ' Done! You may need to remove the source directory '
201+ core.print_info ' Done! You may want to remove $device_path/_data '
183202}
184203
185204util.if_file_sourced || _main " $@ "
0 commit comments