SkillAgentSearch skills...

Gomi

πŸ—‘οΈ Your UNIX rm command with a safety net!

Install / Use

/learn @babarot/Gomi
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

πŸ—‘οΈ A Safer Alternative to the UNIX rm Command!

<a href="https://gomi.dev"><img align="left" width="96px" src="./docs/favicon/web-app-manifest-512x512.png" alt="image"/></a>

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.

demo

Release Tests Coverage

Features

  • πŸ”„ Familiar syntax - works just like rm command but with a safety net
  • 🎯 XDG Trash spec compliant - integrates perfectly with your desktop environment
  • πŸ‘€ Beautiful TUI for browsing and restoring deleted files
  • ⚑️ Blazing fast with concurrent operations
  • πŸ–₯️ Cross-platform support (Linux, macOS, Windows)
  • 🎨 Syntax highlighting for previewing trashed files
  • πŸ” Powerful search and filtering capabilities
  • πŸ’½ Multi-Volume Support - Handle file deletions across multiple mount points effortlessly
  • βš™οΈ Rich Configuration - Customize everything from file filters and color schemes to preview options and UI density
<!-- - Functions like the `rm` command but moves files to the trash instead of permanently deleting them. - Follows the [XDG Trash specification](https://specifications.freedesktop.org/trash/latest/) for modern Linux desktop environments: - Supports `$XDG_DATA_HOME/Trash` or `~/.local/share/Trash` - Compatible with other applications using the XDG trash - 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). -->

For detailed information about gomi's architecture and design decisions, see architecture.md.

Usage

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

This launches an interactive file browser where you can:

  • Navigate through trashed files using arrow keys
  • Press / to start searching/filtering files by name
  • Press Tab to select multiple files for restoration
  • Press Space to preview file contents
  • Press Enter to restore selected files

Installation

Getting Started in Seconds

Get started with gomi in just one command:

curl -fsSL https://gomi.dev/install | bash

To install it in a specific directory (e.g., ~/.local/bin):

curl -fsSL https://gomi.dev/install | PREFIX=~/.local/bin bash

| Environment Variable | Description | Default | |---|---|---| | VERSION | Version to install (available versions are listed on Releases) | latest | | PREFIX | Installation path | ~/bin |

From Prebuilt Binaries

Download the latest precompiled binary from [GitHub Releases][release] and place it in a directory included in your $PATH.

Using a CLI package manager

Packaging status

Using afx

Write a YAML manifest, then run the install command.

github:
- name: babarot/gomi
  description: Trash can in CLI
  owner: babarot
  repo: gomi
  release:
    name: gomi
    tag: v1.6.3
  command:
    link:
    - from: gomi
    alias:
      rm: gomi
afx install

Using Homebrew

brew install gomi

Using Scoop

scoop bucket add babarot https://github.com/babarot/scoop-bucket
scoop install gomi

Using AUR

You can install gomi using an AUR helper:

yay -S gomi
paru -S gomi

Find it on AUR.

Configuration

<!-- In `gomi`, you can customize its behavior and appearance using a YAML configuration file. When you run `gomi` for the first time, a default config (like the one below) will be automatically generated at `~/.config/gomi/config.yaml`. -->

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:

# Controls the core functionality of gomi's trash operations.
# Includes settings for trash directory strategy (XDG or legacy),
# restoration behavior, and permanent deletion features.
# These settings directly affect how files are handled.
core:
  trash:
    strategy: auto      # or "xdg" or "legacy"
                        # Strategy determines which trash specification to use.

    gomi_dir: ~/.gomi   # Path to store trashed files. Can be changed to another location.
                        # Supports environment variable expansion like $HOME or ~.
                        # If empty, defaults to ~/.gomi.
                        # This is a legacy storage setting. If set with strategy "auto",
                        # gomi will automatically use legacy storage as the primary backend.

    home_fallback: true # If true, fallbacks to home trash when external trash fails

    forbidden_paths:    # List of paths that cannot be moved to trash for safety
      - "$HOME/.local/share/Trash"
      - "$HOME/.trash"
      - "$XDG_DATA_HOME/Trash"
      - "/tmp/Trash"
      - "/var/tmp/Trash"
      - "$HOME/.gomi"
      - "/"
      - "/etc"
      - "/usr"
      - "/var"
      - "/bin"
      - "/sbin"
      - "/lib"
      - "/lib64"

  restore:
    confirm: false      # If true, prompts for confirmation before restoring (yes/no)
    verbose: true       # If true, displays detailed restoration information

  permanent_delete:
    enable: false       # If true, enables permanent deletion of files from trash.
                        # When enabled, files can be deleted permanently using the 'D' key.
                        # This operation is irreversible and bypasses the trash.
                        # Default is false for safety.

# Customizes the interactive interface used during file restoration.
# Provides detailed customization of colors, layouts, and preview features.
# Controls how files and directories are displayed in both list and detail views.
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 - color of the cursor border and text
      selected: "#5FB458"       # green - color of selected files
      filter_match: "#F39C12"   # orange - color of matched text when searching
      filter_prompt: "#7AA2F7"  # blue - color of the "Filter:" prompt text
      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"
    deletion_dialog: "#FF007F" # pink
  exit_message: bye!   # Customizable exit message
  paginator_type: dots # or arabic

# Configures which files appear in the restoration list.
# Note: While all trash operations are recorded in history,
# these settings only control file visibility when browsing the trash (`gomi -b`).
# Provides filtering options by age, patterns, size, etc.,
# to help manage large trash directories.
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: ""        # No minimum size filter (set e.g. "1KB" to exclude empty files)
      max: 10GB      # Exclude files larger than 10GB

# Enables debugging and operation logging for gomi.
# When enabled, records all operations including file movements,
# restorations, and encountered errors.
# Includes rotation settings to manage log file sizes and retention.
logging:
  enabled: false     # Enable/disable logging
  level: info        # Avai

Related Skills

View on GitHub
GitHub Stars532
CategoryDevelopment
Updated3d ago
Forks14

Languages

Go

Security Score

100/100

Audited on Mar 26, 2026

No findings