Cleanup :)

This commit is contained in:
2023-05-25 14:53:07 +02:00
parent 2c31034d73
commit 600bdd7538

140
kfg
View File

@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
NAME="kfg" NAME="kfg"
VERSION="0.5" VERSION="0.6"
HOME_PATH="$HOME" HOME_PATH="$HOME"
TMP_PATH="$HOME_PATH/.tmp/kfg_install" TMP_PATH="$HOME_PATH/.tmp/kfg_install"
@@ -44,7 +44,7 @@ function show_help_opt {
echo -en "opt := { echo -en "opt := {
${INFO}-h${ENDCOLOR} | ${INFO}--help${ENDCOLOR} \t\t Show this help, ${INFO}-h${ENDCOLOR} | ${INFO}--help${ENDCOLOR} \t\t Show this help,
${INFO}-y${ENDCOLOR} | ${INFO}--yes${ENDCOLOR} \t\t Skip confirmation questions, ${INFO}-y${ENDCOLOR} | ${INFO}--yes${ENDCOLOR} \t\t Skip confirmation questions,
${INFO}-a${ENDCOLOR} | ${INFO}--arch STRING${ENDCOLOR} \t Set the architecture string to be used when downloading files from repositories. Most common are "amd64", "arm64", "armhf", etc, ${INFO}-a${ENDCOLOR} | ${INFO}--arch STRING${ENDCOLOR} \t Set the architecture string to be used when downloading files from repositories. Most common are \"amd64\", \"arm64\", \"armhf\", etc,
${INFO}-d${ENDCOLOR} | ${INFO}--debug${ENDCOLOR}\t\t Print debug output, ${INFO}-d${ENDCOLOR} | ${INFO}--debug${ENDCOLOR}\t\t Print debug output,
}\n" }\n"
} }
@@ -62,20 +62,20 @@ function version {
} }
function log { function log {
color $1 "[$2]" color "$1" "[$2]"
echo "$3" echo "$3"
} }
function log_add { function log_add {
log $ADD "+" "$1" log "$ADD" "+" "$1"
} }
function log_info { function log_info {
log $INFO "*" "$1" log "$INFO" "*" "$1"
} }
function log_error { function log_error {
echo "$(log $ERROR "!" "$1")" >&2 log "$ERROR" "!" "$1" >&2
} }
function err { function err {
@@ -85,11 +85,11 @@ function err {
function log_debug { function log_debug {
if [ -z "$P_Debug" ]; then return 0; fi if [ -z "$P_Debug" ]; then return 0; fi
log $INFO "&" "$1" log "$INFO" "&" "$1"
} }
function ask { function ask {
color $ASK "[?]" color "$ASK" "[?]"
read -d '' -p "$1 [Y/n] " -N 1 -r read -d '' -p "$1 [Y/n] " -N 1 -r
} }
@@ -98,9 +98,9 @@ function color {
} }
function user_confirm { function user_confirm {
if [ ! -z "$P_Yes" ]; then return 0; fi if [ -n "$P_Yes" ]; then return 0; fi
ask "$1" ask "$1"
while [ true ]; do while true; do
if [[ ! $REPLY =~ ^[$'\n']$ ]]; then echo -e -n "\n"; fi if [[ ! $REPLY =~ ^[$'\n']$ ]]; then echo -e -n "\n"; fi
case $REPLY in case $REPLY in
[Yy$'\n']* ) return 0;; [Yy$'\n']* ) return 0;;
@@ -120,7 +120,7 @@ function download_config {
mkdir -p "$CONFIG_PATH/$1/" mkdir -p "$CONFIG_PATH/$1/"
contains_path="${2%*/*}" contains_path="${2%*/*}"
if [ -z $contains_path ]; then if [ -z "$contains_path" ]; then
mkdir -p "$CONFIG_PATH/$1/$contains_path/" mkdir -p "$CONFIG_PATH/$1/$contains_path/"
fi fi
@@ -191,7 +191,7 @@ function download {
need_cmd 'curl or wget' need_cmd 'curl or wget'
fi fi
if [ ! -z $_path ]; then if [ -n "$_path" ]; then
mkdir -p "$(dirname "$_path")" mkdir -p "$(dirname "$_path")"
log_info "Downloading $_url to $_path" log_info "Downloading $_url to $_path"
@@ -242,16 +242,17 @@ function github_install {
#log_debug "Packages: ${_package_urls}" #log_debug "Packages: ${_package_urls}"
# Check for Rust package # Check for Rust package
local _rust_package_url="$(echo "$_package_urls" | grep $_arch)" local _rust_package_url _other_package_url
local _other_package_url="$(echo "$_package_urls" | grep $ARCH | grep -vE "$APP_FILTER")" _rust_package_url="$(echo "$_package_urls" | grep "$_arch")"
_other_package_url="$(echo "$_package_urls" | grep "$ARCH" | grep -vE "$APP_FILTER")"
log_debug "Rust package: $_rust_package_url" log_debug "Rust package: $_rust_package_url"
log_debug "Filter: $APP_FILTER" log_debug "Filter: $APP_FILTER"
log_debug "Other package: $_other_package_url" log_debug "Other package: $_other_package_url"
if [ ! -z "$_other_package_url" ]; then if [ -n "$_other_package_url" ]; then
_package_url="${_other_package_url}" _package_url="${_other_package_url}"
elif [ ! -z "$_rust_package_url" ]; then elif [ -n "$_rust_package_url" ]; then
_package_url="${_rust_package_url}" _package_url="${_rust_package_url}"
else else
log_error "Can not find installable package for '$_program' for the detected architecture (${_arch})." log_error "Can not find installable package for '$_program' for the detected architecture (${_arch})."
@@ -279,7 +280,7 @@ function github_install {
download "$_package_url" "$_package" download "$_package_url" "$_package"
# unpack # unpack
cd "${TMP_PATH}" cd "${TMP_PATH}" || (log_error "Could not unpack ${_package}. The directory ${TMP_PATH} does not exist" && return 1)
case "${_package}" in case "${_package}" in
*.tar.gz) *.tar.gz)
need_cmd tar need_cmd tar
@@ -299,7 +300,7 @@ function github_install {
case "${_ext}" in case "${_ext}" in
tar.gz) tar.gz)
_binary="$(tar --list -f "${_package}" | grep -E "^(.*/)?$_program$")" _binary="$(tar --list -f "${_package}" | grep -E "^(.*/)?$_program$")"
log_debug $_binary log_debug "$_binary"
install_binary "$_program" "$TMP_PATH/$_binary" install_binary "$_program" "$TMP_PATH/$_binary"
return 0 return 0
;; ;;
@@ -309,13 +310,13 @@ function github_install {
;; ;;
zip) zip)
_binary="$(unzip -l "${_package}" | sed -E 's/ {1,}/ /g' | cut -d ' ' -f 5 | grep -E "^(.*/)?$_program$")" _binary="$(unzip -l "${_package}" | sed -E 's/ {1,}/ /g' | cut -d ' ' -f 5 | grep -E "^(.*/)?$_program$")"
log_debug $_binary log_debug "$_binary"
install_binary "$_program" "$TMP_PATH/$_binary" install_binary "$_program" "$TMP_PATH/$_binary"
return 0 return 0
;; ;;
*) *)
_binary="${_program}" _binary="${_program}"
log_debug $_binary log_debug "$_binary"
log_debug "Installing binary!" log_debug "Installing binary!"
install_binary "$_program" "$TMP_PATH/$_binary" install_binary "$_program" "$TMP_PATH/$_binary"
;; ;;
@@ -325,10 +326,10 @@ function github_install {
function install_deb_check { function install_deb_check {
CHECK_CURRENT=$(dpkg -s "$1" | grep -E "Status|Version") CHECK_CURRENT=$(dpkg -s "$1" | grep -E "Status|Version")
INSTALLED_CURRENT=$(echo $CHECK_CURRENT | grep -oE "Status: .*" | cut -d ' ' -f 2) #INSTALLED_CURRENT=$(echo $CHECK_CURRENT | grep -oE "Status: .*" | cut -d ' ' -f 2)
VERSION_CURRENT=$(echo $CHECK_CURRENT | grep -oE "Version: .*" | cut -d ' ' -f 2) VERSION_CURRENT=$(echo $CHECK_CURRENT | grep -oE "Version: .*" | cut -d ' ' -f 2)
CHECK_NEW=$(sudo dpkg -I $2 | grep -E "Status|Version") CHECK_NEW=$(sudo dpkg -I $2 | grep -E "Status|Version")
INSTALLED_NEW=$(echo $CHECK_NEW | grep -oE "Status: .*" | cut -d ' ' -f 2) #INSTALLED_NEW=$(echo $CHECK_NEW | grep -oE "Status: .*" | cut -d ' ' -f 2)
VERSION_NEW=$(echo $CHECK_NEW | grep -oE "Version: .*" | cut -d ' ' -f 2) VERSION_NEW=$(echo $CHECK_NEW | grep -oE "Version: .*" | cut -d ' ' -f 2)
if [ ! -z "$CHECK_CURRENT" ]; then if [ ! -z "$CHECK_CURRENT" ]; then
@@ -356,14 +357,14 @@ function install_deb {
return 1 return 1
fi fi
INSTALL=$(sudo dpkg -i $_file) INSTALL=$(sudo dpkg -i "$_file")
UNPACK=$(echo -n "$INSTALL" | grep -oE "Unpacking .*") UNPACK=$(echo -n "$INSTALL" | grep -oE "Unpacking .*")
PROG=$(echo -n $UNPACK | cut -d '(' -f 1 | cut -d ' ' -f 2) PROG=$(echo -n "$UNPACK" | cut -d '(' -f 1 | cut -d ' ' -f 2)
CURR_VERSION=$(echo -n $UNPACK | cut -d '(' -f 2 | cut -d ')' -f 1) CURR_VERSION=$(echo -n "$UNPACK" | cut -d '(' -f 2 | cut -d ')' -f 1)
PREV_VERSION=$(echo -n $UNPACK | cut -d '(' -f 3 | cut -d ')' -f 1) PREV_VERSION=$(echo -n "$UNPACK" | cut -d '(' -f 3 | cut -d ')' -f 1)
color $ADD "[+]" color "$ADD" "[+]"
echo -n "Installed $PROG ($CURR_VERSION)" echo -n "Installed $PROG ($CURR_VERSION)"
if [ ! -z ${PREV_VERSION+x} ]; then if [ -n "${PREV_VERSION+x}" ]; then
echo " over ($PREV_VERSION)" echo " over ($PREV_VERSION)"
else else
echo "" echo ""
@@ -380,16 +381,16 @@ function init {
# exit 0 # exit 0
# fi # fi
#fi #fi
if [ ! -z "$P_APT" ]; then if [ -n "$P_APT" ]; then
log_info "Running apt update ..." log_info "Running apt update ..."
sudo apt update > /dev/null 2>&1 sudo apt update > /dev/null 2>&1
fi fi
mkdir -p $TMP_PATH/ mkdir -p "$TMP_PATH/"
mkdir -p $CONFIG_PATH/ mkdir -p "$CONFIG_PATH/"
} }
function cleanup { function cleanup {
rm -R $TMP_PATH rm -R "$TMP_PATH"
} }
function apt_install { function apt_install {
@@ -404,7 +405,7 @@ function apt_install {
function github_latest { function github_latest {
VERSION=$(curl -I "https://github.com/$1/releases/latest/" 2> /dev/null | grep -iE "^Location:" | tr -s ' ' | cut -d '/' -f 8 2> /dev/null) VERSION=$(curl -I "https://github.com/$1/releases/latest/" 2> /dev/null | grep -iE "^Location:" | tr -s ' ' | cut -d '/' -f 8 2> /dev/null)
echo -n ${VERSION//[$'\t\r\n']} 2> /dev/null echo -n "${VERSION//[$'\t\r\n']}" 2> /dev/null
} }
function git_clone { function git_clone {
@@ -412,7 +413,7 @@ function git_clone {
log_debug "${CLONE}" log_debug "${CLONE}"
if [[ $CLONE =~ "already exists" ]] || [[ $CLONE =~ "existiert bereits" ]]; then if [[ $CLONE =~ "already exists" ]] || [[ $CLONE =~ "existiert bereits" ]]; then
log_debug "$1 already exists. Running 'git pull'." log_debug "$1 already exists. Running 'git pull'."
PULL=$(git -C "$2" pull) git -C "$2" pull > /dev/null 2>&1
log_info "Updated $1 in $2" log_info "Updated $1 in $2"
else else
log_add "Cloned $1 into $2" log_add "Cloned $1 into $2"
@@ -425,10 +426,10 @@ function install_binary {
if [ -z "$P_BINARY" ]; then return 0; fi if [ -z "$P_BINARY" ]; then return 0; fi
#log_info "Downloading $2 to $BINARY_PATH ..." #log_info "Downloading $2 to $BINARY_PATH ..."
#sudo wget -O $BINARY_PATH/$1 $2 > /dev/null 2>&1 #sudo wget -O $BINARY_PATH/$1 $2 > /dev/null 2>&1
log_debug $_path log_debug "$_path"
log_debug $BINARY_PATH/$_app log_debug "$BINARY_PATH/$_app"
sudo cp $_path $BINARY_PATH/$_app sudo cp "$_path" "$BINARY_PATH/$_app"
sudo chmod +x $BINARY_PATH/$_app sudo chmod +x "$BINARY_PATH/$_app"
log_add "Installed $_app into $BINARY_PATH/$_app" log_add "Installed $_app into $BINARY_PATH/$_app"
} }
@@ -436,10 +437,10 @@ function set_shell {
if [ -z "$P_ZSH" ]; then return 0; fi if [ -z "$P_ZSH" ]; then return 0; fi
CURR_U=$(grep "^$USER" /etc/passwd | cut -d ':' -f 7 | cut -d '/' -f 4) CURR_U=$(grep "^$USER" /etc/passwd | cut -d ':' -f 7 | cut -d '/' -f 4)
CURR_R=$(grep "^root" /etc/passwd | cut -d ':' -f 7 | cut -d '/' -f 4) CURR_R=$(grep "^root" /etc/passwd | cut -d ':' -f 7 | cut -d '/' -f 4)
if [[ $1 != $CURR_U ]]; then if [[ $1 != "$CURR_U" ]]; then
log_add "Setting default shell to $1" log_add "Setting default shell to $1"
sudo -u $USER chsh -s $(which $1) sudo -u "$USER" chsh -s "$(which "$1")"
sudo chsh -s $(which $1) sudo chsh -s "$(which "$1")"
else else
log_info "Shell already set to $1" log_info "Shell already set to $1"
fi fi
@@ -448,7 +449,7 @@ function set_shell {
# -------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------
function update { function update {
cd "$(dirname "$0")" cd "$(dirname "$0")" || (log_error "Could not change directory to $(dirname "$0")." && exit 1)
download "https://git.cbeck.tech/kamu/dotfiles/raw/branch/main/kfg" "kfg" download "https://git.cbeck.tech/kamu/dotfiles/raw/branch/main/kfg" "kfg"
exit 0 exit 0
} }
@@ -458,8 +459,8 @@ function show_help_install {
echo -e "Usage: $NAME install <program> [ opt ]\n" echo -e "Usage: $NAME install <program> [ opt ]\n"
echo -e "program := {" echo -e "program := {"
local _length _space local _length _space
for key in ${!TOOLS[@]}; do for key in "${!TOOLS[@]}"; do
_length="$(echo -n $key | wc -m)" _length="$(echo -n "$key" | wc -m)"
if [ "$_length" -gt 21 ]; then if [ "$_length" -gt 21 ]; then
_space="" _space=""
elif [ "$_length" -gt 13 ]; then elif [ "$_length" -gt 13 ]; then
@@ -510,7 +511,7 @@ function p_tmux {
download_config tmux tmux.conf https://git.cbeck.tech/kamu/dotfiles/raw/branch/main/.tmux.conf download_config tmux tmux.conf https://git.cbeck.tech/kamu/dotfiles/raw/branch/main/.tmux.conf
download_config tmux tmux.theme https://git.cbeck.tech/kamu/dotfiles/raw/branch/main/.tmux.theme download_config tmux tmux.theme https://git.cbeck.tech/kamu/dotfiles/raw/branch/main/.tmux.theme
download_config tmux myip.sh https://git.cbeck.tech/kamu/dotfiles/raw/branch/main/myip.sh download_config tmux myip.sh https://git.cbeck.tech/kamu/dotfiles/raw/branch/main/myip.sh
sudo chmod +x ${CONFIG_PATH}/tmux/myip.sh sudo chmod +x "${CONFIG_PATH}/tmux/myip.sh"
install_rc_download tmux https://git.cbeck.tech/kamu/dotfiles/raw/branch/main/.tmux.rc install_rc_download tmux https://git.cbeck.tech/kamu/dotfiles/raw/branch/main/.tmux.rc
git_clone "https://github.com/tmux-plugins/tpm" "${CONFIG_PATH}/tmux/plugins/tpm" git_clone "https://github.com/tmux-plugins/tpm" "${CONFIG_PATH}/tmux/plugins/tpm"
} }
@@ -566,13 +567,17 @@ function p_fzf {
github_install "fzf" "${_repo}" github_install "fzf" "${_repo}"
# Install latest release version of fzf-tmux # Install latest release version of fzf-tmux
local _latest_version="$( github_latest ${_repo})" local _latest_version _path_fzf_tmux
local _path_fzf_tmux="$TMP_PATH/fzf-tmux" _latest_version="$( github_latest ${_repo})"
_path_fzf_tmux="$TMP_PATH/fzf-tmux"
download "https://raw.githubusercontent.com/${_repo}/${_latest_version}/bin/fzf-tmux" "${_path_fzf_tmux}" download "https://raw.githubusercontent.com/${_repo}/${_latest_version}/bin/fzf-tmux" "${_path_fzf_tmux}"
install_binary "fzf-tmux" "${_path_fzf_tmux}" install_binary "fzf-tmux" "${_path_fzf_tmux}"
# download autocomplete # download autocomplete
if [ ! -z $ALL ] || user_confirm "Do you want to install fzf-tab as well?"; then
# install fzf tab
if [ -n "$ALL" ] || user_confirm "Do you want to install fzf-tab as well?"; then
p_fzf_tab p_fzf_tab
fi fi
@@ -592,9 +597,8 @@ function p_fzf_tab {
} }
function install { function install {
if [ -z $1 ]; then if [ -z "$1" ]; then
show_help_install show_help_install
exit 0
fi fi
init init
@@ -611,7 +615,7 @@ function install {
while : while :
do do
case "$1" in case "$1" in
help) show_help_install; exit 0 ;; help) show_help_install ;;
"") break ;; "") break ;;
all) p_all; shift ;; all) p_all; shift ;;
zsh) p_zsh; shift ;; zsh) p_zsh; shift ;;
@@ -634,7 +638,7 @@ function install {
} }
function main { function main {
if [ -z $1 ]; then if [ -z "$1" ]; then
show_help show_help
fi fi
@@ -669,9 +673,9 @@ function main {
case "$1" in case "$1" in
update) update ;; update) update ;;
version) version ;; version) version ;;
install) shift; install $@;; install) shift; install "$@";;
# -- means the end of the arguments; drop this, and break out of the while loop # -- means the end of the arguments; drop this, and break out of the while loop
--) shift; break ;; --) shift; return ;;
# If invalid options were passed, then getopt should have reported an error, # If invalid options were passed, then getopt should have reported an error,
# which we checked as VALID_ARGUMENTS when getopt was called... # which we checked as VALID_ARGUMENTS when getopt was called...
*) log_error "Unexpected command: $1"; show_help ;; *) log_error "Unexpected command: $1"; show_help ;;
@@ -693,9 +697,9 @@ function get_architecture {
if ldd --version 2>&1 | grep -q 'musl'; then if ldd --version 2>&1 | grep -q 'musl'; then
_clibtype="musl" _clibtype="musl"
APP_FILTER=$(echo $APP_FILTER | sed -e "s/musl|//gi") APP_FILTER="${APP_FILTER//musl|/}"
else else
APP_FILTER=$(echo $APP_FILTER | sed -e "s/gnu|//gi") APP_FILTER="${APP_FILTER//gnu|/}"
fi fi
fi fi
@@ -727,21 +731,21 @@ function get_architecture {
case "${_ostype}" in case "${_ostype}" in
Android) Android)
_ostype=linux-android _ostype=linux-android
APP_FILTER=$(echo $APP_FILTER | sed -e "s/android|//gi") APP_FILTER="${APP_FILTER//android|/}"
;; ;;
Linux) Linux)
check_proc check_proc
_ostype=unknown-linux-${_clibtype} _ostype=unknown-linux-${_clibtype}
_bitness=$(get_bitness) _bitness=$(get_bitness)
APP_FILTER=$(echo $APP_FILTER | sed -e "s/linux|//gi") APP_FILTER="${APP_FILTER//linux|/}"
;; ;;
FreeBSD) FreeBSD)
_ostype=unknown-freebsd _ostype=unknown-freebsd
APP_FILTER=$(echo $APP_FILTER | sed -e "s/freebsd|//gi") APP_FILTER="${APP_FILTER//freebsd|/}"
;; ;;
OpenBSD) OpenBSD)
_ostype=unknown-freebsd _ostype=unknown-freebsd
APP_FILTER=$(echo $APP_FILTER | sed -e "s/openbsd|//gi") APP_FILTER="${APP_FILTER//openbsd|/}"
;; ;;
NetBSD) NetBSD)
_ostype=unknown-netbsd _ostype=unknown-netbsd
@@ -751,7 +755,7 @@ function get_architecture {
;; ;;
Darwin) Darwin)
_ostype=apple-darwin _ostype=apple-darwin
APP_FILTER=$(echo $APP_FILTER | sed -e "s/darwin|//gi") APP_FILTER="${APP_FILTER//darwin|/}"
;; ;;
illumos) illumos)
_ostype=unknown-illumos _ostype=unknown-illumos
@@ -767,7 +771,7 @@ function get_architecture {
case "${_cputype}" in case "${_cputype}" in
i386 | i486 | i686 | i786 | x86) i386 | i486 | i686 | i786 | x86)
_cputype=i686 _cputype=i686
APP_FILTER=$(echo $APP_FILTER | sed -e "s/i686|//gi") APP_FILTER="${APP_FILTER//i686|/}"
;; ;;
xscale | arm) xscale | arm)
_cputype=arm _cputype=arm
@@ -793,15 +797,15 @@ function get_architecture {
;; ;;
aarch64 | arm64) aarch64 | arm64)
_cputype=aarch64 _cputype=aarch64
APP_FILTER=$(echo $APP_FILTER | sed -e "s/aarch64|//gi") APP_FILTER="${APP_FILTER//aarch64|/}"
APP_FILTER=$(echo $APP_FILTER | sed -e "s/arm64|//gi") APP_FILTER="${APP_FILTER//arm64|/}"
;; ;;
x86_64 | x86-64 | x64 | amd64) x86_64 | x86-64 | x64 | amd64)
_cputype=x86_64 _cputype=x86_64
APP_FILTER=$(echo $APP_FILTER | sed -e "s/amd64|//gi") APP_FILTER="${APP_FILTER//amd64|/}"
APP_FILTER=$(echo $APP_FILTER | sed -e "s/x86_64|//gi") APP_FILTER="${APP_FILTER//x86_64|/}"
APP_FILTER=$(echo $APP_FILTER | sed -e "s/x86-64|//gi") APP_FILTER="${APP_FILTER//x86-64|/}"
APP_FILTER=$(echo $APP_FILTER | sed -e "s/x64|//gi") APP_FILTER="${APP_FILTER//x64|/}"
;; ;;
mips) mips)
_cputype=$(get_endianness mips '' el) _cputype=$(get_endianness mips '' el)