Compare commits

...

10 Commits

Author SHA1 Message Date
8addafd4b9 Verify checksums OK 2024-11-24 06:18:57 -06:00
509f695257 Ensure gum deb package is cleaned up 2024-11-24 05:48:39 -06:00
9ab53493a9 Egh 2024-11-24 05:44:25 -06:00
9feef98397 Egh 2024-11-24 05:42:40 -06:00
04afc6e08f Egh 2024-11-24 05:15:15 -06:00
9fbae11900 Egh 2024-11-24 05:11:12 -06:00
adced97c43 Make install_starship() idempotent 2024-11-24 05:06:58 -06:00
fb4cc4abfa Add Debian support 2024-11-24 05:05:05 -06:00
5826686d70 Add Debian support 2024-11-24 04:57:10 -06:00
1619d80735 Add Debian support 2024-11-24 04:55:21 -06:00

View File

@ -4,8 +4,61 @@ set -euo pipefail
GREEN='\033[1;32m' GREEN='\033[1;32m'
NC='\033[0m' NC='\033[0m'
apt_packages=(
atop
autossh
bat
borgbackup
borgmatic
build-essential
calibre
cmake
curl
direnv
duf
emacs
firewalld
fzf
git
git-core
golang
hdparm
htop
hugo
jc
jq
lsd
lynx
neovim
nmap
nodejs
npm
papirus-icon-theme
parallel
pipx
prometheus-node-exporter
python3-dev
python3-pip
python3-poetry
ripgrep
rsync
rsyslog
shfmt
shellcheck
tcpdump
tealdeer
trash-cli
unzip
w3m
wget
wireshark
wl-clipboard
xfce4-terminal
zip
zsh
)
packages=( dnf_packages=(
age age
atop atop
autossh autossh
@ -39,6 +92,7 @@ packages=(
lagrange lagrange
ldns ldns
libtool libtool
lsd
lsof lsof
lynx lynx
neochat neochat
@ -62,7 +116,6 @@ packages=(
tealdeer tealdeer
tokodon tokodon
trash-cli trash-cli
uv
vlc vlc
w3m w3m
wireshark wireshark
@ -89,15 +142,16 @@ pipx_packages=(
"bpython" "bpython"
"isort" "isort"
"pyright" "pyright"
"uv"
) )
services_enable=( services_enable=(
atop.service atop.service
atopacct.service atopacct.service
atop-rotate.timer atop-rotate.timer
firewalld.service
prometheus-node-exporter.service prometheus-node-exporter.service
rsyslog.service rsyslog.service
sshd.service
systemd-networkd systemd-networkd
tailscaled.service tailscaled.service
) )
@ -109,8 +163,6 @@ services_disable=(
cups.service cups.service
cups-browsed.service cups-browsed.service
NetworkManager.service NetworkManager.service
sddm.service
wpa_supplicant.service
) )
function action_label() { function action_label() {
@ -118,9 +170,38 @@ function action_label() {
echo -e "${GREEN}--> ${1}...${NC}" echo -e "${GREEN}--> ${1}...${NC}"
} }
install_makedeb_prebuilt_packages() {
wget -qO - 'https://proget.makedeb.org/debian-feeds/prebuilt-mpr.pub' | gpg --dearmor | sudo tee /usr/share/keyrings/prebuilt-mpr-archive-keyring.gpg 1>/dev/null
echo "deb [arch=all,$(dpkg --print-architecture) signed-by=/usr/share/keyrings/prebuilt-mpr-archive-keyring.gpg] https://proget.makedeb.org prebuilt-mpr $(lsb_release -cs)" | sudo tee /etc/apt/sources.list.d/prebuilt-mpr.list
sudo apt update
sudo apt dist-upgrade -y
sudo apt install just
}
# interactive
install_starship() {
if ! test -f "$(command -v starship)"; then
curl -sS https://starship.rs/install.sh | sh
fi
}
function install_packages() { function install_packages() {
action_label "INSTALLING PACKAGES" action_label "INSTALLING PACKAGES"
sudo dnf install -y "${packages[@]}" if test -f /etc/debian_version; then
sudo apt install -y "${apt_packages[@]}"
install_makedeb_prebuilt_packages
install_starship
install_zellij
fi
if test -f /etc/redhat-release; then
sudo dnf install -y "${dnf_packages[@]}"
install_devel_groups
enable_copr_repos
install_copr_packages
install_rpmfusion_repos
install_rpmfusion_packages
fi
} }
function install_devel_groups() { function install_devel_groups() {
@ -149,16 +230,42 @@ function install_rpmfusion_packages() {
sudo dnf install -y --allowerasing ffmpeg-libs sudo dnf install -y --allowerasing ffmpeg-libs
} }
install_zellij() {
if test -f /etc/debian_version; then
curl -s https://api.github.com/repos/zellij-org/zellij/releases/latest | grep "browser_download_url" | grep "zellij-$(uname -m)-unknown-linux-musl.tar.gz" | cut -d : -f 2,3 | tr -d '"' | wget -qi -
curl -s https://api.github.com/repos/zellij-org/zellij/releases/latest | grep "browser_download_url" | grep "zellij-$(uname -m)-unknown-linux-musl.sha256sum" | cut -d : -f 2,3 | tr -d '"' | wget -qi -
tar xvf "zellij-$(uname -m)-unknown-linux-musl.tar.gz"
if [ $(sha256sum -c "zellij-$(uname -m)-unknown-linux-musl.sha256sum" | head -n 1 | awk '{print $2}') = "OK" ]; then
sudo mv zellij /usr/local/bin
fi
rm -v zellij*
fi
}
function install_charm_packages() { function install_charm_packages() {
action_label "INSTALLING CHARM PACKAGES" action_label "INSTALLING CHARM PACKAGES"
if test -f /etc/debian_version; then
curl -s https://api.github.com/repos/charmbracelet/gum/releases/latest | grep "browser_download_url.*deb" | grep "$(dpkg --print-architecture)" | cut -d : -f 2,3 | tr -d '"' | wget -qi -
curl -s https://api.github.com/repos/charmbracelet/gum/releases/latest | grep "browser_download_url" | grep "checksums.txt" | head -n 1 | cut -d : -f 2,3 | tr -d '"' | wget -qi -
if [ $(grep "$(dpkg --print-architecture).deb" checksums.txt | sha256sum -c | head -n 1 | awk '{print $2}') = "OK" ]; then
sudo dpkg -i gum*.deb
sudo apt -f install
fi
rm -v gum*
rm -v checksums.txt
fi
if test -f /etc/redhat-release; then
echo '[charm] echo '[charm]
name=Charm name=Charm
baseurl=https://repo.charm.sh/yum/ baseurl=https://repo.charm.sh/yum/
enabled=1 enabled=1
gpgcheck=1 gpgcheck=1
gpgkey=https://repo.charm.sh/yum/gpg.key' | sudo tee /etc/yum.repos.d/charm.repo gpgkey=https://repo.charm.sh/yum/gpg.key' | sudo tee /etc/yum.repos.d/charm.repo
sudo rpm --import https://repo.charm.sh/yum/gpg.key sudo rpm --import https://repo.charm.sh/yum/gpg.key
sudo dnf install -y gum charm sudo dnf install -y gum charm
fi
} }
function install_tailscale() { function install_tailscale() {
@ -218,7 +325,11 @@ function setup_rsyslog_conf() {
# After: setup_networkd_conf # After: setup_networkd_conf
function disable_services() { function disable_services() {
action_label "DISABLING SYSTEMD SERVICES" action_label "DISABLING SYSTEMD SERVICES"
for service in "${services_disable[@]}"; do sudo systemctl disable --now "$service"; done for service in "${services_disable[@]}"; do
if sudo systemctl is-active "$service"; then
sudo systemctl disable --now "$service"
fi
done
} }
# After: # After:
@ -227,20 +338,38 @@ function disable_services() {
function enable_services() { function enable_services() {
action_label "ENABLING SYSTEMD SERVICES" action_label "ENABLING SYSTEMD SERVICES"
for service in "${services_enable[@]}"; do sudo systemctl enable --now "$service"; done for service in "${services_enable[@]}"; do sudo systemctl enable --now "$service"; done
if test -f /etc/debian_version; then
sudo systemctl enable --now ssh.service
elif test -f /etc/redhat-release; then
sudo systemctl enable --now sshd.service
fi
} }
function disable_ipv6() { function disable_ipv6() {
action_label "DISABLING IPV6" action_label "DISABLING IPV6"
if test -f /etc/debian_version; then
if ! grep "net.ipv6.conf.all.disable_ipv6" /etc/sysctl.conf; then
echo "net.ipv6.conf.all.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
else
echo "IPv6 already disabled."
fi
elif test -f /etc/redhat-release; then
if ! sudo grep "ipv6.disable=1" /boot/grub2/grub.cfg; then if ! sudo grep "ipv6.disable=1" /boot/grub2/grub.cfg; then
sudo grubby --args=ipv6.disable=1 --update-kernel=ALL sudo grubby --args=ipv6.disable=1 --update-kernel=ALL
sudo grub2-mkconfig -o /boot/grub2/grub.cfg sudo grub2-mkconfig -o /boot/grub2/grub.cfg
else else
echo "IPv6 already disabled." echo "IPv6 already disabled."
fi fi
fi
} }
function setup_fstab() { function setup_fstab() {
action_label "SETTING UP /etc/fstab" action_label "SETTING UP /etc/fstab"
if test -f /etc/redhat-release; then
sudo mkdir -p /mnt/borgbackup /mnt/quick-backup sudo mkdir -p /mnt/borgbackup /mnt/quick-backup
if ! grep "ecf44876-2e4e-46ad-9f12-fc516c8ace2d" /etc/fstab; then if ! grep "ecf44876-2e4e-46ad-9f12-fc516c8ace2d" /etc/fstab; then
echo "UUID=ecf44876-2e4e-46ad-9f12-fc516c8ace2d /mnt/borgbackup btrfs defaults,subvol=@borgbackup,compress=zstd:1,x-systemd.device-timeout=20 0 0" | sudo tee -a /etc/fstab echo "UUID=ecf44876-2e4e-46ad-9f12-fc516c8ace2d /mnt/borgbackup btrfs defaults,subvol=@borgbackup,compress=zstd:1,x-systemd.device-timeout=20 0 0" | sudo tee -a /etc/fstab
@ -252,6 +381,7 @@ function setup_fstab() {
sudo restorecon -Rv /mnt/borgbackup sudo restorecon -Rv /mnt/borgbackup
sudo restorecon -Rv /mnt/quick-backup sudo restorecon -Rv /mnt/quick-backup
sudo mount -av sudo mount -av
fi
} }
# Depends: # Depends:
@ -259,8 +389,10 @@ function setup_fstab() {
# - setup_fstab # - setup_fstab
function setup_borgmatic_config() { function setup_borgmatic_config() {
action_label "SETTING UP BORGMATIC CONFIG" action_label "SETTING UP BORGMATIC CONFIG"
if test -f /etc/redhat-release; then
sudo mkdir -p /etc/borgmatic sudo mkdir -p /etc/borgmatic
sudo cp -v /mnt/quick-backup/borgmatic-config.yaml /etc/borgmatic/config.yaml sudo cp -v /mnt/quick-backup/borgmatic-config.yaml /etc/borgmatic/config.yaml
fi
} }
# Depends: # Depends:
@ -268,13 +400,19 @@ function setup_borgmatic_config() {
# - setup_fstab # - setup_fstab
function copy_quick_backup() { function copy_quick_backup() {
action_label "COPYING QUICK BACKUP" action_label "COPYING QUICK BACKUP"
if test -f /etc/redhat-release; then
rsync -aAXPz /mnt/quick-backup/jas/ /home/jas rsync -aAXPz /mnt/quick-backup/jas/ /home/jas
fi
} }
# Depends: copy_quick_backup # Depends: copy_quick_backup
function build_bat_cache() { function build_bat_cache() {
action_label "BUILDING BAT CACHE" action_label "BUILDING BAT CACHE"
if test -f /etc/debian_version; then
batcat cache --build
elif test -f /etc/redhat-release; then
bat cache --build bat cache --build
fi
} }
# Depends: install_packages # Depends: install_packages
@ -295,7 +433,11 @@ function setup_firewalld() {
else else
echo "firewalld tailnet zone already configured" echo "firewalld tailnet zone already configured"
fi fi
if test -f /etc/debian_version; then
sudo firewall-cmd --permanent --zone=public --remove-service={dhcpv6-client,samba-client}
elif test -f /etc/redhat-release; then
sudo firewall-cmd --permanent --zone=FedoraWorkstation --remove-service={dhcpv6-client,samba-client} sudo firewall-cmd --permanent --zone=FedoraWorkstation --remove-service={dhcpv6-client,samba-client}
fi
sudo firewall-cmd --reload sudo firewall-cmd --reload
} }
@ -305,36 +447,28 @@ function install_rclone() {
command -v rclone command -v rclone
} }
# Depends: install_rclone copy_quick_backup
function enable_sync_to_remotes() {
action_label "ENABLING sync_to_remotes.timer"
systemctl --user enable --now sync_to_remotes.timer
}
install_packages install_packages
install_devel_groups
enable_copr_repos
install_copr_packages
install_rpmfusion_repos
install_rpmfusion_packages
install_charm_packages install_charm_packages
install_tailscale install_tailscale
enable_flathub
install_flatpaks if test -f /etc/redhat-release; then
enable_flathub
install_flatpaks
setup_networkd_conf
setup_fstab
setup_borgmatic_config
copy_quick_backup
fi
install_pipx_packages install_pipx_packages
setup_networkd_conf
setup_resolv_conf setup_resolv_conf
setup_rsyslog_conf setup_rsyslog_conf
disable_services disable_services
enable_services enable_services
disable_ipv6 disable_ipv6
setup_fstab
setup_borgmatic_config
copy_quick_backup
build_bat_cache build_bat_cache
update_tealdeer_cache update_tealdeer_cache
setup_firewalld setup_firewalld
install_rclone install_rclone
enable_sync_to_remotes
action_label "DONE SETTING UP ALL THE THINGS ^_^" action_label "DONE SETTING UP ALL THE THINGS ^_^"