Skip to content

Anmolnoor/hold-it

HoldIt

License: GPL v3 macOS 13+ Swift

A macOS menu bar utility for drag-and-drop file collection shelves.

Features

  • Floating shelves — temporary collection panels that hover above other windows
  • Shake-to-summon — shake your cursor while dragging to instantly open a preview shelf
  • Global hotkey — press Option-Command-S to create a new shelf anytime
  • Drag in, drag out — drop files, folders, text, and URLs onto a shelf, then drag them back out to any app
  • Multiple shelves — open several shelves at once with cascade positioning
  • Menu bar integration — lives in the menu bar, never clutters your dock
  • Configurable dimensions — adjust shelf width and height to your preference
  • Launch at login — start HoldIt automatically when you log in
  • macOS 13 Ventura and later

Building from Source

Requirements

  • macOS 13.0+
  • Xcode 15+ (Swift 5)

Setup

git clone git@github.com:Anmolnoor/hold-it.git
cd hold-it
open ShelfKit.xcodeproj

Select the ShelfKit scheme in Xcode, then build and run (Cmd+R).

Note: HoldIt runs as a menu bar utility (no dock icon). After launching, look for the icon in the menu bar.

Usage

  • Create a shelf — click the menu bar icon and select "New Shelf", or press Option-Command-S
  • Shake gesture — while dragging a file, shake your mouse horizontally to summon a preview shelf
  • Collect items — drop files, folders, text snippets, or URLs onto any shelf
  • Export items — drag items from a shelf to another app
  • Settings — accessible from the menu bar icon

Architecture

HoldIt uses the internal module name ShelfKit. The codebase is organized as:

Directory Purpose
App/ Application lifecycle, menu bar controller, settings window
Domain/ Core models (Shelf, ShelfItem)
DragDrop/ Global drag monitoring, drop handling, shake detection, hotkeys
Storage/ UserDefaults-based preferences
UI/ SwiftUI views, view model, presentation modes
Windowing/ NSPanel management, screen positioning, window coordination

Built with AppKit + SwiftUI, Combine for reactive state, and Carbon for global hotkey support.

Contributing

Contributions are welcome! Please read the Contributing Guide before submitting a pull request.

If you find a bug or have a feature idea, please open an issue.

License

This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.

About

No description, website, or topics provided.

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages