fff
- Rust 100%
| .github | initial commit | |
| src | show sel idx/total count | |
| .gitignore | implement config file with favourites | |
| Cargo.lock | version bumb 0.2.5 | |
| Cargo.toml | version bumb 0.2.5 | |
| LICENSE | initial commit | |
| README.md | update README | |
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)