dotfiles
dotfiles copied to clipboard
Seirdy's dotfiles
Dotfiles
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.
Bleeding edge
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.
Mah stuff
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.
General
- 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*
Neovim
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
- 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.
Music
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.
mpv
- 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