Compare commits

...

9 Commits

Author SHA1 Message Date
94038a71bf chore(config): wezterm: my eyesight is getting worse
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-08-31 22:59:38 +03:00
4bfa54972e chore(deps): update Brewfile
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-08-31 22:58:32 +03:00
25831458aa chore: fix git configs
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-08-28 11:22:22 +03:00
github-actions[bot]
41315f7c53 chore: update pre-commit hooks (#181) 2025-08-28 08:17:01 +03:00
renovate[bot]
fecbb3568c chore(deps): update ivuorinen/actions action (25.8.21 → 25.8.25) (#180)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-28 02:00:55 +00:00
f18d08ec5f chore(zed): add mcp-server-time, predictions driver copilot
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-08-26 13:45:22 +03:00
b9fac1a444 chore(fish): add grype completions
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-08-26 13:43:15 +03:00
a5fe70d3c2 chore(fish): add stats abbreviation for onefetch
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-08-26 13:42:32 +03:00
fdaa1883a7 chore: add lm studio config end marker
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-08-26 13:41:18 +03:00
14 changed files with 348 additions and 80 deletions

View File

@@ -35,4 +35,4 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Run PR Lint
uses: ivuorinen/actions/pr-lint@05e171c506876dce80fc8eb00f6c0e628e2586b5 # 25.8.21
uses: ivuorinen/actions/pr-lint@8e88bf4cdb14c38c929ad2a89687d6eb635a3967 # 25.8.25

View File

@@ -29,4 +29,4 @@ jobs:
issues: write
steps:
- uses: ivuorinen/actions/sync-labels@05e171c506876dce80fc8eb00f6c0e628e2586b5 # 25.8.21
- uses: ivuorinen/actions/sync-labels@8e88bf4cdb14c38c929ad2a89687d6eb635a3967 # 25.8.25

View File

@@ -50,7 +50,7 @@ repos:
- id: actionlint
- repo: https://github.com/renovatebot/pre-commit-hooks
rev: 41.82.10
rev: 41.87.4
hooks:
- id: renovate-config-validator

View File

@@ -106,3 +106,6 @@ abbr --add .n npm
abbr --add .nt npm test --if-present
abbr --add .nb npm run build --if-present
abbr --add .ns npm run start --if-present
# Random abbreviations
abbr --add stats onefetch --nerd-fonts --true-color never

View File

@@ -0,0 +1,235 @@
# fish completion for grype -*- shell-script -*-
function __grype_debug
set -l file "$BASH_COMP_DEBUG_FILE"
if test -n "$file"
echo "$argv" >> $file
end
end
function __grype_perform_completion
__grype_debug "Starting __grype_perform_completion"
# Extract all args except the last one
set -l args (commandline -opc)
# Extract the last arg and escape it in case it is a space
set -l lastArg (string escape -- (commandline -ct))
__grype_debug "args: $args"
__grype_debug "last arg: $lastArg"
# Disable ActiveHelp which is not supported for fish shell
set -l requestComp "GRYPE_ACTIVE_HELP=0 $args[1] __complete $args[2..-1] $lastArg"
__grype_debug "Calling $requestComp"
set -l results (eval $requestComp 2> /dev/null)
# Some programs may output extra empty lines after the directive.
# Let's ignore them or else it will break completion.
# Ref: https://github.com/spf13/cobra/issues/1279
for line in $results[-1..1]
if test (string trim -- $line) = ""
# Found an empty line, remove it
set results $results[1..-2]
else
# Found non-empty line, we have our proper output
break
end
end
set -l comps $results[1..-2]
set -l directiveLine $results[-1]
# For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)
# completions must be prefixed with the flag
set -l flagPrefix (string match -r -- '-.*=' "$lastArg")
__grype_debug "Comps: $comps"
__grype_debug "DirectiveLine: $directiveLine"
__grype_debug "flagPrefix: $flagPrefix"
for comp in $comps
printf "%s%s\n" "$flagPrefix" "$comp"
end
printf "%s\n" "$directiveLine"
end
# this function limits calls to __grype_perform_completion, by caching the result behind $__grype_perform_completion_once_result
function __grype_perform_completion_once
__grype_debug "Starting __grype_perform_completion_once"
if test -n "$__grype_perform_completion_once_result"
__grype_debug "Seems like a valid result already exists, skipping __grype_perform_completion"
return 0
end
set --global __grype_perform_completion_once_result (__grype_perform_completion)
if test -z "$__grype_perform_completion_once_result"
__grype_debug "No completions, probably due to a failure"
return 1
end
__grype_debug "Performed completions and set __grype_perform_completion_once_result"
return 0
end
# this function is used to clear the $__grype_perform_completion_once_result variable after completions are run
function __grype_clear_perform_completion_once_result
__grype_debug ""
__grype_debug "========= clearing previously set __grype_perform_completion_once_result variable =========="
set --erase __grype_perform_completion_once_result
__grype_debug "Successfully erased the variable __grype_perform_completion_once_result"
end
function __grype_requires_order_preservation
__grype_debug ""
__grype_debug "========= checking if order preservation is required =========="
__grype_perform_completion_once
if test -z "$__grype_perform_completion_once_result"
__grype_debug "Error determining if order preservation is required"
return 1
end
set -l directive (string sub --start 2 $__grype_perform_completion_once_result[-1])
__grype_debug "Directive is: $directive"
set -l shellCompDirectiveKeepOrder 32
set -l keeporder (math (math --scale 0 $directive / $shellCompDirectiveKeepOrder) % 2)
__grype_debug "Keeporder is: $keeporder"
if test $keeporder -ne 0
__grype_debug "This does require order preservation"
return 0
end
__grype_debug "This doesn't require order preservation"
return 1
end
# This function does two things:
# - Obtain the completions and store them in the global __grype_comp_results
# - Return false if file completion should be performed
function __grype_prepare_completions
__grype_debug ""
__grype_debug "========= starting completion logic =========="
# Start fresh
set --erase __grype_comp_results
__grype_perform_completion_once
__grype_debug "Completion results: $__grype_perform_completion_once_result"
if test -z "$__grype_perform_completion_once_result"
__grype_debug "No completion, probably due to a failure"
# Might as well do file completion, in case it helps
return 1
end
set -l directive (string sub --start 2 $__grype_perform_completion_once_result[-1])
set --global __grype_comp_results $__grype_perform_completion_once_result[1..-2]
__grype_debug "Completions are: $__grype_comp_results"
__grype_debug "Directive is: $directive"
set -l shellCompDirectiveError 1
set -l shellCompDirectiveNoSpace 2
set -l shellCompDirectiveNoFileComp 4
set -l shellCompDirectiveFilterFileExt 8
set -l shellCompDirectiveFilterDirs 16
if test -z "$directive"
set directive 0
end
set -l compErr (math (math --scale 0 $directive / $shellCompDirectiveError) % 2)
if test $compErr -eq 1
__grype_debug "Received error directive: aborting."
# Might as well do file completion, in case it helps
return 1
end
set -l filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) % 2)
set -l dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) % 2)
if test $filefilter -eq 1; or test $dirfilter -eq 1
__grype_debug "File extension filtering or directory filtering not supported"
# Do full file completion instead
return 1
end
set -l nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) % 2)
set -l nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) % 2)
__grype_debug "nospace: $nospace, nofiles: $nofiles"
# If we want to prevent a space, or if file completion is NOT disabled,
# we need to count the number of valid completions.
# To do so, we will filter on prefix as the completions we have received
# may not already be filtered so as to allow fish to match on different
# criteria than the prefix.
if test $nospace -ne 0; or test $nofiles -eq 0
set -l prefix (commandline -t | string escape --style=regex)
__grype_debug "prefix: $prefix"
set -l completions (string match -r -- "^$prefix.*" $__grype_comp_results)
set --global __grype_comp_results $completions
__grype_debug "Filtered completions are: $__grype_comp_results"
# Important not to quote the variable for count to work
set -l numComps (count $__grype_comp_results)
__grype_debug "numComps: $numComps"
if test $numComps -eq 1; and test $nospace -ne 0
# We must first split on \t to get rid of the descriptions to be
# able to check what the actual completion will be.
# We don't need descriptions anyway since there is only a single
# real completion which the shell will expand immediately.
set -l split (string split --max 1 \t $__grype_comp_results[1])
# Fish won't add a space if the completion ends with any
# of the following characters: @=/:.,
set -l lastChar (string sub -s -1 -- $split)
if not string match -r -q "[@=/:.,]" -- "$lastChar"
# In other cases, to support the "nospace" directive we trick the shell
# by outputting an extra, longer completion.
__grype_debug "Adding second completion to perform nospace directive"
set --global __grype_comp_results $split[1] $split[1].
__grype_debug "Completions are now: $__grype_comp_results"
end
end
if test $numComps -eq 0; and test $nofiles -eq 0
# To be consistent with bash and zsh, we only trigger file
# completion when there are no other completions
__grype_debug "Requesting file completion"
return 1
end
end
return 0
end
# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves
# so we can properly delete any completions provided by another script.
# Only do this if the program can be found, or else fish may print some errors; besides,
# the existing completions will only be loaded if the program can be found.
if type -q "grype"
# The space after the program name is essential to trigger completion for the program
# and not completion of the program name itself.
# Also, we use '> /dev/null 2>&1' since '&>' is not supported in older versions of fish.
complete --do-complete "grype " > /dev/null 2>&1
end
# Remove any pre-existing completions for the program since we will be handling all of them.
complete -c grype -e
# this will get called after the two calls below and clear the $__grype_perform_completion_once_result global
complete -c grype -n '__grype_clear_perform_completion_once_result'
# The call to __grype_prepare_completions will setup __grype_comp_results
# which provides the program's completion choices.
# If this doesn't require order preservation, we don't use the -k flag
complete -c grype -n 'not __grype_requires_order_preservation && __grype_prepare_completions' -f -a '$__grype_comp_results'
# otherwise we use the -k flag
complete -k -c grype -n '__grype_requires_order_preservation && __grype_prepare_completions' -f -a '$__grype_comp_results'

View File

@@ -32,5 +32,6 @@ end
# Added by LM Studio CLI (lms)
set -gx PATH $PATH $HOME/.lmstudio/bin
# End of LM Studio CLI section
# vim: ft=fish ts=4 sw=4 et:

View File

@@ -1,18 +1,19 @@
# vim: ft=gitconfig ai noexpandtab
[include]
path = ~/.dotfiles/config/git/shared
path = ~/.dotfiles/config/git/shared
[user]
name = Ismo Vuorinen
email = ismo@ivuorinen.net
name = Ismo Vuorinen
email = ismo@ivuorinen.net
[github]
user = ivuorinen
user = ivuorinen
[include]
path = ~/.config/git/overrides/config
path = ~/.config/git/overrides/config
[advice]
detachedHead = false
detachedHead = false
[column]
ui = auto
[branch]

View File

@@ -1,53 +1,54 @@
# vim: ft=gitconfig ai noexpandtab
[credential]
helper = store --file ~/.cache/git/git-credentials
helper = cache --timeout 30000
helper = store --file ~/.cache/git/git-credentials
helper = cache --timeout 30000
[core]
excludesfile = ~/.config/git/ignore
excludesfile = ~/.config/git/ignore
[init]
defaultBranch = main
defaultBranch = main
[pull]
rebase = true
rebase = true
[alias]
branchbydate = for-each-ref --count=30 --sort=-committerdate refs/heads/ --format='%(refname:short)'
branchcolor = "!for ref in $(git for-each-ref --sort=-committerdate --format=\"%(refname)\" refs/heads/ refs/remotes ); do git log -n1 $ref --pretty=format:\"%Cgreen%cr%Creset %C(yellow)%d%Creset %C(bold blue)<%an>%Creset%n\" | cat ; done | awk '! a[$0]++'"
llog = log --pretty=fuller
logs = log --graph --pretty=format:'%C(magenta)%h%Creset -%C(red)%d%Creset %s %C(dim green)(%cr) %C(cyan)<%an>%Creset' --abbrev-commit
nah = !git reset --hard && git clean -df
recent = "!r() { count=$1; git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always --count=${count:=10} | column -ts'|';}; r"
reset-origin = !git fetch origin && git reset --hard origin/master && git clean -f -d
reset-upstream = !git fetch upstream && git reset --hard upstream/master && git clean -f -d
rl = reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)'
tagdate = log --date-order --graph --tags --simplify-by-decoration --pretty=format:\"%ai %h %d\"
undo = reset --soft HEAD^
undo-commit = reset HEAD~ --soft
branchbydate = for-each-ref --count=30 --sort=-committerdate refs/heads/ --format='%(refname:short)'
branchcolor = "!for ref in $(git for-each-ref --sort=-committerdate --format=\"%(refname)\" refs/heads/ refs/remotes ); do git log -n1 $ref --pretty=format:\"%Cgreen%cr%Creset %C(yellow)%d%Creset %C(bold blue)<%an>%Creset%n\" | cat ; done | awk '! a[$0]++'"
llog = log --pretty=fuller
logs = log --graph --pretty=format:'%C(magenta)%h%Creset -%C(red)%d%Creset %s %C(dim green)(%cr) %C(cyan)<%an>%Creset' --abbrev-commit
nah = !git reset --hard && git clean -df
recent = "!r() { count=$1; git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always --count=${count:=10} | column -ts'|';}; r"
reset-origin = !git fetch origin && git reset --hard origin/master && git clean -f -d
reset-upstream = !git fetch upstream && git reset --hard upstream/master && git clean -f -d
rl = reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)'
tagdate = log --date-order --graph --tags --simplify-by-decoration --pretty=format:\"%ai %h %d\"
undo = reset --soft HEAD^
undo-commit = reset HEAD~ --soft
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[color]
ui = true
diff = auto
branch = auto
status = auto
ui = true
diff = auto
branch = auto
status = auto
[color "status"]
added = green bold
changed = yellow
deleted = red bold strike
untracked = cyan
branch = yellow black bold ul
added = green bold
changed = yellow
deleted = red bold strike
untracked = cyan
branch = yellow black bold ul
[submodule]
recurse = true
recurse = true
# dotfiles special config
[includeIf "hasconfig:remote.*.url:https://github.com/ivuorinen/dotfiles.git"]
path = ~/.dotfiles/config/git/special/dotfiles ;
path = ~/.dotfiles/config/git/special/dotfiles ;

View File

@@ -1,2 +1,3 @@
# vim: ft=gitconfig ai noexpandtab
[submodule]
recurse = false
recurse = false

View File

@@ -21,6 +21,7 @@ tap "reviewdog/tap"
tap "shivammathur/extensions"
tap "shivammathur/php"
tap "snyk/tap"
tap "tabbyml/tabby"
tap "teamookla/speedtest"
tap "xwmx/taps"
# Run your GitHub Actions locally
@@ -79,6 +80,8 @@ brew "autogen"
brew "automake"
# Official Amazon AWS command-line interface
brew "awscli"
# GNU internationalization (i18n) and localization (l10n) library
brew "gettext"
# Bourne-Again SHell, a UNIX command interpreter
brew "bash"
# Clone of cat(1) with syntax highlighting and Git integration
@@ -95,12 +98,18 @@ brew "bzip2"
brew "freetype"
# XML-based font configuration API for X Windows
brew "fontconfig"
# GNU internationalization (i18n) and localization (l10n) library
brew "gettext"
# Core application library for C
brew "glib"
# Binary installation for rust projects
brew "cargo-binstall"
# Multi-platform support library with a focus on asynchronous I/O
brew "libuv"
# Platform built on V8 to build network applications
brew "node", link: false
# CLI tool for analyzing Claude Code usage from local JSONL files
brew "ccusage"
# JSON Schema CLI
brew "check-jsonschema"
# Prevent cloud misconfigurations during build-time for IaC tools
brew "checkov"
# Human-friendly and fast alternative to cut and (sometimes) awk
@@ -109,6 +118,8 @@ brew "choose-rust"
brew "cmake"
# Get a file from an HTTP, HTTPS or FTP server
brew "curl"
# Network authentication protocol
brew "krb5"
# OpenType text shaping engine
brew "harfbuzz"
# OWASP dependency-check
@@ -121,6 +132,16 @@ brew "enchant"
brew "exercism"
# Perl lib for reading and writing EXIF metadata
brew "exiftool"
# Validating, recursive, caching DNS resolver
brew "unbound"
# GNU Transport Layer Security (TLS) Library
brew "gnutls"
# Secure hashing function
brew "libb2"
# Framework for layout and rendering of i18n text
brew "pango"
# Play, record, convert, and stream audio and video
brew "ffmpeg"
# Banner-like program prints strings as ASCII art
brew "figlet"
# User-friendly command-line shell for UNIX-like operating systems
@@ -139,26 +160,18 @@ brew "gd"
brew "gdu"
# GitHub command-line tool
brew "gh"
# Secure hashing function
brew "libb2"
# Framework for layout and rendering of i18n text
brew "pango"
# Distributed revision control system
brew "git"
# Enable transparent encryption/decryption of files in a git repo
brew "git-crypt"
# Small git utilities
brew "git-extras"
# See your latest local git branches, formatted real fancy
# Browse your latest git branches, formatted real fancy
brew "git-recent"
# Render markdown on the CLI
brew "glow"
# GNU implementation of the famous stream editor
brew "gnu-sed"
# Validating, recursive, caching DNS resolver
brew "unbound"
# GNU Transport Layer Security (TLS) Library
brew "gnutls"
# GNU Pretty Good Privacy (PGP) package
brew "gnupg"
# Go version management
@@ -175,6 +188,8 @@ brew "librsvg"
brew "graphviz"
# GNU grep, egrep and fgrep
brew "grep"
# Vulnerability scanner for container images and filesystems
brew "grype"
# Popular GNU data compression program
brew "gzip"
# Improved top (interactive process viewer)
@@ -193,8 +208,8 @@ brew "jpeg"
brew "jq"
# JSON parser for C
brew "json-c"
# Network authentication protocol
brew "krb5"
# Crawling and spidering framework
brew "katana"
# Style and grammar checker
brew "languagetool"
# Tool to detect/remediate misconfig and security risks of GitHub/GitLab assets
@@ -205,8 +220,8 @@ brew "libedit"
brew "libiconv"
# Version of the SSL/TLS protocol forked from OpenSSL
brew "libressl"
# Multi-platform support library with a focus on asynchronous I/O
brew "libuv"
# Linguistic software and Finnish dictionary
brew "libvoikko"
# GNOME XML library
brew "libxml2"
# Package manager for the Lua programming language
@@ -223,12 +238,12 @@ brew "ncdu"
brew "nginx"
# Port scanning utility for large networks
brew "nmap"
# Platform built on V8 to build network applications
brew "node", link: false
# Libraries for security-enabled client and server applications
brew "nss"
# Command-line Git information tool
brew "onefetch"
# General-purpose speech recognition model
brew "openai-whisper"
# Open source suite of directory software
brew "openldap"
# ISO-C API and CLI for generating UUIDs
@@ -319,14 +334,16 @@ brew "shivammathur/extensions/yaml@8.3"
brew "shivammathur/php/php-debug"
# General-purpose scripting language
brew "shivammathur/php/php@8.2-debug"
# Find & fix known vulnerabilities in open-source dependencies
brew "snyk/tap/snyk"
# Tabby: AI Coding Assistant
brew "tabbyml/tabby/tabby"
# Command-line interface for 1Password
cask "1password-cli"
# Universal database tool and SQL client
cask "dbeaver-community"
# Database version management tool
cask "dbngin"
# App to build and share containerised applications and microservices
cask "docker"
# Calendar software
cask "fantastical"
cask "font-jetbrains-mono"
@@ -377,7 +394,7 @@ cask "syntax-highlight"
# Python IDE for beginners
cask "thonny"
# To-do list
cask "todoist"
cask "todoist-app"
# Configuration application for the Ultimate Hacking Keyboard
cask "uhk-agent"
# Open-source code editor

View File

@@ -6,7 +6,7 @@ config.set_environment_variables = {
}
-- Font and font size
config.font_size = 14.5
config.font_size = 16
config.font = wezterm.font_with_fallback {
{
family = 'Operator Mono',
@@ -23,7 +23,7 @@ config.harfbuzz_features = { 'calt=1', 'clig=1', 'liga=1' }
config.selection_word_boundary = ' \t\n{[}]()"\'`,;:'
-- Window configuration
config.window_background_opacity = 0.95
config.window_background_opacity = 0.97
config.window_decorations = 'RESIZE'
config.macos_window_background_blur = 10
config.window_padding = {
@@ -40,8 +40,7 @@ config.enable_tab_bar = false
config.send_composed_key_when_left_alt_is_pressed = true
config.send_composed_key_when_right_alt_is_pressed = true
-- Scrolling deactivated, using tmux for that
config.scrollback_lines = 0
config.scrollback_lines = 3000
-- Function to detect the theme based on appearance
function Scheme_for_appearance(appearance)

View File

@@ -1,8 +1,16 @@
{
"features": {
"edit_prediction_provider": "copilot"
},
"context_servers": {
"github-activity-summarizer": {
"source": "extension",
"settings": {}
},
"mcp-server-time": {
"source": "custom",
"command": "uvx",
"args": ["mcp-server-time"]
}
},
"telemetry": {

View File

@@ -1,2 +1,4 @@
# vim: ft=gitconfig ai noexpandtab
Host tfs.ia.corp.svea.com
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa

View File

@@ -1,26 +1,26 @@
# vim: ft=gitconfig sw=2 ts=2 et
# vim: ft=gitconfig ai noexpandtab
[include]
path = ~/.dotfiles/config/git/shared
path = ~/.dotfiles/config/git/shared
[gpg]
format = ssh
format = ssh
[user]
name = Ismo Vuorinen
email = ismo.vuorinen@svea.com
signingkey = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMmEaS/pitd8TzLNaXf0ojTydEyFp2TWoDctuqTEF8Aw
name = Ismo Vuorinen
email = ismo.vuorinen@svea.com
signingkey = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMmEaS/pitd8TzLNaXf0ojTydEyFp2TWoDctuqTEF8Aw
[gpg "ssh"]
program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
allowedSignersFile = ~/.ssh/allowed_signers
program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
allowedSignersFile = ~/.ssh/allowed_signers
[commit]
gpgsign = true
gpgsign = true
[credential "https://github.com"]
helper =
helper = !/opt/homebrew/bin/gh auth git-credential
helper =
helper = !/opt/homebrew/bin/gh auth git-credential
[credential "https://gist.github.com"]
helper =
helper = !/opt/homebrew/bin/gh auth git-credential
helper =
helper = !/opt/homebrew/bin/gh auth git-credential