Git Product home page Git Product logo

dotfiles's Introduction

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

dotfiles's People

Contributors

seirdy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

dotfiles's Issues

exa completion not working

Hi Seirdy,
I don't know if it's the right place to get in touch with you. I liked your zinit config and took some inspiration from it.
About exa, it wasn't working. I figured out that the snippet link needed to be updated from the current one (https://github.com/ogham/exa/blob/master/contrib/completions.zsh) in your config to the new one (https://github.com/ogham/exa/blob/master/completions/completions.zsh).

However I'm still not able to make it work.
Here is the last thing I tried:

zinit ice lucid wait'0a' as'completion' blockf \
  mv'completions.zsh -> _exa'
zinit snippet https://github.com/ogham/exa/blob/master/completions/completions.zsh

I started with zinit few weeks ago so I wouldn't refuse any advice.

Cheers

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.