I had found myself reinstalling and reconfiguring a lot of the same things over and over while distro hopping, so I came up with a bash script with some of the most common configuration changes and such. As an example, here is my Fedora post=install script:
script
#!/usr/bin/env bash
# remove all permission restrictions from current directory
#sudo chmod -R a+rwX .
sudo hostnamectl set-hostname [redacted]
# prompt for ssh password to use later
if [[ $1 == "" ]]; then
read -p "Enter ssh password: " ssh_pass
else
ssh_pass=$1
fi
# default dnf prompts to 'y'
sudo sh -c "echo 'defaultyes=True' >> /etc/dnf/dnf.conf"
# install packages that are needed to add repos and other packages
sudo dnf up -y && sudo dnf in curl flatpak wget -y
#add repos
sudo dnf copr enable lilay/topgrade -y
sudo dnf copr enable aflyhorse/libjpeg -y
sudo dnf config-manager addrepo --from-repofile=
https://repository.mullvad.net/rpm/stable/mullvad.repo
sudo dnf in
https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm -y
sudo dnf in
https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm -y
sudo sh -c 'curl -fsSL
https://repo.librewolf.net/librewolf.repo | pkexec tee /etc/yum.repos.d/librewolf.repo'
sudo flatpak remote-add --if-not-exists flathub
https://dl.flathub.org/repo/flathub.flatpakrepo
echo -e "[gitlab.com_paulcarroty_vscodium_repo]\nname=gitlab.com_paulcarroty_vscodium_repo\nbaseurl=
https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/rpms/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg\nmetadata_expire=1h" | sudo tee -a /etc/yum.repos.d/vscodium.repo
#install packages
sudo dnf in augeas-devel btop cairo-devel cairo-gobject-devel cargo cmake codium dbus-devel expat-devel gifsicle gimp git kde-connect kdenlive libavcodec-freeworld librewolf libxkbcommon-devel lightdm-gtk-greeter-settings mpv mullvad-vpn ninja-build openssh-server openssl openssl-devel pipx python3-dbus python3-devel python3-pip rpmbuild syncthing thunderbird topgrade vlc sshpass -y
sudo dnf in $(curl -s
https://raw.githubusercontent.com/teervo/bitwig-fedora/refs/heads/main/bitwig-rpm.sh | bash -s 4.4.10) -y
sudo dnf swap ffmpeg-free ffmpeg --allowerasing -y
export PATH="$HOME/.cargo/bin:$PATH" && echo $'export PATH= \"$HOME/.cargo/bin:$PATH \"' >> ~/.bashrc
cargo install gifski cargo-updateflatpak install com.github.iwalton3.jellyfin-media-player -y
#pipx install numlockw
pip install pandas odfpy
#create ssh key, copy to servers
ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
hosts=("10.0.0.10" "10.0.0.11")
for host in "${hosts[@]}"; do
ssh-keyscan -H $host >> ~/.ssh/known_hosts && sshpass -p "$ssh_pass" ssh-copy-id -o StrictHostKeyChecking=no [redacted]@$host && ssh -q [redacted]@$host exit
done
#enable/start ssh server
sudo systemctl enable sshd
sudo systemctl start sshd
#add external drive to fstab to automount
directory_secondary_drive=$HOME/nvme
uuid=[redacted]
sudo blkid
sudo cp /etc/fstab /etc/fstab.bak
sudo sh -c "echo 'UUID=$uuid $directory_secondary_drive btrfs rw,auto,user,exec 0 0' >> /etc/fstab"
sudo mount -a
#copy over custom config files
directory_software=$directory_secondary_drive/sync/software
cp -r $directory_software/setup/configs/* $HOME/.local/share/
#install fonts
cp $directory_software/fonts/* $HOME/.fonts
fc-cache -vf
#set git credentials
git config --global user.name "[redacted]" && git config --global user.email "[redacted]@yourdomain.com"
#add aliases to bashrc
echo $'alias pipup=\'pip list -o | cut -f1 -d\'\\\'\' \'\\\'\' | tr " " " " | awk \'\\\'\'{if(NR>=3)print}\'\\\'\' | cut -d\'\\\'\' \'\\\'\' -f1 | xargs -n1 pip install -U; pip install -U cyberdrop-dl-patched\'' >> ~/.bashrc
echo $'alias up=\"topgrade -y && echo \'\\nChecking pip\\n\' && pipup\"' >> ~/.bashrc
echo $'alias e=\"exit\"' >> ~/.bashrc
#https://support.mozilla.org/en-US/kb/compact-mode-workaround-firefox
#print ssh key
echo $'\nPublic SSH key:'
cat $HOME/.ssh/*.pub
Note that I used [redacted] here in places for anonymity reasons. This could give you a decent starting point to do something similar.