From dc33ab44c4cdfd476d3477b94b2450f2e666644b Mon Sep 17 00:00:00 2001 From: MangoPig Date: Wed, 3 Dec 2025 02:34:09 +0000 Subject: [PATCH] Advanced upgrade :D --- .zsh_aliases | 27 +++---- .zshrc | 96 ++++++++++++++----------- Makefile | 41 +++++++++++ setup.sh | 195 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 298 insertions(+), 61 deletions(-) create mode 100644 Makefile create mode 100755 setup.sh diff --git a/.zsh_aliases b/.zsh_aliases index ff850c5..1381c08 100644 --- a/.zsh_aliases +++ b/.zsh_aliases @@ -1,4 +1,4 @@ -# .zsh_aliases +# .zsh_aliases # Aliases alias c="clear" @@ -12,7 +12,12 @@ alias ll="eza --icons -la" alias grep="grep --color=auto" -alias update="sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt autoclean" +alias src="source ~/.zshrc && echo '🔄 Reloaded .zshrc'" + +alias cat="bat" +alias fd="fd" + +alias tree="eza --icons -T --git-ignore" # Navigation alias ..="cd .." @@ -37,22 +42,6 @@ alias cpu="lscpu" # Network alias ip="ip -c" # IP command with colorized output -alias ports="netstat -tulanp" # List all listening ports +alias ports="ss -tulanp" # List all listening ports alias myip="curl ifconfig.me" # Get public IP address alias pingg="ping google.com" # Network Testing - -# Docker -alias dps="docker ps" # Docker PS -alias dpsa="docker ps -a" # Docker PS All -alias drm="docker rm $(docker ps -a -q)" # Docker Remove All Stopped Containers -alias dclean="docker system prune -af" # Docker Clean All - -dockcup() { # Docker Compose Up - local file="${1:-docker-compose.yaml}" # Default to docker-compose.yaml if no argument is given - docker compose -f "$file" up -d -} - -dockcdown() { # Docker Compose Down - local file="${1:-docker-compose.yaml}" # Default to docker-compose.yaml if no argument is given - docker compose -f "$file" down -} diff --git a/.zshrc b/.zshrc index 9efce0f..f331950 100644 --- a/.zshrc +++ b/.zshrc @@ -1,4 +1,4 @@ -# .zshrc +# .zshrc # Path to your Oh My Zsh installation. export ZSH="$HOME/.oh-my-zsh" @@ -7,56 +7,68 @@ PROMPT="%B%~%b :: " RPROMPT="%n@%m" # Plugins -plugins=( - git - zsh-syntax-highlighting - zsh-autosuggestions -) +plugins=(git zsh-syntax-highlighting zsh-autosuggestions) source $ZSH/oh-my-zsh.sh -# Add to PATH -export PATH="$HOME/.local/bin:$PATH" +# Golang and GVM +[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm" - -# GVM -[[ -s "/home/mangopig/.gvm/scripts/gvm" ]] && source "/home/mangopig/.gvm/scripts/gvm" - -# Golang -# Ensure Go binary is in PATH -export GOROOT=/usr/local/go -export GOPATH=$HOME/Programming/go -export GOBIN=$GOPATH/bin - -# Set PATH correctly -export PATH=$GOROOT/bin:$GOBIN:$GOPATH/bin:$PATH - -# NVM +# Node and NVM (Lazy Load) export NVM_DIR="$HOME/.nvm" -[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" -[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" + +nvm_load() { + echo "💤 Waking up NVM..." + unset -f nvm node npm npx + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" + "$@" +} + +nvm() { nvm_load "nvm" "$@"; } +node() { nvm_load "node" "$@"; } +npm() { nvm_load "npm" "$@"; } +npx() { nvm_load "npx" "$@"; } + +# Rust and Cargo +[ -f "$HOME/.cargo/env" ] && source "$HOME/.cargo/env" # Zoxide eval "$(zoxide init --cmd cd zsh)" -# Source the aliases file -source ~/.zsh_aliases +# Source Aliases & Secrets +[ -f ~/.zsh_aliases ] && source ~/.zsh_aliases +[ -f ~/.zsh_secrets ] && source ~/.zsh_secrets -# Source Secrets -source ~/.zsh_secrets +# Conda (Dynamic Path) +# __conda_setup="$('$HOME/Programming/miniconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)" +# if [ $? -eq 0 ]; then +# eval "$__conda_setup" +# else +# if [ -f "$HOME/Programming/miniconda3/etc/profile.d/conda.sh" ]; then +# . "$HOME/Programming/miniconda3/etc/profile.d/conda.sh" +# else +# export PATH="$HOME/Programming/miniconda3/bin:$PATH" +# fi +# fi +# unset __conda_setup -# >>> conda initialize >>> -# !! Contents within this block are managed by 'conda init' !! -__conda_setup="$('/home/mangopig/Programming/miniconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)" -if [ $? -eq 0 ]; then - eval "$__conda_setup" -else - if [ -f "/home/mangopig/Programming/miniconda3/etc/profile.d/conda.sh" ]; then - . "/home/mangopig/Programming/miniconda3/etc/profile.d/conda.sh" - else - export PATH="/home/mangopig/Programming/miniconda3/bin:$PATH" - fi -fi -unset __conda_setup -# <<< conda initialize <<< +# Add to PATH +export PATH="$HOME/.local/bin:$PATH" +# --------------------------------------------------------------------- +# DYNAMIC VS CODE PATH (Run LAST) +# --------------------------------------------------------------------- + +# Get Windows Username +WIN_USER=$(cmd.exe /c 'echo %USERNAME%' 2>/dev/null | tr -d '\r') + +# Define potential paths (User Install vs System Install) +VSCODE_USER="/mnt/c/Users/$WIN_USER/AppData/Local/Programs/Microsoft VS Code/bin" +VSCODE_SYS="/mnt/c/Program Files/Microsoft VS Code/bin" + +# Add whichever exists to PATH +if [ -d "$VSCODE_USER" ]; then + export PATH="$PATH:$VSCODE_USER" +elif [ -d "$VSCODE_SYS" ]; then + export PATH="$PATH:$VSCODE_SYS" +fi \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2a7de03 --- /dev/null +++ b/Makefile @@ -0,0 +1,41 @@ +# Makefile for Dotfiles + +# Tells Make that these targets are not actual files +.PHONY: all setup stow clean update docker-test + +# Default target (runs when you just type 'make') +all: stow + +# Full Setup +setup: + bash setup.sh + +# Just stow the dotfiles +stow: + stow . --target=$$HOME --ignore="setup.sh" --ignore=".git" --ignore=".gitignore" --ignore="README.md" --ignore=".zsh_secrets" --ignore=".zsh_secrets.example" --ignore="LICENSE" --ignore="Makefile" + @echo "Dotfiles linked." + +# Clean old files and links +clean: + stow -D . --target=$$HOME + @echo "Links removed." + +# Pull Git Updates +update: + git pull origin main + make setup + +# Docker Tests +test-ubuntu: + @echo "Ubuntu Test" + docker run -it --rm -e TERM=xterm-256color -v $(PWD):/root/dotfiles ubuntu:latest \ + bash -c "export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install -y sudo git make curl && \ + cd /root/dotfiles && \ + make setup" + +test-arch: + @echo "Spawning Arch Container..." + docker run -it --rm -e TERM=xterm-256color -v $(PWD):/root/dotfiles archlinux:latest \ + bash -c "pacman -Sy --noconfirm base-devel git make sudo && cd /root/dotfiles && make setup" \ No newline at end of file diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..afb4529 --- /dev/null +++ b/setup.sh @@ -0,0 +1,195 @@ +#!/bin/bash +set -e + +# Variables +ZSH_CUSTOM="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}" +DOTFILES_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# Bold Colors +YELLOW='\033[1;33m' +BLUE='\033[1;34m' +RED='\033[1;31m' +GREEN='\033[1;32m' +NC='\033[0m' + +# OS Detection +echo -e "${BLUE} LOG:${YELLOW} Checking System...${NC}" + +if [ -f /etc/os-release ]; then + . /etc/os-release + OS=$ID +fi + +# Package Installation +PACKAGES=( + curl wget git sudo + zsh tmux + unzip tar gzip + build-essential + openssl + python bison mercurial + ripgrep fd bat fzf jq + btop httpie gnupg + zoxide stow + bind nmap socat tcpdump net-tools + strace gdb hexyl +) + +FINAL_LIST="" + +for pkg in "${PACKAGES[@]}"; do + case "$pkg" in + "build-essential") + [ "$OS" == "arch" ] && pkg="base-devel" + [ "$OS" == "ubuntu" ] && pkg="build-essential" + ;; + "python") + [ "$OS" == "arch" ] && pkg="python" + [ "$OS" == "ubuntu" ] && pkg="python3 python3-pip python3-venv" + ;; + "fd") + [ "$OS" == "arch" ] && pkg="fd" + [ "$OS" == "ubuntu" ] && pkg="fd-find" + ;; + "bat") + [ "$OS" == "arch" ] && pkg="bat" + [ "$OS" == "ubuntu" ] && pkg="bat" + ;; + "openssl") + [ "$OS" == "arch" ] && pkg="openssl" + [ "$OS" == "ubuntu" ] && pkg="libssl-dev" + ;; + "bind") + [ "$OS" == "arch" ] && pkg="bind" + [ "$OS" == "ubuntu" ] && pkg="dnsutils" + ;; + *) + esac + + FINAL_LIST="$FINAL_LIST $pkg" +done + +# Extra packages for specific distros +if [ "$OS" == "arch" ] || [ "$OS" == "manjaro" ]; then + FINAL_LIST="$FINAL_LIST eza" +fi + +if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then + FINAL_LIST="$FINAL_LIST ca-certificates bsdmainutils pkg-config cmake" +fi + +echo -e "${BLUE} LOG:${YELLOW} Installing: ${NC}$FINAL_LIST" + +if [ "$OS" == "arch" ] || [ "$OS" == "manjaro" ]; then + sudo pacman -S --noconfirm --needed $FINAL_LIST +elif [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then + sudo DEBIAN_FRONTEND=noninteractive apt-get update + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y $FINAL_LIST +fi + +if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then + echo -e "${BLUE} LOG:${YELLOW} Fixing Ubuntu binary names...${NC}" + [ -f /usr/bin/fdfind ] && sudo ln -sf /usr/bin/fdfind /usr/local/bin/fd + [ -f /usr/bin/batcat ] && sudo ln -sf /usr/bin/batcat /usr/local/bin/bat +fi + +# Docker Installation +if command -v docker &> /dev/null; then + echo -e "${GREEN} LOG: Docker is already installed. Skipping...${NC}" +else + echo -e "${BLUE} LOG:${YELLOW} Docker not found. Installing Native Docker Engine...${NC}" + + # ARCH LINUX + if [ "$OS" == "arch" ] || [ "$OS" == "manjaro" ]; then + sudo pacman -S --noconfirm --needed docker docker-compose + fi + + # UBUNTU / DEBIAN + if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then + echo -e "${BLUE} LOG:${YELLOW} Setting up Official Docker Repository...${NC}" + sudo install -m 0755 -d /etc/apt/keyrings + sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc + sudo chmod a+r /etc/apt/keyrings/docker.asc + + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + + sudo DEBIAN_FRONTEND=noninteractive apt-get update + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + fi +fi + +# Install NVM, GVM, Rustup +echo -e "${BLUE} LOG:${YELLOW} Installing NVM, GVM and Rustup...${NC}" + +# NVM +if [ ! -d "$HOME/.nvm" ]; then + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash +fi + +# GVM +if [ ! -d "$HOME/.gvm" ]; then + bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) +fi + +# Rustup +if ! command -v rustup &> /dev/null; then + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +fi + +# Install Eza with Cargo +echo -e "${BLUE} LOG:${YELLOW} Installing Eza via Cargo...${NC}" +if ! command -v eza &> /dev/null; then + source "$HOME/.cargo/env" + cargo install eza +fi + +# Docker Group +echo -e "${BLUE} LOG:${YELLOW} Setting up Docker group...${NC}" +if ! getent group docker > /dev/null 2>&1; then + sudo groupadd docker +fi +sudo usermod -aG docker $(whoami) + +# Zsh and Oh My Zsh Setup +echo -e "${BLUE} LOG:${YELLOW} Setting up Oh My Zsh...${NC}" +if [ ! -d "$HOME/.oh-my-zsh" ]; then + sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended +fi + +echo -e "${BLUE} LOG:${YELLOW} Installing Zsh plugins...${NC}" +if [ ! -d "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" ]; then + git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" +fi + +if [ ! -d "$ZSH_CUSTOM/plugins/zsh-autosuggestions" ]; then + git clone https://github.com/zsh-users/zsh-autosuggestions "$ZSH_CUSTOM/plugins/zsh-autosuggestions" +fi + +# Making Zsh the default shell +echo -e "${BLUE} LOG:${YELLOW} Setting Zsh as the default shell...${NC}" +if [ "$SHELL" != "$(which zsh)" ]; then + sudo chsh -s "$(which zsh)" $(whoami) +fi + +# File Cleanup +echo -e "${BLUE} LOG:${YELLOW} Cleaning up old configs...${NC}" +rm -f "$HOME/.zshrc" "$HOME/.zsh_aliases" + +# Ensure secrets file exists +echo -e "${BLUE} LOG:${YELLOW} Ensuring secrets file exists...${NC}" +touch "$HOME/.zsh_secrets" + +# Stow Dotfiles +echo -e "${BLUE} LOG:${YELLOW} Stowing dotfiles...${NC}" +cd "$DOTFILES_DIR" +stow . --target="$HOME" --ignore="setup.sh" --ignore=".git" --ignore=".gitignore" --ignore="README.md" --ignore=".zsh_secrets" --ignore=".zsh_secrets.example" --ignore="LICENSE" --ignore="Makefile" + +# Finish +echo -e "${GREEN} LOG: Setup Complete! Please restart your terminal to apply all changes.${NC}" +echo -e "${GREEN} You may need to log out and back in for Docker group changes to take effect.${NC}" +echo -e "${GREEN} Setup GVM by running 'go listall' and 'gvm use [version] --default'.${NC}" +echo -e "${GREEN} Setup NVM by running 'nvm install --lts' and 'nvm use --lts'${NC}" +echo -e "${GREEN} Setup Rust by running 'rustup default stable'${NC}" \ No newline at end of file