summaryrefslogtreecommitdiff
path: root/linux/bin/erzeuge_installation/installation.1
blob: 171ec6583a0ddc148c8d1a9cd47fdd738fe8ea31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
#!/bin/bash
# Copyright 2008 Pascal Hauck <pascal.hauck@web.de>
# Distributed under the terms of the GNU General Public License v3

# ======= Installation =======
# Um NEO auf Ihrem System zu (dauerhaft) zu installieren, genügt es, dieses Skript auszuführen
# z.B. in der Konsole die folgenden beiden Zeilen eingeben:
# chmod u+x installation
# ./installation
# Nun ist NEO auf Ihrem System dauerhaft installier
# Ein Wechsel zurück zu QWERTZ ist jederzeit mit ›uiae‹ leicht möglich

# Wenn NEO nicht automatisch nach dem Login gestartet werden soll, genügt es, vor die Zeile, die mit
# asdf   # mit einem # am Zeilenanfang
# beginnt und sich in der Datei $HOME/.profile befinden, ein # zu setzen
# ==============================


# ======= Deinstallation =======
# Um NEO wieder zu deinstallieren, kann das Skript ›installiere_neo‹ ein weiteres Mal aufgerufen werden
# ==============================


# ======= Bemerkungen ==========
# Dieses Skript ist eine rudimentäre Installation. Derzeit gibt es keine Konfigurationsmöglichkeit.
# Es wird immer das Standardverzeichnis $HOME/neo verwendet
# Es gibt keine graphische Installation
# Dennoch kann dieses Skrip helfen, NEO auf eine einfache Weise zu installieren.
# Dieses Skript wird mit der Zeit verbessert werden.
# ==============================


# colours in the Bash
B="\033[30m"
R="\033[31m"
G="\033[32m"

datei() {  # cut files from the complete file ›installiere_neo‹
	grep -A10000 "#neo: $1 --- Beginn" installation | grep -B10000 "#neo: $1 --- Ende" | grep -v "#neo:"
}

erzeuge() {  # create directories, files and entries
	case $1 in
	d) # directory
		if [ -d $2 ]				# if already exists
		then
			echo -e "Das Verzeichnis ${R}$2${B} gibt es bereits – wird verwendet…"
		else
			echo -e "Erstelle $2"
			mkdir $2			# create
		fi
		;;
	f) # file
		if [ -f $3 ]				# if already exists
		then
			echo -e "Die Datei ${R}$3${B} gibt es bereits – soll die bestehende Datei überschrieben werden? \c"; read -p "[J,N] " -e overwrite
			if [ "$overwrite" = "J" ]	# overwrite?
			then
				echo "Datei $3 wird überschrieben!"
				rm -f $3		# remove if user wants to overwrite
			else
				echo -e "Datei ${R}$3${B} gibt es schon → Installation abgebrochen"
				exit
			fi
		fi
		echo "Erstelle Datei $3"		# create
		datei $2 > $3
		;;
	l) # soft link
		if [ -d $HOME/bin/ ]			# $HOME/bin has to exist!
		then
			echo "Verzeichnis $HOME/bin/ gefunden"
		else
			echo -e "Verzeichnis ${R}$HOME/bin${B} wird erwartet, ist aber nicht vorhanden"
			echo "Außerdem wird erwartet, dass /$HOME/bin in der Umgebungsvariable \$PATH ist"
			echo "Istallation wird abgebrochen."
			exit
		fi
		if [ -f $HOME/bin/$2 ]			# if already exists
		then
			echo -e "Datei ${R}$HOME/bin/$2${B} gibt es bereits – soll die bestehende Datei überschrieben werden? \c"; read -p "[J,N] " -e overwrite
			if [ "$overwrite" = "J" ]	# overwrite?
			then
				echo "Datei $2 wird überschrieben!"
				rm -f $HOME/bin/$2	# remove if user wants to overwrite
			else
				echo -e "Datei ${R}$2${B} gibt es schon → Installation abgebrochen"
				exit
			fi
		fi
		echo "Erstelle Link $HOME/bin/$2"
		ln -s $HOME/neo/$2 $HOME/bin		# create
		;;
	esac
}

entferne(){  # remove files for uninstall option
	echo "Entferne $1"
	rm $1 || echo -e "${R}Konnte die Datei $1 nicht entfernen!${B}"
}

deinstall() {  #remove all directories, files and entries made by ›installiere_neo‹
	echo
	echo
	rmfromprofile
	entferne $HOME/.neorc
	entferne $HOME/bin/uiae
	entferne $HOME/neo/uiae
	entferne $HOME/bin/asdf
	entferne $HOME/neo/asdf
	entferne $HOME/neo/neo.map
	entferne $HOME/neo/neo_de.xmodmap
	echo "Entferne $HOME/neo/"
	rmdir $HOME/neo/ || echo -e "${R}Konnte das Verzeichenis $HOME/neo/ nicht entfernen!${B}"
}

rmfromprofile() {  # remove the entry in $HOME/.profile
	grep -v "^\# NEO:$" $HOME/.profile | grep -v "asdf   \# mit" > $HOME/profile.neo.tmp
	rm /$HOME/.profile
	mv $HOME/profile.neo.tmp $HOME/.profile
}


# *** main program ***
clear
echo
echo "   *** NEO – Ergonomie und Zeichenvielfalt ***"
echo
echo
echo " Ihr System wird untersucht…"
echo

# check for an existing neo configuration
if [ -f "${NEO_CONFIG}" ]; then
	. "${NEO_CONFIG}" || die "Failed to source ${NEO_CONFIG}"
elif [ -f "${HOME}"/.neorc ]; then
	. "${HOME}"/.neorc || die "Failed to source ${HOME}/.neorc"
elif [ -f /etc/neo.conf ]; then
	. /etc/neo.conf || die "Failed to source /etc/neo.conf"
else

# no configuration file found → install NEO
	echo "Bislang gibt es kein vollständig konfiguriertes NEO auf Ihrem System"
	echo
	echo "Sie haben folgende Möglichkeiten:"
	echo
	echo " [1]  NEO nur testen"
	echo "       Sie haben die Möglichkeit, NEO zu Testen, ihre Standardbelegung (in der Regel QWERTZ) bleibt erhalten"
	echo
	echo
	echo " [2] NEO als Standardbelegung"
	echo "       Mit dieser Option wird NEO die neue Standardbelegung für diesen Benutzer und nach (nicht vor!) dem"
	echo "       Login automatisch aktiviert"
	echo
	echo
	echo -e " Wenn ${G}installiere_neo${B} ein weiteres Mal aufgerufen wird, haben weitere Optionen – z.B. die Deinstallation von NEO"
	echo

	installoption=""
	while [ ! $installoption ]			# choose between QWERTZ or NEO as standard
	do						# switch with ›asdf‹ and ›uiae‹
		echo
		read -p "Wählen Sie eine Option [1,2]: " -e installoption
	        case $installoption in
                2)
                        echo
                        echo "Nach dem Login wird NEO die Standardbelegung sein."
                        echo -e "Um dies zu ändern, kann ${G}installiere_neo${B} ein weiteres Mal ausgeführt werden."
			echo
			read -n1 -p "Drücke eine Taste um fortzufahren oder STRG+C zum Abbrechen"
                        ;;
                1)
                        echo
                        echo "Das Standardlayout wird nich verändert."
                        echo -e "Zu NEO kann man jederzeit mit der Abrollbewegung ${G}asdf${B} wechseln."
			echo
			read -n1 -p "Drücke eine Taste um fortzufahren oder STRG+C zum Abbrechen"
                        ;;
                *)
                        echo
                        echo "Bitte wählen Sie die Optionen 1, um NEO zu testen oder 2, um NEO zur Standardbelegung zu machen"
			installoption=""
                        ;;
                esac
	done


	echo
	echo
	echo " Installation von NEO mit xmodmap wird gestartet…"
	echo
	echo

# *** main installation process ***
# creating a directory $HOME/neo with NEO files
# linking ›asdf‹ and ›uiae‹ scripts to $HOME/bin
	erzeuge d $HOME/neo
	erzeuge f xmodmap $HOME/neo/neo_de.xmodmap
	erzeuge f console $HOME/neo/neo.map
	erzeuge f asdf $HOME/neo/asdf
	chmod u+x $HOME/neo/asdf
	erzeuge l asdf
	erzeuge f uiae $HOME/neo/uiae
	chmod u+x $HOME/neo/uiae
	erzeuge l uiae
	erzeuge f neorc $HOME/.neorc

# entry in $HOME/.profile with NEO or QWERTZ as standard keyboard layout after login
	case $installoption in 
	2)
		echo
		echo "Nach dem Login wird NEO die Standardbelegung sein."
		echo -e "Um dies zu ändern, kann ${G}installiere_neo${B} ein weiteres Mal ausgeführt werden."
		rmfromprofile
		datei profile.neo > $HOME/neo/neo.profile
		cat $HOME/neo/neo.profile >> $HOME/.profile
		rm $HOME/neo/neo.profile
		;;
	1)
		echo
		echo "Das Standardlayout wird nich verändert."
		echo -e "Zu NEO kann man jederzeit mit der Abrollbewegung ${G}asdf${B} wechseln."
		rmfromprofile
		datei profile.qwertz > $HOME/neo/neo.profile
		cat $HOME/neo/neo.profile >> $HOME/.profile
		rm $HOME/neo/neo.profile
		;;
	esac

# starting NEO layout
	echo
	echo "Die Belegung wird nun auf NEO geändert…"	
	cd $HOME/neo
	./asdf xmodmap
	echo -e "Um zu QWERTZ zurückzukehren, genügt es, die Abrollbewegung ${G}uiae${B} einzugeben."
	exit
fi


# configuration file found → delete/deinstall options
	echo "Es gibt auf Ihrem System bereits eine Konfiguration für NEO."
	echo
	echo "Sollte NEO nur für diesen Benutzer installiert sein, haben folgende Möglichkeiten:"
	echo
	echo " [1]  NEO zukünftig nicht mehr als Standardbelegung"
	echo -e "       NEO wird nicht länger direkt nach dem Login zur Verfügung stehen, wohl aber nach Eingabe von ${G}adsf${B}."
	echo
	echo
	echo " [2] NEO vollständig vom System entfernen"
	echo "       Dieso Option entfernt alle zuvor angelegten Verzeichnisse, Datein und Einträge zur NEO-Belegung"
	echo
	echo
	echo " Diese Optionen funktionieren nur dann zuverlässig, wenn NEO auch mit ${G}installiere_neo${B} installiert wurde"
	echo

	deinstalloption=""
	while [ ! $deinstalloption ]			# choose between deleting NEO as standard layout or delete NEO at all
	do						# if deleted as standard layout only, ›asdf‹ is still working
		echo
		read -p "Wählen Sie eine Option [1,2]: " -e deinstalloption
	        case $deinstalloption in
                2)
                        echo
                        echo -e "Alle zuvor von ${G}installiere_neo${B} vorgenommen Änderungen am System werden gelöscht!"
			echo
			read -n1 -p "Drücke eine Taste um fortzufahren oder STRG+C zum Abbrechen"
			deinstall			# full deinstallation
                        ;;
                1)
                        echo
                        echo "NEO wird als Standardbelegung entfernt"
                        echo -e "Zu NEO kann man weiterhin jederzeit mit der Abrollbewegung ${G}asdf${B} wechseln."
			echo
			read -n1 -p "Drücke eine Taste um fortzufahren oder STRG+C zum Abbrechen"
			echo
			rmfromprofile			# alter the entry in $HOME/.profile; first: remove old entry
			echo >> $HOME/.profile		# write the new entry
			echo "# NEO:" >> $HOME/.profile
			echo "# asdf   # mit einem # am Zeilenanfang bleibt QWERTZ das Standardlayout, sonst ist es NEO" >> $HOME/.profile
                        ;;
                *)
                        echo
                        echo "Bitte wählen Sie die Optionen 1, um NEO nicht länger als Standardbelegung zu nutzen"
			echo " oder 2, um NEO vollständig zu entfernen"
			deinstalloption=""
                        ;;
                esac
	done
exit