diff --git a/home/dot_aider.conf.yml.tmpl b/home/dot_aider.conf.yml.tmpl index 48a6fd5..66634c8 100644 --- a/home/dot_aider.conf.yml.tmpl +++ b/home/dot_aider.conf.yml.tmpl @@ -1,7 +1,7 @@ {{ if eq .hosttype "personal" -}} model: ollama_chat/qwen2.5-coder:14b {{ else -}} -model: openai/gpt-4.1 +model: openai/claude-3.7-sonnet {{- end }} cache-prompts: true diff --git a/home/encrypted_dot_zshklaviyo.age b/home/encrypted_dot_zshklaviyo.age index ed4b824..7c62362 100644 --- a/home/encrypted_dot_zshklaviyo.age +++ b/home/encrypted_dot_zshklaviyo.age @@ -1,65 +1,76 @@ -----BEGIN AGE ENCRYPTED FILE----- -YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwNG5yNTJVTWpBUDhDOG8x -NjZvelQzRkgxQkc5N3lXdTd2SWQvSGlHUkgwClFNaUk5bDAwQTFOWjdPYjhuVnRV -TzBRNlBZdFJ2dEozVSt2ZW1ucllBZjAKLS0tIFR5VjQrWDF5MTZFeFlpTXU3NFQx -L01WaytMT2dzYXBEMVkxdzdnNGVxa0kK1KOjkqVTVg0WHUJjW6RmUOofBmdpQQIk -xkTvS222UgXvwz9Wl/nzDo3jEB61JAVTgoygnXGXMwrilVtc08G3CIbXi1ivGE2k -qKCdfHVLEJzaPQBsrdH13aIHt3PmVF4fk7MWLwrvwT7u+gvrS3fbfspMM8NA+J3t -JgeOg33BmCHMeJFaGNeyBAozlsHHXJVCSExC+3QV/ytIQNiKLbp+rCi23++5fU29 -WtZiEf/HaeoQOi1EI7/5ncVka7Vx8O9wcPrkAwYU7Aa5IlrugXm+NjWs2fUyuLbq -0qHB/KkWWTvFbpruQ9NJDliCahFN6XIOcXXffMDI0cUkkF8mbJQyNk+/5I2Q+WI+ -OIKBY3I6gAewUChmDJHOpWp+/hTdXGcSzbqlLQSdFc5v7jgzE1FX9l87+zZeJSP2 -znXksbrptD9AhG9zp9tBgPwEcgS+apr57j3LbuOYyC7P6QsKotdxLiD7kZb+H3ji -PvAxFBl9g2H9otGouLM/zPFobkAR+gmNujHw3pLqab+OsoRE59564Iw+4pNuxbEo -EjVyncszWzzIwpssU6ePlTejWqUJXsb0eeKX6fhX2LMkcVtRLsCebe7fsi++gZ8t -JRLsdl5KfWHy1dAF/vDRceAqf7ejdAdR5vsEy8NLyKFux1m6JceL1xpO4JL8jBIx -9d/mEXpWNcaUp+/4aqvfmY87wyazOfNk2633Xk/4yxzNVsgpVP4h8qkWDwUus+pU -kmVOd+dD749B6imPLAuSl8yEKebDx6PsryVvGCJ1e9a8LDHqcBNFRc7HfeDN7iUO -cj0HaxEzeC61ry/Njxo3Stz1wfSOUoUUBN57Gu0Og+DQ8sOflFLUEUpwVsvIR9xN -SQtS7Xe3O01xfmN22j6bDjmtR1/LLsqTPWV8ln/Hcon9LufW/gxSRcL6XgwAkd+J -MMRifv1J9ZGuLi6JJyAHf7XtmnsCQ6sK+/4svEQUMa7yllW8j9dtPmCq4ubHm86p -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 -yuVQQJY3XJs8xpGo/Ak45p8Y8Iy960+47G/jLNft5ZhfBjKjT3TIhWC4PyIaPf4t -yiw+igqq2t6d4SrYI/gvqCHcrmAydRB90YA106r+UnXYwlL++AsDLgaoQ4hwpvZq -DrwUR+aX4C9kDz9bOx+iqjkCsyLwixTp/JL8easakP406SsC7+0oOl92lm4Atr9m -3pElIsOO2hE0N93ts/5BCanFTVeCvZUGwnnaiM/+uU2L0gRtRfQYQoSYM+hNVkkh -slNvBTJUY9Z9pT132KCkPCWNjdtxHX443dUBF+udo9xDbntq6jrvrCnfjVni9sfv -aKjCt6JYAFjugiTjvbmaHxQkcFlz1qEUh/aPC2/lyOaAbgie +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXSThYSVdZYXJrVEZKbGJC +VFBLSjVOa2t0YUlqajF4OStKc3lDSm5xeWxVCi9LWGoyRVZDODl2Y21qSGZ5NUZO +OWxhRlEvc2M2YWVISkJ3SGl0czlkNDgKLS0tIFljUWFvWHlMYWNlbFZMdXlBOEVL +RWZFVnQ0ZUhYM2dRR2ZHc2VpMFJpMnMK6+W0maKvPUTUsC0pBSMx+A+SyBdeCDky +yuQQ63M3U8Oq1NuDSTTqfZMw+b2k4WfhBqjVLeHdscHJ6OGhrg6GK5X9F2TaL+T6 +hibyQAcX3EinRgYYTvsu8qTnv2ciUGDZgBt/YbLvXITCcHC1iTicfuv36pzLtqKb +oR8RxV+OKLcUpOhL6Iwc3Lym2HSlNdsc71d4KbsX4O6L+OYPWWZN2mQ/Cc//I+al +QenY99jinHzon60mjWdgiZcDAqPAmTP3Z7GvLlm7wlkZaBb9UQfAVXkNXSJbocKI +liZVIA3qzsgRY+nooI2Whbgqr04S3+EHAw+rwSEhsJLlY7Pg+Yn/1uHLmGMPMESY +dLBJvYPqTiuY0qBtYoHDNZyz26rvW4bf6oFNfzu+/FIatH0s26XI06jZ6LkQOcIZ +B6gkGdVgx4P6SuAqk6dk6I7RFfoea7XrzvHjP9OsuHMOZkSMXUHfo6WE9y6+4duo +B/k5+Qd6m1qk7NuG4JxSDJyyEeHQZqHD+hcrcesNeUs6Pu8DSLUIo4kP5qiYfXiO +PdK+cajL7ZfO91VAzh/Xwc0pXF/XCbEthihWOWNdujvZNSfqAVp433UPjbRuVAcr +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 -----END AGE ENCRYPTED FILE----- diff --git a/home/private_Library/private_Application Support/io.datasette.llm/extra-openai-models.yaml b/home/private_Library/private_Application Support/io.datasette.llm/extra-openai-models.yaml index 25c62c6..901f3b7 100644 --- a/home/private_Library/private_Application Support/io.datasette.llm/extra-openai-models.yaml +++ b/home/private_Library/private_Application Support/io.datasette.llm/extra-openai-models.yaml @@ -1,9 +1,32 @@ -- model_id: copilot-gpt-4.1 - model_name: gpt-4.1 - api_base: "https://api.githubcopilot.com" - api_key_name: copilot +- model_id: crsr-claude-3.5-sonnet + model_name: claude-3.5-sonnet + api_base: "http://localhost:3000/v1" + api_key_name: crsr -- model_id: copilot-gpt-4o +- model_id: crsr-claude-3.7-sonnet + model_name: claude-3.7-sonnet + api_base: "http://localhost:3000/v1" + api_key_name: crsr + +- model_id: crsr-claude-3.7-sonnet-max + model_name: claude-3.7-sonnet-max + api_base: "http://localhost:3000/v1" + api_key_name: crsr + +- model_id: crsr-gpt-4.1 + model_name: gpt-4.1 + api_base: "http://localhost:3000/v1" + api_key_name: crsr + +- model_id: crsr-o4-mini + model_name: o4-mini + api_base: "http://localhost:3000/v1" + api_key_name: crsr + +- model_id: proxy-gpt-4o model_name: gpt-4o - api_base: "https://api.githubcopilot.com" - api_key_name: copilot + api_base: "http://localhost:8080" + +- model_id: proxy-gpt-4.1 + model_name: gpt-4.1 + api_base: "http://localhost:8080" \ No newline at end of file diff --git a/home/private_dot_config/jj/config.toml.tmpl b/home/private_dot_config/jj/config.toml.tmpl index fb7b1e0..67922e9 100644 --- a/home/private_dot_config/jj/config.toml.tmpl +++ b/home/private_dot_config/jj/config.toml.tmpl @@ -6,17 +6,28 @@ email = {{ .email_personal | quote }} push-bookmark-prefix = "{{ .github_personal }}_jj_" private-commits = "description(glob:'private:*') | bookmarks('merge')" -[colors] -"diff removed token" = { fg = "red", underline = false } -"diff added token" = { fg = "green", underline = false } - [revset-aliases] "stack()" = "trunk()..@" "immutable_heads()" = "builtin_immutable_heads() | (trunk().. & ~mine())" [ui] default-command = ["log"] -diff.format = "git" +pager = "delta" + +[ui.diff] +format = "git" + +[merge-tools.delta] +diff-args = [ + "--color-only", + "--features", "chameleon", + "--navigate", + "--dark", + "--side-by-side", + "--true-color", "always", + "--syntax-theme", "base16", + "$left", "$right", +] [[--scope]] --when.repositories = ["~/Klaviyo", "~/.klaviyocli"] diff --git a/home/run_once_01install-packages.sh.tmpl b/home/run_once_01install-packages.sh.tmpl index 4ec8b53..9506940 100644 --- a/home/run_once_01install-packages.sh.tmpl +++ b/home/run_once_01install-packages.sh.tmpl @@ -15,6 +15,7 @@ brew install \ fzf \ gh \ git \ + git-delta \ glow \ go \ golangci-lint \