GitHub – scorredoira/launchpick


Native macOS launcher and window switcher. Free and open source.

Launchpick Swift

macOS makes two things surprisingly hard:

Launching apps with parameters. On Linux you create a .desktop file and you’re done. On macOS there’s no simple way to have a shortcut that opens, say, VS Code in a specific project folder. Automator is clunky, Shortcuts is limited, and the Dock doesn’t support arguments.

Switching between windows, not apps. Cmd+Tab switches between applications. If you have 5 Chrome windows or 3 VS Code projects open, Cmd+Tab just takes you to “Chrome” — you can’t pick which window. You can’t see individual windows, you can’t reach minimized windows, and Cmd+` only cycles within the currently focused app. On Linux and Windows, Alt+Tab shows every window.

Launchpick solves both in a single lightweight app.

Launchpick panel — open apps with custom arguments

One keyboard shortcut opens a Spotlight-like grid where each icon launches a preconfigured command — an app, a URL, a script, or an app with specific arguments like a project folder.

Launchpick panel

Window switcher — switch between windows, not apps

Option+Tab shows every individual window across all apps — including minimized ones. Pick any VS Code project, any Chrome window, any Terminal session. Release Option to switch to it. Works exactly like Alt+Tab on Linux/Windows.

Window switcher

Download the latest release for your Mac:

Open the DMG and drag Launchpick.app to /Applications.

  • Global hotkey (Cmd+Shift+Space) to toggle the launcher panel
  • Window switcher (Option+Tab) — switch between individual windows
  • Interactive shortcut recorder — click and press keys to set shortcuts
  • Icon grid with search/filter bar
  • Menu bar icon with quick access to settings
  • Tabbed settings UI with General and Launchers tabs
  • Icon picker with app icons, SF Symbols, and custom images
  • Auto-detect icons from open -a commands
  • Launch at Login toggle
  • JSON config at ~/.config/launchpick/config.json
  • Open App: launch any application, optionally with arguments (e.g., open VS Code with a specific project folder)
  • Open URL: open any URL in the default browser
  • Shell Command: run any shell command (supports full shell syntax: pipes, ;, &&, redirects, etc.)
  • Kill & Restart: use shell syntax to restart a process, e.g. killall handy 2>/dev/null; handy

Accessibility (required for Window Switcher)

On first launch, macOS will show a dialog asking for Accessibility permission. This is needed for the Option+Tab window switcher to intercept keyboard events.

  1. Click “Open System Settings” in the dialog
  2. Toggle Launchpick ON in Privacy & Security > Accessibility

If you miss the dialog, go to System Settings > Privacy & Security > Accessibility, click +, press Cmd+Shift+G, type /Applications/Launchpick.app, and add it.

The app will automatically detect when permission is granted — no restart needed.

Requires macOS 13+ and Xcode Command Line Tools (xcode-select --install).

This builds the app and creates build/Launchpick.app.

cp -r build/Launchpick.app /Applications/
open /Applications/Launchpick.app

The config file is created automatically on first launch at ~/.config/launchpick/config.json. Example:

{
  "shortcut": "cmd+shift+space",
  "columns": 4,
  "launchers": [
    {
      "name": "Terminal",
      "exec": "open -a 'Terminal'"
    },
    {
      "name": "My Project",
      "exec": "open -a 'Visual Studio Code' '/path/to/project'",
      "icon": "/Applications/Visual Studio Code.app"
    },
    {
      "name": "GitHub",
      "exec": "open 'https://github.com'",
      "icon": "sf:globe"
    },
    {
      "name": "Restart Handy",
      "exec": "killall handy 2>/dev/null; handy",
      "icon": "sf:arrow.clockwise"
    }
  ]
}
  • Auto-detect (default): resolves the icon from the open -a command
  • App icon: path to a .app bundle (e.g., /Applications/Safari.app)
  • SF Symbol: prefix with sf: (e.g., sf:globe, sf:terminal.fill)
  • Custom image: path to any image file



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *