OSDN Git Service

disable resolution dialog when guestadditions are installed
[instantos/instantOS.git] / autostart.sh
1 #!/usr/bin/env bash
2
3 ###############################################
4 ## script for instantOS autostart            ##
5 ###############################################
6
7 # run userinstall to determine device properties
8 if ! iconf -i userinstall; then
9         /usr/share/instantutils/userinstall.sh
10         iconf -i userinstall 1
11 fi
12
13 # architecture detection
14 if [ -z "$1" ]; then
15         if uname -m | grep -q '^arm'; then
16                 export ISRASPI=true
17         fi
18
19         if [ "$(ps aux | grep bash | grep instantautostart | wc -l)" -gt 3 ]; then
20                 echo "already running"
21                 exit
22         fi
23 else
24         echo "forced run"
25 fi
26
27 cd
28 instantdotfiles
29
30 if ! iconf -i rangerplugins; then
31         mkdir instantos
32         echo "installing ranger plugins"
33         mkdir -p ~/.config/ranger/plugins
34         cp -r /usr/share/rangerplugins/* ~/.config/ranger/plugins/
35         iconf -i rangerplugins 1
36 fi
37
38 # find out if it's a live session
39 if [ -e /usr/share/liveutils ] &>/dev/null; then
40         ISLIVE="True"
41         echo "live session detected"
42 fi
43
44 if iconf -i islaptop; then
45         export ISLAPTOP="true"
46         echo "laptop detected"
47 else
48         echo "not a laptop"
49 fi
50
51 islive() {
52         if [ -n "$ISLIVE" ]; then
53                 return 0
54         else
55                 return 1
56         fi
57 }
58
59 # optionally disable status bar
60 if iconf -i nobar; then
61         NMON=$(iconf names | wc -l)
62         for i in $(eval "echo {1..$NMON}"); do
63                 echo "found monitor $i"
64                 xdotool key super+comma
65                 xdotool key super+b
66         done &
67 fi
68
69 if [ -n "$ISRASPI" ]; then
70         # enable double drawing for moving floating windows
71         # greatly increases smoothness
72         iconf -i highfps 1
73         if ! [ -e ~/.config/instantos/israspi ]; then
74                 echo "marking machine as raspi"
75                 mkdir -p ~/.config/instantos
76                 touch ~/.config/instantos/israspi
77                 # logo does not work on raspi
78                 iconf -i nologo 1
79         fi
80 fi
81
82 if ! iconf -i notheming; then
83         instantthemes a
84         xrdb ~/.Xresources
85         iconf -i instantthemes 1
86
87         # dynamically switch between light and dark gtk theme
88         DATEHOUR=$(date +%H)
89         if [ "$DATEHOUR" -gt "20" ] || [ "$DATEHOUR" -lt "7" ]; then
90                 instantthemes d &
91                 touch /tmp/instantdarkmode
92                 [ -e /tmp/instantlightmode ] && rm /tmp/instantlightmode
93         else
94                 instantthemes l &
95                 touch /tmp/instantlightmode
96                 [ -e /tmp/instantdarkmode ] && rm /tmp/instantdarkmode
97         fi &
98 else
99         touch /tmp/instantlightmode
100 fi
101
102 mkdir -p /tmp/notifications &>/dev/null
103 if ! pgrep dunst; then
104         while :; do
105                 # wait for theming before starting dunst
106                 if [ -e /tmp/instantdarkmode ] || [ -e /tmp/instantlightmode ]; then
107                         dunst
108                 fi
109                 sleep 2
110         done &
111 fi
112
113 onlinetrigger() {
114         instantwallpaper &
115 }
116
117 # set up oh-my-zsh config if not existing already
118 iconf -i nozsh || instantshell &
119
120 # fix resolution on virtual machine
121 if ! iconf -i novmfix && grep -q 'hypervisor' /proc/cpuinfo; then
122         # indicator file only exists on kvm/QEMU on amd
123         if [ -e /opt/instantos/kvm ]; then
124                 iconf -i highfps 1
125                 if lshw -c video | grep -i 'qxl' || xrandr | grep -i '^qxl'; then
126                         iconf -i qxl 1
127                         # iconf -i noanimations 1
128                         if ! iconf -i potato && ! iconf -i nopotato; then
129                                 if echo "please set your video card to virtio or passthrough
130 QXL on AMD on QEMU/kvm has been known to cause a severe Xorg memory leak. 
131 Disabling compositing makes this somewhat bearable,
132 but switching really is recommended.
133 (or switch to virtualbox, no issues there...)
134 Disable compositing for this VM?" | imenu -C; then
135                                         iconf -i potato 1
136                                         pkill picom
137                                 else
138                                         if ! imenu -c "ask again next time?"; then
139                                                 iconf -i nopotato 1
140                                         fi
141                                 fi
142                         fi
143                 else
144                         iconf -i qxl 1
145                 fi
146         fi
147
148         if ! [ -e /opt/instantos/guestadditions ]; then
149                 if echo "virtual machine detected.
150 Would you like to switch to a 1080p resolution?" | imenu -C; then
151                         echo "applying virtual machine workaround"
152                         /opt/instantos/menus/dm/tv.sh
153                 else
154                         if ! imenu -c "ask again next session"; then
155                                 iconf -i novmfix 1
156                         fi
157                 fi
158         fi
159 fi
160
161 if ! islive; then
162         echo "not a live session"
163         if [ -e /opt/instantos/installtrigger ]; then
164                 zenity --info --text "finishing installation in background" &
165
166                 # ask for password if postinstall already ran
167                 if ! timeout 2 sudo echo test; then
168                         instantsudo instantpostinstall
169                         sudo rm /opt/instantos/installtrigger
170                 else
171                         sudo instantpostinstall
172                 fi
173
174                 pkill zenity
175         fi
176
177         cd ~/instantos
178         if ! iconf -i max; then
179                 instantmonitor
180         fi
181
182         if [ -e ~/instantos/monitor.sh ]; then
183                 bash ~/instantos/monitor.sh &
184         elif [ -e ~/.config/autorandr/instantos/config ]; then
185                 autorandr instantos &
186         fi
187
188         if checkinternet; then
189                 onlinetrigger
190         else
191                 # fall back to already installed wallpapers
192                 instantwallpaper offline
193                 for i in $(seq 10); do
194                         if checkinternet; then
195                                 onlinetrigger
196                                 break
197                         else
198                                 sleep 10
199                         fi
200                 done
201         fi &
202
203         # apply keybpard layout
204         if [ -e ~/instantos/keyboard ]; then
205                 setxkbmap -layout $(cat ~/instantos/keyboard)
206         else
207                 CURLOCALE=$(locale | grep LANG | sed 's/.*=\(.*\)\..*/\1/')
208                 case "$CURLOCALE" in
209                 de_DE)
210                         setxkbmap -layout de
211                         ;;
212                 *)
213                         echo "no keyboard layout found for your locale"
214                         ;;
215                 esac
216         fi
217
218         # read cursor speed
219         if iconf mousespeed; then
220                 echo "setting mousespeed"
221                 instantmouse s "$(iconf mousespeed)"
222         fi
223
224         if ! iconf -i noconky; then
225                 shuf /usr/share/instantwidgets/tooltips.txt | head -1 >~/.cache/tooltip
226                 conky -c /usr/share/instantwidgets/tooltips.conf &
227         fi
228
229 else
230         echo "live session detected"
231         instantmonitor
232
233         echo "disabling compositing for qxl graphics"
234         if lshw -c video | grep -i 'qxl' || xrandr | grep -i '^qxl'; then
235                 iconf -i potato 1
236         fi
237
238         sudo systemctl start NetworkManager
239
240         iconf -b welcome 1
241         iconf -i wifiapplet 1
242         instantwallpaper set /usr/share/instantwallpaper/defaultphoto.png
243         conky -c /usr/share/instantwidgets/install.conf &
244         sleep 0.3
245         while :; do
246                 if ! pgrep python; then
247                         installapplet
248                 fi &
249                 sleep 6m
250         done &
251         sleep 1
252 fi
253
254 # make built in status optional
255 if ! iconf -i nostatus; then
256         source /usr/bin/instantstatus &
257 fi
258
259 iconf -i potato || ipicom &
260
261 lxpolkit &
262 xfce4-power-manager &
263
264 while iconf -i wifiapplet:; do
265         if ! pgrep nm-applet; then
266                 nm-applet &
267         fi
268         sleep 6m
269 done &
270
271 # welcome greeter app
272 if iconf -b welcome; then
273         instantwelcome
274 fi &
275
276 # prompt to fix configuration if installed from the AUR
277 if ! iconf -i norootinstall && ! islive; then
278         if ! command -v imenu || ! command -v instantmenu; then
279                 notify-send "please install instantmenu and imenu"
280         else
281                 if ! [ -e /opt/instantos/rootinstall ]; then
282                         imenu -m "instantOS is missing some configuration"
283                         while ! [ -e /tmp/rootskip ]; do
284                                 if imenu -c "would you like to fix that?"; then
285                                         touch /tmp/topinstall
286                                         instantsudo bash -c "instantutils root"
287                                         touch /tmp/rootskip
288                                 else
289                                         if imenu -c "Are you sure? this will prevent parts of instantOS from functioning correctly"; then
290                                                 touch /tmp/rootskip
291                                         fi
292                                 fi
293
294                         done
295                 fi
296         fi
297 fi
298
299 # displays message user opens the terminal for the first time
300 if ! iconf -i nohelp; then
301         if ! grep -q 'instantterminalhelp' ~/.zshrc; then
302                 echo '[[ $- == *i* ]] && instantterminalhelp' >>~/.zshrc
303         fi
304 fi
305
306 if iconf -i highfps; then
307         xdotool key super+alt+shift+d
308 fi
309
310 if iconf -i noanimations; then
311         xdotool key super+alt+shift+s
312 fi
313
314 # desktop icons
315 if iconf -i desktopicons; then
316         rox --pinboard Default
317 fi &
318
319 # optional udiskie
320 if iconf -i udiskie; then
321         command -v udiskie && udiskie -t &
322 fi
323
324 # user declared autostart
325 if [ -e ~/.instantautostart ]; then
326         bash ~/.instantautostart
327 fi