diff options
Diffstat (limited to 'install.sh')
| -rwxr-xr-x | install.sh | 927 |
1 files changed, 0 insertions, 927 deletions
diff --git a/install.sh b/install.sh deleted file mode 100755 index 1b52e27..0000000 --- a/install.sh +++ /dev/null @@ -1,927 +0,0 @@ -#!/usr/bin/env bash - -#====================================== -# Variables -#====================================== - -# Color definitions -NOCOLOR='\033[0m' -RED='\033[00;31m' -GREEN='\033[00;32m' - -# Dotfiles -dotfiles_url='https://github.com/srdusr/dotfiles.git' -dotfiles_dir="$HOME/.cfg" - -# Log file -LOG_FILE="dotfiles.log" -TRASH_DIR="$HOME/.local/share/Trash" - -# Ensure Trash directory exists -if [ ! -d "$TRASH_DIR" ]; then - mkdir -p "$TRASH_DIR" - if [ $? -ne 0 ]; then - echo "Failed to create Trash directory. Exiting..." - exit 1 - fi -fi - -# Move log file to Trash directory -mv -f "$LOG_FILE" "$TRASH_DIR/" - -# Redirect stderr to both stderr and log file -exec 2> >(tee -a "$LOG_FILE") - -# Function to log errors -log_error() { - local message="$1" - echo "[ERROR] $(date +'%Y-%m-%d %H:%M:%S') - $message" | tee -a "$LOG_FILE" >&2 -} - -# Function to handle errors -handle_error() { - local message="$1" - log_error "$message" - exit 1 -} - -# Function to log completion messages -log_complete() { - local message="$1" - echo "[COMPLETE] $(date +'%Y-%m-%d %H:%M:%S') - $message" | tee -a "$LOG_FILE" -} - -# Function to handle completion -handle_complete() { - local message="$1" - log_complete "$message" -} - -# Function to prompt the user -prompt_user() { - local prompt="$1 [Y/n] " - local default_response="${2:-Y}" - local response - - read -p "$prompt" -n 1 -r -e -i "$default_response" response - case "${response^^}" in - Y) return 0 ;; - N) return 1 ;; - *) handle_error "Invalid choice. Exiting.." && exit ;; - esac -} - -# Function to temporarily unset GIT_WORK_TREE -function git_without_work_tree() { - # Check if the current directory is a Git repository - if [ -d "$PWD/.git" ]; then - # Check if the current directory is inside the work tree - if [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then - # If it's a Git repository and inside the work tree, proceed with unsetting GIT_WORK_TREE - GIT_WORK_TREE_OLD="$GIT_WORK_TREE" - unset GIT_WORK_TREE - "$@" - export GIT_WORK_TREE="$GIT_WORK_TREE_OLD" - else - # If it's a Git repository but not inside the work tree, call git command directly - git "$@" - fi - else - # If it's not a Git repository, call git command directly - git "$@" - fi -} - -# Set alias conditionally -alias git='git_without_work_tree' - -# Check for privilege escalation tools -#-------------------------------------- -check_privilege_tools() { - if [ -x "$(command -v sudo)" ]; then - PRIVILEGE_TOOL="sudo" - elif [ -x "$(command -v doas)" ]; then - PRIVILEGE_TOOL="doas" - elif [ -x "$(command -v pkexec)" ]; then - PRIVILEGE_TOOL="pkexec" - elif [ -x "$(command -v dzdo)" ]; then - PRIVILEGE_TOOL="dzdo" - elif [ "$(id -u)" -eq 0 ]; then - PRIVILEGE_TOOL="" # root - else - PRIVILEGE_TOOL="" # No privilege escalation mechanism found - printf "\n${RED}Error: No privilege escalation tool (sudo, doas, pkexec, dzdo, or root privileges) found. You may not have sufficient permissions to run this script.${NOCOLOR}\n" - printf "\nAttempt to continue Installation (might fail without a privilege escalation tool)? [yes/no] " - read continue_choice - case $continue_choice in - [Yy] | [Yy][Ee][Ss]) ;; - [Nn] | [Nn][Oo]) exit ;; - *) handle_error "Invalid choice. Exiting..." && exit ;; - esac - fi -} - -# Function to set locale to en_US.UTF-8 -set_locale() { - echo "Setting locale to en_US.UTF-8..." - if ! "$PRIVILEGE_TOOL" localectl set-locale LANG=en_US.UTF-8; then - handle_error "Failed to set locale to en_US.UTF-8" - fi -} - -# Change shell to zsh -change_shell() { - if prompt_user "Change shell to zsh?"; then - if command -v zsh &>/dev/null; then - chsh -s "$(which zsh)" && echo "Shell changed to zsh. Please log out and log back in to apply the changes." - #sudo chsh -s "$(which zsh)" "$(whoami)" - else - echo "Error: zsh is not installed." - fi - else - echo "Shell not changed." - fi -} - -# Initialize git submodules -submodules() { - echo "Initializing submodule(s)" - git submodule update --init --recursive -} - -# Install Zsh plugins -install_zsh_plugins() { - local zsh_plugins_dir="$HOME/.config/zsh/plugins" - - mkdir -p "$HOME/.config/zsh" - mkdir -p "$zsh_plugins_dir" - - if [ ! -d "$zsh_plugins_dir/zsh-you-should-use" ]; then - echo "Installing zsh-you-should-use..." - git clone https://github.com/MichaelAquilina/zsh-you-should-use.git "$zsh_plugins_dir/zsh-you-should-use" - else - echo "zsh-you-should-use is already installed." - fi - - if [ ! -d "$zsh_plugins_dir/zsh-syntax-highlighting" ]; then - echo "Installing zsh-syntax-highlighting..." - git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "$zsh_plugins_dir/zsh-syntax-highlighting" - else - echo "zsh-syntax-highlighting is already installed." - fi - - if [ ! -d "$zsh_plugins_dir/zsh-autosuggestions" ]; then - echo "Installing zsh-autosuggestions..." - git clone https://github.com/zsh-users/zsh-autosuggestions.git "$zsh_plugins_dir/zsh-autosuggestions" - else - echo "zsh-autosuggestions is already installed." - fi -} - -#============================================================================== - -#====================================== -# Common Sources/Dependencies -#====================================== -echo "$dotfiles_dir" >>.gitignore -echo "install.sh" >>.gitignore - -# Dotfiles -function config { - git --git-dir="$dotfiles_dir"/ --work-tree="$HOME" "$@" -} - -# Function to install dotfiles -install_dotfiles() { - # Check if the $dotfiles_dir directory exists - if [ -d "$dotfiles_dir" ]; then - config pull >/dev/null 2>&1 - update=true - else - git clone --bare "$dotfiles_url" "$dotfiles_dir" >/dev/null 2>&1 - update=false - fi - std_err_output=$(config checkout 2>&1 >/dev/null) || true - - if [[ $std_err_output == *"following untracked working tree files would be overwritten"* ]]; then - if [ "$update" = false ]; then - config checkout -- /dev/null 2>&1 - fi - fi - config config status.showUntrackedFiles no - - git config --global include.path "$HOME.gitconfig.aliases" - - # Prompt the user if they want to overwrite existing files - if prompt_user "Do you want to overwrite existing files and continue with the dotfiles setup?"; then - config fetch origin main:main - - config reset --hard main - - config checkout -f - if [ $? -eq 0 ]; then - echo "Successfully backed up conflicting dotfiles in $dotfiles_dir-backup/ and imported $dotfiles_dir." - else - handle_error "Mission failed." - fi - else - # User chose not to overwrite existing files - handle_error "Aborted by user. Exiting..." - fi -} - -# Check if necessary dependencies are installed -#-------------------------------------- -# Download dependencies (wget/curl) -check_download_dependencies() { - if [ -x "$(command -v wget)" ]; then - DOWNLOAD_COMMAND="wget" - elif [ -x "$(command -v curl)" ]; then - DOWNLOAD_COMMAND="curl" - else - handle_error "Neither wget nor curl found. Please install one of them to continue!" - fi -} - -# Download a file using wget or curl -download_file() { - local url="$1" - local output="$2" - - if [ "$DOWNLOAD_COMMAND" = "wget" ]; then - if ! wget -q --show-progress -O "$output" "$url"; then - handle_error "Download failed. Exiting..." - exit 1 - fi - elif [ "$DOWNLOAD_COMMAND" = "curl" ]; then - if ! curl --progress-bar -# -o "$output" "$url"; then - handle_error "Download failed. Exiting..." - exit 1 - fi - else - echo "Unsupported download command: $DOWNLOAD_COMMAND" - exit 1 - fi -} - -# Install yq -install_yq() { - if ! command -v yq &>/dev/null; then - echo "yq not found, installing..." - local bin_dir="$HOME/.local/bin" - local yq_url="https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64" - local yq_path="$bin_dir/yq" - - echo "Installing yq..." - - # Create bin directory if it doesn't exist - mkdir -p "$bin_dir" || { - echo "Error: Failed to create directory $bin_dir" - return 1 - } - - # Download yq - download_file "$yq_url" "$yq_path" || return 1 - - # Make yq executable - chmod +x "$yq_path" || { - echo "Error: Failed to set executable permissions for $yq_path" - return 1 - } - - echo "yq installed successfully to $bin_dir." - - # Add bin directory to PATH if not already added - if [[ ":$PATH:" != *":$bin_dir:"* ]]; then - echo "Adding $bin_dir to PATH" - echo "export PATH=\"$bin_dir:\$PATH\"" >>"$HOME/.bashrc" - export PATH="$bin_dir:$PATH" - fi - else - echo "yq is already installed." - fi -} - -#------------------------------------------------------------------------------ - -#============================================================================== - -#====================================== -# Check Operating System -#====================================== -check_os() { - if [[ "$OSTYPE" == "linux-gnu"* ]]; then - echo "Linux OS detected." - # Implement Linux-specific checks - elif [[ "$OSTYPE" == "darwin"* ]]; then - echo "MacOS detected." - # Implement MacOS-specific checks - elif [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" ]]; then - echo "Windows-like environment detected." - # Implement Windows-specific checks - else - handle_error "Unsupported operating system." - fi -} - -#============================================================================== - -#====================================== -# Linux -#====================================== - -# Check Distro -#-------------------------------------- - -# Detect package type from /etc/issue -_found_arch() { - local _ostype="$1" - shift - grep -qis "$*" /etc/issue && _distro="$_ostype" -} - -# Detect package type -_distro_detect() { - # Check if /etc/os-release exists and extract information - if [ -f /etc/os-release ]; then - source /etc/os-release - case "$ID" in - "arch") - _distro="PACMAN" - return - ;; - "debian") - _distro="DPKG" - return - ;; - "ubuntu") - _distro="DPKG" - return - ;; - "centos") - _distro="YUM" - return - ;; - "fedora") - _distro="YUM" - return - ;; - "opensuse" | "suse") - _distro="ZYPPER" - return - ;; - "gentoo") - _distro="PORTAGE" - return - ;; - esac - fi - - # Fallback method if /etc/os-release doesn't provide the information - if [ -f /etc/issue ]; then - _found_arch PACMAN "Arch Linux" && return - _found_arch DPKG "Debian GNU/Linux" && return - _found_arch DPKG "Ubuntu" && return - _found_arch YUM "CentOS" && return - _found_arch YUM "Red Hat" && return - _found_arch YUM "Fedora" && return - _found_arch ZYPPER "SUSE" && return - _found_arch PORTAGE "Gentoo" && return - fi - - # Check for package managers and prompt the user if none found - local available_package_managers=("apt" "pacman" "portage" "yum" "zypper") - for manager in "${available_package_managers[@]}"; do - if command -v "$manager" &>/dev/null; then - _distro="$manager" - return - fi - done - - # If none of the above methods work, prompt the user to specify the package manager - printf "Unable to detect the package manager. Please specify the package manager (e.g., apt, pacman, portage, yum, zypper): " - read -r user_package_manager - if [ -x "$(command -v "$user_package_manager")" ]; then - _distro="$user_package_manager" - return - else - _error "Specified package manager '$user_package_manager' not found. Exiting..." - exit 1 - fi -} - -#------------------------------------------------------------------------------ - -# Define directories to create -user_dirs() { - directories=('.cache' '.config' '.scripts') - - # Prompt the user if they want to use user-dirs.dirs - if prompt_user "Do you want to use the directories specified in user-dirs.dirs?"; then - # Check if ~/.config/user-dirs.dirs exists - config_dirs_file="$HOME/.config/user-dirs.dirs" - if [ -f "$config_dirs_file" ]; then - echo "Config file $config_dirs_file exists. Proceeding..." - else - echo "Error: Config file $config_dirs_file not found. Please check your configuration." - exit 1 - fi - - # Prompt the user if they want to change directory names - if prompt_user "Do you want to change the directory names to lowercase?"; then - # Function to change directory names from uppercase to lowercase - change_dir_names() { - local config_file="$HOME/.config/user-dirs.dirs" - - # Check if the system is not macOS - if [[ ! "$OSTYPE" == "darwin"* ]]; then - # Check if the config file exists - if [ -f "$config_file" ]; then - echo "Changing directory names from uppercase to lowercase..." - - # Read the lines from the config file and process them - while read -r line; do - # Extract variable name and path from each line - if [[ $line =~ ^[[:space:]]*([A-Z_]+)=\"(.+)\" ]]; then - var_name="${BASH_REMATCH[1]}" - var_path="${BASH_REMATCH[2]}" - - # Convert the variable name to lowercase - var_name_lowercase="$(echo "$var_name" | tr '[:upper:]' '[:lower:]')" - - # Check if the directory exists - if [ -d "$var_path" ]; then - # Rename the directory to lowercase - new_var_path="$HOME/${var_name_lowercase}" - mv "$var_path" "$new_var_path" - echo "Renamed $var_path to $new_var_path" - fi - fi - done <"$config_file" - - echo "Directory names changed successfully." - else - echo "The config file $config_file does not exist. Skipping directory name changes." - fi - else - echo "macOS detected. Skipping directory name changes." - fi - } - - # Run the function to change directory names - change_dir_names - elif prompt_user "Do you want to change the directory names to uppercase?"; then - # Function to change directory names from lowercase to uppercase - change_dir_names() { - local config_file="$HOME/.config/user-dirs.dirs" - - # Check if the system is not macOS - if [[ ! "$OSTYPE" == "darwin"* ]]; then - # Check if the config file exists - if [ -f "$config_file" ]; then - echo "Changing directory names from lowercase to uppercase..." - - # Read the lines from the config file and process them - while read -r line; do - # Extract variable name and path from each line - if [[ $line =~ ^[[:space:]]*([A-Z_]+)=\"(.+)\" ]]; then - var_name="${BASH_REMATCH[1]}" - var_path="${BASH_REMATCH[2]}" - - # Convert the variable name to uppercase - var_name_uppercase="$(echo "$var_name" | tr '[:lower:]' '[:upper:]')" - - # Check if the directory exists - if [ -d "$var_path" ]; then - # Rename the directory to uppercase - new_var_path="$HOME/${var_name_uppercase}" - mv "$var_path" "$new_var_path" - echo "Renamed $var_path to $new_var_path" - fi - fi - done <"$config_file" - - echo "Directory names changed successfully." - else - echo "The config file $config_file does not exist. Skipping directory name changes." - fi - else - echo "macOS detected. Skipping directory name changes." - fi - } - - # Run the function to change directory names - change_dir_names - #xdg-user-dirs-update - fi - fi - - # Create needed dirs and set proper permissions - for d in "${directories[@]}"; do - full_path="$HOME/$d" - if [ ! -d "$full_path" ]; then - mkdir -p "$full_path" - # Assuming $USER is defined or replace it with the desired user - chown -R "$USER" "$full_path" - echo "Created $full_path" - fi - done -} - -#------------------------------------------------------------------------------ - -# Update system -linux_update_system() { - # Prompt the user if they want to update the system - prompt_user "Do you want to update the system?" Y || { - echo "System update skipped." - return - } - - # Continue with system update based on detected package manager - case "$_distro" in - "PACMAN") - "$PRIVILEGE_TOOL" pacman -Syyy && "$PRIVILEGE_TOOL" pacman -Syu --noconfirm - ;; - "DPKG") - "$PRIVILEGE_TOOL" apt-get update && "$PRIVILEGE_TOOL" apt-get upgrade -y - ;; - "YUM") - "$PRIVILEGE_TOOL" yum update -y - ;; - "ZYPPER") - "$PRIVILEGE_TOOL" zypper --non-interactive update - ;; - "PORTAGE") - "$PRIVILEGE_TOOL" emerge --sync && "$PRIVILEGE_TOOL" emerge --ask --update --deep --newuse @world - ;; - *) - echo "Package manager not supported." - return 1 - ;; - esac -} - -#------------------------------------------------------------------------------ - -linux_install_packages() { - local failed_packages=() - local any_failures=false - local packages_file="packages.yml" - - # Check if yq is available - if ! command -v yq &>/dev/null; then - echo "Error: yq (YAML parser) is not installed or not found." - return 1 - fi - - # Read package names from packages.yml under PackageManager for most distributions - local packages=() - if [[ -f "$packages_file" ]]; then - while IFS= read -r package; do - packages+=("$package") - done < <(yq e '.PackageManager[]' "$packages_file" 2>/dev/null) - else - echo "Error: packages.yml not found." - return 1 - fi - - # Read the package manager type detected by _distro_detect() - case "$_distro" in - "PACMAN") - # Read additional package names from arch section if present - if [[ -f "$packages_file" ]]; then - while IFS= read -r package; do - packages+=("$package") - done < <(yq e '.arch[]' "$packages_file" 2>/dev/null) - fi - - # Installation using Pacman - for package in "${packages[@]}"; do - if ! pacman -Q "$package" &>/dev/null; then - if ! "$PRIVILEGE_TOOL" pacman -S --noconfirm "$package"; then - failed_packages+=("$package") - any_failures=true - fi - fi - done - ;; - "DPKG") - # Try installing packages with dpkg - for package in "${packages[@]}"; do - if ! dpkg-query -W "$package" &>/dev/null; then - if ! "$PRIVILEGE_TOOL" apt-get install -y "$package"; then - failed_packages+=("$package") - any_failures=true - fi - fi - done - ;; - "YUM") - # Try installing packages with yum - for package in "${packages[@]}"; do - if ! rpm -q "$package" &>/dev/null; then - if ! "$PRIVILEGE_TOOL" yum install -y "$package"; then - failed_packages+=("$package") - any_failures=true - fi - fi - done - ;; - "ZYPPER") - # Try installing packages with zypper - for package in "${packages[@]}"; do - if ! rpm -q "$package" &>/dev/null; then - if ! "$PRIVILEGE_TOOL" zypper --non-interactive install "$package"; then - failed_packages+=("$package") - any_failures=true - fi - fi - done - ;; - "PORTAGE") - # Try installing packages with emerge for Gentoo - if [[ -f "$packages_file" ]]; then - # Read package names from packages.yml under gentoo - gentoo_packages=() - while IFS= read -r package; do - gentoo_packages+=("$package") - done < <(yq e '.gentoo[]' "$packages_file" 2>/dev/null) - else - echo "Error: packages.yml not found." - return 1 - fi - - for package in "${gentoo_packages[@]}"; do - if [ "$package" != "" ]; then - if ! equery list "$package" &>/dev/null; then - if ! "$PRIVILEGE_TOOL" emerge "$package"; then - failed_packages+=("$package") - any_failures=true - fi - fi - fi - done - ;; - *) - echo "Package manager not supported." - return 1 - ;; - esac - - # Check if any packages failed to install - if "$any_failures"; then - echo "Failed to install the following packages:" - printf '%s\n' "${failed_packages[@]}" - return 1 - else - echo "All packages installed successfully." - return 0 - fi -} - -# Install Rust using rustup and install Rust packages from packages.yml -install_rust() { - if command -v "rustup" &>/dev/null; then - echo "Installing Rust using rustup..." - CARGO_HOME=${XDG_DATA_HOME:-$HOME/.local/share}/cargo RUSTUP_HOME=${XDG_DATA_HOME:-$HOME/.local/share}/rustup bash -c 'curl https://sh.rustup.rs -sSf | sh -s -- -y' - else - echo "Rust is already installed." - fi - - # Read Rust-specific packages from packages.yml under the 'rust' section - local rust_packages=() - if [[ -f "$packages_file" ]]; then - rust_packages=("$(yq '.rust[]' "$packages_file" 2>/dev/null)") - #rust_packages=("$(grep 'rust:' -A 1 "$packages_file" | grep -v 'rust:' | grep -vE '^\s*$' | sed 's/^\s*-\s*//')") - else - echo "Error: packages.yml not found." - return 1 - fi - - # Install Rust packages using cargo if rust is installed - if command -v "cargo" &>/dev/null; then - for package in "${rust_packages[@]}"; do - if ! cargo install "$package"; then - echo "Failed to install Rust package: $package" - return 1 - fi - done - else - echo "Cargo not found. Rust packages installation skipped." - fi -} - -# Function to install Node Version Manager (NVM) -install_nvm() { - # Set NVM_DIR environment variable - export NVM_DIR="$HOME/.config/nvm" - if [ ! -d "$NVM_DIR" ]; then - mkdir -p "$NVM_DIR" - fi - # Download and install or update NVM script - if command -v nvm &>/dev/null; then - echo "Updating Node Version Manager (NVM)..." - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash - else - echo "Installing Node Version Manager (NVM)..." - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash - fi - # Source NVM script to enable it in the current shell - if [ -s "$NVM_DIR/nvm.sh" ]; then - echo "Sourcing NVM script..." - . "$NVM_DIR/nvm.sh" - else - echo "NVM script not found. Make sure installation was successful." - return 1 - fi - - # Verify installation - if command -v nvm &>/dev/null; then - echo "NVM installation completed successfully." - export NVM_DIR="$HOME/.config/nvm" - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm - [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion - else - echo "NVM installation failed." - return 1 - fi -} - -install_node() { - # Check if Node.js is already installed - if ! command -v node &>/dev/null; then - echo "Node.js is already installed." - return - fi - - echo "Installing Node.js..." - # Set up environment variables for Node.js installation - export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node/ - export NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node/ - - # Install the latest stable version of Node.js using NVM - nvm - nvm install node - nvm use node - nvm install --lts - nvm alias default lts/* # Set LTS version as default - - echo "Node.js installation completed successfully." -} - -install_yarn() { - # Check if Yarn is already installed - if command -v yarn &>/dev/null; then - echo "Yarn is already installed." - return - fi - - # Check if the .yarn directory exists - if [ -d "$HOME/.yarn" ]; then - echo "Removing existing .yarn directory..." - rm -rf "$HOME/.yarn" - fi - - echo "Installing Yarn..." - # Install Yarn using npm - curl -o- -L https://yarnpkg.com/install.sh | bash - echo "Yarn installation completed successfully." -} - -setup_tmux_plugins() { - local tpm_dir="$HOME/.config/tmux/plugins/tpm" - local plugins_dir="$HOME/.config/tmux/plugins" - - # Ensure the plugins directory exists - if [ ! -d "$plugins_dir" ]; then - mkdir -p "$plugins_dir" - fi - - # Ensure the TPM directory exists - if [ ! -d "$tpm_dir" ]; then - mkdir -p "$tpm_dir" - fi - - if [ "$(ls -A "$tpm_dir")" ]; then - # TPM is already installed and directory is not empty, so we skip installation. - echo "TPM has been installed...skipping" - else - # If TPM directory doesn't exist or is empty, we proceed with installation. - if [ -d "$tpm_dir" ]; then - rm -rf "$tpm_dir" # Remove existing directory if it exists - fi - echo "Installing TPM..." - git clone https://github.com/tmux-plugins/tpm "$tpm_dir" - fi -} - -install_tailscale() { - if ! command -v tailscale &>/dev/null; then - curl -fsSL https://tailscale.com/install.sh | bash - fi -} - -setup_ssh() { - SSH_DIR="$HOME/.ssh" - if ! [[ -f "$SSH_DIR/authorized_keys" ]]; then - echo "Generating SSH keys" - mkdir -p "$SSH_DIR" - chmod 700 "$SSH_DIR" - ssh-keygen -b 4096 -t rsa -f "$SSH_DIR"/id_rsa -N '' -C "$USER@$HOSTNAME" - cat "$SSH_DIR"/id_rsa.pub >>"$SSH_DIR"/authorized_keys - fi -} - -linux_specific_steps() { - install_dotfiles - user_dirs - _distro_detect - check_privilege_tools - #set_locale - submodules - change_dir_names - #linux_update_system - install_yq - #install_rust - #install_nvm - #install_node - #install_yarn - install_tailscale - linux_install_packages - install_zsh_plugins - setup_tmux_plugins - setup_ssh - change_shell -} - -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ - -#============================================================================== - -#====================================== -# MacOS -#====================================== - -macos_specific_steps() { - set_locale - macos_install_packages - git_install_macos - -} - -#============================================================================== - -#====================================== -# Windows -#====================================== - -windows_specific_steps() { - check_git_installed_windows - install_dependencies_windows - windows_install_packages - git_install_windows - symlink_configuration_files_windows -} -#------------------------------------------------------------------------------ - -#============================================================================== - -#====================================== -# Main Installation -#====================================== - -# Main Installation -main_installation() { - echo "Starting main installation..." - - case "$OSTYPE" in - linux-gnu*) - linux_specific_steps - ;; - darwin*) - macos_specific_steps - ;; - msys* | cygwin*) - windows_specific_steps - ;; - *) - handle_error "Unsupported operating system." - ;; - esac - - sleep 1 -} - -# Script entry point -main() { - echo "Log File for Dotfiles Installation" >"$LOG_FILE" - check_download_dependencies - check_os - main_installation - handle_complete "Installation completed successfully." -} - -main "$@" |
