#!/usr/bin/env bash set -e export DEBIAN_FRONTEND=noninteractive INSTALL_PREPARE="ca-certificates openssl gpg dirmngr chrony tzdata" INSTALL_UTILITY="fish tmux micro mc coreutils moreutils jq yq sd fzf zip unzip rsync ncdu duf chafa glances procps lsof cron" INSTALL_NETWORK="sshuttle curl httpie hey iproute2 dnsutils mtr iputils-ping tcpdump nmap socat netcat-openbsd" INSTALL_DEVELOP="gcc g++ make cmake binutils pkg-config libssl-dev rustup git git-lfs docker.io docker-compose-v2" # setup if [ ! -f /.dockerenv ]; then sudo update-locale LANG=C.UTF-8 LC_ALL=C.UTF-8 source /etc/default/locale fi sudo tee /etc/apt/apt.conf.d/99-minimal >/dev/null <<'EOF' APT::Install-Recommends "false"; APT::Install-Suggests "false"; APT::Get::Upgrade "false"; EOF sudo apt update sudo apt install -y $INSTALL_PREPARE $INSTALL_UTILITY $INSTALL_NETWORK $INSTALL_DEVELOP # tweak ME=$(whoami) declare -A SETUP_FILES=( [tmux.conf]=~/.tmux.conf [micro.json]=~/.config/micro/settings.json [loadenv.fish]=~/.config/fish/functions/loadenv.fish [fish_prompt.fish]=~/.config/fish/functions/fish_prompt.fish [sysctl.conf]=/etc/sysctl.d/99-tweak.conf [limits.conf]=/etc/security/limits.d/99-tweak.conf ) for file in "${!SETUP_FILES[@]}"; do dest="${SETUP_FILES[$file]}" data=$(cat "$(dirname "$0")/setup/$file" 2>/dev/null || true) data=${data:-$(curl -fSL "https://bash.cc/setup/$file")} data=${data//\{CURRENT_USER\}/$ME} mkdir -p "$(dirname "$dest")" 2>/dev/null || sudo mkdir -p "$(dirname "$dest")" { printf '%s\n' "$data" > "$dest"; } 2>/dev/null || printf '%s\n' "$data" | sudo tee "$dest" >/dev/null done if [ ! -f /.dockerenv ]; then sudo sysctl --system fi sudo chsh -s /usr/bin/fish "$ME" fish -c "set -Ux fish_features qmark-noglob" fish -c "alias --save serve='python3 -m http.server'" mkdir -p ~/.config/mc [ -f ~/.config/mc/mc.ext.ini ] || cp /etc/mc/mc.ext.ini ~/.config/mc/mc.ext.ini sd '(?m)^\[Include/image\]\n[^\[]*' '[Include/image]\nOpen=chafa %f | less -R\nView=chafa %f | less -R\n\n' ~/.config/mc/mc.ext.ini git lfs install git config --global core.eol lf git config --global core.autocrlf input git config --global bash.showUntrackedFiles true if systemctl is-active --quiet systemd-resolved 2>/dev/null; then sudo systemctl disable --now systemd-resolved sudo rm -f /etc/resolv.conf sudo tee /etc/resolv.conf >/dev/null <<'EOF' nameserver 8.8.8.8 nameserver 8.8.4.4 EOF sudo chattr +i /etc/resolv.conf fi sudo mkdir -p /etc/docker sudo usermod -aG docker "$ME" (cat /etc/docker/daemon.json 2>/dev/null || echo '{}') | jq '. + {"userland-proxy": false}' | sudo sponge /etc/docker/daemon.json if [ ! -f /.dockerenv ] && [ -z "$(docker ps -q 2>/dev/null)" ]; then sudo systemctl restart docker fi # final sudo mkdir -p /app sudo chown "$ME:$(id -gn)" /app echo "Done"