debian: use custom packages and remove dry-run
This commit is contained in:
parent
2a77358b1c
commit
076b08c583
1 changed files with 96 additions and 158 deletions
254
debian.sh
254
debian.sh
|
@ -1,39 +1,63 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
USERNAME=fernando
|
||||
DOTFILES_URL="https://github.com/fschauen/dotfiles.git"
|
||||
USERNAME="fernando"
|
||||
DOTFILES_URL="https://git.schauenburg.me/fernando/dotfiles.git"
|
||||
|
||||
NEOVIM_VERSION="0.9.5"
|
||||
GIT_DELTA_VERSION="0.16.5"
|
||||
LF_VERSION="r31"
|
||||
EZA_VERSION="0.18.5"
|
||||
CUSTOM_APT_KEY_FILE="/etc/apt/keyrings/gitea-fernando.asc"
|
||||
CUSTOM_APT_URL="https://git.schauenburg.me/api/packages/fernando/debian"
|
||||
CUSTOM_APT_KEY="-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
STOW_DIR="/usr/local/stow"
|
||||
xsBNBGX4KGoBCADiysyeZjwKmgHQakDpeutLq6glS1dvijb3Bdf9RGfOHwoQUPix
|
||||
uPHv3b0mxfHHa9yRfySCSHNSZmCvMDztMpDKjfUKzNwj0ufd+b8vqZ9IIhD323/2
|
||||
cCGpL76ARhGHaQrcfCyjU1bFnNmTRykjXvEPWiNLu9REYd18rPcwGOrITJYfevpj
|
||||
NWdb+scpcMBIoob9NxkvN8V7tRvTsKnHfu6BqU22NobN2kRnqoqQ+IwDhchgrD8s
|
||||
XDZCOiiL/cd3GAHyNsJ1Xu6M87Q/2YT1OHU26I2nWQuoxAHpO/wswD5lOhphUMUc
|
||||
vMvzJNmwmGcHkhZdFZ/YdU0p/BNRQh+65bCNABEBAAHNEShEZWJpYW4gUmVnaXN0
|
||||
cnkpwsBiBBMBCAAWBQJl+ChqCRANOnSUcFcewAIbAwIZAQAA3MUIAIF5jt1LUjQz
|
||||
Cs1ucVEYOTsXVkbHQUyzDX7ZxWYa3052Xd/ipEa4fuedIB2Fu8jlUdEcoWx76CDl
|
||||
08Xr0Jhi+9GYEjOnjtD1/waNt4KdqyQGxbZ9MtFicAweIAyghmrYHnoB+pWZ5G12
|
||||
0CwQs1P+6yija4apeVFTx/RB/ByGXVx7IjQ7Fz5tAIc4EdRqK8VPGq8BYrCT9cct
|
||||
mUFtMD9HaXvtcM9gAn6MVgyqLjql0VDg37knZGFZNWKfvNGHXyx6PsbcQtAIXE8N
|
||||
ujiigmvEGY7tUqOYDB0Fn1nkL9loZfgWzzgluKoCZiRbdMk8DLVbvuoaCyDD1qXt
|
||||
sw0tK5HujBLOwE0EZfgoagEIAL0tSBJlAuOF6VvkkHSI6tS9VZIE6TjnrYcnBv0q
|
||||
hn0N6dA4wmwaioObVYqOdW4iIx/kuoS5kR+XwWTJ/wFf+RGMA1Rq13/HZKj1KgcG
|
||||
TTGLn6tGAYU3NQ8sSSqV84IcKjvhvogIfUR9vZwmXE7FZTPLWfyVVAypFARoFLit
|
||||
apVKj8wP+LdfC7UY9xsTXtDrD12iuPCNjeIZf7JIgGqQbi/PZV8kTL48/c94CK0d
|
||||
vP/EXpEsTcChusy/7esh+71C44IECOw+BhJdWTF6SS3pGqUvwyExidh1XzHJOo6o
|
||||
5xQRqLQin62wishsoM24BwA4LQtge36g6dTtsZ3FjrZLviEAEQEAAcLAXwQYAQgA
|
||||
EwUCZfgoagkQDTp0lHBXHsACGwwAAIQ/CADFFk3+HLvN7fM1ylUfS6wa0OQfPtVf
|
||||
9xF3FHoKu1ZTFVGDh53VuHqAEk0c7tBVrpfHHWWgb/bLZPfcIz96OKRtqmD2eIKl
|
||||
JfHtHJLfv4Of9xa1YvBujgtCwc2h21DbMlNDQkrRZD44H1yIQOl+JR2XwjJyZ70/
|
||||
l2gZy6iLTHT866UlPgYpCkxYSuf2ZH1BQ9E7BUIu4Jv2jeQzOzOiMekJ8HBdAypH
|
||||
aN1GalvZk/HY3MUqPHklGF03OAn5YT2mimB6tgMpSoxwaaaIfXmUE4seqhA1wmpc
|
||||
GwM1x9G/T3ZMkaV4wgEZ80RoEFRMtq2l2su/yzrYoeBkNI1h6oU9lkvd
|
||||
=aOC5
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
"
|
||||
|
||||
if [ -t 1 ]; then
|
||||
sgr0="$(printf '\033[0m')"
|
||||
red="$(printf '\033[31m')"
|
||||
green="$(printf '\033[32m')"
|
||||
# green="$(printf '\033[32m')"
|
||||
yellow="$(printf '\033[33m')"
|
||||
blue="$(printf '\033[34m')"
|
||||
magenta="$(printf '\033[35m')"
|
||||
cyan="$(printf '\033[36m')"
|
||||
# magenta="$(printf '\033[35m')"
|
||||
# cyan="$(printf '\033[36m')"
|
||||
else
|
||||
sgr0=''
|
||||
red=''
|
||||
green=''
|
||||
# green=''
|
||||
yellow=''
|
||||
blue=''
|
||||
magenta=''
|
||||
cyan=''
|
||||
# magenta=''
|
||||
# cyan=''
|
||||
fi
|
||||
|
||||
usage() {
|
||||
echo "Usage: $(basename "$0") [-h] [-n]"
|
||||
echo "Usage: $(basename "$0") [-h]"
|
||||
echo ""
|
||||
echo " -h print this help and exit"
|
||||
echo " -n perform dry run"
|
||||
}
|
||||
|
||||
error() {
|
||||
|
@ -41,37 +65,50 @@ error() {
|
|||
exit 1
|
||||
}
|
||||
|
||||
heading(){
|
||||
echo "${blue}===== ${1} ==========${sgr0}"
|
||||
title() {
|
||||
echo "${blue}=> ${1}${sgr0}"
|
||||
}
|
||||
|
||||
skipped() {
|
||||
echo "${yellow}SKIPPED:${sgr0} ${1}"
|
||||
}
|
||||
|
||||
apt_custom_source() {
|
||||
title "Set up custom APT source"
|
||||
|
||||
echo "${CUSTOM_APT_KEY}" >"${CUSTOM_APT_KEY_FILE}"
|
||||
sed \
|
||||
-i.original \
|
||||
-e "1i deb [signed-by=${CUSTOM_APT_KEY_FILE}] ${CUSTOM_APT_URL} stable main\n\n" \
|
||||
/etc/apt/sources.list
|
||||
}
|
||||
|
||||
apt_install() {
|
||||
$cmd apt update
|
||||
$cmd apt install -y \
|
||||
title "Install APT packages"
|
||||
|
||||
apt update && apt install -y \
|
||||
apt-file \
|
||||
ascii \
|
||||
broot \
|
||||
build-essential \
|
||||
ca-certificates \
|
||||
cmake \
|
||||
cmake-doc \
|
||||
curl \
|
||||
exa \
|
||||
exuberant-ctags \
|
||||
eza \
|
||||
fd-find \
|
||||
fzf \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
git-crypt \
|
||||
git-delta \
|
||||
gnupg \
|
||||
htop \
|
||||
jq \
|
||||
make \
|
||||
man-db \
|
||||
neovim \
|
||||
nodejs \
|
||||
pkg-config \
|
||||
psmisc \
|
||||
|
@ -86,117 +123,45 @@ apt_install() {
|
|||
tmux \
|
||||
unzip \
|
||||
zsh
|
||||
$cmd apt-file update
|
||||
apt-file update
|
||||
}
|
||||
|
||||
stow_custom_packages() {
|
||||
title "Stow custom packages under /usr/local/stow"
|
||||
(
|
||||
cd /usr/local/stow
|
||||
for package in ./*; do
|
||||
stow -v "${package##*/}"
|
||||
done
|
||||
)
|
||||
}
|
||||
|
||||
grub_disable_timeout() {
|
||||
$cmd sed -i.original -e 's/^GRUB_TIMEOUT=.*/GRUB_TIMEOUT=0/' /etc/default/grub
|
||||
$cmd update-grub
|
||||
title "Disable GRUB timeout"
|
||||
|
||||
sed -i.original -e 's/^GRUB_TIMEOUT=.*/GRUB_TIMEOUT=0/' /etc/default/grub
|
||||
update-grub
|
||||
}
|
||||
|
||||
# Make `fd` available with the correct name.
|
||||
ensure_usr_bin_fd() {
|
||||
if [ -x /usr/bin/fdfind ]; then
|
||||
$cmd ln -svf /usr/bin/fdfind /usr/local/bin/fd
|
||||
title "Make 'fd' available with the correct name"
|
||||
|
||||
fd_executable='/usr/local/bin/fdfind'
|
||||
if [ -x "${fd_executable}" ]; then
|
||||
ln -svf "${fd_executable}" /usr/local/bin/fd
|
||||
else
|
||||
skipped "/usr/bin/fdfind does not exist"
|
||||
skipped "${fd_executable} does not exist"
|
||||
fi
|
||||
}
|
||||
|
||||
# Make sure we have directories for all man page sections (for stow).
|
||||
ensure_usr_local_man_manN() {
|
||||
$cmd mkdir -vp $(seq -f '/usr/local/man/man%.0f' 9)
|
||||
}
|
||||
|
||||
# Download $1 to $2, if $2 not already available.
|
||||
download() {
|
||||
if [ -f "$2" ]; then
|
||||
echo "Using locally available $2"
|
||||
else
|
||||
echo "Downloading $1 -> $2"
|
||||
$cmd curl -SL -o "$2" "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
stow_install() {
|
||||
$cmd mv -v "$1" "${STOW_DIR}/"
|
||||
$cmd stow -v -d "${STOW_DIR}" -t /usr/local "$1"
|
||||
}
|
||||
|
||||
install_neovim() {
|
||||
nvim_url="https://github.com/neovim/neovim/releases/download/v${NEOVIM_VERSION}/nvim-linux64.tar.gz"
|
||||
nvim_tarball="nvim-${NEOVIM_VERSION}.tar.gz"
|
||||
nvim_package="nvim-${NEOVIM_VERSION}"
|
||||
nvim_installation="${STOW_DIR}/${nvim_package}"
|
||||
|
||||
if [ -d "${nvim_installation}" ]; then
|
||||
skipped "${nvim_installation} exists"
|
||||
elif ! download "${nvim_url}" "${nvim_tarball}"; then
|
||||
skipped "${nvim_tarball} not available and failed to download ${nvim_url}"
|
||||
else
|
||||
$cmd tar --transform="s/^nvim-linux64/${nvim_package}/" -xf "${nvim_tarball}"
|
||||
$cmd rm -vf "${nvim_tarball}"
|
||||
|
||||
# Remove stuff I don't want and patch the `man` location for Debian.
|
||||
$cmd rm -rf $(printf "${nvim_package}/share/%s " applications icons locale)
|
||||
$cmd mv -v "${nvim_package}/man" "${nvim_package}/share/"
|
||||
|
||||
stow_install "${nvim_package}"
|
||||
fi
|
||||
}
|
||||
|
||||
install_git_delta() {
|
||||
delta_url="https://github.com/dandavison/delta/releases/download/${GIT_DELTA_VERSION}/git-delta-musl_${GIT_DELTA_VERSION}_amd64.deb"
|
||||
delta_deb="git-delta-musl_${GIT_DELTA_VERSION}_amd64.deb"
|
||||
delta_bin="/usr/bin/delta"
|
||||
|
||||
if [ -f "${delta_bin}" ]; then
|
||||
skipped "${delta_bin} exists"
|
||||
elif ! download "${delta_url}" "${delta_deb}"; then
|
||||
skipped "${delta_deb} not available and failed to download ${delta_url}"
|
||||
else
|
||||
$cmd dpkg -i "${delta_deb}"
|
||||
$cmd rm -vf "${delta_deb}"
|
||||
fi
|
||||
}
|
||||
|
||||
install_lf() {
|
||||
lf_url="https://github.com/gokcehan/lf/releases/download/${LF_VERSION}/lf-linux-amd64.tar.gz"
|
||||
lf_tarball="lf-${LF_VERSION}.tar.gz"
|
||||
lf_package="lf-${LF_VERSION}"
|
||||
lf_installation="${STOW_DIR}/${lf_package}"
|
||||
|
||||
if [ -d "${lf_installation}" ]; then
|
||||
skipped "${lf_installation} exists"
|
||||
elif ! download "${lf_url}" "${lf_tarball}"; then
|
||||
skipped "${lf_tarball} not available and failed to download ${lf_url}"
|
||||
else
|
||||
$cmd tar -xf "${lf_tarball}"
|
||||
$cmd rm -vf "${lf_tarball}"
|
||||
|
||||
$cmd mkdir -vp "${lf_package}/bin"
|
||||
$cmd mv -v lf "${lf_package}/bin/lf"
|
||||
|
||||
stow_install "${lf_package}"
|
||||
fi
|
||||
}
|
||||
|
||||
install_eza() {
|
||||
eza_url="http://deb.gierens.de/pool/main/e/eza/eza_${EZA_VERSION}_amd64.deb"
|
||||
eza_deb="eza_${EZA_VERSION}_amd64.deb"
|
||||
eza_bin="/usr/bin/eza"
|
||||
|
||||
if [ -f "${eza_bin}" ]; then
|
||||
skipped "${eza_bin} exists"
|
||||
elif ! download "${eza_url}" "${eza_deb}"; then
|
||||
skipped "${eza_deb} not available and failed to download ${eza_url}"
|
||||
else
|
||||
$cmd dpkg -i "${eza_deb}"
|
||||
$cmd rm -vf "${eza_deb}"
|
||||
fi
|
||||
title "Make sure we have directories for all man page sections"
|
||||
mkdir -vp $(seq -f '/usr/local/man/man%.0f' 9)
|
||||
}
|
||||
|
||||
user_setup() {
|
||||
title "Setup user: $1"
|
||||
|
||||
if user_exists "$1"; then
|
||||
echo "User $1 exists. Updating..."
|
||||
user_update "$1"
|
||||
|
@ -215,7 +180,7 @@ user_exists() {
|
|||
user_new() {
|
||||
empty_skel="$(mktemp -d)"
|
||||
|
||||
$cmd useradd \
|
||||
useradd \
|
||||
-m ` # Create home directory.` \
|
||||
-k "$empty_skel" ` # Copy files from this directory into the new home.` \
|
||||
-U ` # Create a groups with the same name as the user.` \
|
||||
|
@ -230,72 +195,45 @@ user_new() {
|
|||
# Add user $1 to the `staff` group...
|
||||
# ...and change shell to `zsh` and get rid of bash files.
|
||||
user_update() {
|
||||
$cmd usermod -aG staff "$1"
|
||||
$cmd chsh -s /bin/zsh "$1"
|
||||
$cmd rm -vf $(printf "/home/$1/%s " .bash_history .bash_logout .bashrc .profile)
|
||||
usermod -aG staff "$1"
|
||||
chsh -s /bin/zsh "$1"
|
||||
rm -vf "$(printf "/home/$1/%s " .bash_history .bash_logout .bashrc .profile)"
|
||||
}
|
||||
|
||||
# Allow `sudo` without password for user $1.
|
||||
user_allow_sudo_nopasswd() {
|
||||
$cmd echo "$1 ALL=(ALL:ALL) NOPASSWD:ALL" | \
|
||||
$pipe_cmd dd status=none of="/etc/sudoers.d/${1}_nopasswd"
|
||||
echo "$1 ALL=(ALL:ALL) NOPASSWD:ALL" >"/etc/sudoers.d/${1}_nopasswd"
|
||||
}
|
||||
|
||||
deploy_dotfiles() {
|
||||
dotfiles_dir="/home/$USERNAME/.dotfiles"
|
||||
title "Deploy dotfiles"
|
||||
|
||||
dotfiles_dir="/home/$USERNAME/.dotfiles"
|
||||
if [ -d "${dotfiles_dir}" ]; then
|
||||
skipped "${dotfiles_dir} exists"
|
||||
else
|
||||
$cmd su "$USERNAME" -c "git clone $DOTFILES_URL ${dotfiles_dir}"
|
||||
su "$USERNAME" -c "git clone $DOTFILES_URL ${dotfiles_dir}"
|
||||
(
|
||||
$cmd cd "${dotfiles_dir}"
|
||||
$cmd su "$USERNAME" -c "./install.sh -y"
|
||||
cd "${dotfiles_dir}"
|
||||
su "$USERNAME" -c "./install.sh -y"
|
||||
)
|
||||
fi
|
||||
}
|
||||
|
||||
execute() {
|
||||
heading "Install APT packages"
|
||||
apt_custom_source
|
||||
apt_install
|
||||
|
||||
heading "Disable GRUB timeout"
|
||||
stow_custom_packages
|
||||
grub_disable_timeout
|
||||
|
||||
heading "Filesystem tweaks"
|
||||
ensure_usr_bin_fd
|
||||
ensure_usr_local_man_manN
|
||||
|
||||
heading "Install neovim v$NEOVIM_VERSION"
|
||||
install_neovim # Must come after `ensure_usr_local_man_manN`.
|
||||
|
||||
heading "Install git-delta v$GIT_DELTA_VERSION"
|
||||
install_git_delta
|
||||
|
||||
heading "Install lf v$LF_VERSION"
|
||||
install_lf
|
||||
|
||||
heading "Install exa v$EZA_VERSION"
|
||||
install_eza
|
||||
|
||||
heading "Setup user: $USERNAME"
|
||||
user_setup "$USERNAME"
|
||||
|
||||
heading "Deploy dotfiles"
|
||||
deploy_dotfiles
|
||||
}
|
||||
|
||||
do_pipe_cmd() { cat; echo "| $@"; }
|
||||
|
||||
main() {
|
||||
while getopts 'hn' opt; do
|
||||
case "$opt" in
|
||||
n) # dry run
|
||||
cmd=echo
|
||||
pipe_cmd=do_pipe_cmd
|
||||
execute
|
||||
exit 0
|
||||
;;
|
||||
h) # help
|
||||
usage
|
||||
exit 0
|
||||
|
@ -311,5 +249,5 @@ main() {
|
|||
execute
|
||||
}
|
||||
|
||||
main $@
|
||||
main "$@"
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue