diff --git a/hypr/hyprutils.sh b/hypr/hyprutils.sh index 11978d3..0236827 100644 --- a/hypr/hyprutils.sh +++ b/hypr/hyprutils.sh @@ -5,61 +5,37 @@ command_exists() { command -v "$@" >/dev/null 2>&1 } -cores="$(nproc 2>/dev/null || getconf NPROCESSORS_CONF)" - -# ─< package variable >─────────────────────────────────────────────────────────────────── -unset PACKAGE - -# ─< argument list variables >──────────────────────────────────────────────────────────── -silent=false - -sleep 0.1 - -PACKAGE=hyprutils -if command_exists "$PACKAGE"; then - echo "$PACKAGE is already installed!" - echo "Exiting now!" - exit 69 -fi - -# ─< parse arguments and get variable contents >────────────────────────────────────────── -for arg in "$@"; do - case "$arg" in - --silent | -s) - export silent=true - ;; - esac -done - -# WHY: -# This import will give you the following variables: -# _sudo="sudo -E" <- only if non root user -# distro = -# arch = bool -# fedora = bool -# opensuse = bool.... -# You can then use it for, `if $arch; then` -# Also this gives you the _install command, which installs a package pased on the packagemanager/distro used. -# CAUTION: -# This only wokrs for generic package names, like neovim, or vim, or tmux etc.. -# not every package packagemanager has the same packagenames for their packages.. -getImports() { - local url="https://git.k4li.de/scripts/imports/raw/branch/main/distros.sh" +source-script() { + local url="$1" local import="$(mktemp)" - if command_exists curl; then - curl -fsSL $url -o $import - elif command_exists wget; then - wget -o $import $url - else - echo "curl/wget is required, but missing.." - exit 69 - fi - source "$import" - sleep 0.2 - rm "$import" + # ─< if $1 is a local file, source this one instead >───────────────────────────────────── + if [ -f "$url" ]; then + source "$url" + sleep 0.1 + return 0 + else + # ─< if $1 is a url, grab it and source it, also deletes afterwards >───────────────────── + if command_exists curl; then + curl -fsSL $url -o $import + elif command_exists wget; then + wget -o $import $url + else + echo "curl/wget is required, but missing.." + exit 69 + fi + + source "$import" + + echo "${BLUE}Sourcing external script:${NC} $url" + line + sleep 0.1 + rm -f "$import" + fi } +cores="$(nproc 2>/dev/null || getconf NPROCESSORS_CONF)" + getDependencies() { echo_pkg deps "Checking build dependencies.." @@ -90,16 +66,25 @@ getDependencies() { declare -n pkgArray="${deps[$distro]}" if checkComp; then - for pkg in "${pkgArray[@]}"; do - checkAndInstall "$pkg" - done + check-and-install ${pkgArray[@]} fi } build() { - echo_pkg build - run cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build - run cmake --build ./build --config Release --target all -j"${cores}" + local err out + spin bold yellow "Building $PACKAGE.." + if run --err err --out out cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build; then + if run --err err --out out cmake --build ./build --config Release --target all -j"${cores}"; then + upclear + check "Build $PACKAGE" + else + upclear + throw-err + fi + else + upclear + throw-err + fi } cloneAndInstall() { @@ -108,9 +93,16 @@ cloneAndInstall() { cd $cloneDir || mkdir -p $cloneDir && cd $cloneDir - echo_pkg clone - git clone --depth=1 https://github.com/hyprwm/hyprutils.git && + spin bold yellow "Cloning $PACKAGE sources.." + + if run git clone --depth=1 https://github.com/hyprwm/hyprutils.git; then + upclear + check "Cloned $PACKAGE sources" cd hyprutils + else + upclear + throw-err + fi if build; then echo_pkg install @@ -121,6 +113,36 @@ cloneAndInstall() { fi } +checkComp() { + if ! $arch && ! $debian; then + echo_error "Your distro $distro is not compatible with this script" + return 69 + fi +} + +# WHY: +# This import will give you the following variables: +# _sudo="sudo -E" <- only if non root user +# distro = +# arch = bool +# fedora = bool +# opensuse = bool.... +# You can then use it for, `if $arch; then` +# Also this gives you the pkg-install command, which installs a package pased on the packagemanager/distro used. +# CAUTION: +# This only wokrs for generic package names, like neovim, or vim, or tmux etc.. +# not every package packagemanager has the same packagenames for their packages.. +setup-env() { + # local beddu=https://git.k4li.de/scripts/beddu/raw/branch/main/dist/beddu.sh + # local pika=https://git.k4li.de/scripts/imports/raw/branch/main/distros.sh + local dream=https://git.k4li.de/scripts/imports/raw/branch/main/dream.sh + + if ! command_exists pkg-install && ! command_exists check-and-install && ! command_exists spin; then + source-script $dream + line + fi +} + main() { if $silent; then echo_warning "Executing script silently!" @@ -132,7 +154,7 @@ main() { case "$distro" in arch) - _install hyprutils + pkg-install hyprutils ;; debian) cloneAndInstall @@ -140,13 +162,6 @@ main() { esac } -checkComp() { - if ! $arch && ! $debian; then - echo_error "Your distro $distro is not compatible with this script" - return 69 - fi -} - -if getImports; then +if setup-env; then main fi