1
0
Fork 0
env/.config/yadm/bootstrap

543 lines
12 KiB
Bash
Executable File

#!/bin/sh
set -eu
# Parse options
base=true
nicetohave=true
go=false
rust=false
rootzsh=false
desktopbase=false
desktop=false
pwn=false
while [ $# != 0 ]; do
case "$1" in
nobase) base=false;;
base) base=true;;
nonicetohave) nicetohave=false;;
nicetohave) nicetohave=true;;
nogo) go=false;;
go) go=true;;
norust) rust=false;;
rust) rust=true;;
norootzsh) rootzsh=false;;
rootzsh) rootzsh=true;;
nodesktopbase) desktopbase=false;;
desktopbase) desktopbase=true;;
nodesktop) desktopbase=false desktop=false;;
desktop) desktopbase=true desktop=true;;
nopwn) pwn=false;;
pwn) pwn=true;;
*) echo "Unknown flag: $1"; exit 1;;
esac
shift
done
# Parse platforms into a friendly format
case "$(uname -s)" in
Darwin)
PLATFORM=macos
ID=macos
VERSION_ID=$(sw_vers -productVersion)
;;
Linux)
PLATFORM=linux
. /etc/os-release
;;
*)
PLATFORM=unsupported
ID=unsupported
VERSION_ID=unsupported
;;
esac
if [ "$ID" = fedora ] && [ "${VARIANT_ID:-}" = coreos ]; then
ID=coreos # Fedora CoreOS
fi
# Package installation helpers
packages=""
packages_add() {
packages="$packages $@"
}
packages_install() {
if [ -z "$packages" ]; then
return
fi
case $ID in
macos)
brew install --formulae $packages
;;
alpine)
sudo apk add --no-cache --update $packages
;;
fedora)
sudo dnf install -y $packages
sudo dnf clean all
sudo rm -rf /var/cache/dnf
;;
debian|ubuntu)
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y $packages
sudo rm -rf /var/lib/apt/lists/*
;;
esac
packages=""
}
# Installation into user folder
download_bin_path="$HOME/.local/bin"
mkdir -p $download_bin_path
download_dust() {
version=v0.5.4
arch=x86_64
case $ID in
macos) system=apple-darwin;;
alpine) system=unknown-linux-musl;;
fedora|debian|ubuntu) system=unknown-linux-gnu;;
esac
wget \
--output-document /tmp/dust.tar.gz \
https://github.com/bootandy/dust/releases/download/$version/dust-$version-$arch-$system.tar.gz
tar -x \
--gunzip \
--file /tmp/dust.tar.gz \
--to-stdout \
dust-$version-$arch-$system/dust > $download_bin_path/dust
rm /tmp/dust.tar.gz
}
download_kubectl() {
version=$(wget --quiet --output-document - https://dl.k8s.io/release/stable.txt)
arch=amd64
case $PLATFORM in
macos) system=darwin;;
linux) system=linux;;
*) return 1;;
esac
wget \
--output-document $download_bin_path/kubectl \
https://dl.k8s.io/release/$version/bin/$system/$arch/kubectl
chmod +x $download_bin_path/kubectl
}
download_minio_client() {
arch=amd64
case $PLATFORM in
macos) system=darwin;;
linux) system=linux;;
*) return 1;;
esac
wget \
--output-document $download_bin_path/mc \
https://minio.mirror.makerforce.io/client/mc/release/$system-$arch/mc
#https://dl.min.io/client/mc/release/$system-$arch/mc
chmod +x $download_bin_path/mc
}
download_nvim_plug() {
mkdir -p $HOME/.config/nvim/autoload
wget \
--output-document $HOME/.config/nvim/autoload/plug.vim \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
}
download_go() {
version=1.16.2
arch=amd64
case $PLATFORM in
macos) system=darwin;;
linux) system=linux;;
*) return 1;;
esac
wget \
--output-document /tmp/go.tar.gz \
https://golang.org/dl/go$version.$system-$arch.tar.gz
sudo tar -x \
--gunzip \
--directory /usr/local \
--file /tmp/go.tar.gz
sudo ln -s /usr/local/go/bin/go /usr/local/bin/go
sudo ln -s /usr/local/go/bin/gofmt /usr/local/bin/gofmt
rm /tmp/go.tar.gz
}
download_rust() {
wget --output-document - https://sh.rustup.rs | sh -s -- -y
}
download_font_path="$HOME/.local/share/fonts"
mkdir -p $download_font_path
download_font_firacode() {
version=5.2
wget \
--output-document /tmp/firacode.zip \
https://github.com/tonsky/FiraCode/releases/download/$version/Fira_Code_v$version.zip
unzip -q /tmp/firacode.zip -d /tmp/firacode
mv /tmp/firacode/ttf/* $download_font_path/
rm -r /tmp/firacode.zip /tmp/firacode
}
download_font_ibmplex() {
version=5.1.3
wget \
--output-document /tmp/ibmplex.zip \
https://github.com/IBM/plex/releases/download/v$version/TrueType.zip
unzip -q /tmp/ibmplex.zip -d /tmp/ibmplex
for family in Sans Serif Mono; do
mv /tmp/ibmplex/TrueType/IBM-Plex-$family/*.ttf $download_font_path/
done
rm -r /tmp/ibmplex.zip /tmp/ibmplex
}
download_cutter_re() {
version=2.0.2
case $PLATFORM in
linux) system=Linux;;
*) return 1;;
esac
wget \
--output-document $download_bin_path/cutter \
https://github.com/rizinorg/cutter/releases/download/v$version/Cutter-v$version-x64.$system.AppImage
chmod +x $download_bin_path/cutter
}
# Install basics
packages_add openssl wget upx
case $PLATFORM in
linux) packages_add tar gzip;;
esac
case $PLATFORM in
macos|alpine|fedora) packages_add xz;;
debian|ubuntu) packages_add xz-utils;;
esac
if $base; then
# Install shell
packages_add zsh zsh-autosuggestions zsh-syntax-highlighting
case $ID in
alpine) packages_add zsh-vcs ncurses;;
fedora) packages_add ncurses;;
debian|ubuntu) packages_add ncurses-bin;;
esac
# Install editor, management and security tools
packages_add neovim git
case $ID in
alpine|debain|ubuntu) packages_add xxd;;
fedora) packages_add vim-common;;
esac
$nicetohave && packages_add pass gnupg
case $ID in
macos) packages_add pinentry-mac;;
alpine) packages_add dropbear-ssh;;
fedora) packages_add openssh-clients;;
debian|ubuntu) packages_add openssh-client;;
esac
packages_add exa jq
# Install C compilers
case $ID in
alpine) $nicetohave && packages_add alpine-sdk linux-headers;;
fedora) $nicetohave && packages_add kernel-headers;;
debian|ubuntu) $nicetohave && packages_add build-essential;;
esac
# Install Python 3
case $ID in
macos) packages_add python@3;;
alpine|fedora|debian|ubuntu) packages_add python3;;
esac
case $ID in
alpine|debian|ubuntu) $nicetohave && packages_add python3-dev;;
fedora) $nicetohave && packages_add python3-devel;;
esac
case $ID in
alpine) $nicetohave && packages_add py3-pip;;
fedora|debian|ubuntu) $nicetohave && packages_add python3-pip;;
esac
packages_install
# Install Python 3 packages
case $ID in
macos|alpine|fedora|debian|ubuntu) $nicetohave && packages_add httpie;;
*) $nicetohave && pip3 install --no-cache-dir --user httpie;;
esac
case $ID in
macos|fedora|debian|ubuntu) $nicetohave && packages_add thefuck;;
*) $nicetohave && pip3 install --no-cache-dir --user thefuck;;
esac
case $ID in
macos|alpine|fedora|debian|ubuntu) $nicetohave && packages_add black;;
*) $nicetohave && pip3 install --no-cache-dir --user black;;
esac
# Install Golang
case $ID in
#macos) $go && packages_add go;;
#alpine) $go && packages_add go;;
#fedora) $go && packages_add golang;;
*) $go && download_go;;
esac
# Install Rust
$rust && download_rust
$rust && source $HOME/.cargo/env && rustup component add rls rust-analysis rust-src
# Install dust
case $ID in
macos|alpine) $nicetohave && packages_add dust;;
*) $nicetohave && download_dust;;
esac
# Install deployment utilities
$nicetohave && download_kubectl
$nicetohave && download_minio_client
# Install editor plugins
# Plug install
download_nvim_plug
nvim +PlugInstall +qa || true
# Install graphics tools
case $ID in
fedora) $nicetohave && packages_add GraphicsMagick;;
*) $nicetohave && packages_add graphicsmagick;;
esac
# Final packages installation
packages_install
# Give root a ZSH prompt
sudo cp $HOME/.zshrc /root/.zshrc
fi
if $desktopbase; then
case $ID in
debian)
if ! grep --quiet 'unstable' /etc/apt/sources.list; then
echo "WARN: debian unstable required"
exit 1
fi
if ! grep --quiet 'contrib' /etc/apt/sources.list; then
echo "WARN: contrib required"
echo "WARN: enabling contrib"
echo "deb http://deb.debian.org/debian unstable contrib" | sudo tee /etc/apt/sources.list
fi
;;
fedora)
if ! rpm -qa | grep --quiet 'rpmfusion-free'; then
echo "WARN: rpmfusion free requried"
echo "WARN: enabling rpmfusion free"
sudo dnf install -y \
"https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm"
fi
;;
esac
# desktopbase: Fonts
case $ID in
alpine) packages_add \
font-noto-emoji
download_font_firacode
download_font_ibmplex
;;
fedora) packages_add \
ibm-plex-sans-fonts ibm-plex-serif-fonts ibm-plex-mono-fonts \
fira-code-fonts \
google-noto-emoji-color-fonts \
;;
debian|ubuntu) packages_add \
fonts-ibm-plex \
fonts-firacode \
fonts-noto-color-emoji \
;;
esac
case $ID in
alpine) $nicetohave && packages_add \
font-noto \
font-noto-cjk \
;;
fedora) $nicetohave && packages_add \
google-noto-sans-fonts google-noto-serif-fonts \
google-noto-cjk-fonts \
;;
debian|ubuntu) $nicetohave && packages_add \
fonts-noto-core \
fonts-noto-cjk \
;;
esac
# desktopbase: Desktop theme
case $ID in
alpine|fedora|debian|ubuntu) packages_add \
gsettings-desktop-schemas \
gnome-themes-extra \
adwaita-icon-theme \
;;
esac
case $ID in
debian|ubuntu) packages_add adwaita-qt;;
fedora) packages_add adwaita-qt5;;
esac
# desktopbase: Final packages installation
packages_install
fi
if $desktopbase && $desktop; then
# desktop: Install sway
case $ID in
alpine|fedora|debian|ubuntu) packages_add \
sway swaybg swayidle swaylock \
waybar wofi \
\
lxpolkit \
grim slurp \
playerctl \
;;
esac
case $ID in
alpine|fedora) packages_add mako;;
debian|ubuntu) packages_add mako-notifier;;
esac
case $ID in
fedora) echo "WARN: $ID has no stable wf-recorder package";;
alpine|debian|ubuntu) packages_add wf-recorder;;
esac
case $ID in
alpine|fedora) packages_add pinentry-gtk;;
debian|ubuntu) packages_add pinentry-gtk2;;
esac
# desktop: Install applications
case $ID in
alpine) echo "WARN: $ID has no stable ddcutil and kitty packages";;
fedora|debian|ubuntu) packages_add ddcutil kitty;;
esac
case $ID in
macos) brew install --cask \
firefox \
iterm2 docker paw \
coolterm \
;;
*) packages_add \
firefox \
;;
esac
# desktop: Final packages installation
packages_install
fi
if $pwn; then
case $ID in
debian)
if ! grep --quiet 'unstable' /etc/apt/sources.list; then
echo "WARN: debian unstable required"
exit 1
fi
;;
esac
# pwn: Build dependencies for most
case $ID in
alpine|fedora|debian|ubuntu) packages_add cmake make gcc g++;;
esac
# pwn: Build dependencies for stegseek
case $ID in
alpine) packages_add libmhash-dev libmcrypt-dev libjpeg-turbo-dev zlib-dev;;
fedora) packages_add mhash-devel libmcrypt-devel libjpeg-turbo-devel zlib-devel;;
debian|ubuntu) packages_add libmhash-dev libmcrypt-dev libjpeg-dev zlib1g-dev;;
esac
# pwn: Build dependencies for cryptography
case $ID in
alpine) packages_add libffi-dev openssl-dev;;
fedora) packages_add libffi-devel openssl-devel;;
debian|ubuntu) packages_add libffi-dev libssl-dev;;
esac
packages_install
case $ID in
alpine) download_rust && export PATH="$HOME/.cargo/bin:$PATH" && pip3 install --no-cache-dir --user pwntools;;
*) pip3 install --no-cache-dir --user pwntools;;
esac
# pwn: Tools
case $ID in
alpine|fedora|debian|ubuntu|macos) packages_add radare2 testdisk socat nasm john binutils;;
esac
case $ID in
alpine|fedora|debian|ubuntu) packages_add file squashfs-tools strace zip unzip p7zip;;
macos) packages_add squashfs;;
esac
case $ID in
alpine|macos) packages_add exiftool;;
fedora) packages_add perl-Image-ExifTool;;
debain|ubuntu) packages_add libimage-exiftool-perl;;
esac
case $ID in
alpine|debian|ubuntu) packages_add netcat-openbsd;;
fedora) packages_add netcat;;
esac
# pwn: Tools (Ruby)
case $ID in
alpine|debian|ubuntu) packages_add ruby;;
fedora) packages_add ruby rubygems;;
esac
packages_install
sudo gem install one_gadget
# pwn: Tools (desktop)
case $ID in
alpine|fedora|debian|ubuntu) $desktop && download_cutter_re;;
macos) $desktop && brew install --cask cutter;;
esac
# pwn: Final packages installation
packages_install
fi