OSDN Git Service

reorder package installations
[instantos/instantOS.git] / install.sh
1 #!/usr/bin/env bash
2
3 #############################################
4 ## installs all paperbenni suckless forks  ##
5 ## made for personal use, so be warned ;)  ##
6 #############################################
7
8 echo "installing paperbenni's suckless suite"
9
10 source <(curl -s https://raw.githubusercontent.com/paperbenni/bash/master/import.sh)
11 pb install
12 pb git
13
14 LINK="https://raw.githubusercontent.com/paperbenni/suckless/master"
15
16 cat /etc/os-release | grep -Eiq 'name.*(arch|manjaro|ubuntu)' || exit
17
18 if cat /etc/os-release | grep -iq 'name.*arch' ||
19     cat /etc/os-release | grep -iq 'name.*manjaro'; then
20     pacinstall() {
21         for i in "$@"; do
22             { pacman -iQ "$i" || command -v "$i" &>/dev/null; } &>/dev/null && continue
23             sudo pacman -S --noconfirm "$i"
24         done
25     }
26     echo "setting up arch specific stuff"
27
28     sudo pacman -Syu --noconfirm
29
30     # utilities
31     pacinstall picom
32     pacinstall rofi
33     pacinstall dunst
34
35     pacinstall bash dash tmux
36     pacinstall dialog
37     pacinstall wget slop
38     pacinstall acpi
39     pacinstall cpio
40
41     aptinstall git
42     aptinstall subversion
43
44     pacinstall ffmpeg
45     pacinstall feh
46     pacinstall mpv
47
48     pacinstall wmctrl
49     pacinstall xdotool
50     pacinstall xrandr
51     pacinstall xorg-xsetroot
52
53     pacinstall conky
54     pacinstall ranger
55     pacinstall fzf
56     pacinstall sl
57
58     pacinstall xorg-fonts-misc
59     pacinstall lxappearance
60
61     if ! command -v panther_launcher; then
62         wget "https://www.rastersoft.com/descargas/panther_launcher/panther_launcher-1.12.0-1-x86_64.pkg.tar.xz"
63         sudo pacman -U --noconfirm panther_launcher*.pkg.tar.xz
64         rm panther_launcher*.pkg.tar.xz
65     fi
66
67 fi
68
69 # ubuntu specific stuff
70 if grep -iq 'name.*ubuntu' </etc/os-release; then
71
72     sudo apt-get update
73     sudo apt-get upgrade -y
74
75     aptinstall() {
76         for i in "$@"; do
77             { dpkg -l "$i" || command -v "$i" &>/dev/null; } &>/dev/null && continue
78             sudo apt-get install -y "$i"
79         done
80     }
81
82     aptinstall compton
83
84     aptinstall git
85     aptinstall subversion
86
87     aptinstall bash dash tmux
88     aptinstall dialog
89     aptinstall wget
90
91     aptinstall slop
92     aptinstall rofi
93     aptinstall dunst
94
95     aptinstall acpi
96     aptinstall xrandr
97     aptinstall x11-xserver-utils
98
99     aptinstall ffmpeg
100     aptinstall feh
101     aptinstall mpv
102
103     aptinstall cpio
104
105     aptinstall fzf
106     aptinstall ranger
107     aptinstall conky
108     aptinstall sl
109
110     aptinstall lxappearance
111
112     if ! command -v panther_launcher; then
113         wget "https://www.rastersoft.com/descargas/panther_launcher/panther-launcher-xenial_1.12.0-ubuntu1_amd64.deb"
114         sudo dpkg -i panther-launcher*.deb
115         sudo apt-get install -fy
116         rm panther-launcher*.deb
117     fi
118 fi
119
120 gprogram() {
121     wget "https://raw.githubusercontent.com/paperbenni/suckless/master/programs/$1"
122     usrbin -f "$1"
123 }
124
125 if [ "$1" = "dotfiles" ]; then
126     shift 1
127     DOTFILES="True"
128 fi
129
130 THEME="${1:-dracula}"
131 echo "using theme $THEME"
132 [ -e ~/paperbenni ] || mkdir ~/paperbenni
133 echo "$THEME" >~/paperbenni/.theme
134
135 rm -rf suckless
136 mkdir suckless
137 cd suckless
138
139 gitclone dwm
140 gitclone dmenu
141 gitclone st
142
143 # needed for slock
144 if grep -q 'nobody' </etc/groups || grep -q 'nobody' </etc/group; then
145     echo "nobody workaround not required"
146 else
147     sudo groupadd nobody
148 fi
149
150 # add group and add user to group
151 ugroup() {
152     if groups | grep -q "$1"; then
153         echo "user is member of $1"
154         return
155     else
156         sudo groupadd "$1"
157         sudo gpasswd -a $USER $1
158     fi
159 }
160
161 ugroup video
162 ugroup input
163
164 gitclone slock
165
166 # install cursors for themes
167 if ! [ -e ~/.icons/osx ]; then
168     curl -s https://raw.githubusercontent.com/paperbenni/cursors/master/install.sh | bash
169 fi
170
171 # session for lightdm
172 wget https://raw.githubusercontent.com/paperbenni/suckless/master/dwm.desktop
173 sudo mv dwm.desktop /usr/share/xsessions/
174
175 # x session wrapper
176 gprogram startdwm
177 # shutdown popup that breaks restart loop
178 gprogram sucklessshutdown
179
180 gprogram autoclicker
181
182 # dmenu run but in terminal emulator st
183 # only supported terminal apps (less to search through)
184 gprogram dmenu_run_st
185
186 gprogram dswitch
187 gprogram pbnotify
188
189 # for that extra kick when doingg a typo
190 gprogram sll
191
192 curl "$LINK/termprograms.txt" >~/.cache/termprograms.txt
193
194 for FOLDER in ./*; do
195     if ! [ -d "$FOLDER" ]; then
196         echo "skipping $FOLDER"
197         continue
198     fi
199     pushd "$FOLDER"
200     if ! [ -e build.sh ]; then
201         rm config.h
202         make
203         sudo make install
204     else
205         chmod +x ./build.sh
206         ./build.sh "$THEME"
207     fi
208     popd
209 done
210
211 # install dotfiles like bash,git and tmux config
212 if [ -n "$DOTFILES" ]; then
213     curl https://raw.githubusercontent.com/paperbenni/dotfiles/master/install.sh | bash
214 fi
215
216 if ! [ ~/.local/share/fonts/symbola.ttf ]; then
217     mkdir -p ~/.local/share/fonts
218     cd ~/.local/share/fonts
219     wget "http://symbola.surge.sh/symbola.ttf"
220 fi
221
222 cd
223
224 # laptop specific stuff
225 if acpi | grep -q '[0-9]%'; then
226     # config file to indicate being a laptop
227     touch .cache/islaptop
228
229     # fix tap to click not working with tiling wms
230     if ! [ -e /etc/X11/xorg.conf.d/90-touchpad.conf ] ||
231         ! cat /etc/X11/xorg.conf.d/90-touchpad.conf | grep -iq 'tapping.*"on"'; then
232
233         sudo mkdir -p /etc/X11/xorg.conf.d && sudo tee /etc/X11/xorg.conf.d/90-touchpad.conf <<'EOF' 1>/dev/null
234 Section "InputClass"
235         Identifier "touchpad"
236         MatchIsTouchpad "on"
237         Driver "libinput"
238         Option "Tapping" "on"
239 EndSection
240
241 EOF
242     fi
243
244 fi
245
246 curl -s "https://raw.githubusercontent.com/paperbenni/suckless/master/monitor.sh" | bash
247 cd
248
249 # three and four finger swipes on laptop
250 if ! command -v libinput-gestures &>/dev/null; then
251     cd /tmp
252     git clone --depth=1 https://github.com/bulletmark/libinput-gestures.git
253     cd libinput-gestures
254     sudo make install
255     cd ..
256     rm -rf libinput-gestures
257 fi
258
259 cd
260
261 # auto start script with dwm
262 ls .dwm &>/dev/null || mkdir .dwm
263 curl $LINK/autostart.sh >.dwm/autostart.sh
264 chmod +x .dwm/autostart.sh
265
266 # set up multi monitor config for dswitch
267 if ! [ -e paperbenni/ismultimonitor ]; then
268     if xrandr | grep ' connected' | grep -Eo '[0-9]{3,}x' |
269         grep -o '[0-9]*' | wc -l | grep '2'; then
270         mkdir paperbenni &>/dev/null
271         xrandr | grep ' connected' | grep -Eo '[0-9]{3,}x' |
272             grep -o '[0-9]*' >paperbenni/ismultimonitor
273         echo "$(wc -l paperbenni/ismultimonitor) monitors detected"
274     else
275         echo "not a multi monitor setup"
276     fi
277 else
278     echo "monitor config: "
279     cat paperbenni/ismultimonitor
280     echo ""
281 fi
282
283 cd
284
285 # install wmutils
286 if ! command -v pfw &>/dev/null; then
287     cd /tmp
288     if git clone --depth=1 https://github.com/wmutils/core.git; then
289         cd core
290         make
291         sudo make install
292         cd ..
293         rm -rf core
294     fi
295 fi
296
297 cd
298
299 # install win + a menus for shortcuts like screenshots and shutdown
300 curl https://raw.githubusercontent.com/paperbenni/menus/master/install.sh | bash
301
302 # drag and drop x utility for ranger
303 if ! command -v dragon &>/dev/null; then
304     cd /tmp
305     git clone --depth=1 https://github.com/mwh/dragon.git
306     cd dragon
307     make
308     make install
309     cd ..
310     rm -rf dragon
311 fi
312
313 cd
314 mkdir paperbenni &>/dev/null
315
316 # automatic wallpaper changer
317 # uses reddit r/wallpaper scraper
318 if [ "$2" = "rwall" ]; then
319     cd /tmp
320     gitclone rwallpaper
321     cd rwallpaper
322     mv rwallpaper.py ~/paperbenni/
323     chmod +x wallpaper.sh
324     mv wallpaper.sh ~/paperbenni/
325     sudo pip3 install -r requirements.txt
326     cd ..
327     rm -rf rwallpaper
328 fi
329
330 cd
331
332 # set dwm as default for lightdm
333 echo '[Desktop]' >.dmrc
334 echo 'Session=dwm' >>.dmrc
335 if [ -e /etc/lightdm/lightdm.conf ]; then
336     sudo sed -i 's/^user-session=.*/user-session=dwm/g' /etc/lightdm/lightdm.conf
337 fi
338
339 # install things like fonts or gtk theme
340 if ! [ -e .config/paperthemes/$THEME.txt ]; then
341     echo "installing theme"
342     curl -s "https://raw.githubusercontent.com/paperbenni/suckless/master/themes/$THEME.sh" | bash
343     mkdir .config/paperthemes
344     touch .config/paperthemes/$THEME.txt
345 else
346     echo "theme installation already found"
347 fi
348
349 # fix java gui appearing empty on dwm
350 if ! grep 'dwm' </etc/profile; then
351     echo "fixing java windows for dwm in /etc/profile"
352     echo '# fix dwm java windows' | sudo tee -a /etc/profile
353     echo 'export _JAVA_AWT_WM_NONREPARENTING=1' | sudo tee -a /etc/profile
354 else
355     echo "java workaround already applied"
356 fi