diff --git a/setup/modules/Desktop-Enviroments/hyprland-new.sh b/setup/modules/Desktop-Enviroments/hyprland-new.sh index 9a8641a..c686b26 100755 --- a/setup/modules/Desktop-Enviroments/hyprland-new.sh +++ b/setup/modules/Desktop-Enviroments/hyprland-new.sh @@ -1,124 +1,139 @@ - #!/bin/bash - set -e echo "=== Hyprland Environment Installer ===" # 1. Update system and install Flatpak echo "Updating system and installing Flatpak..." -sudo pacman -Syu --noconfirm flatpak -sudo systemctl enable --now flatpak-system-helper.service +sudo pacman -Syu --noconfirm --needed flatpak -# 2. Install required packages (from hyprland.sh) +# 2. Install required packages echo "Installing required packages..." -sudo pacman -Syu --noconfirm --needed hyprland hyprcursor wl-clipboard hyprpaper hyprlock wofi kitty dunst nwg-dock-hyprland nwg-drawer nwg-menu nwg-look python cmake meson cpio pkgconf ruby-pkg-config hyprsunset hypridle ksshaskpass nm-connection-editor network-manager-applet blueman bluez pipewire alsa-utils firefox greetd-tuigreet grim slurp gst-plugin-pipewire imagemagick nerd-fonts otf-font-awesome pipewire-alsa pipewire-jack pipewire-pulse qt5-wayland qt6-wayland swww ttf-jetbrains-mono wireplumber wofi qt6ct xdg-desktop-portal-hyprland xdg-utils xorg-server xorg-xinit papirus-icon-theme cool-retro-term qalculate-gtk iwd dbus thunar tumbler thunar-archive-plugin thunar-shares-plugin thunar-volman hyprpicker pcmanfm-qt udisks2 ly +sudo pacman -Syu --noconfirm --needed \ + hyprland hyprcursor wl-clipboard hyprpaper hyprlock wofi kitty dunst \ + nwg-dock-hyprland nwg-drawer nwg-menu nwg-look \ + python cmake meson cpio pkgconf ruby-pkg-config \ + hyprsunset hypridle ksshaskpass \ + nm-connection-editor network-manager-applet blueman bluez \ + pipewire alsa-utils firefox greetd-tuigreet \ + grim slurp gst-plugin-pipewire imagemagick \ + nerd-fonts otf-font-awesome \ + pipewire-alsa pipewire-jack pipewire-pulse \ + qt5-wayland qt6-wayland swww ttf-jetbrains-mono wireplumber \ + qt6ct xdg-desktop-portal-hyprland xdg-utils \ + xorg-server xorg-xinit papirus-icon-theme \ + cool-retro-term qalculate-gtk iwd dbus \ + thunar tumbler thunar-archive-plugin thunar-shares-plugin thunar-volman \ + hyprpicker pcmanfm-qt udisks2 ly -# 3. Run core.sh steps (network, cron, greetd, fail2ban, udisks2) +# 3. Enable essential services echo "Enabling essential services..." sudo systemctl enable NetworkManager.service -#sudo systemctl enable cronie.service -#sudo systemctl enable greetd.service -sudo systemctl disable getty@tty1.service +sudo systemctl disable getty@tty1.service || true sudo systemctl enable ly@tty1.service -#sudo systemctl enable fail2ban.service sudo systemctl enable udisks2.service -# 4. Install AUR packages (from hyprland.sh) +# 4. Install AUR packages echo "Installing AUR packages..." rustup default stable -yay -Syu --answerdiff None --answerclean All hyprland-workspaces vicinae-bin bluetuith wvkbd kew iwmenu bzmenu pinta localsend udiskie rust rustup +yay -Syu --answerdiff None --answerclean All --noconfirm \ + hyprland-workspaces vicinae-bin bluetuith wvkbd kew iwmenu \ + walker-bin ulauncher bzmenu pinta localsend udiskie -# 5. EWW bar selection and compilation (from hyprland.sh) +# 5. EWW bar selection and compilation echo "Setting up EWW bar..." rm -rf ~/.config/eww -read -n1 -p "Install eww bar for PC, Notebook or Tablet [P,N,T]: " doit +read -n1 -p "Install eww bar for PC, Notebook or Tablet [P/N/T]: " doit +echo case $doit in - n|N) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww/ ~/.config/ ;; - p|P) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww-nobattery/ ~/.config/eww ;; - t|T) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww-touch/ ~/.config/eww ;; - *) echo "enter a valid decision" ;; + n|N) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww/ ~/.config/ ;; + p|P) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww-nobattery/ ~/.config/eww ;; + t|T) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww-touch/ ~/.config/eww ;; + *) echo "No valid choice — skipping EWW copy. Run manually later." ;; esac echo "Compiling EWW..." +mkdir -p ~/install-tmp cd ~/install-tmp git clone https://github.com/elkowar/eww cd eww cargo build --release --no-default-features --features=wayland -cd target/release -chmod +x ./eww -sudo cp ./eww /usr/bin +chmod +x target/release/eww +sudo cp target/release/eww /usr/bin/ +cd ~ # 6. Theme and icon setup sudo cp -r ~/Dotfiles/gtk-themes/cyberqueer /usr/share/themes sudo cp ~/Dotfiles/desktopenvs/hyprland/btop/themes/cyberqueer.theme /usr/share/btop/themes sudo cp -f ~/Dotfiles/etc-ly-config.ini /etc/ly/config.ini -sudo ln -s /usr/bin/kitty /usr/bin/xdg-terminal-exec -sudo ln /usr/bin/ksshaskpass /usr/lib/ssh/ssh-askpass +sudo ln -sf /usr/bin/kitty /usr/bin/xdg-terminal-exec +sudo ln -sf /usr/bin/ksshaskpass /usr/lib/ssh/ssh-askpass # 7. Cursor setup mkdir -p ~/.icons -wget https://github.com/guillaumeboehm/Nordzy-cursors/releases/download/v2.3.0/Nordzy-cursors-lefthand.tar.gz -tar -zxvf Nordzy-cursors-lefthand.tar.gz -C $HOME/.icons/ +wget -O ~/install-tmp/Nordzy-cursors-lefthand.tar.gz \ + https://github.com/guillaumeboehm/Nordzy-cursors/releases/download/v2.3.0/Nordzy-cursors-lefthand.tar.gz +tar -zxf ~/install-tmp/Nordzy-cursors-lefthand.tar.gz -C ~/.icons/ -# 8. Enable Bluetooth and networking services +# 8. Enable Bluetooth and wireless services sudo systemctl enable bluez sudo systemctl enable bluetooth.service sudo systemctl enable iwd.service -# 9. Hyprland plugin setup -hyprpm update -hyprpm add https://github.com/hyprwm/hyprland-plugins +# 9. Hyprland plugins — must be run from inside a live Hyprland session +# Run manually after first login: +# hyprpm update +# hyprpm add https://github.com/hyprwm/hyprland-plugins -# 10. Copy configs (not symlink, except hypr-usr) +# 10. Copy configs echo "Copying configs..." -CONFIGS=(kitty mimeapps.list vicinae walker hypr xfce4 wofi dunst alacritty nwg-dock-hyprland nwg-drawer nwg-panel ulauncher scripts btop gtk-3.0 eww eww-nobattery) +CONFIGS=(kitty mimeapps.list vicinae walker ulauncher hypr xfce4 wofi dunst alacritty nwg-dock-hyprland nwg-drawer nwg-panel scripts btop gtk-3.0) for cfg in "${CONFIGS[@]}"; do - rm -rf ~/.config/$cfg - cp -r ~/Dotfiles/desktopenvs/hyprland/$cfg ~/.config/ + rm -rf ~/.config/"$cfg" + cp -r ~/Dotfiles/desktopenvs/hyprland/"$cfg" ~/.config/ done -# Copy hypr-usr files as local configs cp ~/Dotfiles/desktopenvs/hyprland/hypr-usr/* ~/.config/ # 11. Wallpaper and resources +mkdir -p ~/Pictures cp ~/Dotfiles/resources/fflogo.svg ~/Pictures/fflogo.svg -wget https://cloud.abdelbaki.eu/apps/theming/image/background?v=15 -O ~/Pictures/background.jpg +wget "https://cloud.abdelbaki.eu/apps/theming/image/background?v=15" -O ~/Pictures/background.jpg -# 12. Python venv setup +# 12. Python venv for scripts python -m venv ~/.config/python-script ~/.config/python-script/bin/pip install speedtest-cli requests pint simpleeval parsedatetime -# 13. Udiskie icon fix (from fix_udiskie_icons.sh) +# 13. Udiskie icon fix echo "Applying Udiskie icon fix..." PAPIRUS_DIR="/usr/share/icons/Papirus-Dark/status" HICOLOR_DIR="/usr/share/icons/hicolor/scalable/status" -if [ ! -d "$PAPIRUS_DIR" ]; then - echo "Papirus-Dark icon directory not found. Please install Papirus icon theme." - exit 1 +if [ -d "$PAPIRUS_DIR" ]; then + sudo ln -sf "$PAPIRUS_DIR/checkbox-checked.svg" "$HICOLOR_DIR/udiskie-checkbox-checked.svg" + sudo ln -sf "$PAPIRUS_DIR/checkbox-unchecked.svg" "$HICOLOR_DIR/udiskie-checkbox-unchecked.svg" + sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor +else + echo "Papirus-Dark not found — skipping udiskie icon fix." fi -sudo ln -sf "$PAPIRUS_DIR/checkbox-checked.svg" "$HICOLOR_DIR/udiskie-checkbox-checked.svg" -sudo ln -sf "$PAPIRUS_DIR/checkbox-unchecked.svg" "$HICOLOR_DIR/udiskie-checkbox-unchecked.svg" -sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor -echo "Udiskie icons overridden successfully with Papirus equivalents." -# 14. Enable and start udiskie -echo "Enabling and starting udiskie..." +# 14. Enable udiskie sudo systemctl enable udiskie.service sudo systemctl start udiskie.service -# 15. Create config update script in home directory +# 15. Generate config-update helper cat << 'EOF' > ~/update-hypr-configs.sh #!/bin/bash -CONFIGS=(kitty mimeapps.list walker vicinae hypr xfce4 wofi dunst alacritty nwg-dock-hyprland nwg-drawer nwg-panel ulauncher scripts btop gtk-3.0 eww eww-nobattery) +CONFIGS=(kitty mimeapps.list walker ulauncher vicinae hypr xfce4 wofi dunst alacritty nwg-dock-hyprland nwg-drawer nwg-panel scripts btop gtk-3.0) for cfg in "${CONFIGS[@]}"; do - cp -r ~/Dotfiles/desktopenvs/hyprland/$cfg ~/.config/ + cp -r ~/Dotfiles/desktopenvs/hyprland/"$cfg" ~/.config/ done -echo "Configs updated!" +echo "Configs updated." EOF chmod +x ~/update-hypr-configs.sh -echo "=== Installation Complete! ===" -# 16. Install other packages -sudo curl -sL $(curl -s https://api.github.com/repos/5hubham5ingh/WallRizz/releases/latest | grep -Po '"browser_download_url": "\K[^"]+' | grep WallRizz) | tar -xz && sudo mv WallRizz /usr/bin/ -WallRizz -w +# 16. WallRizz (run manually after login — requires a running desktop session) +# curl -sL "$(curl -s https://api.github.com/repos/5hubham5ingh/WallRizz/releases/latest \ +# | grep -Po '"browser_download_url": "\K[^"]+' | grep WallRizz)" | tar -xz \ +# && sudo mv WallRizz /usr/bin/ + +echo "=== Hyprland installation complete. Reboot to start. ===" diff --git a/setup/modules/Desktop-Enviroments/sway.sh b/setup/modules/Desktop-Enviroments/sway.sh index 1bd57d7..0eb529f 100644 --- a/setup/modules/Desktop-Enviroments/sway.sh +++ b/setup/modules/Desktop-Enviroments/sway.sh @@ -1,67 +1,73 @@ #!/bin/bash +set -euo pipefail +# Install packages +echo "Installing required packages..." +sudo pacman -Syu --noconfirm --needed \ + alacritty base base-devel brightnessctl btop btrfs-progs cmatrix dmenu \ + fastfetch firefox foot git greetd-tuigreet glfw gnu-netcat grim grub \ + gst-plugin-pipewire hollywood htop imagemagick iwd libpulse \ + libva-intel-driver libva-mesa-driver lightdm lightdm-gtk-greeter \ + linux linux-firmware lynx micro nano networkmanager nmap openssh \ + pavucontrol pipewire pipewire-alsa pipewire-jack pipewire-pulse \ + slurp smartmontools sway swaybg swayidle swaylock \ + ttf-jetbrains-mono vim vulkan-intel vulkan-radeon waybar wget \ + wireless_tools wireplumber wireshark-qt wofi wpa_supplicant \ + xdg-utils xf86-video-amdgpu xf86-video-ati xf86-video-nouveau \ + xf86-video-vmware xorg-server xorg-xinit xorg-xwayland \ + yazi zram-generator zsh zsh-completions -#install components -echo "Installing required Packages" -sudo pacman -Syu alacritty base base-devel brightnessctl btop btrfs-progs cmatrix dmenu fastfetch firefox foot gitgreetd-tuigreet glfw gnu-netcat grim grub gst-plugin-pipewire hollywood htop imagemagick iwd libpulse libva-intel-driver libva-mesa-driver lightdm lightdm-gtk-greeter linux linux-firmware lynx micro nano networkmanager nmap openssh pavucontrol pipewire pipewire-alsa pipewire-jack pipewire-pulse slurp smartmontools sway swaybg swayidle swaylock ttf-jetbrains-mono vim vulkan-intel vulkan-radeon waybar wget wireless_tools wireplumber wireshark-qt wofi wpa_supplicant xdg-utils xf86-video-amdgpu xf86-video-ati xf86-video-nouveau xf86-video-vmware xorg-server xorg-xinit xorg-xwayland yazi zram-generator zsh zsh-completions +# yay +if ! command -v yay &>/dev/null; then + echo "Installing yay..." + mkdir -p ~/install-tmp + git clone https://aur.archlinux.org/yay.git ~/install-tmp/yay + cd ~/install-tmp/yay + makepkg -si --noconfirm + cd ~ +else + echo "yay already installed." +fi -#aur/yay setup -echo "Installing yay" -cd ~ -mkdir install-tmp -cd install-tmp -git clone https://aur.archlinux.org/yay.git -cd yay -makepkg -si -yay --version -cd ~/install-tmp - -#networkmanager setup -echo "enabling NetworkManager" +# Services +echo "Enabling NetworkManager..." sudo systemctl enable NetworkManager.service -#desktop env dotfiles -echo "Installing Desktop enviroment configs" -ln -s ~/Dotfiles/desktopenvs/sway/sway ~/.config/sway -ln -s ~/Dotfiles/desktopenvs/sway/alacritty ~/.config/alacritty +# Desktop env configs +echo "Linking desktop environment configs..." +ln -sf ~/Dotfiles/desktopenvs/sway/sway ~/.config/sway +ln -sf ~/Dotfiles/desktopenvs/sway/alacritty ~/.config/alacritty -#zsh setup -echo "Setting up zsh" +# Shell +echo "Setting up zsh..." chsh -s /usr/bin/zsh -#homectl update --shell=/usr/bin/zsh -#starship setup -echo "Installing Starship" -curl -sS https://starship.rs/install.sh | sh +echo "Installing Starship..." +curl -sS https://starship.rs/install.sh | sh -s -- --yes -#ohmyzsh setup -echo "Installing oh my zsh" -sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" +echo "Installing oh-my-zsh..." +RUNZSH=no CHSH=no sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" -#ohmyzsh plugins -echo "Installing oh my zsh plugins" -git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting -git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions +echo "Installing oh-my-zsh plugins..." +ZSH_CUSTOM="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}" +git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \ + "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" +git clone https://github.com/zsh-users/zsh-autosuggestions \ + "$ZSH_CUSTOM/plugins/zsh-autosuggestions" -#greetd setup -echo "Installing greetd" +# greetd config sudo cp -f ~/Dotfiles/desktopenvs/hyprland/greetd-tuigreet/config.toml /etc/greetd/config.toml sudo systemctl enable greetd.service +# Dotfiles +echo "Linking dotfiles..." +rm -f ~/.bashrc ~/.zshrc +ln -sf ~/Dotfiles/.bashrc ~/.bashrc +ln -sf ~/Dotfiles/.zshrc ~/.zshrc +ln -sf ~/Dotfiles/starship.toml ~/.config/starship.toml +ln -sf ~/Dotfiles/micro/ ~/.config/micro +ln -sf ~/Dotfiles/yazi/ ~/.config/yazi +mkdir -p ~/.config/spotify-tui +ln -sf ~/Dotfiles/spotify-tui/config.yml ~/.config/spotify-tui/config.yml -#cli dotfiles -echo "Installing bash and zsh setting files" -rm ~/.bashrc -rm ~/.zshrc -ln -s ~/Dotfiles/.bashrc ~/.bashrc -ln -s ~/Dotfiles/.zshrc ~/.zshrc - -ln -s ~/Dotfiles/starship.toml ~/.config/starship.toml -ln -s ~/Dotfiles/micro/ ~/.config/micro -ln -s ~/Dotfiles/yazi/ ~/.config/yazi -ln -s ~/Dotfiles/spotify-tui/config.yml ~/.config/spotify-tui/config.yml - -#final reboot -echo "Press any key to reboot" -read -systemctl reboot +echo "=== Sway installation complete. Reboot to start. ===" diff --git a/setup/modules/core-packages.sh b/setup/modules/core-packages.sh index 2a4d38e..20bfffd 100644 --- a/setup/modules/core-packages.sh +++ b/setup/modules/core-packages.sh @@ -1,2 +1,17 @@ #!/bin/bash -sudo pacman -Syu git 7zip pipewire distrobox htop nano vim firefox flatpak grub inetutils networkmanager neovim openssh base base-devel cockpit cockpit-files cockpit-podman zip unzip ufw fastfetch git wireplumber wpa_supplicant tree traceroute smartmontools ruby-pkg-config rust rustup usbutils pciutils qrencode bind btop gcc glib2 python python-pip atool nvim curl wget fastfetch fail2ban man-db wprs mc yazi atftp base base-devel btrfs-progs bluez ffmpeg gcc git grub htop inetutils iwd jq ldns libpulse linux linux-firmware openssh smartmontools traceroute ufw unzip zip vim wireless_tools wpa_supplicant zram-generator podman podman-compose vnstat inetutils symlinks arch-install-scripts greetd-tuigreet fd less cronie udisks2 udisks2-btrfs udiskie +set -euo pipefail + +sudo pacman -Syu --noconfirm --needed \ + 7zip arch-install-scripts atftp atool \ + base base-devel bind bluez btrfs-progs btop \ + cockpit cockpit-files cockpit-podman cronie curl \ + distrobox fail2ban fastfetch fd ffmpeg firefox flatpak \ + gcc glib2 greetd-tuigreet grub \ + htop inetutils iwd jq ldns less libpulse linux linux-firmware \ + man-db mc nano neovim networkmanager \ + openssh pciutils pipewire podman podman-compose \ + python python-pip qrencode ruby-pkg-config rust rustup \ + smartmontools symlinks traceroute tree \ + udisks2 udisks2-btrfs udiskie ufw usbutils \ + vim vnstat wget wireplumber wireless_tools wpa_supplicant wprs \ + yazi zip unzip zram-generator diff --git a/setup/modules/optional-Modules/gaming-packages.sh b/setup/modules/optional-Modules/gaming-packages.sh index 36b3ea2..845764e 100755 --- a/setup/modules/optional-Modules/gaming-packages.sh +++ b/setup/modules/optional-Modules/gaming-packages.sh @@ -1,6 +1,11 @@ -sudo pacman -S spotify-launcher steam -yay -S vesktop -flatpak install flathub org.prismlauncher.PrismLauncher +#!/bin/bash +set -euo pipefail + +sudo pacman -S --noconfirm --needed spotify-launcher steam + +yay -S --answerdiff None --answerclean All --noconfirm vesktop + +flatpak install -y flathub org.prismlauncher.PrismLauncher rm -rf ~/.config/Vencord cp -r ~/Dotfiles/desktopenvs/hyprland/Vencord ~/.config/ @@ -8,5 +13,4 @@ cp -r ~/Dotfiles/desktopenvs/hyprland/Vencord ~/.config/vesktop curl -fsSL https://raw.githubusercontent.com/spicetify/cli/main/install.sh | sh rm -rf ~/.config/spicetify -ln -s ~/Dotfiles/desktopenvs/hyprland/spicetify ~/.config/ - +ln -sf ~/Dotfiles/desktopenvs/hyprland/spicetify ~/.config/ diff --git a/setup/modules/optional-Modules/network-developer-packages.sh b/setup/modules/optional-Modules/network-developer-packages.sh index 3de8f02..4e2a448 100755 --- a/setup/modules/optional-Modules/network-developer-packages.sh +++ b/setup/modules/optional-Modules/network-developer-packages.sh @@ -1,3 +1,8 @@ #!/bin/bash -sudo pacman -S nmap wireshark-qt bind traceroute curl wget mtr tcpdump net-tools iputils podman-desktop kubectl ipcalc -#openbsd-netcat \ No newline at end of file +set -euo pipefail + +sudo pacman -S --noconfirm --needed \ + nmap wireshark-qt bind traceroute curl wget \ + mtr tcpdump net-tools iputils \ + podman-desktop kubectl ipcalc + # openbsd-netcat diff --git a/setup/modules/optional-Modules/wprs.sh b/setup/modules/optional-Modules/wprs.sh index d7ce080..06bc546 100755 --- a/setup/modules/optional-Modules/wprs.sh +++ b/setup/modules/optional-Modules/wprs.sh @@ -1,2 +1,4 @@ #!/bin/bash -yay -S wprs-git +set -euo pipefail + +yay -S --answerdiff None --answerclean All --noconfirm wprs-git diff --git a/setup/modules/optional-Modules/zfs.sh b/setup/modules/optional-Modules/zfs.sh index c4140d4..9f8b564 100755 --- a/setup/modules/optional-Modules/zfs.sh +++ b/setup/modules/optional-Modules/zfs.sh @@ -1,5 +1,5 @@ #!/bin/bash +set -euo pipefail -echo "Installing ZFS Kernel Module" - -yay -S zfs-dkms \ No newline at end of file +echo "Installing ZFS kernel module..." +yay -S --answerdiff None --answerclean All --noconfirm zfs-dkms diff --git a/setup/modules/package-managers.sh b/setup/modules/package-managers.sh index 758601f..66cca03 100644 --- a/setup/modules/package-managers.sh +++ b/setup/modules/package-managers.sh @@ -1,30 +1,35 @@ #!/bin/bash -pacman -Syu flatpak -#aur/yay setup -echo "Installing yay" -cd ~ -mkdir install-tmp -cd install-tmp -git clone https://aur.archlinux.org/yay.git -cd yay -makepkg -si -yay --version -cd ~/install-tmp -# Download and install nvm: -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash +set -euo pipefail -# in lieu of restarting the shell -\. "$HOME/.nvm/nvm.sh" +sudo pacman -Syu --noconfirm --needed flatpak + +# yay +if ! command -v yay &>/dev/null; then + echo "Installing yay..." + mkdir -p ~/install-tmp + git clone https://aur.archlinux.org/yay.git ~/install-tmp/yay + cd ~/install-tmp/yay + makepkg -si --noconfirm + cd ~ +else + echo "yay already installed." +fi + +# rustup / rust +if ! command -v rustup &>/dev/null; then + echo "Installing rustup..." + sudo pacman -S --noconfirm --needed rustup +fi rustup default stable -# Download and install Node.js: -nvm install 22 - -# Verify the Node.js version: -node -v # Should print "v22.14.0". -nvm current # Should print "v22.14.0". - -# Verify npm version: -npm -v # Should print "10.9.2". - - +# nvm + Node.js +if ! command -v node &>/dev/null; then + echo "Installing nvm and Node.js 22..." + if [ ! -d "$HOME/.nvm" ]; then + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash + fi + . "$HOME/.nvm/nvm.sh" + nvm install 22 +else + echo "Node.js already installed: $(node -v)" +fi diff --git a/setup/modules/shell-setup.sh b/setup/modules/shell-setup.sh index e2eba6e..3ee459c 100755 --- a/setup/modules/shell-setup.sh +++ b/setup/modules/shell-setup.sh @@ -1,31 +1,32 @@ - #!/bin/bash -set -e # Exit on error +set -euo pipefail -#="\e[0m"# Colors for better UX +GREEN="\e[32m" +YELLOW="\e[33m" +RESET="\e[0m" -log() { echo -e "${GREEN}✔ $1${RESET}"; } +log() { echo -e "${GREEN}✔ $1${RESET}"; } skip() { echo -e "${YELLOW}↷ $1${RESET}"; } # Update system log "Updating system..." sudo pacman -Syu --noconfirm -# Install base packages (including nvim) +# Install base packages PACKAGES=(zsh neovim curl pyright bash atftp bash-language-server btop clang fastfetch fzf hyfetch lua-language-server micro nano pulsemixer yazi z qrencode distrobox dysk python python-pip glow) for pkg in "${PACKAGES[@]}"; do if ! pacman -Qi "$pkg" &>/dev/null; then log "Installing $pkg..." - sudo pacman -S --noconfirm "$pkg" + sudo pacman -S --noconfirm --needed "$pkg" else skip "$pkg already installed." fi done -# Install yay if not installed +# yay if ! command -v yay &>/dev/null; then log "Installing yay..." - sudo pacman -S --noconfirm git base-devel + sudo pacman -S --noconfirm --needed git base-devel git clone https://aur.archlinux.org/yay.git /tmp/yay cd /tmp/yay && makepkg -si --noconfirm cd ~ @@ -33,39 +34,32 @@ else skip "yay already installed." fi -# Install Rust & Cargo if not installed +# Rust / Cargo if ! command -v cargo &>/dev/null; then log "Installing Rust & Cargo..." curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - source "$HOME/.cargo/env" + . "$HOME/.cargo/env" else skip "Rust & Cargo already installed." fi -# Install nvm and Node.js if not installed +# nvm + Node.js if ! command -v node &>/dev/null; then log "Installing nvm and Node.js..." if [ ! -d "$HOME/.nvm" ]; then curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash fi - source "$HOME/.nvm/nvm.sh" + . "$HOME/.nvm/nvm.sh" nvm install 22 else skip "Node.js already installed." fi -# Verify npm -if ! command -v npm &>/dev/null; then - log "npm should be installed with Node.js. Please check your PATH." -else - skip "npm already available." -fi - -# Git config +# git config git config --global core.editor nvim -# Dotfiles setup -log "Setting up dotfiles..." +# Dotfiles +log "Deploying dotfiles..." mkdir -p ~/.config ~/Pictures ln -sf ~/Dotfiles/.bashrc ~/.bashrc @@ -75,7 +69,7 @@ ln -sf ~/Dotfiles/starship.toml ~/.config/starship.toml rm -rf ~/.config/micro cp -r ~/Dotfiles/micro ~/.config/ -# Vim Plug installer +# vim-plug if [ ! -f ~/.local/share/nvim/site/autoload/plug.vim ]; then curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim @@ -84,7 +78,8 @@ fi rm -rf ~/.config/nvim ln -sf ~/Dotfiles/nvim ~/.config/nvim mkdir -p ~/.local/share/nvim/site/plugged/vim-airline-themes/autoload/airline/themes -cp -f ~/Dotfiles/nvim/cyberqueer-airline.vim ~/.local/share/nvim/site/plugged/vim-airline-themes/autoload/airline/themes/ +cp -f ~/Dotfiles/nvim/cyberqueer-airline.vim \ + ~/.local/share/nvim/site/plugged/vim-airline-themes/autoload/airline/themes/ rm -rf ~/.config/yazi ln -sf ~/Dotfiles/yazi ~/.config/yazi @@ -94,36 +89,38 @@ ln -sf ~/Dotfiles/spotify-tui ~/.config/spotify-tui cp -f ~/Dotfiles/resources/fflogo.svg ~/Pictures/fflogo.svg -# Install Starship if not installed +# Starship if ! command -v starship &>/dev/null; then log "Installing Starship..." - curl -sS https://starship.rs/install.sh | sh + curl -sS https://starship.rs/install.sh | sh -s -- --yes else skip "Starship already installed." fi -# Install oh-my-zsh if not installed +# oh-my-zsh (RUNZSH=no prevents installer from spawning a new shell) if [ ! -d "$HOME/.oh-my-zsh" ]; then log "Installing oh-my-zsh..." - sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" + RUNZSH=no CHSH=no sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" else skip "oh-my-zsh already installed." fi -# Install oh-my-zsh plugins if not installed -ZSH_CUSTOM=${ZSH_CUSTOM:-~/.oh-my-zsh/custom} +# oh-my-zsh plugins +ZSH_CUSTOM="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}" 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" + git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \ + "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" else skip "zsh-syntax-highlighting already installed." fi if [ ! -d "$ZSH_CUSTOM/plugins/zsh-autosuggestions" ]; then - git clone https://github.com/zsh-users/zsh-autosuggestions "$ZSH_CUSTOM/plugins/zsh-autosuggestions" + git clone https://github.com/zsh-users/zsh-autosuggestions \ + "$ZSH_CUSTOM/plugins/zsh-autosuggestions" else skip "zsh-autosuggestions already installed." fi -# Set zsh as default shell if not already +# Default shell if [ "$SHELL" != "/usr/bin/zsh" ]; then log "Setting zsh as default shell..." chsh -s /usr/bin/zsh @@ -131,6 +128,4 @@ else skip "zsh is already the default shell." fi -log "✅ Setup complete!" -GREEN="\e[32m" -YELLOW="\e[33m" +log "Shell setup complete." diff --git a/setup/tui-install.sh b/setup/tui-install.sh new file mode 100755 index 0000000..eb19396 --- /dev/null +++ b/setup/tui-install.sh @@ -0,0 +1,200 @@ +#!/bin/bash +# tui-install.sh — TUI installer for the_miro's Arch dotfiles + +set -uo pipefail + +# ── Paths ───────────────────────────────────────────────────────────────────── +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DOTFILES_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +MODULES="$DOTFILES_DIR/setup/modules" +LOG="$HOME/dotfiles-install.log" +TMP_D="$(mktemp -d)" +trap 'rm -rf "$TMP_D"' EXIT + +BACKTITLE="the_miro's Arch Dotfiles" + +# ── Cyberqueer dialog theme ─────────────────────────────────────────────────── +export DIALOGRC="$TMP_D/dialogrc" +cat > "$DIALOGRC" <<'EOF' +use_shadow = ON +use_colors = ON +screen_color = (BLACK,BLACK,ON) +shadow_color = (BLACK,BLACK,ON) +title_color = (MAGENTA,BLACK,ON) +border_color = (MAGENTA,BLACK,ON) +button_active_color = (BLACK,MAGENTA,ON) +button_inactive_color = (WHITE,BLACK,OFF) +button_key_active_color = (BLACK,CYAN,ON) +button_key_inactive_color = (CYAN,BLACK,ON) +button_label_active_color = (BLACK,MAGENTA,ON) +button_label_inactive_color = (WHITE,BLACK,OFF) +inputbox_color = (WHITE,BLACK,OFF) +inputbox_border_color = (MAGENTA,BLACK,ON) +menubox_color = (WHITE,BLACK,OFF) +menubox_border_color = (MAGENTA,BLACK,ON) +item_color = (WHITE,BLACK,OFF) +item_selected_color = (BLACK,MAGENTA,ON) +tag_color = (CYAN,BLACK,ON) +tag_selected_color = (BLACK,CYAN,ON) +tag_key_color = (CYAN,BLACK,ON) +tag_key_selected_color = (BLACK,CYAN,ON) +check_color = (WHITE,BLACK,OFF) +check_selected_color = (BLACK,MAGENTA,ON) +uarrow_color = (MAGENTA,BLACK,ON) +darrow_color = (MAGENTA,BLACK,ON) +EOF + +# ── State ───────────────────────────────────────────────────────────────────── +STEP=0 +TOTAL=0 + +# ── Helpers ─────────────────────────────────────────────────────────────────── +require_dialog() { + command -v dialog &>/dev/null && return + echo "dialog not found — installing..." + sudo pacman -S --noconfirm dialog || { echo "Failed to install dialog."; exit 1; } +} + +die() { + clear + printf "\n Error: %s\n\n" "$1" >&2 + exit 1 +} + +log_sep() { + printf "\n══════════════════════════════════\n %s\n %s\n" "$1" "$(date)" >> "$LOG" +} + +# Run a module script in the terminal (dialog is cleared so stdin/stdout work +# normally — pacman prompts, yay builds, etc. all function as expected). +run_module() { + local label="$1" script="$2" + STEP=$(( STEP + 1 )) + log_sep "[$STEP/$TOTAL] $label" + + clear + printf "\n\033[1;35m [$STEP/$TOTAL] %s\033[0m\n" "$label" + printf "\033[35m ─────────────────────────────────────────────\033[0m\n\n" + + local rc=0 + bash "$script" 2>&1 | tee -a "$LOG" || rc=${PIPESTATUS[0]} + + if [[ $rc -ne 0 ]]; then + dialog --backtitle "$BACKTITLE" \ + --title " Module Failed " \ + --yesno "$label exited with code $rc.\n\nContinue anyway?" 8 54 \ + || { clear; exit 1; } + fi +} + +count_steps() { + local c="$1" de="$2" + TOTAL=0 + [[ "$c" == *"pkg"* ]] && TOTAL=$(( TOTAL + 1 )) + [[ "$c" == *"core"* ]] && TOTAL=$(( TOTAL + 1 )) + [[ "$c" == *"svc"* ]] && TOTAL=$(( TOTAL + 1 )) + [[ "$c" == *"shell"* ]] && TOTAL=$(( TOTAL + 1 )) + [[ "$c" == *"de"* && "$de" != "none" ]] && TOTAL=$(( TOTAL + 1 )) + [[ "$c" == *"py"* ]] && TOTAL=$(( TOTAL + 1 )) + [[ "$c" == *"zfs"* ]] && TOTAL=$(( TOTAL + 1 )) + [[ "$c" == *"game"* ]] && TOTAL=$(( TOTAL + 1 )) + [[ "$c" == *"netdev"* ]] && TOTAL=$(( TOTAL + 1 )) + [[ "$c" == *"wprs"* ]] && TOTAL=$(( TOTAL + 1 )) +} + +# ── Preflight ───────────────────────────────────────────────────────────────── +[[ $EUID -eq 0 ]] && die "Run as your normal user (not root)." +command -v pacman &>/dev/null || die "pacman not found — Arch Linux required." + +require_dialog + +> "$LOG" +printf "Dotfiles install: %s\nDotfiles dir: %s\n" "$(date)" "$DOTFILES_DIR" >> "$LOG" + +# ── Welcome ─────────────────────────────────────────────────────────────────── +dialog --backtitle "$BACKTITLE" \ + --title " Welcome " \ + --msgbox "\n\ + the_miro's Arch dotfiles installer\n\ + Cyberqueer · Wayland · Hyprland\n\ + ─────────────────────────────────────────\n\ +\n\ + Arch Linux — network admin, development & gaming\n\ +\n\ + Source: $DOTFILES_DIR\n\ + Log: $LOG\n" 14 62 + +# ── Component selection ─────────────────────────────────────────────────────── +COMPONENTS=$(dialog --backtitle "$BACKTITLE" \ + --title " Select Components " \ + --checklist "Space toggles · Enter confirms · Esc quits" 22 68 10 \ + "pkg" "Package managers yay · nvm · rust" on \ + "core" "Core packages 100+ base system packages" on \ + "svc" "Core services NetworkManager · cronie · fail2ban" on \ + "shell" "Shell setup zsh · nvim · yazi · micro · starship" on \ + "de" "Desktop environment (choose on next screen)" off \ + "py" "Python tools pyright · pipx · python-pynvim" off \ + "zfs" "ZFS support zfs-dkms" off \ + "game" "Gaming Steam · Vesktop · Spotify · Prism" off \ + "netdev" "Network dev tools nmap · wireshark · kubectl" off \ + "wprs" "WPRS wprs-git (AUR)" off \ + 3>&1 1>&2 2>&3) || { clear; echo "Aborted."; exit 0; } + +# ── DE selection ────────────────────────────────────────────────────────────── +DE="none" +if [[ "$COMPONENTS" == *"de"* ]]; then + DE=$(dialog --backtitle "$BACKTITLE" \ + --title " Desktop Environment " \ + --menu "Select a desktop environment:" 11 56 3 \ + "hyprland" "Hyprland — Wayland WM, full setup (primary)" \ + "sway" "Sway — Wayland tiling WM" \ + "none" "Skip DE installation" \ + 3>&1 1>&2 2>&3) || DE="none" +fi + +# ── Confirmation ────────────────────────────────────────────────────────────── +SUMMARY="" +[[ "$COMPONENTS" == *"pkg"* ]] && SUMMARY+=" ✦ Package managers (yay, nvm, rust)\n" +[[ "$COMPONENTS" == *"core"* ]] && SUMMARY+=" ✦ Core packages\n" +[[ "$COMPONENTS" == *"svc"* ]] && SUMMARY+=" ✦ Core services\n" +[[ "$COMPONENTS" == *"shell"* ]] && SUMMARY+=" ✦ Shell setup\n" +[[ "$COMPONENTS" == *"de"* && "$DE" != "none" ]] && SUMMARY+=" ✦ Desktop environment: $DE\n" +[[ "$COMPONENTS" == *"py"* ]] && SUMMARY+=" ✦ Python tools\n" +[[ "$COMPONENTS" == *"zfs"* ]] && SUMMARY+=" ✦ ZFS support\n" +[[ "$COMPONENTS" == *"game"* ]] && SUMMARY+=" ✦ Gaming packages\n" +[[ "$COMPONENTS" == *"netdev"* ]] && SUMMARY+=" ✦ Network dev tools\n" +[[ "$COMPONENTS" == *"wprs"* ]] && SUMMARY+=" ✦ WPRS\n" + +dialog --backtitle "$BACKTITLE" \ + --title " Confirm Installation " \ + --yesno "\n Components to install:\n\n${SUMMARY}\n Log: $LOG\n\n Proceed?" \ + 20 62 || { clear; echo "Aborted."; exit 0; } + +count_steps "$COMPONENTS" "$DE" + +# ── Installation ────────────────────────────────────────────────────────────── +[[ "$COMPONENTS" == *"pkg"* ]] && run_module "Package Managers" "$MODULES/package-managers.sh" +[[ "$COMPONENTS" == *"core"* ]] && run_module "Core Packages" "$MODULES/core-packages.sh" +[[ "$COMPONENTS" == *"svc"* ]] && run_module "Core Services" "$MODULES/core.sh" +[[ "$COMPONENTS" == *"shell"* ]] && run_module "Shell Setup" "$MODULES/shell-setup.sh" + +if [[ "$COMPONENTS" == *"de"* && "$DE" != "none" ]]; then + case "$DE" in + hyprland) run_module "Hyprland" "$MODULES/Desktop-Enviroments/hyprland-new.sh" ;; + sway) run_module "Sway" "$MODULES/Desktop-Enviroments/sway.sh" ;; + esac +fi + +[[ "$COMPONENTS" == *"py"* ]] && run_module "Python Tools" "$MODULES/optional-Modules/python.sh" +[[ "$COMPONENTS" == *"zfs"* ]] && run_module "ZFS" "$MODULES/optional-Modules/zfs.sh" +[[ "$COMPONENTS" == *"game"* ]] && run_module "Gaming Packages" "$MODULES/optional-Modules/gaming-packages.sh" +[[ "$COMPONENTS" == *"netdev"* ]] && run_module "Network Dev Tools" "$MODULES/optional-Modules/network-developer-packages.sh" +[[ "$COMPONENTS" == *"wprs"* ]] && run_module "WPRS" "$MODULES/optional-Modules/wprs.sh" + +# ── Done ────────────────────────────────────────────────────────────────────── +dialog --backtitle "$BACKTITLE" \ + --title " Done " \ + --msgbox "\n All selected components installed.\n\n Log: $LOG\n\n A reboot may be required for all changes to take effect.\n" 12 58 + +clear +printf "\n Done. Log: %s\n\n" "$LOG"