This is the VM that I work in. It contains my configurations of vim, tmux, fish and more. On my Mac, there are no developer tools installed except Vagrant, VirtualBox, iTerm2, and the Xcode Command Line Tools. My dotfiles contains a Vagrantfile to provision the Vagrant box running in VirtualBox with Ansible. So when I want to start developing on my machine, I do a
vagrant up && vagrant ssh and then I work inside the Vagrant box. From time to time I run a
vagrant destroy to keep everything clean. I use US-Extended as my keyboard layout (The German keyboard layout doesn't work for me).
I'm using fish as my shell. I noticed that it does a lot of things I needed to configure in ZSH by default and switched to it. The only thing I configured is that I use fzf, because I really missed
Ctrl+r for reverse searching and I like the incremental search.
The prompt is a tiny arrow (or a ✦ when there are jobs in the background) that is green when the last status exit was 0, and red otherwise. In the right prompt, I display the pwd and the current git status. I have a few functions:
jI can jump to my Code projects
- To start or continue working on a project, I use my tiny
sfunction which starts (or attaches to) a tmux session for a project with the correct start directory.
mcdcreates a directory and then
cds into it
Use tmux, it rocks! I configured it with some more Vim-like bindings and a nice status bar with the current time and battery charge (via
I'm doing all my programming and most of my writing in vim. I use the following plugins:
- A few nice defaults via
- Additional language support loaded on demand via
- Minimalistic commenting via
- Quoting/Parenthesizing made simple via
- Enable repeat for Surround and Commentary via
- Peace in the office via
- On-the-fly linting feedback and LSP support via
- Fuzzy file finder with
Other commandline tools
gitis the only version control system I use. It has an amazing companion:
ripgrepis a replacement for grep that is so fast, that I can't really believe it
sedfor JSON data, but I mostly use it for pretty printing
treeprints the folder structure as a tree
pryis a replacement for Ruby's IRB with
mdlessis a less for Markdown files
ragelis a beautiful state machine compiler
youtube-dlallows me to download videos for train trips
docker-composebecause I really wish it would do what I want
shellcheckto get feedback about shell scripts
asciinemato record terminal things
electric_monkto check if I have unpushed changes anywhere
direnvto load and unload environment variables depending on the current directory
Languages I work or play with
The programming languages I use regularly are installed via
asdf so I can switch versions and always be on the most recent release.
- Currently working in a Go project
- I used Haskell quite a lot back in University and I'm playing around with it again
Making GPG available in the box
Thanks for @bascht for helping me setting this up.
On my Mac, I have GPGTools installed to write and receive GPG encryped emails. The GPG agent on my Mac is configured to create an extra GPG socket.
# ~/.gnupg/gpg-agent.conf default-cache-ttl 300 max-cache-ttl 999999 enable-ssh-support extra-socket /Users/moonglum/.gnupg/S.gpg-agent.extra
SSH is then configured to forward that extra socket to the virtual machine:
# ~/.ssh/config Host 127.0.0.1 RemoteForward /var/run/user/1000/gnupg/S.gpg-agent /Users/moonglum/.gnupg/S.gpg-agent.extra ExitOnForwardFailure yes
In addition to that, the host and machine share the pubring.gpg and trustdb.gpg. They are both in the folder of this repo (but gitignored), and then linked to the according locations.