OSDN Git Service

default editor setting
[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         ipicom &
281 fi
282
283 while :; do
284         lxpolkit
285         sleep 10
286 done &
287
288 xfce4-power-manager &
289
290 # start processes that need to be kept running
291 while :; do
292         sleep 10
293         if iconf -i wifiapplet && ! pgrep nm-applet; then
294                 echo "starting bluetooth applet"
295                 nm-applet &
296         fi
297
298         if iconf -i bluetoothapplet && ! pgrep blueman-applet; then
299                 echo "starting bluetooth applet"
300                 blueman-applet &
301         fi
302
303         if iconf -i alttab && ! pgrep alttab; then
304                 alttab -fg "#ffffff" -bg "#292F3A" -frame "#5293E1" -d 0 -s 1 -t 128x150 -i 127x64 -w 1 -vp pointer &
305         fi
306         sleep 2m
307
308 done &
309
310 # auto open menu when connecting/disconnecting monitor
311 if ! (iconf -i noautoswitch && iconf -i islaptop) || iconf -i autoswitch; then
312         DISPLAYCOUNT="$(xrandr | grep -c '[^s]connected')"
313         if [ "$DISPLAYCOUNT" -eq "$DISPLAYCOUNT" ]; then
314                 while :; do
315                         NEWDISPLAYCOUNT="$(xrandr | grep -c '[^s]connected')"
316                         if ! [ "$DISPLAYCOUNT" = "$NEWDISPLAYCOUNT" ]; then
317                                 notify-send "display changed"
318                                 echo "displays changed"
319                                 if [ "$NEWDISPLAYCOUNT" -gt 1 ]; then
320                                         instantdisper
321                                         echo "multi monitor setup"
322                                 else
323                                         disper -e
324                                 fi
325                                 DISPLAYCOUNT="$NEWDISPLAYCOUNT"
326                                 # todo: open menu
327                         fi
328                         sleep 10
329                 done &
330         else
331                 echo "error detecting display count"
332         fi
333 fi
334
335 # welcome app
336 if iconf -b welcome; then
337         instantwelcome
338 fi &
339
340 # prompt to fix configuration if installed from the AUR
341 if ! iconf -i norootinstall && ! islive; then
342         if ! command -v imenu || ! command -v instantmenu; then
343                 notify-send "please install instantmenu and imenu"
344         else
345                 if ! [ -e /opt/instantos/rootinstall ]; then
346                         imenu -m "instantOS is missing some configuration"
347                         while ! [ -e /tmp/rootskip ]; do
348                                 if imenu -c "would you like to fix that?"; then
349                                         touch /tmp/topinstall
350                                         instantsudo bash -c "instantutils root"
351                                         touch /tmp/rootskip
352                                 else
353                                         if imenu -c "Are you sure? this will prevent parts of instantOS from functioning correctly"; then
354                                                 touch /tmp/rootskip
355                                         fi
356                                 fi
357
358                         done
359                 fi
360         fi
361 fi
362
363 # displays message user opens the terminal for the first time
364 if ! iconf -i nohelp; then
365         if ! grep -q 'instantterminalhelp' ~/.zshrc; then
366                 echo '[[ $- == *i* ]] && instantterminalhelp' >>~/.zshrc
367         fi
368 fi
369
370 confkey() {
371         [ -n "$2" ] || return
372         iconf -i "$1" || return
373         xdotool key "$2"
374 }
375
376 # run command if iconf option is set
377 confcommand() {
378         if iconf -i "$1"; then
379                 shift 1
380                 "$@"
381         fi &
382 }
383
384 confkey highfps "super+alt+shift+d"
385 confkey noanimations "super+alt+shift+s"
386 # disable wm alttab for graphical alttab
387 confkey alttab "super+alt+control+shift+Tab"
388
389 # desktop icons
390 confcommand desktopicons rox --pinboard Default
391 # auto mount disks
392 confcommand udiskie udiskie -t
393 # clipboard manager
394 confcommand clipmanager clipmenud
395
396 # user declared autostart
397 if [ -e ~/.instantautostart ]; then
398         bash ~/.instantautostart
399 fi &
400
401 # update notifier
402 if ! iconf -i noupdates; then
403         sleep 2m
404         if checkinternet; then
405                 instantupdatenotify
406         else
407                 if command -v checkinternet; then
408                         while :; do
409                                 sleep 5m
410                                 if checkinternet; then
411                                         instantupdatenotify
412                                         break
413                                 fi
414                         done
415                 fi
416         fi
417 fi