mirror of
https://github.com/Xevion/dotfiles.git
synced 2025-12-15 18:11:36 -06:00
Compare commits
14 Commits
625cf3c3ae
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 57b686cab5 | |||
| 8f9565d0e0 | |||
| 075810965a | |||
|
|
262da2f114 | ||
| 26f332e1a4 | |||
| 1c87ddfa96 | |||
| 05257607d3 | |||
| 8a5c83bdf7 | |||
|
|
3c1ebfe086 | ||
|
|
4d20cbbacd | ||
|
|
1e55b4862f | ||
|
|
e5279d9388 | ||
|
|
9fb2c304f3 | ||
|
|
f4a4800af0 |
13
CLAUDE.md
13
CLAUDE.md
@@ -20,7 +20,14 @@ This is a **chezmoi source directory** for managing dotfiles across multiple mac
|
|||||||
|
|
||||||
**Template System:**
|
**Template System:**
|
||||||
- Uses Go templates with platform detection
|
- Uses Go templates with platform detection
|
||||||
- Variables: `.chezmoi.os`, `.chezmoi.homeDir`, `.data.*`
|
- Two types of templates with different variable access patterns:
|
||||||
|
- **Regular templates** (e.g., `home/dot_bashrc.tmpl`): Direct access to Chezmoi context
|
||||||
|
- Built-in: `.chezmoi.os`, `.chezmoi.homeDir`
|
||||||
|
- Custom data: `.wsl`, `.chassis`
|
||||||
|
- **Partials** (reusable templates in `home/.chezmoitemplates/`): Must receive context via explicit parameter
|
||||||
|
- Partials don't have automatic access to Chezmoi's context
|
||||||
|
- Context passed as parameter (commonly `data`) when calling the partial
|
||||||
|
- Access everything through parameter: `.data.chezmoi.os`, `.data.wsl`, `.data.chassis`
|
||||||
- Conditional rendering for Windows/Linux/macOS/WSL
|
- Conditional rendering for Windows/Linux/macOS/WSL
|
||||||
|
|
||||||
**Secret Management:**
|
**Secret Management:**
|
||||||
@@ -82,9 +89,11 @@ This is a **chezmoi source directory** for managing dotfiles across multiple mac
|
|||||||
- `chezmoi status` - see what's changed
|
- `chezmoi status` - see what's changed
|
||||||
|
|
||||||
4. **Use templates correctly**
|
4. **Use templates correctly**
|
||||||
- Platform detection: `.chezmoi.os`, `.data.wsl`, `.data.chassis`
|
- Platform detection in regular templates: `.chezmoi.os`, `.wsl`, `.chassis`
|
||||||
|
- Platform detection in partials: `.data.chezmoi.os`, `.data.wsl`, `.data.chassis`
|
||||||
- Doppler secrets: `{{ dopplerProjectJson.SECRET_NAME }}`
|
- Doppler secrets: `{{ dopplerProjectJson.SECRET_NAME }}`
|
||||||
- Conditional logic: `{{ if }}...{{ else }}...{{ end }}`
|
- Conditional logic: `{{ if }}...{{ else }}...{{ end }}`
|
||||||
|
- Example partial call: `{{ template "commonrc.sh.tmpl" . }}` (passes entire context as `data`)
|
||||||
|
|
||||||
5. **Suggest TODO list updates** (but DO NOT modify automatically)
|
5. **Suggest TODO list updates** (but DO NOT modify automatically)
|
||||||
- When a task is completed, check if `TODO.md` exists in the repository
|
- When a task is completed, check if `TODO.md` exists in the repository
|
||||||
|
|||||||
3
TODO.md
3
TODO.md
@@ -18,6 +18,7 @@
|
|||||||
- [ ] Add step-by-step first-time setup guide
|
- [ ] Add step-by-step first-time setup guide
|
||||||
- [ ] Document Doppler setup requirements
|
- [ ] Document Doppler setup requirements
|
||||||
- [ ] Create quick reference card for emergency recovery
|
- [ ] Create quick reference card for emergency recovery
|
||||||
|
- [ ] Document proper process of adding symlinks (mention updating chemzoiignore, etc.)
|
||||||
|
|
||||||
### 2. Standardize Encryption & Authentication Workflow
|
### 2. Standardize Encryption & Authentication Workflow
|
||||||
|
|
||||||
@@ -297,4 +298,4 @@ These items were in the original TODO.md and need to be categorized/completed:
|
|||||||
- Some items have dependencies (e.g., documentation should reflect implemented changes)
|
- Some items have dependencies (e.g., documentation should reflect implemented changes)
|
||||||
- Use `chezmoi cd` to navigate to source directory when working on configs
|
- Use `chezmoi cd` to navigate to source directory when working on configs
|
||||||
- Test changes in WSL/Linux before applying to Windows (or vice versa)
|
- Test changes in WSL/Linux before applying to Windows (or vice versa)
|
||||||
- Keep encrypted secrets out of git history - use age encryption or Doppler
|
- Keep encrypted secrets out of git history - use age encryption or Doppler
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
hooks
|
hooks
|
||||||
tool-versions
|
tool-versions
|
||||||
|
claude-settings.json
|
||||||
|
|
||||||
{{/* WSL Only Files */}}
|
{{/* WSL Only Files */}}
|
||||||
{{ if (not .wsl) }}
|
{{ if (not .wsl) }}
|
||||||
@@ -35,4 +36,4 @@ key.txt
|
|||||||
Documents/
|
Documents/
|
||||||
AppData/
|
AppData/
|
||||||
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|||||||
@@ -1044,4 +1044,15 @@ def maestroOn [] {
|
|||||||
bluetoothctl unblock "AC:BF:71:66:FE:B2"
|
bluetoothctl unblock "AC:BF:71:66:FE:B2"
|
||||||
bluetoothctl connect "AC:BF:71:66:FE:B2"
|
bluetoothctl connect "AC:BF:71:66:FE:B2"
|
||||||
}
|
}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
{{- if .wsl }}
|
||||||
|
# Launch Windows Terminal in current directory
|
||||||
|
def wt [...args: string] {
|
||||||
|
if ($args | is-empty) {
|
||||||
|
^wt.exe -w 0 sp wsl --cd (pwd)
|
||||||
|
} else {
|
||||||
|
^wt.exe -w 0 ...$args wsl --cd (pwd)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{{- end }}
|
||||||
@@ -46,7 +46,7 @@ if test -f /home/linuxbrew/.linuxbrew/bin/brew
|
|||||||
# Regenerate cache if: doesn't exist, >7 days old, or brew binary is newer
|
# Regenerate cache if: doesn't exist, >7 days old, or brew binary is newer
|
||||||
if not test -f "$brew_cache"; \
|
if not test -f "$brew_cache"; \
|
||||||
or test (math (date +%s) - (stat -c %Y "$brew_cache" 2>/dev/null || echo 0)) -gt 604800; \
|
or test (math (date +%s) - (stat -c %Y "$brew_cache" 2>/dev/null || echo 0)) -gt 604800; \
|
||||||
or test "$brew_bin" -nt "$brew_cache"
|
or test (stat -c %Y "$brew_bin" 2>/dev/null || echo 0) -gt (stat -c %Y "$brew_cache" 2>/dev/null || echo 0)
|
||||||
mkdir -p (dirname "$brew_cache")
|
mkdir -p (dirname "$brew_cache")
|
||||||
$brew_bin shellenv > "$brew_cache" 2>/dev/null
|
$brew_bin shellenv > "$brew_cache" 2>/dev/null
|
||||||
end
|
end
|
||||||
@@ -98,4 +98,26 @@ end
|
|||||||
|
|
||||||
## Ensures CLI apps open URLs in the default Windows browser
|
## Ensures CLI apps open URLs in the default Windows browser
|
||||||
set -gx BROWSER 'powershell.exe /c start'
|
set -gx BROWSER 'powershell.exe /c start'
|
||||||
|
|
||||||
|
# Cursor IDE CLI (Windows installation accessible from WSL)
|
||||||
|
test -x /mnt/c/Users/Xevion/AppData/Local/Programs/cursor/resources/app/bin/cursor && \
|
||||||
|
fish_add_path /mnt/c/Users/Xevion/AppData/Local/Programs/cursor/resources/app/bin
|
||||||
|
|
||||||
|
# Zed Editor CLI (Windows installation accessible from WSL)
|
||||||
|
test -x /mnt/c/Users/Xevion/AppData/Local/Programs/Zed/bin/zed && \
|
||||||
|
fish_add_path /mnt/c/Users/Xevion/AppData/Local/Programs/Zed/bin
|
||||||
|
|
||||||
|
# Launch Windows Terminal in current directory
|
||||||
|
function wt
|
||||||
|
if test (count $argv) -eq 0
|
||||||
|
wt.exe -w 0 sp wsl --cd (pwd)
|
||||||
|
else
|
||||||
|
wt.exe -w 0 $argv wsl --cd (pwd)
|
||||||
|
end
|
||||||
|
end
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
|
# atuin (magical shell history)
|
||||||
|
if command -q atuin
|
||||||
|
atuin init fish | source
|
||||||
|
end
|
||||||
|
|||||||
@@ -95,16 +95,48 @@ fi
|
|||||||
|
|
||||||
. $HOME/.bash_aliases
|
. $HOME/.bash_aliases
|
||||||
|
|
||||||
|
# disable screen blanking
|
||||||
|
# source $(brew --prefix)/share/zsh/site-functions/_todoist_peco
|
||||||
|
# xset s off && xset -dpms
|
||||||
|
|
||||||
|
# Always use `micro` as the preferred editor when connected via SSH
|
||||||
|
if [[ -n $SSH_CONNECTION ]]; then
|
||||||
|
export EDITOR='micro'
|
||||||
|
fi
|
||||||
|
|
||||||
{{- /* WSL-specific settings */ -}}
|
{{- /* WSL-specific settings */ -}}
|
||||||
{{- if .data.wsl }}
|
{{- if .data.wsl }}
|
||||||
|
|
||||||
## Ensures CLI apps open URLs in the default Windows browser (Chrome/Firefox/etc) instead of a CLI browser
|
## Ensures CLI apps open URLs in the default Windows browser (Chrome/Firefox/etc) instead of a CLI browser
|
||||||
export BROWSER='powershell.exe /c start'
|
export BROWSER='powershell.exe /c start'
|
||||||
{{- end }}
|
|
||||||
|
# Cursor IDE CLI (Windows installation accessible from WSL)
|
||||||
|
[ -x /mnt/c/Users/Xevion/AppData/Local/Programs/cursor/resources/app/bin/cursor ] && \
|
||||||
|
export PATH="$PATH:/mnt/c/Users/Xevion/AppData/Local/Programs/cursor/resources/app/bin"
|
||||||
|
|
||||||
|
# Zed Editor CLI (Windows installation accessible from WSL)
|
||||||
|
[ -x /mnt/c/Users/Xevion/AppData/Local/Programs/Zed/bin/zed ] && \
|
||||||
|
export PATH="$PATH:/mnt/c/Users/Xevion/AppData/Local/Programs/Zed/bin"
|
||||||
|
|
||||||
|
# Launch Windows Terminal in current directory
|
||||||
|
wt() {
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
wt.exe -w 0 sp wsl --cd "$(pwd)"
|
||||||
|
else
|
||||||
|
wt.exe -w 0 "$@" wsl --cd "$(pwd)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
eval `keychain --quiet --eval --agents ssh ~/.ssh/id_rsa`
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
# dotnet
|
# dotnet
|
||||||
if [ -d "$HOME/.dotnet" ]; then
|
if [ -d "$HOME/.dotnet" ]; then
|
||||||
export DOTNET_ROOT="$HOME/.dotnet"
|
export DOTNET_ROOT="$HOME/.dotnet"
|
||||||
export PATH="$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools"
|
export PATH="$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# atuin
|
||||||
|
if [ -d "$HOME/.atuin" ]; then
|
||||||
|
. "$HOME/.atuin/bin/env"
|
||||||
fi
|
fi
|
||||||
@@ -149,7 +149,7 @@
|
|||||||
"key": "shift+enter",
|
"key": "shift+enter",
|
||||||
"command": "workbench.action.terminal.sendSequence",
|
"command": "workbench.action.terminal.sendSequence",
|
||||||
"args": {
|
"args": {
|
||||||
"text": "\\\r\n"
|
"text": "\u001b\r"
|
||||||
},
|
},
|
||||||
"when": "terminalFocus"
|
"when": "terminalFocus"
|
||||||
}
|
}
|
||||||
|
|||||||
335
home/.config-source/cursor/settings.linux.json
Executable file
335
home/.config-source/cursor/settings.linux.json
Executable file
@@ -0,0 +1,335 @@
|
|||||||
|
{
|
||||||
|
// Editor Settings
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"editor.fontFamily": "Iosevka",
|
||||||
|
"editor.inlineSuggest.enabled": true,
|
||||||
|
"editor.linkedEditing": true,
|
||||||
|
"editor.minimap.showSlider": "always",
|
||||||
|
"diffEditor.renderSideBySide": false,
|
||||||
|
"cursor.diffs.useCharacterLevelDiffs": true,
|
||||||
|
|
||||||
|
// Workbench Settings
|
||||||
|
"workbench.startupEditor": "none",
|
||||||
|
"workbench.tree.indent": 24,
|
||||||
|
"workbench.preferredLightColorTheme": "Cursor Light",
|
||||||
|
"workbench.iconTheme": "material-icon-theme",
|
||||||
|
|
||||||
|
// Window Settings
|
||||||
|
"window.autoDetectHighContrast": false,
|
||||||
|
"window.autoDetectColorScheme": true,
|
||||||
|
|
||||||
|
// Terminal Settings
|
||||||
|
"terminal.integrated.commandsToSkipShell": [
|
||||||
|
"-workbench.action.quickOpenView"
|
||||||
|
],
|
||||||
|
"terminal.integrated.fontFamily": "Iosevka Nerd Font Mono",
|
||||||
|
"terminal.integrated.enablePersistentSessions": false,
|
||||||
|
"terminal.integrated.defaultProfile.windows": "PowerShell",
|
||||||
|
"terminal.integrated.defaultProfile.linux": "zsh",
|
||||||
|
"terminal.external.windowsExec": "C:\\Program Files\\PowerShell\\7\\pwsh.exe",
|
||||||
|
"terminal.integrated.profiles.linux": {
|
||||||
|
"bash": {
|
||||||
|
"path": "bash",
|
||||||
|
"icon": "terminal-bash"
|
||||||
|
},
|
||||||
|
"fish": {
|
||||||
|
"path": "fish"
|
||||||
|
},
|
||||||
|
"tmux": {
|
||||||
|
"path": "tmux",
|
||||||
|
"icon": "terminal-tmux"
|
||||||
|
},
|
||||||
|
"pwsh": {
|
||||||
|
"path": "pwsh",
|
||||||
|
"icon": "terminal-powershell"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// File Explorer Settings
|
||||||
|
"explorer.confirmDragAndDrop": false,
|
||||||
|
"explorer.confirmDelete": false,
|
||||||
|
"files.associations": {
|
||||||
|
"*.dialogue": "plaintext"
|
||||||
|
},
|
||||||
|
|
||||||
|
// Git Settings
|
||||||
|
"git.autofetch": true,
|
||||||
|
"git.confirmSync": false,
|
||||||
|
"git.openRepositoryInParentFolders": "always",
|
||||||
|
|
||||||
|
// Security Settings
|
||||||
|
"security.workspace.trust.untrustedFiles": "open",
|
||||||
|
"security.allowedUNCHosts": ["ROMAN"],
|
||||||
|
"security.restrictUNCAccess": false,
|
||||||
|
|
||||||
|
// Language-specific Formatters
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[typescriptreact]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[json]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[html]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[python]": {
|
||||||
|
"editor.formatOnType": true,
|
||||||
|
"editor.defaultFormatter": "anysphere.cursorpyright"
|
||||||
|
},
|
||||||
|
"[go]": {
|
||||||
|
"editor.defaultFormatter": "golang.go"
|
||||||
|
},
|
||||||
|
"[rust]": {
|
||||||
|
"editor.defaultFormatter": "rust-lang.rust-analyzer"
|
||||||
|
},
|
||||||
|
"[astro]": {
|
||||||
|
"editor.defaultFormatter": "astro-build.astro-vscode"
|
||||||
|
},
|
||||||
|
"[caddyfile]": {
|
||||||
|
"editor.defaultFormatter": "matthewpi.caddyfile-support"
|
||||||
|
},
|
||||||
|
"[shellscript]": {
|
||||||
|
"editor.defaultFormatter": "foxundermoon.shell-format"
|
||||||
|
},
|
||||||
|
"[github-actions-workflow]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[ignore]": {
|
||||||
|
"editor.defaultFormatter": "foxundermoon.shell-format"
|
||||||
|
},
|
||||||
|
"[dotenv]": {
|
||||||
|
"editor.defaultFormatter": "foxundermoon.shell-format"
|
||||||
|
},
|
||||||
|
"[xml]": {
|
||||||
|
"editor.defaultFormatter": "redhat.vscode-xml"
|
||||||
|
},
|
||||||
|
"[properties]": {
|
||||||
|
"editor.defaultFormatter": "foxundermoon.shell-format"
|
||||||
|
},
|
||||||
|
"[gdscript]": {
|
||||||
|
"editor.defaultFormatter": "geequlim.godot-tools"
|
||||||
|
},
|
||||||
|
"[powershell]": {
|
||||||
|
"editor.defaultFormatter": "ms-vscode.powershell"
|
||||||
|
},
|
||||||
|
"[lua]": {
|
||||||
|
"editor.defaultFormatter": "sumneko.lua"
|
||||||
|
},
|
||||||
|
"[prisma]": {
|
||||||
|
"editor.defaultFormatter": "Prisma.prisma"
|
||||||
|
},
|
||||||
|
|
||||||
|
// Language-specific Settings
|
||||||
|
"typescript.preferences.importModuleSpecifier": "non-relative",
|
||||||
|
"typescript.updateImportsOnFileMove.enabled": "always",
|
||||||
|
"typescript.preferGoToSourceDefinition": true,
|
||||||
|
"javascript.updateImportsOnFileMove.enabled": "never",
|
||||||
|
"javascript.preferGoToSourceDefinition": true,
|
||||||
|
"python.analysis.autoImportCompletions": true,
|
||||||
|
"python.analysis.supportDocstringTemplate": true,
|
||||||
|
"go.inlayHints.parameterNames": true,
|
||||||
|
"go.buildTags": "real",
|
||||||
|
"go.toolsManagement.autoUpdate": true,
|
||||||
|
"go.lintTool": "revive",
|
||||||
|
"dotnet.server.useOmnisharp": true,
|
||||||
|
"dotnet.formatting.organizeImportsOnFormat": true,
|
||||||
|
|
||||||
|
// Extension Settings
|
||||||
|
"markdown-preview-enhanced.previewTheme": "github-light.css",
|
||||||
|
"colorize.include": [
|
||||||
|
"**/*.css",
|
||||||
|
"**/*.tsx",
|
||||||
|
"**/*.scss",
|
||||||
|
"**/*.sass",
|
||||||
|
"**/*.less",
|
||||||
|
"**/*.styl"
|
||||||
|
],
|
||||||
|
"colorize.languages": [
|
||||||
|
"javascript",
|
||||||
|
"css",
|
||||||
|
"sass",
|
||||||
|
"scss",
|
||||||
|
"less",
|
||||||
|
"postcss",
|
||||||
|
"sss",
|
||||||
|
"stylus",
|
||||||
|
"xml",
|
||||||
|
"svg",
|
||||||
|
"typescriptreact"
|
||||||
|
],
|
||||||
|
"quokka.showStartViewOnFeatureRelease": false,
|
||||||
|
"prisma.showPrismaDataPlatformNotification": false,
|
||||||
|
"poshProTools.showUpgradeNotification": false,
|
||||||
|
"poshProTools.disableNewsNotification": true,
|
||||||
|
"csharpier.enableDiagnostics": false,
|
||||||
|
"powershell.promptToUpdatePowerShell": false,
|
||||||
|
"autoimport.autoComplete": false,
|
||||||
|
"notebook.output.scrolling": true,
|
||||||
|
"json.schemaDownload.enable": true,
|
||||||
|
"evenBetterToml.schema.links": true,
|
||||||
|
|
||||||
|
// GitHub Copilot Settings
|
||||||
|
"github.copilot.enable": {
|
||||||
|
"*": true,
|
||||||
|
"plaintext": true,
|
||||||
|
"markdown": true,
|
||||||
|
"scminput": false,
|
||||||
|
"yaml": false
|
||||||
|
},
|
||||||
|
"github.copilot.editor.enableAutoCompletions": true,
|
||||||
|
"github.copilot.nextEditSuggestions.enabled": true,
|
||||||
|
|
||||||
|
// GitLens Settings
|
||||||
|
"gitlens.ai.experimental.model": "vscode",
|
||||||
|
"gitlens.ai.experimental.vscode.model": "copilot:gpt-4o",
|
||||||
|
"gitlens.ai.model": "gitkraken",
|
||||||
|
"gitlens.ai.gitkraken.model": "gemini:gemini-2.0-flash",
|
||||||
|
|
||||||
|
// Cursor-specific Settings
|
||||||
|
"cursor.cpp.disabledLanguages": ["scminput"],
|
||||||
|
"cursor.composer.usageSummaryDisplay": "always",
|
||||||
|
|
||||||
|
// VSCord Settings
|
||||||
|
"vscord.status.image.small.viewing.key": "https://raw.githubusercontent.com/LeonardSSH/vscord/main/assets/icons/vscode.png",
|
||||||
|
|
||||||
|
// Coverage Settings
|
||||||
|
"coverage-gutters.ignoredPathGlobs": "**/{node_modules,venv,.venv,vendor,target,dist,emsdk}/**",
|
||||||
|
"coverage-gutters.manualCoverageFilePaths": [
|
||||||
|
"C:/Users/Xevion/projects/Pac-Man/lcov.info"
|
||||||
|
],
|
||||||
|
|
||||||
|
// Task Settings
|
||||||
|
"task.allowAutomaticTasks": "on",
|
||||||
|
|
||||||
|
// Remote Settings
|
||||||
|
"remote.SSH.remotePlatform": {
|
||||||
|
"aws": "linux"
|
||||||
|
},
|
||||||
|
|
||||||
|
// Flutter/Dart Settings
|
||||||
|
"dart.flutterSdkPath": "C:\\Users\\Xevion\\.flutter\\flutter",
|
||||||
|
|
||||||
|
// Harper LS Settings
|
||||||
|
"harper-ls.diagnosticSeverity": "hint",
|
||||||
|
|
||||||
|
// Todo Tree Settings
|
||||||
|
"todo-tree.highlights.foregroundColourScheme": [],
|
||||||
|
|
||||||
|
// Spell Check Settings
|
||||||
|
"cSpell.ignorePaths": [
|
||||||
|
"package-lock.json",
|
||||||
|
"node_modules",
|
||||||
|
"vscode-extension",
|
||||||
|
".git/{info,lfs,logs,refs,objects}/**",
|
||||||
|
".git/{index,*refs,*HEAD}",
|
||||||
|
".vscode",
|
||||||
|
".vscode-insiders",
|
||||||
|
"C:/Users/*/AppData/Roaming/**"
|
||||||
|
],
|
||||||
|
"cSpell.userWords": [
|
||||||
|
"asgi",
|
||||||
|
"astro",
|
||||||
|
"automations",
|
||||||
|
"autoprefixer",
|
||||||
|
"Behaviour",
|
||||||
|
"Boids",
|
||||||
|
"Caddyfile",
|
||||||
|
"coloors",
|
||||||
|
"Colour",
|
||||||
|
"Debugw",
|
||||||
|
"dotenv",
|
||||||
|
"Errorw",
|
||||||
|
"esbuild",
|
||||||
|
"factorio",
|
||||||
|
"fastapi",
|
||||||
|
"gnueabihf",
|
||||||
|
"groq",
|
||||||
|
"Hackathon",
|
||||||
|
"hypercorn",
|
||||||
|
"imfucked",
|
||||||
|
"jsdoc",
|
||||||
|
"jsdom",
|
||||||
|
"Lerp",
|
||||||
|
"logfile",
|
||||||
|
"Mathf",
|
||||||
|
"microcontroller",
|
||||||
|
"nodelib",
|
||||||
|
"openrgb",
|
||||||
|
"pickone",
|
||||||
|
"pipx",
|
||||||
|
"pkgjs",
|
||||||
|
"plasteel",
|
||||||
|
"proxying",
|
||||||
|
"psycopg",
|
||||||
|
"pydantic",
|
||||||
|
"pyenv",
|
||||||
|
"rdap",
|
||||||
|
"rehype",
|
||||||
|
"resliced",
|
||||||
|
"RFID",
|
||||||
|
"Runnerspace",
|
||||||
|
"Tauri",
|
||||||
|
"undelete",
|
||||||
|
"uvicorn",
|
||||||
|
"vite",
|
||||||
|
"vitejs",
|
||||||
|
"wakatime",
|
||||||
|
"Xevion"
|
||||||
|
],
|
||||||
|
"files.exclude": {
|
||||||
|
"**/.trunk/*actions/": true,
|
||||||
|
"**/.trunk/*logs/": true,
|
||||||
|
"**/.trunk/*notifications/": true,
|
||||||
|
"**/.trunk/*out/": true,
|
||||||
|
"**/.trunk/*plugins/": true
|
||||||
|
},
|
||||||
|
"files.watcherExclude": {
|
||||||
|
"**/.trunk/*actions/": true,
|
||||||
|
"**/.trunk/*logs/": true,
|
||||||
|
"**/.trunk/*notifications/": true,
|
||||||
|
"**/.trunk/*out/": true,
|
||||||
|
"**/.trunk/*plugins/": true
|
||||||
|
},
|
||||||
|
"trunk.showPreexistingIssues": true,
|
||||||
|
"cursor.composer.shouldAllowCustomModes": true,
|
||||||
|
"[toml]": {
|
||||||
|
"editor.defaultFormatter": "tamasfe.even-better-toml"
|
||||||
|
},
|
||||||
|
"diffEditor.experimental.showMoves": true,
|
||||||
|
"vscord.status.image.small.editing.key": "https://raw.githubusercontent.com/LeonardSSH/vscord/main/assets/icons/vscode.png",
|
||||||
|
"vscord.status.image.large.notInFile.key": "https://raw.githubusercontent.com/LeonardSSH/vscord/main/assets/icons/idle-vscode.png",
|
||||||
|
"vscord.status.image.large.idle.key": "https://raw.githubusercontent.com/LeonardSSH/vscord/main/assets/icons/idle-vscode.png",
|
||||||
|
"vscord.status.details.text.notInFile": "",
|
||||||
|
"vscord.ignore.organizations": ["Invidae"],
|
||||||
|
"git.blame.editorDecoration.enabled": true,
|
||||||
|
"zig.zls.enabled": "on",
|
||||||
|
"vscord.ignore.workspaces": [".cursor"],
|
||||||
|
"markdownlint.lintWorkspaceGlobs": [
|
||||||
|
"**/*.{md,mkd,mdwn,mdown,markdown,markdn,mdtxt,mdtext,workbook}",
|
||||||
|
"!**/*.code-search",
|
||||||
|
"!**/bower_components",
|
||||||
|
"!**/node_modules",
|
||||||
|
"!**/.git",
|
||||||
|
"!**/vendor",
|
||||||
|
"!**/.cursor/rules"
|
||||||
|
],
|
||||||
|
"diffEditor.ignoreTrimWhitespace": true,
|
||||||
|
"diffEditor.hideUnchangedRegions.enabled": true,
|
||||||
|
"lldb.suppressUpdateNotifications": true,
|
||||||
|
"prettier.enableDebugLogs": true,
|
||||||
|
"scm.diffDecorationsGutterPattern": {
|
||||||
|
"added": true
|
||||||
|
},
|
||||||
|
"claudeCode.selectedModel": "default",
|
||||||
|
"files.simpleDialog.enable": true,
|
||||||
|
"cursor.terminal.usePreviewBox": true,
|
||||||
|
"java.trace.server": "verbose",
|
||||||
|
"java.server.launchMode": "Standard"
|
||||||
|
}
|
||||||
@@ -12,7 +12,6 @@
|
|||||||
// Workbench Settings
|
// Workbench Settings
|
||||||
"workbench.startupEditor": "none",
|
"workbench.startupEditor": "none",
|
||||||
"workbench.tree.indent": 24,
|
"workbench.tree.indent": 24,
|
||||||
"workbench.preferredDarkColorTheme": "Default Light Modern",
|
|
||||||
"workbench.preferredLightColorTheme": "Cursor Light",
|
"workbench.preferredLightColorTheme": "Cursor Light",
|
||||||
"workbench.iconTheme": "material-icon-theme",
|
"workbench.iconTheme": "material-icon-theme",
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,18 @@ Set-Alias -Name ch -Value chezmoi
|
|||||||
function cha { chezmoi apply --interactive }
|
function cha { chezmoi apply --interactive }
|
||||||
function chlg { lazygit --path {{ .chezmoi.config.sourceDir }} }
|
function chlg { lazygit --path {{ .chezmoi.config.sourceDir }} }
|
||||||
|
|
||||||
|
# ----------------------
|
||||||
|
# Windows Terminal
|
||||||
|
# ----------------------
|
||||||
|
# Launch Windows Terminal in current directory
|
||||||
|
function wt {
|
||||||
|
if ($args.Count -eq 0) {
|
||||||
|
wt.exe -w 0 sp wsl --cd $PWD.Path
|
||||||
|
} else {
|
||||||
|
wt.exe -w 0 $args wsl --cd $PWD.Path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# ----------------------
|
# ----------------------
|
||||||
# Git Aliases
|
# Git Aliases
|
||||||
# ----------------------
|
# ----------------------
|
||||||
|
|||||||
232
home/claude-settings.json
Normal file
232
home/claude-settings.json
Normal file
@@ -0,0 +1,232 @@
|
|||||||
|
{
|
||||||
|
"includeCoAuthoredBy": false,
|
||||||
|
"permissions": {
|
||||||
|
"allow": [
|
||||||
|
"WebSearch",
|
||||||
|
"WebFetch(domain:github.com)",
|
||||||
|
"WebFetch(domain:raw.githubusercontent.com)",
|
||||||
|
"WebFetch(domain:gitlab.com)",
|
||||||
|
"WebFetch(domain:docs.rs)",
|
||||||
|
"WebFetch(domain:lib.rs)",
|
||||||
|
"WebFetch(domain:crates.io)",
|
||||||
|
"WebFetch(domain:npmjs.com)",
|
||||||
|
"WebFetch(domain:pypi.org)",
|
||||||
|
"WebFetch(domain:typst.app)",
|
||||||
|
"WebFetch(domain:pixijs.com)",
|
||||||
|
"WebFetch(domain:developers.cloudflare.com)",
|
||||||
|
"WebFetch(domain:aws.amazon.com)",
|
||||||
|
"WebFetch(domain:cloud.google.com)",
|
||||||
|
"WebFetch(domain:azure.microsoft.com)",
|
||||||
|
"WebFetch(domain:learn.microsoft.com)",
|
||||||
|
"WebFetch(domain:devblogs.microsoft.com)",
|
||||||
|
"WebFetch(domain:slowli.github.io)",
|
||||||
|
"mcp__context7__resolve-library-id",
|
||||||
|
"mcp__context7__get-library-docs",
|
||||||
|
"mcp__linear-server__list_issues",
|
||||||
|
"mcp__linear-server__list_issue_labels",
|
||||||
|
"mcp__linear-server__create_issue_label",
|
||||||
|
"mcp__linear-server__update_issue",
|
||||||
|
"mcp__linear-server__list_teams",
|
||||||
|
"mcp__linear-server__list_projects",
|
||||||
|
"Bash(cargo --version:*)",
|
||||||
|
"Bash(cargo build:*)",
|
||||||
|
"Bash(cargo check:*)",
|
||||||
|
"Bash(cargo clippy:*)",
|
||||||
|
"Bash(cargo test:*)",
|
||||||
|
"Bash(cargo nextest run:*)",
|
||||||
|
"Bash(cargo tree:*)",
|
||||||
|
"Bash(cargo doc:*)",
|
||||||
|
"Bash(cargo llvm-cov:*)",
|
||||||
|
"Bash(cargo add:*)",
|
||||||
|
"Bash(cargo machete:*)",
|
||||||
|
"Bash(cargo udeps:*)",
|
||||||
|
"Bash(cargo audit:*)",
|
||||||
|
"Bash(cargo deny:*)",
|
||||||
|
"Bash(cargo outdated:*)",
|
||||||
|
"Bash(rustc --version:*)",
|
||||||
|
"Bash(sccache --version:*)",
|
||||||
|
"Bash(node --version:*)",
|
||||||
|
"Bash(npm --version:*)",
|
||||||
|
"Bash(npm run:*)",
|
||||||
|
"Bash(npm audit:*)",
|
||||||
|
"Bash(pnpm --version:*)",
|
||||||
|
"Bash(pnpm run:*)",
|
||||||
|
"Bash(pnpm list:*)",
|
||||||
|
"Bash(pnpm exec:*)",
|
||||||
|
"Bash(pnpm audit:*)",
|
||||||
|
"Bash(pnpm outdated:*)",
|
||||||
|
"Bash(bun --version:*)",
|
||||||
|
"Bash(bun run:*)",
|
||||||
|
"Bash(bun:*)",
|
||||||
|
"Bash(just --version:*)",
|
||||||
|
"Bash(just:*)",
|
||||||
|
"Bash(make --version:*)",
|
||||||
|
"Bash(make run:*)",
|
||||||
|
"Bash(make build:*)",
|
||||||
|
"Bash(git --version:*)",
|
||||||
|
"Bash(git status:*)",
|
||||||
|
"Bash(git log:*)",
|
||||||
|
"Bash(git show:*)",
|
||||||
|
"Bash(git diff:*)",
|
||||||
|
"Bash(git fetch:*)",
|
||||||
|
"Bash(git add:*)",
|
||||||
|
"Bash(git commit:*)",
|
||||||
|
"Bash(git rm:*)",
|
||||||
|
"Bash(git mv:*)",
|
||||||
|
"Bash(gh --version:*)",
|
||||||
|
"Bash(gh run list:*)",
|
||||||
|
"Bash(gh run view:*)",
|
||||||
|
"Bash(gh pr list:*)",
|
||||||
|
"Bash(gh api:*)",
|
||||||
|
"Bash(docker --version:*)",
|
||||||
|
"Bash(docker ps:*)",
|
||||||
|
"Bash(docker logs:*)",
|
||||||
|
"Bash(docker inspect:*)",
|
||||||
|
"Bash(docker exec:*)",
|
||||||
|
"Bash(docker port:*)",
|
||||||
|
"Bash(docker build:*)",
|
||||||
|
"Bash(wrangler --version:*)",
|
||||||
|
"Bash(ls:*)",
|
||||||
|
"Bash(tree:*)",
|
||||||
|
"Bash(cat:*)",
|
||||||
|
"Bash(rg:*)",
|
||||||
|
"Bash(find:*)",
|
||||||
|
"Bash(mkdir:*)",
|
||||||
|
"Bash(cloc:*)",
|
||||||
|
"Bash(tokei:*)",
|
||||||
|
"Bash(curl:*)",
|
||||||
|
"Bash(netstat:*)",
|
||||||
|
"Bash(awk:*)",
|
||||||
|
"Bash(timeout:*)",
|
||||||
|
"Bash(wsl --list --verbose:*)",
|
||||||
|
"Bash(wsl dpkg:*)",
|
||||||
|
"Bash(wsl which:*)",
|
||||||
|
"Bash(wsl ps:*)",
|
||||||
|
"Bash(wsl find:*)",
|
||||||
|
"Bash(wsl ls:*)",
|
||||||
|
"Bash(wsl:*)",
|
||||||
|
"Bash(tasklist:*)",
|
||||||
|
"Bash(Select-String:*)",
|
||||||
|
"Bash(Select-Object:*)",
|
||||||
|
"Bash(findstr:*)",
|
||||||
|
"Bash(dir:*)",
|
||||||
|
"Bash(do)",
|
||||||
|
"Bash(then)",
|
||||||
|
"Bash(echo:*)",
|
||||||
|
"Bash(else)",
|
||||||
|
"Bash(fi)",
|
||||||
|
"Bash(done)",
|
||||||
|
"Bash(mise exec actionlint:*)",
|
||||||
|
"mcp__linear-server__create_issue"
|
||||||
|
],
|
||||||
|
"deny": [
|
||||||
|
"Bash(git push --force:*)",
|
||||||
|
"Bash(git push -f:*)",
|
||||||
|
"Bash(git push --force-with-lease:*)",
|
||||||
|
"Bash(git reset --hard:*)",
|
||||||
|
"Bash(git branch -D:*)",
|
||||||
|
"Bash(git clean -fd:*)",
|
||||||
|
"Bash(git clean -f:*)",
|
||||||
|
"Bash(git filter-branch:*)",
|
||||||
|
"Bash(git push --delete:*)",
|
||||||
|
"Bash(git push origin --delete:*)",
|
||||||
|
"Bash(git push origin :*)",
|
||||||
|
"Bash(gh repo delete:*)",
|
||||||
|
"Bash(gh repo archive:*)",
|
||||||
|
"Bash(gh secret delete:*)",
|
||||||
|
"Bash(gh release delete:*)",
|
||||||
|
"Bash(cargo clean:*)",
|
||||||
|
"Bash(cargo yank:*)",
|
||||||
|
"Bash(cargo uninstall --all:*)",
|
||||||
|
"Bash(wrangler delete:*)",
|
||||||
|
"Bash(wrangler secret delete:*)",
|
||||||
|
"Bash(rm -rf:*)",
|
||||||
|
"Bash(rmdir /s:*)",
|
||||||
|
"Bash(rd /s:*)",
|
||||||
|
"Bash(Remove-Item -Recurse -Force:*)",
|
||||||
|
"Bash(del /s:*)"
|
||||||
|
],
|
||||||
|
"ask": [
|
||||||
|
"Bash(cargo uninstall:*)",
|
||||||
|
"Bash(cargo update:*)",
|
||||||
|
"Bash(npm install:*)",
|
||||||
|
"Bash(npm update:*)",
|
||||||
|
"Bash(pnpm install:*)",
|
||||||
|
"Bash(pnpm add:*)",
|
||||||
|
"Bash(pnpm remove:*)",
|
||||||
|
"Bash(pnpm uninstall:*)",
|
||||||
|
"Bash(pnpm update:*)",
|
||||||
|
"Bash(pnpm store prune:*)",
|
||||||
|
"Bash(bun install:*)",
|
||||||
|
"Bash(bun add:*)",
|
||||||
|
"Bash(bun remove:*)",
|
||||||
|
"Bash(git checkout:*)",
|
||||||
|
"Bash(git pull:*)",
|
||||||
|
"Bash(git merge:*)",
|
||||||
|
"Bash(git merge --squash:*)",
|
||||||
|
"Bash(git branch -d:*)",
|
||||||
|
"Bash(git rebase:*)",
|
||||||
|
"Bash(git push:*)",
|
||||||
|
"Bash(gh pr close:*)",
|
||||||
|
"Bash(gh issue close:*)",
|
||||||
|
"Bash(gh run cancel:*)",
|
||||||
|
"Bash(wrangler publish:*)",
|
||||||
|
"Bash(wrangler deploy:*)",
|
||||||
|
"Bash(pnpm run deploy:*)",
|
||||||
|
"Bash(pnpm run build --production:*)",
|
||||||
|
"Bash(npm run deploy:*)",
|
||||||
|
"Bash(bun run deploy:*)",
|
||||||
|
"Bash(mv:*)",
|
||||||
|
"Bash(Move-Item:*)",
|
||||||
|
"Bash(rm:*)",
|
||||||
|
"Bash(del:*)"
|
||||||
|
],
|
||||||
|
"defaultMode": "default"
|
||||||
|
},
|
||||||
|
"model": "sonnet",
|
||||||
|
"statusLine": {
|
||||||
|
"type": "command",
|
||||||
|
"command": "bunx -y ccstatusline@latest",
|
||||||
|
"padding": 0
|
||||||
|
},
|
||||||
|
"enabledPlugins": {
|
||||||
|
"backend-development@claude-code-workflows": true,
|
||||||
|
"javascript-typescript@claude-code-workflows": true,
|
||||||
|
"security-guidance@claude-code-plugins": true,
|
||||||
|
"commit-commands@claude-code-plugins": true,
|
||||||
|
"feature-dev@claude-code-plugins": true,
|
||||||
|
"code-documentation@claude-code-workflows": true,
|
||||||
|
"debugging-toolkit@claude-code-workflows": true,
|
||||||
|
"git-pr-workflows@claude-code-workflows": true,
|
||||||
|
"full-stack-orchestration@claude-code-workflows": true,
|
||||||
|
"unit-testing@claude-code-workflows": true,
|
||||||
|
"tdd-workflows@claude-code-workflows": true,
|
||||||
|
"code-review-ai@claude-code-workflows": true,
|
||||||
|
"code-refactoring@claude-code-workflows": true,
|
||||||
|
"dependency-management@claude-code-workflows": true,
|
||||||
|
"error-debugging@claude-code-workflows": true,
|
||||||
|
"error-diagnostics@claude-code-workflows": true,
|
||||||
|
"deployment-strategies@claude-code-workflows": true,
|
||||||
|
"deployment-validation@claude-code-workflows": true,
|
||||||
|
"cicd-automation@claude-code-workflows": true,
|
||||||
|
"application-performance@claude-code-workflows": true,
|
||||||
|
"comprehensive-review@claude-code-workflows": true,
|
||||||
|
"performance-testing-review@claude-code-workflows": true,
|
||||||
|
"framework-migration@claude-code-workflows": true,
|
||||||
|
"codebase-cleanup@claude-code-workflows": true,
|
||||||
|
"database-design@claude-code-workflows": true,
|
||||||
|
"data-validation-suite@claude-code-workflows": true,
|
||||||
|
"api-scaffolding@claude-code-workflows": true,
|
||||||
|
"api-testing-observability@claude-code-workflows": true,
|
||||||
|
"documentation-generation@claude-code-workflows": true,
|
||||||
|
"game-development@claude-code-workflows": true,
|
||||||
|
"accessibility-compliance@claude-code-workflows": true,
|
||||||
|
"systems-programming@claude-code-workflows": true,
|
||||||
|
"functional-programming@claude-code-workflows": true,
|
||||||
|
"shell-scripting@claude-code-workflows": true,
|
||||||
|
"observability-monitoring@claude-code-workflows": true,
|
||||||
|
"database-cloud-optimization@claude-code-workflows": true,
|
||||||
|
"jvm-languages@claude-code-workflows": true
|
||||||
|
},
|
||||||
|
"alwaysThinkingEnabled": true
|
||||||
|
}
|
||||||
@@ -113,4 +113,8 @@ fi
|
|||||||
# If WSL, add SSH key on startup (once per WSL start)
|
# If WSL, add SSH key on startup (once per WSL start)
|
||||||
{{- if .wsl }}
|
{{- if .wsl }}
|
||||||
eval `keychain --quiet --eval --agents ssh ~/.ssh/id_rsa`
|
eval `keychain --quiet --eval --agents ssh ~/.ssh/id_rsa`
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
# SDKMAN initialization
|
||||||
|
export SDKMAN_DIR="$HOME/.sdkman"
|
||||||
|
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
|
||||||
208
home/dot_claude/CLAUDE.md.tmpl
Normal file
208
home/dot_claude/CLAUDE.md.tmpl
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
**Note**: Project-specific CLAUDE.md files take precedence for project-specific patterns.
|
||||||
|
|
||||||
|
{{- if and (eq .chezmoi.os "windows") (not .wsl) }}
|
||||||
|
|
||||||
|
## Shell Environment (Windows)
|
||||||
|
|
||||||
|
- **You are in Bash on Windows** (Git Bash / MSYS2)
|
||||||
|
- ❌ Do NOT use PowerShell commands (`Get-ChildItem`, `Select-Object`, `Move-Item`)
|
||||||
|
- ❌ Do NOT use CMD commands (`dir`, `copy`, `del`)
|
||||||
|
- ✅ Use standard Bash/Unix commands (`ls`, `cp`, `mv`, `rm`, `grep`)
|
||||||
|
- Prefer relative paths for simplicity
|
||||||
|
{{- else if .wsl }}
|
||||||
|
|
||||||
|
## Shell Environment (WSL)
|
||||||
|
|
||||||
|
- **You are in WSL (Windows Subsystem for Linux)**
|
||||||
|
- ✅ Use standard Linux/Bash commands (`ls`, `cp`, `mv`, `rm`, `grep`)
|
||||||
|
- ✅ Full access to Linux tooling and package managers
|
||||||
|
- ⚠️ Can access Windows filesystem via `/mnt/c/`, but prefer Linux paths
|
||||||
|
- ⚠️ Can call Windows executables (`.exe`), but prefer native Linux tools
|
||||||
|
- Prefer relative paths for simplicity
|
||||||
|
{{- else if eq .chezmoi.os "linux" }}
|
||||||
|
|
||||||
|
## Shell Environment (Linux)
|
||||||
|
|
||||||
|
- **You are in a standard Linux environment**
|
||||||
|
- ✅ Use standard Bash/Unix commands (`ls`, `cp`, `mv`, `rm`, `grep`)
|
||||||
|
- ✅ Full access to Linux tooling and package managers
|
||||||
|
- Prefer relative paths for simplicity
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
## Build & Package Management
|
||||||
|
|
||||||
|
### General Principles
|
||||||
|
|
||||||
|
- **NEVER invoke `cargo clean`** - rarely necessary and wastes time
|
||||||
|
- **Avoid running full builds unless necessary** - prefer type checking and linting
|
||||||
|
- Run cargo build or any build commands with lots of output in 'quiet' mode, unless you require access to stacktrace/warnings/etc
|
||||||
|
- Alternatively, avoid running the command and stop the prompt there if you simply want the user to test and report back
|
||||||
|
|
||||||
|
### Dependency Management
|
||||||
|
|
||||||
|
- **Always use package manager commands** over manually editing manifest files:
|
||||||
|
- Rust: `cargo add`, `cargo remove`
|
||||||
|
- Node.js: `pnpm add`, `pnpm remove` (or npm/yarn as appropriate)
|
||||||
|
- This ensures lockfiles are updated correctly and consistently
|
||||||
|
- **Get the latest compatible version** unless there's a specific reason not to
|
||||||
|
- You can specify versions, but prefer letting the tool grab the latest
|
||||||
|
- Your knowledge cutoff means you often don't know the latest versions
|
||||||
|
|
||||||
|
### Check Commands
|
||||||
|
|
||||||
|
- Look for project-specific commands first (`just check`, `just test`, etc.)
|
||||||
|
- Always prefer project-specific check commands over raw `cargo` or `npm` commands
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
### Test Organization
|
||||||
|
|
||||||
|
- **Integration/feature tests**: Place in `tests/` directory
|
||||||
|
- **Unit tests**: Place alongside the code they test directly (in same file or adjacent `tests.rs`)
|
||||||
|
- Always check project conventions before adding tests
|
||||||
|
|
||||||
|
### Running Tests
|
||||||
|
|
||||||
|
- Use project-specific test commands (e.g., `just test`) over raw `cargo test`
|
||||||
|
- Prefer `cargo nextest run` for executing tests (unless `just test` is available, regardless of what it invokes)
|
||||||
|
- Run tests after making changes to verify functionality
|
||||||
|
|
||||||
|
### Assertion Style (Rust)
|
||||||
|
|
||||||
|
When a project uses `assert2`:
|
||||||
|
- Use `assert2::assert!()` instead of `assert_eq!()`
|
||||||
|
- Use `assert2::let_assert!()` for pattern matching
|
||||||
|
- Use `assert2::check!()` for non-fatal assertions
|
||||||
|
|
||||||
|
## Code Style
|
||||||
|
|
||||||
|
### Rust
|
||||||
|
|
||||||
|
- Prefer direct imports when heavily used: `use glam::U16Vec2;` then `U16Vec2::new()`
|
||||||
|
- Prefer iterators and combinators over for loops when idiomatic
|
||||||
|
- Prefer slices (`&[T]`) for read-only parameters over `&Vec<T>`
|
||||||
|
- Use `#[inline]` for hot-path functions
|
||||||
|
|
||||||
|
### TypeScript
|
||||||
|
|
||||||
|
- **Prefer absolute imports** (`@/...`) over relative imports when available
|
||||||
|
- Not always necessary or possible - use judgment
|
||||||
|
- Clearer and easier to refactor when the pattern exists in the project
|
||||||
|
- Prefer functional programming patterns (map, filter, reduce) over for loops when idiomatic
|
||||||
|
|
||||||
|
### General Pattern
|
||||||
|
|
||||||
|
- **Write idiomatic code for the language**:
|
||||||
|
- Rust: iterators, combinators, Option/Result patterns
|
||||||
|
- TypeScript: functional patterns, modern ES6+ features
|
||||||
|
- Check existing code patterns before implementing
|
||||||
|
|
||||||
|
## Comments & Documentation
|
||||||
|
|
||||||
|
- Write comments that explain **WHY**, not **WHAT**
|
||||||
|
- **Never reference old implementations, migrations, or refactoring history**
|
||||||
|
- **Never add banner comments** (`===`, `-----`, etc.)
|
||||||
|
- Update project CLAUDE.md when making architectural decisions
|
||||||
|
- Examples of bad comments to avoid:
|
||||||
|
- "Refactored from previous version that used X approach." (never mention past implementations)
|
||||||
|
- "This function was changed to improve performance." (utterly useless, belongs in a commit message potentially, but not code!)
|
||||||
|
- "Logging removed for cleaner output." (also useless, belongs in commit message if anything)
|
||||||
|
|
||||||
|
## Git Commits
|
||||||
|
|
||||||
|
### Safety & Best Practices
|
||||||
|
|
||||||
|
- **Do NOT add co-authoring or attribution to Claude Code/AI**
|
||||||
|
- **Be very careful with commit history**:
|
||||||
|
- Avoid rewriting history unless explicitly prompted by user
|
||||||
|
- **Check if commits actually went through** when hooks fail
|
||||||
|
- **Never accidentally amend previous commits** when user meant to create new one
|
||||||
|
- If pre-commit or hooks fail, verify the commit status before retrying
|
||||||
|
- Write concise commit messages focusing on "why" rather than "what"
|
||||||
|
- If writing the first commit, assume conventional commit style unless user specifies otherwise.
|
||||||
|
- For subsequent commits, follow the project's existing commit style.
|
||||||
|
- Scale the length and detail of the commit message to the impact of the changes.
|
||||||
|
- A simple rename of a function or type may interact with many files, but it does not deserve a length message.
|
||||||
|
- A complex feature addition or refactor deserves a more detailed message explaining the reasoning. Still, keep things concise.
|
||||||
|
- Never include details like "All tests pass, 92% coverage. A few warnings."
|
||||||
|
|
||||||
|
## AI Development Workflow
|
||||||
|
|
||||||
|
### Standard Workflow
|
||||||
|
|
||||||
|
`modify code → check → test → hand off to user`
|
||||||
|
|
||||||
|
1. Make code changes
|
||||||
|
2. Run project-specific check commands
|
||||||
|
3. Run tests if applicable
|
||||||
|
4. **Hand off to user** - do NOT run dev servers or long-running processes
|
||||||
|
5. Wait for user feedback
|
||||||
|
|
||||||
|
### Codebase Exploration
|
||||||
|
|
||||||
|
- **Avoid super complex bash/sed/awk commands** when exploring
|
||||||
|
- Use existing tools (Read, Glob, Grep) to manually explore instead
|
||||||
|
- Check for existing libraries, frameworks, and code patterns before creating new utilities/APIs
|
||||||
|
|
||||||
|
### Question Tool Usage
|
||||||
|
|
||||||
|
- **Use for complex tasks and design decisions**:
|
||||||
|
- Architectural choices
|
||||||
|
- Multiple implementation approaches
|
||||||
|
- Feature design options
|
||||||
|
- Clarifying & confirming important requirements, especially vague or conflicting ones
|
||||||
|
- **Do NOT use for trivial details**:
|
||||||
|
- Variable naming
|
||||||
|
- Minor formatting choices
|
||||||
|
- **Prefer multi-select when appropriate**, single-select when mutually exclusive
|
||||||
|
- User appreciates being consulted on larger, more abstract decisions
|
||||||
|
|
||||||
|
### When NOT to Build/Run
|
||||||
|
|
||||||
|
- ❌ After type checking passes - building is unnecessary
|
||||||
|
- ❌ Dev servers (`pnpm dev`, `cargo run`, etc.)
|
||||||
|
- ❌ Long-running processes or interactive tools
|
||||||
|
- ✅ Only build when user explicitly requests or verifying build config
|
||||||
|
|
||||||
|
## Tool Usage
|
||||||
|
|
||||||
|
### Prefer Specialized Tools Over Bash
|
||||||
|
|
||||||
|
- Read tool for reading files (not `cat`, `head`, `tail`)
|
||||||
|
- Edit tool for editing files (not `sed`, `awk`)
|
||||||
|
- Write tool for creating files (not `echo >`)
|
||||||
|
- Glob tool for finding files (not `find`, `ls`)
|
||||||
|
- Grep tool for searching (not `grep`, `rg`)
|
||||||
|
- Bash ONLY for actual system commands and terminal operations
|
||||||
|
|
||||||
|
## Security & Error Handling
|
||||||
|
|
||||||
|
- Watch for security vulnerabilities: command injection, XSS, SQL injection, OWASP Top 10
|
||||||
|
- If you write insecure code, **immediately fix it**
|
||||||
|
- Validate all external inputs
|
||||||
|
- Use appropriate error types for the language
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
### After Making Changes
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Check (find project-specific command)
|
||||||
|
just check # or equivalent
|
||||||
|
|
||||||
|
# 2. Run tests (if applicable)
|
||||||
|
just test # or equivalent
|
||||||
|
|
||||||
|
# 3. STOP - hand off to user for testing
|
||||||
|
```
|
||||||
|
|
||||||
|
### What to Avoid
|
||||||
|
|
||||||
|
- Don't run dev servers, builds, or interactive processes yourself
|
||||||
|
- Don't use complex bash pipelines when simpler tools exist
|
||||||
|
- Don't manually edit manifests when package manager commands exist
|
||||||
|
- Don't assume commits went through when hooks fail
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Remember**: Check for project-specific CLAUDE.md files that override these global guidelines.
|
||||||
1
home/dot_claude/symlink_settings.json.tmpl
Normal file
1
home/dot_claude/symlink_settings.json.tmpl
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{{ .chezmoi.sourceDir }}/claude-settings.json
|
||||||
267
home/dot_config/atuin/private_config.toml
Normal file
267
home/dot_config/atuin/private_config.toml
Normal file
@@ -0,0 +1,267 @@
|
|||||||
|
## where to store your database, default is your system data directory
|
||||||
|
## linux/mac: ~/.local/share/atuin/history.db
|
||||||
|
## windows: %USERPROFILE%/.local/share/atuin/history.db
|
||||||
|
# db_path = "~/.history.db"
|
||||||
|
|
||||||
|
## where to store your encryption key, default is your system data directory
|
||||||
|
## linux/mac: ~/.local/share/atuin/key
|
||||||
|
## windows: %USERPROFILE%/.local/share/atuin/key
|
||||||
|
# key_path = "~/.key"
|
||||||
|
|
||||||
|
## where to store your auth session token, default is your system data directory
|
||||||
|
## linux/mac: ~/.local/share/atuin/session
|
||||||
|
## windows: %USERPROFILE%/.local/share/atuin/session
|
||||||
|
# session_path = "~/.session"
|
||||||
|
|
||||||
|
## date format used, either "us" or "uk"
|
||||||
|
# dialect = "us"
|
||||||
|
|
||||||
|
## default timezone to use when displaying time
|
||||||
|
## either "l", "local" to use the system's current local timezone, or an offset
|
||||||
|
## from UTC in the format of "<+|->H[H][:M[M][:S[S]]]"
|
||||||
|
## for example: "+9", "-05", "+03:30", "-01:23:45", etc.
|
||||||
|
# timezone = "local"
|
||||||
|
|
||||||
|
## enable or disable automatic sync
|
||||||
|
auto_sync = true
|
||||||
|
|
||||||
|
## enable or disable automatic update checks
|
||||||
|
# update_check = true
|
||||||
|
|
||||||
|
## address of the sync server
|
||||||
|
sync_address = "https://atuin.imfucked.lol"
|
||||||
|
|
||||||
|
## how often to sync history. note that this is only triggered when a command
|
||||||
|
## is ran, so sync intervals may well be longer
|
||||||
|
## set it to 0 to sync after every command
|
||||||
|
# sync_frequency = "10m"
|
||||||
|
|
||||||
|
## which search mode to use
|
||||||
|
## possible values: prefix, fulltext, fuzzy, skim
|
||||||
|
# search_mode = "fuzzy"
|
||||||
|
|
||||||
|
## which filter mode to use by default
|
||||||
|
## possible values: "global", "host", "session", "directory", "workspace"
|
||||||
|
## consider using search.filters to customize the enablement and order of filter modes
|
||||||
|
# filter_mode = "global"
|
||||||
|
|
||||||
|
## With workspace filtering enabled, Atuin will filter for commands executed
|
||||||
|
## in any directory within a git repository tree (default: false).
|
||||||
|
##
|
||||||
|
## To use workspace mode by default when available, set this to true and
|
||||||
|
## set filter_mode to "workspace" or leave it unspecified and
|
||||||
|
## set search.filters to include "workspace" before other filter modes.
|
||||||
|
# workspaces = false
|
||||||
|
|
||||||
|
## which filter mode to use when atuin is invoked from a shell up-key binding
|
||||||
|
## the accepted values are identical to those of "filter_mode"
|
||||||
|
## leave unspecified to use same mode set in "filter_mode"
|
||||||
|
# filter_mode_shell_up_key_binding = "global"
|
||||||
|
|
||||||
|
## which search mode to use when atuin is invoked from a shell up-key binding
|
||||||
|
## the accepted values are identical to those of "search_mode"
|
||||||
|
## leave unspecified to use same mode set in "search_mode"
|
||||||
|
# search_mode_shell_up_key_binding = "fuzzy"
|
||||||
|
|
||||||
|
## which style to use
|
||||||
|
## possible values: auto, full, compact
|
||||||
|
# style = "auto"
|
||||||
|
|
||||||
|
## the maximum number of lines the interface should take up
|
||||||
|
## set it to 0 to always go full screen
|
||||||
|
# inline_height = 0
|
||||||
|
|
||||||
|
## Invert the UI - put the search bar at the top , Default to `false`
|
||||||
|
# invert = false
|
||||||
|
|
||||||
|
## enable or disable showing a preview of the selected command
|
||||||
|
## useful when the command is longer than the terminal width and is cut off
|
||||||
|
# show_preview = true
|
||||||
|
|
||||||
|
## what to do when the escape key is pressed when searching
|
||||||
|
## possible values: return-original, return-query
|
||||||
|
# exit_mode = "return-original"
|
||||||
|
|
||||||
|
## possible values: emacs, subl
|
||||||
|
# word_jump_mode = "emacs"
|
||||||
|
|
||||||
|
## characters that count as a part of a word
|
||||||
|
# word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
||||||
|
|
||||||
|
## number of context lines to show when scrolling by pages
|
||||||
|
# scroll_context_lines = 1
|
||||||
|
|
||||||
|
## use ctrl instead of alt as the shortcut modifier key for numerical UI shortcuts
|
||||||
|
## alt-0 .. alt-9
|
||||||
|
# ctrl_n_shortcuts = false
|
||||||
|
|
||||||
|
## default history list format - can also be specified with the --format arg
|
||||||
|
# history_format = "{time}\t{command}\t{duration}"
|
||||||
|
|
||||||
|
## prevent commands matching any of these regexes from being written to history.
|
||||||
|
## Note that these regular expressions are unanchored, i.e. if they don't start
|
||||||
|
## with ^ or end with $, they'll match anywhere in the command.
|
||||||
|
## For details on the supported regular expression syntax, see
|
||||||
|
## https://docs.rs/regex/latest/regex/#syntax
|
||||||
|
# history_filter = [
|
||||||
|
# "^secret-cmd",
|
||||||
|
# "^innocuous-cmd .*--secret=.+",
|
||||||
|
# ]
|
||||||
|
|
||||||
|
## prevent commands run with cwd matching any of these regexes from being written
|
||||||
|
## to history. Note that these regular expressions are unanchored, i.e. if they don't
|
||||||
|
## start with ^ or end with $, they'll match anywhere in CWD.
|
||||||
|
## For details on the supported regular expression syntax, see
|
||||||
|
## https://docs.rs/regex/latest/regex/#syntax
|
||||||
|
# cwd_filter = [
|
||||||
|
# "^/very/secret/area",
|
||||||
|
# ]
|
||||||
|
|
||||||
|
## Configure the maximum height of the preview to show.
|
||||||
|
## Useful when you have long scripts in your history that you want to distinguish
|
||||||
|
## by more than the first few lines.
|
||||||
|
# max_preview_height = 4
|
||||||
|
|
||||||
|
## Configure whether or not to show the help row, which includes the current Atuin
|
||||||
|
## version (and whether an update is available), a keymap hint, and the total
|
||||||
|
## amount of commands in your history.
|
||||||
|
# show_help = true
|
||||||
|
|
||||||
|
## Configure whether or not to show tabs for search and inspect
|
||||||
|
# show_tabs = true
|
||||||
|
|
||||||
|
## Configure whether or not the tabs row may be auto-hidden, which includes the current Atuin
|
||||||
|
## tab, such as Search or Inspector, and other tabs you may wish to see. This will
|
||||||
|
## only be hidden if there are fewer than this count of lines available, and does not affect the use
|
||||||
|
## of keyboard shortcuts to switch tab. 0 to never auto-hide, default is 8 (lines).
|
||||||
|
## This is ignored except in `compact` mode.
|
||||||
|
# auto_hide_height = 8
|
||||||
|
|
||||||
|
## Defaults to true. This matches history against a set of default regex, and will not save it if we get a match. Defaults include
|
||||||
|
## 1. AWS key id
|
||||||
|
## 2. Github pat (old and new)
|
||||||
|
## 3. Slack oauth tokens (bot, user)
|
||||||
|
## 4. Slack webhooks
|
||||||
|
## 5. Stripe live/test keys
|
||||||
|
# secrets_filter = true
|
||||||
|
|
||||||
|
## Defaults to true. If enabled, upon hitting enter Atuin will immediately execute the command. Press tab to return to the shell and edit.
|
||||||
|
# This applies for new installs. Old installs will keep the old behaviour unless configured otherwise.
|
||||||
|
enter_accept = false
|
||||||
|
|
||||||
|
## Defaults to "emacs". This specifies the keymap on the startup of `atuin
|
||||||
|
## search`. If this is set to "auto", the startup keymap mode in the Atuin
|
||||||
|
## search is automatically selected based on the shell's keymap where the
|
||||||
|
## keybinding is defined. If this is set to "emacs", "vim-insert", or
|
||||||
|
## "vim-normal", the startup keymap mode in the Atuin search is forced to be
|
||||||
|
## the specified one.
|
||||||
|
# keymap_mode = "auto"
|
||||||
|
|
||||||
|
## Cursor style in each keymap mode. If specified, the cursor style is changed
|
||||||
|
## in entering the cursor shape. Available values are "default" and
|
||||||
|
## "{blink,steady}-{block,underline,bar}".
|
||||||
|
# keymap_cursor = { emacs = "blink-block", vim_insert = "blink-block", vim_normal = "steady-block" }
|
||||||
|
|
||||||
|
# network_connect_timeout = 5
|
||||||
|
# network_timeout = 5
|
||||||
|
|
||||||
|
## Timeout (in seconds) for acquiring a local database connection (sqlite)
|
||||||
|
# local_timeout = 5
|
||||||
|
|
||||||
|
## Set this to true and Atuin will minimize motion in the UI - timers will not update live, etc.
|
||||||
|
## Alternatively, set env NO_MOTION=true
|
||||||
|
# prefers_reduced_motion = false
|
||||||
|
|
||||||
|
[stats]
|
||||||
|
## Set commands where we should consider the subcommand for statistics. Eg, kubectl get vs just kubectl
|
||||||
|
# common_subcommands = [
|
||||||
|
# "apt",
|
||||||
|
# "cargo",
|
||||||
|
# "composer",
|
||||||
|
# "dnf",
|
||||||
|
# "docker",
|
||||||
|
# "git",
|
||||||
|
# "go",
|
||||||
|
# "ip",
|
||||||
|
# "kubectl",
|
||||||
|
# "nix",
|
||||||
|
# "nmcli",
|
||||||
|
# "npm",
|
||||||
|
# "pecl",
|
||||||
|
# "pnpm",
|
||||||
|
# "podman",
|
||||||
|
# "port",
|
||||||
|
# "systemctl",
|
||||||
|
# "tmux",
|
||||||
|
# "yarn",
|
||||||
|
# ]
|
||||||
|
|
||||||
|
## Set commands that should be totally stripped and ignored from stats
|
||||||
|
# common_prefix = ["sudo"]
|
||||||
|
|
||||||
|
## Set commands that will be completely ignored from stats
|
||||||
|
# ignored_commands = [
|
||||||
|
# "cd",
|
||||||
|
# "ls",
|
||||||
|
# "vi"
|
||||||
|
# ]
|
||||||
|
|
||||||
|
[keys]
|
||||||
|
# Defaults to true. If disabled, using the up/down key won't exit the TUI when scrolled past the first/last entry.
|
||||||
|
# scroll_exits = true
|
||||||
|
|
||||||
|
[sync]
|
||||||
|
# Enable sync v2 by default
|
||||||
|
# This ensures that sync v2 is enabled for new installs only
|
||||||
|
# In a later release it will become the default across the board
|
||||||
|
records = true
|
||||||
|
|
||||||
|
[preview]
|
||||||
|
## which preview strategy to use to calculate the preview height (respects max_preview_height).
|
||||||
|
## possible values: auto, static
|
||||||
|
## auto: length of the selected command.
|
||||||
|
## static: length of the longest command stored in the history.
|
||||||
|
## fixed: use max_preview_height as fixed height.
|
||||||
|
# strategy = "auto"
|
||||||
|
|
||||||
|
[daemon]
|
||||||
|
## Enables using the daemon to sync. Requires the daemon to be running in the background. Start it with `atuin daemon`
|
||||||
|
# enabled = false
|
||||||
|
|
||||||
|
## How often the daemon should sync in seconds
|
||||||
|
# sync_frequency = 300
|
||||||
|
|
||||||
|
## The path to the unix socket used by the daemon (on unix systems)
|
||||||
|
## linux/mac: ~/.local/share/atuin/atuin.sock
|
||||||
|
## windows: Not Supported
|
||||||
|
# socket_path = "~/.local/share/atuin/atuin.sock"
|
||||||
|
|
||||||
|
## Use systemd socket activation rather than opening the given path (the path must still be correct for the client)
|
||||||
|
## linux: false
|
||||||
|
## mac/windows: Not Supported
|
||||||
|
# systemd_socket = false
|
||||||
|
|
||||||
|
## The port that should be used for TCP on non unix systems
|
||||||
|
# tcp_port = 8889
|
||||||
|
|
||||||
|
# [theme]
|
||||||
|
## Color theme to use for rendering in the terminal.
|
||||||
|
## There are some built-in themes, including the base theme ("default"),
|
||||||
|
## "autumn" and "marine". You can add your own themes to the "./themes" subdirectory of your
|
||||||
|
## Atuin config (or ATUIN_THEME_DIR, if provided) as TOML files whose keys should be one or
|
||||||
|
## more of AlertInfo, AlertWarn, AlertError, Annotation, Base, Guidance, Important, and
|
||||||
|
## the string values as lowercase entries from this list:
|
||||||
|
## https://ogeon.github.io/docs/palette/master/palette/named/index.html
|
||||||
|
## If you provide a custom theme file, it should be called "NAME.toml" and the theme below
|
||||||
|
## should be the stem, i.e. `theme = "NAME"` for your chosen NAME.
|
||||||
|
# name = "autumn"
|
||||||
|
|
||||||
|
## Whether the theme manager should output normal or extra information to help fix themes.
|
||||||
|
## Boolean, true or false. If unset, left up to the theme manager.
|
||||||
|
# debug = true
|
||||||
|
|
||||||
|
[search]
|
||||||
|
## The list of enabled filter modes, in order of priority.
|
||||||
|
## The "workspace" mode is skipped when not in a workspace or workspaces = false.
|
||||||
|
## Default filter mode can be overridden with the filter_mode setting.
|
||||||
|
# filters = [ "global", "host", "session", "workspace", "directory" ]
|
||||||
4
home/dot_config/fish/conf.d/mise.fish
Normal file
4
home/dot_config/fish/conf.d/mise.fish
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Activate mise automatically on shell startup
|
||||||
|
if command -q mise
|
||||||
|
mise activate fish | source
|
||||||
|
end
|
||||||
@@ -1,10 +1,4 @@
|
|||||||
# Fish shell plugins managed by Fisher
|
|
||||||
# https://github.com/jorgebucaran/fisher
|
|
||||||
#
|
#
|
||||||
# To install all plugins: fisher update
|
|
||||||
# To add a plugin: fisher install <plugin>
|
|
||||||
# To remove a plugin: fisher remove <plugin>
|
|
||||||
|
|
||||||
jorgebucaran/fisher
|
jorgebucaran/fisher
|
||||||
ilancosman/tide@v6
|
ilancosman/tide@v6
|
||||||
patrickf1/fzf.fish
|
patrickf1/fzf.fish
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
# Lazy-load mise on first use
|
|
||||||
function mise --wraps mise
|
|
||||||
# Initialize mise only once
|
|
||||||
if not set -q __mise_initialized
|
|
||||||
set -g __mise_initialized 1
|
|
||||||
command mise activate fish | source
|
|
||||||
end
|
|
||||||
|
|
||||||
# Execute the actual mise command
|
|
||||||
command mise $argv
|
|
||||||
end
|
|
||||||
4
home/dot_config/fish/functions/sdk.fish
Normal file
4
home/dot_config/fish/functions/sdk.fish
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
function sdk --description 'SDKMAN wrapper for Fish shell'
|
||||||
|
# Run sdk commands in a Bash subshell
|
||||||
|
bash -c "source '$HOME/.sdkman/bin/sdkman-init.sh' && sdk $argv"
|
||||||
|
end
|
||||||
@@ -4,3 +4,10 @@ include current-theme.conf
|
|||||||
# END_KITTY_THEME
|
# END_KITTY_THEME
|
||||||
|
|
||||||
enable_audio_bell no
|
enable_audio_bell no
|
||||||
|
font_family MesloLGS NF
|
||||||
|
|
||||||
|
# Disable command finish notifications (fixes cryptic "4;0;0" notifications)
|
||||||
|
notify_on_cmd_finish never
|
||||||
|
|
||||||
|
# Claude Code: Enable Shift+Enter for multi-line prompts
|
||||||
|
map shift+enter send_text all \n
|
||||||
|
|||||||
0
home/hooks/.update_pre.ts
Normal file → Executable file
0
home/hooks/.update_pre.ts
Normal file → Executable file
@@ -1,3 +1,4 @@
|
|||||||
nodejs latest
|
nodejs latest
|
||||||
|
pnpm latest
|
||||||
zoxide 0.9.6
|
zoxide 0.9.6
|
||||||
deno 2.2.2
|
deno 2.2.2
|
||||||
|
|||||||
Reference in New Issue
Block a user