#!/usr/bin/env python3 import subprocess import sys import shutil import urllib.parse import os DMENU_OPTS = ["-i", "-fn", "monospace:size=12", "-nb", "#151515", "-nf", "#bbbbbb", "-sb", "#005577", "-sf", "#eeeeee"] BROWSER = "qutebrowser" NOTIFIER = "notify-send" CHOICES = [ "Paulgo", "URL", "Incognito URL", "YouTube", "Codeberg", "Tildegit", "IPLeak", "Safebooru", "Wikipedia" ] def notify(title, message): subprocess.run([NOTIFIER, title, message], stderr=subprocess.DEVNULL) def run_dmenu(prompt, options=None): cmd = ["dmenu", *DMENU_OPTS, "-p", prompt] stdin = "\n".join(options) if options else None proc = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True) out, _ = proc.communicate(stdin) return out.strip() def get_input(prompt, prefix=""): text = run_dmenu(prompt) if not text: notify("Error", "No input provided") sys.exit(1) return prefix + urllib.parse.quote_plus(text) def is_browser_running(): try: proc = subprocess.Popen(["pgrep", "-f", BROWSER], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) proc.communicate() return proc.returncode == 0 except: return False def open_url(url): try: if is_browser_running(): subprocess.Popen([BROWSER, ":open", "-t", url]) else: subprocess.Popen([BROWSER, url]) except Exception as e: notify("Error", f"Failed to open browser: {url}\n{e}") sys.exit(1) def search_with_paulgio(query): return f"https://paulgo.io/search?q={urllib.parse.quote_plus(query)}" def main(): choice = run_dmenu("Where to?", CHOICES) if not choice: notify("Error", "No selection made") sys.exit(1) elif choice == "Codeberg": open_url(get_input("Username & repo:", "https://codeberg.org/")) elif choice == "Tildegit": open_url(get_input("Username & repo:", "https://tildegit.org/")) elif choice == "IPLeak": open_url("https://ipleak.net") elif choice == "Paulgo": open_url(search_with_paulgio(get_input("Search Paulgo:"))) elif choice == "Wikipedia": open_url("https://en.wikipedia.org/wiki/Special:Search?search=" + get_input("Search Wikipedia:")) elif choice == "URL": url = run_dmenu("Enter URL:") if not url: notify("Error", "No URL entered") sys.exit(1) if not url.startswith("http"): url = "https://" + url open_url(url) elif choice == "Incognito URL": url = run_dmenu("Enter incognito URL:") if not url: notify("Error", "No URL entered") sys.exit(1) if not url.startswith("http"): url = "https://" + url subprocess.Popen(["brave-bin", "--incognito", url]) elif choice == "YouTube": open_url("https://youtube.com/results?search_query=" + get_input("Search YouTube:")) elif choice == "Safebooru": open_url("https://safebooru.org/index.php?page=post&s=list&tags=" + get_input("Search Safebooru:")) else: notify("Error", f"Invalid selection: {choice}") sys.exit(1) if __name__ == "__main__": for cmd in ["dmenu", BROWSER]: if shutil.which(cmd) is None: print(f"Error: Required command '{cmd}' not found", file=sys.stderr) sys.exit(1) main()