It's my dotfiles! This is me.
These dotfiles are managed using yadm and are primarily intended
for Fedora. To install, simply clone the repo into $HOME
and run the bootstrap
scripts in Executables/shell-scripts/bootstrap
. The scripts for building packages
might max out your CPU all night, so be prepared.
This has been evolving since I was 14, yet nothing here lives that long before being rewritten.
My scripts generally have the #!/usr/bin/env dash
shebang, but the syntax is all
POSIX sh compatible.
I like to be on the bleeding edge of programs I use often, but with a stable OS running underneath them. I worked out the following solution:
If I use a program that runs in the terminal very often, I'll likely build it from
source and update to the latest git commit. Git repositories get cloned using
ghq. This way, if a program has a bug or is missing
a feature I want, I already have the latest snapshot of the repository cloned locally
on my machine so I can better understand the issue, report the bug, and/or push a
patch upstream. My
update-all
script runs these
updates.
C/C++ programs get compiled with the -march=native
flags, among others. Most
packages are also compiled using link-time optimization. Rust packages containing
C/C++ code use Clang instead of GCC.
I generally compile programs on my desktop and rsync
them to my laptop.
Pretty much all my programs run in the terminal. Exceptions include my web browser (if I can't avoid it), image viewer (imv), and media player (mpv)). If I'm not browsing heavy websites or playing high-res video, this setup is lightweight enough to use comfortably on a cheap single-board computer like the Raspberry Pi.
Stuff labeled with *
is built from source from the latest git commit.
- WM: Sway*. Associated utilities are also built from source (e.g. swaybg*, swayidle*, grim*, and slurp*)
- Terminal emulator: Foot* (Wayland) or st* (X11)
- Terminal session manager: tmux*
- News reader: Newsboat*
- Mail client: aerc*, mbsync, and notmuch
$EDITOR
: Neovim*- Launcher: custom (runs in a floating terminal window)
- File manager: nnn*
- Image viewer: imv*
- IRC and Matrix: WeeChat* and weechat-matrix*, respectively. I prefer IRC.
- Web browser: Firefox Nightly with Tridactyl, uMatrix, uBlock Origin, and others to make browsing slightly more tolerable.
- Gopher/Gemini browser: bombadillo*
I use Neovim's built-in Tree-sitter implementation and Language Server Protocol (LSP)
client along with the official nvim-lsp plugin
containing pre-made configs for popular language servers. Settings are split between
an init.vim
and Lua files. Over time, I'll migrate more configs from Vim script to
Lua.
- shell (non-interactive):
dash*
for its ridiculously fast startup speed and minimal extensions over the POSIX spec. Statically-linked. - shell (interactive): custom static build of
zsh*
insidetmux*
. By using a static binary with full link-time optimization that only sources user config files, my shell initialization time for the interactive prompt was cut in half. - plugin manager: zinit* loads plugins conditionally and asynchronously in the background to avoid slowing down startup time.
- prompt: powerlevel10k* with instant-prompt mode displays a cached prompt while the git status/return status are still loading.
I have an MPD-based music setup; this README includes a screenshot of it near the top.
I've written several scripts to control MPD and build playlists. My setup depends heavily upon rating tracks on a scale of 1-10 in the MPD sticker database.
- Backend: MPD
- Frontend: clerk* + ncmpcpp*. I've been contemplating switching to ncmpc since I don't really use any of ncmpcpp's special features.
- CLI control: mpc* + Playerctl*.
- Visualizer: cli-visualizer*, cava* and/or projectM* depending on my mood.
- Playlist dynamizer: cantata-dynamic* builds playlists up to a defined size according to rules. It automatically removes and adds tracks after they are played. I don't use cantata; I just use that Perl script.
- MPRIS 2 gateway: mpd-mpris. Allows media keys to control mpd via Playerctl, and integrates with other MPRIS-aware software.
- Album art viewer + notifier: personal fork of
kunst*. My fork works with
imv
and displays notifications; I might re-name the project and spin it off into something of its own.
- Player: mpv*, built with VapourSynth support using mpv-build. FFmpeg, dav1d, and libass are also built from master and statically linked with mpv. libaom, libvpx, libplacebo, and some others are built from master and dynamically linked in.
- Upscaling filter: Anime4k* or RAVU, among others
- MPRIS bridge: mpv-mpris*
- Other scripts: blur-edges.lua, autocrop.lua