mirror of
https://github.com/Xevion/dotfiles.git
synced 2025-12-11 12:07:06 -06:00
Compare commits
26 Commits
9ec39ae48a
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 57b686cab5 | |||
| 8f9565d0e0 | |||
| 075810965a | |||
|
|
262da2f114 | ||
| 26f332e1a4 | |||
| 1c87ddfa96 | |||
| 05257607d3 | |||
| 8a5c83bdf7 | |||
|
|
3c1ebfe086 | ||
|
|
4d20cbbacd | ||
|
|
1e55b4862f | ||
|
|
e5279d9388 | ||
|
|
9fb2c304f3 | ||
|
|
f4a4800af0 | ||
|
|
625cf3c3ae | ||
|
|
751efbc719 | ||
|
|
f8f0e0e615 | ||
| d031952070 | |||
| b71c320ea5 | |||
| 4d914f1e2f | |||
|
|
4095b2d242 | ||
|
|
48d40b2872 | ||
|
|
4f0b832564 | ||
|
|
397b21122e | ||
|
|
02b9236ecf | ||
| 8b718db155 |
5
.vscode/extensions.json
vendored
Normal file
5
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"thenuprojectcontributors.vscode-nushell-lang"
|
||||||
|
]
|
||||||
|
}
|
||||||
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@@ -10,6 +10,7 @@
|
|||||||
"*.toml.tmpl": "toml",
|
"*.toml.tmpl": "toml",
|
||||||
"*.yaml.tmpl": "yaml",
|
"*.yaml.tmpl": "yaml",
|
||||||
"*.cfg.tmpl": "ini",
|
"*.cfg.tmpl": "ini",
|
||||||
|
"*.fish.tmpl": "fish",
|
||||||
"*bash_aliases*": "shellscript",
|
"*bash_aliases*": "shellscript",
|
||||||
"*dot_profile*": "shellscript",
|
"*dot_profile*": "shellscript",
|
||||||
"*dot_gitconfig*": "ini"
|
"*dot_gitconfig*": "ini"
|
||||||
@@ -19,5 +20,6 @@
|
|||||||
"editor.formatOnPaste": false,
|
"editor.formatOnPaste": false,
|
||||||
"editor.formatOnType": false,
|
"editor.formatOnType": false,
|
||||||
"notebook.formatOnSave.enabled": false,
|
"notebook.formatOnSave.enabled": false,
|
||||||
"deno.enable": true
|
"deno.enable": false,
|
||||||
|
"files.simpleDialog.enable": true
|
||||||
}
|
}
|
||||||
|
|||||||
51
.vscode/shellchecker.sh
vendored
51
.vscode/shellchecker.sh
vendored
@@ -1,51 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# set -u
|
|
||||||
|
|
||||||
ROOT="$1"
|
|
||||||
SHELLCHECK_OPTIONS="--color=never --format=gcc"
|
|
||||||
|
|
||||||
# Function to invoke shellcheck or chezmoi execute-template based on file type
|
|
||||||
invoke_checker() {
|
|
||||||
filepath="$1"
|
|
||||||
|
|
||||||
# If the file is a .tmpl file, use chezmoi execute-template
|
|
||||||
if [[ $filepath == *.tmpl ]]; then
|
|
||||||
# TODO: This still doesn't work, for some reason 'sed' just refuses to replace the 'stdin' placeholder with execute-template
|
|
||||||
if ! RENDERED_TEMPLATE=$(cat $filepath | chezmoi execute-template | sed -E "s|stdin|$filepath|"); then
|
|
||||||
# since stdin is used for this, the filepath appears as '-', and thus must be replaced
|
|
||||||
echo "$RENDERED_TEMPLATE" | shellcheck - $SHELLCHECK_OPTIONS | sed "s|^-|$filepath|"
|
|
||||||
else
|
|
||||||
echo $filepath
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# Otherwise, use shellcheck directly
|
|
||||||
shellcheck "$filepath" $SHELLCHECK_OPTIONS
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# chek that 'shellcheck' is available
|
|
||||||
if ! command -v shellcheck &> /dev/null; then
|
|
||||||
echo "shellcheck could not be found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "initial shellcheck started"
|
|
||||||
|
|
||||||
# Run an initial scan of all shell scripts
|
|
||||||
while IFS= read -rd $'\0' file; do
|
|
||||||
invoke_checker "$file"
|
|
||||||
done < <(find "$ROOT" \( -name "*.sh" -o -name "*.sh.tmpl" \) -type f -print0)
|
|
||||||
|
|
||||||
echo "inotifywait started"
|
|
||||||
inotifywait -mr --quiet --format ' %w %f' -e modify $1 |
|
|
||||||
while read -r dir file; do
|
|
||||||
absolute_path=${dir}${file}
|
|
||||||
|
|
||||||
# Check if the changed file ends with .sh or .sh.tmpl
|
|
||||||
if [[ $absolute_path == *.sh || $absolute_path == *.sh.tmpl ]]; then
|
|
||||||
invoke_checker $absolute_path
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "inotify watcher stopped"
|
|
||||||
58
.vscode/tasks.json
vendored
58
.vscode/tasks.json
vendored
@@ -1,58 +0,0 @@
|
|||||||
{
|
|
||||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
|
||||||
// for the documentation about the tasks.json format
|
|
||||||
"version": "2.0.0",
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"label": "Shellcheck",
|
|
||||||
"type": "shell",
|
|
||||||
"isBackground": true,
|
|
||||||
"command": "${workspaceFolder}/.vscode/shellchecker.sh ${workspaceFolder}",
|
|
||||||
"problemMatcher": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"source": "shellcheck",
|
|
||||||
"owner": "bash",
|
|
||||||
"fileLocation": ["autoDetect", "${workspaceFolder}"],
|
|
||||||
"pattern": {
|
|
||||||
// info/style joined into 'note'
|
|
||||||
"regexp": "^(.*):(\\d+):(\\d+):\\s*(error|warning|note):\\s*(.*)$",
|
|
||||||
"file": 1,
|
|
||||||
"line": 2,
|
|
||||||
"column": 3,
|
|
||||||
"severity": 4,
|
|
||||||
"message": 5
|
|
||||||
},
|
|
||||||
"background": {
|
|
||||||
"activeOnStart": true,
|
|
||||||
"beginsPattern": "^inotify watcher started$",
|
|
||||||
"endsPattern": "^inotify watcher stopped$"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"source": "chezmoi",
|
|
||||||
"owner": "chezmoi",
|
|
||||||
"fileLocation": ["autoDetect", "${workspaceFolder}"],
|
|
||||||
"pattern": {
|
|
||||||
"regexp": "^chezmoi: template: (.*):(\\d+):(\\d+): executing \".+\" (at .*)$",
|
|
||||||
"file": 1,
|
|
||||||
"line": 2,
|
|
||||||
"column": 3,
|
|
||||||
"message": 4
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"runOptions": {
|
|
||||||
"runOn": "folderOpen"
|
|
||||||
},
|
|
||||||
"presentation": {
|
|
||||||
"echo": true,
|
|
||||||
"reveal": "always",
|
|
||||||
"revealProblems": "never",
|
|
||||||
"focus": false,
|
|
||||||
"panel": "dedicated",
|
|
||||||
"clear": false
|
|
||||||
},
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
149
CLAUDE.md
Normal file
149
CLAUDE.md
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
# Chezmoi Dotfiles Repository - AI Assistant Guidelines
|
||||||
|
|
||||||
|
## Repository Context
|
||||||
|
|
||||||
|
This is a **chezmoi source directory** for managing dotfiles across multiple machines. Files here are SOURCE files that get templated and deployed to the home directory.
|
||||||
|
|
||||||
|
### Key Concepts
|
||||||
|
|
||||||
|
**Source vs Target Pattern:**
|
||||||
|
- **Source**: `~/.local/share/chezmoi/home/dot_bashrc.tmpl` (what you edit)
|
||||||
|
- **Target**: `~/.bashrc` (what gets deployed after `chezmoi apply`)
|
||||||
|
- Edit source files only. DO NOT modify target files directly.
|
||||||
|
|
||||||
|
**File Naming Conventions:**
|
||||||
|
- `dot_` `.` (e.g., `dot_bashrc` becomes `~/.bashrc`)
|
||||||
|
- `.tmpl` suffix Go template file (rendered with platform detection)
|
||||||
|
- `private_` prefix 600 permissions
|
||||||
|
- `encrypted_*.age` age-encrypted files (safe to commit)
|
||||||
|
- `run_onchange_*` executable scripts that run during apply
|
||||||
|
|
||||||
|
**Template System:**
|
||||||
|
- Uses Go templates with platform detection
|
||||||
|
- 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
|
||||||
|
|
||||||
|
**Secret Management:**
|
||||||
|
- Age encryption for sensitive files (recipient: `age1s3ctpj9lafl6qwyvd89sn448us7gdzd53d8yyhsc7zny78c0k4sqerrkze`)
|
||||||
|
- Doppler integration for API keys/tokens
|
||||||
|
- Encryption key bootstrapped via hooks from Doppler
|
||||||
|
|
||||||
|
**Hooks:**
|
||||||
|
- `.init_pre.ts` and `.update_pre.ts` (TypeScript via Bun)
|
||||||
|
- Bootstrap encryption key from Doppler before apply
|
||||||
|
- Handle `chezmoi init` and `chezmoi update --init`
|
||||||
|
|
||||||
|
**GPG Configuration (WSL-only):**
|
||||||
|
- `~/.gnupg` → Symlink to Windows GPG directory (`C:\Users\Xevion\AppData\Roaming\gnupg`)
|
||||||
|
- `/usr/local/bin/gpg` → Symlink to Windows `gpg.exe` (via `run_onchange_before_setup-wsl-gpg.sh.tmpl`)
|
||||||
|
- Enables native Windows Qt5 pinentry GUI for passphrase prompts
|
||||||
|
- Automatic setup on WSL; ignored on regular Linux
|
||||||
|
|
||||||
|
## Critical Restrictions
|
||||||
|
|
||||||
|
### NEVER Do These Actions
|
||||||
|
|
||||||
|
1. **DO NOT apply changes to filesystem**
|
||||||
|
- NO `chezmoi apply`
|
||||||
|
- NO direct file writes to `~/.bashrc`, `~/.gitconfig`, etc.
|
||||||
|
- Changes stay in source directory only
|
||||||
|
|
||||||
|
2. **DO NOT commit or push automatically**
|
||||||
|
- NO `git commit` without explicit user request
|
||||||
|
- NO `git push` on your own
|
||||||
|
- Let user review changes first
|
||||||
|
|
||||||
|
3. **DO NOT embed secrets in plaintext**
|
||||||
|
- NO API keys, tokens, or passwords in plain text
|
||||||
|
- Use Doppler variables: `{{ dopplerProjectJson.KEY_NAME }}`
|
||||||
|
- Use age encryption for sensitive files
|
||||||
|
- Reference encryption: `encrypted_private_*.age`
|
||||||
|
|
||||||
|
4. **DO NOT verify changes yourself**
|
||||||
|
- NO running build/test commands unless requested
|
||||||
|
- Let user test changes with `chezmoi diff` or `chezmoi apply --dry-run`
|
||||||
|
- Ask user to verify after making changes
|
||||||
|
|
||||||
|
### Recommended Actions
|
||||||
|
|
||||||
|
1. **Edit source files** in `home/` directory
|
||||||
|
- Modify `.tmpl` files with proper template syntax
|
||||||
|
- Respect platform conditionals (`{{ if eq .chezmoi.os "windows" }}`)
|
||||||
|
- Maintain existing template structure
|
||||||
|
|
||||||
|
2. **Explain impact** of changes
|
||||||
|
- Which target files will be affected
|
||||||
|
- Platform-specific behavior
|
||||||
|
- What the user should test
|
||||||
|
|
||||||
|
3. **Suggest verification commands**
|
||||||
|
- `chezmoi diff` - preview changes
|
||||||
|
- `chezmoi apply --dry-run` - simulate apply
|
||||||
|
- `chezmoi status` - see what's changed
|
||||||
|
|
||||||
|
4. **Use templates correctly**
|
||||||
|
- 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 }}`
|
||||||
|
- 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)
|
||||||
|
- When a task is completed, check if `TODO.md` exists in the repository
|
||||||
|
- If the completed task relates to items in TODO.md, **suggest** updating the file
|
||||||
|
- Examples of suggestions:
|
||||||
|
- "I've completed [task]. Would you like me to update TODO.md to mark this item as complete?"
|
||||||
|
- "This work relates to items in TODO.md. Should I update the relevant checkboxes?"
|
||||||
|
- **NEVER** modify TODO.md without explicit user approval
|
||||||
|
- User must explicitly approve (even if not specifically) before making changes
|
||||||
|
- Acceptable approvals: "yes", "go ahead", "update it", "sure", etc.
|
||||||
|
- If unclear, ask: "Should I update TODO.md to reflect this completion?"
|
||||||
|
|
||||||
|
## Common Tasks
|
||||||
|
|
||||||
|
**Add new dotfile:**
|
||||||
|
```bash
|
||||||
|
# DO NOT run - explain this to user instead
|
||||||
|
chezmoi add ~/.newconfig
|
||||||
|
# Edit: home/dot_newconfig or home/dot_newconfig.tmpl
|
||||||
|
```
|
||||||
|
|
||||||
|
**Add sensitive config:**
|
||||||
|
```bash
|
||||||
|
# DO NOT run - explain this to user instead
|
||||||
|
chezmoi add --encrypt ~/.ssh/config
|
||||||
|
# Creates: home/private_dot_ssh/encrypted_config.age
|
||||||
|
```
|
||||||
|
|
||||||
|
**Edit existing file:**
|
||||||
|
- Locate source: `home/dot_config/nushell/config.nu.tmpl`
|
||||||
|
- Make changes to source file
|
||||||
|
- User runs: `chezmoi apply` or `chezmoi apply ~/.config/nushell/config.nu`
|
||||||
|
|
||||||
|
## Platform Coverage
|
||||||
|
|
||||||
|
- **OS**: Windows, Linux (WSL/native), macOS
|
||||||
|
- **Shells**: bash, fish, nushell, PowerShell
|
||||||
|
- **Tools**: 30+ development tools configured (pyenv, bun, cargo, etc.)
|
||||||
|
- **Secrets**: Doppler + age encryption
|
||||||
|
|
||||||
|
## When Uncertain
|
||||||
|
|
||||||
|
1. **Ask before modifying** templates with complex platform logic
|
||||||
|
2. **Clarify secret handling** before adding sensitive data
|
||||||
|
3. **Let user verify** all changes before suggesting next steps
|
||||||
|
4. **Prefer explanations** over automated actions
|
||||||
|
|
||||||
|
# Extended Documentation
|
||||||
|
|
||||||
|
@README.md
|
||||||
|
@TODO.md
|
||||||
|
@FAQ.md
|
||||||
|
@ONBOARDING.md
|
||||||
@@ -10,8 +10,10 @@ When **bolded**, this application won't be installed automatically. It implies t
|
|||||||
- [ ] bw
|
- [ ] bw
|
||||||
- Semi-required applications
|
- Semi-required applications
|
||||||
- [ ] **hishtory**
|
- [ ] **hishtory**
|
||||||
- [ ] **zsh**
|
|
||||||
- [ ] **oh-my-zsh**
|
|
||||||
- Preferred applications
|
- Preferred applications
|
||||||
- [ ] kitty
|
- [ ] kitty
|
||||||
- [ ] micro
|
- [ ] micro
|
||||||
|
- WSL-specific requirements
|
||||||
|
- [ ] **GPG4win** (Windows) - Required for Git commit signing with GUI pinentry
|
||||||
|
- Install via: `scoop install gpg4win`
|
||||||
|
- WSL will automatically link to Windows GPG for native passphrase dialogs
|
||||||
|
|||||||
309
TODO.md
309
TODO.md
@@ -1,8 +1,301 @@
|
|||||||
- age executable is not installed on init
|
# Dotfiles Repository TODO
|
||||||
- rbw executable needs better configuration
|
|
||||||
- rbw config not tracked
|
## Overview
|
||||||
- hishtory executable not available on init
|
|
||||||
- add GPG key to bw
|
## Critical
|
||||||
- dracula theme tracking, kitty/micro
|
|
||||||
- lazygit fix difftool
|
*Must be done first - establishes the groundwork for everything else*
|
||||||
- testing in github codespaces
|
|
||||||
|
### 1. Create Installation Workflow Documentation
|
||||||
|
|
||||||
|
- [ ] Document bootstrap process for fresh Linux installations
|
||||||
|
- [ ] Document bootstrap process for WSL installations
|
||||||
|
- [ ] Document bootstrap process for Windows (including Bun requirement)
|
||||||
|
- [ ] Create pre-flight checklist (required tools: Bun, age encryption, chezmoi, etc.)
|
||||||
|
- [x] Document hook system (`.init_pre.ts`, `.update_pre.ts`) and when they execute
|
||||||
|
- [ ] Add troubleshooting guide for common installation issues
|
||||||
|
- [ ] Document the relationship between source directory and target directory
|
||||||
|
- [ ] Add step-by-step first-time setup guide
|
||||||
|
- [ ] Document Doppler setup requirements
|
||||||
|
- [ ] Create quick reference card for emergency recovery
|
||||||
|
- [ ] Document proper process of adding symlinks (mention updating chemzoiignore, etc.)
|
||||||
|
|
||||||
|
### 2. Standardize Encryption & Authentication Workflow
|
||||||
|
|
||||||
|
- [ ] Document age encryption setup and key management
|
||||||
|
- [ ] Create guide for Doppler integration (project setup, config selection)
|
||||||
|
- [ ] Document secret rotation process and schedule
|
||||||
|
- [ ] Create checklist for adding new encrypted values
|
||||||
|
- [x] Consolidate all authentication tokens/keys into Doppler or age-encrypted files (R2 and private domain migrated)
|
||||||
|
- [ ] Document age recipient key storage and backup strategy
|
||||||
|
- [ ] Add encryption troubleshooting guide
|
||||||
|
- [ ] Create template for encrypted file naming conventions
|
||||||
|
- [ ] Document `.private_*` file pattern usage
|
||||||
|
- [ ] Audit existing secrets and migrate to standard locations
|
||||||
|
|
||||||
|
### 3. Define Cross-Platform Strategy
|
||||||
|
|
||||||
|
- [ ] Create platform detection reference (`.data.wsl`, `.data.chassis`, OS checks)
|
||||||
|
- [ ] Document template conditionals strategy (when to use OS-specific blocks)
|
||||||
|
- [ ] Define Windows vs WSL separation of concerns
|
||||||
|
- [ ] Create decision matrix for which tools go where (Windows native vs WSL)
|
||||||
|
- [ ] Document how to handle tools that exist on both platforms
|
||||||
|
- [ ] Define file path conventions for cross-platform compatibility
|
||||||
|
- [ ] Create testing strategy for multi-platform templates
|
||||||
|
- [x] Document Windows-specific quirks and workarounds (WSL GPG integration documented)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Important
|
||||||
|
|
||||||
|
*Affects daily use and prevents frustration*
|
||||||
|
|
||||||
|
### 4. Refactor Shell Configuration Architecture
|
||||||
|
|
||||||
|
- [ ] Consolidate PATH modifications into single, organized section in `commonrc.sh.tmpl`
|
||||||
|
- [ ] Create modular PATH loading system (one block per tool with conditional checks)
|
||||||
|
- [ ] Separate PATH, environment variables, and shell completions into logical sections
|
||||||
|
- [ ] Document load order (`.bashrc` → `commonrc.sh` → `.bash_aliases`)
|
||||||
|
- [ ] Add comments explaining each tool's PATH modification
|
||||||
|
- [ ] Eliminate duplicate PATH additions
|
||||||
|
- [ ] Create standard pattern for conditional tool loading
|
||||||
|
- [ ] Add PATH deduplication function
|
||||||
|
- [ ] Move WSL-specific settings to dedicated section (currently at commonrc.sh.tmpl:109-114)
|
||||||
|
- [ ] Organize tool sections alphabetically or by category
|
||||||
|
|
||||||
|
### 5. Shell Completions Cleanup
|
||||||
|
|
||||||
|
- [ ] Audit all completion sources in `commonrc.sh.tmpl` (lines 17-22, 35-39, 71-76)
|
||||||
|
- [ ] Create consistent pattern for conditional completion loading
|
||||||
|
- [ ] Move completions to dedicated section (after PATH, before aliases)
|
||||||
|
- [ ] Add error handling for missing completion files
|
||||||
|
- [ ] Document which tools provide completions
|
||||||
|
- [ ] Test completions on bash
|
||||||
|
- [ ] Add completion loading performance optimization
|
||||||
|
- [ ] Document how to add new tool completions
|
||||||
|
|
||||||
|
### 6. Windows PATH Management
|
||||||
|
|
||||||
|
- [ ] Create PowerShell script for Windows-only PATH modifications
|
||||||
|
- [ ] Document registry-based PATH vs user PATH vs chezmoi-managed PATH
|
||||||
|
- [ ] Create chezmoi hook for Windows PATH synchronization
|
||||||
|
- [ ] Add validation script to check PATH consistency
|
||||||
|
- [ ] Document how to add new Windows PATH entries
|
||||||
|
- [ ] Create backup/restore mechanism for Windows PATH
|
||||||
|
- [ ] Add Windows environment variable management strategy
|
||||||
|
- [ ] Test PATH length limits on Windows
|
||||||
|
|
||||||
|
### 7. Core Tool Standardization
|
||||||
|
|
||||||
|
**mise (development environment manager):**
|
||||||
|
- [ ] Add mise configuration file (`.mise.toml` or per-project configs)
|
||||||
|
- [ ] Document mise setup and installation
|
||||||
|
- [x] Integrate mise activation with shell configs
|
||||||
|
- [ ] Document tool version management strategy
|
||||||
|
- [ ] Add mise to installation checklist
|
||||||
|
|
||||||
|
**bun (JavaScript runtime):**
|
||||||
|
- [ ] Document global install location and version management
|
||||||
|
- [ ] Add shell completions configuration
|
||||||
|
- [ ] Document bun vs npm vs pnpm strategy
|
||||||
|
- [ ] Add bun to PATH in standard location
|
||||||
|
- [ ] Test bun hooks (`.init_pre.ts`, `.update_pre.ts`) on all platforms
|
||||||
|
|
||||||
|
**Windows Terminal:**
|
||||||
|
- [x] Add `settings.json` template to dotfiles
|
||||||
|
- [ ] Document theme/color scheme customization
|
||||||
|
- [ ] Add font configuration (Cascadia Code, Nerd Fonts, etc.)
|
||||||
|
- [ ] Configure profiles for PowerShell, WSL, cmd
|
||||||
|
- [ ] Document Windows Terminal installation method
|
||||||
|
|
||||||
|
**Claude (AI assistant):**
|
||||||
|
- [ ] Document Claude configuration location
|
||||||
|
- [ ] Add API key management strategy (Doppler?)
|
||||||
|
- [x] Add global CLAUDE.md to dotfiles
|
||||||
|
- [ ] Create project-specific CLAUDE.md templates
|
||||||
|
- [ ] Document sync strategy across machines
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nice to Have
|
||||||
|
|
||||||
|
*Important for consistency across machines*
|
||||||
|
|
||||||
|
### 8. IDE Configuration Management
|
||||||
|
|
||||||
|
**VS Code:**
|
||||||
|
- [ ] Migrate `settings.json` to dotfiles (separate user vs workspace settings)
|
||||||
|
- [ ] Add `keybindings.json` template
|
||||||
|
- [ ] Create extensions list and installation script
|
||||||
|
- [ ] Document settings sync strategy (Settings Sync vs chezmoi)
|
||||||
|
- [ ] Add snippets directory
|
||||||
|
- [ ] Configure language-specific settings
|
||||||
|
|
||||||
|
**Cursor:**
|
||||||
|
- [ ] Determine config overlap with VS Code
|
||||||
|
- [ ] Manage Cursor-specific settings
|
||||||
|
- [ ] Add Cursor AI configuration
|
||||||
|
- [ ] Document Cursor vs VS Code decision criteria
|
||||||
|
- [ ] Add Cursor to installation workflow
|
||||||
|
|
||||||
|
**JetBrains:**
|
||||||
|
- [ ] Add IDE configs for IntelliJ IDEA
|
||||||
|
- [ ] Add IDE configs for PyCharm
|
||||||
|
- [ ] Add IDE configs for other JetBrains IDEs if needed
|
||||||
|
- [ ] Identify portable vs machine-specific settings
|
||||||
|
- [ ] Document plugin installation strategy
|
||||||
|
- [ ] Add color scheme/theme configuration
|
||||||
|
|
||||||
|
**Meta:**
|
||||||
|
- [ ] Create sync strategy for each IDE (template vs symlink vs manual)
|
||||||
|
- [ ] Document extension/plugin installation automation
|
||||||
|
- [ ] Add IDE version tracking and update strategy
|
||||||
|
- [ ] Create IDE-specific .gitignore patterns
|
||||||
|
|
||||||
|
### 9. AI Tools Configuration
|
||||||
|
|
||||||
|
- [ ] Audit existing AI tool configs (`.claude/`, API keys, prompts)
|
||||||
|
- [ ] Add Claude Desktop configuration to dotfiles
|
||||||
|
- [ ] Add Gemini configuration (if applicable)
|
||||||
|
- [ ] Document per-project vs global AI configurations
|
||||||
|
- [ ] Create templates for common AI prompts/rules
|
||||||
|
- [ ] Integrate API keys into Doppler
|
||||||
|
- [ ] Add model preferences and settings
|
||||||
|
- [ ] Document AI tool usage workflows
|
||||||
|
|
||||||
|
### 10. Development Tool Configurations
|
||||||
|
|
||||||
|
**Git:**
|
||||||
|
- [x] Expand `.gitconfig.tmpl` (currently at `home/dot_config/git/config-ryan.tmpl`)
|
||||||
|
- [x] Add git aliases and shortcuts
|
||||||
|
- [x] Configure diff and merge tools
|
||||||
|
- [x] Add commit signing configuration
|
||||||
|
- [ ] Configure git credential helpers
|
||||||
|
- [ ] Add git hooks templates
|
||||||
|
|
||||||
|
**Language Tools:**
|
||||||
|
- [ ] Add Python development configs (pyproject.toml templates, .python-version)
|
||||||
|
- [ ] Add Node.js configs (.npmrc, .nvmrc templates)
|
||||||
|
- [ ] Add Rust configs (rustfmt.toml, clippy settings)
|
||||||
|
- [ ] Add Go configs (go.env, tool preferences)
|
||||||
|
- [ ] Add language-specific linter/formatter configs
|
||||||
|
|
||||||
|
**Terminal Emulators:**
|
||||||
|
- [ ] Expand Kitty configuration (currently at `home/dot_config/kitty/`)
|
||||||
|
- [ ] Add Alacritty config (if used)
|
||||||
|
- [ ] Document terminal color schemes
|
||||||
|
- [ ] Add font configuration and Nerd Fonts setup
|
||||||
|
|
||||||
|
**Other Tools:**
|
||||||
|
- [ ] Expand Wakatime config (currently at `home/dot_wakatime.cfg.tmpl`)
|
||||||
|
- [ ] Add tmux configuration
|
||||||
|
- [ ] Add vim/neovim basic config
|
||||||
|
- [ ] Add SSH config template
|
||||||
|
- [x] Add GPG configuration
|
||||||
|
|
||||||
|
### 11. Package Management Strategy
|
||||||
|
|
||||||
|
- [ ] Audit `run_onchange_install-packages.sh.tmpl`
|
||||||
|
- [ ] Separate Linux, WSL, and Windows package lists
|
||||||
|
- [ ] Create idempotent package installation scripts
|
||||||
|
- [ ] Document package dependencies and installation order
|
||||||
|
- [ ] Add Windows package manager integration (winget/chocolatey/scoop)
|
||||||
|
- [ ] Add Homebrew package list for Linux
|
||||||
|
- [ ] Add platform-specific package selection logic
|
||||||
|
- [ ] Test package installation on clean system
|
||||||
|
- [ ] Document manual installation steps for proprietary tools
|
||||||
|
- [ ] Add package version pinning strategy
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Polishing
|
||||||
|
|
||||||
|
*Nice-to-have improvements and quality of life*
|
||||||
|
|
||||||
|
### 12. Enhanced Documentation
|
||||||
|
|
||||||
|
- [x] Expand README.md with comprehensive sections (Major refactor completed)
|
||||||
|
- [ ] Add ARCHITECTURE.md explaining repo structure
|
||||||
|
- [ ] Create CONTRIBUTING.md for your future self
|
||||||
|
- [ ] Add inline comments to all template files
|
||||||
|
- [ ] Document all chezmoi hooks and their purposes
|
||||||
|
- [ ] Create REFERENCE.md with template variable reference
|
||||||
|
- [ ] Add FAQ.md with common issues and solutions
|
||||||
|
- [ ] Document chezmoi commands cheat sheet
|
||||||
|
- [ ] Add diagrams for config flow and file organization
|
||||||
|
- [ ] Create video walkthrough or screenshots
|
||||||
|
|
||||||
|
### 13. Quality of Life Improvements
|
||||||
|
|
||||||
|
- [ ] Add chezmoi status checking script (detect drift)
|
||||||
|
- [ ] Create update reminder system (terminal startup notification)
|
||||||
|
- [ ] Implement "unmanaged files" workflow (mentioned in README.md:48-54)
|
||||||
|
- [ ] Add fuzzy search for config diffs (fzf integration)
|
||||||
|
- [ ] Create backup/snapshot system before applying changes
|
||||||
|
- [ ] Add interactive configuration wizard for new machines
|
||||||
|
- [ ] Create script to list all managed files
|
||||||
|
- [ ] Add change preview before applying updates
|
||||||
|
- [ ] Create rollback mechanism
|
||||||
|
- [ ] Add performance profiling for shell startup time
|
||||||
|
|
||||||
|
### 14. Advanced Features from README "Intended Goals"
|
||||||
|
|
||||||
|
- [ ] rbw auto-lock implementation (8hr sessions) (README.md:58-60)
|
||||||
|
- [ ] Lock rbw when computer sleeps, idle, or screen saver activates
|
||||||
|
- [ ] GitHub language attributes script (pre-commit hook for .gitattributes) (README.md:71-74)
|
||||||
|
- [ ] Terminal startup checks for out-of-date configs (README.md:69-70)
|
||||||
|
- [ ] VS Code automatic setup improvements (README.md:68)
|
||||||
|
- [ ] Neovim configuration management (README.md:67)
|
||||||
|
- [ ] Add timer-based update checking with low-latency startup
|
||||||
|
- [ ] Implement device-specific configuration system (README.md:65)
|
||||||
|
|
||||||
|
### 15. Testing & Validation
|
||||||
|
|
||||||
|
- [ ] Create test script for fresh installation simulation
|
||||||
|
- [ ] Add validation for encrypted secrets (age decrypt test)
|
||||||
|
- [ ] Create pre-commit hooks for template syntax checking
|
||||||
|
- [ ] Add CI/CD for template validation (GitHub Actions)
|
||||||
|
- [ ] Document rollback procedures
|
||||||
|
- [ ] Create test matrix for different platforms (Linux/WSL/Windows)
|
||||||
|
- [ ] Add shellcheck integration for shell scripts
|
||||||
|
- [ ] Test hook execution on all platforms
|
||||||
|
- [ ] Validate Doppler integration
|
||||||
|
- [ ] Add template rendering test suite
|
||||||
|
|
||||||
|
### 16. Cleanup & Maintenance
|
||||||
|
|
||||||
|
- [x] Commit deletion of removed files (nushell/env.nu, dot_gitconfig, etc.) - Converted to templates instead
|
||||||
|
- [ ] Clean up commented-out code in commonrc.sh.tmpl (lines 122-130)
|
||||||
|
- [ ] Review and update `.chezmoiignore` patterns
|
||||||
|
- [ ] Audit and remove unused templates
|
||||||
|
- [ ] Standardize file naming conventions across repo
|
||||||
|
- [x] Remove deprecated hooks (old shell-based hooks if fully migrated to TS) - Migrated to TypeScript
|
||||||
|
- [ ] Archive old/unused configuration files
|
||||||
|
- [ ] Update .gitattributes for proper file type detection
|
||||||
|
- [ ] Clean up temporary/test files
|
||||||
|
- [ ] Reorganize directory structure if needed
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Legacy Items from Original TODO
|
||||||
|
|
||||||
|
These items were in the original TODO.md and need to be categorized/completed:
|
||||||
|
|
||||||
|
- [ ] **age executable not installed on init** - Add to Priority 1, Item 1 (installation docs)
|
||||||
|
- [ ] **rbw executable needs better configuration** - Related to Priority 4, Item 14 (rbw auto-lock)
|
||||||
|
- [ ] **rbw config not tracked** - Add rbw config to dotfiles
|
||||||
|
- [ ] **hishtory executable not available on init** - Add to installation checklist
|
||||||
|
- [x] **add GPG key to bw** - GPG configuration completed with WSL integration
|
||||||
|
- [ ] **dracula theme tracking, kitty/micro** - Add to Priority 3, Item 10 (dev tools)
|
||||||
|
- [ ] **lazygit fix difftool** - Add lazygit config to dotfiles
|
||||||
|
- [ ] **testing in github codespaces** - Add to Priority 4, Item 15 (testing)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Items can be worked on in any order within their priority level
|
||||||
|
- Some items have dependencies (e.g., documentation should reflect implemented changes)
|
||||||
|
- Use `chezmoi cd` to navigate to source directory when working on configs
|
||||||
|
- Test changes in WSL/Linux before applying to Windows (or vice versa)
|
||||||
|
- Keep encrypted secrets out of git history - use age encryption or Doppler
|
||||||
|
|||||||
@@ -28,12 +28,12 @@
|
|||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
{{- /* Detect if running in WSL */ -}}
|
{{- /* Detect if running in WSL */ -}}
|
||||||
{{- $wsl := true -}}
|
{{- $wsl := false -}}
|
||||||
{{- if eq .chezmoi.os "linux" -}}
|
{{- if eq .chezmoi.os "linux" -}}
|
||||||
{{- $wsl = (.chezmoi.kernel.osrelease | lower | contains "microsoft") -}}
|
{{- $wsl = (.chezmoi.kernel.osrelease | lower | contains "microsoft") -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
{{ $privateDomain := promptStringOnce . "privateDomain" "What is the private domain" }}
|
encryption = "age"
|
||||||
|
|
||||||
[merge]
|
[merge]
|
||||||
command = "bash"
|
command = "bash"
|
||||||
@@ -43,18 +43,17 @@ args = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[data]
|
[data]
|
||||||
privateDomain = {{ $privateDomain | quote }}
|
|
||||||
chassis = {{ $chassisType | quote }}
|
chassis = {{ $chassisType | quote }}
|
||||||
wsl = {{ $wsl }}
|
wsl = {{ $wsl }}
|
||||||
|
|
||||||
[diff]
|
[diff]
|
||||||
|
pager = "delta"
|
||||||
scriptContents = false
|
scriptContents = false
|
||||||
|
|
||||||
[data.cpu]
|
[data.cpu]
|
||||||
cores = {{ $cpuCores }}
|
cores = {{ $cpuCores }}
|
||||||
threads = {{ $cpuThreads }}
|
threads = {{ $cpuThreads }}
|
||||||
|
|
||||||
encryption = "age"
|
|
||||||
[age]
|
[age]
|
||||||
identity = "{{ .chezmoi.homeDir }}/key.txt"
|
identity = "{{ .chezmoi.homeDir }}/key.txt"
|
||||||
recipient = "age1s3ctpj9lafl6qwyvd89sn448us7gdzd53d8yyhsc7zny78c0k4sqerrkze"
|
recipient = "age1s3ctpj9lafl6qwyvd89sn448us7gdzd53d8yyhsc7zny78c0k4sqerrkze"
|
||||||
@@ -64,8 +63,17 @@ encryption = "age"
|
|||||||
config = "production"
|
config = "production"
|
||||||
|
|
||||||
[hooks.init.pre]
|
[hooks.init.pre]
|
||||||
command = "{{ .chezmoi.sourceDir }}/hooks/.init_pre.ts"
|
command = "bun"
|
||||||
|
args = ["{{ .chezmoi.sourceDir }}/hooks/.init_pre.ts"]
|
||||||
[hooks.update.pre]
|
[hooks.update.pre]
|
||||||
command = "{{ .chezmoi.sourceDir }}/hooks/.update_pre.sh"
|
command = "bun"
|
||||||
[hooks.read-source-state.pre]
|
args = ["{{ .chezmoi.sourceDir }}/hooks/.update_pre.ts"]
|
||||||
command = "{{ .chezmoi.sourceDir }}/hooks/.read-source-state_pre.sh"
|
|
||||||
|
{{ if eq .chezmoi.os "windows" }}
|
||||||
|
[cd]
|
||||||
|
command = "powershell.exe"
|
||||||
|
args = ["-NoLogo"]
|
||||||
|
{{ else }}
|
||||||
|
[cd]
|
||||||
|
command = "fish"
|
||||||
|
{{ end }}
|
||||||
@@ -1,46 +1,2 @@
|
|||||||
[".asdf"]
|
# External repositories managed by chezmoi
|
||||||
type = "archive"
|
# https://www.chezmoi.io/reference/special-files-and-directories/chezmoiexternal-format/
|
||||||
url = "https://github.com/asdf-vm/asdf/archive/v0.14.1.tar.gz"
|
|
||||||
exact = true
|
|
||||||
stripComponents = 1
|
|
||||||
refreshPeriod = "168h"
|
|
||||||
|
|
||||||
[".oh-my-zsh"]
|
|
||||||
type = "archive"
|
|
||||||
url = "https://github.com/ohmyzsh/ohmyzsh/archive/master.tar.gz"
|
|
||||||
exact = true
|
|
||||||
stripComponents = 1
|
|
||||||
refreshPeriod = "72h"
|
|
||||||
exclude = [
|
|
||||||
"*/.*",
|
|
||||||
"*/templates",
|
|
||||||
"*/themes",
|
|
||||||
]
|
|
||||||
|
|
||||||
[".oh-my-zsh/custom/themes/powerlevel10k"]
|
|
||||||
type = "archive"
|
|
||||||
url = "https://github.com/romkatv/powerlevel10k/archive/{{ (gitHubLatestRelease "romkatv/powerlevel10k").TagName }}.tar.gz"
|
|
||||||
exact = true
|
|
||||||
stripComponents = 1
|
|
||||||
refreshPeriod = "72h"
|
|
||||||
|
|
||||||
[".oh-my-zsh/custom/plugins/zsh-autosuggestions"]
|
|
||||||
type = "archive"
|
|
||||||
url = "https://github.com/zsh-users/zsh-autosuggestions/archive/master.tar.gz"
|
|
||||||
exact = true
|
|
||||||
stripComponents = 1
|
|
||||||
refreshPeriod = "168h"
|
|
||||||
|
|
||||||
[".oh-my-zsh/custom/plugins/F-Sy-H"]
|
|
||||||
type = "archive"
|
|
||||||
url = "https://github.com/z-shell/F-Sy-H/archive/master.tar.gz"
|
|
||||||
exact = true
|
|
||||||
stripComponents = 1
|
|
||||||
refreshPeriod = "168h"
|
|
||||||
|
|
||||||
[".oh-my-zsh/custom/plugins/zoxide"]
|
|
||||||
type = "archive"
|
|
||||||
url = "https://github.com/ajeetdsouza/zoxide/archive/master.tar.gz"
|
|
||||||
exact = true
|
|
||||||
stripComponents = 1
|
|
||||||
refreshPeriod = "168h"
|
|
||||||
@@ -1,34 +1,39 @@
|
|||||||
hooks
|
hooks
|
||||||
tool-versions
|
tool-versions
|
||||||
|
claude-settings.json
|
||||||
|
|
||||||
{{/* generated files, cached files, anything that might change unnecessarily */}}
|
{{/* WSL Only Files */}}
|
||||||
.oh-my-zsh/cache/**
|
{{ if (not .wsl) }}
|
||||||
.oh-my-zsh/plugins/**
|
|
||||||
.oh-my-zsh/templates/**
|
|
||||||
.oh-my-zsh/custom/themes/powerlevel10k/**/*.zwc
|
|
||||||
.asdf/downloads/**
|
|
||||||
.asdf/installs/**
|
|
||||||
.asdf/plugins/**
|
|
||||||
.asdf/shims/**
|
|
||||||
.asdf/tmp/**
|
|
||||||
.asdf/repository/**
|
|
||||||
|
|
||||||
{{ if eq .chezmoi.os "windows" }}
|
setup-wsl-gpg.sh
|
||||||
|
.gnupg/**
|
||||||
.oh-my-zsh
|
|
||||||
.scripts
|
{{ end }}
|
||||||
*.zsh
|
|
||||||
.zshrc
|
{{/* Linux/Unix Only Files */}}
|
||||||
.bashrc
|
{{ if (not (eq .chezmoi.os "linux")) }}
|
||||||
key.txt
|
|
||||||
.passwd-s3fs.age
|
# Shell configs (Linux-only)
|
||||||
.profile
|
.scripts
|
||||||
.tmux.conf
|
.bashrc
|
||||||
{{/* this may be pretty broad, will need to be adjusted */}}
|
.profile
|
||||||
.config
|
.bash_aliases
|
||||||
|
key.txt
|
||||||
{{ else }}
|
.tmux.conf
|
||||||
|
|
||||||
Documents
|
# Linux-only config directories
|
||||||
|
.config/kitty
|
||||||
|
.config/fish
|
||||||
|
.config/Code
|
||||||
|
.config/Cursor
|
||||||
|
.config/lazygit
|
||||||
|
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{/* Windows Only Files */}}
|
||||||
|
{{ if (not (eq .chezmoi.os "windows")) }}
|
||||||
|
|
||||||
|
Documents/
|
||||||
|
AppData/
|
||||||
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|||||||
1058
home/.chezmoitemplates/nushell/config.nu.tmpl
Normal file
1058
home/.chezmoitemplates/nushell/config.nu.tmpl
Normal file
File diff suppressed because it is too large
Load Diff
242
home/.chezmoitemplates/nushell/env.nu.tmpl
Normal file
242
home/.chezmoitemplates/nushell/env.nu.tmpl
Normal file
@@ -0,0 +1,242 @@
|
|||||||
|
# {{ template "banner.tmpl" .}}
|
||||||
|
# Nushell Environment Config File
|
||||||
|
# Cross-platform configuration for Windows and Linux
|
||||||
|
# version = "0.98.0"
|
||||||
|
|
||||||
|
def create_left_prompt [] {
|
||||||
|
let dir = match (try { $env.PWD | path relative-to $nu.home-path } catch { null }) {
|
||||||
|
null => $env.PWD
|
||||||
|
'' => '~'
|
||||||
|
$relative_pwd => ([~ $relative_pwd] | path join)
|
||||||
|
}
|
||||||
|
|
||||||
|
let path_color = (if (is-admin) { ansi red_bold } else { ansi green_bold })
|
||||||
|
let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi light_green_bold })
|
||||||
|
let path_segment = $"($path_color)($dir)(ansi reset)"
|
||||||
|
|
||||||
|
$path_segment | str replace --all (char path_sep) $"($separator_color)(char path_sep)($path_color)"
|
||||||
|
}
|
||||||
|
|
||||||
|
def create_right_prompt [] {
|
||||||
|
let time_segment = ([
|
||||||
|
(ansi reset)
|
||||||
|
(ansi magenta)
|
||||||
|
(date now | format date '%x %X')
|
||||||
|
] | str join | str replace --regex --all "([/:])" $"(ansi green)${1}(ansi magenta)" |
|
||||||
|
str replace --regex --all "([AP]M)" $"(ansi magenta_underline)${1}")
|
||||||
|
|
||||||
|
let last_exit_code = if ($env.LAST_EXIT_CODE != 0) {([
|
||||||
|
(ansi rb)
|
||||||
|
($env.LAST_EXIT_CODE)
|
||||||
|
] | str join)
|
||||||
|
} else { "" }
|
||||||
|
|
||||||
|
([$last_exit_code, (char space), $time_segment] | str join)
|
||||||
|
}
|
||||||
|
|
||||||
|
$env.PROMPT_COMMAND = {|| create_left_prompt }
|
||||||
|
$env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt }
|
||||||
|
$env.PROMPT_INDICATOR = {|| "> " }
|
||||||
|
$env.PROMPT_INDICATOR_VI_INSERT = {|| ": " }
|
||||||
|
$env.PROMPT_INDICATOR_VI_NORMAL = {|| "> " }
|
||||||
|
$env.PROMPT_MULTILINE_INDICATOR = {|| "::: " }
|
||||||
|
|
||||||
|
# Environment variable conversions
|
||||||
|
$env.ENV_CONVERSIONS = {
|
||||||
|
"PATH": {
|
||||||
|
from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
|
||||||
|
to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
|
||||||
|
}
|
||||||
|
"Path": {
|
||||||
|
from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
|
||||||
|
to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Library and plugin directories
|
||||||
|
$env.NU_LIB_DIRS = [
|
||||||
|
($nu.default-config-dir | path join 'scripts')
|
||||||
|
($nu.data-dir | path join 'completions')
|
||||||
|
]
|
||||||
|
|
||||||
|
$env.NU_PLUGIN_DIRS = [
|
||||||
|
($nu.default-config-dir | path join 'plugins')
|
||||||
|
]
|
||||||
|
|
||||||
|
# Editor configuration
|
||||||
|
$env.EDITOR = "micro"
|
||||||
|
$env.MICRO_TRUECOLOR = 1
|
||||||
|
|
||||||
|
# OpenAI API Key
|
||||||
|
$env.OPENAI_API_KEY = "{{ dopplerProjectJson.OPENAI_CHATGPT_CLI }}"
|
||||||
|
|
||||||
|
# Initialize PATH as a list for easier manipulation
|
||||||
|
$env.PATH = ($env.PATH | split row (char esep))
|
||||||
|
|
||||||
|
# Platform-specific PATH additions
|
||||||
|
{{ if eq .chezmoi.os "windows" }}
|
||||||
|
# Windows PATH additions
|
||||||
|
|
||||||
|
# User local bin
|
||||||
|
$env.PATH = ($env.PATH | prepend ($env.USERPROFILE | path join ".local" "bin"))
|
||||||
|
|
||||||
|
# Go
|
||||||
|
let go_user = ($env.USERPROFILE | path join "go" "bin")
|
||||||
|
let go_system = "C:\\Program Files\\Go\\bin"
|
||||||
|
if ($go_user | path exists) { $env.PATH = ($env.PATH | prepend $go_user) }
|
||||||
|
if ($go_system | path exists) { $env.PATH = ($env.PATH | prepend $go_system) }
|
||||||
|
|
||||||
|
# Rust/Cargo
|
||||||
|
let cargo_bin = ($env.USERPROFILE | path join ".cargo" "bin")
|
||||||
|
if ($cargo_bin | path exists) { $env.PATH = ($env.PATH | prepend $cargo_bin) }
|
||||||
|
|
||||||
|
# Deno
|
||||||
|
let deno_bin = ($env.USERPROFILE | path join ".deno" "bin")
|
||||||
|
if ($deno_bin | path exists) {
|
||||||
|
$env.DENO_INSTALL = ($env.USERPROFILE | path join ".deno")
|
||||||
|
$env.PATH = ($env.PATH | prepend $deno_bin)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Node/pnpm
|
||||||
|
let pnpm_home = ($env.LOCALAPPDATA | path join "pnpm")
|
||||||
|
if ($pnpm_home | path exists) {
|
||||||
|
$env.PNPM_HOME = $pnpm_home
|
||||||
|
$env.PATH = ($env.PATH | prepend $pnpm_home)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Bun
|
||||||
|
let bun_bin = ($env.USERPROFILE | path join ".bun" "bin")
|
||||||
|
if ($bun_bin | path exists) {
|
||||||
|
$env.BUN_INSTALL = ($env.USERPROFILE | path join ".bun")
|
||||||
|
$env.PATH = ($env.PATH | prepend $bun_bin)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Python/pyenv
|
||||||
|
let pyenv_root = ($env.USERPROFILE | path join ".pyenv" "pyenv-win")
|
||||||
|
if ($pyenv_root | path exists) {
|
||||||
|
$env.PYENV_ROOT = $pyenv_root
|
||||||
|
$env.PATH = ($env.PATH | prepend ($pyenv_root | path join "bin"))
|
||||||
|
$env.PATH = ($env.PATH | prepend ($pyenv_root | path join "shims"))
|
||||||
|
}
|
||||||
|
|
||||||
|
# .NET
|
||||||
|
let dotnet_root = ($env.USERPROFILE | path join ".dotnet")
|
||||||
|
if ($dotnet_root | path exists) {
|
||||||
|
$env.DOTNET_ROOT = $dotnet_root
|
||||||
|
$env.PATH = ($env.PATH | prepend $dotnet_root)
|
||||||
|
$env.PATH = ($env.PATH | prepend ($dotnet_root | path join "tools"))
|
||||||
|
}
|
||||||
|
|
||||||
|
# Bob (Neovim version manager)
|
||||||
|
let bob_bin = ($env.LOCALAPPDATA | path join "bob" "nvim-bin")
|
||||||
|
if ($bob_bin | path exists) { $env.PATH = ($env.PATH | prepend $bob_bin) }
|
||||||
|
|
||||||
|
# Spicetify
|
||||||
|
let spicetify = ($env.USERPROFILE | path join ".spicetify")
|
||||||
|
if ($spicetify | path exists) { $env.PATH = ($env.PATH | prepend $spicetify) }
|
||||||
|
|
||||||
|
# Pulumi
|
||||||
|
let pulumi_bin = ($env.USERPROFILE | path join ".pulumi" "bin")
|
||||||
|
if ($pulumi_bin | path exists) { $env.PATH = ($env.PATH | prepend $pulumi_bin) }
|
||||||
|
|
||||||
|
# Scoop
|
||||||
|
let scoop_shims = ($env.USERPROFILE | path join "scoop" "shims")
|
||||||
|
if ($scoop_shims | path exists) { $env.PATH = ($env.PATH | prepend $scoop_shims) }
|
||||||
|
|
||||||
|
{{ else }}
|
||||||
|
# Linux/macOS PATH additions
|
||||||
|
|
||||||
|
# User local bin
|
||||||
|
$env.PATH = ($env.PATH | prepend ($env.HOME | path join ".local" "bin"))
|
||||||
|
|
||||||
|
# System bins
|
||||||
|
$env.PATH = ($env.PATH | prepend "/usr/local/bin")
|
||||||
|
$env.PATH = ($env.PATH | prepend ($env.HOME | path join "bin"))
|
||||||
|
|
||||||
|
# Go
|
||||||
|
let go_bin = "/usr/local/go/bin"
|
||||||
|
let go_user = ($env.HOME | path join "go" "bin")
|
||||||
|
if ($go_bin | path exists) { $env.PATH = ($env.PATH | prepend $go_bin) }
|
||||||
|
if ($go_user | path exists) { $env.PATH = ($env.PATH | prepend $go_user) }
|
||||||
|
|
||||||
|
# Rust/Cargo
|
||||||
|
let cargo_bin = ($env.HOME | path join ".cargo" "bin")
|
||||||
|
if ($cargo_bin | path exists) { $env.PATH = ($env.PATH | prepend $cargo_bin) }
|
||||||
|
|
||||||
|
# Deno
|
||||||
|
let deno_bin = ($env.HOME | path join ".deno" "bin")
|
||||||
|
if ($deno_bin | path exists) { $env.PATH = ($env.PATH | prepend $deno_bin) }
|
||||||
|
|
||||||
|
# Bob (Neovim version manager)
|
||||||
|
let bob_bin = ($env.HOME | path join ".local" "share" "bob" "nvim-bin")
|
||||||
|
if ($bob_bin | path exists) { $env.PATH = ($env.PATH | prepend $bob_bin) }
|
||||||
|
|
||||||
|
# Homebrew (Linux)
|
||||||
|
let brew_bin = "/home/linuxbrew/.linuxbrew/bin"
|
||||||
|
if ($brew_bin | path exists) {
|
||||||
|
$env.PATH = ($env.PATH | prepend $brew_bin)
|
||||||
|
$env.PATH = ($env.PATH | prepend "/home/linuxbrew/.linuxbrew/sbin")
|
||||||
|
}
|
||||||
|
|
||||||
|
# pnpm
|
||||||
|
let pnpm_home = ($env.HOME | path join ".local" "share" "pnpm")
|
||||||
|
if ($pnpm_home | path exists) {
|
||||||
|
$env.PNPM_HOME = $pnpm_home
|
||||||
|
$env.PATH = ($env.PATH | prepend $pnpm_home)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Bun
|
||||||
|
let bun_bin = ($env.HOME | path join ".bun" "bin")
|
||||||
|
if ($bun_bin | path exists) {
|
||||||
|
$env.BUN_INSTALL = ($env.HOME | path join ".bun")
|
||||||
|
$env.PATH = ($env.PATH | prepend $bun_bin)
|
||||||
|
}
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
let pyenv_root = ($env.HOME | path join ".pyenv")
|
||||||
|
if ($pyenv_root | path exists) {
|
||||||
|
$env.PYENV_ROOT = $pyenv_root
|
||||||
|
$env.PATH = ($env.PATH | prepend ($pyenv_root | path join "bin"))
|
||||||
|
}
|
||||||
|
|
||||||
|
# jenv (Java)
|
||||||
|
let jenv_bin = ($env.HOME | path join ".jenv" "bin")
|
||||||
|
if ($jenv_bin | path exists) { $env.PATH = ($env.PATH | prepend $jenv_bin) }
|
||||||
|
|
||||||
|
# .NET
|
||||||
|
let dotnet_root = ($env.HOME | path join ".dotnet")
|
||||||
|
if ($dotnet_root | path exists) {
|
||||||
|
$env.DOTNET_ROOT = $dotnet_root
|
||||||
|
$env.PATH = ($env.PATH | prepend $dotnet_root)
|
||||||
|
$env.PATH = ($env.PATH | prepend ($dotnet_root | path join "tools"))
|
||||||
|
}
|
||||||
|
|
||||||
|
# Spicetify
|
||||||
|
let spicetify = ($env.HOME | path join ".spicetify")
|
||||||
|
if ($spicetify | path exists) { $env.PATH = ($env.PATH | prepend $spicetify) }
|
||||||
|
|
||||||
|
# Pulumi
|
||||||
|
let pulumi_bin = ($env.HOME | path join ".pulumi" "bin")
|
||||||
|
if ($pulumi_bin | path exists) { $env.PATH = ($env.PATH | prepend $pulumi_bin) }
|
||||||
|
|
||||||
|
# Perl (if installed)
|
||||||
|
let perl_bin = ($env.HOME | path join "perl5" "bin")
|
||||||
|
if ($perl_bin | path exists) {
|
||||||
|
$env.PATH = ($env.PATH | prepend $perl_bin)
|
||||||
|
$env.PERL5LIB = ($env.HOME | path join "perl5" "lib" "perl5")
|
||||||
|
$env.PERL_LOCAL_LIB_ROOT = ($env.HOME | path join "perl5")
|
||||||
|
}
|
||||||
|
|
||||||
|
# hishtory
|
||||||
|
let hishtory_bin = ($env.HOME | path join ".hishtory")
|
||||||
|
if ($hishtory_bin | path exists) { $env.PATH = ($env.PATH | prepend $hishtory_bin) }
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
# Remove duplicates from PATH
|
||||||
|
$env.PATH = ($env.PATH | uniq)
|
||||||
|
|
||||||
|
# WSL-specific settings
|
||||||
|
{{ if .wsl }}
|
||||||
|
# Ensure CLI apps open URLs in Windows browser
|
||||||
|
$env.BROWSER = 'powershell.exe /c start'
|
||||||
|
{{ end }}
|
||||||
123
home/.chezmoitemplates/scripts/commonrc.fish.tmpl
Normal file
123
home/.chezmoitemplates/scripts/commonrc.fish.tmpl
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
# Fish shell common configuration
|
||||||
|
# This template provides environment setup for Fish shell
|
||||||
|
|
||||||
|
# General configuration
|
||||||
|
set -gx EDITOR "micro"
|
||||||
|
set -gx GPG_TTY (tty)
|
||||||
|
set -gx MICRO_TRUECOLOR 1
|
||||||
|
set -gx TERM xterm-256color # fixes terminal colors when ssh'ing into laptop
|
||||||
|
|
||||||
|
# Authentication
|
||||||
|
set -gx OPENAI_API_KEY "{{ dopplerProjectJson.OPENAI_CHATGPT_CLI }}"
|
||||||
|
|
||||||
|
# PATH setup (batched for performance - reduces startup time by ~13ms)
|
||||||
|
set -l paths_to_add
|
||||||
|
|
||||||
|
# Collect paths with conditional checks
|
||||||
|
test -d $HOME/.hishtory && set -a paths_to_add $HOME/.hishtory
|
||||||
|
test -d $HOME/bin && set -a paths_to_add $HOME/bin
|
||||||
|
set -a paths_to_add /usr/local/bin $HOME/.local/bin
|
||||||
|
test -d /usr/local/go/bin && set -a paths_to_add /usr/local/go/bin # Go
|
||||||
|
test -d $HOME/go/bin && set -a paths_to_add $HOME/go/bin # Go-installed tools
|
||||||
|
test -d $HOME/.local/share/bob/nvim-bin && set -a paths_to_add $HOME/.local/share/bob/nvim-bin # Bob, Neovim package manager
|
||||||
|
|
||||||
|
# Deno (conditionally source env file or add to path list)
|
||||||
|
if test -d $HOME/.deno
|
||||||
|
if not source $HOME/.deno/env.fish 2>/dev/null
|
||||||
|
set -gx DENO_INSTALL $HOME/.deno
|
||||||
|
set -a paths_to_add $DENO_INSTALL/bin
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Rust/Cargo (source env file or add to path list)
|
||||||
|
if test -f $HOME/.cargo/env.fish
|
||||||
|
source $HOME/.cargo/env.fish
|
||||||
|
else if test -f $HOME/.cargo/env
|
||||||
|
# Fallback: parse bash env file
|
||||||
|
set -gx CARGO_HOME $HOME/.cargo
|
||||||
|
set -a paths_to_add $CARGO_HOME/bin
|
||||||
|
end
|
||||||
|
|
||||||
|
# Homebrew (cached for performance - reduces startup time by ~14ms)
|
||||||
|
if test -f /home/linuxbrew/.linuxbrew/bin/brew
|
||||||
|
set -l brew_cache "$HOME/.cache/brew_env.fish"
|
||||||
|
set -l brew_bin "/home/linuxbrew/.linuxbrew/bin/brew"
|
||||||
|
|
||||||
|
# Regenerate cache if: doesn't exist, >7 days old, or brew binary is newer
|
||||||
|
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 (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")
|
||||||
|
$brew_bin shellenv > "$brew_cache" 2>/dev/null
|
||||||
|
end
|
||||||
|
|
||||||
|
test -f "$brew_cache" && source "$brew_cache"
|
||||||
|
end
|
||||||
|
|
||||||
|
set -gx PYENV_ROOT $HOME/.pyenv
|
||||||
|
|
||||||
|
# bun
|
||||||
|
set -gx BUN_INSTALL $HOME/.bun
|
||||||
|
set -a paths_to_add $BUN_INSTALL/bin
|
||||||
|
# Note: Bun's _bun file is bash-specific, Fish completions handled separately
|
||||||
|
|
||||||
|
# jenv (add to path list for later batch add)
|
||||||
|
if test -d $HOME/.jenv/bin
|
||||||
|
set -a paths_to_add $HOME/.jenv/bin
|
||||||
|
end
|
||||||
|
|
||||||
|
# pnpm
|
||||||
|
set -gx PNPM_HOME $HOME/.local/share/pnpm
|
||||||
|
set -a paths_to_add $PNPM_HOME
|
||||||
|
|
||||||
|
# spicetify
|
||||||
|
test -d $HOME/.spicetify && set -a paths_to_add $HOME/.spicetify
|
||||||
|
|
||||||
|
# pulumi
|
||||||
|
test -d $HOME/.pulumi/bin && set -a paths_to_add $HOME/.pulumi/bin
|
||||||
|
|
||||||
|
# dotnet
|
||||||
|
if test -d $HOME/.dotnet
|
||||||
|
set -gx DOTNET_ROOT $HOME/.dotnet
|
||||||
|
set -a paths_to_add $DOTNET_ROOT $DOTNET_ROOT/tools
|
||||||
|
end
|
||||||
|
|
||||||
|
# Batch add all collected paths (single PATH reconstruction instead of 17+ calls)
|
||||||
|
test -n "$paths_to_add[1]" && fish_add_path $paths_to_add
|
||||||
|
|
||||||
|
# Post-PATH initialization for tools that need commands available
|
||||||
|
if test -d $HOME/.jenv/bin; and command -q jenv
|
||||||
|
jenv init - fish | source
|
||||||
|
end
|
||||||
|
|
||||||
|
# Note: Aliases are defined in Fish-native format in ~/.config/fish/conf.d/abbr.fish
|
||||||
|
# The bash_aliases file contains bash-specific syntax and is not sourced here
|
||||||
|
|
||||||
|
{{- /* WSL-specific settings */ -}}
|
||||||
|
{{- if .data.wsl }}
|
||||||
|
|
||||||
|
## Ensures CLI apps open URLs in the default Windows browser
|
||||||
|
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 }}
|
||||||
|
|
||||||
|
# atuin (magical shell history)
|
||||||
|
if command -q atuin
|
||||||
|
atuin init fish | source
|
||||||
|
end
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# This template's argument is the shell as a string (bash, zsh).
|
# This template's argument is the shell as a string (bash, ...).
|
||||||
|
|
||||||
# general configuration
|
# general configuration
|
||||||
export EDITOR="micro"
|
export EDITOR="micro"
|
||||||
@@ -11,11 +11,9 @@ export TERM=xterm-256color # fixes terminal colors when ssh'ing into laptop
|
|||||||
export OPENAI_API_KEY="{{ dopplerProjectJson.OPENAI_CHATGPT_CLI }}"
|
export OPENAI_API_KEY="{{ dopplerProjectJson.OPENAI_CHATGPT_CLI }}"
|
||||||
|
|
||||||
# hishtory
|
# hishtory
|
||||||
export HISHTORY_SERVER="https://hsh.{{ .data.privateDomain }}"
|
export HISHTORY_SERVER="https://hsh.{{ dopplerProjectJson.PRIVATE_DOMAIN }}"
|
||||||
export PATH="$PATH:$HOME/.hishtory"
|
export PATH="$PATH:$HOME/.hishtory"
|
||||||
{{ if eq .shell "zsh" -}}
|
{{ if eq .shell "bash" -}}
|
||||||
source $HOME/.hishtory/config.zsh
|
|
||||||
{{ else if eq .shell "bash" -}}
|
|
||||||
source $HOME/.hishtory/config.sh
|
source $HOME/.hishtory/config.sh
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
{{ fail "Unexpected shell." }}
|
{{ fail "Unexpected shell." }}
|
||||||
@@ -30,7 +28,23 @@ if [ -d "$HOME/.deno" ]; then
|
|||||||
. "$HOME/.deno/env" # Deno
|
. "$HOME/.deno/env" # Deno
|
||||||
fi
|
fi
|
||||||
. "$HOME/.cargo/env" # Rustup + Cargo + Cargo-installed tools
|
. "$HOME/.cargo/env" # Rustup + Cargo + Cargo-installed tools
|
||||||
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" # Brew
|
|
||||||
|
# Homebrew (cached for performance - reduces startup time by ~14ms)
|
||||||
|
if [ -f /home/linuxbrew/.linuxbrew/bin/brew ]; then
|
||||||
|
BREW_CACHE="$HOME/.cache/brew_env.sh"
|
||||||
|
BREW_BIN="/home/linuxbrew/.linuxbrew/bin/brew"
|
||||||
|
|
||||||
|
# Regenerate cache if: doesn't exist, >7 days old, or brew binary is newer
|
||||||
|
if [ ! -f "$BREW_CACHE" ] || \
|
||||||
|
[ $(( $(date +%s) - $(stat -c %Y "$BREW_CACHE" 2>/dev/null || echo 0) )) -gt 604800 ] || \
|
||||||
|
[ "$BREW_BIN" -nt "$BREW_CACHE" ]; then
|
||||||
|
mkdir -p "$(dirname "$BREW_CACHE")"
|
||||||
|
"$BREW_BIN" shellenv > "$BREW_CACHE" 2>/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -f "$BREW_CACHE" ] && . "$BREW_CACHE"
|
||||||
|
fi
|
||||||
|
|
||||||
command -v rbenv &> /dev/null && eval "$(rbenv init -)" # rbenv for Ruby
|
command -v rbenv &> /dev/null && eval "$(rbenv init -)" # rbenv for Ruby
|
||||||
command -v chatgpt &> /dev/null && . <(chatgpt --set-completions {{ .shell -}}) # chatgpt completions
|
command -v chatgpt &> /dev/null && . <(chatgpt --set-completions {{ .shell -}}) # chatgpt completions
|
||||||
{{ if eq .shell "bash" -}}
|
{{ if eq .shell "bash" -}}
|
||||||
@@ -52,7 +66,6 @@ fi
|
|||||||
# bun
|
# bun
|
||||||
export BUN_INSTALL="$HOME/.bun"
|
export BUN_INSTALL="$HOME/.bun"
|
||||||
export PATH="$BUN_INSTALL/bin:$PATH"
|
export PATH="$BUN_INSTALL/bin:$PATH"
|
||||||
[ -s "$HOME/.bun/_bun" ] && source "$HOME/.bun/_bun"
|
|
||||||
|
|
||||||
# java version manager
|
# java version manager
|
||||||
if [ -d $HOME/.jenv/bin ]; then
|
if [ -d $HOME/.jenv/bin ]; then
|
||||||
@@ -63,19 +76,6 @@ if [ -d $HOME/.jenv/bin ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if command -v hass-cli &> /dev/null; then
|
|
||||||
export HASS_SERVER={{ dopplerProjectJson.HASS_SERVER_URL }}
|
|
||||||
export HASS_TOKEN={{ dopplerProjectJson.HASS_SERVER_TOKEN }}
|
|
||||||
|
|
||||||
{{ if eq .shell "bash" -}}
|
|
||||||
source <(_HASS_CLI_COMPLETE=bash_source hass-cli)
|
|
||||||
{{ else if eq .shell "zsh" -}}
|
|
||||||
source <(_HASS_CLI_COMPLETE=zsh_source hass-cli)
|
|
||||||
{{ else if eq .shell "fish" -}}
|
|
||||||
eval (_HASS_CLI_COMPLETE=fish_source hass-cli)
|
|
||||||
{{ end }}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# pnpm
|
# pnpm
|
||||||
export PNPM_HOME="$HOME/.local/share/pnpm"
|
export PNPM_HOME="$HOME/.local/share/pnpm"
|
||||||
case ":$PATH:" in
|
case ":$PATH:" in
|
||||||
@@ -83,15 +83,6 @@ case ":$PATH:" in
|
|||||||
*) export PATH="$PNPM_HOME:$PATH" ;;
|
*) export PATH="$PNPM_HOME:$PATH" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# perl
|
|
||||||
if [ -d "$HOME/perl5" ]; then
|
|
||||||
PATH="$HOME/perl5/bin${PATH:+:${PATH}}"; export PATH;
|
|
||||||
PERL5LIB="$HOME/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
|
|
||||||
PERL_LOCAL_LIB_ROOT="$HOME/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
|
|
||||||
PERL_MB_OPT="--install_base \"$HOME/perl5\""; export PERL_MB_OPT;
|
|
||||||
PERL_MM_OPT="INSTALL_BASE=$HOME/perl5"; export PERL_MM_OPT;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# spicetify
|
# spicetify
|
||||||
if [ -d "$HOME/.spicetify" ]; then
|
if [ -d "$HOME/.spicetify" ]; then
|
||||||
export PATH=$PATH:$HOME/.spicetify
|
export PATH=$PATH:$HOME/.spicetify
|
||||||
@@ -102,16 +93,42 @@ if [ -d "$HOME/.pulumi/bin" ]; then
|
|||||||
export PATH=$PATH:$HOME/.pulumi/bin
|
export PATH=$PATH:$HOME/.pulumi/bin
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# load aliases (note: omz aliases are supposed to be placed in ZSH_CUSTOM?)
|
|
||||||
. $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
|
||||||
@@ -119,17 +136,7 @@ if [ -d "$HOME/.dotnet" ]; then
|
|||||||
export PATH="$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools"
|
export PATH="$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# disable screen blanking
|
# atuin
|
||||||
# source $(brew --prefix)/share/zsh/site-functions/_todoist_peco
|
if [ -d "$HOME/.atuin" ]; then
|
||||||
# xset s off && xset -dpms
|
. "$HOME/.atuin/bin/env"
|
||||||
# Preferred editor for local and remote sessions
|
fi
|
||||||
# if [[ -n $SSH_CONNECTION ]]; then
|
|
||||||
# export EDITOR='micro'
|
|
||||||
# else
|
|
||||||
# export EDITOR='nvim'
|
|
||||||
# fi
|
|
||||||
|
|
||||||
# If WSL, add SSH key on startup (once per WSL start)
|
|
||||||
{{- if .data.wsl }}
|
|
||||||
eval `keychain --quiet --eval --agents ssh ~/.ssh/id_rsa`
|
|
||||||
{{ end }}
|
|
||||||
156
home/.config-source/cursor/keybindings.windows.json
Executable file
156
home/.config-source/cursor/keybindings.windows.json
Executable file
@@ -0,0 +1,156 @@
|
|||||||
|
// Place your key bindings in this file to override the defaultsauto[]
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+=",
|
||||||
|
"command": "-workbench.action.zoomIn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+=",
|
||||||
|
"command": "workbench.action.zoomIn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+=",
|
||||||
|
"command": "-workbench.action.zoomIn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+-",
|
||||||
|
"command": "-workbench.action.zoomOut"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+=",
|
||||||
|
"command": "editor.action.fontZoomIn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+-",
|
||||||
|
"command": "editor.action.fontZoomOut"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+tab",
|
||||||
|
"command": "-workbench.action.quickOpenLeastRecentlyUsedEditorInGroup",
|
||||||
|
"when": "!activeEditorGroupEmpty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+tab",
|
||||||
|
"command": "-workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup",
|
||||||
|
"when": "!activeEditorGroupEmpty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+tab",
|
||||||
|
"command": "workbench.action.nextEditor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+pagedown",
|
||||||
|
"command": "-workbench.action.nextEditor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+tab",
|
||||||
|
"command": "workbench.action.previousEditor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+pageup",
|
||||||
|
"command": "-workbench.action.previousEditor"
|
||||||
|
},
|
||||||
|
// Swap focus between terminal & active editor
|
||||||
|
{
|
||||||
|
"key": "ctrl+`",
|
||||||
|
"command": "workbench.action.terminal.focus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+`",
|
||||||
|
"command": "workbench.action.focusActiveEditorGroup",
|
||||||
|
"when": "terminalFocus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+W",
|
||||||
|
"command": "workbench.action.togglePanel",
|
||||||
|
"when": "terminalFocus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+space",
|
||||||
|
"command": "editor.action.showDefinitionPreviewHover"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+alt+`",
|
||||||
|
"command": "workbench.action.createTerminalEditor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+/",
|
||||||
|
"command": "editor.action.blockComment",
|
||||||
|
"when": "editorTextFocus && !editorReadonly"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "shift+alt+a",
|
||||||
|
"command": "-editor.action.blockComment",
|
||||||
|
"when": "editorTextFocus && !editorReadonly"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "shift+alt+d",
|
||||||
|
"command": "editor.action.deleteLines",
|
||||||
|
"when": "textInputFocus && !editorReadonly"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+k",
|
||||||
|
"command": "-editor.action.deleteLines",
|
||||||
|
"when": "textInputFocus && !editorReadonly"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+alt+d",
|
||||||
|
"command": "editor.detectLanguage",
|
||||||
|
"when": "editorTextFocus && !notebookEditable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "shift+alt+d",
|
||||||
|
"command": "-editor.detectLanguage",
|
||||||
|
"when": "editorTextFocus && !notebookEditable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+alt+d",
|
||||||
|
"command": "notebook.cell.detectLanguage",
|
||||||
|
"when": "notebookCellEditable && notebookEditable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "shift+alt+d",
|
||||||
|
"command": "-notebook.cell.detectLanguage",
|
||||||
|
"when": "notebookCellEditable && notebookEditable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "alt+a",
|
||||||
|
"command": "composerMode.agent"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "alt+g",
|
||||||
|
"command": "composerMode.chat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+n",
|
||||||
|
"command": "editor.action.inlineDiffs.rejectPartialEdit",
|
||||||
|
"when": "editorHasPromptBar && editorPromptBarFocused"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+n",
|
||||||
|
"command": "-editor.action.inlineDiffs.rejectPartialEdit",
|
||||||
|
"when": "editorHasPromptBar && editorPromptBarFocused"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+n",
|
||||||
|
"command": "editor.action.inlineDiffs.rejectPartialEdit",
|
||||||
|
"when": "editorTextFocus && @inlineDiffs.rejectPartialEdit.isActiveEditorWithDiffs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+n",
|
||||||
|
"command": "-editor.action.inlineDiffs.rejectPartialEdit",
|
||||||
|
"when": "editorTextFocus && @inlineDiffs.rejectPartialEdit.isActiveEditorWithDiffs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+g",
|
||||||
|
"command": "-workbench.action.terminal.goToRecentDirectory"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "shift+enter",
|
||||||
|
"command": "workbench.action.terminal.sendSequence",
|
||||||
|
"args": {
|
||||||
|
"text": "\u001b\r"
|
||||||
|
},
|
||||||
|
"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"
|
||||||
|
}
|
||||||
332
home/.config-source/cursor/settings.windows.json
Executable file
332
home/.config-source/cursor/settings.windows.json
Executable file
@@ -0,0 +1,332 @@
|
|||||||
|
{
|
||||||
|
// 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
|
||||||
|
}
|
||||||
23
home/.config-source/lazygit/config.yml
Executable file
23
home/.config-source/lazygit/config.yml
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
gui:
|
||||||
|
theme:
|
||||||
|
activeBorderColor:
|
||||||
|
- "#E97387"
|
||||||
|
- bold
|
||||||
|
inactiveBorderColor:
|
||||||
|
- "#a5adce"
|
||||||
|
optionsTextColor:
|
||||||
|
- "#8caaee"
|
||||||
|
selectedLineBgColor:
|
||||||
|
- "#ECCFD3"
|
||||||
|
cherryPickedCommitBgColor:
|
||||||
|
- "#51576d"
|
||||||
|
cherryPickedCommitFgColor:
|
||||||
|
- "#CFF2E2"
|
||||||
|
unstagedChangesColor:
|
||||||
|
- "#E97387"
|
||||||
|
defaultFgColor:
|
||||||
|
- "#6B6B6B"
|
||||||
|
searchingActiveBorderColor:
|
||||||
|
- "#e5c890"
|
||||||
|
authorColors:
|
||||||
|
"*": "#babbf1"
|
||||||
86
home/.config-source/vscode/keybindings.windows.json
Executable file
86
home/.config-source/vscode/keybindings.windows.json
Executable file
@@ -0,0 +1,86 @@
|
|||||||
|
// Place your key bindings in this file to override the defaultsauto[]
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+=",
|
||||||
|
"command": "-workbench.action.zoomIn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+=",
|
||||||
|
"command": "workbench.action.zoomIn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+=",
|
||||||
|
"command": "-workbench.action.zoomIn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+-",
|
||||||
|
"command": "-workbench.action.zoomOut"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+=",
|
||||||
|
"command": "editor.action.fontZoomIn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+-",
|
||||||
|
"command": "editor.action.fontZoomOut"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+tab",
|
||||||
|
"command": "-workbench.action.quickOpenLeastRecentlyUsedEditorInGroup",
|
||||||
|
"when": "!activeEditorGroupEmpty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+tab",
|
||||||
|
"command": "-workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup",
|
||||||
|
"when": "!activeEditorGroupEmpty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+tab",
|
||||||
|
"command": "workbench.action.nextEditor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+pagedown",
|
||||||
|
"command": "-workbench.action.nextEditor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+tab",
|
||||||
|
"command": "workbench.action.previousEditor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+pageup",
|
||||||
|
"command": "-workbench.action.previousEditor"
|
||||||
|
},
|
||||||
|
// Swap focus between terminal & active editor
|
||||||
|
{
|
||||||
|
"key": "ctrl+`",
|
||||||
|
"command": "workbench.action.terminal.focus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+`",
|
||||||
|
"command": "workbench.action.focusActiveEditorGroup",
|
||||||
|
"when": "terminalFocus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+W",
|
||||||
|
"command": "workbench.action.togglePanel",
|
||||||
|
"when": "terminalFocus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+space",
|
||||||
|
"command": "editor.action.showDefinitionPreviewHover"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+alt+`",
|
||||||
|
"command": "workbench.action.createTerminalEditor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ctrl+shift+/",
|
||||||
|
"command": "editor.action.blockComment",
|
||||||
|
"when": "editorTextFocus && !editorReadonly"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "shift+alt+a",
|
||||||
|
"command": "-editor.action.blockComment",
|
||||||
|
"when": "editorTextFocus && !editorReadonly"
|
||||||
|
}
|
||||||
|
]
|
||||||
232
home/.config-source/vscode/settings.windows.json
Executable file
232
home/.config-source/vscode/settings.windows.json
Executable file
@@ -0,0 +1,232 @@
|
|||||||
|
{
|
||||||
|
"workbench.colorTheme": "GitHub Light",
|
||||||
|
"liquid.format": true,
|
||||||
|
"markdown-preview-enhanced.previewTheme": "github-light.css",
|
||||||
|
"terminal.integrated.commandsToSkipShell": [
|
||||||
|
"-workbench.action.quickOpenView"
|
||||||
|
],
|
||||||
|
"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"
|
||||||
|
],
|
||||||
|
"[scss]": {
|
||||||
|
"editor.defaultFormatter": "sibiraj-s.vscode-scss-formatter"
|
||||||
|
},
|
||||||
|
"[html]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"explorer.confirmDragAndDrop": false,
|
||||||
|
"explorer.confirmDelete": false,
|
||||||
|
"[json]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"security.workspace.trust.untrustedFiles": "open",
|
||||||
|
"workbench.tree.indent": 24,
|
||||||
|
"editor.linkedEditing": true,
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"workbench.startupEditor": "none",
|
||||||
|
"quokka.showStartViewOnFeatureRelease": false,
|
||||||
|
"[typescriptreact]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"colorize.include": [
|
||||||
|
"**/*.css",
|
||||||
|
"**/*.tsx",
|
||||||
|
"**/*.scss",
|
||||||
|
"**/*.sass",
|
||||||
|
"**/*.less",
|
||||||
|
"**/*.styl"
|
||||||
|
],
|
||||||
|
"colorize.languages": [
|
||||||
|
"javascript",
|
||||||
|
"css",
|
||||||
|
"sass",
|
||||||
|
"scss",
|
||||||
|
"less",
|
||||||
|
"postcss",
|
||||||
|
"sss",
|
||||||
|
"stylus",
|
||||||
|
"xml",
|
||||||
|
"svg",
|
||||||
|
"typescriptreact"
|
||||||
|
],
|
||||||
|
"git.autofetch": true,
|
||||||
|
"git.confirmSync": false,
|
||||||
|
"editor.minimap.showSlider": "always",
|
||||||
|
"[astro]": {
|
||||||
|
"editor.defaultFormatter": "astro-build.astro-vscode"
|
||||||
|
},
|
||||||
|
"editor.inlineSuggest.enabled": true,
|
||||||
|
"github.copilot.enable": {
|
||||||
|
"*": true,
|
||||||
|
"plaintext": true,
|
||||||
|
"markdown": true,
|
||||||
|
"scminput": false,
|
||||||
|
"yaml": true
|
||||||
|
},
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"[python]": {
|
||||||
|
"editor.formatOnType": true,
|
||||||
|
"editor.defaultFormatter": "ms-python.black-formatter"
|
||||||
|
},
|
||||||
|
"[go]": {
|
||||||
|
"editor.defaultFormatter": "golang.go"
|
||||||
|
},
|
||||||
|
"security.allowedUNCHosts": ["ROMAN"],
|
||||||
|
"security.restrictUNCAccess": false,
|
||||||
|
"[rust]": {
|
||||||
|
"editor.defaultFormatter": "rust-lang.rust-analyzer"
|
||||||
|
},
|
||||||
|
"logViewer.watch": ["*.log"],
|
||||||
|
"logViewer.options": {
|
||||||
|
"fileCheckInterval": 500
|
||||||
|
},
|
||||||
|
"prisma.showPrismaDataPlatformNotification": false,
|
||||||
|
"github.copilot.editor.enableAutoCompletions": true,
|
||||||
|
"[caddyfile]": {
|
||||||
|
"editor.defaultFormatter": "matthewpi.caddyfile-support"
|
||||||
|
},
|
||||||
|
"workbench.preferredDarkColorTheme": "Copilot Theme - Higher Contrast",
|
||||||
|
"window.autoDetectHighContrast": false,
|
||||||
|
"window.autoDetectColorScheme": true,
|
||||||
|
"workbench.preferredLightColorTheme": "GitHub Light Default",
|
||||||
|
"workbench.iconTheme": "material-icon-theme",
|
||||||
|
"workbench.preferredHighContrastLightColorTheme": "GitHub Light",
|
||||||
|
"workbench.preferredHighContrastColorTheme": "Catppuccin Macchiato",
|
||||||
|
"[shellscript]": {
|
||||||
|
"editor.defaultFormatter": "foxundermoon.shell-format"
|
||||||
|
},
|
||||||
|
"[github-actions-workflow]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"terminal.integrated.fontFamily": "Iosevka Nerd Font Mono",
|
||||||
|
"[ignore]": {
|
||||||
|
"editor.defaultFormatter": "foxundermoon.shell-format"
|
||||||
|
},
|
||||||
|
"[dotenv]": {
|
||||||
|
"editor.defaultFormatter": "foxundermoon.shell-format"
|
||||||
|
},
|
||||||
|
"[sql]": {
|
||||||
|
"editor.defaultFormatter": "inferrinizzard.prettier-sql-vscode"
|
||||||
|
},
|
||||||
|
"go.inlayHints.parameterNames": true,
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"python.analysis.autoImportCompletions": true,
|
||||||
|
"task.allowAutomaticTasks": "on",
|
||||||
|
"python.analysis.supportDocstringTemplate": true,
|
||||||
|
"[xml]": {
|
||||||
|
"editor.defaultFormatter": "redhat.vscode-xml"
|
||||||
|
},
|
||||||
|
"gitlens.ai.experimental.model": "vscode",
|
||||||
|
"gitlens.ai.experimental.vscode.model": "copilot:gpt-4o",
|
||||||
|
"[csharp]": {
|
||||||
|
"editor.defaultFormatter": "ms-dotnettools.csharp"
|
||||||
|
},
|
||||||
|
"[properties]": {
|
||||||
|
"editor.defaultFormatter": "foxundermoon.shell-format"
|
||||||
|
},
|
||||||
|
"terminal.integrated.enablePersistentSessions": false,
|
||||||
|
"[xaml]": {
|
||||||
|
"editor.defaultFormatter": "ms-dotnettools.csharp"
|
||||||
|
},
|
||||||
|
"git.openRepositoryInParentFolders": "always",
|
||||||
|
"go.buildTags": "real",
|
||||||
|
"typescript.preferences.importModuleSpecifier": "non-relative",
|
||||||
|
"[dockerfile]": {
|
||||||
|
"editor.defaultFormatter": "ms-azuretools.vscode-docker"
|
||||||
|
},
|
||||||
|
"harper-ls.diagnosticSeverity": "hint",
|
||||||
|
"[gdscript]": {
|
||||||
|
"editor.defaultFormatter": "geequlim.godot-tools"
|
||||||
|
},
|
||||||
|
"[powershell]": {
|
||||||
|
"editor.defaultFormatter": "ms-vscode.powershell"
|
||||||
|
},
|
||||||
|
"files.associations": {
|
||||||
|
"*.dialogue": "plaintext"
|
||||||
|
},
|
||||||
|
"poshProTools.showUpgradeNotification": false,
|
||||||
|
"poshProTools.disableNewsNotification": true,
|
||||||
|
"dotnet.server.useOmnisharp": true,
|
||||||
|
"csharpier.enableDiagnostics": false,
|
||||||
|
"powershell.promptToUpdatePowerShell": false,
|
||||||
|
"dotnet.formatting.organizeImportsOnFormat": true,
|
||||||
|
"editor.fontFamily": "Noto Sans, Iosevka Slab, Iosevka",
|
||||||
|
"remote.SSH.remotePlatform": {
|
||||||
|
"aws": "linux"
|
||||||
|
},
|
||||||
|
"autoimport.autoComplete": false,
|
||||||
|
"[lua]": {
|
||||||
|
"editor.defaultFormatter": "sumneko.lua"
|
||||||
|
},
|
||||||
|
"javascript.updateImportsOnFileMove.enabled": "never",
|
||||||
|
"javascript.preferGoToSourceDefinition": true,
|
||||||
|
"typescript.preferGoToSourceDefinition": true,
|
||||||
|
"[prisma]": {
|
||||||
|
"editor.defaultFormatter": "Prisma.prisma"
|
||||||
|
},
|
||||||
|
"notebook.output.scrolling": true,
|
||||||
|
"github.copilot.nextEditSuggestions.enabled": true,
|
||||||
|
"docker.extension.enableComposeLanguageServer": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,220 @@
|
|||||||
|
{
|
||||||
|
"$help": "https://aka.ms/terminal-documentation",
|
||||||
|
"$schema": "https://aka.ms/terminal-profiles-schema",
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"command": {
|
||||||
|
"action": "copy",
|
||||||
|
"singleLine": false
|
||||||
|
},
|
||||||
|
"id": "User.copy.644BA8F2",
|
||||||
|
"keys": "ctrl+c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "paste",
|
||||||
|
"id": "User.paste",
|
||||||
|
"keys": "ctrl+v"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": {
|
||||||
|
"action": "splitPane",
|
||||||
|
"split": "auto",
|
||||||
|
"splitMode": "duplicate"
|
||||||
|
},
|
||||||
|
"id": "User.splitPane.A6751878",
|
||||||
|
"keys": "alt+shift+d"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"copyFormatting": "none",
|
||||||
|
"copyOnSelect": false,
|
||||||
|
"defaultProfile": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
|
||||||
|
"newTabMenu": [
|
||||||
|
{
|
||||||
|
"type": "remainingProfiles"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"profiles": {
|
||||||
|
"defaults": {
|
||||||
|
"bellStyle": "taskbar",
|
||||||
|
"colorScheme": "Campbell",
|
||||||
|
"experimental.retroTerminalEffect": false,
|
||||||
|
"font": {
|
||||||
|
"face": "MesloLGS NF"
|
||||||
|
},
|
||||||
|
"startingDirectory": "./"
|
||||||
|
},
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"adjustIndistinguishableColors": "always",
|
||||||
|
"commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -NoLogo",
|
||||||
|
"experimental.retroTerminalEffect": false,
|
||||||
|
"font": {
|
||||||
|
"features": {}
|
||||||
|
},
|
||||||
|
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
|
||||||
|
"hidden": true,
|
||||||
|
"name": "Windows PowerShell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"commandline": "%SystemRoot%\\System32\\cmd.exe",
|
||||||
|
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
|
||||||
|
"hidden": true,
|
||||||
|
"name": "Command Prompt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"commandline": "nu",
|
||||||
|
"guid": "{88e96e3b-8480-493c-a83a-fdacc2073455}",
|
||||||
|
"name": "Nushell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
|
||||||
|
"hidden": true,
|
||||||
|
"name": "Azure Cloud Shell",
|
||||||
|
"source": "Windows.Terminal.Azure"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
|
||||||
|
"commandline": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoLogo",
|
||||||
|
"hidden": false,
|
||||||
|
"name": "PowerShell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{2ece5bfe-50ed-5f3a-ab87-5cd4baafed2b}",
|
||||||
|
"hidden": false,
|
||||||
|
"name": "Git Bash",
|
||||||
|
"source": "Git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{d2d97d92-ca5d-557d-b125-92e740f8d3e3}",
|
||||||
|
"hidden": true,
|
||||||
|
"name": "Developer Command Prompt for VS 2022",
|
||||||
|
"source": "Windows.Terminal.VisualStudio"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{d81ed14b-afc2-5921-9f8f-777ca38e2508}",
|
||||||
|
"hidden": true,
|
||||||
|
"name": "Developer PowerShell for VS 2022",
|
||||||
|
"source": "Windows.Terminal.VisualStudio"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{51855cb2-8cce-5362-8f54-464b92b32386}",
|
||||||
|
"hidden": false,
|
||||||
|
"name": "Ubuntu",
|
||||||
|
"source": "CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
|
||||||
|
"hidden": true,
|
||||||
|
"name": "Ubuntu",
|
||||||
|
"source": "Windows.Terminal.Wsl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{b0d4d26a-c7ad-5dde-9fc4-70b8837407a8}",
|
||||||
|
"hidden": true,
|
||||||
|
"name": "Developer Command Prompt for VS 2019",
|
||||||
|
"source": "Windows.Terminal.VisualStudio"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{07391626-5a34-526f-967c-bed2545c591e}",
|
||||||
|
"hidden": true,
|
||||||
|
"name": "Developer PowerShell for VS 2019",
|
||||||
|
"source": "Windows.Terminal.VisualStudio"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{8ab8e6f6-35c6-5b46-8419-3e1568105476}",
|
||||||
|
"hidden": true,
|
||||||
|
"name": "podman-machine-default",
|
||||||
|
"source": "Windows.Terminal.Wsl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"commandline": "%WINDIR%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -ExecutionPolicy ByPass -NoExit -Command \"& 'C:\\Users\\Xevion\\anaconda3\\shell\\condabin\\conda-hook.ps1' ; conda activate 'C:\\Users\\Xevion\\anaconda3' \"",
|
||||||
|
"guid": "{eed49005-877d-5de2-94d5-5ce5e370f8c3}",
|
||||||
|
"icon": "C:\\Users\\Xevion\\anaconda3\\Menu\\anaconda_powershell_prompt.ico",
|
||||||
|
"name": "Anaconda PowerShell Prompt (anaconda3)",
|
||||||
|
"startingDirectory": "C:\\Users\\Xevion"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"commandline": "%WINDIR%\\System32\\cmd.exe \"/K\" C:\\Users\\Xevion\\anaconda3\\Scripts\\activate.bat C:\\Users\\Xevion\\anaconda3",
|
||||||
|
"guid": "{e78b37b4-0017-568b-9279-1abde5e14cde}",
|
||||||
|
"icon": "C:\\Users\\Xevion\\anaconda3\\Menu\\anaconda_prompt.ico",
|
||||||
|
"hidden": true,
|
||||||
|
"name": "Anaconda Prompt (anaconda3)",
|
||||||
|
"startingDirectory": "C:\\Users\\Xevion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"schemes": [
|
||||||
|
{
|
||||||
|
"background": "#F9F9F9",
|
||||||
|
"black": "#000000",
|
||||||
|
"blue": "#2F5AF3",
|
||||||
|
"brightBlack": "#000000",
|
||||||
|
"brightBlue": "#2F5AF3",
|
||||||
|
"brightCyan": "#3F953A",
|
||||||
|
"brightGreen": "#3F953A",
|
||||||
|
"brightPurple": "#A00095",
|
||||||
|
"brightRed": "#DE3E35",
|
||||||
|
"brightWhite": "#FFFFFF",
|
||||||
|
"brightYellow": "#D2B67C",
|
||||||
|
"cursorColor": "#BBBBBB",
|
||||||
|
"cyan": "#3F953A",
|
||||||
|
"foreground": "#2A2C33",
|
||||||
|
"green": "#3F953A",
|
||||||
|
"name": "AtomOneLight",
|
||||||
|
"purple": "#950095",
|
||||||
|
"red": "#DE3E35",
|
||||||
|
"selectionBackground": "#EDEDED",
|
||||||
|
"white": "#BBBBBB",
|
||||||
|
"yellow": "#D2B67C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#212121",
|
||||||
|
"black": "#21222C",
|
||||||
|
"blue": "#82AAFF",
|
||||||
|
"brightBlack": "#545454",
|
||||||
|
"brightBlue": "#D6ACFF",
|
||||||
|
"brightCyan": "#A4FFFF",
|
||||||
|
"brightGreen": "#69FF94",
|
||||||
|
"brightPurple": "#FF92DF",
|
||||||
|
"brightRed": "#FF6E6E",
|
||||||
|
"brightWhite": "#F8F8F2",
|
||||||
|
"brightYellow": "#FFCB6B",
|
||||||
|
"cursorColor": "#ECEFF4",
|
||||||
|
"cyan": "#8BE9FD",
|
||||||
|
"foreground": "#F8F8F2",
|
||||||
|
"green": "#50FA7B",
|
||||||
|
"name": "Dracula+",
|
||||||
|
"purple": "#C792EA",
|
||||||
|
"red": "#FF5555",
|
||||||
|
"selectionBackground": "#F8F8F2",
|
||||||
|
"white": "#F8F8F2",
|
||||||
|
"yellow": "#FFCB6B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#FFFFFF",
|
||||||
|
"black": "#011627",
|
||||||
|
"blue": "#4876D6",
|
||||||
|
"brightBlack": "#7A8181",
|
||||||
|
"brightBlue": "#5CA7E4",
|
||||||
|
"brightCyan": "#00C990",
|
||||||
|
"brightGreen": "#49D0C5",
|
||||||
|
"brightPurple": "#697098",
|
||||||
|
"brightRed": "#F76E6E",
|
||||||
|
"brightWhite": "#989FB1",
|
||||||
|
"brightYellow": "#DAC26B",
|
||||||
|
"cursorColor": "#403F53",
|
||||||
|
"cyan": "#08916A",
|
||||||
|
"foreground": "#403F53",
|
||||||
|
"green": "#2AA298",
|
||||||
|
"name": "Night Owlish Light",
|
||||||
|
"purple": "#403F53",
|
||||||
|
"red": "#D3423E",
|
||||||
|
"selectionBackground": "#F2F2F2",
|
||||||
|
"white": "#7A8181",
|
||||||
|
"yellow": "#DAAA01"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"theme": "system",
|
||||||
|
"themes": [],
|
||||||
|
"useAcrylicInTabRow": false
|
||||||
|
}
|
||||||
1
home/AppData/Local/lazygit/symlink_config.yml.tmpl
Normal file
1
home/AppData/Local/lazygit/symlink_config.yml.tmpl
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{{ .chezmoi.sourceDir }}/.config-source/lazygit/config.yml
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{{/* Windows only*/}}
|
||||||
|
{{ if eq .chezmoi.os "windows" }}
|
||||||
|
{{ .chezmoi.sourceDir }}/.config-source/vscode/keybindings.windows.json
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{{/* Windows only*/}}
|
||||||
|
{{ if eq .chezmoi.os "windows" }}
|
||||||
|
{{ .chezmoi.sourceDir }}/.config-source/vscode/settings.windows.json
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{{/* Windows only*/}}
|
||||||
|
{{ if eq .chezmoi.os "windows" }}
|
||||||
|
{{ .chezmoi.sourceDir }}/.config-source/cursor/keybindings.windows.json
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{{/* Windows only*/}}
|
||||||
|
{{ if eq .chezmoi.os "windows" }}
|
||||||
|
{{ .chezmoi.sourceDir }}/.config-source/cursor/settings.windows.json
|
||||||
|
{{ end }}
|
||||||
4
home/AppData/Roaming/nushell/config.nu.tmpl
Normal file
4
home/AppData/Roaming/nushell/config.nu.tmpl
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{{- /* Windows path: %APPDATA%\nushell\config.nu */ -}}
|
||||||
|
{{- if eq .chezmoi.os "windows" -}}
|
||||||
|
{{- template "nushell/config.nu.tmpl" . -}}
|
||||||
|
{{- end -}}
|
||||||
4
home/AppData/Roaming/nushell/env.nu.tmpl
Normal file
4
home/AppData/Roaming/nushell/env.nu.tmpl
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{{- /* Windows path: %APPDATA%\nushell\env.nu */ -}}
|
||||||
|
{{- if eq .chezmoi.os "windows" -}}
|
||||||
|
{{- template "nushell/env.nu.tmpl" . -}}
|
||||||
|
{{- end -}}
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
# {{ template "banner.tmpl" .}}
|
||||||
|
# PowerShell Profile for Windows
|
||||||
|
# Managed by chezmoi
|
||||||
|
|
||||||
|
# Editor configuration
|
||||||
|
$env:EDITOR = "micro"
|
||||||
|
|
||||||
|
# OpenAI API Key
|
||||||
|
$env:OPENAI_API_KEY = "{{ dopplerProjectJson.OPENAI_CHATGPT_CLI }}"
|
||||||
|
|
||||||
|
# mise - polyglot tool version manager
|
||||||
|
# Activates mise if installed (provides tools like vault, node, python, etc.)
|
||||||
|
if (Get-Command mise -ErrorAction SilentlyContinue) {
|
||||||
|
Invoke-Expression (& mise activate pwsh | Out-String)
|
||||||
|
}
|
||||||
|
|
||||||
|
# ----------------------
|
||||||
|
# Core Aliases
|
||||||
|
# ----------------------
|
||||||
|
Set-Alias -Name nano -Value micro
|
||||||
|
Set-Alias -Name vim -Value nvim
|
||||||
|
Set-Alias -Name lg -Value lazygit
|
||||||
|
|
||||||
|
# Directory listing - lsd (modern ls replacement)
|
||||||
|
function ls { lsd $args }
|
||||||
|
function l { lsd -l $args }
|
||||||
|
function la { lsd -a $args }
|
||||||
|
function lla { lsd -la $args }
|
||||||
|
function lt { lsd --tree $args }
|
||||||
|
function ll { lsd -AlFh $args }
|
||||||
|
|
||||||
|
# Reload shell profile
|
||||||
|
function es { & $PROFILE }
|
||||||
|
|
||||||
|
# ----------------------
|
||||||
|
# Chezmoi Aliases
|
||||||
|
# ----------------------
|
||||||
|
Set-Alias -Name ch -Value chezmoi
|
||||||
|
function cha { chezmoi apply --interactive }
|
||||||
|
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
|
||||||
|
# ----------------------
|
||||||
|
function ga { git add $args }
|
||||||
|
function gaa { git add . }
|
||||||
|
function gaaa { git add --all }
|
||||||
|
function gau { git add --update }
|
||||||
|
function gb { git branch $args }
|
||||||
|
function gbd { git branch --delete $args }
|
||||||
|
function gc { git commit $args }
|
||||||
|
function gcm { git commit --message $args }
|
||||||
|
function gcf { git commit --fixup $args }
|
||||||
|
function gco { git checkout $args }
|
||||||
|
function gcob { git checkout -b $args }
|
||||||
|
function gcom { git checkout master }
|
||||||
|
function gcos { git checkout staging }
|
||||||
|
function gcod { git checkout develop }
|
||||||
|
function gd { git diff $args }
|
||||||
|
function gda { git diff HEAD }
|
||||||
|
function glg { git log --graph --oneline --decorate --all }
|
||||||
|
function gld { git log --pretty=format:"%h %ad %s" --date=short --all }
|
||||||
|
function gm { git merge --no-ff $args }
|
||||||
|
function gma { git merge --abort }
|
||||||
|
function gmc { git merge --continue }
|
||||||
|
function gp { git pull $args }
|
||||||
|
function gpr { git pull --rebase $args }
|
||||||
|
function gr { git rebase $args }
|
||||||
|
function gs { git status $args }
|
||||||
|
function gss { git status --short }
|
||||||
|
function gst { git stash $args }
|
||||||
|
function gsta { git stash apply $args }
|
||||||
|
function gstd { git stash drop $args }
|
||||||
|
function gstl { git stash list }
|
||||||
|
function gstp { git stash pop $args }
|
||||||
|
function gsts { git stash save $args }
|
||||||
|
function glf { git log --all --grep="$args" }
|
||||||
|
|
||||||
|
# Clipboard aliases (Windows native)
|
||||||
|
function cdp { Set-Location (Get-Clipboard) }
|
||||||
|
|
||||||
|
# Initialize completions if available
|
||||||
|
if (Get-Command chezmoi -ErrorAction SilentlyContinue) {
|
||||||
|
chezmoi completion powershell | Out-String | Invoke-Expression
|
||||||
|
}
|
||||||
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
|
||||||
|
}
|
||||||
@@ -114,3 +114,7 @@ fi
|
|||||||
{{- 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.
|
||||||
17
home/dot_claude/commands/commit-staged.md
Normal file
17
home/dot_claude/commands/commit-staged.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
allowed-tools: Bash(git status:*), Bash(git diff:*), Bash(git log:*), Bash(git commit:*)
|
||||||
|
description: Create a git commit (staged files only)
|
||||||
|
---
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
- Current git status: !`git status`
|
||||||
|
- Current git diff (staged changes only): !`git diff --cached`
|
||||||
|
- Current branch: !`git branch --show-current`
|
||||||
|
- Recent commits: !`git log --oneline -10`
|
||||||
|
|
||||||
|
## Your task
|
||||||
|
|
||||||
|
Based on the above staged changes, create a single git commit.
|
||||||
|
|
||||||
|
You have the capability to call multiple tools in a single response. Create the commit using a single message. Do not stage any additional files. Do not use any other tools or do anything else. Do not send any other text or messages besides these tool calls.
|
||||||
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
|
||||||
3
home/dot_config/Code/User/symlink_keybindings.json.tmpl
Normal file
3
home/dot_config/Code/User/symlink_keybindings.json.tmpl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{{ if (and (eq .chezmoi.os "linux") (not .wsl)) }}
|
||||||
|
{{ .chezmoi.sourceDir }}/.config-source/vscode/keybindings.linux.json
|
||||||
|
{{ end }}
|
||||||
3
home/dot_config/Code/User/symlink_settings.json.tmpl
Normal file
3
home/dot_config/Code/User/symlink_settings.json.tmpl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{{ if (and (eq .chezmoi.os "linux") (not .wsl)) }}
|
||||||
|
{{ .chezmoi.sourceDir }}/.config-source/vscode/settings.linux.json
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{{ if (and (eq .chezmoi.os "linux") (not .wsl)) }}
|
||||||
|
{{ .chezmoi.sourceDir }}/.config-source/cursor/keybindings.linux.json
|
||||||
|
{{ end }}
|
||||||
3
home/dot_config/Cursor/User/symlink_settings.json.tmpl
Normal file
3
home/dot_config/Cursor/User/symlink_settings.json.tmpl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{{ if (and (eq .chezmoi.os "linux") (not .wsl)) }}
|
||||||
|
{{ .chezmoi.sourceDir }}/.config-source/cursor/settings.linux.json
|
||||||
|
{{ end }}
|
||||||
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" ]
|
||||||
92
home/dot_config/fish/conf.d/abbr.fish.tmpl
Normal file
92
home/dot_config/fish/conf.d/abbr.fish.tmpl
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
# Fish abbreviations (aliases that expand in place)
|
||||||
|
# Managed by chezmoi
|
||||||
|
|
||||||
|
# System
|
||||||
|
abbr -a sctl 'systemctl'
|
||||||
|
abbr -a sctlu 'systemctl --user'
|
||||||
|
abbr -a jctl 'journalctl'
|
||||||
|
|
||||||
|
# Core aliases - lsd (modern ls replacement)
|
||||||
|
abbr -a ls 'lsd'
|
||||||
|
abbr -a l 'lsd -l'
|
||||||
|
abbr -a la 'lsd -a'
|
||||||
|
abbr -a lla 'lsd -la'
|
||||||
|
abbr -a lt 'lsd --tree'
|
||||||
|
abbr -a ll 'lsd -AlFh'
|
||||||
|
abbr -a nano 'micro'
|
||||||
|
abbr -a lg 'lazygit'
|
||||||
|
abbr -a vim 'nvim'
|
||||||
|
abbr -a chlg 'lazygit --path ~/.local/share/chezmoi'
|
||||||
|
abbr -a es 'exec fish'
|
||||||
|
|
||||||
|
# Chezmoi
|
||||||
|
abbr -a cha 'chezmoi apply --interactive'
|
||||||
|
abbr -a ch 'chezmoi'
|
||||||
|
|
||||||
|
# Remote Management
|
||||||
|
abbr -a romanlog "ssh roman 'tail -F /var/log/syslog' --lines 100"
|
||||||
|
|
||||||
|
# Other aliases
|
||||||
|
abbr -a gpt 'chatgpt'
|
||||||
|
abbr -a copilot 'gh copilot'
|
||||||
|
abbr -a suggest 'gh copilot suggest -t shell'
|
||||||
|
abbr -a spt 'spotify_player'
|
||||||
|
abbr -a gitalias 'alias | grep "git "'
|
||||||
|
abbr -a mousefix 'sudo udevadm trigger'
|
||||||
|
abbr -a bw_login 'set -gx BW_SESSION (bw unlock --raw)'
|
||||||
|
|
||||||
|
# Clipboard aliases
|
||||||
|
{{ if not .wsl -}}
|
||||||
|
abbr -a copy 'xsel -ib'
|
||||||
|
abbr -a paste 'xsel -b'
|
||||||
|
abbr -a cdp 'cd (xsel -b)'
|
||||||
|
{{- else -}}
|
||||||
|
abbr -a copy 'clip.exe'
|
||||||
|
abbr -a paste 'powershell.exe -noprofile Get-Clipboard'
|
||||||
|
abbr -a cdp 'cd (xsel -b)'
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
# Bluetooth device aliases
|
||||||
|
abbr -a budsOff 'bluetoothctl block 60:3A:AF:75:61:80'
|
||||||
|
abbr -a budsOn 'bluetoothctl unblock 60:3A:AF:75:61:80 && bluetoothctl connect 60:3A:AF:75:61:80'
|
||||||
|
abbr -a maestroOff 'bluetoothctl block AC:BF:71:66:FE:B2'
|
||||||
|
abbr -a maestroOn 'bluetoothctl unblock AC:BF:71:66:FE:B2 && bluetoothctl connect AC:BF:71:66:FE:B2'
|
||||||
|
|
||||||
|
# Git Aliases
|
||||||
|
abbr -a ga 'git add'
|
||||||
|
abbr -a gaa 'git add .'
|
||||||
|
abbr -a gaaa 'git add --all'
|
||||||
|
abbr -a gau 'git add --update'
|
||||||
|
abbr -a gb 'git branch'
|
||||||
|
abbr -a gbd 'git branch --delete'
|
||||||
|
abbr -a gc 'git commit'
|
||||||
|
abbr -a gcm 'git commit --message'
|
||||||
|
abbr -a gcf 'git commit --fixup'
|
||||||
|
abbr -a gco 'git checkout'
|
||||||
|
abbr -a gcob 'git checkout -b'
|
||||||
|
abbr -a gcom 'git checkout master'
|
||||||
|
abbr -a gcos 'git checkout staging'
|
||||||
|
abbr -a gcod 'git checkout develop'
|
||||||
|
abbr -a gd 'git diff'
|
||||||
|
abbr -a gda 'git diff HEAD'
|
||||||
|
abbr -a glg 'git log --graph --oneline --decorate --all'
|
||||||
|
abbr -a gld 'git log --pretty=format:"%h %ad %s" --date=short --all'
|
||||||
|
abbr -a gm 'git merge --no-ff'
|
||||||
|
abbr -a gma 'git merge --abort'
|
||||||
|
abbr -a gmc 'git merge --continue'
|
||||||
|
abbr -a gp 'git pull'
|
||||||
|
abbr -a gpr 'git pull --rebase'
|
||||||
|
abbr -a gr 'git rebase'
|
||||||
|
abbr -a gs 'git status'
|
||||||
|
abbr -a gss 'git status --short'
|
||||||
|
abbr -a gst 'git stash'
|
||||||
|
abbr -a gsta 'git stash apply'
|
||||||
|
abbr -a gstd 'git stash drop'
|
||||||
|
abbr -a gstl 'git stash list'
|
||||||
|
abbr -a gstp 'git stash pop'
|
||||||
|
abbr -a gsts 'git stash save'
|
||||||
|
|
||||||
|
# KiTTY SSH kitten
|
||||||
|
if test "$TERM" = "xterm-kitty"
|
||||||
|
abbr -a ssh 'kitty +kitten ssh'
|
||||||
|
end
|
||||||
0
home/dot_config/fish/conf.d/keychain.fish
Normal file
0
home/dot_config/fish/conf.d/keychain.fish
Normal file
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
|
||||||
38
home/dot_config/fish/config.fish.tmpl
Normal file
38
home/dot_config/fish/config.fish.tmpl
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# Fish shell configuration
|
||||||
|
# Managed by chezmoi
|
||||||
|
|
||||||
|
# Disable greeting
|
||||||
|
set -g fish_greeting
|
||||||
|
|
||||||
|
{{- if .wsl }}
|
||||||
|
if status is-login
|
||||||
|
and status is-interactive
|
||||||
|
keychain --quiet --agents ssh --eval ~/.ssh/id_rsa | source
|
||||||
|
end
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
# Common shared configuration (environment variables, PATH, tool setup)
|
||||||
|
{{ template "scripts/commonrc.fish.tmpl" dict "data" . }}
|
||||||
|
|
||||||
|
# Chezmoi shell completion
|
||||||
|
{{ completion "fish" }}
|
||||||
|
|
||||||
|
# VS Code / Cursor shell integration
|
||||||
|
if test "$TERM_PROGRAM" = "vscode"
|
||||||
|
if command -q code
|
||||||
|
string replace -r '^' '' (code --locate-shell-integration-path fish) | source
|
||||||
|
else if command -q cursor
|
||||||
|
string replace -r '^' '' (cursor --locate-shell-integration-path fish) | source
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# fzf key bindings (if fzf.fish plugin installed via Fisher)
|
||||||
|
# Note: This is handled automatically by Fisher plugin
|
||||||
|
|
||||||
|
# Load custom functions from ~/.config/fish/functions/
|
||||||
|
# (Fish does this automatically, no explicit sourcing needed)
|
||||||
|
|
||||||
|
# Load abbreviations
|
||||||
|
if test -f ~/.config/fish/conf.d/abbr.fish
|
||||||
|
source ~/.config/fish/conf.d/abbr.fish
|
||||||
|
end
|
||||||
4
home/dot_config/fish/fish_plugins
Normal file
4
home/dot_config/fish/fish_plugins
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#
|
||||||
|
jorgebucaran/fisher
|
||||||
|
ilancosman/tide@v6
|
||||||
|
patrickf1/fzf.fish
|
||||||
12
home/dot_config/fish/functions/__init_hishtory.fish.tmpl
Normal file
12
home/dot_config/fish/functions/__init_hishtory.fish.tmpl
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Defer hishtory initialization to first prompt
|
||||||
|
# This runs after startup but before user interaction
|
||||||
|
function __init_hishtory --on-event fish_prompt
|
||||||
|
# Remove this function after first run
|
||||||
|
functions --erase __init_hishtory
|
||||||
|
|
||||||
|
# Only initialize if hishtory config exists
|
||||||
|
if test -f $HOME/.hishtory/config.fish
|
||||||
|
set -gx HISHTORY_SERVER "https://hsh.{{ dopplerProjectJson.PRIVATE_DOMAIN }}"
|
||||||
|
source $HOME/.hishtory/config.fish
|
||||||
|
end
|
||||||
|
end
|
||||||
18
home/dot_config/fish/functions/chatgpt.fish
Normal file
18
home/dot_config/fish/functions/chatgpt.fish
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Lazy-load chatgpt completions on first use
|
||||||
|
function chatgpt --wraps chatgpt
|
||||||
|
# Initialize chatgpt completions only once
|
||||||
|
if not set -q __chatgpt_initialized
|
||||||
|
set -g __chatgpt_initialized 1
|
||||||
|
|
||||||
|
# Generate and source completions
|
||||||
|
if command -q chatgpt
|
||||||
|
command chatgpt --set-completions fish | source
|
||||||
|
else
|
||||||
|
echo "chatgpt is not installed" >&2
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Execute the actual chatgpt command
|
||||||
|
command chatgpt $argv
|
||||||
|
end
|
||||||
24
home/dot_config/fish/functions/chcode.fish
Normal file
24
home/dot_config/fish/functions/chcode.fish
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
function chcode --description "Edit chezmoi files in VS Code"
|
||||||
|
set -gx EDITOR "code --wait"
|
||||||
|
|
||||||
|
# Check if --watch is in arguments
|
||||||
|
set -l has_watch false
|
||||||
|
set -l has_file false
|
||||||
|
|
||||||
|
for arg in $argv
|
||||||
|
if test "$arg" = "--watch"
|
||||||
|
set has_watch true
|
||||||
|
else if not string match -q -- '-*' $arg
|
||||||
|
set has_file true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# If --watch is provided but no file, show error
|
||||||
|
if test $has_watch = true -a $has_file = false
|
||||||
|
echo "--watch requires a file to be provided, directories aren't supported with watch mode"
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
# Execute chezmoi edit with all arguments
|
||||||
|
chezmoi edit $argv
|
||||||
|
end
|
||||||
12
home/dot_config/fish/functions/chfix.fish
Normal file
12
home/dot_config/fish/functions/chfix.fish
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
function chfix --description "chmod +x the last command (if it's a file)"
|
||||||
|
# Get the last command from Fish history
|
||||||
|
set -l last_command (history --max 1 | string trim)
|
||||||
|
|
||||||
|
if test -f "$last_command"
|
||||||
|
chmod +x "$last_command"
|
||||||
|
echo "Made executable: $last_command"
|
||||||
|
else
|
||||||
|
echo "Error: $last_command is not a valid file"
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
6
home/dot_config/fish/functions/chshow.fish.tmpl
Normal file
6
home/dot_config/fish/functions/chshow.fish.tmpl
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
function chshow --description "Show rendered chezmoi template via fzf"
|
||||||
|
set -l target (find {{ .chezmoi.sourceDir | quote }} -name "*.tmpl" -type f | fzf)
|
||||||
|
if test -n "$target"
|
||||||
|
cat $target | chezmoi execute-template
|
||||||
|
end
|
||||||
|
end
|
||||||
19
home/dot_config/fish/functions/fuck.fish
Normal file
19
home/dot_config/fish/functions/fuck.fish
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Lazy-load thefuck on first use
|
||||||
|
function fuck --description "Correct your previous console command"
|
||||||
|
# Initialize thefuck only once
|
||||||
|
if not set -q __thefuck_initialized
|
||||||
|
set -g __thefuck_initialized 1
|
||||||
|
|
||||||
|
# Run thefuck alias generation
|
||||||
|
if command -q thefuck
|
||||||
|
thefuck --alias | source
|
||||||
|
else
|
||||||
|
echo "thefuck is not installed" >&2
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Execute the fuck command (which thefuck creates)
|
||||||
|
# After initialization, the actual fuck function will be defined
|
||||||
|
fuck $argv
|
||||||
|
end
|
||||||
3
home/dot_config/fish/functions/gi.fish
Normal file
3
home/dot_config/fish/functions/gi.fish
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
function gi --description "Generate .gitignore from gitignore.io"
|
||||||
|
curl -sL https://www.toptal.com/developers/gitignore/api/$argv
|
||||||
|
end
|
||||||
3
home/dot_config/fish/functions/glf.fish
Normal file
3
home/dot_config/fish/functions/glf.fish
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
function glf --description "Git log find by commit message"
|
||||||
|
git log --all --grep="$argv"
|
||||||
|
end
|
||||||
18
home/dot_config/fish/functions/just.fish
Normal file
18
home/dot_config/fish/functions/just.fish
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Lazy-load just completions on first use
|
||||||
|
function just --wraps just
|
||||||
|
# Initialize just completions only once
|
||||||
|
if not set -q __just_initialized
|
||||||
|
set -g __just_initialized 1
|
||||||
|
|
||||||
|
# Generate and source completions
|
||||||
|
if command -q just
|
||||||
|
command just --completions fish | source
|
||||||
|
else
|
||||||
|
echo "just is not installed" >&2
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Execute the actual just command
|
||||||
|
command just $argv
|
||||||
|
end
|
||||||
7
home/dot_config/fish/functions/lastRuns.fish
Normal file
7
home/dot_config/fish/functions/lastRuns.fish
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
function lastRuns --description "Show last N GitHub Actions runs"
|
||||||
|
set -l runs 10
|
||||||
|
if test (count $argv) -gt 0
|
||||||
|
set runs $argv[1]
|
||||||
|
end
|
||||||
|
gh run list -L $runs --json name,url | jq -c '.[] | [.name, .url] | join(" ")' -r
|
||||||
|
end
|
||||||
4
home/dot_config/fish/functions/mktouch.fish
Normal file
4
home/dot_config/fish/functions/mktouch.fish
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
function mktouch --description "Touch a file while creating parent directories"
|
||||||
|
mkdir -p (dirname $argv[1])
|
||||||
|
touch $argv[1]
|
||||||
|
end
|
||||||
23
home/dot_config/fish/functions/pyenv.fish
Normal file
23
home/dot_config/fish/functions/pyenv.fish
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Lazy-load pyenv on first use
|
||||||
|
function pyenv --wraps pyenv
|
||||||
|
# Initialize pyenv only once
|
||||||
|
if not set -q __pyenv_initialized
|
||||||
|
set -g __pyenv_initialized 1
|
||||||
|
|
||||||
|
# Add to PATH if not already there
|
||||||
|
if test -d $PYENV_ROOT/bin; and not contains $PYENV_ROOT/bin $PATH
|
||||||
|
set -gx PATH $PYENV_ROOT/bin $PATH
|
||||||
|
end
|
||||||
|
|
||||||
|
# Run pyenv init
|
||||||
|
command pyenv init - fish | source
|
||||||
|
|
||||||
|
# pyenv-virtualenv if available
|
||||||
|
if command -q pyenv-virtualenv-init
|
||||||
|
command pyenv virtualenv-init - fish | source
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Execute the actual pyenv command
|
||||||
|
command pyenv $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
|
||||||
13
home/dot_config/fish/functions/tempCode.fish
Normal file
13
home/dot_config/fish/functions/tempCode.fish
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
function tempCode --description "Create a temporary file and open in VS Code"
|
||||||
|
if test (count $argv) -eq 0
|
||||||
|
echo "Must provide filetype argument (ex: py, .xml, html)"
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove preceding dot, then re-add to support both '.py' and 'py' as arguments
|
||||||
|
set -l extension (string replace -r '^\.' '' $argv[1])
|
||||||
|
set -l temp_file (mktemp /tmp/XXXXXXXXXXXX_(uuidgen).$extension)
|
||||||
|
|
||||||
|
echo "Temporary $argv[1] file created at $temp_file"
|
||||||
|
code --file-uri "file://$temp_file"
|
||||||
|
end
|
||||||
18
home/dot_config/fish/functions/z.fish
Normal file
18
home/dot_config/fish/functions/z.fish
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Lazy-load zoxide on first use of z command
|
||||||
|
function z --description "zoxide smart cd"
|
||||||
|
# Initialize zoxide only once
|
||||||
|
if not set -q __zoxide_initialized
|
||||||
|
set -g __zoxide_initialized 1
|
||||||
|
|
||||||
|
# Run zoxide init
|
||||||
|
if command -q zoxide
|
||||||
|
zoxide init fish | source
|
||||||
|
else
|
||||||
|
echo "zoxide is not installed" >&2
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Execute the actual z command (defined by zoxide init)
|
||||||
|
__zoxide_z $argv
|
||||||
|
end
|
||||||
18
home/dot_config/fish/functions/zi.fish
Normal file
18
home/dot_config/fish/functions/zi.fish
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Lazy-load zoxide on first use of zi command
|
||||||
|
function zi --description "zoxide interactive smart cd"
|
||||||
|
# Initialize zoxide only once (shared flag with z.fish)
|
||||||
|
if not set -q __zoxide_initialized
|
||||||
|
set -g __zoxide_initialized 1
|
||||||
|
|
||||||
|
# Run zoxide init
|
||||||
|
if command -q zoxide
|
||||||
|
zoxide init fish | source
|
||||||
|
else
|
||||||
|
echo "zoxide is not installed" >&2
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Execute the actual zi command (defined by zoxide init)
|
||||||
|
__zoxide_zi $argv
|
||||||
|
end
|
||||||
13
home/dot_config/git/config-ryan.tmpl
Normal file
13
home/dot_config/git/config-ryan.tmpl
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Ryan Walters identity override
|
||||||
|
# Use this for work/professional repositories
|
||||||
|
#
|
||||||
|
# To use in a repository, run:
|
||||||
|
# git config --local include.path ~/.config/git/config-ryan
|
||||||
|
|
||||||
|
[user]
|
||||||
|
name = Ryan Walters
|
||||||
|
email = ryan@walters.to
|
||||||
|
signingkey = 301511AAD64FA365
|
||||||
|
{{ if eq .chezmoi.os "windows" }}
|
||||||
|
{{ else }}
|
||||||
|
{{ end }}
|
||||||
13
home/dot_config/git/config-xevion.tmpl
Normal file
13
home/dot_config/git/config-xevion.tmpl
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Xevion identity override
|
||||||
|
# Use this for personal/open-source repositories
|
||||||
|
#
|
||||||
|
# To use in a repository, run:
|
||||||
|
# git config --local include.path ~/.config/git/config-xevion
|
||||||
|
|
||||||
|
[user]
|
||||||
|
name = Xevion
|
||||||
|
email = xevion@xevion.dev
|
||||||
|
# No GPG key available for this email - signing disabled
|
||||||
|
{{ if eq .chezmoi.os "windows" }}
|
||||||
|
{{ else }}
|
||||||
|
{{ 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
|
||||||
|
|||||||
1
home/dot_config/lazygit/symlink_config.yml.tmpl
Normal file
1
home/dot_config/lazygit/symlink_config.yml.tmpl
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{{ .chezmoi.sourceDir }}/.config-source/lazygit/config.yml
|
||||||
@@ -1,899 +1,4 @@
|
|||||||
# {{ template "banner.tmpl" .}}
|
{{- /* Linux/macOS path: ~/.config/nushell/config.nu */ -}}
|
||||||
# Nushell Config File
|
{{- if ne .chezmoi.os "windows" -}}
|
||||||
#
|
{{- template "nushell/config.nu.tmpl" . -}}
|
||||||
# version = "0.98.0"
|
{{- end -}}
|
||||||
|
|
||||||
# For more information on defining custom themes, see
|
|
||||||
# https://www.nushell.sh/book/coloring_and_theming.html
|
|
||||||
# And here is the theme collection
|
|
||||||
# https://github.com/nushell/nu_scripts/tree/main/themes
|
|
||||||
let dark_theme = {
|
|
||||||
# color for nushell primitives
|
|
||||||
separator: white
|
|
||||||
leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
|
|
||||||
header: green_bold
|
|
||||||
empty: blue
|
|
||||||
# Closures can be used to choose colors for specific values.
|
|
||||||
# The value (in this case, a bool) is piped into the closure.
|
|
||||||
# eg) {|| if $in { 'light_cyan' } else { 'light_gray' } }
|
|
||||||
bool: light_cyan
|
|
||||||
int: white
|
|
||||||
filesize: cyan
|
|
||||||
duration: white
|
|
||||||
date: purple
|
|
||||||
range: white
|
|
||||||
float: white
|
|
||||||
string: white
|
|
||||||
nothing: white
|
|
||||||
binary: white
|
|
||||||
cell-path: white
|
|
||||||
row_index: green_bold
|
|
||||||
record: white
|
|
||||||
list: white
|
|
||||||
block: white
|
|
||||||
hints: dark_gray
|
|
||||||
search_result: { bg: red fg: white }
|
|
||||||
shape_and: purple_bold
|
|
||||||
shape_binary: purple_bold
|
|
||||||
shape_block: blue_bold
|
|
||||||
shape_bool: light_cyan
|
|
||||||
shape_closure: green_bold
|
|
||||||
shape_custom: green
|
|
||||||
shape_datetime: cyan_bold
|
|
||||||
shape_directory: cyan
|
|
||||||
shape_external: cyan
|
|
||||||
shape_externalarg: green_bold
|
|
||||||
shape_external_resolved: light_yellow_bold
|
|
||||||
shape_filepath: cyan
|
|
||||||
shape_flag: blue_bold
|
|
||||||
shape_float: purple_bold
|
|
||||||
# shapes are used to change the cli syntax highlighting
|
|
||||||
shape_garbage: { fg: white bg: red attr: b }
|
|
||||||
shape_glob_interpolation: cyan_bold
|
|
||||||
shape_globpattern: cyan_bold
|
|
||||||
shape_int: purple_bold
|
|
||||||
shape_internalcall: cyan_bold
|
|
||||||
shape_keyword: cyan_bold
|
|
||||||
shape_list: cyan_bold
|
|
||||||
shape_literal: blue
|
|
||||||
shape_match_pattern: green
|
|
||||||
shape_matching_brackets: { attr: u }
|
|
||||||
shape_nothing: light_cyan
|
|
||||||
shape_operator: yellow
|
|
||||||
shape_or: purple_bold
|
|
||||||
shape_pipe: purple_bold
|
|
||||||
shape_range: yellow_bold
|
|
||||||
shape_record: cyan_bold
|
|
||||||
shape_redirection: purple_bold
|
|
||||||
shape_signature: green_bold
|
|
||||||
shape_string: green
|
|
||||||
shape_string_interpolation: cyan_bold
|
|
||||||
shape_table: blue_bold
|
|
||||||
shape_variable: purple
|
|
||||||
shape_vardecl: purple
|
|
||||||
shape_raw_string: light_purple
|
|
||||||
}
|
|
||||||
|
|
||||||
let light_theme = {
|
|
||||||
# color for nushell primitives
|
|
||||||
separator: dark_gray
|
|
||||||
leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
|
|
||||||
header: green_bold
|
|
||||||
empty: blue
|
|
||||||
# Closures can be used to choose colors for specific values.
|
|
||||||
# The value (in this case, a bool) is piped into the closure.
|
|
||||||
# eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } }
|
|
||||||
bool: dark_cyan
|
|
||||||
int: dark_gray
|
|
||||||
filesize: cyan_bold
|
|
||||||
duration: dark_gray
|
|
||||||
date: purple
|
|
||||||
range: dark_gray
|
|
||||||
float: dark_gray
|
|
||||||
string: dark_gray
|
|
||||||
nothing: dark_gray
|
|
||||||
binary: dark_gray
|
|
||||||
cell-path: dark_gray
|
|
||||||
row_index: green_bold
|
|
||||||
record: dark_gray
|
|
||||||
list: dark_gray
|
|
||||||
block: dark_gray
|
|
||||||
hints: dark_gray
|
|
||||||
search_result: { fg: white bg: red }
|
|
||||||
shape_and: purple_bold
|
|
||||||
shape_binary: purple_bold
|
|
||||||
shape_block: blue_bold
|
|
||||||
shape_bool: light_cyan
|
|
||||||
shape_closure: green_bold
|
|
||||||
shape_custom: green
|
|
||||||
shape_datetime: cyan_bold
|
|
||||||
shape_directory: cyan
|
|
||||||
shape_external: cyan
|
|
||||||
shape_externalarg: green_bold
|
|
||||||
shape_external_resolved: light_purple_bold
|
|
||||||
shape_filepath: cyan
|
|
||||||
shape_flag: blue_bold
|
|
||||||
shape_float: purple_bold
|
|
||||||
# shapes are used to change the cli syntax highlighting
|
|
||||||
shape_garbage: { fg: white bg: red attr: b }
|
|
||||||
shape_glob_interpolation: cyan_bold
|
|
||||||
shape_globpattern: cyan_bold
|
|
||||||
shape_int: purple_bold
|
|
||||||
shape_internalcall: cyan_bold
|
|
||||||
shape_keyword: cyan_bold
|
|
||||||
shape_list: cyan_bold
|
|
||||||
shape_literal: blue
|
|
||||||
shape_match_pattern: green
|
|
||||||
shape_matching_brackets: { attr: u }
|
|
||||||
shape_nothing: light_cyan
|
|
||||||
shape_operator: yellow
|
|
||||||
shape_or: purple_bold
|
|
||||||
shape_pipe: purple_bold
|
|
||||||
shape_range: yellow_bold
|
|
||||||
shape_record: cyan_bold
|
|
||||||
shape_redirection: purple_bold
|
|
||||||
shape_signature: green_bold
|
|
||||||
shape_string: green
|
|
||||||
shape_string_interpolation: cyan_bold
|
|
||||||
shape_table: blue_bold
|
|
||||||
shape_variable: purple
|
|
||||||
shape_vardecl: purple
|
|
||||||
shape_raw_string: light_purple
|
|
||||||
}
|
|
||||||
|
|
||||||
# External completer example
|
|
||||||
# let carapace_completer = {|spans|
|
|
||||||
# carapace $spans.0 nushell ...$spans | from json
|
|
||||||
# }
|
|
||||||
|
|
||||||
# The default config record. This is where much of your global configuration is setup.
|
|
||||||
$env.config = {
|
|
||||||
show_banner: false # true or false to enable or disable the welcome banner at startup
|
|
||||||
|
|
||||||
ls: {
|
|
||||||
use_ls_colors: true # use the LS_COLORS environment variable to colorize output
|
|
||||||
clickable_links: true # enable or disable clickable links. Your terminal has to support links.
|
|
||||||
}
|
|
||||||
|
|
||||||
rm: {
|
|
||||||
always_trash: false # always act as if -t was given. Can be overridden with -p
|
|
||||||
}
|
|
||||||
|
|
||||||
table: {
|
|
||||||
mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other
|
|
||||||
index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column
|
|
||||||
show_empty: true # show 'empty list' and 'empty record' placeholders for command output
|
|
||||||
padding: { left: 1, right: 1 } # a left right padding of each column in a table
|
|
||||||
trim: {
|
|
||||||
methodology: wrapping # wrapping or truncating
|
|
||||||
wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology
|
|
||||||
truncating_suffix: "..." # A suffix used by the 'truncating' methodology
|
|
||||||
}
|
|
||||||
header_on_separator: false # show header text on separator/border line
|
|
||||||
# abbreviated_row_count: 10 # limit data rows from top and bottom after reaching a set point
|
|
||||||
}
|
|
||||||
|
|
||||||
error_style: "fancy" # "fancy" or "plain" for screen reader-friendly error messages
|
|
||||||
|
|
||||||
# Whether an error message should be printed if an error of a certain kind is triggered.
|
|
||||||
display_errors: {
|
|
||||||
exit_code: false # assume the external command prints an error message
|
|
||||||
# Core dump errors are always printed, and SIGPIPE never triggers an error.
|
|
||||||
# The setting below controls message printing for termination by all other signals.
|
|
||||||
termination_signal: true
|
|
||||||
}
|
|
||||||
|
|
||||||
# datetime_format determines what a datetime rendered in the shell would look like.
|
|
||||||
# Behavior without this configuration point will be to "humanize" the datetime display,
|
|
||||||
# showing something like "a day ago."
|
|
||||||
datetime_format: {
|
|
||||||
# normal: '%a, %d %b %Y %H:%M:%S %z' # shows up in displays of variables or other datetime's outside of tables
|
|
||||||
# table: '%m/%d/%y %I:%M:%S%p' # generally shows up in tabular outputs such as ls. commenting this out will change it to the default human readable datetime format
|
|
||||||
}
|
|
||||||
|
|
||||||
explore: {
|
|
||||||
status_bar_background: { fg: "#1D1F21", bg: "#C4C9C6" },
|
|
||||||
command_bar_text: { fg: "#C4C9C6" },
|
|
||||||
highlight: { fg: "black", bg: "yellow" },
|
|
||||||
status: {
|
|
||||||
error: { fg: "white", bg: "red" },
|
|
||||||
warn: {}
|
|
||||||
info: {}
|
|
||||||
},
|
|
||||||
selected_cell: { bg: light_blue },
|
|
||||||
}
|
|
||||||
|
|
||||||
history: {
|
|
||||||
max_size: 100_000 # Session has to be reloaded for this to take effect
|
|
||||||
sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file
|
|
||||||
file_format: "plaintext" # "sqlite" or "plaintext"
|
|
||||||
isolation: false # only available with sqlite file_format. true enables history isolation, false disables it. true will allow the history to be isolated to the current session using up/down arrows. false will allow the history to be shared across all sessions.
|
|
||||||
}
|
|
||||||
|
|
||||||
completions: {
|
|
||||||
case_sensitive: false # set to true to enable case-sensitive completions
|
|
||||||
quick: true # set this to false to prevent auto-selecting completions when only one remains
|
|
||||||
partial: true # set this to false to prevent partial filling of the prompt
|
|
||||||
algorithm: "prefix" # prefix or fuzzy
|
|
||||||
sort: "smart" # "smart" (alphabetical for prefix matching, fuzzy score for fuzzy matching) or "alphabetical"
|
|
||||||
external: {
|
|
||||||
enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow
|
|
||||||
max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options
|
|
||||||
completer: null # check 'carapace_completer' above as an example
|
|
||||||
}
|
|
||||||
use_ls_colors: true # set this to true to enable file/path/directory completions using LS_COLORS
|
|
||||||
}
|
|
||||||
|
|
||||||
filesize: {
|
|
||||||
metric: false # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard)
|
|
||||||
format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, auto
|
|
||||||
}
|
|
||||||
|
|
||||||
cursor_shape: {
|
|
||||||
emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (line is the default)
|
|
||||||
vi_insert: block # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (block is the default)
|
|
||||||
vi_normal: underscore # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (underscore is the default)
|
|
||||||
}
|
|
||||||
|
|
||||||
color_config: $dark_theme # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record
|
|
||||||
footer_mode: 25 # always, never, number_of_rows, auto
|
|
||||||
float_precision: 2 # the precision for displaying floats in tables
|
|
||||||
buffer_editor: null # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL
|
|
||||||
use_ansi_coloring: true
|
|
||||||
bracketed_paste: true # enable bracketed paste, currently useless on windows
|
|
||||||
edit_mode: emacs # emacs, vi
|
|
||||||
shell_integration: {
|
|
||||||
# osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title
|
|
||||||
osc2: true
|
|
||||||
# osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory
|
|
||||||
osc7: true
|
|
||||||
# osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8
|
|
||||||
osc8: true
|
|
||||||
# osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal
|
|
||||||
osc9_9: false
|
|
||||||
# osc133 is several escapes invented by Final Term which include the supported ones below.
|
|
||||||
# 133;A - Mark prompt start
|
|
||||||
# 133;B - Mark prompt end
|
|
||||||
# 133;C - Mark pre-execution
|
|
||||||
# 133;D;exit - Mark execution finished with exit code
|
|
||||||
# This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is
|
|
||||||
osc133: true
|
|
||||||
# osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features
|
|
||||||
# 633;A - Mark prompt start
|
|
||||||
# 633;B - Mark prompt end
|
|
||||||
# 633;C - Mark pre-execution
|
|
||||||
# 633;D;exit - Mark execution finished with exit code
|
|
||||||
# 633;E - Explicitly set the command line with an optional nonce
|
|
||||||
# 633;P;Cwd=<path> - Mark the current working directory and communicate it to the terminal
|
|
||||||
# and also helps with the run recent menu in vscode
|
|
||||||
osc633: true
|
|
||||||
# reset_application_mode is escape \x1b[?1l and was added to help ssh work better
|
|
||||||
reset_application_mode: true
|
|
||||||
}
|
|
||||||
render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt.
|
|
||||||
use_kitty_protocol: false # enables keyboard enhancement protocol implemented by kitty console, only if your terminal support this.
|
|
||||||
highlight_resolved_externals: false # true enables highlighting of external commands in the repl resolved by which.
|
|
||||||
recursion_limit: 50 # the maximum number of times nushell allows recursion before stopping it
|
|
||||||
|
|
||||||
plugins: {} # Per-plugin configuration. See https://www.nushell.sh/contributor-book/plugins.html#configuration.
|
|
||||||
|
|
||||||
plugin_gc: {
|
|
||||||
# Configuration for plugin garbage collection
|
|
||||||
default: {
|
|
||||||
enabled: true # true to enable stopping of inactive plugins
|
|
||||||
stop_after: 10sec # how long to wait after a plugin is inactive to stop it
|
|
||||||
}
|
|
||||||
plugins: {
|
|
||||||
# alternate configuration for specific plugins, by name, for example:
|
|
||||||
#
|
|
||||||
# gstat: {
|
|
||||||
# enabled: false
|
|
||||||
# }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hooks: {
|
|
||||||
pre_prompt: [{ null }] # run before the prompt is shown
|
|
||||||
pre_execution: [{ null }] # run before the repl input is run
|
|
||||||
env_change: {
|
|
||||||
PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input
|
|
||||||
}
|
|
||||||
display_output: "if (term size).columns >= 100 { table -e } else { table }" # run to display the output of a pipeline
|
|
||||||
command_not_found: { null } # return an error message when a command is not found
|
|
||||||
}
|
|
||||||
|
|
||||||
menus: [
|
|
||||||
# Configuration for default nushell menus
|
|
||||||
# Note the lack of source parameter
|
|
||||||
{
|
|
||||||
name: completion_menu
|
|
||||||
only_buffer_difference: false
|
|
||||||
marker: "| "
|
|
||||||
type: {
|
|
||||||
layout: columnar
|
|
||||||
columns: 4
|
|
||||||
col_width: 20 # Optional value. If missing all the screen width is used to calculate column width
|
|
||||||
col_padding: 2
|
|
||||||
}
|
|
||||||
style: {
|
|
||||||
text: green
|
|
||||||
selected_text: { attr: r }
|
|
||||||
description_text: yellow
|
|
||||||
match_text: { attr: u }
|
|
||||||
selected_match_text: { attr: ur }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: ide_completion_menu
|
|
||||||
only_buffer_difference: false
|
|
||||||
marker: "| "
|
|
||||||
type: {
|
|
||||||
layout: ide
|
|
||||||
min_completion_width: 0,
|
|
||||||
max_completion_width: 50,
|
|
||||||
max_completion_height: 10, # will be limited by the available lines in the terminal
|
|
||||||
padding: 0,
|
|
||||||
border: true,
|
|
||||||
cursor_offset: 0,
|
|
||||||
description_mode: "prefer_right"
|
|
||||||
min_description_width: 0
|
|
||||||
max_description_width: 50
|
|
||||||
max_description_height: 10
|
|
||||||
description_offset: 1
|
|
||||||
# If true, the cursor pos will be corrected, so the suggestions match up with the typed text
|
|
||||||
#
|
|
||||||
# C:\> str
|
|
||||||
# str join
|
|
||||||
# str trim
|
|
||||||
# str split
|
|
||||||
correct_cursor_pos: false
|
|
||||||
}
|
|
||||||
style: {
|
|
||||||
text: green
|
|
||||||
selected_text: { attr: r }
|
|
||||||
description_text: yellow
|
|
||||||
match_text: { attr: u }
|
|
||||||
selected_match_text: { attr: ur }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: history_menu
|
|
||||||
only_buffer_difference: true
|
|
||||||
marker: "? "
|
|
||||||
type: {
|
|
||||||
layout: list
|
|
||||||
page_size: 10
|
|
||||||
}
|
|
||||||
style: {
|
|
||||||
text: green
|
|
||||||
selected_text: green_reverse
|
|
||||||
description_text: yellow
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: help_menu
|
|
||||||
only_buffer_difference: true
|
|
||||||
marker: "? "
|
|
||||||
type: {
|
|
||||||
layout: description
|
|
||||||
columns: 4
|
|
||||||
col_width: 20 # Optional value. If missing all the screen width is used to calculate column width
|
|
||||||
col_padding: 2
|
|
||||||
selection_rows: 4
|
|
||||||
description_rows: 10
|
|
||||||
}
|
|
||||||
style: {
|
|
||||||
text: green
|
|
||||||
selected_text: green_reverse
|
|
||||||
description_text: yellow
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
keybindings: [
|
|
||||||
{
|
|
||||||
name: completion_menu
|
|
||||||
modifier: none
|
|
||||||
keycode: tab
|
|
||||||
mode: [emacs vi_normal vi_insert]
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: menu name: completion_menu }
|
|
||||||
{ send: menunext }
|
|
||||||
{ edit: complete }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: ide_completion_menu
|
|
||||||
modifier: control
|
|
||||||
keycode: char_n
|
|
||||||
mode: [emacs vi_normal vi_insert]
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: menu name: ide_completion_menu }
|
|
||||||
{ send: menunext }
|
|
||||||
{ edit: complete }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: history_menu
|
|
||||||
modifier: control
|
|
||||||
keycode: char_r
|
|
||||||
mode: [emacs, vi_insert, vi_normal]
|
|
||||||
event: { send: menu name: history_menu }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: help_menu
|
|
||||||
modifier: none
|
|
||||||
keycode: f1
|
|
||||||
mode: [emacs, vi_insert, vi_normal]
|
|
||||||
event: { send: menu name: help_menu }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: completion_previous_menu
|
|
||||||
modifier: shift
|
|
||||||
keycode: backtab
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { send: menuprevious }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: next_page_menu
|
|
||||||
modifier: control
|
|
||||||
keycode: char_x
|
|
||||||
mode: emacs
|
|
||||||
event: { send: menupagenext }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: undo_or_previous_page_menu
|
|
||||||
modifier: control
|
|
||||||
keycode: char_z
|
|
||||||
mode: emacs
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: menupageprevious }
|
|
||||||
{ edit: undo }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: escape
|
|
||||||
modifier: none
|
|
||||||
keycode: escape
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { send: esc } # NOTE: does not appear to work
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: cancel_command
|
|
||||||
modifier: control
|
|
||||||
keycode: char_c
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { send: ctrlc }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: quit_shell
|
|
||||||
modifier: control
|
|
||||||
keycode: char_d
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { send: ctrld }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: clear_screen
|
|
||||||
modifier: control
|
|
||||||
keycode: char_l
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { send: clearscreen }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: search_history
|
|
||||||
modifier: control
|
|
||||||
keycode: char_q
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { send: searchhistory }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: open_command_editor
|
|
||||||
modifier: control
|
|
||||||
keycode: char_o
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { send: openeditor }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_up
|
|
||||||
modifier: none
|
|
||||||
keycode: up
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: menuup }
|
|
||||||
{ send: up }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_down
|
|
||||||
modifier: none
|
|
||||||
keycode: down
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: menudown }
|
|
||||||
{ send: down }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_left
|
|
||||||
modifier: none
|
|
||||||
keycode: left
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: menuleft }
|
|
||||||
{ send: left }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_right_or_take_history_hint
|
|
||||||
modifier: none
|
|
||||||
keycode: right
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: historyhintcomplete }
|
|
||||||
{ send: menuright }
|
|
||||||
{ send: right }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_one_word_left
|
|
||||||
modifier: control
|
|
||||||
keycode: left
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { edit: movewordleft }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_one_word_right_or_take_history_hint
|
|
||||||
modifier: control
|
|
||||||
keycode: right
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: historyhintwordcomplete }
|
|
||||||
{ edit: movewordright }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_to_line_start
|
|
||||||
modifier: none
|
|
||||||
keycode: home
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { edit: movetolinestart }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_to_line_start
|
|
||||||
modifier: control
|
|
||||||
keycode: char_a
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { edit: movetolinestart }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_to_line_end_or_take_history_hint
|
|
||||||
modifier: none
|
|
||||||
keycode: end
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: historyhintcomplete }
|
|
||||||
{ edit: movetolineend }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_to_line_end_or_take_history_hint
|
|
||||||
modifier: control
|
|
||||||
keycode: char_e
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: historyhintcomplete }
|
|
||||||
{ edit: movetolineend }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_to_line_start
|
|
||||||
modifier: control
|
|
||||||
keycode: home
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { edit: movetolinestart }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_to_line_end
|
|
||||||
modifier: control
|
|
||||||
keycode: end
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: { edit: movetolineend }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_up
|
|
||||||
modifier: control
|
|
||||||
keycode: char_p
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: menuup }
|
|
||||||
{ send: up }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_down
|
|
||||||
modifier: control
|
|
||||||
keycode: char_t
|
|
||||||
mode: [emacs, vi_normal, vi_insert]
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: menudown }
|
|
||||||
{ send: down }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: delete_one_character_backward
|
|
||||||
modifier: none
|
|
||||||
keycode: backspace
|
|
||||||
mode: [emacs, vi_insert]
|
|
||||||
event: { edit: backspace }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: delete_one_word_backward
|
|
||||||
modifier: control
|
|
||||||
keycode: backspace
|
|
||||||
mode: [emacs, vi_insert]
|
|
||||||
event: { edit: backspaceword }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: delete_one_character_forward
|
|
||||||
modifier: none
|
|
||||||
keycode: delete
|
|
||||||
mode: [emacs, vi_insert]
|
|
||||||
event: { edit: delete }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: delete_one_character_forward
|
|
||||||
modifier: control
|
|
||||||
keycode: delete
|
|
||||||
mode: [emacs, vi_insert]
|
|
||||||
event: { edit: delete }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: delete_one_character_backward
|
|
||||||
modifier: control
|
|
||||||
keycode: char_h
|
|
||||||
mode: [emacs, vi_insert]
|
|
||||||
event: { edit: backspace }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: delete_one_word_backward
|
|
||||||
modifier: control
|
|
||||||
keycode: char_w
|
|
||||||
mode: [emacs, vi_insert]
|
|
||||||
event: { edit: backspaceword }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_left
|
|
||||||
modifier: none
|
|
||||||
keycode: backspace
|
|
||||||
mode: vi_normal
|
|
||||||
event: { edit: moveleft }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: newline_or_run_command
|
|
||||||
modifier: none
|
|
||||||
keycode: enter
|
|
||||||
mode: emacs
|
|
||||||
event: { send: enter }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_left
|
|
||||||
modifier: control
|
|
||||||
keycode: char_b
|
|
||||||
mode: emacs
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: menuleft }
|
|
||||||
{ send: left }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_right_or_take_history_hint
|
|
||||||
modifier: control
|
|
||||||
keycode: char_f
|
|
||||||
mode: emacs
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: historyhintcomplete }
|
|
||||||
{ send: menuright }
|
|
||||||
{ send: right }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: redo_change
|
|
||||||
modifier: control
|
|
||||||
keycode: char_g
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: redo }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: undo_change
|
|
||||||
modifier: control
|
|
||||||
keycode: char_z
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: undo }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: paste_before
|
|
||||||
modifier: control
|
|
||||||
keycode: char_y
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: pastecutbufferbefore }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: cut_word_left
|
|
||||||
modifier: control
|
|
||||||
keycode: char_w
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: cutwordleft }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: cut_line_to_end
|
|
||||||
modifier: control
|
|
||||||
keycode: char_k
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: cuttolineend }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: cut_line_from_start
|
|
||||||
modifier: control
|
|
||||||
keycode: char_u
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: cutfromstart }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: swap_graphemes
|
|
||||||
modifier: control
|
|
||||||
keycode: char_t
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: swapgraphemes }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_one_word_left
|
|
||||||
modifier: alt
|
|
||||||
keycode: left
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: movewordleft }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_one_word_right_or_take_history_hint
|
|
||||||
modifier: alt
|
|
||||||
keycode: right
|
|
||||||
mode: emacs
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: historyhintwordcomplete }
|
|
||||||
{ edit: movewordright }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_one_word_left
|
|
||||||
modifier: alt
|
|
||||||
keycode: char_b
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: movewordleft }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: move_one_word_right_or_take_history_hint
|
|
||||||
modifier: alt
|
|
||||||
keycode: char_f
|
|
||||||
mode: emacs
|
|
||||||
event: {
|
|
||||||
until: [
|
|
||||||
{ send: historyhintwordcomplete }
|
|
||||||
{ edit: movewordright }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: delete_one_word_forward
|
|
||||||
modifier: alt
|
|
||||||
keycode: delete
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: deleteword }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: delete_one_word_backward
|
|
||||||
modifier: alt
|
|
||||||
keycode: backspace
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: backspaceword }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: delete_one_word_backward
|
|
||||||
modifier: alt
|
|
||||||
keycode: char_m
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: backspaceword }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: cut_word_to_right
|
|
||||||
modifier: alt
|
|
||||||
keycode: char_d
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: cutwordright }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: upper_case_word
|
|
||||||
modifier: alt
|
|
||||||
keycode: char_u
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: uppercaseword }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: lower_case_word
|
|
||||||
modifier: alt
|
|
||||||
keycode: char_l
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: lowercaseword }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: capitalize_char
|
|
||||||
modifier: alt
|
|
||||||
keycode: char_c
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: capitalizechar }
|
|
||||||
}
|
|
||||||
# The following bindings with `*system` events require that Nushell has
|
|
||||||
# been compiled with the `system-clipboard` feature.
|
|
||||||
# If you want to use the system clipboard for visual selection or to
|
|
||||||
# paste directly, uncomment the respective lines and replace the version
|
|
||||||
# using the internal clipboard.
|
|
||||||
{
|
|
||||||
name: copy_selection
|
|
||||||
modifier: control_shift
|
|
||||||
keycode: char_c
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: copyselection }
|
|
||||||
# event: { edit: copyselectionsystem }
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name: cut_selection
|
|
||||||
modifier: control_shift
|
|
||||||
keycode: char_x
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: cutselection }
|
|
||||||
# event: { edit: cutselectionsystem }
|
|
||||||
}
|
|
||||||
# {
|
|
||||||
# name: paste_system
|
|
||||||
# modifier: control_shift
|
|
||||||
# keycode: char_v
|
|
||||||
# mode: emacs
|
|
||||||
# event: { edit: pastesystem }
|
|
||||||
# }
|
|
||||||
{
|
|
||||||
name: select_all
|
|
||||||
modifier: control_shift
|
|
||||||
keycode: char_a
|
|
||||||
mode: emacs
|
|
||||||
event: { edit: selectall }
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,101 +0,0 @@
|
|||||||
# Nushell Environment Config File
|
|
||||||
#
|
|
||||||
# version = "0.98.0"
|
|
||||||
|
|
||||||
def create_left_prompt [] {
|
|
||||||
let dir = match (do --ignore-shell-errors { $env.PWD | path relative-to $nu.home-path }) {
|
|
||||||
null => $env.PWD
|
|
||||||
'' => '~'
|
|
||||||
$relative_pwd => ([~ $relative_pwd] | path join)
|
|
||||||
}
|
|
||||||
|
|
||||||
let path_color = (if (is-admin) { ansi red_bold } else { ansi green_bold })
|
|
||||||
let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi light_green_bold })
|
|
||||||
let path_segment = $"($path_color)($dir)(ansi reset)"
|
|
||||||
|
|
||||||
$path_segment | str replace --all (char path_sep) $"($separator_color)(char path_sep)($path_color)"
|
|
||||||
}
|
|
||||||
|
|
||||||
def create_right_prompt [] {
|
|
||||||
# create a right prompt in magenta with green separators and am/pm underlined
|
|
||||||
let time_segment = ([
|
|
||||||
(ansi reset)
|
|
||||||
(ansi magenta)
|
|
||||||
(date now | format date '%x %X') # try to respect user's locale
|
|
||||||
] | str join | str replace --regex --all "([/:])" $"(ansi green)${1}(ansi magenta)" |
|
|
||||||
str replace --regex --all "([AP]M)" $"(ansi magenta_underline)${1}")
|
|
||||||
|
|
||||||
let last_exit_code = if ($env.LAST_EXIT_CODE != 0) {([
|
|
||||||
(ansi rb)
|
|
||||||
($env.LAST_EXIT_CODE)
|
|
||||||
] | str join)
|
|
||||||
} else { "" }
|
|
||||||
|
|
||||||
([$last_exit_code, (char space), $time_segment] | str join)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Use nushell functions to define your right and left prompt
|
|
||||||
$env.PROMPT_COMMAND = {|| create_left_prompt }
|
|
||||||
# FIXME: This default is not implemented in rust code as of 2023-09-08.
|
|
||||||
$env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt }
|
|
||||||
|
|
||||||
# The prompt indicators are environmental variables that represent
|
|
||||||
# the state of the prompt
|
|
||||||
$env.PROMPT_INDICATOR = {|| "> " }
|
|
||||||
$env.PROMPT_INDICATOR_VI_INSERT = {|| ": " }
|
|
||||||
$env.PROMPT_INDICATOR_VI_NORMAL = {|| "> " }
|
|
||||||
$env.PROMPT_MULTILINE_INDICATOR = {|| "::: " }
|
|
||||||
|
|
||||||
# If you want previously entered commands to have a different prompt from the usual one,
|
|
||||||
# you can uncomment one or more of the following lines.
|
|
||||||
# This can be useful if you have a 2-line prompt and it's taking up a lot of space
|
|
||||||
# because every command entered takes up 2 lines instead of 1. You can then uncomment
|
|
||||||
# the line below so that previously entered commands show with a single `🚀`.
|
|
||||||
# $env.TRANSIENT_PROMPT_COMMAND = {|| "🚀 " }
|
|
||||||
# $env.TRANSIENT_PROMPT_INDICATOR = {|| "" }
|
|
||||||
# $env.TRANSIENT_PROMPT_INDICATOR_VI_INSERT = {|| "" }
|
|
||||||
# $env.TRANSIENT_PROMPT_INDICATOR_VI_NORMAL = {|| "" }
|
|
||||||
# $env.TRANSIENT_PROMPT_MULTILINE_INDICATOR = {|| "" }
|
|
||||||
# $env.TRANSIENT_PROMPT_COMMAND_RIGHT = {|| "" }
|
|
||||||
|
|
||||||
# Specifies how environment variables are:
|
|
||||||
# - converted from a string to a value on Nushell startup (from_string)
|
|
||||||
# - converted from a value back to a string when running external commands (to_string)
|
|
||||||
# Note: The conversions happen *after* config.nu is loaded
|
|
||||||
$env.ENV_CONVERSIONS = {
|
|
||||||
"PATH": {
|
|
||||||
from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
|
|
||||||
to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
|
|
||||||
}
|
|
||||||
"Path": {
|
|
||||||
from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
|
|
||||||
to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Directories to search for scripts when calling source or use
|
|
||||||
# The default for this is $nu.default-config-dir/scripts
|
|
||||||
$env.NU_LIB_DIRS = [
|
|
||||||
($nu.default-config-dir | path join 'scripts') # add <nushell-config-dir>/scripts
|
|
||||||
($nu.data-dir | path join 'completions') # default home for nushell completions
|
|
||||||
]
|
|
||||||
|
|
||||||
# Directories to search for plugin binaries when calling register
|
|
||||||
# The default for this is $nu.default-config-dir/plugins
|
|
||||||
$env.NU_PLUGIN_DIRS = [
|
|
||||||
($nu.default-config-dir | path join 'plugins') # add <nushell-config-dir>/plugins
|
|
||||||
]
|
|
||||||
|
|
||||||
# To add entries to PATH (on Windows you might use Path), you can use the following pattern:
|
|
||||||
# $env.PATH = ($env.PATH | split row (char esep) | prepend '/some/path')
|
|
||||||
# An alternate way to add entries to $env.PATH is to use the custom command `path add`
|
|
||||||
# which is built into the nushell stdlib:
|
|
||||||
# use std "path add"
|
|
||||||
# $env.PATH = ($env.PATH | split row (char esep))
|
|
||||||
# path add /some/path
|
|
||||||
# path add ($env.CARGO_HOME | path join "bin")
|
|
||||||
# path add ($env.HOME | path join ".local" "bin")
|
|
||||||
# $env.PATH = ($env.PATH | uniq)
|
|
||||||
|
|
||||||
# To load from a custom file you can use:
|
|
||||||
# source ($nu.default-config-dir | path join 'custom.nu')
|
|
||||||
4
home/dot_config/nushell/env.nu.tmpl
Normal file
4
home/dot_config/nushell/env.nu.tmpl
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{{- /* Linux/macOS path: ~/.config/nushell/env.nu */ -}}
|
||||||
|
{{- if ne .chezmoi.os "windows" -}}
|
||||||
|
{{- template "nushell/env.nu.tmpl" . -}}
|
||||||
|
{{- end -}}
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
[user]
|
|
||||||
name = Xevion
|
|
||||||
email = xevion@xevion.dev
|
|
||||||
# signingkey = C217005CF3C00672
|
|
||||||
# [commit]
|
|
||||||
# gpgsign = true
|
|
||||||
[credential "https://github.com"]
|
|
||||||
helper =
|
|
||||||
helper = !/usr/bin/gh auth git-credential
|
|
||||||
[credential "https://gist.github.com"]
|
|
||||||
helper =
|
|
||||||
helper = !/usr/bin/gh auth git-credential
|
|
||||||
[core]
|
|
||||||
editor = micro
|
|
||||||
[init]
|
|
||||||
defaultBranch = master
|
|
||||||
78
home/dot_gitconfig.tmpl
Normal file
78
home/dot_gitconfig.tmpl
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
# Git Configuration - Platform-aware
|
||||||
|
# Managed by chezmoi
|
||||||
|
|
||||||
|
{{ if or (eq .chezmoi.os "windows") .wsl }}
|
||||||
|
# Windows/WSL Configuration - Ryan Walters (Professional)
|
||||||
|
[user]
|
||||||
|
name = Ryan Walters
|
||||||
|
email = ryan@walters.to
|
||||||
|
signingkey = 301511AAD64FA365
|
||||||
|
|
||||||
|
[commit]
|
||||||
|
gpgsign = true
|
||||||
|
|
||||||
|
{{ if eq .chezmoi.os "windows" }}
|
||||||
|
# Windows-specific: Use GPG4win
|
||||||
|
[gpg]
|
||||||
|
program = C:\\Users\\Xevion\\scoop\\apps\\gpg4win\\current\\GnuPG\\bin\\gpg.exe
|
||||||
|
|
||||||
|
[credential "https://github.com"]
|
||||||
|
helper =
|
||||||
|
helper = !'C:\\Program Files\\GitHub CLI\\gh.exe' auth git-credential
|
||||||
|
|
||||||
|
[credential "https://gist.github.com"]
|
||||||
|
helper =
|
||||||
|
helper = !'C:\\Program Files\\GitHub CLI\\gh.exe' auth git-credential
|
||||||
|
{{ else }}
|
||||||
|
# WSL-specific: Use Windows GPG via symlink
|
||||||
|
[gpg]
|
||||||
|
program = /usr/local/bin/gpg
|
||||||
|
|
||||||
|
[credential "https://github.com"]
|
||||||
|
helper =
|
||||||
|
helper = !/usr/bin/gh auth git-credential
|
||||||
|
|
||||||
|
[credential "https://gist.github.com"]
|
||||||
|
helper =
|
||||||
|
helper = !/usr/bin/gh auth git-credential
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ else }}
|
||||||
|
# Native Linux/macOS Configuration - Xevion (Personal)
|
||||||
|
[user]
|
||||||
|
name = Xevion
|
||||||
|
email = xevion@xevion.dev
|
||||||
|
# No GPG signing - no key available for this identity
|
||||||
|
|
||||||
|
[credential "https://github.com"]
|
||||||
|
helper =
|
||||||
|
helper = !/usr/bin/gh auth git-credential
|
||||||
|
|
||||||
|
[credential "https://gist.github.com"]
|
||||||
|
helper =
|
||||||
|
helper = !/usr/bin/gh auth git-credential
|
||||||
|
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
# Common configuration for all platforms
|
||||||
|
[core]
|
||||||
|
editor = micro
|
||||||
|
pager = delta
|
||||||
|
|
||||||
|
[interactive]
|
||||||
|
diffFilter = delta --color-only
|
||||||
|
|
||||||
|
[delta]
|
||||||
|
navigate = true # use n and N to move between diff sections
|
||||||
|
|
||||||
|
[merge]
|
||||||
|
conflictStyle = zdiff3
|
||||||
|
|
||||||
|
[init]
|
||||||
|
defaultBranch = master
|
||||||
|
|
||||||
|
[filter.lfs]
|
||||||
|
required = true
|
||||||
|
clean = git-lfs clean -- %f
|
||||||
|
smudge = git-lfs smudge -- %f
|
||||||
|
process = git-lfs filter-process
|
||||||
1732
home/dot_p10k.zsh
1732
home/dot_p10k.zsh
File diff suppressed because it is too large
Load Diff
@@ -1,16 +0,0 @@
|
|||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3aVFyd1pUOHpodWRhT1Yv
|
|
||||||
RUlCYTArQmhoeldId0tsM3BVQTNrcGN4d0hjCldySE1zazkyRWp5T1pMcFFmVTRR
|
|
||||||
bVlYbmFXT2xJY3R1VVBubmNaOXF6SEUKLS0tIEtab3M3WDhuWTg0dmdZQzNPUFJy
|
|
||||||
L0VTa1VGYzJLMzAyNUtIWndLb3JaZTAKlgkKjqJKpmQl+HFUvKEt56mUJoUSGRtO
|
|
||||||
ixZwSV+QuQ1bqZQHuWGQg5NcKz011xoemEnWbwc3sK/2xY1+Dp6B54bsbt8yhbr3
|
|
||||||
182DS45TuJrNspSs+65dOvUxGdoJaEIlf5XmyfmyFMu9Lvfcc299HKZrSuDuZRoM
|
|
||||||
xjJGwWnmFDsdniOS7yzC1Y15ptUxGllKSC8E+WWNsAcOmKpodTgruRW9sEn0hSIi
|
|
||||||
Xor9D1W7W8uoHV3V5WEkTPBBtrTjzwxPjm0MSj9igml1BW22vqt4uDqhWqccJ84X
|
|
||||||
FU7KJsmUy6KxKSzeGIesWhlR0tdrMshfZLgXECKTVDr5kMVsyi8PKhlX3XKljna8
|
|
||||||
hiE9G3cm6LNpj9QeDxpNQmrilDk76j9TwK8u1CgGxlInjaRASHFP8d7x7JIxlUi4
|
|
||||||
59g25VbBVBOeDL9nQcmXssin8gdAcK528aZOKdMTER7tgEqDEeEi4Cc+dzFYMI1X
|
|
||||||
s62hLXLCAT7rlJHaaUf6zhoXBdQQka2wFLFKH0j1Y0jGM2pwseGOvHRLVWb8Jzty
|
|
||||||
g0Vd42Tn8JqgkmCZlskB/Q3buScO8SuDKYypvIELtB3Rqw7VQwtcVqX/FjRLUYuE
|
|
||||||
fXk3Vq5sAY5I6hUH
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
# If WSL, add SSH key on startup (once per WSL start)
|
|
||||||
{{- if .wsl }}
|
|
||||||
eval `keychain --quiet --eval --agents ssh ~/.ssh/id_rsa`
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
|
|
||||||
# Initialization code that may require console input (password prompts, [y/n] confirmations, etc.) must go above this block; everything else may go below.
|
|
||||||
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
|
||||||
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
export ZSH_COMPDUMP=$ZSH/cache/.zcompdump-$HOST
|
|
||||||
|
|
||||||
export ZSH="$HOME/.oh-my-zsh"
|
|
||||||
|
|
||||||
# zstyle ':omz:update' mode auto # update automatically without asking
|
|
||||||
# zstyle ':omz:update' frequency 7
|
|
||||||
|
|
||||||
DISABLE_AUTO_UPDATE="true" # required for chezmoi external management
|
|
||||||
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
|
|
||||||
# CASE_SENSITIVE="true"
|
|
||||||
# HYPHEN_INSENSITIVE="true"
|
|
||||||
# DISABLE_MAGIC_FUNCTIONS="true"
|
|
||||||
# DISABLE_LS_COLORS="true"
|
|
||||||
# DISABLE_AUTO_TITLE="true"
|
|
||||||
# ENABLE_CORRECTION="true"
|
|
||||||
# COMPLETION_WAITING_DOTS="true"
|
|
||||||
# DISABLE_UNTRACKED_FILES_DIRTY="true"
|
|
||||||
# HIST_STAMPS="mm/dd/yyyy"
|
|
||||||
|
|
||||||
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
|
|
||||||
ZSH_THEME="powerlevel10k/powerlevel10k"
|
|
||||||
|
|
||||||
# TODO: Switch from 'asdf' to 'mise'
|
|
||||||
plugins=(
|
|
||||||
git gh fzf docker-compose docker deno chezmoi asdf yarn golang sudo zoxide bun npm brew zsh-autosuggestions F-Sy-H thefuck
|
|
||||||
{{- if .wsl -}}
|
|
||||||
{{ " kitty" }}
|
|
||||||
{{- end}}
|
|
||||||
)
|
|
||||||
|
|
||||||
source $ZSH/oh-my-zsh.sh
|
|
||||||
|
|
||||||
[[ -f ~/.p10k.zsh ]] && source ~/.p10k.zsh # configure with `p10k configure`
|
|
||||||
|
|
||||||
# {{ if lookPath "bw" -}} eval "$(bw completion --shell zsh); compdef _bw bw;" {{ end }}
|
|
||||||
|
|
||||||
{{/* Common shared aliases, scripts, & shell setup details. */ -}}
|
|
||||||
{{ template "scripts/commonrc.sh.tmpl" dict "data" . "shell" "zsh" }}
|
|
||||||
|
|
||||||
{{/* Chezmoi's shell completion */ -}}
|
|
||||||
{{ completion "zsh" }}
|
|
||||||
|
|
||||||
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path zsh)"
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQbDd1eVZrc0JTNFhsa0pP
|
|
||||||
L1Z5aHlFMDUvMEFWMHh3aVRaMXFEZkNpTXk0CmRLbkEzTEdwQVhiQ1VjUzdMV1Z0
|
|
||||||
Snp4enIvK1dLT3ZYMGY2MVRRYjcxN1EKLS0tIFl2ZmRRR1BHdlRaNEJJalByZXZW
|
|
||||||
QTdLdVkyZUx5RiszdW0zNUVRTElhbmMKZGlUTMhPLtH6BJjPpcalIXMKJ4k4zBB+
|
|
||||||
nUXRyTIEEYtVx9HUtJ2aQLtRAg52LWIF3/6yMeXc8/O/blm6sFQmaQky6R8/Itpv
|
|
||||||
KBSSqzdecdYnyNE517APOU9xQISXUVE1wFOUK1ijOcBc1vnXNBhhhHtPEBC0nuQj
|
|
||||||
ytwIUYV8dXQSHA==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
@@ -33,7 +33,6 @@ alias suggest='gh copilot suggest -t shell'
|
|||||||
alias spt='spotify_player'
|
alias spt='spotify_player'
|
||||||
alias gitalias='alias | grep "git "'
|
alias gitalias='alias | grep "git "'
|
||||||
alias mousefix='sudo udevadm trigger' # helped with mouse issues on laptop
|
alias mousefix='sudo udevadm trigger' # helped with mouse issues on laptop
|
||||||
alias bw_login='export BW_SESSION=$(bw unlock --raw)'
|
|
||||||
|
|
||||||
# Clipboard aliases
|
# Clipboard aliases
|
||||||
{{ if not .wsl -}}
|
{{ if not .wsl -}}
|
||||||
|
|||||||
@@ -1,28 +1,31 @@
|
|||||||
#!/usr/bin/env -S deno run -A
|
#!/usr/bin/env bun
|
||||||
|
|
||||||
import { resolve } from "https://deno.land/std/path/mod.ts";
|
import { exists } from "node:fs/promises";
|
||||||
import { exists } from "jsr:@std/fs";
|
|
||||||
import { join } from "node:path";
|
import { join } from "node:path";
|
||||||
import { $, os } from "npm:zx@8.3.2";
|
import { homedir } from "node:os";
|
||||||
|
import { $ } from "bun";
|
||||||
|
|
||||||
const { exit } = Deno;
|
// Type-safe wrapper around console.log that prepends [init_pre]
|
||||||
const filePath = join(os.homedir(), "key.txt");
|
const log = (...args: any[]): void => {
|
||||||
|
console.log("[init_pre]", ...args);
|
||||||
|
};
|
||||||
|
|
||||||
|
const filePath = join(homedir(), "key.txt");
|
||||||
|
|
||||||
if (await exists(resolve(filePath))) {
|
if (await exists(filePath)) {
|
||||||
console.log("key.txt already exists");
|
log("key.txt already exists");
|
||||||
Deno.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Acquire the secret from Doppler
|
// Acquire the secret from Doppler
|
||||||
const result = await $`doppler secrets get KEY_TXT --plain`;
|
const result = await $`doppler secrets get KEY_TXT --plain`.quiet();
|
||||||
|
|
||||||
// Check if the command was successful
|
// Check if the command was successful
|
||||||
if (result.exitCode !== 0) {
|
if (result.exitCode !== 0) {
|
||||||
console.error("Failed to get secret KEY_TXT");
|
console.error("Failed to get secret KEY_TXT");
|
||||||
exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write the secret to a file
|
// Write the secret to a file
|
||||||
await Deno.writeTextFile(resolve(filePath), result.stdout);
|
await Bun.write(filePath, result.stdout);
|
||||||
console.log("key.txt bootstrapped");
|
log("key.txt bootstrapped");
|
||||||
|
|||||||
@@ -1,92 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# Flag variables
|
|
||||||
LATE_FAIL_EXIT=false # Set to true if any installation fails, but only raise an exit at the end
|
|
||||||
DOPPLER_UNAVAILABLE=false # Set to true if Doppler is not available
|
|
||||||
|
|
||||||
apt_update() {
|
|
||||||
# Only run apt update once
|
|
||||||
if [ -f /tmp/.apt-updated ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo apt update >/dev/null
|
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "chezmoi: Critical issue - failed to update apt!"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
touch /tmp/.apt-updated
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
install_age() {
|
|
||||||
# Test if age is installed
|
|
||||||
command -v age >/dev/null 2>&1 && return
|
|
||||||
|
|
||||||
# Install age
|
|
||||||
apt_update
|
|
||||||
sudo apt install age
|
|
||||||
}
|
|
||||||
|
|
||||||
# install_cargo_binstall() {
|
|
||||||
# # Test if cargo binstall is installed
|
|
||||||
# cargo binstall --help >/dev/null 2>&1
|
|
||||||
# if [ $? -eq 0 ]; then
|
|
||||||
# return
|
|
||||||
# fi
|
|
||||||
# curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
|
|
||||||
|
|
||||||
# # Test again
|
|
||||||
# cargo binstall --help
|
|
||||||
# if [ $? -ne 0 ]; then
|
|
||||||
# echo "Failed to install cargo binstall"
|
|
||||||
# exit 1
|
|
||||||
# fi
|
|
||||||
# }
|
|
||||||
|
|
||||||
install_inotify() {
|
|
||||||
if ! dpkg -l inotify-tools >/dev/null 2>&1; then
|
|
||||||
echo "Installing inotify-tools"
|
|
||||||
apt_update
|
|
||||||
sudo apt install inotify-tools
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
install_doppler() {
|
|
||||||
if ! command -v doppler >/dev/null 2>&1; then
|
|
||||||
echo "You need to install the Doppler CLI manually (for security purposes)."
|
|
||||||
echo "https://docs.doppler.com/docs/cli#installation"
|
|
||||||
|
|
||||||
DOPPLER_UNAVAILABLE=true
|
|
||||||
LATE_FAIL_EXIT=true
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
require_doppler_login() {
|
|
||||||
doppler me >/dev/null 2>&1
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "You need to login to Doppler."
|
|
||||||
echo "https://docs.doppler.com/docs/cli#logging-in"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
install_deno() {
|
|
||||||
if ! command -v deno >/dev/null 2>&1; then
|
|
||||||
echo "Installing Deno"
|
|
||||||
curl -fsSL https://deno.land/install.sh | sh
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
install_inotify
|
|
||||||
install_age
|
|
||||||
# install_cargo_binstall
|
|
||||||
if [ $DOPPLER_UNAVAILABLE = false ]; then
|
|
||||||
install_doppler
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $LATE_FAIL_EXIT = true ]; then
|
|
||||||
echo "chezmoi: Some installation(s) failed. Please fix the issues detailed before trying again."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# chezmoi update --init does not invoke the 'hooks.init.pre' hook, so we do it ourselves
|
|
||||||
if grep -q 'init' <<<$CHEZMOI_ARGS; then
|
|
||||||
# CHEZMOI_UPDATE is just a hint in case we need to know if we're updating
|
|
||||||
CHEZMOI_UPDATE=1 $(dirname $0)/.init_pre.ts
|
|
||||||
fi
|
|
||||||
19
home/hooks/.update_pre.ts
Executable file
19
home/hooks/.update_pre.ts
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/usr/bin/env bun
|
||||||
|
|
||||||
|
// chezmoi update --init does not invoke the 'hooks.init.pre' hook, so we do it ourselves
|
||||||
|
const chezmoiArgs = process.env.CHEZMOI_ARGS || '';
|
||||||
|
|
||||||
|
if (chezmoiArgs.includes('init')) {
|
||||||
|
// CHEZMOI_UPDATE is just a hint in case we need to know if we're updating
|
||||||
|
const scriptDir = import.meta.dir;
|
||||||
|
const initPreScript = `${scriptDir}/.init_pre.ts`;
|
||||||
|
|
||||||
|
await Bun.spawn(['bun', initPreScript], {
|
||||||
|
env: {
|
||||||
|
...process.env,
|
||||||
|
CHEZMOI_UPDATE: '1'
|
||||||
|
},
|
||||||
|
stdout: 'inherit',
|
||||||
|
stderr: 'inherit'
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -eu
|
|
||||||
{{/* This script pulls down the OpenVPN-Config.ovpn file. It will do so once per week. */ -}}
|
|
||||||
|
|
||||||
FILE=~/.config/ovpn/Local.ovpn
|
|
||||||
ONE_WEEK=604800
|
|
||||||
|
|
||||||
function displaytime {
|
|
||||||
local T=$1
|
|
||||||
local D=$((T / 60 / 60 / 24))
|
|
||||||
local H=$((T / 60 / 60 % 24))
|
|
||||||
local M=$((T / 60 % 60))
|
|
||||||
local S=$((T % 60))
|
|
||||||
(($D > 0)) && printf '%d days ' $D
|
|
||||||
(($H > 0)) && printf '%d hours ' $H
|
|
||||||
(($M > 0)) && printf '%d minutes ' $M
|
|
||||||
(($D > 0 || $H > 0 || $M > 0)) && printf 'and '
|
|
||||||
printf '%d seconds\n' $S
|
|
||||||
}
|
|
||||||
|
|
||||||
download() {
|
|
||||||
echo "Downloading OpenVPN-Config.ovpn"
|
|
||||||
TEMP_FILE=$(mktemp)
|
|
||||||
if doppler secrets get OPENVPN_CONFIG --plain >> "$TEMP_FILE"; then
|
|
||||||
mkdir -p "$(dirname "$FILE")"
|
|
||||||
mv "$TEMP_FILE" "$FILE"
|
|
||||||
else
|
|
||||||
echo "Failed to download OpenVPN-Config.ovpn"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if file exists
|
|
||||||
if [ -f "$FILE" ]; then
|
|
||||||
FILE_ABSOLUTE=$(realpath "$FILE")
|
|
||||||
RELATIVE_SECONDS=$(expr $EPOCHSECONDS - $(stat -c %Y -- "$FILE_ABSOLUTE"))
|
|
||||||
|
|
||||||
if ! test "$RELATIVE_SECONDS" -lt $ONE_WEEK; then
|
|
||||||
echo "File is older than a week, redownloading (last downloaded $(displaytime $RELATIVE_SECONDS) ago)"
|
|
||||||
download
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
download
|
|
||||||
fi
|
|
||||||
38
home/run_onchange_before_setup-wsl-gpg.sh.tmpl
Normal file
38
home/run_onchange_before_setup-wsl-gpg.sh.tmpl
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{{- if .wsl -}}
|
||||||
|
#!/bin/bash
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
# WSL GPG Setup - Link to Windows GPG for native pinentry support
|
||||||
|
# This script creates a system-level symlink from /usr/local/bin/gpg to Windows gpg.exe
|
||||||
|
# This allows WSL to use Windows' native Qt5 pinentry GUI for passphrase prompts
|
||||||
|
|
||||||
|
GPG_WINDOWS="/mnt/c/Users/{{ .chezmoi.username }}/scoop/apps/gpg4win/current/GnuPG/bin/gpg.exe"
|
||||||
|
GPG_LINK="/usr/local/bin/gpg"
|
||||||
|
|
||||||
|
# Check if Windows GPG exists
|
||||||
|
if [ ! -f "$GPG_WINDOWS" ]; then
|
||||||
|
echo "WARNING: Windows GPG not found at $GPG_WINDOWS"
|
||||||
|
echo " Skipping GPG symlink setup"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if symlink already exists and is correct
|
||||||
|
if [ -L "$GPG_LINK" ]; then
|
||||||
|
CURRENT_TARGET=$(readlink "$GPG_LINK")
|
||||||
|
if [ "$CURRENT_TARGET" = "$GPG_WINDOWS" ]; then
|
||||||
|
echo "GPG symlink already configured correctly"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo "Updating GPG symlink (was pointing to: $CURRENT_TARGET)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Creating GPG symlink to Windows GPG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create/update the symlink (requires sudo)
|
||||||
|
echo "Note: This requires sudo to create a symlink in /usr/local/bin"
|
||||||
|
sudo ln -sf "$GPG_WINDOWS" "$GPG_LINK"
|
||||||
|
|
||||||
|
echo "✓ GPG symlink configured: $GPG_LINK -> $GPG_WINDOWS"
|
||||||
|
echo " WSL will now use Windows GPG with native GUI pinentry"
|
||||||
|
{{- end -}}
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# We just need to have access to the Git repository
|
|
||||||
cd {{ .chezmoi.sourceDir }}
|
|
||||||
# The path is relative to the .git/config file
|
|
||||||
git config --local include.path ../.gitconfig
|
|
||||||
@@ -14,9 +14,18 @@ sudo apt install -y xclip xsel
|
|||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{/* TODO: Add basic yes/no prompts before installing packages */ -}}
|
{{/* TODO: Add basic yes/no prompts before installing packages */ -}}
|
||||||
if ! type -P zsh; then
|
# Install Fisher (Fish plugin manager) and plugins from fish_plugins file
|
||||||
echo "chezmoi: Installing zsh"
|
if type -P fish; then
|
||||||
sudo apt install zsh
|
if [ ! -f ~/.config/fish/functions/fisher.fish ]; then
|
||||||
|
echo "chezmoi: Installing Fisher (Fish plugin manager)"
|
||||||
|
fish -c "curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update plugins from fish_plugins file
|
||||||
|
if [ -f ~/.config/fish/fish_plugins ]; then
|
||||||
|
echo "chezmoi: Updating Fish plugins from fish_plugins file"
|
||||||
|
fish -c "fisher update"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Install micro (+ register as text editor)
|
# Install micro (+ register as text editor)
|
||||||
@@ -27,9 +36,8 @@ if ! type -P micro; then
|
|||||||
sudo mv ./micro /usr/bin/micro
|
sudo mv ./micro /usr/bin/micro
|
||||||
fi
|
fi
|
||||||
|
|
||||||
{{/* libpq-dev libssh-dev libsqlite3-dev */ -}}
|
|
||||||
echo "chezmoi: Installing apt packages"
|
echo "chezmoi: Installing apt packages"
|
||||||
PACKAGES='git fzf zsh fish sqlite curl ripgrep jq' # Install and/or update
|
PACKAGES='git fzf fish sqlite curl ripgrep jq' # Install and/or update
|
||||||
sudo apt install -y $PACKAGES
|
sudo apt install -y $PACKAGES
|
||||||
|
|
||||||
INSTALL_ONLY_PACKAGES='iperf3 unzip p7zip-full nmap reptyr btop' # Install only if missing
|
INSTALL_ONLY_PACKAGES='iperf3 unzip p7zip-full nmap reptyr btop' # Install only if missing
|
||||||
@@ -48,7 +56,7 @@ fi
|
|||||||
# Install hishtory
|
# Install hishtory
|
||||||
if ! type -P hishtory; then
|
if ! type -P hishtory; then
|
||||||
echo "chezmoi: Installing hishtory"
|
echo "chezmoi: Installing hishtory"
|
||||||
export HISHTORY_SERVER="https://hsh.{{ .privateDomain }}"
|
export HISHTORY_SERVER="https://hsh.{{ dopplerProjectJson.PRIVATE_DOMAIN }}"
|
||||||
export HISHTORY_SKIP_INIT_IMPORT='true'
|
export HISHTORY_SKIP_INIT_IMPORT='true'
|
||||||
curl https://hishtory.dev/install.py | python3 - --offline --skip-config-modification
|
curl https://hishtory.dev/install.py | python3 - --offline --skip-config-modification
|
||||||
fi
|
fi
|
||||||
@@ -75,6 +83,27 @@ if ! type -P chatgpt; then
|
|||||||
sudo mv chatgpt /usr/local/bin/
|
sudo mv chatgpt /usr/local/bin/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Set Fish as default shell
|
||||||
|
if type -P fish; then
|
||||||
|
FISH_PATH=$(which fish)
|
||||||
|
CURRENT_SHELL=$(getent passwd "$USER" | cut -d: -f7)
|
||||||
|
|
||||||
|
if [ "$CURRENT_SHELL" != "$FISH_PATH" ]; then
|
||||||
|
echo "chezmoi: Setting Fish as default shell"
|
||||||
|
|
||||||
|
# Add fish to /etc/shells if not already present
|
||||||
|
if ! grep -q "^$FISH_PATH$" /etc/shells; then
|
||||||
|
echo "$FISH_PATH" | sudo tee -a /etc/shells
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Change default shell
|
||||||
|
sudo chsh -s "$FISH_PATH" "$USER"
|
||||||
|
echo "chezmoi: Default shell changed to Fish. Please log out and back in for changes to take effect."
|
||||||
|
else
|
||||||
|
echo "chezmoi: Fish is already the default shell"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
{{- else if eq .chezmoi.os "darwin" -}}
|
{{- else if eq .chezmoi.os "darwin" -}}
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
brew install ripgrep
|
brew install ripgrep
|
||||||
|
|||||||
3
home/symlink_dot_gnupg.tmpl
Normal file
3
home/symlink_dot_gnupg.tmpl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{{- if .wsl -}}
|
||||||
|
/mnt/c/Users/Xevion/AppData/Roaming/gnupg
|
||||||
|
{{- end -}}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
nodejs 22.11.0
|
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