Alternatives

Different software I ever considered

Legend:

  • ✔ means I consider something to be a positive thing

  • ✖ means I consider something misfortunate

  • ★ means this is the thing I’ve currently settled with

Zsh plugin manager

I’ve tried a buch of zsh plugin managers (something like antigen → antibody → zinit → antibody → zinit → zpm).

For most of the time I’ve used to stick with zinit, using it as a sort of ports manager. It can fetch binaries along with completions, man pages etc. It is very complex though, being something of a “systemd of the zsh plugins world”.

I’ve switched to zmp later, as it is extrimely simple, and you can make most of the zinit’s functionality (that I’ve used) with just wget/curl requests + jq for parsing.

  • zinit [44k loc C]
    • ✔ Versatile tool, has it’s own ports system, thus letting you install non-plugins along with completions and keybindings.

    • ✔ Somewhat decent README.md documentation (although sometimes it lags behind the actual functionality)

    • ✖ Complex

  • sheldon [2k loc Rust]
    • ✔ ??

    • ✖ Not very popular.

    • ✖ Rust language. Have to grab a binary.

  • antibody [0.9k loc Go]
    • ✔ Simple

    • ✖ No ability to tightly integrate zsh settings with code installing non-plugins.

    • ✖ Go language. Have to grab a binary.

  • zgenom [680 loc Zsh]

  • zpm [650 loc Zsh]
    • ✔ Simple

    • ✔ Pure ZSH

  • zshing [180 loc Zsh]

Dotfiles manager/bootstrapper

IMage viewers

  • feh [13.8k loc C]

  • imv [6.8k loc C]
    • ✔ GIFs

    • ✔ Various formats

  • sxiv [3.8k loc C]
    • ✔ GIFs

    • ✖ Repository archived

Window Manager

  • i3 [24k loc C]
    • ✔ Has a drop-in Wayland-compatible replacement (sway). X11 will get deprecated sooner or later.

    • ✔ Good docs.

    • ✖ Complex. Sway is even bigger.

    • ✖ i3status depends pulseaudio lbary

  • herbstluftwm [11k loc C++]

  • bspwm [10.6k loc C]
    • ✖ Requires sxhkd (additional 3.5k loc C)

  • spectrwm [11.7 loc C]

  • dwm [1.8k loc C]
    • ✔ Very (overly) simple.

    • ✖ Patching is PITA.

Picker

Seems like only fzf has decent environment & tools built around it.

  • skim [7.1k loc Rust]

  • fzf [10k loc Go]
    • ✔ Many tools integrating this (and only this).

    • ✖ Very complex for such simple task

    • ✖ Go language. Have to grab a binary.

  • fzy [2k loc C]
    • ✔ Has some tools integrating this.

    • ✖ Still complex

  • pick [1.1k loc C]
    • ✖ No tools integrated

  • slmenu [0.6k loc C]
    • ✔ Somewhat simple

    • ✖ No tools integrated

    • ✖ Not fuzzy

Terminal emulator

These two emulator seem to be most viable. St is better but source-code-as-a-config doesn’t fit my workflow.

  • alacritty [17.7k loc Rust]

  • urxvt [40k loc C]
    • ✔ Extendable with Perl plugins

    • ✖ Complex. Relies on Perl

  • st [4k loc C]
    • ✔ simplest out there

    • ✔ correct. Passes UTF-8 test

    • ✖ Having terminal multiplexer is essential.

    • ✖ Settings in source code.

Shell

  • bash [107k loc C]

  • zsh [102k loc C]

  • mksh [19k loc C]

  • rc [6.5k loc C]

File Manager

The one thing I think file manager is useful for is picking files based on preview of their contents. For now only ranger has this functionality.

  • ranger [12.8k loc Python]

  • joshuto [6.6k loc Rust]

  • lf [7k loc Go]
    • ✖ No image preview

  • nnn [3.8k loc C]

  • fff [674 loc Bash]
    • ✖ No image preview

Package Manager

  • guix [~60k loc Scheme]

  • nix [~37 loc C++]

Grep through code

  • rg [21k loc Rust]

  • ag [3.9 loc C]

Browser Extensions

Screenshoters

Wallpaper Setters

Internet Browsers

Textual diff

Image diff

Directories jumper

Sandboxing

Password Managers