1
0
Fork
You've already forked dotfiles
1
No description
  • Shell 72.4%
  • JavaScript 10.3%
  • Vim script 8.7%
  • CSS 5.3%
  • Lua 3.2%
  • Other 0.1%
Find a file
2024年12月14日 01:30:17 -05:00
.config enable osc-8 hyperlinks in tmux 2024年12月14日 01:30:17 -05:00
.local Merge a bunch of random bullshit 2023年11月08日 17:01:28 -08:00
.mozilla/firefox/default-nightly FF config 2022年03月07日 12:57:05 -08:00
.var/app/org.mozilla.firefox/.mozilla/firefox/default-nightly remove container storage config 2024年12月14日 01:24:03 -05:00
.weechat Merge a bunch of random bullshit 2023年11月08日 17:01:28 -08:00
Executables/shell-scripts back to nextdns DoQ 2024年12月14日 01:27:30 -05:00
.mbsyncrc email config: mbsync changes, set hostname 2022年08月20日 14:58:31 -07:00
.msmtprc Maildir: add webmention-specific email account 2021年03月02日 20:30:22 -08:00
.notmuch-config Finish setting up maildir 2020年08月11日 17:09:32 -07:00
.profile explicitly unset GTK_THEME 2022年08月20日 14:58:52 -07:00
.signature include website in email sig 2022年08月20日 14:57:40 -07:00
.zprofile Add .zprofile, simplify $PROFILE_SET 2019年12月01日 16:34:33 -08:00
.zshrc Continue migrating to new zinit home 2024年12月14日 01:25:01 -05:00
LICENSE Meta 2022年03月07日 12:57:49 -08:00
README.md Meta 2022年03月07日 12:57:49 -08:00
startup.sh Remove some qt, goproxy configs; simpler pash copy 2024年12月14日 01:26:21 -05:00

Dotfiles

sourcehut GitLab mirror GitHub mirror Codeberg mirror

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.

screenshot of my tiling terminal music setup

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* inside tmux*. 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