ud
This commit is contained in:
190
setup
190
setup
@ -1,105 +1,167 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
# Detect distro
|
# Run as a regular user (script will use sudo for privileged operations)
|
||||||
if [[ $(uname -a) == *"arch"* ]]; then
|
# Usage: ./setup.sh
|
||||||
IS_ARCH=true
|
|
||||||
|
# --- Basic detection ---
|
||||||
|
if [[ -f /etc/os-release ]]; then
|
||||||
|
. /etc/os-release
|
||||||
|
DISTRO_ID="${ID,,}" # lowercase
|
||||||
else
|
else
|
||||||
IS_ARCH=false
|
echo "Cannot detect distribution (no /etc/os-release). Aborting."
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- Helper Functions ---
|
# The non-root user invoking this script
|
||||||
|
UNAME="${SUDO_USER:-${USER:-$(whoami)}}"
|
||||||
|
if [[ -z "$UNAME" ]]; then
|
||||||
|
echo "Could not determine a non-root user. Run this as a normal user."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Running as user: $UNAME (distro: $DISTRO_ID)"
|
||||||
|
|
||||||
|
# --- helper functions ---
|
||||||
|
command_exists() { command -v "$1" >/dev/null 2>&1; }
|
||||||
|
|
||||||
|
# Run a command as the original non-root user
|
||||||
|
as_user() {
|
||||||
|
sudo -H -u "$UNAME" bash -lc "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Arch package installation ---
|
||||||
install_packages_arch() {
|
install_packages_arch() {
|
||||||
sudo pacman -Sy --noconfirm
|
echo "Updating system and installing packages (Arch)..."
|
||||||
sudo pacman -S --noconfirm base base-devel linux-hardened linux-hardened-headers \
|
sudo pacman -Syu --noconfirm
|
||||||
git cmake gcc neovim vim python3-pip \
|
|
||||||
openbox obconf xorg-server xorg-xinit xorg-xinput xorg-xrandr \
|
# core packages (tweak list as you like)
|
||||||
alacritty cmus flameshot pavucontrol \
|
PKGS=(
|
||||||
chromium thunderbird steam keepassxc \
|
base-devel git cmake gcc neovim vim python-pip
|
||||||
bluez bluez-tools blueman \
|
xorg-server xorg-xinit xorg-xrandr xorg-xinput
|
||||||
dmenu htop rsync unzip whois xclip xdotool xbindkeys \
|
openbox obconf
|
||||||
efibootmgr grub nmap lynis rkhunter sbctl
|
alacritty cmus flameshot pavucontrol
|
||||||
# Yay for AUR packages
|
chromium thunderbird steam keepassxc
|
||||||
if ! command -v yay >/dev/null; then
|
bluez bluez-tools blueman
|
||||||
git clone https://aur.archlinux.org/yay-bin.git /tmp/yay
|
dmenu htop rsync unzip whois xclip xdotool xbindkeys
|
||||||
cd /tmp/yay
|
efibootmgr grub nmap lynis rkhunter sbctl sudo
|
||||||
makepkg -si --noconfirm
|
)
|
||||||
|
|
||||||
|
sudo pacman -S --noconfirm "${PKGS[@]}"
|
||||||
|
|
||||||
|
# Install yay (AUR helper) if missing (build as non-root user)
|
||||||
|
if ! command_exists yay; then
|
||||||
|
echo "Installing yay (AUR helper)..."
|
||||||
|
# ensure base-devel present (already in PKGS)
|
||||||
|
TMP="/tmp/yay-build-$$"
|
||||||
|
rm -rf "$TMP"
|
||||||
|
git clone https://aur.archlinux.org/yay-bin.git "$TMP"
|
||||||
|
as_user "cd $TMP && makepkg -si --noconfirm"
|
||||||
|
rm -rf "$TMP"
|
||||||
|
else
|
||||||
|
echo "yay already installed"
|
||||||
fi
|
fi
|
||||||
# Additional yay apps
|
|
||||||
yay -S --noconfirm keybase-bin ckb-next minecraft-launcher nvidia-dkms nvidia-settings
|
# install some AUR packages (use yay, as non-root)
|
||||||
|
as_user "yay -S --noconfirm keybase-bin ckb-next"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# --- Debian/Ubuntu package installation (if needed) ---
|
||||||
install_packages_ubuntu() {
|
install_packages_ubuntu() {
|
||||||
|
echo "Updating system and installing packages (Debian/Ubuntu)..."
|
||||||
sudo apt update && sudo apt upgrade -y
|
sudo apt update && sudo apt upgrade -y
|
||||||
sudo apt install -y build-essential git cmake gcc neovim vim python3-pip \
|
|
||||||
openbox obconf xorg xinit x11-xserver-utils \
|
PKGS_DEB=(
|
||||||
alacritty cmus flameshot pavucontrol \
|
build-essential git cmake gcc neovim vim python3-pip
|
||||||
chromium-browser thunderbird steam-installer keepassxc \
|
xorg openbox xinit x11-xserver-utils
|
||||||
bluez bluez-tools blueman \
|
alacritty cmus flameshot pavucontrol
|
||||||
dmenu htop rsync unzip whois xclip xdotool xbindkeys \
|
chromium-browser thunderbird steam-installer keepassxc
|
||||||
|
bluez bluez-tools blueman
|
||||||
|
dmenu htop rsync unzip whois xclip xdotool xbindkeys
|
||||||
efibootmgr grub nmap lynis rkhunter sudo
|
efibootmgr grub nmap lynis rkhunter sudo
|
||||||
|
)
|
||||||
|
sudo apt install -y "${PKGS_DEB[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Rust Setup ---
|
# --- Rust setup for the user ---
|
||||||
setup_rust() {
|
setup_rust() {
|
||||||
if ! command -v rustc >/dev/null; then
|
if ! command_exists rustc; then
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
echo "Installing rustup for user $UNAME..."
|
||||||
source $HOME/.cargo/env
|
as_user "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y"
|
||||||
|
# source would be needed in new shell; we'll also add cargo to PATH for this session when running cargo installs
|
||||||
|
export PATH="/home/$UNAME/.cargo/bin:$PATH"
|
||||||
|
else
|
||||||
|
echo "rustc already installed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Cargo apps
|
if command_exists cargo; then
|
||||||
cargo install --locked alacritty bat lsd rusty-man cargo-expand viu
|
echo "Installing useful cargo binaries for $UNAME..."
|
||||||
|
# Install per-user via cargo (run as user)
|
||||||
|
as_user "PATH=~/.cargo/bin:\$PATH cargo install --locked bat lsd rusty-man cargo-expand viu || true"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Fonts ---
|
# --- Fonts installation (nerd fonts: user install) ---
|
||||||
install_fonts() {
|
install_fonts() {
|
||||||
mkdir -p ~/bin/setup
|
echo "Installing Nerd Font (Hack) for user $UNAME..."
|
||||||
cd ~/bin/setup
|
as_user "mkdir -p ~/.local/share/fonts && cd ~/.local/share/fonts && \
|
||||||
if [[ ! -d nerd-fonts ]]; then
|
git clone --depth=1 https://github.com/ryanoasis/nerd-fonts.git nerd-fonts-temp || true && \
|
||||||
git clone https://github.com/ryanoasis/nerd-fonts
|
cd nerd-fonts-temp && ./install.sh Hack || true && cd ~ && rm -rf ~/.local/share/fonts/nerd-fonts-temp"
|
||||||
fi
|
echo "Font install requested (may require logout/login to take effect)."
|
||||||
cd nerd-fonts
|
|
||||||
./install.sh Hack
|
|
||||||
cd ~
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Security Setup ---
|
# --- Security setup (optional, best-effort) ---
|
||||||
setup_security() {
|
setup_security() {
|
||||||
# Firewall
|
echo "Configuring basic security settings (best-effort)..."
|
||||||
if command -v ufw >/dev/null; then
|
|
||||||
|
# UFW (if present)
|
||||||
|
if command_exists ufw; then
|
||||||
sudo ufw default deny incoming
|
sudo ufw default deny incoming
|
||||||
sudo ufw default allow outgoing
|
sudo ufw default allow outgoing
|
||||||
sudo ufw allow ssh
|
sudo ufw allow ssh
|
||||||
sudo ufw enable
|
sudo ufw --force enable
|
||||||
|
else
|
||||||
|
echo "ufw not installed; skipping UFW config"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# SSH hardening
|
# SSH hardening (edit sshd_config safely)
|
||||||
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
|
if [[ -f /etc/ssh/sshd_config ]]; then
|
||||||
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
|
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config || true
|
||||||
sudo systemctl restart sshd
|
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config || true
|
||||||
|
sudo systemctl restart sshd || true
|
||||||
# Enable fail2ban if available
|
else
|
||||||
if command -v fail2ban >/dev/null; then
|
echo "/etc/ssh/sshd_config missing; skipping SSH hardening"
|
||||||
sudo systemctl enable --now fail2ban
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Run rkhunter check
|
# enable fail2ban if installed
|
||||||
if command -v rkhunter >/dev/null; then
|
if command_exists fail2ban-server; then
|
||||||
sudo rkhunter --update
|
sudo systemctl enable --now fail2ban || true
|
||||||
sudo rkhunter --propupd
|
fi
|
||||||
|
|
||||||
|
# rkhunter (if installed)
|
||||||
|
if command_exists rkhunter; then
|
||||||
|
sudo rkhunter --update || true
|
||||||
|
sudo rkhunter --propupd || true
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Main ---
|
# --- Main ---
|
||||||
if $IS_ARCH; then
|
case "$DISTRO_ID" in
|
||||||
install_packages_arch
|
arch)
|
||||||
else
|
install_packages_arch
|
||||||
install_packages_ubuntu
|
;;
|
||||||
fi
|
ubuntu|debian)
|
||||||
|
install_packages_ubuntu
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unsupported distro: $DISTRO_ID. Attempting Arch-like install by default."
|
||||||
|
install_packages_arch
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
setup_rust
|
setup_rust
|
||||||
install_fonts
|
install_fonts
|
||||||
setup_security
|
setup_security
|
||||||
|
|
||||||
echo "Setup complete! You may need to reboot for kernel or grub changes."
|
echo "Setup complete! You may need to log out/in or reboot for some changes (fonts, kernel, grub) to apply."
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user