|
||
---|---|---|
tilde | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.rgignore | ||
LICENSE | ||
README.md | ||
SETUP.md | ||
dotfiles.png |
README.md
dotfiles
My dotfiles describe my entire computer. They contain most of the configuration of my applications (both on the command line and on the GUI), but also the setup and update process as scripts. I'm using Debian as my Linux distribution of choice. The content of tilde
are the files in ~
. I'm using Solarized Light as my color scheme and Martian Mono (Standard Width) as my monospace font. This is how my work environment looks like:
exogenesis
exogenesis
is a shell script that sets up a fresh (minimal) install of Debian for me. When I run it again on an existing machine, it will add what I added since the last time I ran it and update packages. It takes care of:
- Adding APT repositories
- Installing and updating APT and flatpak packages
- Linking my dotfiles
- Setting the shell to Fish
- Adding the user to the docker group
- Install nix
fish
I'm using fish as my shell. After using ZSH for many years, I noticed that it does many 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 aliases, scripts (see tilde/exe
), and functions:
- With the
j
function I can jump to my Code projects - To start or continue working on a project, I use my tiny
s
function which starts (or attaches to) a tmux session for a project with the correct start directory. backup
🐚 does the backup usingborgmatic
for offsite backups to BorgBasebattery
🐚 shows the current battery statuschurn
🐚 shows the frequency of change of the files in a git repocompressability
🐟 shows the size of a file, and its GZIPed and brotlied sizedecrypt-pdf
🐟 removes the password from a PDFeach
💎 calls a command for each path providedelectric-monk
↩️ runs gitkeeper for each project (replacement for an old gem of mine)exogenesis
🐚 is described above, it uses the following helpers:add-apt-source
🐚 adds a source for apt including the keyadd-to-groups
🐚 adds the current user to a list of groupschange-shell
🐚 changes the shell for the current userinstall-binary
🐚 installs a binary from an URL to/usr/local/bin
link-dotfiles
🐚 links the provided paths as dotfiles in the home directory
gb
🐟 is a prettiergit branch
gitkeeper
🐟 fetches and then checks if there is unpushed work on a repogl
🐟 is a prettiergit log
tiggy
[experimental version of gl] replacement for tig
history-analysis
💎 shows the commands that you ran most in your (fish) shelll
↩️ lists all files with details,ll
↩️ only the visible oneslist-projects
↩️ lists all projects in the Code directorymdoutline
💎 shows the outline of a Markdown document (only works correctly, if you don't use the 'underline' variant for headlines)postgres
🐋 andredis
🐋 start a temporary PostgreSQL or Redis instanceserve
🐋 serve the current directory via nginxtimestamp
🐚 prints a timestamptree
↩️ prints the folder structure as a treewebm
🐟 converts a video to WebM using ffmpeg
(↩️ is an alias. 🐚 means it is written in sh, 🐟 in fish, 💎 in Ruby. 🐋 is a thin wrapper around a container)
vim
I'm doing all my programming and most of my writing in vim. My vim is very close to the default configuration, but I'm using tpope/vim-sensible
to set a few reasonable defaults. Instead of configuring spaces, tabs and similar things, I use editorconfig
to follow the convention of the projects. Additional language support is loaded on demand via sheerun/vim-polyglot
.
To jump to files, I use a fuzzy file finder (junegunn/fzf
) that I've bound to Ctrl+P. I use ripgrep
as the source for its suggestions which pays attention to .gitignore
. I can't remember the last time I opened a file without it.
I use Tim Pope plugins for commenting (tpope/vim-commentary
) as well as quoting/parenthesizing (tpope/vim-surround
) and make both repeatable (tpope/vim-repeat
).
Finally, I'm using w0rp/ale
for formatting, linting feedback and LSP support. Code is formatted automatically with prettier or a similar tool if it is available for the programming language. I show a 😺 in lines with linting errors, with details on hovering. The linters are autodetected, and I have quite a few installed. When pressing tab (and I'm not at the beginning of a line, where I actually want to insert a tab) I run the omnifunc provided by ALE to ask the according language server for a completion.
nix
I use nix-shell basically as a really awesome version manager for Ruby, Node, Rust...
Other commandline tools
asciinema
for recording things in the terminaladr-tools
for managing decision recordsborgmatic
for backupsbrotli
for compressioncurl
for HTTP shenanigansdirenv
to load and unload environment variables depending on the current directorydocker
anddocker compose
mainly to run databases and reverse proxies locallyexa
is a replacement forls
andtree
ffmpeg
for converting video and audiofzf
as a fuzzy selector for all kinds of thingsgit
(with LFS) is the only version control system I use. It has two amazing companions:tig
anddelta
gpg
andscdaemon
for signing commits and encrypting my backups with my YubiKeyhtop
as a replacement fortop
to see how my cores and RAM are doing- trying out
btop
- trying out
jq
is likesed
for JSON data, but I mostly use it for pretty printinglibvips
for command line image manipulation (resizing, changing the format etc.)ncspot
to listen to musicneofetch
for those screenshots, you knowpandoc
to convert between Markdown and... other formats like Microsoft Wordpgcli
to peek into PostgreSQL databasesqalc
as a command line calculatorripgrep
is a replacement forgrep
,find
and parts ofsed
that is so fast, that I can't really believe itshellcheck
to get feedback about shell scriptstmux
is the terminal multiplexer I use. I configured it with some more vim-like bindings and a nice status bar with the current time and battery charge.wl-clipboard
gives command line access to the clipboard
GUI
Even though I enjoy to use the command line for most things, there are certain things where I use a GUI 😉 The core of my GUI is Gnome (Core, but already using Loupe instead of eog).
- Firefox: Main Browser
- Chrome 💔:
- The browser I use for my work collaboration tools (Google Workspace, Slack, Trello, Miro)
- We use endpoint verification to check if all work computers are up to date which is why this needs to be Chrome...
- Thunderbird: Personal Email & Calendar
- kitty: Terminal Emulator
- mpv: Play videos
- NewsFlash: Beautiful RSS Reader - I use FreshRSS as the backend
- Inkscape: Edit/Create Vector Images
- tenacity: Edit/Create Sound
- 1Password 💔: Password Management
- Nextcloud Desktop: Sync important files
- Boxes: Windows Emulation
- LibreOffice: Office
- Signal: Chat
- Zoom 💔: Video Chat
- gufw: GUI for configuring the firewall ufw
- Minecraft 💔 as a nerd zen garden
- Steam 💔 for playing Turing Complete (mostly, I play on the Switch and Xbox)
💔 is non-free software. I try to avoid it on my machine, but it is no always possible.
Programming Languages
These are the programming languages I use:
- Ruby
- JavaScript/TypeScript (Node, Browser or Deno)
- CSS
I also have two years of professional experience with Go, but don't like it. Out of frustration about Go, I started playing with Rust. In general, I like to play around with different languages (like Clojure or C#), I even wrote my own little language a while ago 😄
Thanks
- To Drew Neil for his books about vim: Practical Vim and Modern Vim
- To Brian P. Hogan for his book about tmux
- To Gary Bernhardt for his screencasts
- To Dirk, Bascht & Bodo for letting me steal from their dotfiles and providing feedback