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
.bashrc for files and
.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.
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.
A few days ago Jeffrey Way started a new series on Laracasts(I'm one happy subscriber by the way) called 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
.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, I can install software through various channels like
.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.
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
- hirak/prestissimo This handy package lets me install composer packages in parallel.
- korri/composer-version Cli toot that increments composer.json file version number and commits to the git repo.
- laravel/installer Laravel installer.
Finally, I created the
.shell file responsible for downloading and configuring
zsh and symlinking the
.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.
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.