3
6
Fork
You've already forked jafff
0
"Just another fucking fast filemanager" inspired by the original fff
  • Rust 100%
2025年12月19日 09:30:36 +01:00
.github initial commit 2025年07月27日 13:57:01 +02:00
src show sel idx/total count 2025年12月19日 09:29:06 +01:00
.gitignore implement config file with favourites 2025年08月19日 14:53:04 +02:00
Cargo.lock version bumb 0.2.5 2025年12月19日 09:30:36 +01:00
Cargo.toml version bumb 0.2.5 2025年12月19日 09:30:36 +01:00
LICENSE initial commit 2025年07月27日 13:57:01 +02:00
README.md update README 2025年11月11日 17:58:02 +01:00

JAFFF -- "Just another fucking fast filemanager"

Why?

There are multiple terminal filemanager out there, from yazi through lf to ranger, broot and nnn. So, why to write another one?

I tried most of the named above and some more, but wasn't satisfied. Some were to bloated, some just didn't fit my needs. Thus, I kept on using good ol' fff (to be more precise, my fork of it). But as a bash script it has its restrictions. Therefore, I decided to write my own fff version in Rust; not as a "rewrite in Rust", but more of an inspired project.

My main focus is on combining the simplicity (and the less distraction evolving from this) of fff with some extra features a real programming language like Rust provides compared to Bash. Espacially I wanted to integrate some aspects of ls into the TUI. Since ls its the most common CLI tool to query directory informations fast, e.g. when working remotely on our institutional server infrastructure, many people like me are used to its look. Making it directly navigatable was therefore a welcomed enhancement of using Rust, at best in a already fully muscle-memorized manner like with fff.

So, here it is: jafff -- "just another fucking fast filemanager". Use it or keep using something else 😉

Features

jafff tries to use as many of fff's keybindings etc as possible, as is the same with some ls flags.

For example, starting it with jafff -la shows the some information as running ls -lah. The -h flag is not necessary for jafff since size is always displayed human-readable.

Coloring of directory entries is done using LS_COLORS variable or the dircolors command if the former is empty. Just like ls does 😉

Options

Here is an overview of all possible options:

USAGE: jafff [Options]
OPTIONS
 -h --help Print this help and exit
 -v --version Print version and exit
 -c --config-file=<PATH> Set path for config file. Overrides the standard path at
 /home/lukeflo/.config/jafff/jafff.toml
 -p --print-cwd On exit print CWD to cache file
 -f --print-file --file Print selected file instead of opening. File picker mode
 -a --all Show hidden files by default
 --list-details=<VALUE> Set amount of details shown for every item.
 Possible values: [short, medium, long, detailed, all]
 -L Show medium details. Shortcut for --list-details=medium
 -l Show all details. Shortcut for --list-details=all|long 

Keybindings

And these are the standard keybindings:

Keys Action
j,k | down,up Move list by one
ctrl-d,ctrl-u Move list by ten
h | left | backspace Move directory up
l | right | enter Enter directory
g,G | home,end Move to start/end of list
0-9 Open the specified favourite (set in config file)
n Create new dir
f Create new file
r Rename current file
y Mark file for yank/copy
m Mark file for move
d Mark file for delete
s Mark file for symlink
p Process actions for marked files
c Clear all marks
L Toggle item details
v Open git TUI if set and in a git dir
P Toggle preview on/off

Configuration

You can config jafff using the jafff.toml at your systems config location. The default is $XDG_CONFIG_HOME/jafff/jafff.toml. But you can set a custom one using the -c/--config-file= flag which overrides the default.

Favourites can be opened in the TUI pressing the particular number between 0 and 9. The number represents the index of the array, starting with 0 as usual.

Other possible values are:

favourites = [
 "~", # opens home dir when pressing 0
 "~/.config", # moves to ~/.config when pressing 1
 "~/Documents" # moves to ~/Documents when pressing 2
]
# terminal editor to use
editor = "vim"
# file mime-types that should use the in-terminal editor
# groups can be specified with setting groupname and slash only:
# "text/" will open all files whose mime-type starts with "text/" using
# the terminal editor
editor_mime_types = ["inode/x-empty", "text/"]
# opener for files which can't be opened in the terminal
opener = "xdg-open"
# command for the git tui: e.g. "lazygit"
git_cmd = "lazygit"
# symbols for git branches/status
git_branch = ""
git_staged = "^"
git_unstaged = "#"
# ratio for list pane to preview pane
filelist_preview_ratio = [2,1]

Images

Just some sreenshots...

niri-screenshot-2025年09月08日-11-35-11.png

niri-screenshot-2025年09月08日-11-39-45.png

niri-screenshot-2025年09月08日-11-45-46.png

License

Copyright (c) lukeflo lukeflo_git@posteo.de

This project is licensed under the MIT license (LICENSE or http://opensource.org/licenses/MIT)