dotfiles/install.sh

341 lines
8.1 KiB
Bash
Raw Normal View History

2024-11-16 12:41:50 +01:00
#!/usr/bin/env bash
set -euo pipefail
2024-11-16 14:16:16 +01:00
GREEN='\033[1;32m'
NC='\033[0m'
2024-11-16 12:41:50 +01:00
packages=(
age
atop
autossh
bat
borgbackup
borgmatic
btrfs-assistant
calibre
cmake
curl
diff-so-fancy
2024-11-16 14:16:16 +01:00
direnv
2024-11-16 12:41:50 +01:00
duf
emacs
ethtool
eza
fastfetch
fd-find
fzf
git
git-core
golang
hdparm
htop
hugo
jc
jq
just
kbackup
kpeoplevcard
lagrange
ldns
libtool
lsof
lynx
neochat
neovim
nmap
node-exporter
nodejs
nu
2024-11-16 14:16:16 +01:00
parallel
2024-11-16 12:41:50 +01:00
pipx
poetry
python3-devel
python3-pip
qbittorrent
ripgrep
rsync
rsyslog
shfmt
ShellCheck
tcpdump
tealdeer
tokodon
trash-cli
uv
vlc
w3m
wireshark
wl-clipboard
yakuake
zsh
)
copr_repos=(
atim/starship
hyperreal/better_fonts
varlad/yazi
varlad/zellij
)
flatpak_packages=(
com.discordapp.Discord
com.github.tchx84.Flatseal
io.podman_desktop.PodmanDesktop
)
pipx_packages=(
"black"
"bpython"
"isort"
"pyright"
)
services_enable=(
atop.service
atopacct.service
atop-rotate.timer
prometheus-node-exporter.service
rsyslog.service
sshd.service
systemd-networkd
tailscaled.service
)
services_disable=(
avahi-daemon.service
2024-11-16 14:16:16 +01:00
avahi-daemon.socket
2024-11-16 12:41:50 +01:00
bluetooth.service
cups.service
cups-browsed.service
NetworkManager.service
sddm.service
wpa_supplicant.service
)
2024-11-16 14:16:16 +01:00
function action_label() {
2024-11-16 12:41:50 +01:00
echo ""
2024-11-16 14:16:16 +01:00
echo -e "${GREEN}--> ${1}...${NC}"
}
function install_packages() {
action_label "INSTALLING PACKAGES"
2024-11-16 12:41:50 +01:00
sudo dnf install -y "${packages[@]}"
}
function install_devel_groups() {
2024-11-16 14:16:16 +01:00
action_label "INSTALLING DEVELOPMENT GROUPS"
2024-11-16 12:41:50 +01:00
sudo dnf install -y '@c-development' '@development-tools' '@container-management'
}
function enable_copr_repos() {
2024-11-16 14:16:16 +01:00
action_label "ENABLING COPR REPOS"
2024-11-16 12:41:50 +01:00
for repo in "${copr_repos[@]}"; do sudo dnf copr enable -y "$repo"; done
}
# Depends: enable_copr_repos
function install_copr_packages() {
2024-11-16 14:16:16 +01:00
action_label "INSTALLING COPR PACKAGES"
2024-11-16 12:41:50 +01:00
sudo dnf install -y starship fontconfig-font-replacements yazi zellij
}
function install_rpmfusion_repos() {
2024-11-16 14:16:16 +01:00
action_label "INSTALLING RPMFUSION REPOS"
2024-11-16 12:41:50 +01:00
sudo dnf install -y "https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm" "https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm"
}
# Depends: install_rpmfusion_repos
function install_rpmfusion_packages() {
2024-11-16 14:16:16 +01:00
action_label "INSTALLING RPMFUSION PACKAGES"
2024-11-16 12:41:50 +01:00
sudo dnf install -y --allowerasing ffmpeg-libs
}
function install_charm_packages() {
2024-11-16 14:16:16 +01:00
action_label "INSTALLING CHARM PACKAGES"
2024-11-16 12:41:50 +01:00
echo '[charm]
name=Charm
baseurl=https://repo.charm.sh/yum/
enabled=1
gpgcheck=1
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
2024-11-16 14:16:16 +01:00
sudo dnf install -y gum charm
2024-11-16 12:41:50 +01:00
}
function install_tailscale() {
2024-11-16 14:16:16 +01:00
action_label "INSTALLING TAILSCALE"
2024-11-16 12:41:50 +01:00
curl -fsSL https://tailscale.com/install.sh | sh
}
function enable_flathub() {
2024-11-16 14:16:16 +01:00
action_label "ENABLING FLATHUB"
2024-11-16 12:41:50 +01:00
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
}
# Depends: enable_flathub
function install_flatpaks() {
2024-11-16 14:16:16 +01:00
action_label "INSTALLING FLATPAKS"
for pkg in "${flatpak_packages[@]}"; do flatpak install flathub -y "$pkg"; done
2024-11-16 12:41:50 +01:00
}
# Depends: install_packages
function install_pipx_packages() {
2024-11-16 14:16:16 +01:00
action_label "INSTALLING PIPX PACKAGES"
2024-11-16 12:41:50 +01:00
for pkg in "${pipx_packages[@]}"; do pipx install "$pkg"; done
2024-11-16 14:16:16 +01:00
pipx install ansible --include-deps
2024-11-16 12:41:50 +01:00
}
function setup_networkd_conf() {
2024-11-16 14:16:16 +01:00
action_label "SETTING UP SYSTEMD-NETWORKD CONFIG"
2024-11-16 12:41:50 +01:00
echo '[Match]
Name=eno1
[Network]
DHCP=yes
2024-11-16 14:16:16 +01:00
#DNS=100.100.100.100
2024-11-16 12:41:50 +01:00
DNSSEC=allow-downgrade
[DHCPv4]
UseDNS=no' | sudo tee /etc/systemd/network/eno1.network
}
# After: setup_networkd_conf
function setup_resolv_conf() {
2024-11-16 14:16:16 +01:00
action_label "SETTING UP RESOLV CONF"
2024-11-16 12:41:50 +01:00
sudo rm -v /etc/resolv.conf
sudo ln -sf /var/run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved
}
# Depends: enable_tailscale
function setup_rsyslog_conf() {
2024-11-16 14:16:16 +01:00
action_label "SETTING UP RSYSLOG"
2024-11-16 12:41:50 +01:00
echo '# Forward to main monitoring node (nas.lyrebird-marlin.ts.net)
*.* action(type="omfwd" target="100.112.241.12" port="514" protocol="tcp"
action.resumeRetryCount="100"
queue.type="linkedList" queue.size="10000")' | sudo tee /etc/rsyslog.d/00forward-to-nas.conf
}
# After: setup_networkd_conf
function disable_services() {
2024-11-16 14:16:16 +01:00
action_label "DISABLING SYSTEMD SERVICES"
2024-11-16 12:41:50 +01:00
for service in "${services_disable[@]}"; do sudo systemctl disable --now "$service"; done
}
# After:
# - setup_networkd_conf
# - install_packages
function enable_services() {
2024-11-16 14:16:16 +01:00
action_label "ENABLING SYSTEMD SERVICES"
2024-11-16 12:41:50 +01:00
for service in "${services_enable[@]}"; do sudo systemctl enable --now "$service"; done
}
function disable_ipv6() {
2024-11-16 14:16:16 +01:00
action_label "DISABLING IPV6"
2024-11-16 12:41:50 +01:00
if ! sudo grep "ipv6.disable=1" /boot/grub2/grub.cfg; then
sudo grubby --args=ipv6.disable=1 --update-kernel=ALL
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
else
echo "IPv6 already disabled."
fi
}
function setup_fstab() {
2024-11-16 14:16:16 +01:00
action_label "SETTING UP /etc/fstab"
sudo mkdir -p /mnt/borgbackup /mnt/quick-backup
2024-11-16 12:41:50 +01:00
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
2024-11-16 14:16:16 +01:00
echo "UUID=ecf44876-2e4e-46ad-9f12-fc516c8ace2d /mnt/quick-backup btrfs defaults,subvol=@quick-backup,compress=zstd:1,x-systemd.device-timeout=20 0 0" | sudo tee -a /etc/fstab
2024-11-16 12:41:50 +01:00
else
echo "/etc/fstab already configured."
fi
sudo systemctl daemon-reload
sudo restorecon -Rv /mnt/borgbackup
sudo restorecon -Rv /mnt/quick-backup
sudo mount -av
}
# Depends:
# - install_packages
# - setup_fstab
function setup_borgmatic_config() {
2024-11-16 14:16:16 +01:00
action_label "SETTING UP BORGMATIC CONFIG"
sudo mkdir -p /etc/borgmatic
2024-11-16 12:41:50 +01:00
sudo cp -v /mnt/quick-backup/borgmatic-config.yaml /etc/borgmatic/config.yaml
}
# Depends:
# - install_packages
# - setup_fstab
function copy_quick_backup() {
2024-11-16 14:16:16 +01:00
action_label "COPYING QUICK BACKUP"
2024-11-16 12:41:50 +01:00
rsync -aAXPz /mnt/quick-backup/jas/ /home/jas
}
# Depends: copy_quick_backup
function build_bat_cache() {
2024-11-16 14:16:16 +01:00
action_label "BUILDING BAT CACHE"
2024-11-16 12:41:50 +01:00
bat cache --build
}
# Depends: install_packages
function update_tealdeer_cache() {
2024-11-16 14:16:16 +01:00
action_label "UPDATING TEALDEER CACHE"
2024-11-16 12:41:50 +01:00
tldr --update
}
2024-11-16 14:16:16 +01:00
# Depends: install_tailscale
2024-11-16 12:41:50 +01:00
function setup_firewalld() {
2024-11-16 14:16:16 +01:00
action_label "SETTING UP FIREWALLD"
2024-11-16 12:41:50 +01:00
if ! sudo firewall-cmd --get-zones | grep "tailnet"; then
sudo firewall-cmd --permanent --new-zone=tailnet
sudo firewall-cmd --permanent --zone=tailnet --add-interface=tailscale0
sudo firewall-cmd --permanent --zone=tailnet --add-port=1025-65535/tcp
sudo firewall-cmd --permanent --zone=tailnet --add-port=1025-65535/udp
sudo firewall-cmd --permanent --zone=tailnet --add-service=ssh
else
echo "firewalld tailnet zone already configured"
fi
sudo firewall-cmd --permanent --zone=FedoraWorkstation --remove-service={dhcpv6-client,samba-client}
sudo firewall-cmd --reload
}
function install_rclone() {
2024-11-16 14:16:16 +01:00
action_label "INSTALLING LATEST RCLONE"
2024-11-16 12:41:50 +01:00
curl https://rclone.org/install.sh | sudo bash
command -v rclone
}
# Depends: install_rclone copy_quick_backup
function enable_sync_to_remotes() {
2024-11-16 14:16:16 +01:00
action_label "ENABLING sync_to_remotes.timer"
2024-11-16 12:41:50 +01:00
systemctl --user enable --now sync_to_remotes.timer
}
install_packages
install_devel_groups
enable_copr_repos
install_copr_packages
install_rpmfusion_repos
install_rpmfusion_packages
install_charm_packages
install_tailscale
enable_flathub
install_flatpaks
install_pipx_packages
setup_networkd_conf
setup_resolv_conf
setup_rsyslog_conf
disable_services
enable_services
disable_ipv6
setup_fstab
setup_borgmatic_config
copy_quick_backup
build_bat_cache
update_tealdeer_cache
setup_firewalld
install_rclone
enable_sync_to_remotes
2024-11-16 14:16:16 +01:00
action_label "DONE SETTING UP ALL THE THINGS ^_^"