gomi
(meaning "trash" in Japanese) is a simple CLI tool written in Go that adds trash can functionality to the command line.
In a typical CLI, there’s no "trash" folder like in graphical file managers. This means if you accidentally delete important files using the rm
command, restoring them can be very difficult. That's where gomi
comes in. Unlike rm
, which permanently deletes files, gomi
moves them to the trash, allowing you to easily restore files whenever necessary. If you’re used to rm
in the shell, gomi
works as a more convenient, safer alternative.
- Functions like the
rm
command but moves files to the trash instead of permanently deleting them. - Simple and intuitive restoration process with a user-friendly interface.
- Compatible with most of the flags available for the
rm
command. - Allows easy searching of deleted files using fuzzy search.
- Customizable via a YAML configuration file:
- Filter what files to show (using regexp patterns, file globs, file size, etc.).
- Customize file content colorization.
- Define the command to list directory contents.
- Customize visual styles (e.g., color of selected files).
gomi
is compatible with rm
flags (like -i
, -f
, and -r
), so you can easily replace rm
by setting up an alias:
alias rm=gomi
I developed gomi
as a safer replacement for rm
, so setting up the alias is recommended. However, feel free to adjust to your preferences. The instructions below assume the alias is set.
Move files to the trash:
rm files
Restore a file to its original location. The --restore
flag is a bit long, so you can use the shorthand -b
:
rm -b
Download a precompiled binary directly from GitHub Releases and place it in your $PATH
.
With afx:
github:
- name: babarot/gomi
description: Trash can in CLI
owner: babarot
repo: gomi
release:
name: gomi
tag: v1.2.3
command:
link:
- from: gomi
alias:
rm: gomi
afx install
You can install gomi
using an AUR helper:
yay -S gomi
paru -S gomi
Find it here on AUR.
You can customize gomi
's behavior and appearance with a YAML configuration file. The first time you run gomi
, a default config will be automatically generated at ~/.config/gomi/config.yaml
.
Here is an example of the default config:
core:
restore:
confirm: false # If true, prompts for confirmation before restoring (yes/no)
verbose: true # If true, displays detailed restoration information
ui:
density: spacious # or compact
preview:
syntax_highlight: true
colorscheme: nord # Available themes: https://xyproto.github.io/splash/docs/index.html
directory_command: ls -F -A --color=always
style:
list_view:
cursor: "#AD58B4" # purple
selected: "#5FB458" # green
indent_on_select: false
detail_view:
border: "#FFFFFF"
info_pane:
deleted_from:
fg: "#EEEEEE"
bg: "#1C1C1C"
deleted_at:
fg: "#EEEEEE"
bg: "#1C1C1C"
preview_pane:
border: "#3C3C3C"
size:
fg: "#EEEEDD"
bg: "#3C3C3C"
scroll:
fg: "#EEEEDD"
bg: "#3C3C3C"
exit_message: bye! # Customizable exit message
paginator_type: dots # or arabic
history:
include:
within_days: 100 # Only show files deleted in the last 100 days
exclude:
files:
- .DS_Store # Exclude .DS_Store files
patterns:
- "^go\\..*" # Exclude files starting with "go."
globs:
- "*.jpg" # Exclude JPEG files
size:
min: 0KB # Exclude empty files
max: 10GB # Exclude files larger than 10GB
To get extra debug output (not shown in the official help), use the --debug
flag:
gomi --debug
This command will stream log output, similar to tail -f
. While running gomi --debug
, you can open another terminal or console and execute gomi
commands to view live updates in the log as they happen. This is useful for debugging and monitoring gomi
's actions in real time.
If you prefer JSON formatted output, use:
gomi --debug=json