{"id":21126846,"url":"https://github.com/conneroisu/gohard","last_synced_at":"2025-10-27T12:03:00.055Z","repository":{"id":243545105,"uuid":"811376565","full_name":"conneroisu/gohard","owner":"conneroisu","description":"design hardware with golang. (WIP)","archived":false,"fork":false,"pushed_at":"2025-04-04T12:01:57.000Z","size":2259,"stargazers_count":1,"open_issues_count":19,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T13:22:02.718Z","etag":null,"topics":["formatter","hdl","language-server","language-server-protocol","lexer","lexer-parser","lsp","parser","vhdl"],"latest_commit_sha":null,"homepage":"https://conneroisu.github.io/gohard/","language":"Go","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/conneroisu.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":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-06T13:30:28.000Z","updated_at":"2025-03-26T17:08:27.000Z","dependencies_parsed_at":"2024-06-09T19:02:11.946Z","dependency_job_id":"342fdc97-91e6-4f52-acd4-b67514dddfd9","html_url":"https://github.com/conneroisu/gohard","commit_stats":null,"previous_names":["conneroisu/hardgo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conneroisu%2Fgohard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conneroisu%2Fgohard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conneroisu%2Fgohard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conneroisu%2Fgohard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/conneroisu","download_url":"https://codeload.github.com/conneroisu/gohard/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247713309,"owners_count":20983683,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["formatter","hdl","language-server","language-server-protocol","lexer","lexer-parser","lsp","parser","vhdl"],"created_at":"2024-11-20T04:45:39.369Z","updated_at":"2025-10-27T12:03:00.050Z","avatar_url":"https://github.com/conneroisu.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gohard\n\nDesign hardware with golang. (WIP)\n\n[![CodeQL](https://github.com/conneroisu/gohard/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/conneroisu/gohard/actions/workflows/github-code-scanning/codeql)\n[![Dependabot Updates](https://github.com/conneroisu/gohard/actions/workflows/dependabot/dependabot-updates/badge.svg)](https://github.com/conneroisu/gohard/actions/workflows/dependabot/dependabot-updates)\n[![Nix Flake actions](https://github.com/conneroisu/gohard/actions/workflows/flake-actions.yml/badge.svg)](https://github.com/conneroisu/gohard/actions/workflows/flake-actions.yml)\n[![Lint](https://github.com/conneroisu/gohard/actions/workflows/lint.yml/badge.svg)](https://github.com/conneroisu/gohard/actions/workflows/lint.yml)\n\n[![Codecov](https://codecov.io/gh/conneroisu/gohard/graph/badge.svg?token=X3CZM7GKQK)](https://codecov.io/gh/conneroisu/gohard)\n[![GitHub tag](https://img.shields.io/github/tag/conneroisu/gohard?include_prereleases=\u0026sort=semver\u0026color=violet)](https://github.com/conneroisu/gohard/releases/)\n\n## Introduction\n\n**gohard** is a modern VHDL development toolkit built in Go that provides formatting, linting, and Language Server Protocol (LSP) support for VHDL hardware description language files.\n\n### Key Features\n\n- **🎨 Intelligent Formatting** - Automatically format VHDL code with consistent style\n- **🔍 Advanced Linting** - Catch common issues and enforce best practices  \n- **🚀 Language Server** - Full LSP support for modern editors (VS Code, Neovim, etc.)\n- **⚙️ Project Configuration** - Flexible YAML-based configuration\n- **📦 Nix Integration** - Reproducible development environments\n\n## Quick Start\n\n### Installation\n\nUsing Nix Flakes:\n```bash\n# Install globally\nnix profile install github:conneroisu/gohard\n\n# Or run directly\nnix run github:conneroisu/gohard -- --help\n```\n\n### Basic Usage\n\n```bash\n# Initialize a new project\ngohard init\n\n# Format VHDL files\ngohard fmt file.vhd\ngohard fmt -w ./...  # Format all files recursively\n\n# Lint for best practices\ngohard lint src/\n\n# Start LSP server for editor integration\ngohard lsp\n```\n\n## Demo Videos\n\nWe provide interactive terminal recordings showcasing gohard's capabilities. These are built using [VHS.nix](https://github.com/conneroisu/vhs.nix) for reproducible, declarative demos.\n\n### Available Demos\n\n#### Main Demos\n| Demo | Purpose | Build Command | Description |\n|------|---------|---------------|-------------|\n| **Quick Demo** | Social media, quick overview | `nix build .#vhs-gohard-quick` | 30-second overview of core features |\n| **Comprehensive** | Documentation, complete guide | `nix build .#vhs-gohard-comprehensive` | Full feature walkthrough with examples |\n| **Tutorial** | Learning, step-by-step | `nix build .#vhs-gohard-tutorial` | Educational guide for new users |\n| **Presentation** | Conferences, talks | `nix build .#vhs-gohard-presentation` | High-quality demo for presentations |\n\n#### Help Command Demos\n| Demo | Build Command | Description |\n|------|---------------|-------------|\n| **Help Overview** | `nix build .#vhs-help-demo` | General help and command overview |\n| **Format Help** | `nix build .#vhs-help-fmt` | Formatting command options |\n| **Lint Help** | `nix build .#vhs-help-lint` | Linting command options |\n| **LSP Help** | `nix build .#vhs-help-lsp` | Language server options |\n\n#### Formatting Demos\n| Demo | Build Command | Description |\n|------|---------------|-------------|\n| **Single File** | `nix build .#vhs-fmt-file` | Format individual VHDL files |\n| **Directory** | `nix build .#vhs-fmt-dir` | Format all files in a directory |\n| **Recursive** | `nix build .#vhs-fmt-recur` | Recursive formatting with `./...` |\n| **Stdin** | `nix build .#vhs-fmt-stdin` | Format from standard input |\n\n#### Linting Demos\n| Demo | Build Command | Description |\n|------|---------------|-------------|\n| **Single File** | `nix build .#vhs-lint-file` | Lint individual VHDL files |\n| **Directory** | `nix build .#vhs-lint-dir` | Lint all files in a directory |\n| **Recursive** | `nix build .#vhs-lint-recur` | Recursive linting with `./...` |\n\n### Building Demos\n\n```bash\n# Build all demos\nnix build .#vhs-gohard-quick .#vhs-gohard-comprehensive .#vhs-gohard-tutorial .#vhs-gohard-presentation\n\n# View a specific demo\nnix build .#vhs-gohard-quick \u0026\u0026 ls -la result/\n```\n\nThe demos showcase:\n- Project initialization with `gohard init`\n- Formatting messy VHDL code with `gohard fmt`\n- Linting for best practices with `gohard lint`\n- LSP server setup for editor integration\n\n### Build Notes\n\n- **Build Time**: Demo recordings may take 2-5 minutes to build as they execute actual commands\n- **Platform**: VHS recordings work best on Linux systems with X11/Wayland support\n- **Caching**: Built demos are cached in the Nix store for faster subsequent access\n\n#### Troubleshooting\n\nIf demo builds fail:\n\n```bash\n# Check specific demo build logs\nnix log .#vhs-gohard-quick\n\n# Test gohard package builds separately\nnix build .#gohard\n\n# Use flake check to validate all outputs\nnix flake check\n```\n\n## VHDL Best Practices (Enforced by gohard)\n\n- No \"Component\" in entity name\n- Using \"'event\" with a non-clock signal\n- Counters in non-clocked processes\n- Do not initialize signals with ':=' (compiles to determinate unit based on tooling)\n- having extra signals in the sensitively list (makes sim slower and signals to readers of the code that it could be used)\n\n## Development\n\n### Linting\n\nThe project uses [golangci-lint](https://github.com/golangci/golangci-lint) for code quality checks with a comprehensive set of linters. To run the linter:\n\n```bash\n# With Nix\nnix develop -c lint\n\n# Directly with golangci-lint\ngolangci-lint run\n```\n\n### Documentation\n\n[![View site - GH Pages](https://img.shields.io/badge/View_site-GH_Pages-2ea44f?style=for-the-badge)](https://conneroisu.github.io/gohard/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconneroisu%2Fgohard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconneroisu%2Fgohard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconneroisu%2Fgohard/lists"}