Skip to content

Ansible playbooks, which idempotently configure new system with a single bootstrap command.

License

Notifications You must be signed in to change notification settings

rudenkornk/dotfiles

Repository files navigation

dotfiles

Ansible playbooks, which idempotently configure new system with a single bootstrap command.

Bootstrap

git clone https://github.com/rudenkornk/dotfiles ~/projects/dotfiles && \
cd ~/projects/dotfiles && ./bootstrap.sh && \
make

Showcase

neovim_example tmux_fish_fzf_example deps_graph_example

Features

  1. Ansible! Config utilizes a fully-fledged configuration manager, specifically designed to put machines into a desired end state. Config is idempotent and is capable of configuring not only localhost, but also several remote machines at once.
  2. Stable and reproducible. All the program versions that can be pinned are pinned. Amongst other tools, that includes ansible itself, neovim and all its plugins. Packages, managed by apt and dnf cannot be pinned, so I rely on stability of Canonical and RedHat packages update front.
  3. Easily updatable. Versions are stored in manifests and can be easily updated with a single command. neovim's lazy-lock.json however is managed separately by lazy.
  4. Supports & tested under Ubuntu 22.04-24.04, Fedora 38-40, and also includes WSL support. On Windows it integrates with the system clipboard.
  5. Secrets inside the repo. All the credentials, ssh keys, VPN configs can be stored directly in the repo with support of the git secret. gpg key is optional: config works fine if it is not provided and secrets are not decrypted.
  6. Bootstrap with a single command. Aside from OS limitations, there are zero requirements.

Tools

While being decently generic, this config focuses more on some tools rather than others:

  1. Neovim. Neovim config is based on LazyVim. It follows all its guidelines and documentation adding tons of useful plugins on top, while still being "blazingly fast", thanks to lazy-loading.
  2. tmux. tmux integrates with Neovim, which allows to seamlessly use keys for moving around and resizing windows.
  3. fish. Main shell in this config is fish, which integrates with interactive fzf, ripgrep and bat. There is some support for bash though.
  4. C++. Config provides releases of cmake, LLVM and GCC toolchains as well as editor support.
  5. Config also provides some support for Python, LaTeX and Lua.

Try this config

Config is tested inside podman containers, which can also be used to try this config. Note, that this will install some tools (like python and podman) on your system. This will not install any specific configs though.

make check_host
podman exec --interactive --tty --workdir $(pwd) --user $(id --user) dotfiles_22.04 fish

Fork

The first things you would want to customize if forking this repo are:

  1. Personal information in roles/profile/vars/main.yaml.
  2. Credentials, ssh keys and vpn configs in roles/secrets/files.

Update components versions

make update

Show role dependency graph

make graph

Test

make check IMAGE=ubuntu:22.04