{"id":49025070,"url":"https://github.com/martuscellifaria/ahoicpp.nvim","last_synced_at":"2026-04-20T22:00:52.037Z","repository":{"id":347369852,"uuid":"1193414787","full_name":"martuscellifaria/ahoicpp.nvim","owner":"martuscellifaria","description":"A.H.O.I. Labs (Alex's Heavily Opinionated Interfaces) C++ Project plugin for Neovim","archived":false,"fork":false,"pushed_at":"2026-04-14T15:22:09.000Z","size":1555,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-14T17:20:03.402Z","etag":null,"topics":["bootstrapper","build-tool","cmake","cplusplus","cpp","cross-platform","lua","neovim","neovim-plugin","project-management","project-scaffolding"],"latest_commit_sha":null,"homepage":"","language":"Lua","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/martuscellifaria.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-03-27T07:40:43.000Z","updated_at":"2026-04-14T15:22:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/martuscellifaria/ahoicpp.nvim","commit_stats":null,"previous_names":["martuscellifaria/ahoicpp.nvim"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/martuscellifaria/ahoicpp.nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martuscellifaria%2Fahoicpp.nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martuscellifaria%2Fahoicpp.nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martuscellifaria%2Fahoicpp.nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martuscellifaria%2Fahoicpp.nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/martuscellifaria","download_url":"https://codeload.github.com/martuscellifaria/ahoicpp.nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martuscellifaria%2Fahoicpp.nvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32067626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T21:26:33.338Z","status":"ssl_error","status_checked_at":"2026-04-20T21:26:22.081Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bootstrapper","build-tool","cmake","cplusplus","cpp","cross-platform","lua","neovim","neovim-plugin","project-management","project-scaffolding"],"created_at":"2026-04-19T06:00:43.155Z","updated_at":"2026-04-20T22:00:52.026Z","avatar_url":"https://github.com/martuscellifaria.png","language":"Lua","funding_links":[],"categories":["Project"],"sub_categories":["Assembly"],"readme":"# AhoiCpp\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![Neovim](https://img.shields.io/badge/Neovim-0.11+-blue.svg?logo=neovim)](https://neovim.io/)\n\nA.H.O.I. Labs (Alex's Heavily Opinionated Interfaces) presents you `AhoiCpp`.\n\nAhoiCpp is an opinionated way to start cross platform C++ projects in Neovim.\nAhoiCpp lets you create classes, libraries and your own app entrypoint with the respective build process.\n\n## Dependencies\n\nAhoiCpp assumes you have a C++ 23 capable compiler (I use g++ 14.3.0 on my development environment), `cmake`, `git` and `python` installed. If not, you should do it first.\nOf course you have to have `Neovim` as well, version `0.11` or higher is recommended, since some `vim.api` and `vim.fn` functions are new.\n\n\u0026nbsp;\n\n## Installation\n\n### Using [lazy.nvim](https://github.com/folke/lazy.nvim)\n\n```lua\n{\n    'martuscellifaria/ahoicpp.nvim',\n    config = function()\n      require('ahoicpp').setup()\n    end,\n}\n```\n\n### Manual Installation\n\nClone the repository and add it to your Neovim runtime path:\n\n```bash\ngit clone https://github.com/martuscellifaria/ahoicpp.nvim ~/.config/nvim/pack/plugins/start/ahoicpp.nvim\n```\n\n\u0026nbsp;\n\n## Usage\n\n### Default Keymaps\n\n| Command       | Description                                                                  |\n| ------------- | ---------------------------------------------------------------------------- |\n| `\u003cleader\u003ecph` | Opens the about/help menu from AhoiCpp                                       |\n| `\u003cleader\u003ecpa` | Creates C++ application with respective CMake files and scripts              |\n| `\u003cleader\u003ecpm` | Creates C++ class within modules directory and add CMake files               |\n| `\u003cleader\u003ecpd` | Creates C++ class within custom named directory and add CMake files          |\n| `\u003cleader\u003ecpe` | Clones external Git repository to the externals directory of the C++ project |\n| `\u003cleader\u003ecpt` | Toggles autocompilation at module and/or app creation (enabled by default)   |\n| `\u003cleader\u003ecpc` | Compiles the current C++ project                                             |\n\n### Configuration\n\nAhoiCpp provides a configurable interface. The default follows:\n\n```lua\n{\n    autocompile_on_create = true,\n    enable_popups = true,\n    git_init = true,\n    keymaps = {\n        group_c  = \"\u003cleader\u003ec\",\n        group_cp = \"\u003cleader\u003ecp\", \n        help = \"\u003cleader\u003ecph\",\n        create_app = \"\u003cleader\u003ecpa\",\n        create_module = \"\u003cleader\u003ecpm\",\n        create_module_dir = \"\u003cleader\u003ecpd\",\n        clone_external = \"\u003cleader\u003ecpe\",\n        toggle_autocompile = \"\u003cleader\u003ecpt\",\n        compile = \"\u003cleader\u003ecpc\",\n    },\n}\n```\n\nYou are also able to override the keymap bindings, for example:\n\n```lua\n{\n    'martuscellifaria/ahoicpp.nvim',\n    config = function()\n      require('ahoicpp').setup({keymaps = {compile = \"\u003cleader\u003ecc\"}})\n    end,\n}\n```\n\n### Project structure\n\nAfter running `\u003cleader\u003ecpa YourApp`:\n\n```\nYourApp/\n├── .ahoicpp\n├── .gitignore\n├── .git/\n├── CMakeLists.txt\n├── AhoiCppProject.cmake\n├── AhoiCppExternals.cmake\n├── build.py\n├── App/\n│   ├── AhoiCppSubdirs.cmake\n│   ├── CMakeLists.txt\n│   ├── src/\n│   │   └── YourApp.cpp\n│   └── version.h.in (or version.rc.in)\n├── Modules/           (created when you add modules)\n└── externals/         (created for Git dependencies)\n    └── README.md\n```\n\n## Demo\n\n### Creating and getting your first C++ app compiled\n\n![AhoiCpp short demo 1](./assets/01_create_first_app.gif)\n\n### Adding new classes to your project\n\n![AhoiCpp short demo 2](./assets/02_create_first_module.gif)\n\n### Adding external dependencies from git repositories\n\n![AhoiCpp short demo 3](./assets/03_clone_external_dependency.gif)\n\n## Check Health\n\nFor health status of AhoiCpp, you can always run `:checkhealth ahoicpp` from the Neovim command line.\n\n## Tests\n\n### Running tests\n\nAhoiCpp uses [plenary.nvim](https://github.com/nvim-lua/plenary.nvim) for testing. To run the tests:\n\n    1. Ensure Plenary.nvim is installed.\n    2. Navigate to the plugin directory: \n    ```bash\n    cd ~/.local/share/nvim/lazy/ahoicpp.nvim\n    ```\n    3. Run the tests from the command line:\n    ```bash\n    nvim --headless -c \"lua require('plenary.test_harness').test_directory('tests/spec', { minimal_init = 'tests/minimal_init.lua' })\" -c \"qa\"\n    ```\n\nYou can of course run the tests from inside Neovim. Just navigate to the directory where ahoicpp is installed, open neovim and then run:\n\n```vim\n:lua require('plenary.test_harness').test_directory('tests/spec', { minimal_init = 'tests/minimal_init.lua' })\n```\n\nFor single file testing, you can use:\n\n```vim\n:lua require('plenary.test_harness').test_file('tests/spec/utils_spec.lua', { minimal_init = 'tests/minimal_init.lua' })\n```\n\n### Test tree\n\nThe tests for AhoiCpp are structured as follows:\n\n```\ntests/\n├── minimal_init.lua       # Test environment setup\n└── spec/\n    ├── utils_spec.lua     # Filesystem and validation tests\n    ├── config_spec.lua    # Configuration tests\n    ├── templates_spec.lua # Template generation tests\n    ├── project_spec.lua   # Project creation tests\n    └── build_spec.lua     # Build system tests\n```\n\n## Troubleshooting\n\n| Error                        | Solution                               |\n| ---------------------------- | -------------------------------------- |\n| \"AhoiCpp is not initialized\" | Run `\u003cleader\u003ecpa` first                |\n| \"Python not found\"           | Install Python and ensure it's in PATH |\n| Compilation fails            | Check `build/build.log`                |\n\n## License\n\nMIT (see [LICENSE](LICENSE) for details)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartuscellifaria%2Fahoicpp.nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartuscellifaria%2Fahoicpp.nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartuscellifaria%2Fahoicpp.nvim/lists"}