Dotfiles is a collection of configuration files that allows me to create my own local environment. By storing my local environment configuration in a version control system, it allows me to track and maintain my configuration via code.
- Motivation
- For Whom Is This Repository For?
- What Does This Repository Have?
- Installation
- Usage
- Neovim
- TODO
In all of my projects, my initial thought process is more or less the same:
- First, I learn the basics of a tool,
- Then, I try to define a real life problem I have,
- Finally, I try to come up with a project which allows me to solve the problem whilst gaining experience with the tool (and having fun along the way!).
In this context, dotfiles
ticks all steps beautifully:
- tool: I had learnt the basics of Ansible, and wanted to gain experience with it. I like the tool but unfortunately cannot practice it in my day to day job.
- problem: My local environment (before this project) was a good example of a "snowflake" host. The configurations and installed packages were all over the place, and there were a mental and physical overhead whenever I tried to switch hosts.
- project: What if there was a way to keep all the configuration in one place, store it in version control, and manage the configuration via Ansible for every host I have?
As a result of the analysis above, this project was born.
I'll be blunt in here, I would highly encourage anyone reading this to just jump right in and create their own dotfiles. These configurations are what work for me and my own taste. You need to find your unique local environment configuration, and then create your dotfiles from that environment.
You can reference this repository while thinking about it, I believe this repository can be a good starting point, especially the installation parts with Ansible.
This does not mean that everything here is absolutely perfect, as I said before this was just a problem for me to gain experience in Ansible and have fun while doing so. In case you see something that's not right or something that you have issues with, I would LOVE to hear your feedback!
With all the disclaimers out of the way, let us continue with the contents of the actual configurations.
When it comes to tools, I think it's safe to group them based on their functionalities:
- Terminal emulator: Kitty
- Terminal multiplexer: tmux
- Shell: zsh
- Editor: Neovim
- Gitflow:
- Languages:
- Language package managers: NPM, NVM
- Formatters, transpilers, helper tools:
- Containerization: Podman
- Virtualization: Vagrant
- Cloud provider: AWS CLI
- Infrastructure as Code: AWS CDK, Terraform
There are also tools which are used solely during development. These tools are installed with Neovim
.
The installation is done through an Ansible
playbook. Please refer here to see the details of the installation.
The usage of the tools are the same, regardless of the installation method. Please refer to each tool's documentation to see their usage.
The most complex configuration in this repository belongs to Neovim. For detailed information about my Neovim plugins and how everything is set up, please refer to here.
- Improve the testing experience, instead of using
Vagrant
which limits thearch
to the underlying host, use various EC2 instances on AWS to test for all platforms. - Add workflows for CI/CD, test the installation changes on AWS before merging to main.