git-annex/ tips/ git-annex extensions for ranger, the file manager

If you use ranger, the console-based file manager, you can benefit of its plugin system to get it easily entangled with git-annex. As far as I know, there 2 main types of extensions:

## Custom commands

ranger lets you define custom commands that can be called. Basically you could easily write proxy ranger commands for all git-annex commands you use. Here have written

- `:ga_whereis` for outputting whereis information;
- `:ga_set` and `:ga_tag` for metadata changing;
- `:ga_get` and `:ga_drop` for quick fetching from remotes and dropping them from local (really useful).

## Linemodes

The small string of information that shows on each file line, aligned to the right, is called a `infostring`. Linemodes in ranger lets you change between its default linemodes or add your own custom linemodes. I have written two git-annex linemodes:

- git-annex-metadata, which shows tags and metadata fields from git-annex; and
- git-annex-whereis, which shows the name of the repositories where each file is (except the current repository, as that should be clear from the ranger colours).

To switch linemodes, just type `:linemode git-annex-whereis` or `:linemode git-annex-metadata`.

You can also set `default_linemode path=/your/annex/path/.* git-annex-whereis`, for example, to have that linemode automatically set whenever you browse your git-annex folder on ranger.

Beware of folders with too many files, as this will read output from git-annex for all the files, so ranger can freeze for some seconds.

As I didn't have any better place to put the code, eveything here is referenced in my dotfiles repository on GitHub. Just copy the two referenced files to your `~/.config/ranger/plugins/` folder and `~/.config/ranger/commands.py` file to get this working.

Much other interesting commands and plugins can still be added. Modify this page if you come up with other ideas.

related work

Just find some related / complimentary work for this. It is a bunch of ranger functions that wrap git-annex commands inside ranger:

    :annex_add → git annex add + git commit -a
    :annex_get → git annex get
    :annex_drop → git annex drop
    :annex_copy <remote> → git annex copy --to=<remote>
    :annex_sync → git annex sync --fast --quiet

The code is at https://github.com/matze/ranger-annex

More information on this blog post.

Comment by fiatjaf — Tue Jul 22 18:11:47 2025
Comments on this page are closed.