From 4cabba5ea124326d644d2ac7b8ff2fd8d94db681 Mon Sep 17 00:00:00 2001 From: Collin Diekvoss Date: Tue, 11 Aug 2026 08:08:51 -0500 Subject: [PATCH] feat(home/jujutsu): add fetch aliases, fix aiDescribe scoping - Add f/fetch aliases and move rbm here from the toyvo user module - Qualify provider/model/prompt as cfg.aiDescribe.* after cfg was broadened to config.programs.jujutsu; unqualified attrs failed eval --- modules/home/programs/jujutsu.nix | 136 ++++++++++++++++-------------- modules/home/users/toyvo.nix | 11 --- 2 files changed, 73 insertions(+), 74 deletions(-) diff --git a/modules/home/programs/jujutsu.nix b/modules/home/programs/jujutsu.nix index 8cec8b8..94950ec 100644 --- a/modules/home/programs/jujutsu.nix +++ b/modules/home/programs/jujutsu.nix @@ -4,7 +4,7 @@ ... }: let - cfg = config.programs.jujutsu.aiDescribe; + cfg = config.programs.jujutsu; in { options.programs.jujutsu.aiDescribe = { @@ -39,68 +39,78 @@ in }; config = - let - # Build the shell script for ai-describe alias - aiDescribeScript = - let - # Pre-escape the prompt at Nix evaluation time - escapedPrompt = lib.escapeShellArg cfg.prompt; - providerArg = if cfg.provider != null then ''--provider "${cfg.provider}"'' else ""; - modelArg = if cfg.model != null then ''--model "${cfg.model}"'' else ""; - in - '' - if [ -n "$1" ]; then - CHANGE_ID="$1" - else - CHANGE_ID="@" - fi - # Parse extra context flags - EXTRA_CONTEXT="" - shift 2>/dev/null || true - while [ $# -gt 0 ]; do - case "$1" in - -C) - if [ -n "$2" ]; then - EXTRA_CONTEXT="Add context: $2" - shift 2 - else - shift - fi - ;; - *) - shift - ;; - esac - done - DIFF_OUTPUT=$(jj diff -r "$CHANGE_ID" --no-pager 2>/dev/null) - if [ -z "$DIFF_OUTPUT" ]; then - echo "Error: No diff found for change $CHANGE_ID" >&2 - exit 1 - fi - PI_ARGS="${providerArg} ${modelArg}" - FULL_PROMPT=${escapedPrompt} - if [ -n "$EXTRA_CONTEXT" ]; then - FULL_PROMPT="''${EXTRA_CONTEXT}\\n\\n$FULL_PROMPT" - fi - MESSAGE=$(pi -p --no-session --mode json $PI_ARGS "$FULL_PROMPT\\n\\n$DIFF_OUTPUT" | jq -r 'select(.type == "message_end" and .message.role == "assistant") | .message.content[0].text' 2>/dev/null | head -c 500) - # Clean up whitespace - MESSAGE=$(echo "$MESSAGE" | tr -d '\\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') - if [ -z "$MESSAGE" ]; then - echo "Error: Failed to generate commit message" >&2 - exit 1 - fi - jj describe -r "$CHANGE_ID" -m "$MESSAGE" - ''; - in lib.mkIf cfg.enable { - programs.jujutsu.settings.aliases.ai-describe = [ - "util" - "exec" - "--" - "sh" - "-c" - aiDescribeScript - "sh" - ]; + programs.jujutsu.settings.aliases = { + f = [ + "git" + "fetch" + "--all-remotes" + ]; + fetch = [ + "git" + "fetch" + "--all-remotes" + ]; + rbm = [ + "util" + "exec" + "--" + "bash" + "-c" + ''jj git fetch --all-remotes && jj rebase "$@" -d main@origin'' + "" + ]; + ai-describe = lib.mkIf cfg.aiDescribe.enable [ + "util" + "exec" + "--" + "bash" + "-c" + '' + if [ -n "$1" ]; then + CHANGE_ID="$1" + else + CHANGE_ID="@" + fi + # Parse extra context flags + EXTRA_CONTEXT="" + shift 2>/dev/null || true + while [ $# -gt 0 ]; do + case "$1" in + -C) + if [ -n "$2" ]; then + EXTRA_CONTEXT="Add context: $2" + shift 2 + else + shift + fi + ;; + *) + shift + ;; + esac + done + DIFF_OUTPUT=$(jj diff -r "$CHANGE_ID" --no-pager 2>/dev/null) + if [ -z "$DIFF_OUTPUT" ]; then + echo "Error: No diff found for change $CHANGE_ID" >&2 + exit 1 + fi + PI_ARGS="${if cfg.aiDescribe.provider != null then ''--provider "${cfg.aiDescribe.provider}"'' else ""} ${if cfg.aiDescribe.model != null then ''--model "${cfg.aiDescribe.model}"'' else ""}" + FULL_PROMPT=${lib.escapeShellArg cfg.aiDescribe.prompt} + if [ -n "$EXTRA_CONTEXT" ]; then + FULL_PROMPT="''${EXTRA_CONTEXT}\\n\\n$FULL_PROMPT" + fi + MESSAGE=$(pi -p --no-session --mode json $PI_ARGS "$FULL_PROMPT\\n\\n$DIFF_OUTPUT" | jq -r 'select(.type == "message_end" and .message.role == "assistant") | .message.content[0].text' 2>/dev/null | head -c 500) + # Clean up whitespace + MESSAGE=$(echo "$MESSAGE" | tr -d '\\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') + if [ -z "$MESSAGE" ]; then + echo "Error: Failed to generate commit message" >&2 + exit 1 + fi + jj describe -r "$CHANGE_ID" -m "$MESSAGE" + '' + "" + ]; + }; }; } diff --git a/modules/home/users/toyvo.nix b/modules/home/users/toyvo.nix index 0af26c2..5a13d48 100644 --- a/modules/home/users/toyvo.nix +++ b/modules/home/users/toyvo.nix @@ -120,17 +120,6 @@ in behavior = "own"; key = config.sops.secrets."git_toyvo_sign_ed25519.pub".path; }; - aliases = { - rbm = [ - "util" - "exec" - "--" - "sh" - "-c" - "jj git fetch --all-remotes && jj rebase \"$@\" -d main@origin" - "sh" - ]; - }; }; }; kitty.enable = cfg.gui.enable; -- 2.51.2