A tui file manager with Vim-like key mapping, written in Rust.
Fast, simple, and easy to configure & use.
/Users/$USER/.config/felix/config.yaml
will be read after $HOME/Library/Application Support/felix/config.yaml
.dd
, Vd
and p
is disabled in the first place.For more details, see CHANGELOG.md
in the repository.
OS | Status |
---|---|
Linux | works |
NetBSD | works |
MacOS | works |
Windows | not fully tested yet |
For Windows users: From v1.3.0, it can be at least compiled on Windows (see .github/workflows/install_test.yml
.) If you’re interested, Please try the native build and report any problems.
package | installation command | notes |
---|---|---|
crates.io | cargo install felix | Minimum Supported rustc Version: 1.65.0 |
Arch Linux | pacman -S felix-rs | The binary name is felix if you install via pacman. Alias fx='felix' if you want, as this document (and other installations) uses fx . |
NetBSD | pkgin install felix |
gcc
is installed.Update Rust if rustc < 1.65:
rustup update
git clone https://github.com/kyoheiu/felix.git
cd felix
cargo install --path .
In addition, you can use felix more conveniently by installing the following two apps:
cd
command, which enables you to jump to a directory that matches the keyword in felix.These apps do not need any configuration to use with felix!
If you install this app via pacman, the default binary name is felix
.
command | |
---|---|
fx | Show items in the current directory. |
fx <directory path> | Show items in the path. Both relative and absolute available. |
option | |
---|---|
-l / --log | Launch the app, automatically generating a log file. |
-h / --help | Print help. |
Key | Explanation |
---|---|
j / Down | Go up. If the list exceeds max-row, it “scrolls” before the top of the list. |
k / Up | Go down. If the list exceeds max-row, it “scrolls” before the bottom of the list. |
h / Left | Go to the parent directory if exists. |
l / Right / Enter | Open a file or change the directory. Commands for the execution can be managed in the config file. |
gg | Go to the top. |
G | Go to the bottom. |
z + Enter | Go to the home directory. |
z <keyword> + Enter | This command requires zoxide installed. Jump to a directory that matches the keyword. Internally, felix calls zoxide query <keyword> , so if the keyword does not match the zoxide database, this command will fail. |
:cd + Enter / :z + Enter | Go to the home directory. |
:z <keyword> + Enter | Same as z <keyword> . |
:trash + Enter | Go to the trash directory. |
Key | Explanation |
---|---|
l / Right / Enter | Open a file or change the directory. Commands for the execution can be managed in the config file. |
o | Open a file in a new window. This enables you to use felix while working with the file. Works only if exec is set in the config file and the extension of the item matches one of the value. |
e | Extract archived/compressed file to the current directory. Supported types: tar.gz (Gzip), tar.xz (lzma), tar.zst (Zstandard & tar), zst (Zstandard), tar , zip file format and formats based on it(zip , docx , …). |
Key | Explanation |
---|---|
dd | Delete and yank one item, which will go to the trash directory. |
yy | Yank one item. If you yanked other item(s) before, it’s replaced by this one. |
p | Put yanked item(s) in the current directory. If the item with same name exists, copied item will be renamed with the suffix \_{count} , such as test_1.txt . |
c | Switch to the rename mode (enter the new name and press Enter to rename the item). |
V | Switch to the select mode, where you can move cursor to select items. |
d (select mode) | Delete and yank selected items, and return to the normal mode. |
y (select mode) | Yank selected items, and return to the normal mode. |
u | Undo put/delete/rename. |
Ctrl + r | Redo put/delete/rename. |
Key | Explanation |
---|---|
v | Toggle whether to show the item preview (text, image, or the contents tree) on the right half of the terminal. You must install chafa in order to preview images. |
Alt + j / Down | Scroll down the preview text. |
Alt + k / Up | Scroll up the preview text. |
s | Toggle between vertical / horizontal split in the preview mode. |
backspace | Toggle whether to show hidden items or not. This change remains after exit (stored in .session ). |
t | Toggle sort order (by name <-> by modified time). This change remains after exit (same as above). |
/ | Search items by the keyword. |
n | Go forward to the item that matches the keyword. |
N | Go backward to the item that matches the keyword. |
: | Switch to the shell mode. Type command and press Enter to execute it. You can use any command in the displayed directory, but some commands may fail, and the display may collapse during execution. |
:e + Enter | Reload the current directory. Useful when something goes wrong. |
:empty + Enter | Empty the trash directory. Please think twice to use this. |
:h + Enter | Show help. (scrolls by j/k or Up/Down ) |
Esc | Return to the normal mode. |
:q + Enter / ZZ | Exit. |
Note that items moved to the trash directory are prefixed with Unix time (like 1633843993
) to avoid the name conflict. This prefix will be removed when put.
If any config file is not found, or found one is broken, felix launches with the default configuration, without creating new one.
Note that the default editor is $EDITOR
, so if you’ve not set it, opening a file will fail.
Contrary to the config file, these directory and file will be automatically created.
config file : $XDG_CONFIG_HOME/felix/config.yaml
trash directory : $XDG_DATA_HOME/felix/Trash
log files : $XDG_DATA_HOME/felix/log
On macOS, felix looks for the config file in the following locations:
$HOME/Library/Application Support/felix/config.yaml
$HOME/.config/felix/config.yaml
trash directory : $HOME/Library/Application Support/felix/Trash
log files : $HOME/Library/Application Support/felix/log
config file : $PROFILE\AppData\Roaming\felix\config.yaml
trash directory : $PROFILE\AppData\Local\felix\Trash
log files : $PROFILE\AppData\Local\felix\log
# (Optional)
# Default exec command when opening file.
# If not set, will default to $EDITOR.
# default: nvim
# (Optional)
# key (the command you want to use when opening file): [values] (extensions)
# In the key, You can use arguments.
# exec:
# zathura:
# [pdf]
# 'feh -.':
# [jpg, jpeg, png, gif, svg, hdr]
# (Optional)
# Whether to use syntax highlighting in the preview mode.
# If not set, will default to false.
# syntax_highlight: true
# (Optional)
# Default theme for syntax highlighting.
# Pick one from the following:
# Base16OceanDark
# Base16EightiesDark
# Base16MochaDark
# Base16OceanLight
# InspiredGitHub
# SolarizedDark
# SolarizedLight
# If not set, will default to "Base16OceanDark".
# default_theme: Base16EightiesDark
# (Optional)
# Path to .tmtheme file for the syntax highlighting.
# If not set, default_theme will be used.
# theme_path: "/home/kyohei/.config/felix/monokai.tmtheme"
# The foreground color of directory, file and symlink.
# Pick one of the following:
# Black // 0
# Red // 1
# Green // 2
# Yellow // 3
# Blue // 4
# Magenta // 5
# Cyan // 6
# White // 7
# LightBlack // 8
# LightRed // 9
# LightGreen // 10
# LightYellow // 11
# LightBlue // 12
# LightMagenta // 13
# LightCyan // 14
# LightWhite // 15
# Rgb(u8, u8, u8)
# AnsiValue(u8)
# For more details, see https://docs.rs/termion/1.5.6/termion/color/index.html
color:
dir_fg: LightCyan
file_fg: LightWhite
symlink_fg: LightYellow
For example, If you write
default: nvim
exec:
'feh -.':
[jpg, jpeg, png, gif, svg]
zathura:
[pdf]
then, .jpg
, .jpeg
, .png
, .gif
and .svg
files are opened by feh -. <file-name>
, .pdf
files by zathura <file-name>
and others by nvim <file-name>
.