Skip to content
My dotfiles and various other configurations
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

My Environment Related Files

In this repository will house my various configurations. Some things are currently still kept in a private repo elsewhere but as I get time I plan to move all my setups to this repository. It will likely end up including:

  • Dot files in my home directory
  • Configurations for software that does not use dot files
  • My container setup
  • Others that I haven't thought of

Pull requests are welcome, but keep in mind that this is my configuration and I reserve the right to reject a PR just because I don't like the changes :) Of course that doesn't mean the changes are not good for other people, so ideally I will move things in a direction that will allow easy customization for people.

Emacs Configuration


The Emacs configuration installs itself, but first you should set a few options in it. If you open the .emacs.el file you will be able to specify options for some of the packages used, such as YCMD, EIN, whether to use Dvorak bindings, and whether to enable Evil mode. You'll need to specify some paths, but most of the configuration should work without any changes.

  1. Copy or symbolically link .emacs.el to your home directory
  2. Start Emacs
  3. Restart Emacs
  4. Delete ~/.emacs.elc
  5. Restart Emacs three times

Everything except YCMD, Jupyter, ClangFormat, and Clang-Rename will have installed itself. That is, everything that isn't an external-to-Emacs third party dependency is installed on startup.


Here is an overview of the packages I use:

I've added an option to the change some of the packages' default shortcuts to be better-suited for fellow Dvorak users.


Here are some of the shortcuts I use a lot. Note that I abbreviate control with C and meta/option/alt with M. so C-c M-n would mean control-c followed by meta-n.

Navigation and Cursors

Shortcut Description
M-p Add cursor above matching currently highlighted region.
M-n Add cursor below matching currently highlighted region.
C-c m a Multiple cursors all like the selected region.
M-? Mark paragraph.
C-/ Undo
C-h Backspace
M-h Kill previous word
C-c ; Comment or uncomment region
C-m Enter/newline and indent
C-c g Use Counsel to do a git grep
C-c r Use Counsel to do a ripgrep
M-. Find tag at point/ycmd goto definition
M-t Grep for symbol at point
C-x M-f Projectile find file to find file in project.
M-s Avy go to visible word that starts with character.
M-c Avy go to visible two characters.
C-M-s Visual regexp forward search.
C-M-r Visual regexp reverse search.
M-1, M-2 Used to go to windows 1, 2, 3, 4, etc.

Basic Editing

Shortcut Description
C-c C-w Cut to clipboard.
C-c M-w Copy to clipboard.
C-c C-y Paste from clipboard.
M-z Kill from cursor to character.
C-c v r Visual regexp query replace.
C-c v m Visual regexp multiple cursors.
C-c c i Cycle the string inflection between cases.
C-c c l String inflection to lowerCamelCase.
C-c c c String inflection to CamelCase.
C-c c s String inflection to snake_case.
C-c c u String inflection to SCREAMING_SNAKE_CASE.
M-g M-s Open Magit status.
M-g M-c Magit checkout.
<f7> Run FlySpell over buffer.
<f8> Jump to previous FlySpell error.
<f9> Jump to next FlySpell error.

Programming Modes

Shortcut Description
C-c C-c Bring up the compilation command to run.
C-c C-k Abort running compilation.
C-c p Prefix for the projectile command map. E.g. C-c p b.
C-c o Prefix for Origami commands.
C-c y Prefix for YCMD commands.
C-c C-f ClangFormat region.
C-c c p Clang-Rename symbol at point.
C-c c q Clang-Rename qualified identifier.


One of the most reliable ways of fixing weird configuration states that I've found is deleting ~/.emacs.d and ~/.emacs.elc and then starting and restarting Emacs as described in the Installation section. If that does not fix the issue and you can reliable reproduce it, please check if there already is an issue (possibly closed) or discussion on the blog post about what you're seeing. If there isn't an issue, please feel free to file an issue or add a comment on the blog post with steps to reproduce.


Unless stated otherwise the code in this repository will be distributed under the Boost Software License v1. Third party code that I store here will have the copyright and license added to the beginning of the files.

You can’t perform that action at this time.