sinstaller (2934B)
1 #!/bin/bash 2 3 source ~/.config/scripts/properties 4 5 all=0 6 save_diff=0 7 while getopts "as" arg; do 8 case $arg in 9 a) all=1;; 10 s) save_diff=1;; 11 esac 12 done 13 14 shift $((OPTIND-1)) 15 16 program=$1 17 18 readonly ROOT_DIR=$HOME/repositories/suckless 19 readonly GIT_BASE_URL=https://git.suckless.org 20 21 PROGRAMS=( 22 "dmenu" 23 "dwm" 24 "dwmstatus" 25 "ii" 26 "libgrapheme" 27 "lchat" 28 "sic" 29 "slock" 30 "st" 31 "surf" 32 ) 33 34 PATCHES=( 35 "st;https://st.suckless.org/patches/alpha_focus_highlight/st-focus-20230610-68d1ad9.diff" 36 "st;https://st.suckless.org/patches/scrollback/st-scrollback-0.8.5.diff" 37 "dwm;https://dwm.suckless.org/patches/statuspadding/dwm-statuspadding-6.3.diff" 38 "dwm;https://dwm.suckless.org/patches/alpha/dwm-fixborders-6.2.diff" 39 "slock;https://tools.suckless.org/slock/patches/background-image/slock-background-image-20220318-1c5a538.diff" 40 "surf;https://surf.suckless.org/patches/homepage/surf-2.0-homepage.diff" 41 "surf;https://surf.suckless.org/patches/playexternal/surf-playexternal-20190724-b814567.diff" 42 "surf;https://surf.suckless.org/patches/quit-hotkey/surf-quit_hotkey-20210830-11dca18.diff" 43 ) 44 45 download(){ 46 declare -r PROGRAM=$1 47 48 mkdir -p "${ROOT_DIR}" 49 mkdir -p "${ROOT_DIR}/patches/$PROGRAM" 50 51 cd "${ROOT_DIR}" 52 53 git clone "${GIT_BASE_URL}/$PROGRAM" 54 cd $PROGRAM 55 git checkout -b patched 56 57 download_patches "$PROGRAM" 58 } 59 60 download_patches(){ 61 declare -r PROGRAM=$1 62 rm "$ROOT_DIR/patches/$PROGRAM/"* 63 i=0 64 for patch in "${PATCHES[@]}" 65 do 66 name=$(echo "$patch" | cut -f1 -d ';') 67 68 if [[ "${name}" == "${PROGRAM}" ]]; then 69 ((i++)) 70 patch_url=$(echo "$patch" | cut -f2 -d ';') 71 curl "$patch_url" > "$ROOT_DIR/patches/$PROGRAM/$i-${patch_url##*/}" 72 fi 73 done 74 } 75 76 cleanup_and_patch(){ 77 declare -r PROGRAM=$1 78 cd "${ROOT_DIR}/$PROGRAM" 79 80 git checkout patched 81 82 git reset --hard HEAD 83 git clean -xf 84 85 git checkout surf-webkit2 86 git checkout master 87 git pull 88 89 git branch -D patched 90 git checkout -b patched 91 92 for file in "$ROOT_DIR/patches/$PROGRAM/"*; do 93 test -f $file || continue; 94 patch -i $file 95 done 96 97 git add . 98 git -c commit.gpgsign=false commit -m "patched" 99 } 100 101 patch_config(){ 102 declare -r PROGRAM=$1 103 cd "${ROOT_DIR}/$PROGRAM" 104 105 git checkout patched 106 107 config_file="$ROOT_DIR/patches-config/$PROGRAM-config.diff" 108 test -f "$config_file" && patch -i "$config_file" 109 } 110 111 112 save_config(){ 113 declare -r PROGRAM=$1 114 cd "${ROOT_DIR}/$PROGRAM" 115 git diff > "$ROOT_DIR/patches-config/$PROGRAM-config.diff" 116 } 117 118 execute_installer(){ 119 declare -r PROGRAM=$1 120 121 [[ ! -d "${ROOT_DIR}/$PROGRAM" ]] && download $PROGRAM 122 test "$save_diff" == 1 && save_config $PROGRAM 123 cleanup_and_patch $PROGRAM 124 patch_config $PROGRAM 125 126 cd "${ROOT_DIR}/$PROGRAM" 127 sudo make clean install 128 } 129 130 test "$all" == 0 && [ -z $program ] && notify-send "Insufficient parameters" "Either use -a for all or specifify program as arg." && exit 1; 131 132 if [[ "$all" == 1 ]]; then 133 for i in "${PROGRAMS[@]}" 134 do 135 execute_installer $i 136 done 137 else 138 execute_installer $program 139 fi