3 ###############################################
4 ## script for instantOS autostart ##
5 ###############################################
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"
12 echo "running update hooks"
13 /usr/share/instantutils/userinstall.sh
14 iconf -i userinstall 1
15 iconf version "$INSTANTVERSION"
19 # architecture detection
21 if uname -m | grep -q '^arm'; then
25 if iconf -i noautostart; then
26 echo "autostart disabled"
30 if [ "$(ps aux | grep bash | grep instantautostart | wc -l)" -gt 3 ]; then
31 echo "already running"
39 command -v instantdotfiles && instantdotfiles
41 if ! iconf -i rangerplugins && command -v rangerplugins; then
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
49 # find out if it's a live session
50 if [ -e /usr/share/liveutils ] &>/dev/null; then
52 echo "live session detected"
55 if iconf -i islaptop; then
56 export ISLAPTOP="true"
57 echo "laptop detected"
63 if [ -n "$ISLIVE" ]; then
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
80 if [ -n "$ISRASPI" ]; then
81 # enable double drawing for moving floating windows
82 # greatly increases smoothness
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
93 if ! iconf -i notheming; then
96 iconf -i instantthemes 1
98 # dynamically switch between light and dark gtk theme
100 if [ "$DATEHOUR" -gt "20" ] || [ "$DATEHOUR" -lt "7" ]; then
102 touch /tmp/instantdarkmode
103 [ -e /tmp/instantlightmode ] && rm /tmp/instantlightmode
106 touch /tmp/instantlightmode
107 [ -e /tmp/instantdarkmode ] && rm /tmp/instantdarkmode
110 touch /tmp/instantlightmode
113 mkdir -p /tmp/notifications &>/dev/null
114 if ! pgrep dunst; then
116 # wait for theming before starting dunst
117 if [ -e /tmp/instantdarkmode ] || [ -e /tmp/instantlightmode ]; then
128 # set up oh-my-zsh config if not existing already
129 iconf -i nozsh || instantshell &
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
136 if lshw -c video | grep -i 'qxl' || xrandr | grep -i '^qxl'; then
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
149 if ! imenu -c "ask again next time?"; then
159 if ! [ -e /opt/instantos/guestadditions ]; then
160 if lsmod | grep -q vboxguest; then
161 echo "guestadditions detected"
163 if echo "virtual machine detected.
164 Would you like to switch to a 1080p resolution?" | imenu -C; then
165 echo "applying virtual machine workaround"
166 /usr/share/instantassist/assists/t/v.sh
168 if [ -z "$ISLIVE" ]; then
169 if ! imenu -c "ask again next session"; then
179 echo "not a live session"
180 if [ -e /opt/instantos/installtrigger ]; then
181 zenity --info --text "finishing installation in background" &
183 # ask for password if postinstall already ran
184 if ! timeout 2 sudo echo test; then
185 instantsudo instantpostinstall
186 sudo rm /opt/instantos/installtrigger
188 sudo instantpostinstall
194 cd ~/instantos || exit 1
195 if ! iconf -i max; then
199 if [ -e ~/instantos/monitor.sh ]; then
200 echo "restoring resolution"
201 bash ~/instantos/monitor.sh &
202 elif [ -e ~/.config/autorandr/instantos/config ]; then
203 echo "restoring autorandr resolution"
204 autorandr instantos &
207 if checkinternet; then
210 # fall back to already installed wallpapers
211 instantwallpaper offline
212 for i in $(seq 10); do
213 if checkinternet; then
222 # apply keybpard layout
223 if iconf layout; then
224 setxkbmap -layout "$(iconf layout)"
226 CURLOCALE=$(locale | grep LANG | sed 's/.*=\(.*\)\..*/\1/')
232 echo "no keyboard layout found for your locale"
238 if iconf mousespeed; then
239 echo "setting mousespeed"
240 instantmouse s "$(iconf mousespeed)"
243 if iconf -i reversemouse; then
249 if ! iconf -i noconky; then
250 shuf /usr/share/instantwidgets/tooltips.txt | head -1 >~/.cache/tooltip
251 conky -c /usr/share/instantwidgets/tooltips.conf &
255 echo "live session detected"
258 echo "disabling compositing for qxl graphics"
259 if lshw -c video | grep -i 'qxl' || xrandr | grep -i '^qxl'; then
263 sudo systemctl start NetworkManager
266 iconf -i wifiapplet 1
267 instantwallpaper set /usr/share/instantwallpaper/defaultphoto.png
268 conky -c /usr/share/instantwidgets/install.conf &
271 if ! pgrep python; then
279 # make built in status optional
280 if ! iconf -i nostatus; then
281 source /usr/bin/instantstatus &
285 HEIGHT=$(iconf max | grep -o '[0-9]*$')
286 WIDTH=$(iconf max | grep -o '^[0-9]*')
287 RESOLUTION="$((HEIGHT * WIDTH))"
288 DPIMESSAGE="HiDpi settings can be found in settings->display->dpi"
289 if ! imenu -C <<<"high resolution display detected
290 would you like to enable HiDpi?"; then
291 if imenu -c "ask again next time?"; then
295 imenu -m "$DPIMESSAGE"
299 DPI=$(imenu -i 'enter dpi (default is 96)')
300 while ! [ "$DPI" -eq "$DPI" ] || [ "$DPI" -gt 500 ] || [ "$DPI" -lt "20" ]; do
301 imenu -m "please enter a number between 20 and 500 (default is 96), enter q to skip hidpi"
302 DPI=$(imenu -i 'enter dpi (default is 96)')
303 if grep -q 'q' <<<"$DPI"; then
304 imenu -m "$DPIMESSAGE"
313 imenu -m "a restart is needed to globally apply dpi"
317 if ! iconf -i nohidpi && iconf max; then
318 if [ "$RESOLUTION" -gt 8294000 ]; then
324 if iconf -i potato || iconf -i nocompositing; then
325 echo "compositing disabled"
335 xfce4-power-manager &
337 # auto open menu when connecting/disconnecting monitor
338 if ! (iconf -i noautoswitch && iconf -i islaptop) || iconf -i autoswitch; then
340 if nvidia-xconfig --query-gpu-info; then
341 DISPLAYCOUNT="$(nvidia-xconfig --query-gpu-info | grep -oi 'number of dis.*' | grep -o '[0-9]*')"
343 DISPLAYCOUNT="$(xrandr | grep -c '[^s]connected')"
346 if [ "$DISPLAYCOUNT" -eq "$DISPLAYCOUNT" ]; then
348 NEWDISPLAYCOUNT="$(xrandr | grep -c '[^s]connected')"
349 if ! [ "$DISPLAYCOUNT" = "$NEWDISPLAYCOUNT" ]; then
350 notify-send "display changed"
351 echo "displays changed"
352 if [ "$NEWDISPLAYCOUNT" -gt 1 ]; then
354 echo "multi monitor setup"
358 DISPLAYCOUNT="$NEWDISPLAYCOUNT"
364 echo "error detecting display count"
369 if iconf -b welcome; then
373 # prompt to fix configuration if installed from the AUR
374 if ! iconf -i norootinstall && ! islive; then
375 if ! command -v imenu || ! command -v instantmenu; then
376 notify-send "please install instantmenu and imenu"
378 if ! [ -e /opt/instantos/rootinstall ]; then
379 imenu -m "instantOS is missing some configuration"
380 while ! [ -e /tmp/rootskip ]; do
381 if imenu -c "would you like to fix that?"; then
382 touch /tmp/topinstall
383 instantsudo bash -c "instantutils root"
386 if imenu -c "Are you sure? this will prevent parts of instantOS from functioning correctly"; then
396 TODAY="$(date '+%d%m')"
397 OTHERTODAY="$(iconf today)"
399 if [ -z "$OTHERTODAY" ]; then
400 iconf today "$(date '+%d%m')"
401 OTHERTODAY="$(iconf today)"
404 if ! [ "$TODAY" = "$OTHERTODAY" ]; then
405 iconf today "$(date '+%d%m')"
406 echo "running daily routine"
410 # displays message user opens the terminal for the first time
411 if ! iconf -i nohelp; then
412 if ! grep -q 'instantterminalhelp' ~/.zshrc; then
413 echo '[[ $- == *i* ]] && instantterminalhelp' >>~/.zshrc
418 [ -n "$2" ] || return
419 iconf -i "$1" || return
423 # run command if iconf option is set
425 if iconf -i "$1"; then
431 if iconf savebright; then
432 export NOBRIGHTMESSAGE=true
433 /usr/share/instantassist/utils/b.sh 2 "$(iconf savebright)"
436 confkey highfps "super+alt+shift+d"
437 confkey noanimations "super+alt+shift+s"
438 # disable wm alttab for graphical alttab
439 confkey alttab "super+alt+control+shift+Tab"
442 confcommand desktopicons rox --pinboard Default
444 confcommand udiskie udiskie -t
446 confcommand clipmanager clipmenud
448 # user declared autostart
449 if [ -e ~/.config/instantos/autostart.sh ]; then
450 bash ~/.config/instantos/autostart.sh
454 if ! iconf -i noupdates && [ -z "$ISLIVE" ]; then
456 if checkinternet; then
459 if command -v checkinternet; then
462 if checkinternet; then
471 # start processes that need to be kept running
474 if iconf -i wifiapplet && ! pgrep nm-applet; then
475 echo "starting bluetooth applet"
479 if iconf -i bluetoothapplet && ! pgrep blueman-applet; then
480 echo "starting bluetooth applet"
484 if iconf -i alttab && ! pgrep alttab; then
485 alttab -fg "#ffffff" -bg "#292F3A" -frame "#5293E1" -d 0 -s 1 -t 128x150 -i 127x64 -w 1 -vp pointer &