{"id":49392897,"url":"https://github.com/blindfs/glyphlow","last_synced_at":"2026-05-23T02:07:23.647Z","repository":{"id":353760392,"uuid":"1211103567","full_name":"blindFS/Glyphlow","owner":"blindFS","description":"Feature-rich manipulation of UI elements on macOS with minimal key strokes.","archived":false,"fork":false,"pushed_at":"2026-05-18T07:27:29.000Z","size":250,"stargazers_count":14,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-18T08:34:55.573Z","etag":null,"topics":["keybindings","macos","mouseless","ocr","popclip"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/blindFS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-15T04:23:04.000Z","updated_at":"2026-05-18T07:27:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/blindFS/Glyphlow","commit_stats":null,"previous_names":["blindfs/glyphlow"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/blindFS/Glyphlow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blindFS%2FGlyphlow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blindFS%2FGlyphlow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blindFS%2FGlyphlow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blindFS%2FGlyphlow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blindFS","download_url":"https://codeload.github.com/blindFS/Glyphlow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blindFS%2FGlyphlow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33379721,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T01:21:08.577Z","status":"online","status_checked_at":"2026-05-23T02:00:05.530Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["keybindings","macos","mouseless","ocr","popclip"],"created_at":"2026-04-28T14:06:42.201Z","updated_at":"2026-05-23T02:07:23.642Z","avatar_url":"https://github.com/blindFS.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Towards a Mouse Free UX for Most APPs on macOS\n\nThis tiny tool aims to ease the pain of\n\n1. Mouse selection (mainly text)\n2. Selecting actions in the pop-up menu after right clicking\n3. Recurring tasks given selected text\n\n- You can think of it as a purely keyboard and open-source version of\n[PopClip](https://www.popclip.app/) with some extra utility features.\n- And it allows you to interact with some UI text that is not\neven possible to select using a mouse.\nLike those in a video game or in a button.\n\n## Demo\n\n### Text Manipulation\n\nText can be extracted from either UI elements or Apple VisionKit OCR results\n\n\u003chttps://github.com/user-attachments/assets/7955f04a-2d4d-4f58-ac66-26677904e0c7\u003e\n\n### Image Copying and Input Text Editing\n\nFor users who are not satisfied with the default text editing experiences of editable\ntext fields, this app allows you to edit them in your favorite editor,\nand automatically sync the saved content back to the UI element.\n\n\u003chttps://github.com/user-attachments/assets/2ecb1a80-435c-467d-abfa-e58bde521a00\u003e\n\n### Multi-selection\n\n1. Toggle multi-selection mode on (Shift key)\n2. Select starting/ending piece of text\n3. Select the other side, and the program will automatically guess the\nparagraph of intention\n\nHere's an example of how to select and translate the lyrics in Apple Music.\n\n\u003chttps://github.com/user-attachments/assets/e1a2d66d-627a-4bd4-8601-90b841fb477e\u003e\n\n#### Precise selection\n\nIf you want to select a specific sub-piece of text in an identified element,\nyou can\n\n1. Split the whole context into pieces, the interface of word picker will pop up\n2. Toggle multi-selection mode on within the word picker\n3. Select both sides according to the hint keys\n\n\u003cimg width=\"440\" height=\"387\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/7320969c-344f-40bd-b74d-960768420b2e\" /\u003e\n\n### Workflow\n\nUsers can define their own workflows in terms of sequences\nof primitive actions.\n\nFor instance, with the following configuration snippet,\nwe can swiftly execute the utilities of the apple intelligence writing tool.\n\n\u003chttps://github.com/user-attachments/assets/b9b4b031-5350-4ed4-b36a-ee5a549792d4\u003e\n\n```toml\n[[text_workflows]]\ndisplay = \" Rewrite\"\nkey = \"R\"\nstarting_role = \"TextField\"\nactions = [\n  \"Focus\",\n  \"SelectAll\",\n  \"ShowMenu\",\n  { Sleep = 150 },\n  { SearchFor = { role = \"MenuItem\", title = \"Rewrite\" } },\n  \"Press\",\n]\n```\n\n### Other Features\n\n- UI element tree exploring mode (E)\n  - Useful for debugging and screenshot taking\n- Apple Dictionary support in simple pop-up window\n  - Avoids the hassle of opening the dictionary app, like what PopClip will do\n  - Dictionary CSS is respected to make the text more readable\n\n\u003cimg width=\"363\" height=\"316\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/5d89c973-c043-4ba9-a760-727e81fc5c96\" /\u003e\n\n- Easily extensible text actions, please refer to the [Configuration](#configuration) section\n  - Avoids the hassle of plugin management, easier to share across devices\n- Act on text from clipboard\n- Customizable theme\n\n## Getting Started\n\n### Homebrew\n\n1. Install with brew tap and start the service\n\n```bash\nbrew tap blindfs/tools\nbrew install glyphlow\nbrew services start glyphlow\n```\n\n2. Grant accessibility permission to it\n3. Press the global trigger (defaults to \"ALT + g\") to start\n\n### Nix\n\n1. Add another input to your system flake file\n\n```nix\n  inputs = {\n    # ...\n    # glyphlow\n    glyphlow.url = \"github:blindFS/Glyphlow\";\n    glyphlow.inputs.nixpkgs.follows = \"nixpkgs\";\n  };\n```\n\n2. Add the following to your home-manager configuration\n\n```nix\nimports = [\n  inputs.glyphlow.homeManagerModules.glyphlow\n];\n\nprograms.glyphlow = {\n  enable = true;\n  settings = {\n    # ...\n  };\n};\n```\n\nHere's an [example](https://github.com/blindFS/modern-dot-files/blob/main/nix/modules/home/glyphlow.nix)\nwritten in [dendritic pattern](https://github.com/mightyiam/dendritic).\n\n3. Grant accessibility permission to it\n4. Press the global trigger (defaults to \"ALT + g\") to start\n\n## Purging\n\nThis app is designed to be lean and clean, it only generates 2 files:\n\n1. A configuration file `$XDG_CONFIG_HOME/glyphlow/config.toml` or\n`~/.config/glyphlow/config.toml` if the env-var is not set.\n2. A cache file for temporary editing: `$XDG_CACHE_HOME/glyphlow/tempfile.md`\nor `~/.cache/glyphlow/tempfile.md`.\n\n## Configuration\n\nHere's how I configure it to perform those actions shown in the demo videos.\nA comprehensive configuration file is generated when you run this app at the first time.\n\n```toml\ncolored_frame_min_size = 100\nelement_min_width = 15\nelement_min_height = 15\nocr_languages = [\n  \"zh-Hans\",\n  \"ja-JP\",\n  \"en-US\",\n]\ndictionaries = [\n  \"牛津英汉汉英词典\",\n  \"New Oxford American Dictionary\",\n]\n\n[[text_actions]]\ndisplay = \"󰊭 Google Search\"\nkey = 'G'\ncommand = \"nu\"\nargs = [\"-c\", \"r#'{glyphlow_text}'# | url encode | ^open $'https://google.com/search?q=($in)'\"]\n\n[[text_actions]]\ndisplay = \"󰖬 Wikipedia Search\"\nkey = 'W'\ncommand = \"nu\"\nargs = [\"-c\", \"r#'{glyphlow_text}'# | url encode | ^open $'https://en.wikipedia.org/wiki/Special:Search/($in)'\"]\n\n[[text_actions]]\ndisplay = \"󰊿 Goolge Translate -\u003e zh_cn\"\nkey = 'T'\ncommand = \"nu\"\nargs = [\"-c\", \"r#'{glyphlow_text}'# | url encode | ^open $'https://translate.google.com/?sl=auto\u0026tl=zh_cn\u0026text=($in)\u0026op=translate'\"]\n\n[editor]\ndisplay = \" Editor\"\nkey = 'V'\n# command = \"tmux\"\n# args = [\"new-window\", \"-t\", \"dev\", \"^open -a Ghostty; ^nvim {glyphlow_temp_file}\"]\ncommand = \"open\"\nargs = [\"-a\", \"Zed\", \"{glyphlow_temp_file}\"]\n\n[theme]\nhint_font = \"AndaleMono:16\"\nmenu_font = \"IosevkaTerm Nerd Font Mono:26\"\n```\n\n## Roadmap\n\n1. [X] nix-flake\n2. [ ] menu bar icon\n\n## Acknowledgements\n\nThis project is inspired by\n\n1. [Neru](https://github.com/y3owk1n/neru)\n2. [PopClip](https://www.popclip.app/)\n3. [Smartisan Big Bang](https://github.com/SmartisanTech/android)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblindfs%2Fglyphlow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblindfs%2Fglyphlow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblindfs%2Fglyphlow/lists"}