Skip to content

mateusrevoredo/dotfiles

Repository files navigation

Project logo

My Personal Automated Machine Configurator

Status GitHub Issues GitHub Pull Requests License


This project aims to reduce the overhead of setting up a new computer keeping the configuration shared across multiple devices.

📝 Table of Contents

🧐 About/Motivation

People that have worked with me in the past know that one of the things that I dislike the most is doing repetitive tasks. Copying and pasting snippets of code, running the same command multiple times, or clicking on the same UI elements repetitively. Yet I still found myself almost daily wasting a significant amount of time trying to keep all of my devices configured in sync.

I currently have my work MacBook, my personal MacBook, and a personal Debian LXC container hosted on Proxmox running on a web version of VS Code that I connect on my iPad Pro using Blink to do some lightweight coding tasks and administer my homelab servers on the go.

Three different devices, two different operating systems, similar configurations. Apart from that, from time to time, you change jobs, get a different computer or just do a fresh OS install at home.

This project turns the repetitive job of maintaining multiple machines configured exactly the same into a couple of shell script lines that execute a streamlined Ansible playbook.

⚠️ Disclaimer

The scripts and configuration files were written to fulfill my personal needs. Although It's generic enough to be executed in any computer, according to @anishathalye, dotfiles are not meant to be forked, and I tend to agree with this statement.

I still decided to make it open source because it can be a valuable source of inspiration or even serve as a starting point to someone that has decided to do something similar.

🏁 Getting Started

  1. Install Ansible
  2. Clone this repository to your local drive

🎈 Usage

  1. Go to the ansible folder
  2. Run $ ansible-galaxy install -r requirements.yml inside this directory to install required Ansible roles.

🍎 macOS

  • Run ansible-playbook macos.yml -K. Enter your account password when prompted.

🐧 Linux

This playbook assumes you have a VM or LXC container configured on your Ansible inventory named devbox

🔧 Customizing

There are two types of configurations:

  1. Shared configs
  2. OS specific configs

Shared Configs

Shared configs will be applied to both macOS and Linux. For example, you may always want to have this repo symlinked to ~/.dotfiles or always have a subset of VS Code extensions installed regardless of the OS.

You can customize those by editing common.config.yml.

OS Specific

Other settings are tied to a certain OS. For example, configuration files of applications that are only installed on macOS but not on my Linux LXC container.

These should go to their respective files: linux.yml or macos.yml

🚀 What's Installed

Applications

...TBD

Command Line Apps

  • coreutils - GNU File, Shell, and Text utilities for macOS
  • exa - Replacement for ls written in rust.
  • htop - Interactive text-mode process viewer for Unix systems.
  • fd - Simple, fast and user-friendly alternative to 'find'.
  • findutils - Collection of GNU find, xargs, and locate'find'.
  • jq - JSON processor
  • fzf - Command-line fuzzy finder.
  • git - Version control.
  • sqlite - Relational database management system written in C
  • mas - Mac App Store command line interface
  • mosh - The mobile shell
  • ncdu - Disk usage analyzer with an ncurses interface
  • nmap - The Network Mapper
  • openssh - OpenBSD freely-licensed SSH connectivity tools
  • telnet - User interface to the TELNET protocol
  • unzip - Extraction utility for .zip compressed archives
  • neovim - Ambitious Vim-fork focused on extensibility and agility
  • wget - Internet file retriever
  • goku - Manage your Karabiner configuration with ease.
  • zsh - UNIX shell (command interpreter)
  • tmux - Terminal multiplexer
  • curl - Get a file from an HTTP, HTTPS or FTP server
  • z - Jump quickly to directories that you have visited recently
  • lazygit - Simple terminal UI for git commands
  • diff-so-fancy - Good-looking git diffs.
  • tldr - Simplified and community-driven man pages.

💥 TODO

...TBD


✍️ Authors

🎉 Acknowledgements

A lot of people have their own personalized ways of doing what this project does. Here I thank some of them for the inspiration or code snippets that I picked from them.

  • @geerlingguy - For the massive amount of Ansible roles written. Some that I use in this repo, some that I used to understand how things work in Ansible.
  • @mathiasbynens - For the base macOS preferences script file that I mostly copied and added a few other personal preferences.
  • @nikitavoloboev - For the huge amount of content shared with the community, that ended up being useful for this repo. Including his dotfiles and his macOS configuration repo
  • @jglovier - For the free logo that I used as a base for mine.

About

Automatic machine configurator using Ansible

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages