About Articles Projects Links Apps Feed

Helm System Packages

This package was originally introduced on Reddit.


Allow me to introduce Helm System Packages, an interface to your system package manager. (Check out the screencasts on the home page.)


  • List, search, filter and select packages incrementally.
  • All actions work on multiple packages.
  • Display information of multiple packages in an Org buffer.
  • (Un)Install a selection of packages.
  • Browse the (reverse) dependency graph with the same Helm interface.
  • Find files with Helm (again, over multiple packages).
  • Each package manager interface comes with its set of specializations. For instance it has a source for USE flags when Portage is detected.
  • Last but not least, Helm sessions can be resumed, which means actions can be chained over the same package selection.

It’s been packaged for Guix and MELPA.


I believe that most package manager’s graphical interfaces take the approach of providing a “user-friendly” experience with a familiar toolkit (GTK, Qt, you name it), while leaving aside usability enhancements that could make them worth the use to everyone.

As a results, many power users solely resort to a commandline usage. It’s a shame, really, because of the many intrinsic limitations of shells (especially if you don’t use Eshell), namely the cumbersome search-fix-process steps:

  1. Search for local packages.
  2. Package missing? Search for remote packages.
  3. List is too long? Pipe through a pager.
  4. (Un)install the desired package by writing the searched package names again.

With Helm, all those actions get factored into one. Based on Emacs, it also naturally comes with a bunch of perks:

  • Keyboard driven.
  • Self-documented.
  • Customizable.
  • As portable as Emacs is.
  • Works in a TTY too!

Credits and future development

The original work was done by Helm’s current maintainer Thierry Volpiatto on Portage and dpkg. I’ve compiled his work together and added support for pacman. Helm System Packages now effectively acts as a uniform abstraction for managing packages across different systems.

I’ve later added support for Void Linux’ xbps and Guix. Not all package managers are equally well supported because I can’t possibly be using all of them, so contributions are welcome to bring them all up to speed!

Performance should be good. If not, please report. Also please report if you notice some packages or categories are missing.

Contributions (and issue reports) are welcome!

UX-experiment: a (somewhat) user-friendly, stand-alone version

For many years I’ve been looking for a straightforward interface to the pacman package manager for the less techie of us. Now that I’ve worked on Helm System Packages for Emacs users, I thought it would be nice to try it out on non-Emacs users.

As an experiment, I’ve written a small program that automates the installation and the configuration of Helm System Packages in a separate directory. (It won’t interfere with your Emacs files.) You can try it out, it’s a simple portable script that only requires Emacs ≥ 24.4 and a supported package manager.

Feedback is more than welcome on that side! :)


Date: 2018-08-21

Made with Emacs 27.2 (Org mode 9.4.4)

Creative Commons License