#!/bin/sh # # Check for pre-existing dirs EXIT_FLAG=0 LOG_ANSI="\033[1m" for dir in $HOME/.fonts $HOME/.xinitrc $HOME/.dwm $HOME/dwm $HOME/.mkshrc $HOME/.tmux.conf; do if [ -e "$dir" ] || [ -d "$dir" ]; then echo $LOG_ANSI"Please [re]move $dir\033[0m" EXIT_FLAG=1 fi done [ $EXIT_FLAG -ne 0 ] && exit 1; # Builds a project that has a makefile make_make(){ local path="$1" cd "$path" echo $LOG_ANSI"Installing $1\033[0m (requires sudo)" sudo make install if [ $? -ne 0 ]; then echo $LOG_ANSI"Error occurred building: $1\033[0m" exit 1; fi cd - } # Catches errors when cloning safe_git_clone(){ local url="$1" git clone "$url" if [ $? -ne 0 ]; then echo $LOG_ANSI"Failed to clone $url\033[0m" exit 1; fi } # Symbolically links files with a few # extra saftey checks. safe_ln(){ local a="$1" b="$2" [ "$3" = "--make-dir" ] && mkdir -p "$b" ln -s "$a" "$b" if [ $? -ne 0 ]; then echo $LOG_ANSI"Failed to link $a to $b\033[0m" exit 1; else echo $LOG_ANSI"Linked $a to $b\033[0m"; fi } safe_pip3(){ local package="$1" pip3 install "$package" if [ $? -ne 0 ]; then echo $LOG_ANSI"Failed to install $package\033[0m" else echo $LOG_ANSI"Installed $package\033[0m"; fi } # Download the rice source cd $HOME safe_git_clone "https://github.com/x3hy/dwm" mv dwm .dwm cd .dwm/source # Build packaged source code make_make dwm make_make st make_make dmenu # Download and install unclutter if not installed if ! command -v "unclutter" >/dev/null 2>&1; then safe_git_clone https://github.com/Airblader/unclutter-xfixes make_make unclutter-xfixes else echo $LOG_ANSI"Skipping unclutter \033[0m(already installed)"; fi # Download and install hellwal if not installed if ! command -v "hellwal" >/dev/null 2>&1; then safe_git_clone https://github.com/danihek/hellwal/ make_make hellwal else echo $LOG_ANSI"Skipping hellwal \033[0m(already installed)"; fi if ! command -v "sxot" >/dev/null 2>&1; then echo $LOG_ANSI"Installing sxot\033[0m" safe_git_clone https://codeberg.org/NRK/sxot cd sxot cc -o sxot sxot.c -O3 -s -l X11 -l Xfixes sudo install -Dm755 sxot /usr/local/bin/sxot sudo install -Dm644 sxot.1 /usr/local/share/man/man1/sxot.1 cd - else echo $LOG_ANSI"Skipping sxot \033[0m(already installed)"; fi if ! command -v "selx" >/dev/null 2>&1; then echo $LOG_ANSI"Installing selx\033[0m" safe_git_clone https://codeberg.org/NRK/selx cd selx cc -o selx selx.c -O3 -s -l X11 -l Xrandr sudo install -Dm755 selx /usr/local/bin/selx sudo install -Dm644 selx.1 /usr/local/share/man/man1/selx.1 cd - else echo $LOG_ANSI"Skipping selx \033[0m(already installed)"; fi # Move into config folder cd ../config # Install statnot if ! which "statnot" >/dev/null 2>&1 ; then sudo ln -s $HOME/.dwm/source/statnot/statnot /usr/local/bin/statnot if [ $? -ne 0 ]; then echo $LOG_ANSI"Failed to link statnot\033[0m" exit 1; else echo $LOG_ANSI"Installed statnot\033[0m"; fi python3 -c "import dbus" >/dev/null 2>&1 if [ $? -ne 0 ]; then safe_pip3 "dbus-python" safe_pip3 "pygobject" safe_pip3 "psutil" fi fi # Link various configs safe_ln $HOME/.dwm/config/mkshrc $HOME/.mkshrc safe_ln $HOME/.dwm/config/xinitrc $HOME/.xinitrc safe_ln $HOME/.dwm/config/tmux.conf $HOME/.tmux.conf safe_ln $HOME/.dwm/config/fonts $HOME/.fonts touch $HOME/.mksh_history echo $LOG_ANSI"Reloading font cache\033[0m" fc-cache -fv >/dev/null # Return to the ~.dwm dir cd .. echo "" echo $LOG_ANSI"Install the following system packages:" echo "NAME | DESCRIPTION" echo "playerctl | MRPIS reader used in the statusbar" echo "picom | Compositor for fancy visual effects" echo "ImageMagick | Image utility, used for screenshots" echo "feh | Used to set the desktop background\033[0m"