{"id":51672691,"url":"https://github.com/thurstonsand/ghosttykit.nvim","last_synced_at":"2026-07-15T02:05:46.496Z","repository":{"id":366184750,"uuid":"1267032884","full_name":"thurstonsand/ghosttykit.nvim","owner":"thurstonsand","description":"Generated Neovim plugin mirror for GhosttyKit","archived":false,"fork":false,"pushed_at":"2026-06-20T15:54:46.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-20T17:25:04.594Z","etag":null,"topics":["ghostty","ghosttykit","lua","luarocks","neovim"],"latest_commit_sha":null,"homepage":"https://github.com/thurstonsand/ghosttykit","language":"Lua","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thurstonsand.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-06-12T06:53:23.000Z","updated_at":"2026-06-20T15:54:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/thurstonsand/ghosttykit.nvim","commit_stats":null,"previous_names":["thurstonsand/ghosttykit.nvim"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/thurstonsand/ghosttykit.nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thurstonsand%2Fghosttykit.nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thurstonsand%2Fghosttykit.nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thurstonsand%2Fghosttykit.nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thurstonsand%2Fghosttykit.nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thurstonsand","download_url":"https://codeload.github.com/thurstonsand/ghosttykit.nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thurstonsand%2Fghosttykit.nvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35487017,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-15T02:00:06.706Z","response_time":131,"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":["ghostty","ghosttykit","lua","luarocks","neovim"],"created_at":"2026-07-15T02:05:45.785Z","updated_at":"2026-07-15T02:05:46.481Z","avatar_url":"https://github.com/thurstonsand.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GhosttyKit Neovim plugin\n\n`ghosttykit.nvim` lets Neovim navigation keys move between Neovim windows and Ghostty splits as one workspace.\n\n## Installation\n\nInstall GhosttyKit first. The Neovim plugin talks to the `ghosttykitd` daemon through the Lua SDK.\n\nStable channel:\n\n```sh\nbrew install thurstonsand/ghosttykit/ghosttykit\nopen -a Ghostty\nbrew services start thurstonsand/ghosttykit/ghosttykit\ngty doctor\n```\n\nWith lazy.nvim:\n\n```lua\n{\n  \"thurstonsand/ghosttykit.nvim\",\n  version = \"*\",\n  opts = {},\n}\n```\n\nNightly channel. Pair `ghosttykit-nightly` with the plugin mirror's `main` branch:\n\n```sh\nbrew install thurstonsand/ghosttykit/ghosttykit-nightly\nbrew services start thurstonsand/ghosttykit/ghosttykit-nightly\n```\n\n```lua\n{\n  \"thurstonsand/ghosttykit.nvim\",\n  branch = \"main\",\n  opts = {},\n}\n```\n\nSee the root [GhosttyKit README](../README.md#install) for the full install flow and Automation permission details.\n\nLoad the plugin at startup. It coordinates focus state with Ghostty, so lazy loading is not recommended.\n\nThe bundled lazy.nvim spec maps CTRL-h, CTRL-j, CTRL-k, and CTRL-l through lazy.nvim `keys`.\n\nWith other plugin managers, load the plugin at startup, configure it, and bind the provided `\u003cPlug\u003e` mappings:\n\n```lua\nrequire(\"ghosttykit.nvim\").setup({})\n\nvim.keymap.set(\"n\", \"\u003cC-h\u003e\", \"\u003cPlug\u003e(GhosttyKitNavigateLeft)\")\nvim.keymap.set(\"n\", \"\u003cC-j\u003e\", \"\u003cPlug\u003e(GhosttyKitNavigateDown)\")\nvim.keymap.set(\"n\", \"\u003cC-k\u003e\", \"\u003cPlug\u003e(GhosttyKitNavigateUp)\")\nvim.keymap.set(\"n\", \"\u003cC-l\u003e\", \"\u003cPlug\u003e(GhosttyKitNavigateRight)\")\n```\n\n## Ghostty key table\n\nAdd this fragment to your Ghostty config. It makes `Ctrl-h/j/k/l` move between Ghostty splits in shells, while passing those keys through to Neovim when `ghosttykit.nvim` activates the `nvim` key table.\n\n```ghostty\n# ctrl-hjkl navigates Ghostty splits unless this surface is in the nvim key table\nkeybind = ctrl+h=goto_split:left\nkeybind = ctrl+j=goto_split:down\nkeybind = ctrl+k=goto_split:up\nkeybind = ctrl+l=goto_split:right\nkeybind = nvim/\nkeybind = nvim/ctrl+h=text:\\x08\nkeybind = nvim/ctrl+j=text:\\x0a\nkeybind = nvim/ctrl+k=text:\\x0b\nkeybind = nvim/ctrl+l=text:\\x0c\n```\n\nThe key table must be named `nvim`. GhosttyKit does not edit your Ghostty config automatically.\n\n## Options\n\n```lua\n{\n  \"thurstonsand/ghosttykit.nvim\",\n  version = \"*\", -- use branch = \"main\" with ghosttykit-nightly\n  opts = {\n    key_table = \"nvim\",\n    float_win_behavior = \"previous\",\n    notify_errors = false,\n  },\n}\n```\n\n- `key_table`: Ghostty key table to activate while Neovim is focused. Default: `\"nvim\"`.\n- `float_win_behavior`: Floating window navigation. `\"previous\"` returns to the previous normal window. `\"mux\"` sends navigation to Ghostty instead. Default: `\"previous\"`.\n- `notify_errors`: Show daemon errors with `vim.notify()`. Navigation failures are quiet by default. Default: `false`.\n\n## Mappings\n\nlazy.nvim users can customize mappings through their plugin spec `keys`:\n\n```lua\n{\n  \"thurstonsand/ghosttykit.nvim\",\n  keys = {\n    { \"\u003cC-h\u003e\", false },\n    { \"\u003cC-l\u003e\", false },\n    { \"\u003cA-h\u003e\", function() require(\"ghosttykit.nvim\").navigate(\"left\") end,\n      desc = \"GhosttyKit navigate left\" },\n    { \"\u003cA-l\u003e\", function() require(\"ghosttykit.nvim\").navigate(\"right\") end,\n      desc = \"GhosttyKit navigate right\" },\n  },\n  opts = {},\n}\n```\n\nOther plugin managers can map the provided `\u003cPlug\u003e` mappings:\n\n```lua\nvim.keymap.set(\"n\", \"\u003cC-h\u003e\", \"\u003cPlug\u003e(GhosttyKitNavigateLeft)\")\nvim.keymap.set(\"n\", \"\u003cC-j\u003e\", \"\u003cPlug\u003e(GhosttyKitNavigateDown)\")\nvim.keymap.set(\"n\", \"\u003cC-k\u003e\", \"\u003cPlug\u003e(GhosttyKitNavigateUp)\")\nvim.keymap.set(\"n\", \"\u003cC-l\u003e\", \"\u003cPlug\u003e(GhosttyKitNavigateRight)\")\n```\n\n## Health\n\nRun:\n\n```vim\n:checkhealth ghosttykit\n```\n\nThe health check reports Ghostty or bridge context and runs the GhosttyKit `doctor` protocol request.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthurstonsand%2Fghosttykit.nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthurstonsand%2Fghosttykit.nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthurstonsand%2Fghosttykit.nvim/lists"}