OSDN Git Service

Merge branch 'master' of https://github.com/instantos/instantOS
[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 && cat /proc/cpuinfo | grep -q hypervisor; 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         if echo "virtual machine detected.
148 Would you like to switch to a 1080p resolution?" | imenu -C; then
149                 echo "applying virtual machine workaround"
150                 /opt/instantos/menus/dm/tv.sh
151         else
152                 if ! imenu -c "ask again next session"; then
153                         iconf -i novmfix 1
154                 fi
155         fi
156 fi
157
158 if ! islive; then
159         echo "not a live session"
160         if [ -e /opt/instantos/installtrigger ]; then
161                 zenity --info --text "finishing installation in background" &
162
163                 # ask for password if postinstall already ran
164                 if ! timeout 2 sudo echo test; then
165                         instantsudo instantpostinstall
166                         sudo rm /opt/instantos/installtrigger
167                 else
168                         sudo instantpostinstall
169                 fi
170
171                 pkill zenity
172         fi
173
174         cd ~/instantos
175         if ! iconf -i max; then
176                 instantmonitor
177         fi
178
179         if [ -e ~/instantos/monitor.sh ]; then
180                 bash ~/instantos/monitor.sh &
181         elif [ -e ~/.config/autorandr/instantos/config ]; then
182                 autorandr instantos &
183         fi
184
185         if checkinternet; then
186                 onlinetrigger
187         else
188                 # fall back to already installed wallpapers
189                 instantwallpaper offline
190                 for i in $(seq 10); do
191                         if checkinternet; then
192                                 onlinetrigger
193                                 break
194                         else
195                                 sleep 10
196                         fi
197                 done
198         fi &
199
200         # apply keybpard layout
201         if [ -e ~/instantos/keyboard ]; then
202                 setxkbmap -layout $(cat ~/instantos/keyboard)
203         else
204                 CURLOCALE=$(locale | grep LANG | sed 's/.*=\(.*\)\..*/\1/')
205                 case "$CURLOCALE" in
206                 de_DE)
207                         setxkbmap -layout de
208                         ;;
209                 *)
210                         echo "no keyboard layout found for your locale"
211                         ;;
212                 esac
213         fi
214
215         # read cursor speed
216         if iconf mousespeed; then
217                 echo "setting mousespeed"
218                 instantmouse s "$(iconf mousespeed)"
219         fi
220
221         if ! iconf -i noconky; then
222                 shuf /usr/share/instantwidgets/tooltips.txt | head -1 >~/.cache/tooltip
223                 conky -c /usr/share/instantwidgets/tooltips.conf &
224         fi
225
226 else
227         echo "live session detected"
228         instantmonitor
229
230         echo "disabling compositing for qxl graphics"
231         if lshw -c video | grep -i 'qxl' || xrandr | grep -i '^qxl'; then
232                 iconf -i potato 1
233         fi
234
235         iconf -b welcome 1
236         iconf -i wifiapplet 1
237         instantwallpaper set /usr/share/instantwallpaper/defaultphoto.png
238         conky -c /usr/share/instantwidgets/install.conf &
239         sleep 0.3
240         while :; do
241                 if ! pgrep python; then
242                         installapplet
243                 fi &
244                 sleep 6m
245         done &
246         sleep 1
247 fi
248
249 # make built in status optional
250 if ! iconf -i nostatus; then
251         source /usr/bin/instantstatus &
252 fi
253
254 iconf -i potato || ipicom &
255
256 lxpolkit &
257 xfce4-power-manager &
258
259 while iconf -i wifiapplet:; do
260         if ! pgrep nm-applet; then
261                 nm-applet &
262         fi
263         sleep 6m
264 done &
265
266 # welcome greeter app
267 if iconf -b welcome; then
268         instantwelcome
269 fi &
270
271 # prompt to fix configuration if installed from the AUR
272 if ! iconf -i norootinstall && ! islive; then
273         if ! command -v imenu || ! command -v instantmenu; then
274                 notify-send "please install instantmenu and imenu"
275         else
276                 if ! [ -e /opt/instantos/rootinstall ]; then
277                         imenu -m "instantOS is missing some configuration"
278                         while ! [ -e /tmp/rootskip ]; do
279                                 if imenu -c "would you like to fix that?"; then
280                                         touch /tmp/topinstall
281                                         instantsudo bash -c "instantutils root"
282                                         touch /tmp/rootskip
283                                 else
284                                         if imenu -c "Are you sure? this will prevent parts of instantOS from functioning correctly"; then
285                                                 touch /tmp/rootskip
286                                         fi
287                                 fi
288
289                         done
290                 fi
291         fi
292 fi
293
294 # displays message user opens the terminal for the first time
295 if ! iconf -i nohelp; then
296         if ! grep -q 'instantterminalhelp' ~/.zshrc; then
297                 echo '[[ $- == *i* ]] && instantterminalhelp' >>~/.zshrc
298         fi
299 fi
300
301 if iconf -i highfps; then
302         xdotool key super+alt+shift+d
303 fi
304
305 if iconf -i noanimations; then
306         xdotool key super+alt+shift+s
307 fi
308
309 # desktop icons
310 if iconf -i desktopicons; then
311         rox --pinboard Default
312 fi &
313
314 # user declared autostart
315 if [ -e ~/.instantautostart ]; then
316         bash ~/.instantautostart
317 fi