diff --git a/bin/omakub-sub/install.sh b/bin/omakub-sub/install.sh index 3e35081cb..e796c8cdb 100644 --- a/bin/omakub-sub/install.sh +++ b/bin/omakub-sub/install.sh @@ -1,3 +1,8 @@ +#source the utils if not sourced already +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi + CHOICES=( "Dev Language Install programming language environment" "Dev Database Install development database in Docker" @@ -40,7 +45,12 @@ else *) INSTALLER_FILE="$OMAKUB_PATH/install/desktop/optional/app-$INSTALLER.sh" ;; esac - source $INSTALLER_FILE && gum spin --spinner globe --title "Install completed!" -- sleep 3 + if source $INSTALLER_FILE; then + gum spin --spinner globe --title "Install completed!" -- sleep 3 + handle_omakub_source_success "$INSTALLER_FILE" + else + handle_omakub_source_error "$INSTALLER_FILE" + fi fi clear diff --git a/bin/omakub-sub/update.sh b/bin/omakub-sub/update.sh index 1b0808c85..405c4e05c 100644 --- a/bin/omakub-sub/update.sh +++ b/bin/omakub-sub/update.sh @@ -1,3 +1,8 @@ +#source the utils if not sourced already +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi + CHOICES=( "Omakub Update Omakub itself and run any migrations" "Ollama Run LLMs, like Meta's Llama3, locally" @@ -23,7 +28,12 @@ else *) INSTALLER_FILE="$OMAKUB_PATH/install/terminal/app-$INSTALLER.sh" ;; esac - source $INSTALLER_FILE && gum spin --spinner globe --title "Update completed!" -- sleep 3 + if source $INSTALLER_FILE; then + gum spin --spinner globe --title "Update completed!" -- sleep 3 + handle_omakub_source_success "$INSTALLER_FILE" + else + handle_omakub_source_error "$INSTALLER_FILE" + fi fi clear diff --git a/install.sh b/install.sh index 2d551e328..3c5fb515a 100644 --- a/install.sh +++ b/install.sh @@ -2,11 +2,14 @@ set -e # Desktop software and tweaks will only be installed if we're running Gnome -RUNNING_GNOME=$([[ "$XDG_CURRENT_DESKTOP" == *"GNOME"* ]] && echo true || echo false) +RUNNING_GNOME=$([[ "${XDG_CURRENT_DESKTOP##*:}" =~ [Gg][Nn][Oo][Mm][Ee] ]] && echo true || echo false) # Check the distribution name and version and abort if incompatible source ~/.local/share/omakub/install/check-version.sh +#source the util functions +source ~/.local/share/omakub/utils.sh + if $RUNNING_GNOME; then # Ensure computer doesn't go to sleep or lock while installing gsettings set org.gnome.desktop.screensaver lock-enabled false @@ -32,3 +35,5 @@ if $RUNNING_GNOME; then gsettings set org.gnome.desktop.screensaver lock-enabled true gsettings set org.gnome.desktop.session idle-delay 300 fi + +print_omakub_report | tee ~/.local/share/omakub/omakub_report.log diff --git a/install/desktop.sh b/install/desktop.sh index 85c2006b6..5f355c233 100644 --- a/install/desktop.sh +++ b/install/desktop.sh @@ -2,8 +2,19 @@ gsettings set org.gnome.desktop.screensaver lock-enabled false gsettings set org.gnome.desktop.session idle-delay 0 +#source the utils if not sourced already +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi + # Run desktop installers -for installer in ~/.local/share/omakub/install/desktop/*.sh; do source $installer; done +for installer in ~/.local/share/omakub/install/desktop/*.sh; do + if source "$installer"; then + handle_omakub_source_success "$installer" + else + handle_omakub_source_error "$installer" + fi +done # Revert to normal idle and lock settings gsettings set org.gnome.desktop.screensaver lock-enabled true diff --git a/install/desktop/app-chrome.sh b/install/desktop/app-chrome.sh index 97e1361a1..32dc183de 100644 --- a/install/desktop/app-chrome.sh +++ b/install/desktop/app-chrome.sh @@ -1,7 +1,16 @@ # Browse the web with the most popular browser. See https://www.google.com/chrome/ cd /tmp -wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -sudo apt install -y ./google-chrome-stable_current_amd64.deb -rm google-chrome-stable_current_amd64.deb -xdg-settings set default-web-browser google-chrome.desktop -cd - +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch "chrome") +if wget "https://dl.google.com/linux/direct/google-chrome-stable_current_$ARCH.deb"; then + sudo apt install -y "./google-chrome-stable_current_$ARCH.deb" + rm "google-chrome-stable_current_$ARCH.deb" + xdg-settings set default-web-browser google-chrome.desktop + cd - +else + cd - + false +fi + diff --git a/install/desktop/app-localsend.sh b/install/desktop/app-localsend.sh index 56b571ec7..21132f8a4 100644 --- a/install/desktop/app-localsend.sh +++ b/install/desktop/app-localsend.sh @@ -1,6 +1,14 @@ cd /tmp +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch "localsend") LOCALSEND_VERSION=$(curl -s "https://api.github.com/repos/localsend/localsend/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') -wget -O localsend.deb "https://github.com/localsend/localsend/releases/latest/download/LocalSend-${LOCALSEND_VERSION}-linux-x86-64.deb" -sudo apt install -y ./localsend.deb -rm localsend.deb -cd - +if wget -O localsend.deb "https://github.com/localsend/localsend/releases/latest/download/LocalSend-${LOCALSEND_VERSION}-linux-${ARCH}.deb"; then + sudo apt install -y ./localsend.deb + rm localsend.deb + cd - +else + cd - + false +fi diff --git a/install/desktop/app-signal.sh b/install/desktop/app-signal.sh index 924aec484..ce9116f34 100644 --- a/install/desktop/app-signal.sh +++ b/install/desktop/app-signal.sh @@ -1,6 +1,10 @@ +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch "signal") wget -qO- https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor >signal-desktop-keyring.gpg cat signal-desktop-keyring.gpg | sudo tee /usr/share/keyrings/signal-desktop-keyring.gpg >/dev/null -echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/signal-desktop-keyring.gpg] https://updates.signal.org/desktop/apt xenial main' | +echo "deb [arch=${ARCH} signed-by=/usr/share/keyrings/signal-desktop-keyring.gpg] https://updates.signal.org/desktop/apt xenial main" | sudo tee /etc/apt/sources.list.d/signal-xenial.list rm signal-desktop-keyring.gpg sudo apt update diff --git a/install/desktop/app-vscode.sh b/install/desktop/app-vscode.sh index bb374a42a..828b13c9a 100644 --- a/install/desktop/app-vscode.sh +++ b/install/desktop/app-vscode.sh @@ -1,15 +1,36 @@ cd /tmp -wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor >packages.microsoft.gpg -sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg -echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list >/dev/null -rm -f packages.microsoft.gpg -cd - -sudo apt update -y -sudo apt install -y code +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch "vscode") -mkdir -p ~/.config/Code/User -cp ~/.local/share/omakub/configs/vscode.json ~/.config/Code/User/settings.json +if wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor >packages.microsoft.gpg; then + sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg + echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list >/dev/null + rm -f packages.microsoft.gpg + cd - -# Install default supported themes -code --install-extension enkia.tokyo-night + sudo apt update -y + sudo apt install -y code + + mkdir -p ~/.config/Code/User + cp ~/.local/share/omakub/configs/vscode.json ~/.config/Code/User/settings.json + + # Install default supported themes + code --install-extension enkia.tokyo-night + cd - +elif wget -O code.deb "https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-${ARCH}"; then + sudo apt install -y ./code.deb + rm code.deb + + mkdir -p ~/.config/Code/User + cp ~/.local/share/omakub/configs/vscode.json ~/.config/Code/User/settings.json + + # Install default supported themes + code --install-extension enkia.tokyo-night + cd - +else + cd - + false +fi \ No newline at end of file diff --git a/install/desktop/optional/app-1password.sh b/install/desktop/optional/app-1password.sh index f6cb80e98..c4ff07bb8 100755 --- a/install/desktop/optional/app-1password.sh +++ b/install/desktop/optional/app-1password.sh @@ -1,18 +1,43 @@ -# Install 1password and 1password-cli single script -curl -sS https://downloads.1password.com/linux/keys/1password.asc | \ -sudo gpg --dearmor --output /usr/share/keyrings/1password-archive-keyring.gpg +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch) +case "$ARCH" in + aarch64) + cd /tmp + curl -sSO https://downloads.1password.com/linux/tar/stable/aarch64/1password-latest.tar.gz + curl -sSO https://downloads.1password.com/linux/tar/stable/aarch64/1password-latest.tar.gz.sig + gpg --keyserver keyserver.ubuntu.com --recv-keys 3FEF9748469ADBE15DA7CA80AC2D62742012EA22 + gpg --verify 1password-latest.tar.gz.sig 1password-latest.tar.gz + if [[ $? -eq 0 ]]; then + sudo tar -xf 1password-latest.tar.gz + sudo mkdir -p /opt/1Password + sudo mv 1password-*/* /opt/1Password + sudo /opt/1Password/after-install.sh + cd - + else + cd - + false + fi + ;; + *) + # Install 1password and 1password-cli single script + curl -sS https://downloads.1password.com/linux/keys/1password.asc | \ + sudo gpg --dearmor --output /usr/share/keyrings/1password-archive-keyring.gpg -# Add apt repository -echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/1password-archive-keyring.gpg] https://downloads.1password.com/linux/debian/$(dpkg --print-architecture) stable main" | -sudo tee /etc/apt/sources.list.d/1password.list + # Add apt repository + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/1password-archive-keyring.gpg] https://downloads.1password.com/linux/debian/$(dpkg --print-architecture) stable main" | + sudo tee /etc/apt/sources.list.d/1password.list -# Add the debsig-verify policy -sudo mkdir -p /etc/debsig/policies/AC2D62742012EA22/ -curl -sS https://downloads.1password.com/linux/debian/debsig/1password.pol | \ -sudo tee /etc/debsig/policies/AC2D62742012EA22/1password.pol -sudo mkdir -p /usr/share/debsig/keyrings/AC2D62742012EA22 -curl -sS https://downloads.1password.com/linux/keys/1password.asc | \ -sudo gpg --dearmor --output /usr/share/debsig/keyrings/AC2D62742012EA22/debsig.gpg + # Add the debsig-verify policy + sudo mkdir -p /etc/debsig/policies/AC2D62742012EA22/ + curl -sS https://downloads.1password.com/linux/debian/debsig/1password.pol | \ + sudo tee /etc/debsig/policies/AC2D62742012EA22/1password.pol + sudo mkdir -p /usr/share/debsig/keyrings/AC2D62742012EA22 + curl -sS https://downloads.1password.com/linux/keys/1password.asc | \ + sudo gpg --dearmor --output /usr/share/debsig/keyrings/AC2D62742012EA22/debsig.gpg -# Install 1Password & 1password-cli -sudo apt update && sudo apt install -y 1password 1password-cli \ No newline at end of file + # Install 1Password & 1password-cli + sudo apt update && sudo apt install -y 1password 1password-cli + ;; +esac \ No newline at end of file diff --git a/install/desktop/optional/app-zoom.sh b/install/desktop/optional/app-zoom.sh index a773e58dc..b02fc0d16 100644 --- a/install/desktop/optional/app-zoom.sh +++ b/install/desktop/optional/app-zoom.sh @@ -1,6 +1,14 @@ # Make video calls using https://zoom.us/ cd /tmp -wget https://zoom.us/client/latest/zoom_amd64.deb -sudo apt install -y ./zoom_amd64.deb -rm zoom_amd64.deb -cd - +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch "zoom") +if wget "https://zoom.us/client/latest/zoom_${ARCH}.deb"; then + sudo apt install -y "./zoom_${ARCH}.deb" + rm "zoom_${ARCH}.deb" + cd - +else + cd - + false +fi diff --git a/install/desktop/select-optional-apps.sh b/install/desktop/select-optional-apps.sh index a5edf13e7..bc593c980 100644 --- a/install/desktop/select-optional-apps.sh +++ b/install/desktop/select-optional-apps.sh @@ -1,9 +1,18 @@ +#source the utils if not sourced already +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi + if [[ -v OMAKUB_FIRST_RUN_OPTIONAL_APPS ]]; then apps=$OMAKUB_FIRST_RUN_OPTIONAL_APPS if [[ -n "$apps" ]]; then for app in $apps; do - source "$OMAKUB_PATH/install/desktop/optional/app-${app,,}.sh" + if source "$OMAKUB_PATH/install/desktop/optional/app-${app,,}.sh"; then + handle_omakub_source_success "$app" + else + handle_omakub_source_error "$app" + fi done fi fi diff --git a/install/first-run-choices.sh b/install/first-run-choices.sh index dc6964c7d..e9f39e5be 100644 --- a/install/first-run-choices.sh +++ b/install/first-run-choices.sh @@ -1,4 +1,4 @@ -OPTIONAL_APPS=("1password" "Spotify" "Zoom" "Dropbox") +OPTIONAL_APPS=("1password" "Spotify" "Zoom" "Dropbox" "Brave") DEFAULT_OPTIONAL_APPS='1password,Spotify,Zoom' export OMAKUB_FIRST_RUN_OPTIONAL_APPS=$(gum choose "${OPTIONAL_APPS[@]}" --no-limit --selected $DEFAULT_OPTIONAL_APPS --height 7 --header "Select optional apps" | tr ' ' '-') diff --git a/install/terminal.sh b/install/terminal.sh index 94f5844bb..8afaaf4ca 100644 --- a/install/terminal.sh +++ b/install/terminal.sh @@ -3,5 +3,16 @@ sudo apt update -y sudo apt upgrade -y sudo apt install -y curl git unzip +#source the utils if not sourced already +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi + # Run terminal installers -for installer in ~/.local/share/omakub/install/terminal/*.sh; do source $installer; done +for installer in ~/.local/share/omakub/install/terminal/*.sh; do + if source "$installer"; then + handle_omakub_source_success "$installer" + else + handle_omakub_source_error "$installer" + fi +done diff --git a/install/terminal/app-lazydocker.sh b/install/terminal/app-lazydocker.sh index 6f62afbbf..614683022 100644 --- a/install/terminal/app-lazydocker.sh +++ b/install/terminal/app-lazydocker.sh @@ -1,7 +1,16 @@ cd /tmp +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch "lazydocker") LAZYDOCKER_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazydocker/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') -curl -sLo lazydocker.tar.gz "https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_${LAZYDOCKER_VERSION}_Linux_x86_64.tar.gz" -tar -xf lazydocker.tar.gz lazydocker -sudo install lazydocker /usr/local/bin -rm lazydocker.tar.gz lazydocker -cd - +if curl -sLo lazydocker.tar.gz "https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_${LAZYDOCKER_VERSION}_Linux_${ARCH}.tar.gz"; then + tar -xf lazydocker.tar.gz lazydocker + sudo install lazydocker /usr/local/bin + rm lazydocker.tar.gz lazydocker + cd - +else + cd - + false +fi + diff --git a/install/terminal/app-lazygit.sh b/install/terminal/app-lazygit.sh index 70f90fe56..6f1b512c3 100644 --- a/install/terminal/app-lazygit.sh +++ b/install/terminal/app-lazygit.sh @@ -1,7 +1,15 @@ cd /tmp +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch "lazygit") LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') -curl -sLo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz" -tar -xf lazygit.tar.gz lazygit -sudo install lazygit /usr/local/bin -rm lazygit.tar.gz lazygit -cd - +if curl -sLo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_${ARCH}.tar.gz"; then + tar -xf lazygit.tar.gz lazygit + sudo install lazygit /usr/local/bin + rm lazygit.tar.gz lazygit + cd - +else + cd - + false +fi diff --git a/install/terminal/app-neovim.sh b/install/terminal/app-neovim.sh index a5ea1a428..21806f7b9 100644 --- a/install/terminal/app-neovim.sh +++ b/install/terminal/app-neovim.sh @@ -1,33 +1,54 @@ cd /tmp -wget -O nvim.tar.gz "https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz" -tar -xf nvim.tar.gz -sudo install nvim-linux64/bin/nvim /usr/local/bin/nvim -sudo cp -R nvim-linux64/lib /usr/local/ -sudo cp -R nvim-linux64/share /usr/local/ -rm -rf nvim-linux64 nvim.tar.gz +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch "neovim") +NEOVIM_SUCCESS=false +if [[ "${ARCH}" == "aarch64" ]]; then + if ! command -v snap &> /dev/null; then + sudo apt update + sudo apt install -y snapd + fi + sudo snap install --classic nvim \ + && sudo ln -sf /snap/bin/nvim /usr/local/bin/nvim \ + && NEOVIM_SUCCESS=true +else + if wget -O nvim.tar.gz "https://github.com/neovim/neovim/releases/latest/download/nvim-linu${ARCH}.tar.gz"; then + tar -xf nvim.tar.gz + sudo install nvim-linu${ARCH}/bin/nvim /usr/local/bin/nvim + sudo cp -R nvim-linu${ARCH}/lib /usr/local/ + sudo cp -R nvim-linu${ARCH}/share /usr/local/ + rm -rf nvim-linu${ARCH} nvim.tar.gz + NEOVIM_SUCCESS=true + fi +fi cd - -# Only attempt to set configuration if Neovim has never been run -if [ ! -d "$HOME/.config/nvim" ]; then - # Use LazyVim - git clone https://github.com/LazyVim/starter ~/.config/nvim +if "${NEOVIM_SUCCESS}"; then + # Only attempt to set configuration if Neovim has never been run + if [ ! -d "$HOME/.config/nvim" ]; then + # Use LazyVim + git clone https://github.com/LazyVim/starter ~/.config/nvim - # Disable update notification popup in starter config - sed -i 's/checker = { enabled = true }/checker = { enabled = true, notify = false }/g' ~/.config/nvim/lua/config/lazy.lua + # Disable update notification popup in starter config + sed -i 's/checker = { enabled = true }/checker = { enabled = true, notify = false }/g' ~/.config/nvim/lua/config/lazy.lua - # Make everything match the terminal transparency - mkdir -p ~/.config/nvim/plugin/after - cp ~/.local/share/omakub/configs/neovim/transparency.lua ~/.config/nvim/plugin/after/ + # Make everything match the terminal transparency + mkdir -p ~/.config/nvim/plugin/after + cp ~/.local/share/omakub/configs/neovim/transparency.lua ~/.config/nvim/plugin/after/ - # Default to Tokyo Night theme - cp ~/.local/share/omakub/themes/tokyo-night/neovim.lua ~/.config/nvim/lua/plugins/theme.lua + # Default to Tokyo Night theme + cp ~/.local/share/omakub/themes/tokyo-night/neovim.lua ~/.config/nvim/lua/plugins/theme.lua - # Enable default extras - cp ~/.local/share/omakub/configs/neovim/lazyvim.json ~/.config/nvim/lazyvim.json -fi + # Enable default extras + cp ~/.local/share/omakub/configs/neovim/lazyvim.json ~/.config/nvim/lazyvim.json + fi -# Replace desktop launcher with one running inside Alacritty -if [[ -d ~/.local/share/applications ]]; then - sudo rm -rf /usr/share/applications/nvim.desktop - source ~/.local/share/omakub/applications/Neovim.sh + # Replace desktop launcher with one running inside Alacritty + if [[ -d ~/.local/share/applications ]]; then + sudo rm -rf /usr/share/applications/nvim.desktop + source ~/.local/share/omakub/applications/Neovim.sh + fi +else + false fi diff --git a/install/terminal/app-zellij.sh b/install/terminal/app-zellij.sh index 170b334e8..b619abe16 100644 --- a/install/terminal/app-zellij.sh +++ b/install/terminal/app-zellij.sh @@ -1,10 +1,20 @@ cd /tmp -wget -O zellij.tar.gz "https://github.com/zellij-org/zellij/releases/latest/download/zellij-x86_64-unknown-linux-musl.tar.gz" -tar -xf zellij.tar.gz zellij -sudo install zellij /usr/local/bin -rm zellij.tar.gz zellij -cd - +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch "zellij") +if wget -O zellij.tar.gz "https://github.com/zellij-org/zellij/releases/latest/download/zellij-${ARCH}-unknown-linux-musl.tar.gz"; then + ZELLIJ_SUCCESS=true + tar -xf zellij.tar.gz zellij + sudo install zellij /usr/local/bin + rm zellij.tar.gz zellij + cd - + + mkdir -p ~/.config/zellij/themes + [ ! -f "$HOME/.config/zellij/config.kdl" ] && cp ~/.local/share/omakub/configs/zellij.kdl ~/.config/zellij/config.kdl + cp ~/.local/share/omakub/themes/tokyo-night/zellij.kdl ~/.config/zellij/themes/tokyo-night.kdl +else + cd - + false +fi -mkdir -p ~/.config/zellij/themes -[ ! -f "$HOME/.config/zellij/config.kdl" ] && cp ~/.local/share/omakub/configs/zellij.kdl ~/.config/zellij/config.kdl -cp ~/.local/share/omakub/themes/tokyo-night/zellij.kdl ~/.config/zellij/themes/tokyo-night.kdl diff --git a/install/terminal/docker.sh b/install/terminal/docker.sh index bd81d8172..fda558d96 100644 --- a/install/terminal/docker.sh +++ b/install/terminal/docker.sh @@ -1,3 +1,8 @@ +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch "dockercompose") + # Add the official Docker repo sudo install -m 0755 -d /etc/apt/keyrings sudo wget -qO /etc/apt/keyrings/docker.asc https://download.docker.com/linux/ubuntu/gpg @@ -6,10 +11,19 @@ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker. sudo apt update # Install Docker engine and standard plugins -sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras +sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras docker.io docker-buildx # Give this user privileged Docker access sudo usermod -aG docker ${USER} # Limit log size to avoid running out of disk echo '{"log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"5"}}' | sudo tee /etc/docker/daemon.json + +DOCKER_COMPOSE_VERSION="2.27.0" +DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} +mkdir -p $DOCKER_CONFIG/cli-plugins +if curl -sSL "https://github.com/docker/compose/releases/download/v$DOCKER_COMPOSE_VERSION/docker-compose-linux-${ARCH}" -o "$DOCKER_CONFIG/cli-plugins/docker-compose"; then + chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose +else + false +fi diff --git a/install/terminal/mise.sh b/install/terminal/mise.sh index a89332a2b..40cf0218c 100644 --- a/install/terminal/mise.sh +++ b/install/terminal/mise.sh @@ -1,7 +1,11 @@ +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch) # Install mise for managing multiple versions of languages. See https://mise.jdx.dev/ sudo apt update -y && sudo apt install -y gpg sudo wget curl sudo install -dm 755 /etc/apt/keyrings wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1>/dev/null -echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=$(dpkg --print-architecture)] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list +echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=${ARCH}] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list sudo apt update sudo apt install -y mise diff --git a/install/terminal/required/app-gum.sh b/install/terminal/required/app-gum.sh index 4fc1e3234..7d7215243 100644 --- a/install/terminal/required/app-gum.sh +++ b/install/terminal/required/app-gum.sh @@ -1,7 +1,11 @@ # Gum is used for the Omakub commands for tailoring Omakub after the initial install cd /tmp +if [[ -z $UTILS_SOURCED ]]; then + source ~/.local/share/omakub/utils.sh +fi +ARCH=$(get_arch "gum") GUM_VERSION="0.14.3" # Use known good version -wget -qO gum.deb "https://github.com/charmbracelet/gum/releases/download/v${GUM_VERSION}/gum_${GUM_VERSION}_amd64.deb" +wget -qO gum.deb "https://github.com/charmbracelet/gum/releases/download/v${GUM_VERSION}/gum_${GUM_VERSION}_${ARCH}.deb" sudo apt-get install -y ./gum.deb rm gum.deb cd - diff --git a/utils.sh b/utils.sh new file mode 100644 index 000000000..342c179a9 --- /dev/null +++ b/utils.sh @@ -0,0 +1,94 @@ +#!/bin/bash +set -e; + +UTILS_SOURCED=true + +logRED='\033[0;31m' +logGREEN='\033[0;32m' +logBLUE='\033[0;34m' +logCYAN='\033[0;36m' +logNEUT='\033[0m' +clearLINE='\033[K' + +function includes() { + local haystack=("${@:1: $#-1}") + local needle="${@: -1}" + for item in "${haystack[@]}"; do + if [[ "$item" == "$needle" ]]; then + return 0 + fi + done + return 1 +} + +#Usage: issueInfo "PROCESSING: %s" "${trgtFolder}/$d" +function issueWarning() { + printf "${logRED}---::WARNING::---\n$1\n---::---${logNEUT}\n" ${@: 2}; +} + +function issueInfo() { + printf "${logCYAN}---::INFO: ""$1 ""::---${logNEUT}\n" ${@: 2}; +} + +function issueSuccess() { + printf "${logGREEN}---::INFO: ""$1 ""::---${logNEUT}\n" ${@: 2}; +} + +#assoc array to list app specific arch aliases +declare -A arch_config=( + ["gum.x86_64"]="amd64" + ["gum.aarch64"]="arm64" + ["chrome.x86_64"]="amd64" + ["chrome.aarch64"]="arm64" + ["signal.x86_64"]="amd64" + ["signal.aarch64"]="arm64" + ["zoom.x86_64"]="amd64" + ["zoom.aarch64"]="arm64" + ["localsend.x86_64"]="x86-64" + ["localsend.aarch64"]="arm-64" + ["lazygit.aarch64"]="arm64" + ["lazydocker.aarch64"]="arm64" + ["vscode.x86_64"]="x64" + ["vscode.aarch64"]="arm64" + ["neovim.x86_64"]="x64" +) + +omakub_installation_success=() +omakub_installation_failed=() + +handle_omakub_source_error() { + local installer="$1" + omakub_installation_failed+=("$installer") +} + +handle_omakub_source_success() { + local installer="$1" + omakub_installation_success+=("$installer") +} + +print_omakub_report() { + for element in "${omakub_installation_success[@]}"; do + issueSuccess "[+] %s completed." "$element" + done + echo "---::::---" + for element in "${omakub_installation_failed[@]}"; do + issueWarning "[-] %s failed." "$element" + done +} + +#a getter func to lookup into above assos array. Unfound keys/default value is what is returned from lscpu +get_arch_config() { + local arch="${1}" + local prog="${2:-"default"}" + local searchStr="${prog}.${arch}" + local archAlias="${arch_config[$searchStr]:-$arch}" + echo -n "$archAlias" +} + +# Usage: +# echo "$(get_arch "chrome")" //for aarch64, returns arm64 +get_arch() { + local prog="$1" + local ARCH=$(lscpu | awk -F: 'NR==1 {print $2}' | xargs) + echo -n "$(get_arch_config "$ARCH" "$prog")" +} \ No newline at end of file