<div align="center">
# β‘ FastyFileManager
**A blazing-fast terminal file manager built with Rust & Ratatui**
[](https://www.rust-lang.org/)
[](LICENSE)
[](https://github.com/SMOLDEVI/FastyFileManager)
</div>
---
## β¨ Features
- ποΈ **Three-panel layout** β Favorites, Drives, Files, and Preview
- π **Clipboard** β Copy, Cut and Paste files & folders (recursive)
- β
**Favorites** β Pin any file or folder for instant access (persisted between sessions)
- π **Fuzzy Search** β Instantly filter files as you type (characters in order, not necessarily contiguous)
- π¨ **Nerd Font icons** β Per-extension color coding and icons (60+ file types)
- βοΈ **Configurable** β Full keybinding and theme customization via `config.toml`
- ποΈ **Editor integration** β Open files in your `$EDITOR` (nvim, vim, nanoβ¦)
- πΎ **Hot config reload** β Apply changes without restarting (F5)
- π **Sort modes** β Toggle between Name / Size / Date with `s`
- π² **Multi-select** β Select multiple files with `Space`, batch operations
- βοΈ **Rename** β Rename files and folders with `r`
- ποΈ **Delete confirmation** β Safe deletion with y/N prompt
- π **Resizable panels** β Adjust panel widths with `Shift+β` / `Shift+β`
- π **Drive info** β Shows available free space for each drive
- β‘ **Compact popups** β Minimal Vim-style command bar for input and confirmations
- π **Conflict resolution** β Overwrite / Skip / Auto-rename when pasting existing files
---
<div align="center">
<img src="assets/screenshot.png" alt="FastyFileManager in action" width="850"/>
</div>
---
## π Installation
### Prerequisites
- [Rust](https://rustup.rs/) (stable, 1.75+)
- A terminal with [Nerd Fonts](https://www.nerdfonts.com/) support (e.g. JetBrainsMono Nerd Font)
---
### π§ Linux / macOS
```bash
git clone https://github.com/SMOLDEVI/FastyFileManager.git
cd FastyFileManager
chmod +x build.sh
./build.sh
```
The script will:
1. Compile the project in release mode
2. Place the `ffm` binary in the project directory
3. You can then move it to `~/.local/bin/` or `/usr/local/bin/` to add it to PATH
```bash
# Optional: add to PATH manually
cp ffm ~/.local/bin/ffm
```
---
### πͺ Windows
```bat
git clone https://github.com/SMOLDEVI/FastyFileManager.git
cd FastyFileManager
build.bat
```
The script will:
1. Compile the project in release mode
2. Copy `ffm.exe` to `%USERPROFILE%\bin\`
3. Automatically add `%USERPROFILE%\bin` to your user `PATH`
> β οΈ Restart your terminal after first install for PATH changes to take effect.
---
### π¦ Manual build
```bash
git clone https://github.com/SMOLDEVI/FastyFileManager.git
cd FastyFileManager
cargo build --release
# Binary is at: target/release/ffm (or ffm.exe on Windows)
```
---
## β¨οΈ Keybindings
### ποΈ File Panel
| `j` / `β` | Move down |
| `k` / `β` | Move up |
| `l` / `β` / `Enter` | Open directory |
| `h` / `β` / `Backspace` | Go to parent directory |
| `a` | Create new file or folder (end name with `/` for folder) |
| `r` | Rename selected item |
| `D` | Delete selected file/folder (with confirmation) |
| `Space` | Toggle multi-selection |
| `s` | Cycle sort mode: Name β Size β Date |
| `e` | Open file in `$EDITOR` |
| `y` | **Copy** selected item(s) to clipboard |
| `x` | **Cut** selected item(s) (move) |
| `p` | **Paste** clipboard into current directory |
| `f` | Add selected item to **Favorites** |
| `/` | Start search / filter |
| `Tab` | Switch focus: Files β Drives β Favorites |
| `Shift+β` | Shrink center panel |
| `Shift+β` | Expand center panel |
### β
Favorites Panel
| `j` / `β` | Move down |
| `k` / `β` | Move up |
| `Enter` / `β` | Navigate to favorited item |
| `D` or `F` | Remove from favorites |
| `Tab` | Switch focus |
### πΎ Drive Panel
| `j` / `β` | Move down |
| `k` / `β` | Move up |
| `Enter` / `β` | Switch to selected drive |
| `Tab` | Switch focus |
### π Search Mode
| *type anything* | Filter files in real time |
| `Enter` | Confirm and return to Normal mode |
| `Esc` | Cancel search and clear filter |
| `β` / `β` | Navigate filtered results |
### π Global
| `q` | Quit |
| `?` | Toggle help popup |
| `F5` | Hot-reload config |
| `Ctrl-h` | Focus Drives panel |
| `Ctrl-l` | Focus Files panel |
| `Ctrl-b` | Toggle status bar |
| `Tab` | Cycle focus: Files β Drives β Favorites |
### π¦ Paste Conflict
| `O` | Overwrite existing file |
| `S` | Skip this file |
| `R` | Auto-rename (adds suffix) |
| `Esc` | Cancel entire paste operation |
---
## βοΈ Configuration
Config is stored at:
- **Windows**: `%APPDATA%\ffm\config.toml`
- **Linux/macOS**: `~/.config/ffm/config.toml`
The file is auto-created on first run with default values.
```toml
[theme]
background = "Reset"
text = "#EADBB8"
selected_bg = "#D2B48C"
selected_fg = "#282828"
directory = "#E0C097"
file = "#C8B6A6"
highlight_symbol = "> "
[keys]
quit = "q"
search = "/"
cancel = "esc"
submit = "l"
down = "j"
up = "k"
delete = "D"
create = "a"
focus_files = "ctrl-l"
focus_drives = "ctrl-h"
back_dir = "h"
reload = "F5"
edit = "e"
rename = "r"
help = "?"
sort = "s"
```
> Apply changes instantly with `F5` β no restart needed!
---
## π Shell Integration: cd on quit
When you quit `ffm`, it saves the last visited directory to `~/.local/share/ffm/cwd` (Linux) or `%APPDATA%\ffm\data\cwd` (Windows). Wrap the binary in a shell function to automatically `cd` into that directory:
### Bash / Zsh
```bash
ffm() {
command ffm "$@"
cwd_file="${XDG_DATA_HOME:-$HOME/.local/share}/ffm/cwd"
if [ -f "$cwd_file" ]; then
cd "$(cat "$cwd_file")"
fi
}
```
### fish
```fish
function ffm
command ffm $argv
set cwd_file "$HOME/.local/share/ffm/cwd"
if test -f "$cwd_file"
cd (cat "$cwd_file")
end
end
```
### Windows PowerShell (profile)
```powershell
function ffm { & ffm.exe $args; $cwd = "$env:APPDATA\ffm\data\cwd"; if (Test-Path $cwd) { Set-Location (Get-Content $cwd -Raw).Trim() } }
```
---
## ποΈ Project Structure
```
FastyFileManager/
βββ src/
β βββ main.rs # Entry point
β βββ app.rs # Application state & input handling
β βββ ui.rs # Terminal UI rendering (ratatui)
β βββ config.rs # Config loading & defaults
β βββ icons.rs # File type icons & colors
β βββ theme.rs # Color parsing
βββ build.sh # Linux/macOS build + install script
βββ build.bat # Windows build + PATH setup script
βββ Cargo.toml # Dependencies
```
---
## π License
MIT Β© [SMOLDEVI](https://github.com/SMOLDEVI)