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
$HOME
directory, namely the.zshenv
and.zshrc
files. -
In order to use the ZSH configuration in this repo, you need to complete a few more steps. Remove both
.zshenv
and.zshrc
files that were generated when installing ZSH. Next, symlink the.zshenv
file: (this command assumes that this repo is cloned to~/.config
, modify the command if required)ln -s ~/.config/zsh/.zshenv ~/.zshenv
The
.zshenv
file 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
.zshrc
has 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.
- vim-tmux-navigator - adds useful keymaps for navigating splits within vim and tmux
- telescope - a fuzzy finder plugin making it easier to find open buffers as well as files and text across directories, this has dependencies for:
- vim-illuminate - this plugin will highlight other instances of a word that the cursor is on
- vim-highlightedyank - this plugin highlights what was just yanked (copied)
- vim-maximizer - used to maximize (and return to normal) a split
- indent-blankline - makes it easier to see indentation (my configuration uses the
scope
too), this has dependencies for:- indent-rainbowline - adds VSCode style rainbow indentation indiciators
- rainbow-delimiters - adds rainbow bracket delimiters (
{}
and()
)
- comment - used for better commenting functionality, this has dependencies for:
- nvim-ts-context-commentstring - used for better commenting in files with multiple comment formats
- vim-surround - adds useful keymaps to modify textobject surroundings
- cutlass - modifies delete keys to use the blackhole register to make copy/paste/delete workflows easier
- nvim-silicon - Adds nvim integration for Silicon code snapshot CLI tool
- auto-session - adds session management functionality
- nvim-tree - a file explorer plugin, I prefer it over the default netrw plugin
- nvim-web-devicons - better icons for filetypes
- dressing - modifies some UI elements for example, adding/renaming files in nvim-tree or inputs for LSP renaming
- lualine - adds a status line
- [noice]https://github.com/folke/noice.nvim) - adds different UI elements and more customisation to notifications, cmdline and searching
- alpha - adds a customizable greeting pane when you start neovim
- nvim-pqf - modifies the quickfix window and makes it easier to read
- nvim-treesitter - provides better syntax highlighting, this has dependencies for:
- windwp/nvim-ts-autotag - autoclose and autorename html tags
- vim-polyglot - this plugin is a language pack that adds syntax highlighting support for ~150 more languages. This includes adding
helm
filetypes which is one of the reasons I use it - tree-sitter-go-tempalte - adds syntax highlighting for Go template filetypes
- 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
- mason - this is a plugin manager for LSP servers, this has dependencies for:
- mason-lspconfig - this plugin makes it easier to use lspconfig with Mason
- lspconfig - this plugin allows setup and configuration of LSP servers
- gitsigns - adds git integration to buffers so you can see git changes + git blame etc
- neogit - adds neovim integration for git workflows, e.g. viewing diffs and committing changes, viewing git log/reflog, interactive rebasing, etc (same sort of thing as lazygit, but has a more intuative UI design and better configurability + keymapping)
- diffview - adds a nice git diff view (like VSCode)
- obsidian - adds neovim integration with Obsidian app
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
ls
command) - bat (a better
cat
command) - zoxide (a better
cd
command) - fzf (a really nice fuzzyfinder tool)
- ripgrep (a better
grep
command) - 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)