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
    ·
    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
      ·
      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
        ·
        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
          ·
          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
          
  • restlessyet@discuss.tchncs.de
    ·
    1 year ago

    I'm surprised no one mentioned ansible yet. It's meant for this (and more).

    By ssh keys I assume you're talking about authorized_keys, not private keys. I agree with other posters that private keys should not be synced, just generate new ones and add them to the relevant servers authorized_keys with ansible.

    • mFat@lemdro.id
      hexagon
      ·
      1 year ago

      I like this approach. Had never heard of those solutions. Thanks!

    • noUsernamesLef7@infosec.pub
      ·
      1 year ago

      I love this solution, I've been using it for years. I had previously just been using the home directory is a git repo approach, and it never quite felt natural to me and came with quite a few annoyances. Adding stow to the mix was exactly what I needed.

  • chayleaf@lemmy.ml
    ·
    1 year ago

    ssh keys go into my keepass db, keepassxc imports them into gpg agent or ssh agent. Bash aliases and so on are in my dotfiles

  • bloopernova@programming.dev
    ·
    edit-2
    1 year ago

    I use a git repo combined with the basic install utility. Clone the repo, run the app installer, then run the install script. For symlinks I just use a zsh script.

  • tvcvt@lemmy.ml
    ·
    1 year ago

    I keep my dotfiles in a got repo and just do a git pull your update them. That could definitely be a cron job if you needed.

    SSH keys are a little trickier. I’d like to tell you I have a unique key for each of my desktop machines since that would be best practice, but that’s not the case. Instead I have a Syncthing shared folder. When I get around to cleaning that up, I’ll probably do just that and keep an authorize_keys and known_hosts file in git so I can pull them to needed hosts and a cron job to keep them updated.

  • Coelacanthus@lemmy.kde.social
    ·
    1 year ago

    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.