commit ac1fafc6fcfd6e191df1ff0f7c927738fd4a5916 Author: Javier Feliz Date: Tue Jul 8 21:57:02 2025 -0400 initial commit diff --git a/justgnome.sh b/justgnome.sh new file mode 100755 index 0000000..925d239 --- /dev/null +++ b/justgnome.sh @@ -0,0 +1,22 @@ +# Loads environment variables and util functions +load_dependencies() { + # Paths to the important directories + ROOT_DIRECTORY="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + + # Export Lib functions + set -o allexport + for f in $ROOT_DIRECTORY/lib/*; do source $f; done + set +o allexport + + # Export all the variables + export ROOT_DIRECTORY +} + +# What to do when the program begins +load_dependencies + +sudo chmod +x ./scripts/ -R + +./scripts/gnome/keybinds.sh +./scripts/gnome/extensions.sh +./scripts/gnome/misc.sh diff --git a/lib/apt.sh b/lib/apt.sh new file mode 100644 index 0000000..f05cfae --- /dev/null +++ b/lib/apt.sh @@ -0,0 +1,50 @@ +# Helper functions +show_spinner() { + local pid=$1 + local delay=0.1 + local spinstr='|/-\' + local i=0 + + while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do + # Get the current character for the spinner + printf "\b%c" "${spinstr:i++%${#spinstr}:1}" + sleep $delay + done + + # Clear the spinner once the process is complete + printf "\b \b \n" +} + +is_installed() { + local package="$1" + if command -v "$package" >/dev/null 2>&1; then + return 0 # success + else + return 1 # failure + fi +} + +install() { + for package in $1; do + # Check if app is installed + if command -v $package >/dev/null 2>&1; then + info "$package is already installed" + continue + fi + + info "Installing $package" + # Start apt in the background, suppressing all output and errors + sudo apt install -y $package >/dev/null 2>&1 & + + # Capture the PID of curl + local aptPid=$! + + # Show the spinner while apt is running + show_spinner $aptPid + + # Wait for curl to complete + wait $aptPid + done + # Check if the download was successful + success "Done" +} diff --git a/lib/gnome.sh b/lib/gnome.sh new file mode 100644 index 0000000..5717f62 --- /dev/null +++ b/lib/gnome.sh @@ -0,0 +1,21 @@ +reservebindslots() { + local count=$1 + local paths=() + + for ((i = 0; i < count; i++)); do + paths+=("'\/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${i}/'") + done + + local joined=$( + IFS=, + echo "[${paths[*]}]" + ) + + gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "$joined" +} + +custombind() { + gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$1/ name "$2" + gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$1/ command "$3" + gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$1/ binding "$4" +} diff --git a/lib/output.sh b/lib/output.sh new file mode 100644 index 0000000..9c4e576 --- /dev/null +++ b/lib/output.sh @@ -0,0 +1,20 @@ +info() { + local blue_bg="\033[44m" + local white_text="\033[97m" + local reset="\033[0m" + printf " ${blue_bg}${white_text} INFO ${reset} $1 \n" +} + +success() { + local green_bg="\033[42m" + local black_text="\033[30m" + local reset="\033[0m" + printf " ${green_bg}${black_text} SUCCESS ${reset} $1 \n" +} + +error() { + local red_bg="\033[41m" + local white_text="\033[97m" + local reset="\033[0m" + printf " ${red_bg}${white_text} ERROR ${reset} $1 \n" +} diff --git a/scripts/apps/brave.sh b/scripts/apps/brave.sh new file mode 100755 index 0000000..71f396e --- /dev/null +++ b/scripts/apps/brave.sh @@ -0,0 +1,7 @@ +sudo curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg + +echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg] https://brave-browser-apt-release.s3.brave.com/ stable main" | sudo tee /etc/apt/sources.list.d/brave-browser-release.list + +sudo apt update + +install brave-browser diff --git a/scripts/apps/discord.sh b/scripts/apps/discord.sh new file mode 100755 index 0000000..817384d --- /dev/null +++ b/scripts/apps/discord.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -euo pipefail + +# DISCORD_DEB="/tmp/discord.deb" +# DISCORD_URL="https://discord.com/api/download?platform=linux&format=deb" + +# info "Downloading Discord .deb package..." +# curl -L "$DISCORD_URL" -o "$DISCORD_DEB" + +# info "Installing Discord..." +# sudo apt install -y "$DISCORD_DEB" + +# info "Cleaning up downloaded package..." +# rm -f "$DISCORD_DEB" + +sudo snap install discord +success "Discord installed successfully." diff --git a/scripts/apps/git.sh b/scripts/apps/git.sh new file mode 100755 index 0000000..14a665d --- /dev/null +++ b/scripts/apps/git.sh @@ -0,0 +1,19 @@ +install git + +git config --global user.email "javier0eduardo@hotmail.com" +git config --global user.name "Javier Feliz" + +# Set up github cli and log in +if ! is_installed gh; then + sudo mkdir -p -m 755 /etc/apt/keyrings + out=$(mktemp) + wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg + cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg >/dev/null + sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg + sudo mkdir -p -m 755 /etc/apt/sources.list.d + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list >/dev/null + sudo apt update + install gh +else + success "Github CLI is already installed" +fi diff --git a/scripts/apps/starship-prompt.sh b/scripts/apps/starship-prompt.sh new file mode 100755 index 0000000..b2662fe --- /dev/null +++ b/scripts/apps/starship-prompt.sh @@ -0,0 +1 @@ +curl -sS https://starship.rs/install.sh | sh diff --git a/scripts/apps/yazi.sh b/scripts/apps/yazi.sh new file mode 100755 index 0000000..8d47607 --- /dev/null +++ b/scripts/apps/yazi.sh @@ -0,0 +1,16 @@ +info "Setting up yazi" + +if ! is_installed cargo; then + info "Setting up rust" + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + . "$HOME/.cargo/env" + rustup update +fi + +info "Installing dependencies" +install "ffmpeg 7zip jq poppler-utils fd-find ripgrep fzf zoxide imagemagick" + +if ! is_installed yazi; then + info "Installing yazi from cargo" + cargo install --locked yazi-fm yazi-cli +fi diff --git a/scripts/dev/langs.sh b/scripts/dev/langs.sh new file mode 100755 index 0000000..ba9688a --- /dev/null +++ b/scripts/dev/langs.sh @@ -0,0 +1,31 @@ +info "Setting up programming languages" + +info "***PHP***" +info "Courtesy of php.new" +if command -v php >/dev/null 2>&1; then + info "php.new script was already ran" +else + /bin/bash -c "$(curl -fsSL https://php.new/install/linux)" +fi +install php-pgsql +install php-xml + +info "Valet linux" +if command -v valet >/dev/null 2>&1; then + info "Valet linux is already installed" +else + composer global require cpriego/valet-linux + # Dependencies + install network-manager + install libnss3-tools + install jq + install xsel + valet install +fi + +info "***Go***" +install golang-go + +info "**NodeJS**" +install nodejs +install npm diff --git a/scripts/gnome/extensions.sh b/scripts/gnome/extensions.sh new file mode 100755 index 0000000..2fde672 --- /dev/null +++ b/scripts/gnome/extensions.sh @@ -0,0 +1,68 @@ +install gnome-shell-extension +install pipx +install gnome-tweaks +install gnome-extensions-app +pipx install gnome-extensions-cli --system-site-packages + +# Turn off default Ubuntu extensions +gnome-extensions disable tiling-assistant@ubuntu.com +gnome-extensions disable ubuntu-appindicators@ubuntu.com +gnome-extensions disable ubuntu-dock@ubuntu.com +gnome-extensions disable ding@rastersoft.com + +# Pause to assure user is ready to accept confirmations +gum confirm "To install Gnome extensions, you need to accept some confirmations. Ready?" + +# Install new extensions +gext install tactile@lundal.io +gext install just-perfection-desktop@just-perfection +gext install blur-my-shell@aunetx +gext install space-bar@luchrioh +gext install undecorate@sun.wxg@gmail.com +gext install AlphabeticalAppGrid@stuarthayhurst + +# Compile gsettings schemas in order to be able to set them +sudo cp ~/.local/share/gnome-shell/extensions/tactile@lundal.io/schemas/org.gnome.shell.extensions.tactile.gschema.xml /usr/share/glib-2.0/schemas/ +sudo cp ~/.local/share/gnome-shell/extensions/just-perfection-desktop\@just-perfection/schemas/org.gnome.shell.extensions.just-perfection.gschema.xml /usr/share/glib-2.0/schemas/ +sudo cp ~/.local/share/gnome-shell/extensions/blur-my-shell\@aunetx/schemas/org.gnome.shell.extensions.blur-my-shell.gschema.xml /usr/share/glib-2.0/schemas/ +sudo cp ~/.local/share/gnome-shell/extensions/space-bar\@luchrioh/schemas/org.gnome.shell.extensions.space-bar.gschema.xml /usr/share/glib-2.0/schemas/ +sudo cp ~/.local/share/gnome-shell/extensions/AlphabeticalAppGrid\@stuarthayhurst/schemas/org.gnome.shell.extensions.AlphabeticalAppGrid.gschema.xml /usr/share/glib-2.0/schemas/ +sudo glib-compile-schemas /usr/share/glib-2.0/schemas/ + +# Configure Tactile +gsettings set org.gnome.shell.extensions.tactile col-0 1 +gsettings set org.gnome.shell.extensions.tactile col-1 2 +gsettings set org.gnome.shell.extensions.tactile col-2 1 +gsettings set org.gnome.shell.extensions.tactile col-3 0 +gsettings set org.gnome.shell.extensions.tactile row-0 1 +gsettings set org.gnome.shell.extensions.tactile row-1 1 +gsettings set org.gnome.shell.extensions.tactile gap-size 32 + +# Configure Just Perfection +gsettings set org.gnome.shell.extensions.just-perfection animation 4 +gsettings set org.gnome.shell.extensions.just-perfection dash-app-running true +gsettings set org.gnome.shell.extensions.just-perfection workspace true +gsettings set org.gnome.shell.extensions.just-perfection workspace-popup false + +# Configure Blur My Shell +gsettings set org.gnome.shell.extensions.blur-my-shell.appfolder blur false +gsettings set org.gnome.shell.extensions.blur-my-shell.lockscreen blur false +gsettings set org.gnome.shell.extensions.blur-my-shell.screenshot blur false +gsettings set org.gnome.shell.extensions.blur-my-shell.window-list blur false +gsettings set org.gnome.shell.extensions.blur-my-shell.panel blur false +gsettings set org.gnome.shell.extensions.blur-my-shell.overview blur true +gsettings set org.gnome.shell.extensions.blur-my-shell.overview pipeline 'pipeline_default' +gsettings set org.gnome.shell.extensions.blur-my-shell.dash-to-dock blur true +gsettings set org.gnome.shell.extensions.blur-my-shell.dash-to-dock brightness 0.6 +gsettings set org.gnome.shell.extensions.blur-my-shell.dash-to-dock sigma 30 +gsettings set org.gnome.shell.extensions.blur-my-shell.dash-to-dock static-blur true +gsettings set org.gnome.shell.extensions.blur-my-shell.dash-to-dock style-dash-to-dock 0 + +# Configure Space Bar +gsettings set org.gnome.shell.extensions.space-bar.behavior smart-workspace-names false +gsettings set org.gnome.shell.extensions.space-bar.shortcuts enable-activate-workspace-shortcuts false +gsettings set org.gnome.shell.extensions.space-bar.shortcuts enable-move-to-workspace-shortcuts true +gsettings set org.gnome.shell.extensions.space-bar.shortcuts open-menu "@as []" + +# Configure AlphabeticalAppGrid +gsettings set org.gnome.shell.extensions.alphabetical-app-grid folder-order-position 'end' diff --git a/scripts/gnome/keybinds.sh b/scripts/gnome/keybinds.sh new file mode 100755 index 0000000..eb52866 --- /dev/null +++ b/scripts/gnome/keybinds.sh @@ -0,0 +1,56 @@ +# Super+c closes a window +gsettings set org.gnome.desktop.wm.keybindings close "['c']" + +# Make it easy to maximize like you can fill left/right +gsettings set org.gnome.desktop.wm.keybindings maximize "['Up']" + +# Full-screen with title/navigation bar +gsettings set org.gnome.desktop.wm.keybindings toggle-fullscreen "['F11']" + +# Use 6 fixed workspaces instead of dynamic mode +gsettings set org.gnome.mutter dynamic-workspaces false +gsettings set org.gnome.desktop.wm.preferences num-workspaces 6 + +# Unbind any existing Super+num binds +info "Unbinding any Super+N keys to use for workspaces instead" +for i in {1..9}; do + gsettings set org.gnome.shell.keybindings switch-to-application-$i "[]" +done + +# Use super for workspaces +gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1 "['1']" +gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-2 "['2']" +gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-3 "['3']" +gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "['4']" +gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-5 "['5']" +gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-6 "['6']" + +# Set right click to resize +gsettings set org.gnome.desktop.wm.preferences resize-with-right-button true + +# Clear all existing custom keybindings +echo "Clearing existing GNOME custom keybindings..." + +# Get existing keybinding paths +existing=$(gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings) +existing=$(echo "$existing" | sed "s/^\[//;s/\]$//;s/,//g" | tr -d "'") + +# Loop through each and clear its keys +for path in $existing; do + gsettings reset-recursively "org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:$path" 2>/dev/null +done + +# Clear the master list +gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "[]" + +echo "Adding custom keybindings" + +reservebindslots 8 +custombind 0 'Flameshot' "sh -c -- \"flameshot gui\"" 'Print' +custombind 1 'New Brave window' "brave-browser" 'o' +custombind 2 'New Brave incognito window' 'brave-browser --incognito' 'p' +custombind 3 'Kitty' 'kitty' 'q' +custombind 4 'File Explorer' 'nautilus --new-window' 'e' +custombind 5 'Project selector' 'kitty --start-as=normal -- bash -ic "proj"' 'p' +custombind 6 'TODO List' 'brave-browser --new-window --app=https://do.thatshit.live' 't' +custombind 7 'ChatGPT' 'brave-browser --new-window --app=https://chatgpt.com' 'Return' diff --git a/scripts/gnome/misc.sh b/scripts/gnome/misc.sh new file mode 100755 index 0000000..f12d67c --- /dev/null +++ b/scripts/gnome/misc.sh @@ -0,0 +1,5 @@ +# Set clock to 12 hour time +gsettings set org.gnome.desktop.interface clock-format '12h' + +# Set timezone to EST +timedatectl set-timezone America/New_York diff --git a/scripts/gnome/vscode.sh b/scripts/gnome/vscode.sh new file mode 100755 index 0000000..66e7496 --- /dev/null +++ b/scripts/gnome/vscode.sh @@ -0,0 +1,8 @@ +wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor >/tmp/packages.microsoft.gpg +sudo install -D -o root -g root -m 644 /tmp/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 +install code diff --git a/scripts/misc/nerd-font.sh b/scripts/misc/nerd-font.sh new file mode 100755 index 0000000..49a79c9 --- /dev/null +++ b/scripts/misc/nerd-font.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +set -euo pipefail + +FONT_DIR="$HOME/.local/share/fonts" +FONT_FILE="$FONT_DIR/HackNerdFont-Regular.ttf" +ZIP_URL="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Hack.zip" +ZIP_DEST="/tmp/Hack.zip" + +# Check if font is already installed +if [[ -f "$FONT_FILE" ]]; then + echo "Hack Nerd Font is already installed. Skipping." + exit 0 +fi + +echo "Hack Nerd Font not found. Proceeding with installation..." + +echo "Ensuring font directory exists at $FONT_DIR" +mkdir -p "$FONT_DIR" +chmod 755 "$FONT_DIR" + +echo "Downloading Hack Nerd Font zip..." +curl -L "$ZIP_URL" -o "$ZIP_DEST" + +echo "Unzipping font files to $FONT_DIR..." +unzip -o "$ZIP_DEST" -d "$FONT_DIR" + +echo "Refreshing font cache..." +fc-cache -fv + +echo "Hack Nerd Font installed successfully." diff --git a/scripts/misc/nvidia-drivers.sh b/scripts/misc/nvidia-drivers.sh new file mode 100755 index 0000000..45530a3 --- /dev/null +++ b/scripts/misc/nvidia-drivers.sh @@ -0,0 +1,8 @@ +install pkg-config libglvnd-dev dkms build-essential libegl-dev libegl1 +install libgl-dev libgl1 libgles-dev libgles1 libglvnd-core-dev libglx-dev libopengl-dev gcc make + +sudo add-apt-repository ppa:graphics-drivers/ppa +sudo apt update +version=$(ubuntu-drivers devices | grep "recommended" | awk '{print $3}' | grep -oP 'nvidia-driver-\K[0-9]+') +echo "Using version $version" +sudo apt install -y "nvidia-driver-$version" diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..d1d9867 --- /dev/null +++ b/start.sh @@ -0,0 +1,68 @@ +# Loads environment variables and util functions +load_dependencies() { + # Paths to the important directories + ROOT_DIRECTORY="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + + # Export Lib functions + set -o allexport + for f in $ROOT_DIRECTORY/lib/*; do source $f; done + set +o allexport + + # Export all the variables + export ROOT_DIRECTORY +} + +# What to do when the program begins +load_dependencies + +sudo chmod +x ./scripts/ -R + +# Optional. +# ./scripts/misc/nvidia-drivers.sh +# exit + +info "Apt update" +sudo apt update >/dev/null 2>&1 + +# Basics +install kitty +install curl +install wget +install eza +install xclip +install flameshot +./scripts/misc/nerd-font.sh +./scripts/apps/git.sh + +# Basic apps +if ! is_installed brave-browser; then + ./scripts/apps/brave.sh +else + success "Brave is already installed" +fi + +if ! is_installed discord; then + ./scripts/apps/discord.sh +else + success "Discord is already installed" +fi + +if ! is_installed code; then + ./scripts/apps/vscode.sh +else + success "VSCode is already installed" +fi + +# Dev tools +./scripts/dev/langs.sh +./scripts/apps/yazi.sh +./scripts/apps/starship-prompt.sh + +# Gnome +./scripts/gnome/keybinds.sh +./scripts/gnome/extensions.sh +./scripts/gnome/misc.sh + +# Ansible +install software-properties-common +install ansible