ud
This commit is contained in:
158
setup
158
setup
@ -1,173 +1,137 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Arch/Debian post-install setup script
|
||||
# Purpose: install software, configure user environment, and apply
|
||||
# security tweaks. Base system + networking handled separately.
|
||||
# -------------------------------------------------------------------
|
||||
# --- privilege keepalive ---
|
||||
# prompt once for sudo and keep alive in background
|
||||
if ! sudo -v; then
|
||||
echo "❌ sudo access required. aborting."
|
||||
exit 1
|
||||
fi
|
||||
# keep sudo alive until script ends
|
||||
while true; do sudo -n true; sleep 30; kill -0 "$$" || exit; done 2>/dev/null &
|
||||
|
||||
# --- distro detection ---
|
||||
if [[ -f /etc/os-release ]]; then
|
||||
. /etc/os-release
|
||||
DISTRO_ID="${ID,,}"
|
||||
else
|
||||
echo "Cannot detect distribution (no /etc/os-release)"
|
||||
echo "cannot detect distribution. aborting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
UNAME="${SUDO_USER:-${USER:-$(whoami)}}"
|
||||
if [[ -z "$UNAME" ]]; then
|
||||
echo "Could not determine invoking user."
|
||||
echo "cannot determine non-root user. aborting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Running setup as: $UNAME on $DISTRO_ID"
|
||||
echo "⚙️ running as user: $UNAME (distro: $DISTRO_ID)"
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Utility helpers
|
||||
# -------------------------------------------------------------------
|
||||
# --- helpers ---
|
||||
command_exists() { command -v "$1" >/dev/null 2>&1; }
|
||||
as_user() { sudo -H -u "$UNAME" bash -lc "$*"; }
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Arch package installation
|
||||
# -------------------------------------------------------------------
|
||||
# --- arch package install ---
|
||||
install_packages_arch() {
|
||||
echo "→ Updating system (Arch)..."
|
||||
sudo pacman -Syu --noconfirm || true
|
||||
echo "📦 installing base packages..."
|
||||
sudo pacman -Syu --noconfirm
|
||||
|
||||
PKGS=(
|
||||
local PKGS=(
|
||||
base-devel git cmake gcc neovim vim python-pip
|
||||
xorg-server xorg-xinit xorg-xrandr xorg-xinput
|
||||
openbox obconf alacritty cmus flameshot pavucontrol
|
||||
openbox obconf
|
||||
alacritty cmus flameshot pavucontrol
|
||||
chromium thunderbird steam keepassxc
|
||||
bluez bluez-tools blueman
|
||||
dmenu htop rsync unzip whois xclip xdotool xbindkeys
|
||||
efibootmgr grub nmap lynis rkhunter sbctl sudo
|
||||
)
|
||||
sudo pacman -S --noconfirm "${PKGS[@]}"
|
||||
|
||||
echo "→ Installing available packages..."
|
||||
AVAILABLE=()
|
||||
for pkg in "${PKGS[@]}"; do
|
||||
if pacman -Si "$pkg" &>/dev/null; then
|
||||
AVAILABLE+=("$pkg")
|
||||
else
|
||||
echo "⚠️ Skipping missing package: $pkg"
|
||||
fi
|
||||
done
|
||||
|
||||
sudo pacman -S --noconfirm --needed "${AVAILABLE[@]}"
|
||||
|
||||
# Install yay if missing
|
||||
# yay
|
||||
if ! command_exists yay; then
|
||||
echo "→ Installing yay (AUR helper)..."
|
||||
TMPDIR="/tmp/yay-build.$$"
|
||||
rm -rf "$TMPDIR"
|
||||
git clone https://aur.archlinux.org/yay-bin.git "$TMPDIR"
|
||||
as_user "cd $TMPDIR && makepkg -si --noconfirm || true"
|
||||
rm -rf "$TMPDIR"
|
||||
echo "📦 installing yay..."
|
||||
TMP=$(mktemp -d)
|
||||
git clone https://aur.archlinux.org/yay-bin.git "$TMP"
|
||||
as_user "cd $TMP && makepkg -si --noconfirm"
|
||||
rm -rf "$TMP"
|
||||
fi
|
||||
|
||||
# Optional AUR packages
|
||||
if command_exists yay; then
|
||||
echo "→ Installing AUR packages..."
|
||||
as_user "yay -S --noconfirm --needed keybase-bin ckb-next || true"
|
||||
fi
|
||||
as_user "yay -S --noconfirm keybase-bin ckb-next"
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Debian/Ubuntu package installation
|
||||
# -------------------------------------------------------------------
|
||||
# --- ubuntu/debian ---
|
||||
install_packages_ubuntu() {
|
||||
echo "→ Updating system (Debian/Ubuntu)..."
|
||||
echo "📦 installing packages (debian/ubuntu)..."
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
|
||||
PKGS_DEB=(
|
||||
build-essential git cmake gcc neovim vim python3-pip
|
||||
xorg openbox xinit x11-xserver-utils
|
||||
alacritty cmus flameshot pavucontrol
|
||||
chromium-browser thunderbird steam-installer keepassxc
|
||||
bluez bluez-tools blueman
|
||||
dmenu htop rsync unzip whois xclip xdotool xbindkeys
|
||||
sudo apt install -y \
|
||||
build-essential git cmake gcc neovim vim python3-pip \
|
||||
xorg openbox xinit x11-xserver-utils \
|
||||
alacritty cmus flameshot pavucontrol \
|
||||
chromium-browser thunderbird steam-installer keepassxc \
|
||||
bluez bluez-tools blueman \
|
||||
dmenu htop rsync unzip whois xclip xdotool xbindkeys \
|
||||
efibootmgr grub nmap lynis rkhunter sudo
|
||||
)
|
||||
|
||||
echo "→ Installing packages..."
|
||||
sudo apt install -y "${PKGS_DEB[@]}" || true
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Rust setup
|
||||
# -------------------------------------------------------------------
|
||||
# --- rust setup ---
|
||||
setup_rust() {
|
||||
if ! command_exists rustc; then
|
||||
echo "→ Installing rustup for $UNAME..."
|
||||
echo "🦀 installing rustup for $UNAME..."
|
||||
as_user "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y"
|
||||
else
|
||||
echo "✓ rustc already installed"
|
||||
fi
|
||||
|
||||
if command_exists cargo; then
|
||||
echo "→ Installing cargo utilities..."
|
||||
as_user "PATH=~/.cargo/bin:\$PATH cargo install --locked bat lsd rusty-man cargo-expand viu || true"
|
||||
fi
|
||||
as_user "source ~/.cargo/env && cargo install --locked bat lsd rusty-man cargo-expand viu || true"
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Fonts setup (optional)
|
||||
# -------------------------------------------------------------------
|
||||
# --- fonts ---
|
||||
install_fonts() {
|
||||
echo "→ Installing Nerd Font (Hack)..."
|
||||
echo "🔤 installing Hack Nerd Font..."
|
||||
as_user "mkdir -p ~/.local/share/fonts && cd ~/.local/share/fonts && \
|
||||
git clone --depth=1 https://github.com/ryanoasis/nerd-fonts.git nerd-fonts-temp || true && \
|
||||
cd nerd-fonts-temp && ./install.sh Hack || true && \
|
||||
cd .. && rm -rf nerd-fonts-temp"
|
||||
git clone --depth=1 https://github.com/ryanoasis/nerd-fonts.git nf-temp && \
|
||||
cd nf-temp && ./install.sh Hack && cd .. && rm -rf nf-temp"
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Security hardening
|
||||
# -------------------------------------------------------------------
|
||||
# --- security setup ---
|
||||
setup_security() {
|
||||
echo "→ Applying basic security tweaks..."
|
||||
echo "🔐 configuring security..."
|
||||
|
||||
if command_exists ufw; then
|
||||
sudo ufw default deny incoming
|
||||
sudo ufw default allow outgoing
|
||||
sudo ufw allow ssh
|
||||
sudo ufw --force enable
|
||||
fi
|
||||
|
||||
# SSH
|
||||
if [[ -f /etc/ssh/sshd_config ]]; then
|
||||
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config || true
|
||||
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config || true
|
||||
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
|
||||
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
|
||||
sudo systemctl restart sshd || true
|
||||
fi
|
||||
|
||||
# Fail2ban
|
||||
if command_exists fail2ban-server; then
|
||||
sudo systemctl enable --now fail2ban || true
|
||||
fi
|
||||
|
||||
# rkhunter
|
||||
if command_exists rkhunter; then
|
||||
sudo rkhunter --update || true
|
||||
sudo rkhunter --propupd || true
|
||||
fi
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Main dispatcher
|
||||
# -------------------------------------------------------------------
|
||||
# --- main flow ---
|
||||
case "$DISTRO_ID" in
|
||||
arch|artix)
|
||||
install_packages_arch
|
||||
;;
|
||||
arch)
|
||||
install_packages_arch ;;
|
||||
ubuntu|debian)
|
||||
install_packages_ubuntu
|
||||
;;
|
||||
install_packages_ubuntu ;;
|
||||
*)
|
||||
echo "⚠️ Unknown distro: $DISTRO_ID — defaulting to Arch-style setup."
|
||||
install_packages_arch
|
||||
;;
|
||||
echo "unsupported distro: $DISTRO_ID"
|
||||
exit 1 ;;
|
||||
esac
|
||||
|
||||
setup_rust
|
||||
install_fonts
|
||||
setup_security
|
||||
|
||||
echo "✅ Post-install setup complete. You may reboot or log out to apply font and shell changes."
|
||||
echo "✅ setup complete! (sudo kept alive for duration)"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user