---
title: "How I Created My dotfiles · Junaid Qadir"
description: "In this blog post I share my story about how I created my dotfiles. What stopped me from making the decision to just go and create them before a disaster."
url: "https://junaidqadir.com/blog/how-i-created-my-dotfiles"
date: "2019-11-07"
tags: ["bash", "composer", "dotfiles", "how-to", "laracasts", "laravel", "linux", "programming", "shell", "ubuntu"]
---

# How I Created My dotfiles

## What Is A dotfile?

On \*nix systems file/directory names starting with a period or a dot \[**.**\] symbol are considered user-specific configuration files and they are hidden by default. The most common examples of dotfiles are `.profile`, `.bashrc` for files and `.config/` `.font/` for directories. Since these hold user-specific configuration, they are found in home director of the user referred to as `~` (pronounced tilde).

## Not Late Yet

It was always on the back of my mind. It lurked there, made me anxious from deep inside. Because some people won’t get it until it hits them. Disasters can happen and when they do happen, you can’t do anything except to have a backup plan and a backup; or regret for for life (Not really). Fortunately I haven’t met a disaster yet and I still didn’t bother to sit down and organize my `dotfiles` and configurations and store them to a safe place like [GitHub](https://github.com/).

## Public Service Announcement

Just. Go. For. It. You don’t have to do it all at once. Just take small steps like create your `dotfiles` directory. Then move your `dotfiles` and initially symlink them manually just like I did. If you know how to write code then you’ll be fine with Bash. Keep Mr. Google (or whatever you into) handy all the time.

## The Motivation

A few days ago [Jeffrey Way](https://twitter.com/jeffrey_way) started a new series on [Laracasts](https://laracasts.com/)(I’m one happy subscriber by the way) called [Guest Spotlight](https://laracasts.com/series/guest-spotlight/). Interestingly the first episode of the series is about dotfiles. So I watched it. and I got motivated at the same time got anxious that how and from where I’m gonna start. Some time back I created a list of Linux applications that I regularly use. I pulled out that file and took a good look at it then opened my aliases file and I felt really overwhelmed and I closed everything.

## Boy, I Got Pumped!

Fast-forward a few days and I decided to just do it. I created a `.dotfiles` directory in my home directory and started moving my `.bashrc`, `.zshrc`, `.aliases`, `.gitconfig` and manually symlinked them. I use Apache HTTP Server for my local development so I copied my `sites-available` director and moved it to `Apache` directory under `~/.dotfiles`, along with my hosts file from `/etc/hosts` and and created symlinks for all of them manually. Then I called it a day feeling a bit better for whatever I accomplished..

It was just the beginning but unfortunately, on November 6th, I got sick and lost my whole day but I felt better and was on my feet by evening. So I sat and categorized sources of my software. Since I use [Ubuntu](https://ubuntu.com/), I can install software through various channels like `apt`, `snap`, `flatpack` or `.deb` files. So I created`apps.sh` file and added `sudo apt-get install [app-name] -y` for all of my 14 softwares for the first iteration.

> I’m jumping the dotfiles train for 2020.
> 
> Junaid Qadir | ????‍???? ⌨️ ???? ???? (@JunaidQadirB) [November 6, 2019](https://twitter.com/JunaidQadirB/status/1192109944079888384?ref_src=twsrc%5Etfw)

Created `gnome.sh` to restore my Gnome desktop settings from the backup file I created in the `.dotfiled` directory. This only runs `docnf` with the `load` flag like this:

`dconf load / < dconf-settings.ini`

Pretty simple. After that, I created `composer.sh` to install my global composer packages. At the moment I use 3 composer packages globally

1.  **[hirak/prestissimo](https://github.com/hirak/prestissimo)** This handy package lets me install composer packages in parallel.
2.  **[korri/composer-version](https://github.com/korri/composer-version)** Cli toot that increments composer.json file version number and commits to the git repo.
3.  **[laravel/installer](https://github.com/laravel/installer)** Laravel installer.

Finally, I created the `.shell` file responsible for downloading and configuring `zsh` and symlinking the `dotfiles`like `.zshrc` `.bashrc` `.gitconfig`, and a couple of other files.

Then I needed a way to run all of these scripts, the main script. Like most people I chose to call my main script `insatll.sh`. When run, it displays my banner (because why not!) then it displays a warning and upon typing `yes` it will call all the script files one after another.’

I have yet to include a shell script for PHP and restore `Sublime Text` and `PHPStorm` configuration. As I said earlier I’ll do it gradually.

## Show Me The Files

At the moment the repo is private on GitHub because it has a lot of personal stuff in there. In the future, I might fork a new repo and remove any personal stuff so that I can easily share it with the world.

## Closing Thoughts

My concern was always that it’s complex and I have to learn a ton of things to fully automate my environment. But in reality, it was not that difficult. it barely took me a few hours spread across a couple of days. So the lesson here is, sometimes things seem so overwhelming that our fear just holds us back. Therefore, no need to do extensive planning just start doing it you’ll end up just fine.

[Bash](https://junaidqadir.com/blog/tag/bash)[Composer](https://junaidqadir.com/blog/tag/composer)[How to](https://junaidqadir.com/blog/tag/how-to)[Laravel](https://junaidqadir.com/blog/tag/laravel)[Linux](https://junaidqadir.com/blog/tag/linux)[Programming](https://junaidqadir.com/blog/tag/programming)[Shell](https://junaidqadir.com/blog/tag/shell)

---

Markdown version of https://junaidqadir.com/blog/how-i-created-my-dotfiles
Site guide for agents: https://junaidqadir.com/llms.txt
Full index: https://junaidqadir.com/sitemap-index.xml
