How do you guys quickly sync your settings (especially bash aliases and ssh keys) across your machines?
Ideally i want a simple script to run on every new server I work with. Any suggestions?
Use a git repo and stow
tool. For updating, you only need run git pull
(and stow
if you create config for a new software). If you modify some config, just git add && git commit && git push.
With this way, you can also record change history of your config.
1password does this for me, when it comes to ssh keys, and it’s great. All I have to do on a new machine is setup the ssh-agent, which is also practically preconfigured. The actual key never leaves the password manager
Dotfiles go in git, SSH keys are state.
I’m looking to migrate to home-manager though because I use Nix on all my devices anyways.
I also have multiple versions of by bash_profile with syntax specific to the OS. It checks if we’re on MacOS or Linux with a kernel check and then reads the appropriate ancillary bash_profile for that platform. Anything that can live in the main bash_profile with the same command on both platforms lives there and anything that needs to be system-specific is in the other one.
I have all my important functions as individual files that get loaded with the following:
function loadfuncs() {
local funcdir="$HOME/.dotfiles/functions/"
[ -e "${funcdir}".DS_Store ] && rm "$HOME/.dotfiles/functions/.DS_Store"
local n=0
for i in "${funcdir}"*; do
source "$(realpath $i)"
n=$(( n + 1 ))
done
}
loadfuncs
Interesting way to go about it. Though when I’m at the point where I need differences between linux and darwin, I’m probably going to do that at the home-manager level.
Just for fun, here’s how I’m checking that (this was written in 2016 and may require adjusting as I haven’t been keeping up on Linux for a while):
function oscheck() {
if [[ "$(uname -s)" == 'Darwin' ]]; then
# echo Darwin
osType=Darwin
return 0
elif
[[ "$(uname -s)" == 'Linux' ]]; then
# echo Linux
osType=Linux
grep CentOS /etc/os-release > /dev/null
if [[ "$?" == 0 ]]; then
# echo "CentOS"
export theDistro=CentOS
return 0
else
:
fi
grep Ubuntu /etc/os-release > /dev/null
if [[ "$?" == 0 ]]; then
export theDistro=Ubuntu
return 0
else
:
# echo "Not Ubuntu"
fi
printf " %s\n" "Error: osType tested true for Linux, but did not find CentOS or Ubuntu." ""
return 1
else
osType=Unknown
return 1
fi
}
oscheck