Skip to content

GaimsDevSoftware/linuxpop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

178 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LinuxPop

Like PopClip on the Mac, but for Linux.

LinuxPop in action: select text, a popup of context actions appears, here translating the selection

Highlight some text and a little bar of buttons shows up right over it. Copy it, open it, search it, translate it, run it as a command, send it to an AI, encode it, do maths on it. Whatever makes sense for whatever you grabbed. You never have to move your hands away from where you were already working.

It runs on X11 (Cinnamon, GNOME-on-X11, KDE, XFCE, MATE, take your pick) and natively on KDE Plasma 6 / Wayland. Free, open source, and nothing phones home.

Heads up if you're on Linux Mint / Cinnamon (or another X11 desktop): treat 0.9.0 as a beta. Most of the testing and polish this round went into KDE Plasma 6 / Wayland. The X11 side still works (it's where LinuxPop started, after all), but I haven't re-checked every feature on real hardware yet, so you might hit a rough spot or two. If you do, open an issue. That's genuinely the fastest way to get your setup sorted.


What it does

  • Reads what you selected and shows the buttons that fit: links, shell commands, file paths, emails, or just plain text.
  • Global hotkey to pop the bar on your current selection from any app.
  • Tray icon for settings, the plugin manager, and a quick on/off toggle.
  • Plugins are just .py files. Drop one in ~/.config/linuxpop/plugins/, or grab one from the built-in list.
  • Plenty come bundled: Base64, JSON pretty-print, URL encode/decode, a calculator, case conversion, slugify, QR codes, in-place translate, send-to-AI, local Ollama, and run-in-terminal for things that look like commands.
  • Double-click a word (while holding a modifier) to pop the bar. Works on real Wayland, not just XWayland.
  • Your text stays on your machine unless a plugin obviously sends it somewhere. The "Send to Claude" button, for example, hands off to Claude via its claude:// link (or your browser if that isn't set up).

Install

Flatpak (recommended)

It's a GPG-signed Flatpak served from its own auto-updating repo, so there's no Flathub account or approval standing in the way. One command:

flatpak install --from https://gaimsdevsoftware.github.io/linuxpop-flatpak/linuxpop.flatpakref
flatpak run io.github.GaimsDevSoftware.LinuxPop

New to Flatpak? Add the Flathub runtimes first: flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

Want a single file instead? Grab the .flatpak bundle from the latest release and run flatpak install --bundle linuxpop-*.flatpak. There's a full walkthrough at https://gaimsdevsoftware.github.io/linuxpop-flatpak/.

In the Flatpak build, "open file/folder" works (it gets read-only access to your home). Screen OCR isn't bundled yet; that's coming in a later release.

Native packages

Debian, Ubuntu, Linux Mint: grab linuxpop_*_all.deb from the latest release:

sudo apt install ./linuxpop_0.9.2_all.deb

Fedora (COPR): a native RPM that updates through dnf:

sudo dnf copr enable gaimsdevsoftware/linuxpop
sudo dnf install linuxpop

From source

1. System dependencies

# Ubuntu / Linux Mint / Debian
sudo apt-get install -y python3 python3-gi python3-gi-cairo gir1.2-gtk-3.0 \
    gir1.2-ayatanaappindicator3-0.1 xclip xdotool xdg-utils python3-xlib

# Fedora
sudo dnf install -y python3 python3-gobject gtk3 \
    libayatana-appindicator-gtk3 xclip xdotool xdg-utils python3-xlib

# Arch
sudo pacman -S python python-gobject gtk3 libayatana-appindicator \
    xclip xdotool xdg-utils python-xlib

Optional: qrencode for the QR plugin, ollama for the local-AI plugin.

2. Install LinuxPop

git clone https://github.com/GaimsDevSoftware/linuxpop.git ~/linuxpop
cd ~/linuxpop
bash install.sh

install.sh sets up autostart and checks your dependencies. To start it right away without logging out:

python3 ~/linuxpop/main.py

To uninstall:

bash ~/linuxpop/install.sh --uninstall

Using it

  • Select text in any app and the popup appears above your selection.
  • Press the hotkey (default Super+Shift+Y) and the popup appears at the cursor with whatever's selected.
  • Hit Esc, click somewhere else, or just wait a few seconds and it goes away.
  • The tray icon toggles auto-popup, opens Settings, and manages Plugins.

Settings

Right-click the tray icon and pick Settings, or edit ~/.config/linuxpop/settings.json by hand.

Key Default Description
hotkey super+shift+y Combo to summon popup. Record via Settings dialog.
hotkey_source primary primary (highlighted) or clipboard
show_on_selection true Auto-popup when you select text
auto_hide_initial_ms 8000 Hide if mouse never reaches popup
auto_hide_leave_ms 4000 Hide this long after mouse leaves the safe zone
min_selection_length 1 Ignore selections shorter than this
terminal_keep_open true Keep terminal open after running a command
ai_paste_delay_seconds 2.5 Wait before auto-pasting into a chat AI
double_click_popup_enabled false Hold a modifier + double-click a word to pop the bar
double_click_modifier ctrl Modifier for the double-click trigger (ctrl/alt/super/shift)
translate_target_lang en Target language for the Translate plugin (ISO code)
editable_atspi_listener_enabled false Use AT-SPI for editable detection + selection geometry
popup_anchor_to_selection true Anchor popup to the selection rect (needs AT-SPI enabled)

Plugins

Open Plugins… from the tray menu to add or remove the built-in ones, or drop your own .py file into ~/.config/linuxpop/plugins/.

A plugin file just needs a top-level register(register_plugin) function:

from classifier import ContentType
from plugin_base import Plugin

def _handler(text: str) -> None:
    print("got:", text)

def register(register_plugin) -> None:
    register_plugin(Plugin(
        name="my-plugin",
        icon="emblem-favorite",
        tooltip="Do something",
        handler=_handler,
        content_types=(ContentType.PLAIN_TEXT,),
        priority=50,
    ))

See CONTRIBUTING.md for the full plugin API.


Known rough edges

  • Mint / Cinnamon and X11 are beta in 0.9.0. The recent work went into KDE Plasma 6 / Wayland. The X11 backend (Cinnamon, GNOME-on-X11, XFCE, MATE) still runs, but it didn't get a full pass on real hardware this cycle. Expect the odd glitch, and please file issues. It's the quickest path to a solid 1.0.
  • Wayland support means KDE Plasma for now. LinuxPop has a real Wayland backend on KDE Plasma 6: selection through wl-clipboard, popup placement through gtk-layer-shell, cursor position through KWin's scripting API. Other compositors (GNOME, wlroots) drop back to the X11 path under XWayland. There's more detail in docs/FEDORA-KDE.md. On KDE Wayland the global hotkey runs through KGlobalAccel (check it actually bound under System Settings, Shortcuts), paste goes through ydotool, and the active-window blocklist isn't wired up yet. Popup placement, hover persistence, and click-outside dismissal all work natively. You can anchor the popup to the selected text instead of the mouse if you turn on desktop accessibility (AT-SPI).
  • HiDPI works, but I've mostly tested it at 2× scaling. File an issue if the popup lands in the wrong spot on your setup.
  • The odd input grab. If another app is holding an X11 input grab (an open menu, say), the popup might not catch your outside-click right away.

License

MIT. See LICENSE.

About

PopClip for Linux: highlight text, get a popup of context-aware actions (copy, search, translate, run, send to AI). Native X11 + KDE Plasma 6 Wayland. Free, open source, no telemetry.

Topics

Resources

License

Contributing

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors