Make sure that you follow CODE_OF_CONDUCT.md while contributing and engaging in the discussions.
Before you start contributing, make sure you have the following tools installed:
- Hugo Extended (>= 0.161.0) - The static site generator
- Dart Sass - Required for SCSS compilation
- Node.js (>= 22) - Required for package management and build tools
- pnpm - Package manager
You can check your installed versions:
hugo version
sass --version
node --version
pnpm --versionCheck the Hugo environment information:
hugo envFirst, fork this repository by clicking the fork button.
Next, clone your forked repo.
git clone https://github.com/hugo-fixit/FixIt.git && cd FixItThen, install the dev dependencies.
pnpm installAnd now you are ready to go!
- Make your changes in the appropriate directories
- Test locally using
pnpm dev:demoorpnpm dev:test - Check code quality with
pnpm lintandpnpm typecheck - Check different environments with production builds (
pnpm build:demoorpnpm build:test) - Verify documentation changes with
pnpm dev:docs(if applicable) - Commit your changes following the commit message format below
# Start demo site development server
pnpm dev:demo
# Start test site development server
pnpm dev:test
# Start documentation development server (requires fixit-docs as sibling directory)
pnpm dev:docs
# Build demo site
pnpm build:demo
# Build test site
pnpm build:test
# Build all sites
pnpm build
# Lint with ESLint
pnpm lint
# TypeScript type checking
pnpm typecheck
# Regenerate Chroma lexer map (assets/scss/core/maps/_chroma-lexers.scss)
pnpm gen:lexers
# Preview the built site locally (requires build first)
pnpm preview
# Build UnoCSS utility classes (pre-built, committed to repo)
pnpm unocss
# Watch mode for UnoCSS (for theme developers)
pnpm unocss:watchTip
- Add
-e productionto the development command to check the production environment, e.g.pnpm dev:test -e production. - Add
-e debugto enable debug mode (if applicable), e.g.pnpm dev:test -e debug. - For documentation-related theme changes, it is recommended to clone both
FixItandfixit-docsas sibling directories.
- Create a feature branch from
main - Make your changes with clear, focused commits
- Test your changes thoroughly
- Update documentation if needed
- Submit a pull request with a clear description
Finally, create a new pull request at https://github.com/hugo-fixit/FixIt/pulls to submit your contribution.
Understanding the project structure will help you contribute more effectively:
FixIt/
โโโ apps/ # Minimal sites
โ โโโ demo/ # Demo site
โ โโโ test/ # Test site
โโโ archetypes/ # Content templates
โโโ assets/ # Theme assets
โ โโโ css/ # UnoCSS pre-built output (unocss.css)
โ โโโ images/ # Image assets
โ โโโ js/ # JavaScript files
โ โโโ lib/ # Third-party libraries
โ โโโ scss/ # SCSS stylesheets
โโโ i18n/ # Internationalization files
โโโ layouts/ # Hugo template files
โ โโโ _markup/ # Hugo render hooks
โ โโโ _partials/ # Reusable template components
โ โโโ _shortcodes/ # Custom shortcodes
โโโ packages/ # Theme-related packages (pnpm workspaces)
โ โโโ chroma-lexers/ # Chroma lexer SCSS map generator
โ โโโ integration/ # Post-build site merging
โ โโโ shared/ # Shared utilities
โ โโโ versioning/ # Version management (pre-commit)
โโโ static/ # Static files
โโโ hugo.toml # Default theme configuration
โโโ uno.config.ts # UnoCSS configuration
โโโ package.json # npm scripts and dependencies
We follow the Conventional Commits specification for commit messages. This enables automatic changelog generation using our custom template: conventional.hbs.
Note
Commits in a PR will normally be squashed into one commit, so you don't need to rebase locally.
<type>(<scope>): <subject>
^ ^ ^
| | |__ Subject: Concise description of the change (imperative mood, lowercase).
| |____________ Scope: The specific part of the codebase affected (optional but recommended).
|___________________ Type: Indicates the kind of change.
Note
- Keep the subject line concise and ideally within 72 characters.
- If the change is more than a sentence, add a body.
- Do not include secrets (tokens/keys) or personal data in commit messages.
- Do not invent issue/PR numbers or facts that are not present in the diff.
feat: A new feature.fix: A bug fix.refactor: Code changes that neither fix a bug nor add a feature.chore: Changes to the build process, auxiliary tools, libraries, documentation generation etc.docs: Documentation only changes.- Other conventional types like
perf,style,test,ci,buildare also acceptable.
workflow: CI/CD workflow changes (.github/workflows/)archetypes: Content templates (archetypes/)assets: Changes to theme assets like CSS, JS (assets/)i18n: Internationalization and translation files (i18n/)layouts: Root-level Hugo template files (layouts/*.html)config: Theme configuration (hugo.toml,theme.toml)- (All top-level directories in the layouts and packages directories)
- (Consider adding other scopes as needed for better granularity)
feat(_shortcodes): add mapbox zoom control optionsfix(_partials): avoid duplicate canonical link tagsdocs(i18n): update translation key naming guidelinesci(workflow): optimize preview deployment cacherefactor(assets): split theme initialization into smaller modules