This repository contains files relevant to my development environment and other dotfiles that I want to to sync across multiple machines.
I use the Tokyonight Moon colourscheme. I've experimented with a few different colourschemes and for now I have chosen Tokyonight because it is very well supported by many different applications. This means that I don't have much trouble in getting it to work across all the different tools that I use and it makes my life much easier.
I use WezTerm for my terminal needs. It's written using Rust and utlises the GPU for it's rendering, resulting in a super fast experience. I also love that all it's configuration and settings are set sing lua config files, just like with Neovim.
I use ZSH as my shell of choice as it has really nice customization options using oh-my-zsh and I love the autocomplete features it comes with.
-
You need to install ZSH by following the instructions provided on the ohmyzsh Github repo, here. This should create some new files in your
$HOMEdirectory, namely the.zshenvand.zshrcfiles. -
In order to use the ZSH configuration in this repo, you need to complete a few more steps. Remove both
.zshenvand.zshrcfiles that were generated when installing ZSH. Next, symlink the.zshenvfile: (this command assumes that this repo is cloned to~/.config, modify the command if required)ln -s ~/.config/zsh/.zshenv ~/.zshenv
The
.zshenvfile in this repo contains some configuration that tells ZSH that the remaining config files are located in$HOME/.config/zsh.This repository has a git submodule for the oh-my-zsh repository and the included
.zshrchas a line telling ZSH where the oh-my-zsh installation is located so there is no need to install it separately.
I use my terminal ALL the time. Tmux helps me to increase my productivity when in my terminal. The primary utility of Tmux is that it allows me to quickly switch between Neovim and a CLI terminal window.
Install tmux using your preferred method.
I did not have any issues installing the latest version using the apt package manager like I did with alacritty.
To ensure that the tmux/tmux.conf file is loaded, open a tmux session and use the default keymap (Ctrl+b) and press : to enter the tmux command mode and execute source-file ~/.config/tmux/tmux.conf to load the config.
If the default Ctrl+b doesn't work, then try Ctrl+a, this is what I have it set to in my config.
Once the tmux.conf has been loaded for the first time, then you can use Ctrl+a, r to refresh the tmux config.
Tmux theming and colour configuration is all done within the tmux.conf file along with everything else.
I struggled a bit to find information on the different styling options and what they do and then I found this video which made it quite easy to understand.
Another good thing to look at would be the tmux man pages.
In my opinion, the tmux man pages aren't really clear in what the option is modifying, it would be useful to have some visual examples like images or videos, hence why I have added the link to the video above that shows what some of the option do really clearly.
I highly recommend playing with the options inside your tmux.conf file, just to get a feel for what the config option is doing and how it looks in your tmux.
- vim-tmux-navigator - adds useful keymaps for navigating splits within vim and tmux
- tmux-resurrect - saves tmux windows & sessions when machine is restarted
- tmux-continuum - continuously auto-saves the state of tmux (works nicely with tmux-resurrect)
Neovim is an evolution of vi and vim. You can install many different plugins to make Neovim look and feel exactly as you want. I use it as my main code editor.
This is a list of all the plugins I use in my Neovim config. They are listed in the same order they appear in the file tree, and are divided into directories that describe what the plugin affects or what it helps to achieve in my workflows.
The plugins listed here affect the appearance of my Neovim editor, either adding new informative UI elements or modifying existing things to make them easier to read and process by eye.
- alpha - adds a customizable greeting pane when you start neovim
- indent-blankline - makes it easier to see indentation (my configuration uses the
scopetoo), this has dependencies for:- indent-rainbowline - adds VSCode style rainbow indentation indiciators
- lualine - adds a status line
- mini.icons & nvim-web-devicons- adds nice icons
- noice - adds different UI elements and more customisation to notifications, cmdline and searching
- quicker.nvim - makes the quickfix list prettier and have better formatting
- rainbow-delimiters - adds rainbow bracket delimiters (
{}and()) - statuscol.nvim - adds a configurable status column for:
- code folding
- git signs
- diagnostics
- line numbers
These plugins assist in finding files or pieces of code within projects.
- nvim-tree - a file explorer plugin, I prefer it over the default netrw plugin
- telescope - a fuzzy finder plugin making it easier to find open buffers as well as files and text across directories, this has dependencies for:
These plugins are primarily focussed on Git and related workflows.
- blame.nvim - adds the ability to see git blame for an entire file
- vgit - adds a number of git utilities:
- project git diff & status
- project git logs
- git history for a buffer
- git conflict resolution
- live git blame (for a single line)
These plugins include LSP configuration plugins as well as some other useful plugins that enhance coding efficiency.
- inc-rename - adds a command for LSP renaming with immeadiate visual feedback (renaming a variable, function name, class name, etc.)
- lspconfig - this plugin allows setup and configuration of LSP servers
- mason.nvim - this is a plugin manager for LSP servers, this has dependencies for:
- mason-lspconfig.nvim - this plugin makes it easier to use lspconfig with Mason
- nvim-cmp - used for autocompletion snippets, this has dependencies for:
- cmp-buffer - completion source from text in current buffer
- cmp-path - completion source from filesystem paths
- LuaSnip - a snippet engine
- cmp_luasnip - completion source from snippet engines
- friendly-snippets - snippets for various languages
- lspkind - nice icons for autocompletion
- nvim-treesitter - provides better syntax highlighting
- cutlass - modifies delete keys to use the blackhole register to make copy/paste/delete workflows easier
- nvim-ufo - updates folding features
- time-machine - adds an undo/redo tree for easier navigation of undo history
- vim-highlightedyank - this plugin highlights what was just yanked (copied)
- vim-illuminate - this plugin will highlight other instances of a word that the cursor is on
- vim-maximizer - used to maximize (and return to normal) a split
- vim-polyglot - this plugin is a language pack that adds syntax highlighting support for ~150 more languages
- vim-surround - adds useful keymaps to modify textobject surroundings (mostly changing surrounding single quotes to double quotes, or changing bracket types)
- vim-tmux-navigator - adds useful keymaps for navigating splits within and between vim and tmux
- which-key - adds a visual popup that shows keymaps when typing a keymap (helps to find the keymap you want, without needing to dig deeper to find them)
These plugin files do not reside in a parent folder as I do not see them as fitting the current categories and they do not fit into a new category.
- markdown-preview.nvim - adds commands to launch a local server to easily view markdown files within a browser
- obsidian.nvim - this plugin integrates Neovim with the Obsidian notetaking app, adding useful commands and utilities that assist in managing and taking notes
- nvim-silicon - integrates Silicon CLI tool to take code snapshots and create an image file
- vim-asciidoctor - adds better/faster asciidoc support and some helpful export commands
As a DevOps Engineer / SRE, I interact with Kubernetes clusters literally all day, almost every day. For this reason, I use the K9s terminal GUI as a great way to understand whatever is happening in a K8s cluster at any given time. It's a very intuative UI with sensible keyboard shortcuts and you can add configuration options in a file just like alacritty and tmux!
This one is pretty easy!
Just install K9s using your preferred method and it will automatically be setup to read it's config file inside the $XDG_CONFIG_HOME/k9s directory.
It really is as simple as that!
Here is a list with the links to the relevant Github pages for CLI tools that I like to use in my setup.
My .zshrc file contains some aliases for these CLI tools, so you must make sure they are installed for these aliases to work correctly.
- eza (a better
lscommand) - bat (a better
catcommand) - zoxide (a better
cdcommand) - fzf (a really nice fuzzyfinder tool)
- ripgrep (a better
grepcommand) - sdkman (helps to install and organize SDK's (JDK's, Maven, Gradle, etc))
- pyenv (tool that helps to manage multiple python versions)
- silicon (allows you to take nice screenshots of code)
- yazi (a terminal file explorer (similar to Ranger)
I am new to creating custom scripts for my workflows and for this reason I only have 2 currently.
All my custom scripts are stored in the scripts directory and more child directories exist here to categorize different scripts.
In the future, I will create a "setup script" that can be run to setup and install this entire dot-files repository. The main point of this will be to create a number of symlinks and run installation commands (if possible).
Need to add a new part of the README that describes how to setup on a branch new machine:
- symlink zshenv file
- Install HomeBrew
- Install Brew file with
brew bundle install --file=Brewfile - git submodule update --init --recursive
- Navigate to .config/zsh/.oh-my-zsh
- Run tools/upgrade.sh
- Install p10k (git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k) (config should be loaded automatically by restarting terminal)
- Install SDKMan (curl -s "https://get.sdkman.io" | bash)