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?

  • Atemu@lemmy.ml
    link
    fedilink
    arrow-up
    19
    ·
    1 year ago

    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.

    • some_guy@lemmy.sdf.org
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

      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
      
      
      • Atemu@lemmy.ml
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        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.

        • some_guy@lemmy.sdf.org
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          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