noice-rs
A suckless-aligned file browser written in Rust. Minimal dependencies, compile-time configuration, and simple implementation following the suckless philosophy.
Features
- Minimal Dependencies: Only uses
libc
for terminal control - Compile-Time Configuration: Edit
config.rs
and 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
Building
# Clone the repository
# Build (config is generated automatically from src/config.def.rs)
# The binary will be at target/release/noice
Installation
Method 1: Using the Installation Script (Recommended)
The easiest way to install noice-rs is using the provided installation script:
# Clone the repository
# Run the interactive installer
# Or specify installation location directly:
Method 2: Using cargo install (For Rust Developers)
If you have Rust installed, you can install directly from crates.io:
This will install the noice
binary to your ~/.cargo/bin
directory.
Method 3: Pre-compiled Binaries
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
Method 4: Manual Build and Install
# Clone the repository
# Build in release mode (config generated automatically)
# Install to system directory
# Or install to user directory
Package Managers
Homebrew (macOS):
# Coming soon
Arch Linux (AUR):
# Coming soon
Note: 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.).
Usage
# Open current directory
# Open specific directory
# Open home directory
Default Keybindings
Navigation
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
File Operations
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
View Options
.
/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
Directory Operations
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)
External Programs
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)
Other
q
/ESC
- Quit
Configuration
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 --release
to apply changes
Alternatively, modify src/config.def.rs
directly for permanent changes.
Environment Variables
The following environment variables can override defaults:
EDITOR
- Text editor fore
command (default: vi)SHELL
- Shell for!
command (default: sh)NOICEMP
- Media player forM
command (default: "mpv --shuffle")NOICETOP
- System monitor forz
command (default: top)NOICEMAN
- Manual command for?
(default: "man noice")
Philosophy
This project follows the suckless philosophy:
- Simplicity: Code is simple and easy to understand
- Minimal Dependencies: Only
libc
for 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
Performance
- 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)
Platform Support
- 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
License
This project follows the suckless philosophy of simplicity and hackability. Use and modify as you see fit.