mirror of
https://github.com/Xevion/dotfiles.git
synced 2025-12-06 01:14:48 -06:00
Compare commits
6 Commits
4095b2d242
...
625cf3c3ae
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
625cf3c3ae | ||
|
|
751efbc719 | ||
|
|
f8f0e0e615 | ||
| d031952070 | |||
| b71c320ea5 | |||
| 4d914f1e2f |
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
@@ -10,6 +10,7 @@
|
||||
"*.toml.tmpl": "toml",
|
||||
"*.yaml.tmpl": "yaml",
|
||||
"*.cfg.tmpl": "ini",
|
||||
"*.fish.tmpl": "fish",
|
||||
"*bash_aliases*": "shellscript",
|
||||
"*dot_profile*": "shellscript",
|
||||
"*dot_gitconfig*": "ini"
|
||||
|
||||
19
CLAUDE.md
19
CLAUDE.md
@@ -33,6 +33,12 @@ This is a **chezmoi source directory** for managing dotfiles across multiple mac
|
||||
- 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
|
||||
@@ -80,6 +86,17 @@ This is a **chezmoi source directory** for managing dotfiles across multiple mac
|
||||
- Doppler secrets: `{{ dopplerProjectJson.SECRET_NAME }}`
|
||||
- Conditional logic: `{{ if }}...{{ else }}...{{ end }}`
|
||||
|
||||
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:**
|
||||
@@ -104,7 +121,7 @@ chezmoi add --encrypt ~/.ssh/config
|
||||
## Platform Coverage
|
||||
|
||||
- **OS**: Windows, Linux (WSL/native), macOS
|
||||
- **Shells**: bash, zsh, nushell, PowerShell
|
||||
- **Shells**: bash, fish, nushell, PowerShell
|
||||
- **Tools**: 30+ development tools configured (pyenv, bun, cargo, etc.)
|
||||
- **Secrets**: Doppler + age encryption
|
||||
|
||||
|
||||
@@ -10,8 +10,10 @@ When **bolded**, this application won't be installed automatically. It implies t
|
||||
- [ ] bw
|
||||
- Semi-required applications
|
||||
- [ ] **hishtory**
|
||||
- [ ] **zsh**
|
||||
- [ ] **oh-my-zsh**
|
||||
- Preferred applications
|
||||
- [ ] kitty
|
||||
- [ ] 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
|
||||
|
||||
34
TODO.md
34
TODO.md
@@ -12,7 +12,7 @@
|
||||
- [ ] 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.)
|
||||
- [ ] Document hook system (`.init_pre.ts`, `.update_pre.ts`) and when they execute
|
||||
- [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
|
||||
@@ -25,7 +25,7 @@
|
||||
- [ ] Create guide for Doppler integration (project setup, config selection)
|
||||
- [ ] Document secret rotation process and schedule
|
||||
- [ ] Create checklist for adding new encrypted values
|
||||
- [ ] Consolidate all authentication tokens/keys into Doppler or age-encrypted files
|
||||
- [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
|
||||
@@ -41,7 +41,7 @@
|
||||
- [ ] 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
|
||||
- [ ] Document Windows-specific quirks and workarounds
|
||||
- [x] Document Windows-specific quirks and workarounds (WSL GPG integration documented)
|
||||
|
||||
---
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
- [ ] 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` → `.zshrc` → `commonrc.sh` → `.bash_aliases`)
|
||||
- [ ] 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
|
||||
@@ -69,7 +69,7 @@
|
||||
- [ ] 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 and zsh
|
||||
- [ ] Test completions on bash
|
||||
- [ ] Add completion loading performance optimization
|
||||
- [ ] Document how to add new tool completions
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
**mise (development environment manager):**
|
||||
- [ ] Add mise configuration file (`.mise.toml` or per-project configs)
|
||||
- [ ] Document mise setup and installation
|
||||
- [ ] Integrate mise activation with shell configs
|
||||
- [x] Integrate mise activation with shell configs
|
||||
- [ ] Document tool version management strategy
|
||||
- [ ] Add mise to installation checklist
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
- [ ] Test bun hooks (`.init_pre.ts`, `.update_pre.ts`) on all platforms
|
||||
|
||||
**Windows Terminal:**
|
||||
- [ ] Add `settings.json` template to dotfiles
|
||||
- [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
|
||||
@@ -110,7 +110,7 @@
|
||||
**Claude (AI assistant):**
|
||||
- [ ] Document Claude configuration location
|
||||
- [ ] Add API key management strategy (Doppler?)
|
||||
- [ ] Add global CLAUDE.md to dotfiles
|
||||
- [x] Add global CLAUDE.md to dotfiles
|
||||
- [ ] Create project-specific CLAUDE.md templates
|
||||
- [ ] Document sync strategy across machines
|
||||
|
||||
@@ -165,10 +165,10 @@
|
||||
### 10. Development Tool Configurations
|
||||
|
||||
**Git:**
|
||||
- [ ] Expand `.gitconfig.tmpl` (currently at `home/dot_config/git/config-ryan.tmpl`)
|
||||
- [ ] Add git aliases and shortcuts
|
||||
- [ ] Configure diff and merge tools
|
||||
- [ ] Add commit signing configuration
|
||||
- [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
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
- [ ] Add tmux configuration
|
||||
- [ ] Add vim/neovim basic config
|
||||
- [ ] Add SSH config template
|
||||
- [ ] Add GPG configuration
|
||||
- [x] Add GPG configuration
|
||||
|
||||
### 11. Package Management Strategy
|
||||
|
||||
@@ -213,7 +213,7 @@
|
||||
|
||||
### 12. Enhanced Documentation
|
||||
|
||||
- [ ] Expand README.md with comprehensive sections
|
||||
- [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
|
||||
@@ -263,12 +263,12 @@
|
||||
|
||||
### 16. Cleanup & Maintenance
|
||||
|
||||
- [ ] Commit deletion of removed files (nushell/env.nu, dot_gitconfig, etc.)
|
||||
- [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
|
||||
- [ ] Remove deprecated hooks (old shell-based hooks if fully migrated to TS)
|
||||
- [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
|
||||
@@ -284,7 +284,7 @@ These items were in the original TODO.md and need to be categorized/completed:
|
||||
- [ ] **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
|
||||
- [ ] **add GPG key to bw** - Add to Priority 1, Item 2 (authentication workflow)
|
||||
- [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)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
{{- end -}}
|
||||
|
||||
{{- /* Detect if running in WSL */ -}}
|
||||
{{- $wsl := true -}}
|
||||
{{- $wsl := false -}}
|
||||
{{- if eq .chezmoi.os "linux" -}}
|
||||
{{- $wsl = (.chezmoi.kernel.osrelease | lower | contains "microsoft") -}}
|
||||
{{- end -}}
|
||||
@@ -47,6 +47,7 @@ args = [
|
||||
wsl = {{ $wsl }}
|
||||
|
||||
[diff]
|
||||
pager = "delta"
|
||||
scriptContents = false
|
||||
|
||||
[data.cpu]
|
||||
@@ -70,8 +71,9 @@ args = [
|
||||
|
||||
{{ if eq .chezmoi.os "windows" }}
|
||||
[cd]
|
||||
command = "nu"
|
||||
command = "powershell.exe"
|
||||
args = ["-NoLogo"]
|
||||
{{ else }}
|
||||
[cd]
|
||||
command = "bash"
|
||||
command = "fish"
|
||||
{{ end }}
|
||||
@@ -1,46 +1,2 @@
|
||||
[".asdf"]
|
||||
type = "archive"
|
||||
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"
|
||||
# External repositories managed by chezmoi
|
||||
# https://www.chezmoi.io/reference/special-files-and-directories/chezmoiexternal-format/
|
||||
@@ -1,26 +1,19 @@
|
||||
hooks
|
||||
tool-versions
|
||||
|
||||
{{/* generated files, cached files, anything that might change unnecessarily */}}
|
||||
.oh-my-zsh/cache/**
|
||||
.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/**
|
||||
{{/* WSL Only Files */}}
|
||||
{{ if (not .wsl) }}
|
||||
|
||||
{{ if eq .chezmoi.os "windows" }}
|
||||
{{/* Ignore Linux/Unix-only files on Windows */}}
|
||||
setup-wsl-gpg.sh
|
||||
.gnupg/**
|
||||
|
||||
{{ end }}
|
||||
|
||||
{{/* Linux/Unix Only Files */}}
|
||||
{{ if (not (eq .chezmoi.os "linux")) }}
|
||||
|
||||
# Shell configs (Linux-only)
|
||||
.oh-my-zsh
|
||||
.scripts
|
||||
*.zsh
|
||||
.zshrc
|
||||
.bashrc
|
||||
.profile
|
||||
.bash_aliases
|
||||
@@ -29,11 +22,17 @@ key.txt
|
||||
|
||||
# Linux-only config directories
|
||||
.config/kitty
|
||||
|
||||
{{ else }}
|
||||
{{/* Ignore Windows-only files on Linux/macOS */}}
|
||||
|
||||
# Windows-only
|
||||
Documents/PowerShell
|
||||
.config/fish
|
||||
.config/Code
|
||||
.config/Cursor
|
||||
.config/lazygit
|
||||
|
||||
{{ end }}
|
||||
|
||||
{{/* Windows Only Files */}}
|
||||
{{ if (not (eq .chezmoi.os "windows")) }}
|
||||
|
||||
Documents/
|
||||
AppData/
|
||||
|
||||
{{ end }}
|
||||
101
home/.chezmoitemplates/scripts/commonrc.fish.tmpl
Normal file
101
home/.chezmoitemplates/scripts/commonrc.fish.tmpl
Normal file
@@ -0,0 +1,101 @@
|
||||
# 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 "$brew_bin" -nt "$brew_cache"
|
||||
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'
|
||||
{{- 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
|
||||
export EDITOR="micro"
|
||||
@@ -13,9 +13,7 @@ export OPENAI_API_KEY="{{ dopplerProjectJson.OPENAI_CHATGPT_CLI }}"
|
||||
# hishtory
|
||||
export HISHTORY_SERVER="https://hsh.{{ dopplerProjectJson.PRIVATE_DOMAIN }}"
|
||||
export PATH="$PATH:$HOME/.hishtory"
|
||||
{{ if eq .shell "zsh" -}}
|
||||
source $HOME/.hishtory/config.zsh
|
||||
{{ else if eq .shell "bash" -}}
|
||||
{{ if eq .shell "bash" -}}
|
||||
source $HOME/.hishtory/config.sh
|
||||
{{- else -}}
|
||||
{{ fail "Unexpected shell." }}
|
||||
@@ -30,7 +28,23 @@ if [ -d "$HOME/.deno" ]; then
|
||||
. "$HOME/.deno/env" # Deno
|
||||
fi
|
||||
. "$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 chatgpt &> /dev/null && . <(chatgpt --set-completions {{ .shell -}}) # chatgpt completions
|
||||
{{ if eq .shell "bash" -}}
|
||||
@@ -52,7 +66,6 @@ fi
|
||||
# bun
|
||||
export BUN_INSTALL="$HOME/.bun"
|
||||
export PATH="$BUN_INSTALL/bin:$PATH"
|
||||
[ -s "$HOME/.bun/_bun" ] && source "$HOME/.bun/_bun"
|
||||
|
||||
# java version manager
|
||||
if [ -d $HOME/.jenv/bin ]; then
|
||||
@@ -63,19 +76,6 @@ if [ -d $HOME/.jenv/bin ]; then
|
||||
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
|
||||
export PNPM_HOME="$HOME/.local/share/pnpm"
|
||||
case ":$PATH:" in
|
||||
@@ -93,7 +93,6 @@ if [ -d "$HOME/.pulumi/bin" ]; then
|
||||
export PATH=$PATH:$HOME/.pulumi/bin
|
||||
fi
|
||||
|
||||
# load aliases (note: omz aliases are supposed to be placed in ZSH_CUSTOM?)
|
||||
. $HOME/.bash_aliases
|
||||
|
||||
|
||||
@@ -108,14 +107,4 @@ export BROWSER='powershell.exe /c start'
|
||||
if [ -d "$HOME/.dotnet" ]; then
|
||||
export DOTNET_ROOT="$HOME/.dotnet"
|
||||
export PATH="$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools"
|
||||
fi
|
||||
|
||||
# disable screen blanking
|
||||
# source $(brew --prefix)/share/zsh/site-functions/_todoist_peco
|
||||
# xset s off && xset -dpms
|
||||
# Preferred editor for local and remote sessions
|
||||
# if [[ -n $SSH_CONNECTION ]]; then
|
||||
# export EDITOR='micro'
|
||||
# else
|
||||
# export EDITOR='nvim'
|
||||
# fi
|
||||
fi
|
||||
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": "\\\r\n"
|
||||
},
|
||||
"when": "terminalFocus"
|
||||
}
|
||||
]
|
||||
333
home/.config-source/cursor/settings.windows.json
Executable file
333
home/.config-source/cursor/settings.windows.json
Executable file
@@ -0,0 +1,333 @@
|
||||
{
|
||||
// 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.preferredDarkColorTheme": "Default Light Modern",
|
||||
"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
|
||||
}
|
||||
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 }}
|
||||
@@ -21,10 +21,13 @@ Set-Alias -Name nano -Value micro
|
||||
Set-Alias -Name vim -Value nvim
|
||||
Set-Alias -Name lg -Value lazygit
|
||||
|
||||
# Directory listing
|
||||
function ll { Get-ChildItem -Force | Format-Table -AutoSize }
|
||||
function la { Get-ChildItem -Force }
|
||||
function l { Get-ChildItem }
|
||||
# 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 }
|
||||
|
||||
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 }}
|
||||
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
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
|
||||
10
home/dot_config/fish/fish_plugins
Normal file
10
home/dot_config/fish/fish_plugins
Normal file
@@ -0,0 +1,10 @@
|
||||
# Fish shell plugins managed by Fisher
|
||||
# https://github.com/jorgebucaran/fisher
|
||||
#
|
||||
# To install all plugins: fisher update
|
||||
# To add a plugin: fisher install <plugin>
|
||||
# To remove a plugin: fisher remove <plugin>
|
||||
|
||||
jorgebucaran/fisher
|
||||
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
|
||||
11
home/dot_config/fish/functions/mise.fish
Normal file
11
home/dot_config/fish/functions/mise.fish
Normal file
@@ -0,0 +1,11 @@
|
||||
# Lazy-load mise on first use
|
||||
function mise --wraps mise
|
||||
# Initialize mise only once
|
||||
if not set -q __mise_initialized
|
||||
set -g __mise_initialized 1
|
||||
command mise activate fish | source
|
||||
end
|
||||
|
||||
# Execute the actual mise command
|
||||
command mise $argv
|
||||
end
|
||||
4
home/dot_config/fish/functions/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
|
||||
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
|
||||
@@ -7,7 +7,7 @@
|
||||
[user]
|
||||
name = Ryan Walters
|
||||
email = ryan@walters.to
|
||||
signingkey = 39538EC79ACF2597
|
||||
signingkey = 301511AAD64FA365
|
||||
{{ if eq .chezmoi.os "windows" }}
|
||||
{{ else }}
|
||||
{{ end }}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
[user]
|
||||
name = Xevion
|
||||
email = xevion@xevion.dev
|
||||
signingkey = C217005CF3C00672
|
||||
# No GPG key available for this email - signing disabled
|
||||
{{ if eq .chezmoi.os "windows" }}
|
||||
{{ else }}
|
||||
{{ end }}
|
||||
|
||||
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,16 +1,18 @@
|
||||
# Git Configuration - Platform-aware
|
||||
# Managed by chezmoi
|
||||
|
||||
{{ if eq .chezmoi.os "windows" }}
|
||||
# Windows Configuration
|
||||
{{ if or (eq .chezmoi.os "windows") .wsl }}
|
||||
# Windows/WSL Configuration - Ryan Walters (Professional)
|
||||
[user]
|
||||
name = Ryan Walters
|
||||
email = ryan@walters.to
|
||||
signingkey = 39538EC79ACF2597
|
||||
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
|
||||
|
||||
@@ -21,16 +23,26 @@
|
||||
[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 }}
|
||||
# Linux/macOS Configuration
|
||||
# Native Linux/macOS Configuration - Xevion (Personal)
|
||||
[user]
|
||||
name = Xevion
|
||||
email = xevion@xevion.dev
|
||||
signingkey = C217005CF3C00672
|
||||
|
||||
[commit]
|
||||
gpgsign = true
|
||||
# No GPG signing - no key available for this identity
|
||||
|
||||
[credential "https://github.com"]
|
||||
helper =
|
||||
@@ -45,6 +57,16 @@
|
||||
# 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
|
||||
|
||||
1705
home/dot_p10k.zsh
1705
home/dot_p10k.zsh
File diff suppressed because it is too large
Load Diff
@@ -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)"
|
||||
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 -}}
|
||||
@@ -14,9 +14,18 @@ sudo apt install -y xclip xsel
|
||||
{{ end }}
|
||||
|
||||
{{/* TODO: Add basic yes/no prompts before installing packages */ -}}
|
||||
if ! type -P zsh; then
|
||||
echo "chezmoi: Installing zsh"
|
||||
sudo apt install zsh
|
||||
# Install Fisher (Fish plugin manager) and plugins from fish_plugins file
|
||||
if type -P fish; then
|
||||
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
|
||||
|
||||
# Install micro (+ register as text editor)
|
||||
@@ -27,9 +36,8 @@ if ! type -P micro; then
|
||||
sudo mv ./micro /usr/bin/micro
|
||||
fi
|
||||
|
||||
{{/* libpq-dev libssh-dev libsqlite3-dev */ -}}
|
||||
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
|
||||
|
||||
INSTALL_ONLY_PACKAGES='iperf3 unzip p7zip-full nmap reptyr btop' # Install only if missing
|
||||
@@ -75,6 +83,27 @@ if ! type -P chatgpt; then
|
||||
sudo mv chatgpt /usr/local/bin/
|
||||
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" -}}
|
||||
#!/bin/sh
|
||||
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,3 @@
|
||||
nodejs 22.11.0
|
||||
nodejs latest
|
||||
zoxide 0.9.6
|
||||
deno 2.2.2
|
||||
deno 2.2.2
|
||||
|
||||
Reference in New Issue
Block a user