1. 69

In the last few days I discovered:

  • pass
  • piknik
  • ledger, which apparently is well known but I have never read about

Out of curiosity, I would like to know which unfrequent tools lobsters users use that we might not know about.

    1. 19

      devd, by Aldo Cortesi

      Whenever I need to spin up a local server to work with bits of static HTML, I reach for devd. It’s a super fast, self-contained binary with great ergonomics. Running devd -lo . serves the current directory, opens (-o) your browser for you, and automatically livereloads (-l) your browser whenever any of the files change. It can do much more, including simulating bad connections, reverse proxying, and generating ephemeral self-signed TLS certificates, but I’m completely happy with just the basics.

      1. 7

        In that same vein, my shell has python -m SimpleHTTPServer aliased to webserver so I can quickly browse a directory on a remote machine through a web browser and python is usually installed everywhere.

        1. 5

          Also: python3 -m http.server :) As ridiculous as it sounds, I’ve actually had performance issues with Python’s built-in server, especially when I have a bunch of async requests on a page. Devd solved that for me.

    2. 13
      • entr - watches files/directories and executes an arbitrary command when they change.
      • stow - a utility for easily managing symlinked dotfiles
      • smu - a small markup-like implementation that’s easy to pipe to.
      • nmh - a unix-y approach to command line mail (I never really liked mutt). Basically nmh is made of a handful of small, discrete utils that are easy to pipe together.
      • pycco - just started using this recently to make documentation easier to write - I’m not sure if I like the quality of documentation that comes out, but I definitely like how easy it is to keep docs up to date.
      • youtube-dl - can download youtube/gyfcat/imgur videos (or gifvs), but I just download to stdout and pipe to mpv to stream them.
      • qutebrowser - a minimal vim-like browser. Works with most sites I visit (and I have a keybinding to pop open youtube-dl/mpv when I’m on a site that youtube-dl supports.
      • inox - patched version of chromium that supposedly doesn’t phone home to Google as much. I use it whenever qutebrowser doesn’t work on a site.

      Linux/BSD/Xorg specific

      • Basically anything from suckless.org, including st (a terminal emulator), slock (a minimal x screen locker), dwm (a small window manager) and dmenu (a searchable X menu).
      • lemonbar - small X bar that is fed data by a pipe (flexible, so it can be used for other things like popup notifications too)
      • xbanish - hides the mouse when you start typing

      I’m not sure how many of these tools are really “unheard of”, but they’re definitely not common. I use all of them practically every day.

      1. 1

        Doesn’t qutebrowser depend on a WebKit fork which no longer receives security updates?

        1. 1

          Hmm… it’s using QtWebkit, so I’m not entirely sure. However, the qutebrowser project just got a lot of funding to replace the rendering engine with chromium’s blink engine, which will probably improve security/support on “modern” websites.

    3. 12
      • par - A really handy utility for reflowing text in a particular column limit. Works well in source code with comments or email quotes. My favorite bit is that the man page contains an apology for its complexity. :-)
      • git gui is one of the few tools I’m willing to leave my terminal for. I use it in particular for committing things in patch mode.
      • bpython - A souped up Python interpreter. Not quite to the level of ipython, but has niceties like auto completion and doc string snippets.
      1. 9

        git gui

        Not tig?

        1. 2

          I do actually use tig daily but I thought it was just a viewer for history? git gui is nice because it makes effective use of the mouse for patch mode commits.

          1. 1

            For some reason I was sure tig could commit, but I was mistaken.

            1. 4

              You’re not mistaken. :-) In tig’s “Status view”, you can stage individual files, chunks, and lines for committing. This blog post is a nice overview of tig’s features.

              I use tig every day and often recommend it to colleagues who git add or git add -i.

              1. 1

                I was mistaken about being mistaken! (I normally just git add -p and use tig only as a viewer.)

      2. 1

        I’m definitely addicted to git gui and gitg.

    4. 11

      These are probably pretty popular, but you already covered pass and (h)ledger so I don’t have much else to work with. :)

      1. 3

        Thank you for mentioning mosh.

        Some one brought this to my attention, may be a year or so ago. Recently, for the work that I do, I got tired of relogging into ssh and then reattaching my screen sessions and remembered there was a terminal that handles this kind of on-off internet connectivity, but I forgot the name and went mad searching. I kept running into tmux, which wasn’t it.

      2. 2

        Right, mosh (with tmux inside). Haven’t heard about the other programs you mentioned.

        I normally use (Go)yacc with a handrolled lexer for parsing. Besides having a built-in lexer, how is Ragel better?

    5. 10

      The text editor Sam by Rob Pike. Not as a day-to-day editor, but to replace of one-off Awk and Perl scripts.

      I find the combination of command language, visible history and structural regular expression support is very useful in parsing large datasets and log files in an interactive way.

    6. 9
      • z: jump around directories based on frecency
      • mutt-kz: mutt with notmuch search superpowers, also does search-based virtual mailboxes.
      • pandoc: probably more well-known, indispensable for making slides and short documents.
      • Hakyll: great static site generator that uses a DSL for configuration and pandoc for Markdown -> HTML.
      • openconnect: no more pesky Cisco Anyconnect to connect to work :).
    7. 7

      xonsh lets you basically write python directly in your shell. Great for people who know how to do things in python and abhor bash-isms.

      1. 1

        eshell, scsh and avash are interesting projects if you’re interested in more programmable shells.

    8. 7

      Taskwarrior has been mentioned here a few times but probably belongs on any list with pass and ledger.

    9. 7

      I’m always surprised at how rarely known atool is: Wrapper around various archive formats to give unified interface and sensible default behaviours (e.g. no tarbombs).

      1. 1

        I use BSD tar which lets you type xzf even if the archive is bzipped or whatever, but I don’t think it supports blocking tarbombs; thanks for the tip.

        1. 2

          GNU tar allows you to just write ‘tar xf’ regardless of compression as well. Does BSD tar not support this?

        2. 1

          Atool also works with rar, zip, etc rather than just compressed tarballs FWIW

    10. 6

      I don’t know if it’s that unknown, but GNU parallel, and especially the parallel --pipe option, are pretty amazing. Any cpu-bound script that processes stdin lines (like a Python script) can be made multi-core with no fuss.

      Combined with pv, you get a toolkit for UNIX-y multi-core dataflow with animated progress bars that work with all the existing tools you know and love.

      parallel –pipe info

      pv man page

    11. 5

      hexdump -C is useful for all sorts of file examination.

      On OpenBSD, scan_ffs has saved my butt more than once when a disk gets screwed up somehow.

           The basic operation of this program is as follows:
           1.    Panic.  You usually do so anyways, so you might as well get it over
                 with.  Just don't do anything stupid.  Panic away from your
                 machine.  Then relax, and see if the steps below won't help you

      If you do anything with MySQL/MariaDB/Percona, the Percona Toolkit has some great utilities like pt-online-schema-change.

      msmtp is my go-to for sending out e-mail from mutt, rather than trying to configure a whole postfix/opensmtpd instance to just relay to your actual mail server (and you get instant feedback if delivery fails, rather than it staying queued on your machine).

    12. 4

      I wrote a post about this not too long ago, in which I mention my affection for mojo, jq, uniprops, and combine: http://hoelz.ro/blog/unsung-heroes-of-the-command-line

      One tool I forgot to include in there is tig, a great curses UI for Git.

    13. 4

      birthday(1), in FreeBSD Ports as misc/birthday, for giving me advance notice of upcoming birthdays and anniversaries when I log in, letting me appear to be on the ball. Simple text configuration, flags to tune the window.

      Website appears to be erroring right now. I guess this helps affirm that this is a rarely-known tool? Looks like it’s probably https://sourceforge.net/projects/birthday/ (v1.6.2, as opposed to v1.5 in Ports).

    14. 4

      I use dc a lot as my go-to calculator. It’s a quasi-standard reverse polish notation (RPN) command-line calculator. Quasi-standard in the sense that it is traditionally included in unix, but POSIX chose not to standardize it, instead only standardizing bc (which was historically a front-end to dc for people who didn’t want RPN). The only change from the default setup I have is the command 10k in my ~/.dcrc, which sets the precision on startup to 10 decimal places (the default is 0). I mostly use it for basic arithmetic, but it can do more complex things too.

      dwdiff is a word-level diff utility. There are probably a lot of these, but I use this one.

      ncdu is a pretty straightforward ncurses frontend to du, letting you navigate around and see what’s taking up space.

      units, available in GNU and other versions, converts between units. I had gotten in the habit of converting units by typing things like “33 C in F” or “23.3 km in mi” into my browser’s search bar (both Google and Bing intercept and answer these kinds of queries), but after a period spent with unreliable internet and realizing these conversions shouldn’t actually need to call out to the internet (except perhaps currency conversions, if you want them up to date), I’ve been using units instead.

      pdftk is a PDF swiss-army knife for various page-level operations like concatenating, splitting, and rotating.

    15. 3

      ts which adds a timestamp prefix to each line passed to it on stdin. The feature I use mostly is ts -i which prefixes the elapsed time since the previous line was printed.

    16. 3

      If you’re into C, cscope is highly recommended, eventhough its parsing is ad-hoc and its codebase is quite horrible. I’m avoiding mouse use with the aid of xclip, cwm (patched) amd Vimperator. A decade ago I used Synergy2, but it’s seldom useful.

      1. 1

        How does cscope compare to ctags, which supports a boatload of languages?

        1. 1

          cscope doesn’t support even a handful of languages. On the other hand, it shows you more: for me the two most useful features are backlinks (who calls this function?) and finding a “C symbol” (where is this function/variable/type mentioned?), but there are also more extensive forward function links (whom is this function calling?), forward and backward file links (jump to a file from an #include line and find files including a given file) and grepping the source (though the latter is not aided by the index). And it indexes the included system header files by default, so you find definitions there as well.

    17. 3

      qfind & qselect: fast, flagfree find . -iname foo with steroids and fuzzy-finder/filter to find exactly what I need interactively.

      1. 2

        looks neat, doesn’t it bother you that you’ll only see the list of files when the search is complete?

        1. 2

          Not really, qfind is lot faster (or it feels so at least!) than find. On my first generation SSDs it gives subsecond filters for Linux kernel and mozilla-central repos, so it hasn’t been bother. It also feels very intuitive when combining with qselect for extra filtering, especially when using it inside other programs. For example my open file in vim.

          1. 2

            hmm, weird. it isn’t as fast on my mac book air so i created a pull request that prints the file as soon as it’s found.

            do you mind trying my temporary fork?

    18. 2

      mmv by Aharon (Vladimir) Lanin (original source)

      It’s an oldie but a goodie - allows for pattern-based mass renaming of files. Yes, I know how to mass rename files the “proper” way using shell loops, sed/tr, etc but using mmv is way quicker. It’s in the ports/packages repos of most operating systems.

      1. 2

        zmv is also similar in this vein if you use ZSH.

      2. 1

        On a similar note, I like renamer.vim.

    19. 2

      I use ledger for my personal finances, Sam as my preferred text editor, es for shell scripts, uuterm, Irc.c, newsbeuter, and my own little wrapper-around-gpg-as-a-password-manager. Wonderful software (excluding my own).

    20. 2

      I always say this, but tsort is one of those strange little Unix utilities that is a total waste of bytes right up until that point when you need to run a quick topological sort, at which point you are SO HAPPY that it exists.

      1. 2

        In that manpage, it says Mark Kettenis was the author!!

    21. 2

      I’m also a big fan of the combination of isync and mu for mail. It has much of the flavor of mh, but works reasonably with IMAP mail sources. As a 25+ year Emacs graybeard, I interface with it via mu4e, but even from the bare command line, it is supremely useful. I also hear good things about notmuch, which has much the same flavor.

    22. 2
      • lr list files, recursively, which includes the best features of ls(1), find(1), stat(1) and du(1).
      • xe simple xargs and apply replacement.

      Both come with sane defaults resulting in a nice and easy usage in shell scripts and one liners. lr supports extensive filter expressions which come very handy.

    23. 2

      Mercurial. Haha :-) just mourning :-(

    24. 1

      I have the bad habit of writing my own homegrown solutions for many problems and non-problems. Those include a notetaking tool and a simple weather app </shamelessselfpromotion>

      Some things I’ve found great(er) use in:

      • The termite terminal emulator. Features keyboard-driven copy/paste/select, URL focusing, and good configurability. Good stuff.
      • Not unheard of: awesomewm. But extremely cool as a glue-layer between tools, especially because it allows you to easily manage and create popup notifications. I’m writing my own “replacement”, as some might have noticed, but that’s another story. (I’m doing it again, aren’t I?)
      • VimFx is a slightly less popular, but very convenient vim-layer for firefox.
      • radare2 is a reverse engineering framework and much more, but some of it’s utilities have great value elsewhere as well, particularly rax2 for all things base conversion.

      All other things I’d have mentioned, have been already.

    25. 1

      I use ConTeXt for most of my slides and really like it, I just cannot find any good documentation on it :).

    26. 1

      I’ve been through a lot of todo management tools (even wrote my own minimal solution) and I have to say my favourite todo tool is taskpaper.vim. It’s easy to overlook it as being just a syntax file for the taskpaper format, but actually the few keybindings it provides to mark tasks as done and archiving them are all you need. Key features it offers that are surprisingly hard to find elsewhere:

      • Simple text-based format
      • Ability to keep notes alongside a given task
      • Ability to easily have different task lists for different projects
      • Nested tasks