Carefully Curated Dotfiles for Popular Linux Programs
This repository contains the configuration files (i.e., "dotfiles") used to configure the programs regularly used by me, Gregory M. Kapfhammer. While heavily customized for my personal workflow and computers, these dotfiles serve as practical examples of how to configure a wide variety of development tools and system utilities. The configurations span terminal multiplexers, window managers, text editors, email clients, and desktop environments, providing a foundation for building your own efficient development setup on Linux and MacOS.
This is a summary of some of the dotfiles and program configurations that I created and actively maintain:
.Rprofile: initialization for the R programming language.Xresources: configuration for the Rofi for displaying menus.bibtoolrsc: configuration for thebibtoolprogram's BibTeX management.ctags: extensions forexuberant-ctagsto handle new languages.compton.conf: configuration for thecomptoncompositor used withi3.gitconfig: configuration file for Git, including customized aliases.gitignore_global: configuration of the files to exclude from Git repositories.gvimrc: legacy configuration ofgvimtext editor.indentconfig.yaml: pointer to configurations for thelatexindentprogram.chopsentences.yaml: configuration for thelatexindentprogram to do semantic linefeeds.inputrc: configuration of all input-enabled tools withvi-like mappings.latexmkrc: configuration for thelatexmkwrapper for LaTeX compilers.mailcap: configuration for how MIME-enabled programs load files.minivimrc: minimal configuration ofvimandnvimfor testing purposes.msmtprc: legacy configuration for themsmtpSMTP client.muttprintrc: configuration of themuttprintprogram for printing emails.muttrc: configuration of themuttmail user agent.oh-my-zsh.sh: customized script to load the oh-my-zsh framework.zprofile: script to run when first starting the shell environment.signature: footer displayed bymuttin all email messages.tmux.conf: configuration of thetmuxterminal multiplexing tool.urlview: configuration for theurlviewprogram used withmuttandtmux.vimrc: configuration for thenvimandvimtext editors.xinitrc: configuration for to set environment variables and to start i3.zshrc: configuration for thezshshell to use oh-my-zsh.config/bat/themes: theme configuration to ensure thatbatlooks likenvim.config/alacritty: configuration and color scheme for thealacrittyterminal window.config/dunst: configuration and scripts for thedunstnotification manager.config/gtkrc-2.0: configuration of GTK 2.0 to support legacy GTK programs on Arch Linux.config/gtkrc-3.0: configuration of GTK 3.0 to support GTK programs on Arch Linux.config/i3: configuration and scripts for thei3window manager.config/polybar: configuration and scripts for thepolybarused withi3.config/termite: configuration and color scheme for thetermiteterminal window.config/zathura: configuration for thezathuraPDF viewer.local/bin: scripts for regular use through the terminal window androfi
Are you looking for some neat configurations to improved your own dotfiles? If
so, then I encourage you to review the .vimrc, .zshrc, and .tmux.conf
files that I regularly improve. Interesting in learning how to configuration the
i3 window manager? Then, you are invited to review the .config/i3 and
.config/polybar directories. Please note that many of these files have
groupings with beginning and ending marks that respectively look like {{{ and
}}}, thereby helping to group the regions.
To ensure that my development environment is largely self-contained, this
repository also includes Git submodules of the packages that I actively use in,
for instance, the zsh shell. When I needed to heavily customize a specific
plugin or tool I forked a specific GitHub repository and then made my
improvements in that fork. Otherwise, I added the needed repository as a
sub-module to this one. These are the current submodules that I maintain:
fastsyntaxhighlightingfzftabgitstatustpmzshautosuggestionszshdeferzshgitpromptzshsyntaxhighlighting
You can type the following command if you want to clone this repository:
git clone https://github.com/gkapfham/dotfiles.gitNow, you can type cd dotfiles and start to browse the configuration files that
are available. I suggest that you make symbolic links from your home directory
to this repository if you want to maintain and use these configuration files.
For instance, if you use the bibtool program to manage your BibTeX files and
if you were in your home directory and the dotfiles/ directory was in
configure/, then you would type the following command to create the
.bibtoolrsc as a symbolic link to the file in the ~/configure/dotfiles/
directory containing this repository.
ln -s ~/configure/dotfiles/.bibtoolrsc .bibtoolrscAs an alternative to manually creating all the symbolic links in the
aforementioned fashion, this repository has a Makefile with rules that use
stow to create these symbolic links automatically. If a system already
contains dotfiles that you no longer needed and you want to remove them from the
system, then please type the command make purge. Next, typing the command
make dotfiles will create all the needed directories and subdirectories and
make symbolic links to the dotfiles in this repository from the correct
destination directories. In summary, the main command to type is:
make dotfilesThis repository includes standalone Lua scripts in nvim/lua/ that can be run
from the command line using Neovim's built-in LuaJIT runtime. For example, the
similar.lua module provides compression-based semantic file similarity search
and can be invoked directly from a terminal:
nvim -l nvim/lua/similar.lua /path/to/repository "search query"This repository includes configurations for the Pi Coding Agent
(pi), an extensible terminal coding harness. Pi is run via bunx without a
global installation:
bunx @earendil-works/pi-coding-agentPi extensions, skills, and themes are distributed as npm packages. Install and
remove them using the pi CLI through bunx:
| Command | Purpose |
|---|---|
bunx @earendil-works/pi-coding-agent install npm:<package> |
Install a package |
bunx @earendil-works/pi-coding-agent remove npm:<package> |
Remove a package |
bunx @earendil-works/pi-coding-agent list |
List installed packages |
bunx @earendil-works/pi-coding-agent update --all |
Update pi and all packages |
For example, to install and then remove the pi-vim modal editing extension:
bunx @earendil-works/pi-coding-agent install npm:pi-vim
bunx @earendil-works/pi-coding-agent remove npm:pi-vimNote: After installing or removing a package, restart Pi for the changes to take effect.
The pi-web-access package provides web search, content extraction, and video
understanding capabilities. The curator workflow (which opens a browser for
summary review) can be disabled by creating ~/.pi/web-search.json:
{
"workflow": "none"
}See the pi-web-access README for full configuration options.
pi-web provides a web UI for browsing Pi sessions and chatting from any device on your network. It runs as a systemd service and is accessible over NetBird (or Tailscale, WireGuard, etc.).
bunx @earendil-works/pi-coding-agent install git:github.com/ygncode/pi-webThe service listens on 0.0.0.0:31415 with auth enabled. To access from
a phone or another device over NetBird:
- Find your NetBird IP:
netbird status - Open
http://<netbird-ip>:31415in the remote browser - Enter the auth token (displayed during install, stored in
~/.config/pi-web/env)
If you need to retrieve the token again, start a temporary HTTP server:
kill $(lsof -ti :3333) 2>/dev/null
cd /tmp
echo "Token: $(grep PI_WEB_TOKEN ~/.config/pi-web/env | cut -d= -f2)" > index.html
nohup python3 -m http.server 3333 --bind 0.0.0.0 &>/tmp/token-server.log &
disownThen open http://<netbird-ip>:3333 on your remote device to view the token.
The same token can also be used with pi-web on port 31415.
Paseo is an Android/iOS app for controlling Pi (and other coding agents) from your phone. It runs as a daemon on your laptop and connects to the phone over NetBird (or Tailscale, etc.).
Start the daemon:
bunx @getpaseo/cli start --listen 0.0.0.0:6767 --hostnames "diameno.netbird.cloud,.netbird.cloud" --no-relayStop the daemon:
bunx @getpaseo/cli daemon stopCheck status:
bunx @getpaseo/cli statusThe Paseo Android app connects to http://diameno.netbird.cloud:6767 over
NetBird. Paseo discovers Pi through the pi command in PATH. On NixOS, the
system pi binary is used automatically; there is no wrapper script.
If you have any problems with downloading or understanding these configuration
files, then please create an issue associated with this Git repository using the
Issues link at the top of this
repository. As the sole contributor to the dotfiles repository, I will do
everything possible to resolve your issue and ensure that all the configurations
are clear and potentially best suited to working in your development
environment. Remember, this repository is being made publicly available to
provide examples of how to write configurations for programs like vim, nvim,
i3, and polybar. If you find that these files help you in preparing your own
configurations, then I also encourage you to "star" and "watch" this project!