OSDN Git Service

add kde laser pointer support
[instantos/instantOS.git] / autostart.sh
1 #!/usr/bin/env bash
2
3 ###############################################
4 ## script for instantOS autostart            ##
5 ###############################################
6
7 INSTANTVERSION="$(cat /usr/share/instantutils/version)"
8 if iconf version && [ "$(iconf version)" = "$INSTANTVERSION" ]; then
9     echo "version check successful"
10     echo "running version $INSTANTVERSION"
11 else
12     echo "running update hooks"
13     /usr/share/instantutils/userinstall.sh
14     iconf -i userinstall 1
15     iconf version "$INSTANTVERSION"
16     instantutils default
17 fi
18
19 # architecture detection
20 if [ -z "$1" ]; then
21     if uname -m | grep -q '^arm'; then
22         export ISRASPI=true
23     fi
24
25     if iconf -i noautostart; then
26         echo "autostart disabled"
27         exit
28     fi
29
30     if [ "$(ps aux | grep bash | grep instantautostart | wc -l)" -gt 3 ]; then
31         echo "already running"
32         exit
33     fi
34 else
35     echo "forced run"
36 fi
37
38 cd
39 command -v instantdotfiles && instantdotfiles
40
41 if ! iconf -i rangerplugins && command -v rangerplugins; then
42     mkdir instantos
43     echo "installing ranger plugins"
44     mkdir -p ~/.config/ranger/plugins
45     cp -r /usr/share/rangerplugins/* ~/.config/ranger/plugins/
46     iconf -i rangerplugins 1
47 fi
48
49 # find out if it's a live session
50 if [ -e /usr/share/liveutils ] &>/dev/null; then
51     ISLIVE="True"
52     echo "live session detected"
53 fi
54
55 if iconf -i islaptop; then
56     export ISLAPTOP="true"
57     echo "laptop detected"
58 else
59     echo "not a laptop"
60 fi
61
62 islive() {
63     if [ -n "$ISLIVE" ]; then
64         return 0
65     else
66         return 1
67     fi
68 }
69
70 # optionally disable status bar
71 if iconf -i nobar; then
72     NMON=$(iconf names | wc -l)
73     for i in $(eval "echo {1..$NMON}"); do
74         echo "found monitor $i"
75         xdotool key super+comma
76         xdotool key super+b
77     done &
78 fi
79
80 if [ -n "$ISRASPI" ]; then
81     # enable double drawing for moving floating windows
82     # greatly increases smoothness
83     iconf -i highfps 1
84     if ! [ -e ~/.config/instantos/israspi ]; then
85         echo "marking machine as raspi"
86         mkdir -p ~/.config/instantos
87         touch ~/.config/instantos/israspi
88         # logo does not work on raspi
89         iconf -i nologo 1
90     fi
91 fi
92
93 if ! iconf -i notheming; then
94     instantthemes a
95     xrdb ~/.Xresources
96     iconf -i instantthemes 1
97
98     # dynamically switch between light and dark gtk theme
99     DATEHOUR=$(date +%H)
100     if [ "$DATEHOUR" -gt "20" ] || [ "$DATEHOUR" -lt "7" ]; then
101         instantthemes d &
102         touch /tmp/instantdarkmode
103         [ -e /tmp/instantlightmode ] && rm /tmp/instantlightmode
104     else
105         instantthemes l &
106         touch /tmp/instantlightmode
107         [ -e /tmp/instantdarkmode ] && rm /tmp/instantdarkmode
108     fi &
109 else
110     touch /tmp/instantlightmode
111 fi
112
113 mkdir -p /tmp/notifications &>/dev/null
114 if ! pgrep dunst; then
115     while :; do
116         # wait for theming before starting dunst
117         if [ -e /tmp/instantdarkmode ] || [ -e /tmp/instantlightmode ]; then
118             dunst
119         fi
120         sleep 2
121     done &
122 fi
123
124 onlinetrigger() {
125     instantwallpaper &
126 }
127
128 # set up oh-my-zsh config if not existing already
129 iconf -i nozsh || instantshell &
130
131 # fix resolution on virtual machine
132 if ! iconf -i novmfix && grep -q 'hypervisor' /proc/cpuinfo; then
133     # indicator file only exists on kvm/QEMU on amd
134     if [ -e /opt/instantos/kvm ]; then
135         iconf -i highfps 1
136         if lshw -c video | grep -i 'qxl' || xrandr | grep -i '^qxl'; then
137             iconf -i qxl 1
138             # iconf -i noanimations 1
139             if ! iconf -i potato && ! iconf -i nopotato; then
140                 if echo "please set your video card to virtio or passthrough
141 QXL on AMD on QEMU/kvm has been known to cause a severe Xorg memory leak. 
142 Disabling compositing makes this somewhat bearable,
143 but switching really is recommended.
144 (or switch to virtualbox, no issues there...)
145 Disable compositing for this VM?" | imenu -C; then
146                     iconf -i potato 1
147                     pkill picom
148                 else
149                     if ! imenu -c "ask again next time?"; then
150                         iconf -i nopotato 1
151                     fi
152                 fi
153             fi
154         else
155             iconf -i qxl 1
156         fi
157     fi
158
159     if ! [ -e /opt/instantos/guestadditions ]; then
160         if echo "virtual machine detected.
161 Would you like to switch to a 1080p resolution?" | imenu -C; then
162             echo "applying virtual machine workaround"
163             /usr/share/instantassist/assists/t/v.sh
164         else
165             if ! imenu -c "ask again next session"; then
166                 iconf -i novmfix 1
167             fi
168         fi
169     fi
170 fi
171
172 if ! islive; then
173     echo "not a live session"
174     if [ -e /opt/instantos/installtrigger ]; then
175         zenity --info --text "finishing installation in background" &
176
177         # ask for password if postinstall already ran
178         if ! timeout 2 sudo echo test; then
179             instantsudo instantpostinstall
180             sudo rm /opt/instantos/installtrigger
181         else
182             sudo instantpostinstall
183         fi
184
185         pkill zenity
186     fi
187
188     cd ~/instantos || exit 1
189     if ! iconf -i max; then
190         instantmonitor
191     fi
192
193     if [ -e ~/instantos/monitor.sh ]; then
194         echo "restoring resolution"
195         bash ~/instantos/monitor.sh &
196     elif [ -e ~/.config/autorandr/instantos/config ]; then
197         echo "restoring autorandr resolution"
198         autorandr instantos &
199     fi
200
201     if checkinternet; then
202         onlinetrigger
203     else
204         # fall back to already installed wallpapers
205         instantwallpaper offline
206         for i in $(seq 10); do
207             if checkinternet; then
208                 onlinetrigger
209                 break
210             else
211                 sleep 10
212             fi
213         done
214     fi &
215
216     # apply keybpard layout
217     if iconf layout; then
218         setxkbmap -layout "$(iconf layout)"
219     else
220         CURLOCALE=$(locale | grep LANG | sed 's/.*=\(.*\)\..*/\1/')
221         case "$CURLOCALE" in
222         de_DE)
223             setxkbmap -layout de
224             ;;
225         *)
226             echo "no keyboard layout found for your locale"
227             ;;
228         esac
229     fi
230
231     # read cursor speed
232     if iconf mousespeed; then
233         echo "setting mousespeed"
234         instantmouse s "$(iconf mousespeed)"
235     fi
236
237     if iconf -i reversemouse; then
238         instantmouse r 1
239     else
240         instantmouse r 0
241     fi
242
243     if ! iconf -i noconky; then
244         shuf /usr/share/instantwidgets/tooltips.txt | head -1 >~/.cache/tooltip
245         conky -c /usr/share/instantwidgets/tooltips.conf &
246     fi
247
248 else
249     echo "live session detected"
250     instantmonitor
251
252     echo "disabling compositing for qxl graphics"
253     if lshw -c video | grep -i 'qxl' || xrandr | grep -i '^qxl'; then
254         iconf -i potato 1
255     fi
256
257     sudo systemctl start NetworkManager
258
259     iconf -b welcome 1
260     iconf -i wifiapplet 1
261     instantwallpaper set /usr/share/instantwallpaper/defaultphoto.png
262     conky -c /usr/share/instantwidgets/install.conf &
263     sleep 0.3
264     while :; do
265         if ! pgrep python; then
266             installapplet
267         fi &
268         sleep 6m
269     done &
270     sleep 1
271 fi
272
273 # make built in status optional
274 if ! iconf -i nostatus; then
275     source /usr/bin/instantstatus &
276 fi
277
278 # compositing
279 if iconf -i potato || iconf -i nocompositing; then
280     echo "compositing disabled"
281 else
282     ipicom &
283 fi
284
285 while :; do
286     lxpolkit
287     sleep 10
288 done &
289
290 xfce4-power-manager &
291
292 # start processes that need to be kept running
293 while :; do
294     sleep 10
295     if iconf -i wifiapplet && ! pgrep nm-applet; then
296         echo "starting bluetooth applet"
297         nm-applet &
298     fi
299
300     if iconf -i bluetoothapplet && ! pgrep blueman-applet; then
301         echo "starting bluetooth applet"
302         blueman-applet &
303     fi
304
305     if iconf -i alttab && ! pgrep alttab; then
306         alttab -fg "#ffffff" -bg "#292F3A" -frame "#5293E1" -d 0 -s 1 -t 128x150 -i 127x64 -w 1 -vp pointer &
307     fi
308     sleep 2m
309
310 done &
311
312 # auto open menu when connecting/disconnecting monitor
313 if ! (iconf -i noautoswitch && iconf -i islaptop) || iconf -i autoswitch; then
314     DISPLAYCOUNT="$(xrandr | grep -c '[^s]connected')"
315     if [ "$DISPLAYCOUNT" -eq "$DISPLAYCOUNT" ]; then
316         while :; do
317             NEWDISPLAYCOUNT="$(xrandr | grep -c '[^s]connected')"
318             if ! [ "$DISPLAYCOUNT" = "$NEWDISPLAYCOUNT" ]; then
319                 notify-send "display changed"
320                 echo "displays changed"
321                 if [ "$NEWDISPLAYCOUNT" -gt 1 ]; then
322                     instantdisper
323                     echo "multi monitor setup"
324                 else
325                     disper -e
326                 fi
327                 DISPLAYCOUNT="$NEWDISPLAYCOUNT"
328                 # todo: open menu
329             fi
330             sleep 10
331         done &
332     else
333         echo "error detecting display count"
334     fi
335 fi
336
337 # welcome app
338 if iconf -b welcome; then
339     instantwelcome
340 fi &
341
342 # prompt to fix configuration if installed from the AUR
343 if ! iconf -i norootinstall && ! islive; then
344     if ! command -v imenu || ! command -v instantmenu; then
345         notify-send "please install instantmenu and imenu"
346     else
347         if ! [ -e /opt/instantos/rootinstall ]; then
348             imenu -m "instantOS is missing some configuration"
349             while ! [ -e /tmp/rootskip ]; do
350                 if imenu -c "would you like to fix that?"; then
351                     touch /tmp/topinstall
352                     instantsudo bash -c "instantutils root"
353                     touch /tmp/rootskip
354                 else
355                     if imenu -c "Are you sure? this will prevent parts of instantOS from functioning correctly"; then
356                         touch /tmp/rootskip
357                     fi
358                 fi
359
360             done
361         fi
362     fi
363 fi
364
365 # displays message user opens the terminal for the first time
366 if ! iconf -i nohelp; then
367     if ! grep -q 'instantterminalhelp' ~/.zshrc; then
368         echo '[[ $- == *i* ]] && instantterminalhelp' >>~/.zshrc
369     fi
370 fi
371
372 confkey() {
373     [ -n "$2" ] || return
374     iconf -i "$1" || return
375     xdotool key "$2"
376 }
377
378 # run command if iconf option is set
379 confcommand() {
380     if iconf -i "$1"; then
381         shift 1
382         "$@"
383     fi &
384 }
385
386 if iconf savebright; then
387     /usr/share/instantassist/utils/b.sh 2 "$(iconf savebright)"
388 fi
389
390 confkey highfps "super+alt+shift+d"
391 confkey noanimations "super+alt+shift+s"
392 # disable wm alttab for graphical alttab
393 confkey alttab "super+alt+control+shift+Tab"
394
395 # desktop icons
396 confcommand desktopicons rox --pinboard Default
397 # auto mount disks
398 confcommand udiskie udiskie -t
399 # clipboard manager
400 confcommand clipmanager clipmenud
401
402 # user declared autostart
403 if [ -e ~/.instantautostart ]; then
404     bash ~/.instantautostart
405 fi &
406
407 # update notifier
408 if ! iconf -i noupdates; then
409     sleep 2m
410     if checkinternet; then
411         instantupdatenotify
412     else
413         if command -v checkinternet; then
414             while :; do
415                 sleep 5m
416                 if checkinternet; then
417                     instantupdatenotify
418                     break
419                 fi
420             done
421         fi
422     fi
423 fi