A suckless-aligned file browser written in Rust. Minimal dependencies, compile-time configuration, and simple implementation following the suckless philosophy.
- Minimal Dependencies: Only uses
libcfor terminal control - Compile-Time Configuration: Edit
config.rsand recompile to customize - Fast & Lightweight: ~1300 lines of code, instant startup
- Platform Support: Native file watching on Linux (inotify) and macOS (kqueue)
- Vi-style Keybindings: Navigate with h/j/k/l or arrow keys
- Two-Key Combos: Support for
gg,DD,nf,nd,g<key>,'<key> - File Operations: Copy, move, delete, rename files and directories
- File Creation: Create files and directories with nested path support
- Marking System: Mark multiple files for bulk operations
- Filtering: Filter directory contents with
/(search) - Multiple Sorting: Sort by name, size, time, or version number
- Directory Jumps: Quick navigation with customizable shortcuts
- External Programs: Edit files, play media, run commands via environment variables
- File Size Display: Toggle human-readable file size display
- Session History: Remember last directory for quick switching
- Full Feature Parity: All original noice functionality implemented
# Clone the repository
git clone <repository>
cd noice-rs
# Build (config is generated automatically from src/config.def.rs)
cargo build --release
# The binary will be at target/release/noiceThe easiest way to install noice-rs is using the provided installation script:
# Clone the repository
git clone https://github.com/dab/noice-rs.git
cd noice-rs
# Run the interactive installer
./install.sh
# Or specify installation location directly:
./install.sh --user # Install to ~/.local/bin
./install.sh --system # Install to /usr/local/bin (requires sudo)If you have Rust installed, you can install directly from crates.io:
cargo install noice-rsThis will install the noice binary to your ~/.cargo/bin directory.
Download pre-compiled binaries from the GitHub Releases page:
- Download the appropriate binary for your platform
- Extract and place in your PATH
- Make executable:
chmod +x noice
# Clone the repository
git clone https://github.com/dab/noice-rs.git
cd noice-rs
# Build in release mode (config generated automatically)
cargo build --release
# Install to system directory
sudo cp target/release/noice /usr/local/bin/noice
# Or install to user directory
mkdir -p ~/.local/bin
cp target/release/noice ~/.local/bin/noiceHomebrew (macOS):
# Coming soon
brew install noice-rsArch Linux (AUR):
# Coming soon
yay -S noice-rsNote: Make sure your installation directory is in your PATH. If using
~/.local/bin, addexport PATH="$HOME/.local/bin:$PATH"to your shell configuration file (.bashrc, .zshrc, etc.).
# Open current directory
noice
# Open specific directory
noice /path/to/directory
# Open home directory
noice ~j/↓- Move downk/↑- Move upl/→/Enter- Enter directory / open fileh/←/Backspace- Go to parent directorygg/Home- Go to first itemG/End- Go to last itemCtrl-U- Half page upCtrl-D- Half page down
Space- Mark/unmark fileu- Un-yank (clear yanked list)y- Yank (copy) marked files or current filem- Mark files for movingp- Paste yanked filesDD- Delete marked files or current file (double-D for safety)r- Rename current filenf- Create new filend- Create new directoryL- Create symbolic links
./Ctrl-H- Toggle hidden filesd- Toggle directories first/- Filter files (search)s- Sort by nameS- Toggle file size displayt- Sort by modification timev- Toggle version number sortingCtrl-L/R- Force redraw/reload
c- Change directory (interactive)g<key>/'<key>- Jump to directory by key:gr/'r- Go to root (/)ge/'e- Go to /etcgb/'b- Go to /bingu/'u- Go to /usrgm/'m- Go to /mediag./'.- Go to ~/.config
''- Jump to last directory (toggle)
e- Edit current file with $EDITORM- Open with media player ($NOICEMP)!- Open shell in current directory ($SHELL)z- Run system monitor ($NOICETOP)?- Show manual page ($NOICEMAN)
q/ESC- Quit
Configuration is compile-time based. To customize:
- Find your build directory: After building, config is generated in
$OUT_DIR/config.rs - Customize config: Edit the generated config file to customize:
- Keybindings: Map keys to actions, including two-key combos
- File Associations: Define which programs open which file types
- Directory Jumps: Set up quick navigation shortcuts for
g<key>and'<key> - Colors: ANSI color codes for different file types
- Display Options: Show/hide hidden files, directories first, file sizes, etc.
- Sorting: Default sort modes (name, size, time, version)
- External Programs: Default commands for editor, media player, etc.
- Rebuild: Run
cargo build --releaseto apply changes
Alternatively, modify src/config.def.rs directly for permanent changes.
The following environment variables can override defaults:
EDITOR- Text editor forecommand (default: vi)SHELL- Shell for!command (default: sh)NOICEMP- Media player forMcommand (default: "mpv --shuffle")NOICETOP- System monitor forzcommand (default: top)NOICEMAN- Manual command for?(default: "man noice")
This project follows the suckless philosophy:
- Simplicity: Code is simple and easy to understand
- Minimal Dependencies: Only
libcfor terminal control - Compile-Time Configuration: No runtime config files
- User as Developer: Users are expected to edit source and recompile
- No Bloat: Only essential features, no plugins or extensions
- Binary Size: ~380KB (unstripped release build)
- Memory Usage: < 5MB for typical directories
- Startup Time: < 10ms
- Lines of Code: ~1700 lines total (~1400 in core implementation)
- Linux: Full support with inotify for file watching
- macOS: Full support with kqueue for file watching
- BSD: Should work (untested)
- Other Unix: Basic support without file watching
This project follows the suckless philosophy of simplicity and hackability. Use and modify as you see fit.