#!/bin/bash SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) PROJECT_ROOT=$(dirname "$SCRIPT_DIR") source "$SCRIPT_DIR/roles.sh" common::log_step() { local message="$1" printf -- '\033[33m %s\n\033[37m' "$message" } common::log_section() { local message="$1" printf -- "\033[32m %s\n\033[37m" "$message" } common::is_debug() { [[ "${UPDATE_DEBUG:-0}" == "1" ]] } common::debug_skip() { local message="$1" common::log_step "[debug] ${message} (skipped)" } common::sudo_systemctl() { if common::is_debug; then common::debug_skip "sudo systemctl $*" else sudo systemctl "$@" fi } common::user_systemctl() { if common::is_debug; then common::debug_skip "systemctl --user $*" else systemctl --user "$@" fi } common::log_success() { local message="$1" printf -- '\033[32m %s\n\033[37m' "$message" } common::uppercase_hostname() { hostname | tr '[:lower:]' '[:upper:]' } common::ensure_local_bin() { mkdir -p "$HOME/.local/bin" } common::ensure_config_dir() { mkdir -p "$HOME/.config" } common::symlink() { local target="$1" local link_path="$2" ln -sf "$target" "$link_path" } common::link_update_shortcut() { common::ensure_local_bin common::symlink "$PROJECT_ROOT/update_wrapper.sh" "$HOME/.local/bin/update" } common::link_start_scripts() { common::ensure_local_bin common::symlink "$PROJECT_ROOT/start_nvim.sh" "$HOME/.local/bin/start_nvim" if [[ -f "$PROJECT_ROOT/start_toolbox.sh" ]]; then common::symlink "$PROJECT_ROOT/start_toolbox.sh" "$HOME/.local/bin/start_toolbox" fi } common::link_shell_profiles() { local variant="$1" # arch|ubuntu case "$variant" in arch) common::symlink "$PROJECT_ROOT/bashrc_arch" "$HOME/.bashrc" common::symlink "$PROJECT_ROOT/gitconfig" "$HOME/.gitconfig" ;; ubuntu) common::symlink "$PROJECT_ROOT/bashrc_ubuntu" "$HOME/.bashrc" if [[ "${WSL:-no}" == "yes" ]]; then common::symlink "$PROJECT_ROOT/gitconfig.work" "$HOME/.gitconfig" else common::symlink "$PROJECT_ROOT/gitconfig" "$HOME/.gitconfig" fi ;; esac } common::link_tmux_conf() { common::symlink "$PROJECT_ROOT/tmux.conf" "$HOME/.tmux.conf" } common::link_lua_check() { common::symlink "$PROJECT_ROOT/luacheckrc" "$HOME/.luacheckrc" } common::link_starship_config() { mkdir -p "$HOME/.config" common::symlink "$PROJECT_ROOT/config/starship.toml" "$HOME/.config/starship.toml" } common::link_nvim_config() { mkdir -p "$HOME/.config/nvim" common::symlink "$PROJECT_ROOT/config/nvim/init.lua" "$HOME/.config/nvim/init.lua" } common::link_alacritty_config() { mkdir -p "$HOME/.config/alacritty" common::symlink "$PROJECT_ROOT/config/alacritty/alacritty.toml" "$HOME/.config/alacritty/alacritty.toml" } common::link_lazygit_config() { mkdir -p "$HOME/.config/lazygit" common::symlink "$PROJECT_ROOT/config/lazygit/config.yml" "$HOME/.config/lazygit/config.yml" } common::install_fzf() { common::log_step "Installing fzf" rm -rf "$HOME/.fzf" git clone --depth 1 https://github.com/junegunn/fzf.git "$HOME/.fzf" "$HOME/.fzf/install" --all if [[ -f "$HOME/.fzf.bash" ]]; then # shellcheck disable=SC1090 source "$HOME/.fzf.bash" fi } common::install_virtualhere_client() { local manage_service="$1" # start|skip common::log_step "Installing VirtualHere client" cd "$HOME" wget https://www.virtualhere.com/sites/default/files/usbclient/scripts/virtualhereclient.service wget https://www.virtualhere.com/sites/default/files/usbclient/vhclientx86_64 wget https://www.virtualhere.com/sites/default/files/usbclient/vhuit64 chmod +x ./vhclientx86_64 chmod +x ./vhuit64 sudo mv ./vhclientx86_64 /usr/sbin sudo mv ./vhuit64 /usr/sbin echo "$USER ALL=(ALL:ALL) NOPASSWD: /usr/sbin/vhclientx86_64" | sudo tee "/etc/sudoers.d/${USER}+vhclientx86_64" echo "$USER ALL=(ALL:ALL) NOPASSWD: /usr/sbin/vhuit64" | sudo tee "/etc/sudoers.d/${USER}+vhuit64" sudo mv virtualhereclient.service /etc/systemd/system/virtualhereclient.service if [[ "$manage_service" == "start" ]]; then common::sudo_systemctl daemon-reload common::sudo_systemctl enable virtualhereclient.service common::sudo_systemctl start virtualhereclient.service fi } common::print_completion() { local message="$1" common::log_success "${message}" }