Automated dotfiles

I decided to automate my dotfiles for working on different systems but didn’t want to have symlinks everywhere so reworked an old script I made in 2014 for backing up dotfiles.

This time I thought I’d automate both backup and install making it easier & quicker for clean installs.

The script also makes it possible to automate the install of extensions in Visual Studio Code & Vim.

My Desktop Setup

I use a tiling WM in linux with dual monitors and have odd numbered desktops on the left monitor & even numbered on the right monitor.

Programs are launched using dmenu ( ctrl + space ).

I’ve had the same setup since 2014 and find it a lot faster than the mini game of dragging windows around.

archlinux i3wm desktop

Script Design

The script copies files as an alternative to having symlinks everywhere.

This allows me to control when I commit config changes to github (there may be times when testing settings etc).

It also means I don’t have symlinks across different disk mount points.

function copy() {
    if [ -f $1 ]; then
        DESTINATION=$(echo "$ORIGIN" | sed "s#^\./configs/#$HOME/#")

        mkdir -p $(dirname "$DESTINATION")

        if [ -a "$DESTINATION" ]; then
            if diff "$ORIGIN" "$DESTINATION" >/dev/null; then
                echo -e "$bplus $DESTINATION already up to date"
                return 2

Install & Backup Features

  • create folder structure if required
  • prompt before overwriting existing configuration
  • check for changes using diff
  • cli feedback for each config file
  • checks user is not root

Folder Structure

├── configs/
├── lists/
└── sys/
  • configs contains config files from users home directory
  • lists contains vscode extensions list
  • sys contains files from linux system (eg: /etc/)


The scripts and my dotfiles can be downloaded from github.