From 59c9d273422045f8ef38dcf08c45e326dcd298a1 Mon Sep 17 00:00:00 2001 From: tux Date: Fri, 7 Aug 2026 04:58:11 +0530 Subject: [PATCH] fix(lazygit): fix model version and json output parsing --- modules/hm/shell/lazygit.nix | 115 ++++++++++++++++------------------- 1 file changed, 51 insertions(+), 64 deletions(-) diff --git a/modules/hm/shell/lazygit.nix b/modules/hm/shell/lazygit.nix index e5eecf8..9badc48 100644 --- a/modules/hm/shell/lazygit.nix +++ b/modules/hm/shell/lazygit.nix @@ -87,81 +87,68 @@ title = "AI Generated Commit Messages"; key = "CommitMsg"; command = '' - bash -c " - # Check for staged changes - diff=\$(git diff --cached | head -n 10) - if [ -z \"\$diff\" ]; then - echo \"No changes in staging. Add changes first.\" + bash -lc ' + diff=$(git diff --cached) + if [ -z "$diff" ]; then + echo "No changes in staging. Add changes first." exit 1 fi - SELECTED_TYPE=\"{{.Form.Type}}\" - COMMITS_TO_SUGGEST=8 + SELECTED_TYPE="{{.Form.Type}}" + COMMITS_TO_SUGGEST=4 - opencode run -m \"google/gemini-2.5-flash-lite\" \" - You are an expert at writing Git commits. Your job is to write commit messages that follow the Conventional Commits format. + opencode run --format json --model=google/gemini-3.5-flash-lite --variant=none " + You are an expert at writing Git commits. Your job is to write commit messages that follow the Conventional Commits format. - The user has selected: \$SELECTED_TYPE + The user has selected: $SELECTED_TYPE - Your task is to: - 1. Analyze the code changes - 2. Determine the most appropriate commit type (if user selected 'ai-defined') - 3. Determine an appropriate scope (component/area affected) - 4. Decide if this is a breaking change - 5. Write clear, concise commit messages + Your task is to: + 1. Analyze the code changes + 2. Determine the most appropriate commit type if user selected ai-defined + 3. Determine an appropriate scope, component, or area affected + 4. Decide if this is a breaking change + 5. Write clear, concise commit messages - Available commit types: - - feat: A new feature - - fix: A bug fix - - docs: Documentation only changes - - style: Changes that do not affect the meaning of the code - - refactor: A code change that neither fixes a bug nor adds a feature - - perf: A code change that improves performance - - test: Adding missing tests or correcting existing tests - - build: Changes that affect the build system or external dependencies - - ci: Changes to CI configuration files and scripts - - chore: Other changes that don't modify src or test files - - revert: Reverts a previous commit + Available commit types: + - feat: A new feature + - fix: A bug fix + - docs: Documentation only changes + - style: Changes that do not affect the meaning of the code + - refactor: A code change that neither fixes a bug nor adds a feature + - perf: A code change that improves performance + - test: Adding missing tests or correcting existing tests + - build: Changes that affect the build system or external dependencies + - ci: Changes to CI configuration files and scripts + - chore: Other changes that do not modify src or test files + - revert: Reverts a previous commit - Follow these guidelines: - - Structure: (): - - If user selected 'ai-defined', analyze the changes and pick the most suitable type - - If user selected a specific type, use that type: \$SELECTED_TYPE - - Add scope in parentheses if applicable (e.g., auth, api, ui, config) - - Use exclamation mark (!) after type/scope for breaking changes: type(scope)!: description - - Use lowercase for description (except proper nouns) - - Use imperative mood (\\\"add\\\", not \\\"added\\\") - - Keep description under 50 characters when possible - - No period at the end of subject line + Follow these guidelines: + - Structure: (): + - If user selected ai-defined, analyze the changes and pick the most suitable type + - If user selected a specific type, use that type: $SELECTED_TYPE + - Add scope in parentheses if applicable, for example auth, api, ui, config + - Use exclamation mark after type or scope for breaking changes: type(scope)!: description + - Use lowercase for description except proper nouns + - Use imperative mood: add, not added + - Keep description under 50 characters when possible + - No period at the end of subject line - Examples: - - feat(auth): add OAuth login support - - fix(api): handle null response in user endpoint - - docs(readme): update installation instructions - - style(ui): improve button spacing consistency - - refactor(database): simplify query builder logic - - test(auth): add unit tests for login flow - - build(deps): upgrade React to version 18 - - ci(github): fix deployment workflow - - chore(config): update ESLint rules - - perf(api)!: optimize database queries + IMPORTANT: + - Generate exactly $COMMITS_TO_SUGGEST different commit message options + - If user selected ai-defined, you can use different types for different options + - If user selected a specific type, all messages must use that type + - Only return commit messages, no explanations + - Do not use markdown code blocks + - One message per line - IMPORTANT: - - Generate exactly \$COMMITS_TO_SUGGEST different commit message options - - If user selected 'ai-defined', you can use different types for different options - - If user selected a specific type, all messages must use that type - - Only return commit messages, no explanations - - Do not use markdown code blocks - - One message per line + Previous commits for context: + $(git log --oneline -10) - Previous commits for context: - \$(git log --oneline -10) - - Changes to analyze: - \$(git diff --cached --stat) - \$(git diff --cached) - \" - " + Changes to analyze: + $(git diff --cached --stat) + $diff + " | JQ_TEXT=text jq -r "select(.type == env.JQ_TEXT) | .part.text? // empty" + ' ''; } ];