From b558438cef8278b40d04a1dadb332c31c0e59fde Mon Sep 17 00:00:00 2001 From: pika Date: Fri, 21 Mar 2025 20:10:57 +0100 Subject: [PATCH] fixed it for minimal --- install.sh | 297 +++++++++++++++++++++++++++++++++++++++++++++++++++++ makedir.sh | 35 +++++++ makefile | 15 +++ 3 files changed, 347 insertions(+) create mode 100755 install.sh create mode 100755 makedir.sh create mode 100644 makefile diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..472e62a --- /dev/null +++ b/install.sh @@ -0,0 +1,297 @@ +#!/usr/bin/env bash + +# ANSI color codes +RED='\033[0;31m' +CYAN='\033[0;36m' +YELLOW='\033[0;33m' +LIGHT_GREEN='\033[0;92m' +BOLD='\033[1m' +NC='\033[0m' # No Color + +echo_error() { + printf "${BOLD}${RED}ERROR: ${NC}${RED}%s${NC}\n" "$1" >&2 +} + +echo_info() { + printf "${BOLD}${CYAN}INFO: ${NC}${CYAN}%s${NC}\n" "$1" +} + +echo_warning() { + printf "${BOLD}${YELLOW}WARNING: ${NC}${YELLOW}%s${NC}\n" "$1" +} + +echo_note() { + printf "${BOLD}${LIGHT_GREEN}NOTE: ${NC}${LIGHT_GREEN}%s${NC}\n" "$1" +} + +# ─< Check if the given command exists silently >───────────────────────────────────────── +command_exists() { + command -v "$@" >/dev/null 2>&1 +} + +# ─< Check if the user is root and set sudo variable if necessary >─────────────────────── +check_root() { + if [ "$(id -u)" -ne 0 ]; then + if command_exists sudo; then + echo_info "User is not root. Using sudo for privileged operations." + _sudo="sudo" + else + echo_error "No sudo found and you're not root! Can't install packages." + return 1 + fi + else + echo_info "Root access confirmed." + _sudo="" + fi +} + +# ─< Distribution detection and installation >──────────────────────────────────────── +get_packager() { + if [ -e /etc/os-release ]; then + echo_info "Detecting distribution..." + . /etc/os-release + + ID=$(printf "%s" "$ID" | tr '[:upper:]' '[:lower:]') + ID_LIKE=$(printf "%s" "$ID_LIKE" | tr '[:upper:]' '[:lower:]') + case "$ID" in + ubuntu | pop) _install() { $_sudo apt-get install --assume-yes "$@"; } ;; + debian) _install() { $_sudo apt-get install --assume-yes "$@"; } ;; + fedora) _install() { $_sudo dnf install -y "$@"; } ;; + alpine) _install() { $_sudo apk add "$@"; } ;; + arch | archcraft | manjaro | garuda | endeavour) _install() { $_sudo pacman -S --noconfirm "$@"; } ;; + opensuse*) _install() { $_sudo zypper in -y "$@"; } ;; + *) + if echo "$ID_LIKE" | grep -q "debian"; then + _install() { $_sudo apt-get install --assume-yes "$@"; } + elif echo "$ID_LIKE" | grep -q "ubuntu"; then + _install() { $_sudo apt-get install --assume-yes "$@"; } + elif echo "$ID_LIKE" | grep -q "arch"; then + _install() { $_sudo pacman -S --noconfirm "$@"; } + elif echo "$ID_LIKE" | grep -q "fedora"; then + _install() { $_sudo dnf install -y "$@"; } + elif echo "$ID_LIKE" | grep -q "suse"; then + _install() { $_sudo zypper in -y "$@"; } + else + echo_error "Unsupported distribution: $ID" + return 1 + fi + ;; + esac + else + echo_error "Unable to detect distribution. /etc/os-release not found." + return 1 + fi +} + +silentexec() { + "$@" >/dev/null 2>&1 +} + +__pre_stow__() { + echo_note "__pre_stow__" + conf="$HOME/.config" + bak_dir="$HOME/.bak" + dirs=( + "btop" + "zsh" + "yazi" + "nvim" + "ranger" + "lf" + ) + + if [ ! -d "$bak_dir" ]; then + echo_info "backup dir created at $bak_dir" && + silentexec mkdir "$bak_dir" + else + echo_info "Backup dir already present, clearing now" && + rm -rf "${bak_dir:?}/*" + fi + + for _dirs in "${dirs[@]}"; do + if [ -d "$conf/$_dirs" ]; then + mv -f "$conf/$_dirs" "$bak_dir" + fi + done + + h_files=( + ".zshrc" + ".tmux.conf" + ) + + h_dirs=( + ".tmux" + ".zsh" + ) + + for _f in "${h_files[@]}"; do + if [ -f "$HOME/$_f" ]; then + mv -f "$HOME/$_f" "$bak_dir" && echo_info "Moved $_f to $bak_dir" + fi + done + + for _d in "${h_dirs[@]}"; do + if [ -d "$HOME/$_d" ]; then + mv -f "$HOME/$_d" "$bak_dir" && echo_info "Moved $_d to $bak_dir" + fi + done + + if [ -d "$HOME/.local/share/fastfetch/" ]; then + mv -f "$HOME/.local/share/fastfetch" "$bak_dir" + fi +} + +askThings() { + echo_info "Choose a menu - [r]ofi || [t]ofi" + read -r askMenu "$HOME/.monitors.conf" + fi +} + +pkg_optional() { + _ops=( + "cowsay" + "cmatrix" + "trash-cli" + ) + case "$_ops" in + Y | y) + for _o_ in "${_ops[@]}"; do + if command_exists "$_o_"; then + echo_note "$_o_ - is already installed" + else + echo_info "Installing $_o_" + _install "$_o_" + fi + done + ;; + *) + echo default + ;; + esac + +} + +__stow__() { + stow --verbose --target="$HOME" --defer=.gitmodules --restow */ +} + +main() { + check_root + get_packager + + __validate__ + __dep__ + + if ! command_exists stow; then + echo_error "we couldn't find stow on the machine, do you want us to install it? (y/n): " + read -r ask_stow + case "$ask_stow" in + Y | y) + _install stow + ;; + *) + echo_error "You cannot proceed without installing stow! Please install manually" + exit 1 + ;; + esac + else + echo_info "stow was found, going on to prepare to stow your config" + sleep 0.3 + fi + + __pre_stow__ + __stow__ + + sleep 2 + + [ "$__optional__" -eq "true" ] && + pkg_optional + + __monitors__ + echo_note "found resolution ${res}" +} + +main diff --git a/makedir.sh b/makedir.sh new file mode 100755 index 0000000..74a2d22 --- /dev/null +++ b/makedir.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +# ─< Helper functions >───────────────────────────────────────────────────────────────── +function echo_error() { echo -e "\033[0;1;31mError: \033[0;31m\t${*}\033[0m"; } +function echo_binfo() { echo -e "\033[0;1;34mINFO: \033[0;34m\t${*}\033[0m"; } +function echo_info() { echo -e "\033[0;1;35mInfo: \033[0;35m${*}\033[0m"; } + +# ─< Check if the given command exists silently >───────────────────────────────────────── +command_exists() { + command -v "$@" >/dev/null 2>&1 +} + +# ─< to get the alias to install everything either with your shell or inside your script! >─ +if command_exists curl; then + install_pkg() { + bash --norc -c "$(curl -sSL https://git.k4li.de/pika/scripts/raw/branch/main/bash/snippets/install_pkg.sh)" "$@" + } +else + echo_error "curl is not installed, universal install disabled!" +fi + +# ─< Silent execution >───────────────────────────────────────────────────────────────── +silentexec() { + "$@" >/dev/null 2>&1 +} + +mkdirs() { + # ─< .config dir >──────────────────────────────────────────────────────────────────────── + if [[ ! -f $HOME/.config/ ]]; then + echo_binfo "mkdir $HOME/.config" + silentexec mkdir $HOME/.config + fi +} + +mkdirs diff --git a/makefile b/makefile new file mode 100644 index 0000000..bd3f22b --- /dev/null +++ b/makefile @@ -0,0 +1,15 @@ +all: + ./makedir.sh + ./install.sh + # stow --verbose --target=$$HOME --defer=^.*git.* --restow */ + +install: + ./makedir.sh + ./install.sh + # stow --verbose --target=$$HOME --defer=^.*git.* --restow */ + +delete: + stow --verbose --target=$$HOME --delete */ + +remove: + stow --verbose --target=$$HOME --delete */