From 4b8ee6ffc1ce33b87fa1cd00c5af77435f5738a3 Mon Sep 17 00:00:00 2001 From: Ismo Vuorinen Date: Wed, 18 Mar 2026 20:59:49 +0200 Subject: [PATCH] feat: migrate to mise for unified tool management (#309) --- .editorconfig-checker.json | 1 + .gitignore | 2 + .go-version | 1 - .mise.toml | 4 + .nvmrc | 1 - .pre-commit-config.yaml | 2 +- .python-version | 1 - .serena/memories/project_overview.md | 7 +- .serena/memories/project_structure.md | 4 +- .serena/memories/suggested_commands.md | 9 +- CLAUDE.md | 84 +++ biome.json | 3 +- config/alias | 2 + config/exports | 5 +- config/fish/alias.fish | 39 +- config/fish/conf.d/rustup.fish | 1 - config/fish/config.fish | 13 +- config/fish/exports.fish | 36 +- config/fish/functions/load_nvm.fish | 16 - config/fish/functions/nvm.fish | 3 - config/fish/functions/nvm_find_nvmrc.fish | 3 - config/fish/themes/Catppuccin Frappe.theme | 29 + config/fish/themes/Catppuccin Macchiato.theme | 29 + config/fish/themes/Catppuccin Mocha.theme | 29 + config/git/overrides/.gitignore | 1 + config/homebrew/Brewfile | 75 --- config/husky/init.sh | 4 +- config/karabiner/karabiner.json | 128 ++-- config/mise/config.toml | 105 ++++ config/nvim/init.lua | 8 +- config/nvim/lua/utils.lua | 2 +- config/nvm/default-packages | 5 - config/shared.sh | 1 - config/tmux/tmux.conf | 1 + config/vim/vimrc | 3 + config/zsh/antidote.zsh | 1 - config/zsh/antidote_plugins.txt | 4 - config/zsh/p10k.zsh | 6 +- .../nvm-auto-use/nvm-auto-use.plugin.zsh | 26 - hosts/s/config/git/overrides/config | 3 + hosts/s/config/git/overrides/ignore | 31 + install.conf.yaml | 7 +- local/bin/dfm | 22 +- scripts/cleanup-old-version-managers.md | 20 + scripts/cleanup-old-version-managers.sh | 4 +- scripts/install-cargo-packages.md | 21 - scripts/install-cargo-packages.sh | 88 --- scripts/install-fonts.sh | 4 +- scripts/install-gh-extensions.sh | 4 +- scripts/install-go-packages.md | 18 - scripts/install-go-packages.sh | 69 --- scripts/install-npm-packages.md | 18 - scripts/install-npm-packages.sh | 71 --- scripts/install-python-packages.md | 10 +- scripts/install-python-packages.sh | 55 +- scripts/install-shellspec.sh | 4 +- scripts/install-z.sh | 4 +- yarn.lock | 561 +++++++++++------- 58 files changed, 888 insertions(+), 820 deletions(-) delete mode 100644 .go-version create mode 100644 .mise.toml delete mode 100644 .nvmrc delete mode 100644 .python-version mode change 100644 => 100755 config/exports delete mode 100644 config/fish/conf.d/rustup.fish delete mode 100644 config/fish/functions/load_nvm.fish delete mode 100644 config/fish/functions/nvm.fish delete mode 100644 config/fish/functions/nvm_find_nvmrc.fish create mode 100644 config/mise/config.toml delete mode 100644 config/nvm/default-packages delete mode 100644 config/zsh/plugins/nvm-auto-use/nvm-auto-use.plugin.zsh create mode 100644 hosts/s/config/git/overrides/ignore mode change 100644 => 100755 local/bin/dfm create mode 100644 scripts/cleanup-old-version-managers.md mode change 100644 => 100755 scripts/cleanup-old-version-managers.sh delete mode 100644 scripts/install-cargo-packages.md delete mode 100755 scripts/install-cargo-packages.sh delete mode 100644 scripts/install-go-packages.md delete mode 100755 scripts/install-go-packages.sh delete mode 100644 scripts/install-npm-packages.md delete mode 100755 scripts/install-npm-packages.sh diff --git a/.editorconfig-checker.json b/.editorconfig-checker.json index 4951dce..2e929c9 100644 --- a/.editorconfig-checker.json +++ b/.editorconfig-checker.json @@ -7,6 +7,7 @@ "Exclude": [ "base/plan", "config/fish/completions/.*", + "config/karabiner/.*", "config/fish/conf.d/.*", "config/fish/functions/.*", "config/fzf/key-bindings.fish", diff --git a/.gitignore b/.gitignore index 49c8e93..0363fce 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,8 @@ config/alacritty/theme-active.toml config/cheat/cheatsheets/pure-bash-bible/* config/cheat/cheatsheets/tldr/* config/fish/completions/asdf.fish +config/fish/completions/kubectl.fish +config/fish/completions/orbctl.fish config/fish/fish_variables config/fish/fish_variables.* config/gh/hosts.yml diff --git a/.go-version b/.go-version deleted file mode 100644 index b45fe31..0000000 --- a/.go-version +++ /dev/null @@ -1 +0,0 @@ -1.25.5 diff --git a/.mise.toml b/.mise.toml new file mode 100644 index 0000000..0a18625 --- /dev/null +++ b/.mise.toml @@ -0,0 +1,4 @@ +[tools] +node = "24.14.0" +python = "3.14.3" +go = "1.25.5" diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index d845d9d..0000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -24.14.0 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ae20969..84d13c4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -27,7 +27,7 @@ repos: name: Biome Check entry: yarn biome check --write --files-ignore-unknown=true --no-errors-on-unmatched language: system - files: \.(js|ts|jsx|tsx|json|md)$ + files: \.(js|ts|jsx|tsx|json)$ - id: markdown-table-formatter name: Markdown Table Formatter entry: yarn markdown-table-formatter diff --git a/.python-version b/.python-version deleted file mode 100644 index da71773..0000000 --- a/.python-version +++ /dev/null @@ -1 +0,0 @@ -3.14.3 diff --git a/.serena/memories/project_overview.md b/.serena/memories/project_overview.md index caf343d..2b1c395 100644 --- a/.serena/memories/project_overview.md +++ b/.serena/memories/project_overview.md @@ -50,12 +50,11 @@ the primary installation framework to manage symlinks and setup configurations. - **Platform**: Darwin (macOS) - Version 24.6.0 - **Architecture**: Universal (Intel/Apple Silicon via Homebrew) -- **Dependencies**: Git, Homebrew, Yarn, various CLI tools managed via asdf/aqua +- **Dependencies**: Git, Homebrew, Yarn, various CLI tools managed via mise ## Development Environment -- Node.js managed via nvm/asdf -- Go version specified (.go-version) -- Python version specified (.python-version) +- Node.js, Go, Python, Ruby, Rust managed via mise +- Version files (.nvmrc, .go-version, .python-version) consumed by mise via idiomatic_version_file - Package management via Yarn with lockfile - TypeScript support for configuration files diff --git a/.serena/memories/project_structure.md b/.serena/memories/project_structure.md index 494e09f..e54f08e 100644 --- a/.serena/memories/project_structure.md +++ b/.serena/memories/project_structure.md @@ -30,7 +30,7 @@ Configuration files for development tools and applications: - `starship.toml` - Starship prompt configuration - `shared.sh` - Cross-shell compatibility functions - `aerospace/`, `amethyst/`, `yabai/`, `skhd/` - Window managers -- `direnv/`, `asdf/`, `aqua/` - Development environment tools +- `direnv/`, `mise/`, `aqua/` - Development environment tools - `gpg-tui/`, `op/`, `gh/` - Security and CLI tools - Theme configurations: everforest color schemes across multiple tools @@ -97,7 +97,7 @@ Installation and setup automation scripts - `.shellcheckrc` - ShellCheck configuration - `.mega-linter.yml` - MegaLinter configuration - `.luarc.json` - Lua language server configuration -- `.nvmrc`, `.go-version`, `.python-version` - Version management +- `.nvmrc`, `.go-version`, `.python-version` - Version files (consumed by mise) - Various ignore files (.gitignore, .prettierignore, .yamlignore, etc.) ## Testing Infrastructure diff --git a/.serena/memories/suggested_commands.md b/.serena/memories/suggested_commands.md index 2d0b3d1..d0f41f7 100644 --- a/.serena/memories/suggested_commands.md +++ b/.serena/memories/suggested_commands.md @@ -59,10 +59,11 @@ pre-commit run --all-files ## Version Management ```bash -# Check current versions -node --version # Managed by nvm (.nvmrc: v20.18.1) -go version # Managed by asdf (.go-version) -python --version # Managed by asdf (.python-version) +# Check current versions (all managed by mise) +node --version # mise (.nvmrc via idiomatic_version_file) +go version # mise (.go-version) +python --version # mise (.python-version) +mise ls # List all installed tool versions ``` ## System Utilities (Darwin-specific) diff --git a/CLAUDE.md b/CLAUDE.md index da4906c..32b87bf 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -169,3 +169,87 @@ SC2174 (mkdir -p -m), SC2016 (single-quote expressions). ## Package Manager Yarn (v4.12.0) is the package manager. Do not use npm. + +# context-mode — MANDATORY routing rules + +You have context-mode MCP tools available. These rules are NOT optional — +they protect your context window from flooding. +A single unrouted command can dump 56 KB into context and waste the entire session. + +## BLOCKED commands — do NOT attempt these + +### curl / wget — BLOCKED +Any Bash command containing `curl` or `wget` is intercepted and replaced with an error message. Do NOT retry. +Instead use: +- `ctx_fetch_and_index(url, source)` to fetch and index web pages +- `ctx_execute(language: "javascript", code: "const r = await fetch(...)")` to run HTTP calls in sandbox + +### Inline HTTP — BLOCKED +Any Bash command containing `fetch('http`, `requests.get(`, `requests.post(`, +`http.get(`, or `http.request(` is intercepted and replaced with an error message. +Do NOT retry with Bash. +Instead use: +- `ctx_execute(language, code)` to run HTTP calls in sandbox — only stdout enters context + +### WebFetch — BLOCKED +WebFetch calls are denied entirely. The URL is extracted and you are told to use `ctx_fetch_and_index` instead. +Instead use: +- `ctx_fetch_and_index(url, source)` then `ctx_search(queries)` to query the indexed content + +## REDIRECTED tools — use sandbox equivalents + +### Bash (>20 lines output) +Bash is ONLY for: `git`, `mkdir`, `rm`, `mv`, `cd`, `ls`, `yarn install`, `pip install`, +and other short-output commands. +For everything else, use: +- `ctx_batch_execute(commands, queries)` — run multiple commands + search in ONE call +- `ctx_execute(language: "shell", code: "...")` — run in sandbox, only stdout enters context + +### Read (for analysis) +If you are reading a file to **Edit** it → Read is correct (Edit needs content in context). +If you are reading to **analyze, explore, or summarize** → +use `ctx_execute_file(path, language, code)` instead. +Only your printed summary enters context. The raw file content stays in the sandbox. + +### Grep (large results) +Grep results can flood context. +Use `ctx_execute(language: "shell", code: "grep ...")` to run searches in sandbox. +Only your printed summary enters context. + +## Tool selection hierarchy + +1. **GATHER**: `ctx_batch_execute(commands, queries)` — Primary tool. + Runs all commands, auto-indexes output, returns search results. + ONE call replaces 30+ individual calls. +2. **FOLLOW-UP**: `ctx_search(queries: ["q1", "q2", ...])` — + Query indexed content. Pass ALL questions as array in ONE call. +3. **PROCESSING**: `ctx_execute(language, code)` | + `ctx_execute_file(path, language, code)` — + Sandbox execution. Only stdout enters context. +4. **WEB**: `ctx_fetch_and_index(url, source)` then + `ctx_search(queries)` — Fetch, chunk, index, query. + Raw HTML never enters context. +5. **INDEX**: `ctx_index(content, source)` — + Store content in FTS5 knowledge base for later search. + +## Subagent routing + +When spawning subagents (Agent/Task tool), the routing block is automatically +injected into their prompt. Bash-type subagents are upgraded to general-purpose +so they have access to MCP tools. +You do NOT need to manually instruct subagents about context-mode. + +## Output constraints + +- Keep responses under 500 words. +- Write artifacts (code, configs, PRDs) to FILES — never return them + as inline text. Return only: file path + 1-line description. +- When indexing content, use descriptive source labels so others can `ctx_search(source: "label")` later. + +## ctx commands + +| Command | Action | +|---------------|---------------------------------------------------------------------------------------| +| `ctx stats` | Call the `ctx_stats` MCP tool and display the full output verbatim | +| `ctx doctor` | Call the `ctx_doctor` MCP tool, run the returned shell command, display as checklist | +| `ctx upgrade` | Call the `ctx_upgrade` MCP tool, run the returned shell command, display as checklist | diff --git a/biome.json b/biome.json index d6f7b49..60e63c6 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.4.4/schema.json", + "$schema": "https://biomejs.dev/schemas/2.4.7/schema.json", "vcs": { "enabled": true, "clientKind": "git", @@ -20,6 +20,7 @@ "!!**/config/op/plugins/used_plugins", "!!**/config/tmux/plugins", "!!**/config/zsh", + "!!**/config/karabiner", "!!**/config/vim", "!!**/lazy-lock.json", "!!**/local/bin/antigen.zsh", diff --git a/config/alias b/config/alias index 033acc9..5d71ca2 100755 --- a/config/alias +++ b/config/alias @@ -33,6 +33,8 @@ alias .c='cd $HOME/Code' alias .d='cd $DOTFILES' alias .l='cd $HOME/.local' alias .o='cd $HOME/Code/ivuorinen/obsidian/' +alias .s='cd $HOME/Code/s' +alias .p='cd $HOME/Code/ivuorinen' # Shortcuts for listing alias ll="ls -la" diff --git a/config/exports b/config/exports old mode 100644 new mode 100755 index 7e4814f..54d0d7d --- a/config/exports +++ b/config/exports @@ -347,8 +347,7 @@ export AWS_CONFIGURE_SESSION_MFA=true msg "Setting up Mason configuration" export MASON_HOME="$XDG_DATA_HOME/nvim/mason" -# Neovim environment variables — optional overrides for external tools. -# Neovim itself uses vim.fn.stdpath() and does not read these. +# Neovim environment variables msg "Setting up Neovim configuration" [ -z "${NVIM_STATE:-}" ] && export NVIM_STATE="$XDG_STATE_HOME/nvim" [ -z "${NVIM_CONFIG_HOME:-}" ] && export NVIM_CONFIG_HOME="$XDG_CONFIG_HOME/nvim" @@ -512,4 +511,4 @@ if [ -f "$XDG_CONFIG_HOME/exports-local" ]; then source "$XDG_CONFIG_HOME/export # shellcheck source=./exports-lakka if [ -f "$XDG_CONFIG_HOME/exports-$(hostname)" ]; then source "$XDG_CONFIG_HOME/exports-$(hostname)"; fi # shellcheck source=./exports-lakka-secret -if [ -f "$XDG_CONFIG_HOME/exports-$(hostname)-secret" ]; then source "$XDG_CONFIG_HOME/exports-$(hostname)-secret"; fi \ No newline at end of file +if [ -f "$XDG_CONFIG_HOME/exports-$(hostname)-secret" ]; then source "$XDG_CONFIG_HOME/exports-$(hostname)-secret"; fi diff --git a/config/fish/alias.fish b/config/fish/alias.fish index 8f99e51..be5a42a 100644 --- a/config/fish/alias.fish +++ b/config/fish/alias.fish @@ -1,6 +1,7 @@ # Set aliases for fish shell -alias vim='vim -u "$XDG_CONFIG_HOME/vim/vimrc"' +alias vim='nvim' +alias vi='nvim' # eza aliases if eza is installed if type -q eza >/dev/null @@ -92,5 +93,41 @@ function configure_tide \ --transient=Yes end +# Navigation aliases +abbr --add .. 'cd ..' +abbr --add ... 'cd ../..' +abbr --add .... 'cd ../../..' + +# Interesting folders +function .b --wraps='cd $XDG_BIN_HOME' --description 'cd $XDG_BIN_HOME' + cd $XDG_BIN_HOME $argv +end + +function .l --wraps='cd ~/.local' --description 'cd ~/.local' + cd ~/.local $argv +end + +function .o --wraps='cd ~/Code/ivuorinen/obsidian/' --description 'cd ~/Code/ivuorinen/obsidian/' + cd ~/Code/ivuorinen/obsidian/ $argv +end + +# cd to git root directory +function cdgr --description 'cd to git root' + if git rev-parse --is-inside-work-tree &>/dev/null + cd (git rev-parse --show-toplevel); or return $status + else + echo >&2 "Not in a git repository" + return 1 + end +end + +# Colored grep +abbr --add grep 'grep --color' + +# Date helpers +alias isodate="date +'%Y-%m-%d'" +alias x-datetime="date +'%Y-%m-%d %H:%M:%S'" +alias x-timestamp="date +'%s'" + # Random abbreviations abbr --add stats onefetch --nerd-fonts --true-color never diff --git a/config/fish/conf.d/rustup.fish b/config/fish/conf.d/rustup.fish deleted file mode 100644 index bbe942f..0000000 --- a/config/fish/conf.d/rustup.fish +++ /dev/null @@ -1 +0,0 @@ -source "/home/ivuorinen/.local/share/cargo/env.fish" diff --git a/config/fish/config.fish b/config/fish/config.fish index a9afc99..6ad245b 100644 --- a/config/fish/config.fish +++ b/config/fish/config.fish @@ -22,20 +22,17 @@ if status is-interactive type -q op; and test -e "$HOME/.config/op/plugins.sh" && source "$HOME/.config/op/plugins.sh" - # version manager initializers - type -q mise; and source (mise activate fish|psub) - type -q rbenv; and source (rbenv init -|psub) - type -q pyenv; and source (pyenv init -|psub) - type -q pyenv; and source (pyenv virtualenv-init -|psub) - type -q goenv; and source (goenv init -|psub) - # type -q fnm; and fnm env --use-on-cd --shell fish | source - type -q load_nvm; and load_nvm >/dev/stderr + # mise version manager + type -q mise; and mise activate fish | source # Initialize other tools if available type -q zoxide; and zoxide init fish | source # Start tmux if not already running and not in SSH #.t # defined in functions/.t.fish +else + # Non-interactive shells (IDE subprocesses) use shims for tool discovery + type -q mise; and mise activate fish --shims | source end # Added by LM Studio CLI (lms) diff --git a/config/fish/exports.fish b/config/fish/exports.fish index 3e5fc99..af3b8c0 100644 --- a/config/fish/exports.fish +++ b/config/fish/exports.fish @@ -23,11 +23,6 @@ fish_add_path "$XDG_DATA_HOME/mise/shims" # Add cargo bin to path fish_add_path "$XDG_DATA_HOME/cargo/bin" -# NPM/NVM configuration -set -q NVM_DIR; or set -x NVM_DIR "$XDG_DATA_HOME/nvm" -fish_add_path "$NVM_DIR/bin" -fish_add_path "$XDG_CONFIG_HOME/nvm" - # Yarn configuration set -q YARN_GLOBAL_FOLDER; or set -x YARN_GLOBAL_FOLDER "$XDG_DATA_HOME/yarn" fish_add_path "$YARN_GLOBAL_FOLDER/bin" @@ -36,6 +31,9 @@ fish_add_path "$YARN_GLOBAL_FOLDER/bin" set -q MASON_HOME; or set -x MASON_HOME "$XDG_DATA_HOME/nvim/mason" fish_add_path "$MASON_HOME/bin" +# Add dotnet tools to path +fish_add_path "$HOME/.dotnet/tools/" + # Set Neovim environment variables test -z "$NVIM_STATE" && set -x NVIM_STATE "$XDG_STATE_HOME/nvim" test -z "$NVIM_CONFIG_HOME" && set -x NVIM_CONFIG_HOME "$XDG_CONFIG_HOME/nvim" @@ -58,11 +56,14 @@ set -q AWS_CONFIG_FILE; or set -x AWS_CONFIG_FILE "$XDG_STATE_HOME/aws/config" set -q AWS_SHARED_CREDENTIALS_FILE; or set -x AWS_SHARED_CREDENTIALS_FILE "$XDG_STATE_HOME/aws/credentials" set -q AWS_SESSION_TOKEN; or set -x AWS_SESSION_TOKEN "$XDG_STATE_HOME/aws/session_token" set -q AWS_DATA_PATH; or set -x AWS_DATA_PATH "$XDG_DATA_HOME/aws" +set -q AWS_DEFAULT_REGION; or set -x AWS_DEFAULT_REGION eu-west-1 set -q AWS_DEFAULT_OUTPUT; or set -x AWS_DEFAULT_OUTPUT table set -q AWS_CONFIGURE_KEYS; or set -x AWS_CONFIGURE_KEYS true set -q AWS_CONFIGURE_SESSION; or set -x AWS_CONFIGURE_SESSION true set -q AWS_CONFIGURE_SESSION_DURATION; or set -x AWS_CONFIGURE_SESSION_DURATION 7200 set -q AWS_CONFIGURE_SESSION_MFA; or set -x AWS_CONFIGURE_SESSION_MFA true +set -q AWS_CONFIGURE_REGION; or set -x AWS_CONFIGURE_REGION true +set -q AWS_CONFIGURE_OUTPUT; or set -x AWS_CONFIGURE_OUTPUT true set -q AWS_CONFIGURE_PROFILE; or set -x AWS_CONFIGURE_PROFILE true set -q AWS_CONFIGURE_PROMPT; or set -x AWS_CONFIGURE_PROMPT true set -q AWS_CONFIGURE_PROMPT_DEFAULT; or set -x AWS_CONFIGURE_PROMPT_DEFAULT true @@ -87,14 +88,6 @@ x-dc "$DOCKER_CONFIG" set -q DOCKER_HIDE_LEGACY_COMMANDS; or set -x DOCKER_HIDE_LEGACY_COMMANDS true set -q DOCKER_SCAN_SUGGEST; or set -x DOCKER_SCAN_SUGGEST false -# FNM / Node.js configuration -set -q FNM_DIR; or set -x FNM_DIR "$XDG_DATA_HOME/fnm" -fish_add_path "$FNM_DIR" -set -q FNM_VERSION_FILE_STRATEGY; or set -x FNM_VERSION_FILE_STRATEGY recursive -set -q FNM_USE_ON_CD; or set -x FNM_USE_ON_CD true -set -q FNM_COREPACK_ENABLED; or set -x FNM_COREPACK_ENABLED true -set -q FNM_RESOLVE_ENGINES; or set -x FNM_RESOLVE_ENGINES true - # fzf configuration set -q FZF_BASE; or set -x FZF_BASE "$XDG_CONFIG_HOME/fzf" set -q FZF_DEFAULT_OPTS; or set -x FZF_DEFAULT_OPTS \ @@ -104,19 +97,14 @@ set -q FZF_DEFAULT_OPTS; or set -x FZF_DEFAULT_OPTS \ set -q GNUPGHOME; or set -x GNUPGHOME "$XDG_DATA_HOME/gnupg" # Go configuration -# set -q GOPATH; or set -x GOPATH "$XDG_DATA_HOME/go" +set -q GOPATH; or set -x GOPATH "$XDG_DATA_HOME/go" set -q GOBIN; or set -x GOBIN "$XDG_BIN_HOME" -set -q GOENV_ROOT; or set -x GOENV_ROOT "$XDG_DATA_HOME/goenv" -set -q GOENV_RC_FILE; or set -x GOENV_RC_FILE "$XDG_CONFIG_HOME/goenv/goenvrc.fish" - # 1Password configuration set -q OP_CACHE; or set -x OP_CACHE "$XDG_STATE_HOME/1password" # Python configuration set -q WORKON_HOME; or set -x WORKON_HOME "$XDG_DATA_HOME/virtualenvs" -set -q PYENV_ROOT; or set -x PYENV_ROOT "$XDG_DATA_HOME/pyenv" -fish_add_path "$PYENV_ROOT/bin" # Poetry configuration set -q POETRY_HOME; or set -x POETRY_HOME "$XDG_DATA_HOME/poetry" @@ -128,7 +116,6 @@ set -q CARGO_BIN_HOME; or set -x CARGO_BIN_HOME "$XDG_BIN_HOME" set -q RUSTUP_HOME; or set -x RUSTUP_HOME "$XDG_DATA_HOME/rustup" set -x RUST_WITHOUT "clippy,docs,rls" fish_add_path "$CARGO_HOME/bin" -fish_add_path "$XDG_DATA_HOME/bob/nvim-bin" # screen configuration set -q SCREENRC; or set -x SCREENRC "$XDG_CONFIG_HOME/misc/screenrc" @@ -166,6 +153,15 @@ x-dc "$WAKATIME_HOME" set -q _ZO_DATA_DIR; or set -x _ZO_DATA_DIR "$XDG_DATA_HOME/zoxide" set -q _ZO_EXCLUDE_DIRS; or set -x _ZO_EXCLUDE_DIRS "$XDG_DATA_HOME" +# bkt (shell command caching tool) configuration +set -q BKT_TTL; or set -x BKT_TTL 1m + +# Manpager +set -q MANPAGER; or set -x MANPAGER "less -X" + +# Lando +fish_add_path "$HOME/.lando/bin" + # Miscellaneous configuration set -q CHEAT_USE_FZF; or set -x CHEAT_USE_FZF true set -q SQLITE_HISTORY; or set -x SQLITE_HISTORY "$XDG_CACHE_HOME/sqlite/sqlite_history" diff --git a/config/fish/functions/load_nvm.fish b/config/fish/functions/load_nvm.fish deleted file mode 100644 index 3205b88..0000000 --- a/config/fish/functions/load_nvm.fish +++ /dev/null @@ -1,16 +0,0 @@ -function load_nvm --on-variable="PWD" - set -l default_node_version (nvm version default) - set -l node_version (nvm version) - set -l nvmrc_path (nvm_find_nvmrc) - if test -n "$nvmrc_path" - set -l nvmrc_node_version (nvm version (cat $nvmrc_path)) - if test "$nvmrc_node_version" = N/A - nvm install (cat $nvmrc_path) - else if test "$nvmrc_node_version" != "$node_version" - nvm use $nvmrc_node_version - end - else if test "$node_version" != "$default_node_version" - echo "Reverting to default Node version" - nvm use default - end -end diff --git a/config/fish/functions/nvm.fish b/config/fish/functions/nvm.fish deleted file mode 100644 index 97d790e..0000000 --- a/config/fish/functions/nvm.fish +++ /dev/null @@ -1,3 +0,0 @@ -function nvm - bass source $NVM_DIR/nvm.sh --no-use ';' nvm $argv -end diff --git a/config/fish/functions/nvm_find_nvmrc.fish b/config/fish/functions/nvm_find_nvmrc.fish deleted file mode 100644 index 14d616e..0000000 --- a/config/fish/functions/nvm_find_nvmrc.fish +++ /dev/null @@ -1,3 +0,0 @@ -function nvm_find_nvmrc - bass source $NVM_DIR/nvm.sh --no-use ';' nvm_find_nvmrc -end diff --git a/config/fish/themes/Catppuccin Frappe.theme b/config/fish/themes/Catppuccin Frappe.theme index 5015c9c..dde0948 100644 --- a/config/fish/themes/Catppuccin Frappe.theme +++ b/config/fish/themes/Catppuccin Frappe.theme @@ -58,3 +58,32 @@ fish_pager_color_progress 737994 fish_pager_color_prefix f4b8e4 fish_pager_color_completion c6d0f5 fish_pager_color_description 737994 + +[unknown] +# preferred_background: 303446 +fish_color_normal c6d0f5 +fish_color_command 8caaee +fish_color_param eebebe +fish_color_keyword ca9ee6 +fish_color_quote a6d189 +fish_color_redirection f4b8e4 +fish_color_end ef9f76 +fish_color_comment 838ba7 +fish_color_error e78284 +fish_color_gray 737994 +fish_color_selection --background=414559 +fish_color_search_match --background=414559 +fish_color_option a6d189 +fish_color_operator f4b8e4 +fish_color_escape ea999c +fish_color_autosuggestion 737994 +fish_color_cancel e78284 +fish_color_cwd e5c890 +fish_color_user 81c8be +fish_color_host 8caaee +fish_color_host_remote a6d189 +fish_color_status e78284 +fish_pager_color_progress 737994 +fish_pager_color_prefix f4b8e4 +fish_pager_color_completion c6d0f5 +fish_pager_color_description 737994 diff --git a/config/fish/themes/Catppuccin Macchiato.theme b/config/fish/themes/Catppuccin Macchiato.theme index 6a8138c..b32097c 100644 --- a/config/fish/themes/Catppuccin Macchiato.theme +++ b/config/fish/themes/Catppuccin Macchiato.theme @@ -58,3 +58,32 @@ fish_pager_color_progress 6e738d fish_pager_color_prefix f5bde6 fish_pager_color_completion cad3f5 fish_pager_color_description 6e738d + +[unknown] +# preferred_background: 24273a +fish_color_normal cad3f5 +fish_color_command 8aadf4 +fish_color_param f0c6c6 +fish_color_keyword c6a0f6 +fish_color_quote a6da95 +fish_color_redirection f5bde6 +fish_color_end f5a97f +fish_color_comment 8087a2 +fish_color_error ed8796 +fish_color_gray 6e738d +fish_color_selection --background=363a4f +fish_color_search_match --background=363a4f +fish_color_option a6da95 +fish_color_operator f5bde6 +fish_color_escape ee99a0 +fish_color_autosuggestion 6e738d +fish_color_cancel ed8796 +fish_color_cwd eed49f +fish_color_user 8bd5ca +fish_color_host 8aadf4 +fish_color_host_remote a6da95 +fish_color_status ed8796 +fish_pager_color_progress 6e738d +fish_pager_color_prefix f5bde6 +fish_pager_color_completion cad3f5 +fish_pager_color_description 6e738d diff --git a/config/fish/themes/Catppuccin Mocha.theme b/config/fish/themes/Catppuccin Mocha.theme index 1fbf8e1..2d12a60 100644 --- a/config/fish/themes/Catppuccin Mocha.theme +++ b/config/fish/themes/Catppuccin Mocha.theme @@ -58,3 +58,32 @@ fish_pager_color_progress 6c7086 fish_pager_color_prefix f5c2e7 fish_pager_color_completion cdd6f4 fish_pager_color_description 6c7086 + +[unknown] +# preferred_background: 1e1e2e +fish_color_normal cdd6f4 +fish_color_command 89b4fa +fish_color_param f2cdcd +fish_color_keyword cba6f7 +fish_color_quote a6e3a1 +fish_color_redirection f5c2e7 +fish_color_end fab387 +fish_color_comment 7f849c +fish_color_error f38ba8 +fish_color_gray 6c7086 +fish_color_selection --background=313244 +fish_color_search_match --background=313244 +fish_color_option a6e3a1 +fish_color_operator f5c2e7 +fish_color_escape eba0ac +fish_color_autosuggestion 6c7086 +fish_color_cancel f38ba8 +fish_color_cwd f9e2af +fish_color_user 94e2d5 +fish_color_host 89b4fa +fish_color_host_remote a6e3a1 +fish_color_status f38ba8 +fish_pager_color_progress 6c7086 +fish_pager_color_prefix f5c2e7 +fish_pager_color_completion cdd6f4 +fish_pager_color_description 6c7086 diff --git a/config/git/overrides/.gitignore b/config/git/overrides/.gitignore index 8d4b687..a45d539 100644 --- a/config/git/overrides/.gitignore +++ b/config/git/overrides/.gitignore @@ -1,2 +1,3 @@ !.gitkeep config +ignore diff --git a/config/homebrew/Brewfile b/config/homebrew/Brewfile index b29b672..00477fc 100644 --- a/config/homebrew/Brewfile +++ b/config/homebrew/Brewfile @@ -1,17 +1,13 @@ tap "1password/tap" -tap "anchore/grype" tap "cormacrelf/tap" tap "ddosify/tap" tap "dm3ch/tap" tap "doron-cohen/tap" tap "gesquive/tap" -tap "github/gh" tap "golangci/tap" tap "homebrew/autoupdate" tap "homebrew/bundle" tap "homebrew/services" -tap "jesseduffield/lazygit" -tap "k8sgpt-ai/k8sgpt" tap "keith/formulae" tap "koekeishiya/formulae" tap "mongodb/brew" @@ -20,14 +16,9 @@ tap "pantheon-systems/external" tap "reviewdog/tap" tap "shivammathur/extensions" tap "shivammathur/php" -tap "snyk/tap" tap "tabbyml/tabby" tap "teamookla/speedtest" tap "xwmx/taps" -# Run your GitHub Actions locally -brew "act" -# Simple, modern, secure file encryption -brew "age" # Mozilla CA certificate store brew "ca-certificates" # Mozilla CA bundle for Python @@ -40,10 +31,6 @@ brew "cryptography" brew "libyaml" # Display directories as trees (with optional color/HTML output) brew "tree" -# Automate deployment, configuration, and upgrading -brew "ansible" -# Checks ansible playbooks for practices and behaviour -brew "ansible-lint" # Generic-purpose lossless compression algorithm by Google brew "brotli" # Library and utilities for processing GIFs @@ -80,18 +67,12 @@ brew "pkgconf" brew "autogen" # Tool for generating GNU Standards-compliant Makefiles brew "automake" -# Official Amazon AWS command-line interface -brew "awscli" # GNU internationalization (i18n) and localization (l10n) library brew "gettext" # Bourne-Again SHell, a UNIX command interpreter brew "bash" -# Clone of cat(1) with syntax highlighting and Git integration -brew "bat" # GNU File, Shell, and Text utilities brew "coreutils" -# Bash Automated Testing System -brew "bats-core" # Parser generator brew "bison" # Freely available high-quality data compressor @@ -102,22 +83,12 @@ brew "freetype" brew "fontconfig" # Core application library for C brew "glib" -# Binary installation for rust projects -brew "cargo-binstall" # Multi-platform support library with a focus on asynchronous I/O brew "libuv" -# Open-source, cross-platform JavaScript runtime environment -brew "node", link: false # CLI tool for analyzing Claude Code usage from local JSONL files brew "ccusage" # JSON Schema CLI brew "check-jsonschema" -# Prevent cloud misconfigurations during build-time for IaC tools -brew "checkov" -# Human-friendly and fast alternative to cut and (sometimes) awk -brew "choose-rust" -# Cross-platform make -brew "cmake" # Get a file from an HTTP, HTTPS or FTP server brew "curl" # Network authentication protocol @@ -154,14 +125,8 @@ brew "flock" brew "freetds" # Monitor a directory for changes and run a shell command brew "fswatch" -# Command-line fuzzy finder written in Go -brew "fzf" # Graphics library to dynamically manipulate images brew "gd" -# Disk usage analyzer with console interface written in Go -brew "gdu" -# GitHub command-line tool -brew "gh" # Distributed revision control system brew "git" # Enable transparent encryption/decryption of files in a git repo @@ -170,14 +135,10 @@ brew "git-crypt" brew "git-extras" # Browse your latest git branches, formatted real fancy brew "git-recent" -# Render markdown on the CLI -brew "glow" # GNU implementation of the famous stream editor brew "gnu-sed" # GNU Pretty Good Privacy (PGP) package brew "gnupg" -# Go version management -brew "goenv" # Library access to GnuPG brew "gpgme" # Manage your GnuPG keys with ease! @@ -190,8 +151,6 @@ brew "librsvg" brew "graphviz" # GNU grep, egrep and fgrep brew "grep" -# Vulnerability scanner for container images and filesystems -brew "grype" # Popular GNU data compression program brew "gzip" # Improved top (interactive process viewer) @@ -206,8 +165,6 @@ brew "imagemagick" brew "irssi" # Image manipulation library brew "jpeg" -# Lightweight and flexible command-line JSON processor -brew "jq" # JSON parser for C brew "json-c" # Crawling and spidering framework @@ -244,8 +201,6 @@ brew "nginx" brew "nmap" # Libraries for security-enabled client and server applications brew "nss" -# Command-line Git information tool -brew "onefetch" # General-purpose speech recognition model brew "openai-whisper" # Open source suite of directory software @@ -258,46 +213,18 @@ brew "php", link: false brew "php@8.2", link: true # General-purpose scripting language brew "php@8.3" -# Pins GitHub Actions to full hashes and versions -brew "pinact" -# Python version management -brew "pyenv" -# Migrate pip packages from one Python version to another -brew "pyenv-pip-migrate" -# Pyenv plugin to manage virtualenv -brew "pyenv-virtualenv" # Interpreted, interactive, object-oriented programming language brew "python@3.11" -# Install various Ruby versions and implementations -brew "ruby-build" -# Ruby version manager -brew "rbenv" # Generate C-based recognizers from regular expressions brew "re2c" -# Rust toolchain installer -brew "rustup" -# Static analysis and lint tool, for (ba)sh scripts -brew "shellcheck" # User interface to the TELNET protocol brew "telnet" # Send macOS User Notifications from the command-line brew "terminal-notifier" # Tool which checks for the support of TLS/SSL ciphers and flaws brew "testssl" -# Terraform version manager inspired by rbenv -brew "tfenv" -# Linter for Terraform files -brew "tflint" -# Static analysis security scanner for your terraform code -brew "tfsec" # Terminal multiplexer brew "tmux" -# Extremely fast Python package installer and resolver, written in Rust -brew "uv" -# Tool for creating isolated virtual python environments -brew "virtualenv" -# Command-line interface to the WakaTime api -brew "wakatime-cli" # Executes a program periodically, showing output fullscreen brew "watch" # Internet file retriever @@ -336,8 +263,6 @@ brew "shivammathur/extensions/yaml@8.3" brew "shivammathur/php/php-debug" # General-purpose scripting language brew "shivammathur/php/php@8.2-debug" -# Find & fix known vulnerabilities in open-source dependencies -brew "snyk/tap/snyk" # Tabby: AI Coding Assistant brew "tabbyml/tabby/tabby" # Command-line interface for 1Password diff --git a/config/husky/init.sh b/config/husky/init.sh index a2770b5..9a333d9 100755 --- a/config/husky/init.sh +++ b/config/husky/init.sh @@ -1,4 +1,2 @@ #!/usr/bin/env bash - -[[ -z "$NVM_DIR" ]] && export NVM_DIR="$HOME/.config/nvm" -[[ -s "$NVM_DIR/nvm.sh" ]] && \. "$NVM_DIR/nvm.sh" # This loads nvm +eval "$(mise activate --shims)" diff --git a/config/karabiner/karabiner.json b/config/karabiner/karabiner.json index fd82513..ca40844 100644 --- a/config/karabiner/karabiner.json +++ b/config/karabiner/karabiner.json @@ -1,68 +1,68 @@ { - "profiles": [ - { - "complex_modifications": { - "rules": [ - { - "description": "Change right_command+hjkl to arrow keys", - "manipulators": [ - { - "from": { - "key_code": "h", - "modifiers": { - "mandatory": ["right_command"], - "optional": ["any"] - } - }, - "to": [{ "key_code": "left_arrow" }], - "type": "basic" - }, - { - "from": { - "key_code": "j", - "modifiers": { - "mandatory": ["right_command"], - "optional": ["any"] - } - }, - "to": [{ "key_code": "down_arrow" }], - "type": "basic" - }, - { - "from": { - "key_code": "k", - "modifiers": { - "mandatory": ["right_command"], - "optional": ["any"] - } - }, - "to": [{ "key_code": "up_arrow" }], - "type": "basic" - }, - { - "from": { - "key_code": "l", - "modifiers": { - "mandatory": ["right_command"], - "optional": ["any"] - } - }, - "to": [{ "key_code": "right_arrow" }], - "type": "basic" - } - ] - } - ] - }, - "name": "Default profile", - "selected": true, - "simple_modifications": [ + "profiles": [ { - "from": { "key_code": "caps_lock" }, - "to": [{ "key_code": "f18" }] + "complex_modifications": { + "rules": [ + { + "description": "Change right_command+hjkl to arrow keys", + "manipulators": [ + { + "from": { + "key_code": "h", + "modifiers": { + "mandatory": ["right_command"], + "optional": ["any"] + } + }, + "to": [{ "key_code": "left_arrow" }], + "type": "basic" + }, + { + "from": { + "key_code": "j", + "modifiers": { + "mandatory": ["right_command"], + "optional": ["any"] + } + }, + "to": [{ "key_code": "down_arrow" }], + "type": "basic" + }, + { + "from": { + "key_code": "k", + "modifiers": { + "mandatory": ["right_command"], + "optional": ["any"] + } + }, + "to": [{ "key_code": "up_arrow" }], + "type": "basic" + }, + { + "from": { + "key_code": "l", + "modifiers": { + "mandatory": ["right_command"], + "optional": ["any"] + } + }, + "to": [{ "key_code": "right_arrow" }], + "type": "basic" + } + ] + } + ] + }, + "name": "Default profile", + "selected": true, + "simple_modifications": [ + { + "from": { "key_code": "caps_lock" }, + "to": [{ "key_code": "f18" }] + } + ], + "virtual_hid_keyboard": { "keyboard_type_v2": "iso" } } - ], - "virtual_hid_keyboard": { "keyboard_type_v2": "iso" } - } - ] + ] } diff --git a/config/mise/config.toml b/config/mise/config.toml new file mode 100644 index 0000000..6b62f5a --- /dev/null +++ b/config/mise/config.toml @@ -0,0 +1,105 @@ +[tools] +# Language runtimes +node = "lts" +python = "3" +go = "latest" +rust = "stable" + +# Pre-built binaries via ubi (fast — no compilation) +"ubi:sharkdp/fd" = "latest" +"ubi:BurntSushi/ripgrep" = "latest" +"ubi:eza-community/eza" = "latest" +"ubi:ClementTsang/bottom" = "latest" +"ubi:ajeetdsouza/zoxide" = "latest" +"ubi:tree-sitter/tree-sitter" = "latest" +"ubi:neovim/neovim" = "latest" # Neovim editor binary +"ubi:dandavison/delta" = "latest" + +# Cargo-based tools (no pre-built binary available) +"cargo:bkt" = "latest" +"cargo:difftastic" = "latest" +"cargo:tmux-sessionizer" = "latest" + +# Go-based tools +"go:github.com/google/yamlfmt/cmd/yamlfmt" = "latest" +"go:github.com/cheat/cheat/cmd/cheat" = "latest" +"go:github.com/charmbracelet/glow" = "latest" +"go:github.com/junegunn/fzf" = "latest" +"go:github.com/charmbracelet/gum" = "latest" +"go:github.com/joshmedeski/sesh/v2" = "latest" +"go:github.com/dotzero/git-profile" = "latest" + +# npm-based tools +"npm:editorconfig-checker" = "latest" +"npm:github-release-notes" = "latest" +"npm:neovim" = "latest" # Node.js client for Neovim's RPC API (required by plugins) +"npm:corepack" = "latest" + +# Python tools (via pipx backend) +"pipx:ansible" = "latest" +"pipx:ansible-lint" = "latest" +"pipx:ruff" = "latest" +"pipx:openapi-python-client" = "latest" + +# .NET tools (via dotnet backend) +"dotnet:coverlet.console" = "latest" +"dotnet:csharp-ls" = "latest" +"dotnet:csharpier" = "latest" +"dotnet:ilspycmd" = "latest" +"dotnet:dotnet-ef" = "latest" + +# DevOps & security tools +act = "latest" +age = "latest" +aws-cli = "latest" +checkov = "latest" +grype = "latest" +pinact = "latest" +snyk = "latest" + +# Dev tools (pre-built binaries) +lazygit = "latest" +bat = "latest" +bats = "latest" +choose = "latest" +cmake = "latest" +gdu = "latest" +github-cli = "latest" +jq = "latest" +shellcheck = "latest" +shfmt = "latest" +stylua = "latest" +actionlint = "latest" +"aqua:mpalmer/action-validator" = "latest" +oh-my-posh = "latest" +"ubi:o2sh/onefetch" = "latest" +"ubi:wakatime/wakatime-cli" = "latest" + +# Terraform (replaces tfenv) +terraform = "latest" +tflint = "latest" +tfsec = "latest" + +# Other useful tools +uv = "latest" + +[settings] +trusted_config_paths = [ + "~/Code/ivuorinen", + "~/Code/s", + "~/Code/masf", +] +# Respect .nvmrc, .python-version, .ruby-version, etc. in other projects. +# This repo uses .mise.toml at the repo root for pinned versions. +idiomatic_version_file = true +idiomatic_version_file_enable_tools = [ + "node", "python", "ruby", "go", "java", + "terraform", "yarn", "bun", "deno", "dotnet", +] + +# Generate mise.lock for reproducible installs +lockfile = true + +# Save disk space — don't keep downloaded archives or failed installs +always_keep_download = false +always_keep_install = false diff --git a/config/nvim/init.lua b/config/nvim/init.lua index e90e5bf..bbfb13d 100644 --- a/config/nvim/init.lua +++ b/config/nvim/init.lua @@ -27,8 +27,12 @@ if not (vim.uv or vim.loop).fs_stat(lazypath) then end vim.opt.rtp:prepend(lazypath) --- ── Add ~/.local/bin to the PATH ──────────────────────────────────── -vim.fn.setenv('PATH', vim.fn.expand '$HOME/.local/bin' .. ':' .. vim.fn.expand '$PATH') +-- ── Add mise shims and ~/.local/bin to the PATH ─────────────────────── +vim.env.PATH = vim.env.HOME + .. '/.local/share/mise/shims:' + .. vim.env.HOME + .. '/.local/bin:' + .. vim.env.PATH require 'options' require 'autogroups' diff --git a/config/nvim/lua/utils.lua b/config/nvim/lua/utils.lua index 9eb65ad..3d6d8e3 100644 --- a/config/nvim/lua/utils.lua +++ b/config/nvim/lua/utils.lua @@ -102,4 +102,4 @@ function GetIntelephenseLicense() f:close() local stripped = string.gsub(content, '%s+', '') return stripped == '' and nil or stripped -end \ No newline at end of file +end diff --git a/config/nvm/default-packages b/config/nvm/default-packages deleted file mode 100644 index 0f572fc..0000000 --- a/config/nvm/default-packages +++ /dev/null @@ -1,5 +0,0 @@ -# $NVM_DIR/default-packages - -yarn -neovim -corepack diff --git a/config/shared.sh b/config/shared.sh index ffeedea..0a5fe21 100755 --- a/config/shared.sh +++ b/config/shared.sh @@ -71,7 +71,6 @@ x-set-env XDG_BIN_HOME "$HOME/.local/bin" x-path-prepend "/usr/local/bin" x-path-prepend "/opt/homebrew/bin" x-path-prepend "$XDG_DATA_HOME/cargo/bin" -x-path-prepend "$XDG_DATA_HOME/bob/nvim-bin" x-path-prepend "$DOTFILES/local/bin" x-path-prepend "$XDG_BIN_HOME" diff --git a/config/tmux/tmux.conf b/config/tmux/tmux.conf index aa70f93..048f1d4 100644 --- a/config/tmux/tmux.conf +++ b/config/tmux/tmux.conf @@ -16,6 +16,7 @@ # -u : Unset the specified option. set -as terminal-features ",xterm-256color:RGB:clipboard:usstyle:strikethrough:overline" +set -g allow-passthrough on # Let apps query outer terminal (OSC 11 for fish theme detection) set -s escape-time 0 # Address vim mode switching delay set -s set-clipboard on # System clipboard via OSC 52 diff --git a/config/vim/vimrc b/config/vim/vimrc index 7f2ce80..3cf485b 100644 --- a/config/vim/vimrc +++ b/config/vim/vimrc @@ -3,6 +3,9 @@ " " vim: ts=2 sw=2 expandtab " vint: +ProhibitAbbreviationOption +ProhibitSetNoCompatible + +" mise — add shims to PATH for tool discovery +let $PATH = $HOME . '/.local/bin:' . $HOME . '/.local/share/mise/shims:' . $PATH "***************************************************************************** "" Vim-Plug core "***************************************************************************** diff --git a/config/zsh/antidote.zsh b/config/zsh/antidote.zsh index 983435d..b125445 100755 --- a/config/zsh/antidote.zsh +++ b/config/zsh/antidote.zsh @@ -18,7 +18,6 @@ # Plugin configurations zstyle ':antidote:bundle' use-friendly-names 'yes' zstyle ':omz:update' mode reminder -zstyle ':omz:plugins:nvm' autoload yes # Pure prompt settings export PURE_PROMPT_SYMBOL='➜' diff --git a/config/zsh/antidote_plugins.txt b/config/zsh/antidote_plugins.txt index 1433cc2..31019e4 100644 --- a/config/zsh/antidote_plugins.txt +++ b/config/zsh/antidote_plugins.txt @@ -24,14 +24,10 @@ ohmyzsh/ohmyzsh path:plugins/fzf ohmyzsh/ohmyzsh path:plugins/git ohmyzsh/ohmyzsh path:plugins/golang ohmyzsh/ohmyzsh path:plugins/gpg-agent -ohmyzsh/ohmyzsh path:plugins/nvm ohmyzsh/ohmyzsh path:plugins/python # ohmyzsh/ohmyzsh path:plugins/tmux ohmyzsh/ohmyzsh path:plugins/z -# Automatically activate nvm if .nvmrc file is present -ivuorinen/nvm-auto-use - # Add core plugins that make Zsh a bit more like Fish zdharma-continuum/fast-syntax-highlighting diff --git a/config/zsh/p10k.zsh b/config/zsh/p10k.zsh index 575abe3..d6669fb 100644 --- a/config/zsh/p10k.zsh +++ b/config/zsh/p10k.zsh @@ -61,7 +61,7 @@ vcs # git status # command_execution_time # previous command duration go - nvm + asdf aws # =========================[ Line #2 ]========================= newline # \n @@ -121,8 +121,8 @@ # Don't show context unless root or in SSH. # typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION= - # aws, go and nvm versions colors. - typeset -g POWERLEVEL9K_{AWS,GO,NVM}_FOREGROUND=$grey + # aws, go and asdf versions colors. + typeset -g POWERLEVEL9K_{AWS,GO,ASDF}_FOREGROUND=$grey # Show previous command duration only if it's >= 86400s = 24h. typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=86400 diff --git a/config/zsh/plugins/nvm-auto-use/nvm-auto-use.plugin.zsh b/config/zsh/plugins/nvm-auto-use/nvm-auto-use.plugin.zsh deleted file mode 100644 index b0c11d7..0000000 --- a/config/zsh/plugins/nvm-auto-use/nvm-auto-use.plugin.zsh +++ /dev/null @@ -1,26 +0,0 @@ -# shellcheck disable=SC1071,SC1103,SC2148 -# Source: https://github.com/nvm-sh/nvm#zsh -# place this after nvm initialization! -autoload -U add-zsh-hook - -load-nvmrc() { - local nvmrc_path - nvmrc_path="$(nvm_find_nvmrc)" - - if [ -n "$nvmrc_path" ]; then - local nvmrc_node_version - nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")") - - if [ "$nvmrc_node_version" = "N/A" ]; then - nvm install - elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then - nvm use - fi - elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then - echo "Reverting to nvm default version" - nvm use default - fi -} - -add-zsh-hook chpwd load-nvmrc -load-nvmrc diff --git a/hosts/s/config/git/overrides/config b/hosts/s/config/git/overrides/config index 65dac51..0ff3cfb 100644 --- a/hosts/s/config/git/overrides/config +++ b/hosts/s/config/git/overrides/config @@ -2,6 +2,9 @@ [include] path = ~/.dotfiles/config/git/shared +[core] + excludesfile = ~/.config/git/overrides/ignore + [gpg] format = ssh diff --git a/hosts/s/config/git/overrides/ignore b/hosts/s/config/git/overrides/ignore new file mode 100644 index 0000000..86a8739 --- /dev/null +++ b/hosts/s/config/git/overrides/ignore @@ -0,0 +1,31 @@ +.DS_Store +.idea +.run +*.cache +*~ + +*-secret +__secret +__ignored +__test_*.php +__test_*.txt +__test.php +_theme +*.sql.gz +*.WordPress.*.xml +cachegrind.out.* +composer.phar +wp_*.sh +auth.json +dfm.sh +.scannerwork +.phpactor.json +.zsh_history + +**/.claude/* +**/.serena/* +**/docs/plans/* +**/docs/superpowers/* +CLAUDE.md +TODO.md +specs.md diff --git a/install.conf.yaml b/install.conf.yaml index 4094986..8f5b8c3 100644 --- a/install.conf.yaml +++ b/install.conf.yaml @@ -40,7 +40,7 @@ glob: true relink: true path: config/* - exclude: [config/nvm, config/fzf, config/op] + exclude: [config/fzf, config/op] # 1Password CLI plugins ~/.config/op/plugins.sh: relink: true @@ -68,6 +68,11 @@ glob: true mode: 0600 path: ssh/* + # mise → asdf compatibility (tools expecting ~/.asdf find mise data) + ~/.asdf: + path: ~/.local/share/mise + relink: true + force: true - shell: # Add Git submodules and remove old ones diff --git a/local/bin/dfm b/local/bin/dfm old mode 100644 new mode 100755 index 1d08246..982da6a --- a/local/bin/dfm +++ b/local/bin/dfm @@ -168,11 +168,20 @@ section_install() msgr run "Installing tools via mise..." if ! command -v mise &> /dev/null; then msgr nested "Installing mise..." - curl -fsSL https://mise.run | sh || { msgr err "Failed to install mise"; exit 1; } + curl -fsSL https://mise.run | sh || { + msgr err "Failed to install mise" + exit 1 + } export PATH="${XDG_BIN_HOME:-$HOME/.local/bin}:$PATH" fi - mise install --yes || { msgr err "mise install failed"; exit 1; } - mise reshim || { msgr err "mise reshim failed"; exit 1; } + mise install --yes || { + msgr err "mise install failed" + exit 1 + } + mise reshim || { + msgr err "mise reshim failed" + exit 1 + } msgr yay "mise tools installed!" ;; @@ -542,7 +551,10 @@ section_dotfiles() && msgr ok "Deleted old nvim files (share, state and cache + config)" ln -s "$DOTFILES/config/nvim" ~/.config/nvim \ && msgr ok "Linked nvim and astronvim" - $0 install mise || { msgr err "Failed to install mise tools"; exit 1; } + $0 install mise || { + msgr err "Failed to install mise tools" + exit 1 + } msgr ok "Installed packages" msgr run_done "nvim reset!" ;; @@ -713,4 +725,4 @@ main() esac } -main "$@" \ No newline at end of file +main "$@" diff --git a/scripts/cleanup-old-version-managers.md b/scripts/cleanup-old-version-managers.md new file mode 100644 index 0000000..3ff7b7f --- /dev/null +++ b/scripts/cleanup-old-version-managers.md @@ -0,0 +1,20 @@ +# cleanup-old-version-managers + +Remove old version manager installations that have been replaced by mise. + +## Usage + +```bash +scripts/cleanup-old-version-managers.sh [--dry-run] +``` + +## What it does + +1. Removes data directories for nvm, fnm, pyenv, goenv, and bob-nvim. +2. Removes cargo-installed tool binaries now managed by mise. +3. Removes go-installed tool binaries from `$GOPATH/bin`. +4. Uninstalls Homebrew packages replaced by mise (if brew is available). + +Mason binaries (`$XDG_DATA_HOME/nvim/mason/`) are not touched. + +Pass `--dry-run` to preview what would be removed without making changes. diff --git a/scripts/cleanup-old-version-managers.sh b/scripts/cleanup-old-version-managers.sh old mode 100644 new mode 100755 index 9dd7615..1aaf282 --- a/scripts/cleanup-old-version-managers.sh +++ b/scripts/cleanup-old-version-managers.sh @@ -36,6 +36,7 @@ remove_dir() rm -rf "$dir" msgr run_done "Removed $label" fi + return 0 } remove_file() @@ -48,6 +49,7 @@ remove_file() rm -f "$file" msgr run_done "Removed $label: $file" fi + return 0 } msgr msg "Cleaning up old version manager installations..." @@ -133,4 +135,4 @@ if command -v brew &> /dev/null; then done fi -msgr yay "Cleanup complete! Run 'mise install' to set up tools via mise." \ No newline at end of file +msgr yay "Cleanup complete! Run 'mise install' to set up tools via mise." diff --git a/scripts/install-cargo-packages.md b/scripts/install-cargo-packages.md deleted file mode 100644 index 9c76a20..0000000 --- a/scripts/install-cargo-packages.md +++ /dev/null @@ -1,21 +0,0 @@ -# install-cargo-packages - -Install Rust packages defined in the script. - -## Usage - -```bash -scripts/install-cargo-packages.sh -``` - -## What it does - -1. If `cargo-install-update` is available, updates all existing packages first - and tracks which packages are already installed. -2. Installs each package from the inline list using `cargo install`, - skipping any already handled by the update step. - Builds run in parallel using available CPU cores (minus two). -3. Runs package-specific post-install steps. -4. Cleans the cargo cache with `cargo cache --autoclean`. - -To add or remove packages, edit the `packages` array in `scripts/install-cargo-packages.sh`. diff --git a/scripts/install-cargo-packages.sh b/scripts/install-cargo-packages.sh deleted file mode 100755 index 4f0e084..0000000 --- a/scripts/install-cargo-packages.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env bash -set -uo pipefail -# @description Install cargo/rust packages. -# -# shellcheck source=shared.sh -source "$DOTFILES/config/shared.sh" - -msgr run "Starting to install rust/cargo packages" - -# Track packages already managed by cargo install-update -declare -A installed_packages - -# If we have cargo install-update, use it first -if command -v cargo-install-update &> /dev/null; then - msgr run "Updating cargo packages with cargo install-update" - # Show output in real-time (via stderr) while capturing it for parsing - update_output=$(cargo install-update -a 2>&1 | tee /dev/stderr) - msgr run_done "Done with cargo install-update" - - # Parse installed package names from the update output - while IFS= read -r pkg_name; do - [[ -n "$pkg_name" ]] && installed_packages["$pkg_name"]=1 - done < <(echo "$update_output" | awk '/v[0-9]+\.[0-9]+/ { print $1 }') -fi - -# Cargo packages to install -packages=( - cargo-update # A cargo subcommand for checking and applying updates to installed executables - cargo-cache # Cargo cache management utility - tree-sitter-cli # An incremental parsing system for programming tools - bkt # A subprocess caching utility - difftastic # A structural diff that understands syntax - fd-find # A simple, fast and user-friendly alternative to 'find' - ripgrep # Recursively searches directories for a regex pattern while respecting your gitignore - bob-nvim # A version manager for neovim - bottom # A cross-platform graphical process/system monitor - eza # A modern alternative to ls - tmux-sessionizer # A tool for opening git repositories as tmux sessions - zoxide # A smarter cd command -) - -# Number of jobs to run in parallel, this helps to keep the system responsive -BUILD_JOBS=$(nproc --ignore=2 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 1) - -# Function to install cargo packages -install_packages() -{ - for pkg in "${packages[@]}"; do - # Skip packages already handled by cargo install-update - if [[ -n "${installed_packages[$pkg]+x}" ]]; then - msgr ok "Skipping $pkg (already installed)" - continue - fi - - msgr run "Installing cargo package $pkg" - cargo install --jobs "$BUILD_JOBS" "$pkg" - msgr run_done "Done installing $pkg" - echo "" - done - return 0 -} - -# Function to perform additional steps for installed cargo packages -post_install_steps() -{ - msgr run "Now doing the next steps for cargo packages" - - # use bob to install latest stable nvim - if command -v bob &> /dev/null; then - bob use stable && x-path-append "$XDG_DATA_HOME/bob/nvim-bin" - fi - - msgr run "Removing cargo cache" - cargo cache --autoclean - msgr "done" "Done removing cargo cache" - return 0 -} - -# Install cargo packages and run post-install steps -main() -{ - install_packages - msgr "done" "Installed cargo packages!" - post_install_steps - return 0 -} - -main "$@" diff --git a/scripts/install-fonts.sh b/scripts/install-fonts.sh index 712faf3..ddc1cca 100755 --- a/scripts/install-fonts.sh +++ b/scripts/install-fonts.sh @@ -51,8 +51,8 @@ install_fonts() { msgr run "Starting to install NerdFonts..." # shellcheck disable=SC2048,SC2086 - ./install.sh -q -s ${fonts[*]} - msgr run_done "Done" + ./install.sh -q -s ${fonts[*]} \ + && msgr run_done "Done" return 0 } diff --git a/scripts/install-gh-extensions.sh b/scripts/install-gh-extensions.sh index a7d7020..9a48c12 100755 --- a/scripts/install-gh-extensions.sh +++ b/scripts/install-gh-extensions.sh @@ -51,8 +51,8 @@ install_extensions() # Install all GitHub CLI extensions main() { - install_extensions - msgr run_done "Done" + install_extensions \ + && msgr run_done "Done" return 0 } diff --git a/scripts/install-go-packages.md b/scripts/install-go-packages.md deleted file mode 100644 index bc938bb..0000000 --- a/scripts/install-go-packages.md +++ /dev/null @@ -1,18 +0,0 @@ -# install-go-packages - -Install Go packages defined in the script. - -## Usage - -```bash -scripts/install-go-packages.sh -``` - -## What it does - -1. Checks that `go` is available. -2. Installs each package from the inline list using `go install`. -3. Runs post-install steps (e.g. generating shell completions). -4. Clears the Go module and build caches. - -To add or remove packages, edit the `packages` array in `scripts/install-go-packages.sh`. diff --git a/scripts/install-go-packages.sh b/scripts/install-go-packages.sh deleted file mode 100755 index 3f27136..0000000 --- a/scripts/install-go-packages.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -# @description Install Go packages -# -# shellcheck source=shared.sh -source "$DOTFILES/config/shared.sh" - -msgr run "Installing go packages" - -! x-have "go" && msgr err "go hasn't been installed yet." && exit 0 - -# Go packages to install -packages=( - github.com/dotzero/git-profile@latest # Switch between git user profiles - github.com/google/yamlfmt/cmd/yamlfmt@latest # Format yaml files - github.com/cheat/cheat/cmd/cheat@latest # Interactive cheatsheets on the CLI - github.com/charmbracelet/glow@latest # Render markdown on the CLI - github.com/junegunn/fzf@latest # General-purpose fuzzy finder - github.com/charmbracelet/gum@latest # Glamorous shell scripts - github.com/joshmedeski/sesh/v2@latest # Terminal session manager -) - -# Function to install go packages -install_packages() -{ - for pkg in "${packages[@]}"; do - # Strip inline comments and trim whitespace - pkg="${pkg%%#*}" - pkg="${pkg// /}" - [[ -z "$pkg" ]] && continue - - msgr nested "Installing go package: $pkg" - go install "$pkg" - echo "" - done - return 0 -} - -# Function to install completions and run actions for selected packages -post_install() -{ - msgr run "Installing completions for selected packages" - - if command -v git-profile &> /dev/null; then - git-profile completion zsh > "$ZSH_CUSTOM_COMPLETION_PATH/_git-profile" \ - && msgr run_done "Installed completions for git-profile" - fi - return 0 -} - -# Function to clear go cache -clear_go_cache() -{ - msgr run "Clearing go cache" - go clean -cache -modcache - return 0 -} - -# Install go packages, completions, and clear cache -main() -{ - install_packages - post_install - clear_go_cache - msgr run_done "Done" - return 0 -} - -main "$@" diff --git a/scripts/install-npm-packages.md b/scripts/install-npm-packages.md deleted file mode 100644 index 16da78a..0000000 --- a/scripts/install-npm-packages.md +++ /dev/null @@ -1,18 +0,0 @@ -# install-npm-packages - -Install npm packages defined in the script. - -## Usage - -```bash -scripts/install-npm-packages.sh -``` - -## What it does - -1. Checks that `npm` is available. -2. Installs each package from the inline list using `npm install -g`. -3. Upgrades all global packages. -4. Cleans the npm cache. - -To add or remove packages, edit the `packages` array in `scripts/install-npm-packages.sh`. diff --git a/scripts/install-npm-packages.sh b/scripts/install-npm-packages.sh deleted file mode 100755 index 4b0d154..0000000 --- a/scripts/install-npm-packages.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -# @description Install npm packages globally. -# -# shellcheck source=shared.sh -source "$DOTFILES/config/shared.sh" - -msgr msg "Starting to install npm packages" - -if ! command -v npm &> /dev/null; then - msgr err "npm could not be found." - exit 0 -fi - -packages=( - editorconfig-checker # Check files against .editorconfig rules - github-release-notes # Create release notes from tags and issues - neovim # Neovim node client - corepack # Node.js package manager version management -) - -# Function to install npm packages -install_packages() -{ - for pkg in "${packages[@]}"; do - # Strip inline comments and trim whitespace - pkg="${pkg%%#*}" - pkg="${pkg// /}" - [[ -z "$pkg" ]] && continue - - if npm ls -g -p "$pkg" &> /dev/null; then - msgr run_done "$pkg" "already installed" - else - msgr run "Installing npm package:" "$pkg" - npm install -g --no-fund --no-progress --no-timing "$pkg" - fi - echo "" - done - return 0 -} - -# Function to upgrade all global npm packages -upgrade_global_packages() -{ - msgr run "Upgrading all global packages" - npm -g --no-progress --no-timing --no-fund outdated || true - npm -g --no-timing --no-fund upgrade - return 0 -} - -# Function to clean npm cache -clean_npm_cache() -{ - msgr run "Cleaning up npm cache" - npm cache verify - npm cache clean --force - npm cache verify - return 0 -} - -# Install, upgrade, and clean npm packages -main() -{ - install_packages - upgrade_global_packages - clean_npm_cache - msgr yay "npm package installations complete" - return 0 -} - -main "$@" diff --git a/scripts/install-python-packages.md b/scripts/install-python-packages.md index 379bdb6..ba81a29 100644 --- a/scripts/install-python-packages.md +++ b/scripts/install-python-packages.md @@ -1,6 +1,6 @@ # install-python-packages -Install Python packages defined in the script using `uv`. +Install Python **libraries** (not tools — those are managed by mise). ## Usage @@ -10,9 +10,7 @@ scripts/install-python-packages.sh ## What it does -1. Checks that `uv` is available; if missing, installs it via the official installer. -2. Installs each CLI tool from the inline `tools` array using `uv tool install --upgrade`. -3. Installs each library from the inline `libraries` array using `uv pip install --system --upgrade`. -4. Upgrades all uv-managed tools with `uv tool upgrade --all`. +1. Checks that `uv` is available; if missing, exits with an error (install `uv` via mise first). +2. Installs each library from the inline `libraries` array using `uv pip install --system --upgrade`. -To add or remove packages, edit the `tools` or `libraries` arrays in `scripts/install-python-packages.sh`. +To add or remove packages, edit the `libraries` array in `scripts/install-python-packages.sh`. diff --git a/scripts/install-python-packages.sh b/scripts/install-python-packages.sh index d19689e..548d8ec 100755 --- a/scripts/install-python-packages.sh +++ b/scripts/install-python-packages.sh @@ -1,53 +1,27 @@ #!/usr/bin/env bash set -euo pipefail -# @description Install Python packages using uv. +# @description Install Python libraries via uv pip (tools are managed by mise). # # shellcheck source=shared.sh source "$DOTFILES/config/shared.sh" -msgr run "Starting to install Python packages" +msgr run "Starting to install Python libraries" # Ensure uv is available if ! command -v uv &> /dev/null; then - msgr nested "uv not found, installing via official installer" - curl -LsSf https://astral.sh/uv/install.sh | sh - export PATH="$HOME/.local/bin:$PATH" + msgr err "uv not found — install it via mise first (run: dfm install mise)" + exit 1 fi -# CLI tools — installed isolated with `uv tool install` -tools=( - ansible # IT automation and configuration management - openapi-python-client # Generate Python API clients from OpenAPI specs - ruff # Fast Python linter and formatter -) - # Library packages — installed into system Python with `uv pip install --system` libraries=( libtmux # Python API for tmux pynvim # Neovim Python client ) -# Function to install CLI tools via uv tool install -install_tools() -{ - msgr run "Installing Python CLI tools" - for pkg in "${tools[@]}"; do - # Strip inline comments and trim whitespace - pkg="${pkg%%#*}" - pkg="${pkg// /}" - [[ -z "$pkg" ]] && continue - - msgr nested "Installing tool: $pkg" - uv tool install --upgrade "$pkg" - echo "" - done - return 0 -} - # Function to install library packages via uv pip install install_libraries() { - msgr run "Installing Python libraries" for pkg in "${libraries[@]}"; do # Strip inline comments and trim whitespace pkg="${pkg%%#*}" @@ -61,22 +35,5 @@ install_libraries() return 0 } -# Function to upgrade all uv-managed tools -upgrade_tools() -{ - msgr run "Upgrading all uv-managed tools" - uv tool upgrade --all - return 0 -} - -# Install Python tools, libraries, and upgrade all -main() -{ - install_tools - install_libraries - upgrade_tools - msgr yay "Python package installations complete" - return 0 -} - -main "$@" +install_libraries \ + && msgr yay "Python library installations complete" diff --git a/scripts/install-shellspec.sh b/scripts/install-shellspec.sh index 7f3501e..6448859 100755 --- a/scripts/install-shellspec.sh +++ b/scripts/install-shellspec.sh @@ -23,8 +23,8 @@ install_shellspec() fi msgr run "Running make install..." - make -C "$SHELLSPEC_CACHE" install PREFIX="$HOME/.local" - msgr run_done "shellspec $version installed to $HOME/.local/bin/shellspec" + make -C "$SHELLSPEC_CACHE" install PREFIX="$HOME/.local" \ + && msgr run_done "shellspec $version installed to $HOME/.local/bin/shellspec" return 0 } diff --git a/scripts/install-z.sh b/scripts/install-z.sh index b40e7e9..cdd315b 100755 --- a/scripts/install-z.sh +++ b/scripts/install-z.sh @@ -15,8 +15,8 @@ clone_z_repo() local bin_path=$2 if [[ ! -d "$bin_path" ]]; then - git clone "$git_path" "$bin_path" - msgr run_done "z installed at $bin_path" + git clone "$git_path" "$bin_path" \ + && msgr run_done "z installed at $bin_path" else msgr ok "z ($bin_path/) already installed" fi diff --git a/yarn.lock b/yarn.lock index 28c6b2f..73887e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,244 +1,385 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! +__metadata: + version: 8 + cacheKey: 10c0 -"@biomejs/biome@^2.4.4": - version "2.4.7" - resolved "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.7.tgz" - integrity sha512-vXrgcmNGZ4lpdwZSpMf1hWw1aWS6B+SyeSYKTLrNsiUsAdSRN0J4d/7mF3ogJFbIwFFSOL3wT92Zzxia/d5/ng== - optionalDependencies: - "@biomejs/cli-darwin-arm64" "2.4.7" - "@biomejs/cli-darwin-x64" "2.4.7" - "@biomejs/cli-linux-arm64" "2.4.7" - "@biomejs/cli-linux-arm64-musl" "2.4.7" - "@biomejs/cli-linux-x64" "2.4.7" - "@biomejs/cli-linux-x64-musl" "2.4.7" - "@biomejs/cli-win32-arm64" "2.4.7" - "@biomejs/cli-win32-x64" "2.4.7" - -"@biomejs/cli-darwin-arm64@2.4.7": - version "2.4.7" - resolved "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.7.tgz" - integrity sha512-Oo0cF5mHzmvDmTXw8XSjhCia8K6YrZnk7aCS54+/HxyMdZMruMO3nfpDsrlar/EQWe41r1qrwKiCa2QDYHDzWA== - -"@biomejs/cli-darwin-x64@2.4.7": - version "2.4.7" - resolved "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.7.tgz" - integrity sha512-I+cOG3sd/7HdFtvDSnF9QQPrWguUH7zrkIMMykM3PtfWU9soTcS2yRb9Myq6MHmzbeCT08D1UmY+BaiMl5CcoQ== - -"@biomejs/cli-linux-arm64-musl@2.4.7": - version "2.4.7" - resolved "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.7.tgz" - integrity sha512-I2NvM9KPb09jWml93O2/5WMfNR7Lee5Latag1JThDRMURVhPX74p9UDnyTw3Ae6cE1DgXfw7sqQgX7rkvpc0vw== - -"@biomejs/cli-linux-arm64@2.4.7": - version "2.4.7" - resolved "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.7.tgz" - integrity sha512-om6FugwmibzfP/6ALj5WRDVSND4H2G9X0nkI1HZpp2ySf9lW2j0X68oQSaHEnls6666oy4KDsc5RFjT4m0kV0w== - -"@biomejs/cli-linux-x64-musl@2.4.7": - version "2.4.7" - resolved "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.7.tgz" - integrity sha512-00kx4YrBMU8374zd2wHuRV5wseh0rom5HqRND+vDldJPrWwQw+mzd/d8byI9hPx926CG+vWzq6AeiT7Yi5y59g== - -"@biomejs/cli-linux-x64@2.4.7": - version "2.4.7" - resolved "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.7.tgz" - integrity sha512-bV8/uo2Tj+gumnk4sUdkerWyCPRabaZdv88IpbmDWARQQoA/Q0YaqPz1a+LSEDIL7OfrnPi9Hq1Llz4ZIGyIQQ== - -"@biomejs/cli-win32-arm64@2.4.7": - version "2.4.7" - resolved "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.7.tgz" - integrity sha512-hOUHBMlFCvDhu3WCq6vaBoG0dp0LkWxSEnEEsxxXvOa9TfT6ZBnbh72A/xBM7CBYB7WgwqboetzFEVDnMxelyw== - -"@biomejs/cli-win32-x64@2.4.7": - version "2.4.7" - resolved "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.7.tgz" - integrity sha512-qEpGjSkPC3qX4ycbMUthXvi9CkRq7kZpkqMY1OyhmYlYLnANnooDQ7hDerM8+0NJ+DZKVnsIc07h30XOpt7LtQ== - -"@types/node@^25.3.2": - version "25.5.0" - resolved "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz" - integrity sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw== +"@biomejs/biome@npm:^2.4.4": + version: 2.4.7 + resolution: "@biomejs/biome@npm:2.4.7" dependencies: - undici-types "~7.18.0" + "@biomejs/cli-darwin-arm64": "npm:2.4.7" + "@biomejs/cli-darwin-x64": "npm:2.4.7" + "@biomejs/cli-linux-arm64": "npm:2.4.7" + "@biomejs/cli-linux-arm64-musl": "npm:2.4.7" + "@biomejs/cli-linux-x64": "npm:2.4.7" + "@biomejs/cli-linux-x64-musl": "npm:2.4.7" + "@biomejs/cli-win32-arm64": "npm:2.4.7" + "@biomejs/cli-win32-x64": "npm:2.4.7" + dependenciesMeta: + "@biomejs/cli-darwin-arm64": + optional: true + "@biomejs/cli-darwin-x64": + optional: true + "@biomejs/cli-linux-arm64": + optional: true + "@biomejs/cli-linux-arm64-musl": + optional: true + "@biomejs/cli-linux-x64": + optional: true + "@biomejs/cli-linux-x64-musl": + optional: true + "@biomejs/cli-win32-arm64": + optional: true + "@biomejs/cli-win32-x64": + optional: true + bin: + biome: bin/biome + checksum: 10c0/c073da6f081b72e061e471f6bc6d8680978dceb84a3528cb58117466d38ecb7cef075d949875d2371a268af030c2afece0fb6dd593d124fc8706c9307909f244 + languageName: node + linkType: hard -balanced-match@^4.0.2: - version "4.0.4" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz" - integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== +"@biomejs/cli-darwin-arm64@npm:2.4.7": + version: 2.4.7 + resolution: "@biomejs/cli-darwin-arm64@npm:2.4.7" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard -bats@^1.13.0: - version "1.13.0" - resolved "https://registry.npmjs.org/bats/-/bats-1.13.0.tgz" - integrity sha512-giSYKGTOcPZyJDbfbTtzAedLcNWdjCLbXYU3/MwPnjyvDXzu6Dgw8d2M+8jHhZXSmsCMSQqCp+YBsJ603UO4vQ== +"@biomejs/cli-darwin-x64@npm:2.4.7": + version: 2.4.7 + resolution: "@biomejs/cli-darwin-x64@npm:2.4.7" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard -brace-expansion@^5.0.2: - version "5.0.4" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz" - integrity sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg== +"@biomejs/cli-linux-arm64-musl@npm:2.4.7": + version: 2.4.7 + resolution: "@biomejs/cli-linux-arm64-musl@npm:2.4.7" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@biomejs/cli-linux-arm64@npm:2.4.7": + version: 2.4.7 + resolution: "@biomejs/cli-linux-arm64@npm:2.4.7" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@biomejs/cli-linux-x64-musl@npm:2.4.7": + version: 2.4.7 + resolution: "@biomejs/cli-linux-x64-musl@npm:2.4.7" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@biomejs/cli-linux-x64@npm:2.4.7": + version: 2.4.7 + resolution: "@biomejs/cli-linux-x64@npm:2.4.7" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@biomejs/cli-win32-arm64@npm:2.4.7": + version: 2.4.7 + resolution: "@biomejs/cli-win32-arm64@npm:2.4.7" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@biomejs/cli-win32-x64@npm:2.4.7": + version: 2.4.7 + resolution: "@biomejs/cli-win32-x64@npm:2.4.7" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@types/node@npm:^25.3.2": + version: 25.5.0 + resolution: "@types/node@npm:25.5.0" dependencies: - balanced-match "^4.0.2" + undici-types: "npm:~7.18.0" + checksum: 10c0/70c508165b6758c4f88d4f91abca526c3985eee1985503d4c2bd994dbaf588e52ac57e571160f18f117d76e963570ac82bd20e743c18987e82564312b3b62119 + languageName: node + linkType: hard -debug@^4.3.4: - version "4.4.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== +"balanced-match@npm:^4.0.2": + version: 4.0.4 + resolution: "balanced-match@npm:4.0.4" + checksum: 10c0/07e86102a3eb2ee2a6a1a89164f29d0dbaebd28f2ca3f5ca786f36b8b23d9e417eb3be45a4acf754f837be5ac0a2317de90d3fcb7f4f4dc95720a1f36b26a17b + languageName: node + linkType: hard + +"bats@npm:^1.13.0": + version: 1.13.0 + resolution: "bats@npm:1.13.0" + bin: + bats: bin/bats + checksum: 10c0/7f697d6305d80d328d620bd58c658f7830fbed57e28a43f18771d89fb6f941a131b440ab18d951fd15fdd23f3c687687d607d7fc03ac4c99f4725e64d2432832 + languageName: node + linkType: hard + +"brace-expansion@npm:^5.0.2": + version: 5.0.4 + resolution: "brace-expansion@npm:5.0.4" dependencies: - ms "^2.1.3" + balanced-match: "npm:^4.0.2" + checksum: 10c0/359cbcfa80b2eb914ca1f3440e92313fbfe7919ee6b274c35db55bec555aded69dac5ee78f102cec90c35f98c20fa43d10936d0cd9978158823c249257e1643a + languageName: node + linkType: hard -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -editorconfig-checker@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/editorconfig-checker/-/editorconfig-checker-6.1.1.tgz" - integrity sha512-kiOb6qaWpMNt7Z/43ba0Pa1Inhr2/t9nKbvEKtCeXJ5AesztoM9AgLOOQVB4QUv/nGjgz3xkbx4pcogVRD2NWw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -find-package-json@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/find-package-json/-/find-package-json-1.2.0.tgz" - integrity sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw== - -fs-extra@^11.1.1: - version "11.3.4" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz" - integrity sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== +"debug@npm:^4.3.4": + version: 4.4.3 + resolution: "debug@npm:4.4.3" dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 + languageName: node + linkType: hard -glob@^13.0.0: - version "13.0.6" - resolved "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz" - integrity sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw== +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"editorconfig-checker@npm:^6.1.1": + version: 6.1.1 + resolution: "editorconfig-checker@npm:6.1.1" + bin: + ec: dist/index.js + editorconfig-checker: dist/index.js + checksum: 10c0/0a46ce93e2821041c4b4bbf2ab9dc30e1b4eb03d3f20e5b14bbe45767f6f2aafd5e1310ea737c15402d8e193f702a421a814041e072584250e8a7d5e63d83741 + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"find-package-json@npm:^1.2.0": + version: 1.2.0 + resolution: "find-package-json@npm:1.2.0" + checksum: 10c0/85d6c97afb9f8f0deb0d344a1c4eb8027347cf4d61666c28d3ac3f913e916684441218682b3dd6f8ad570e5d43c96a7db521f70183d70df559d07e1f99cdc635 + languageName: node + linkType: hard + +"fs-extra@npm:^11.1.1": + version: 11.3.4 + resolution: "fs-extra@npm:11.3.4" dependencies: - minimatch "^10.2.2" - minipass "^7.1.3" - path-scurry "^2.0.2" + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/e08276f767a62496ae97d711aaa692c6a478177f24a85979b6a2881c9db9c68b8c2ad5da0bcf92c0b2a474cea6e935ec245656441527958fd8372cb647087df0 + languageName: node + linkType: hard -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -jsonfile@^6.0.1: - version "6.2.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz" - integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== +"glob@npm:^13.0.0": + version: 13.0.6 + resolution: "glob@npm:13.0.6" dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" + minimatch: "npm:^10.2.2" + minipass: "npm:^7.1.3" + path-scurry: "npm:^2.0.2" + checksum: 10c0/269c236f11a9b50357fe7a8c6aadac667e01deb5242b19c84975628f05f4438d8ee1354bb62c5d6c10f37fd59911b54d7799730633a2786660d8c69f1d18120a + languageName: node + linkType: hard -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"ivuorinen-dotfiles@workspace:.": + version: 0.0.0-use.local + resolution: "ivuorinen-dotfiles@workspace:." dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" + "@biomejs/biome": "npm:^2.4.4" + "@types/node": "npm:^25.3.2" + bats: "npm:^1.13.0" + editorconfig-checker: "npm:^6.1.1" + markdown-table-formatter: "npm:^1.7.0" + prettier: "npm:^3.8.1" + typescript: "npm:^5.9.3" + languageName: unknown + linkType: soft -lru-cache@^11.0.0: - version "11.2.7" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz" - integrity sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA== - -markdown-table-formatter@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/markdown-table-formatter/-/markdown-table-formatter-1.7.0.tgz" - integrity sha512-/yddr66lbp5N1HESvkJoFIQq2VUUdFoBEJ+jAU/Mm/H2xaK80Nq2e0ugkJPWCRrix4GXhTUAccbsg1tQg5jiew== +"jsonfile@npm:^6.0.1": + version: 6.2.0 + resolution: "jsonfile@npm:6.2.0" dependencies: - debug "^4.3.4" - find-package-json "^1.2.0" - fs-extra "^11.1.1" - glob "^13.0.0" - markdown-table-prettify "^3.6.0" - optionator "^0.9.4" + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d + languageName: node + linkType: hard -markdown-table-prettify@^3.6.0: - version "3.7.0" - resolved "https://registry.npmjs.org/markdown-table-prettify/-/markdown-table-prettify-3.7.0.tgz" - integrity sha512-woZ1X+u0HsTygXL5kcptMSDwnjU//3UKTOH6fGdaABSSLOxTdWjr2P6i7dVrru5t/pxyEOT48/skv/8m8/VqdA== - -minimatch@^10.2.2: - version "10.2.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz" - integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg== +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" dependencies: - brace-expansion "^5.0.2" + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard -minipass@^7.1.2, minipass@^7.1.3: - version "7.1.3" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz" - integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== +"lru-cache@npm:^11.0.0": + version: 11.2.7 + resolution: "lru-cache@npm:11.2.7" + checksum: 10c0/549cdb59488baa617135fc12159cafb1a97f91079f35093bb3bcad72e849fc64ace636d244212c181dfdf1a99bbfa90757ff303f98561958ee4d0f885d9bd5f7 + languageName: node + linkType: hard -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -optionator@^0.9.4: - version "0.9.4" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== +"markdown-table-formatter@npm:^1.7.0": + version: 1.7.0 + resolution: "markdown-table-formatter@npm:1.7.0" dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" + debug: "npm:^4.3.4" + find-package-json: "npm:^1.2.0" + fs-extra: "npm:^11.1.1" + glob: "npm:^13.0.0" + markdown-table-prettify: "npm:^3.6.0" + optionator: "npm:^0.9.4" + bin: + markdown-table-formatter: lib/index.js + checksum: 10c0/0f0d5eaec2c3bb9c60328ffbb4652305845def5387f4c87dd6e83559ef793961353af64ae44bce9cda3394469e419e046ae42fe7e9cafd47414b42deaa28f3b7 + languageName: node + linkType: hard -path-scurry@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz" - integrity sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg== +"markdown-table-prettify@npm:^3.6.0": + version: 3.7.0 + resolution: "markdown-table-prettify@npm:3.7.0" + bin: + markdown-table-prettify: cli/index.js + checksum: 10c0/f387b1ca81ceaa201bda2ce1db8e4d392a4d4ac3d7bb3173c7d9e3d9ca389e31d247eee2ccd2fa30f3132ae2447dc51285fb68636cdaf825633a43a499f41cd6 + languageName: node + linkType: hard + +"minimatch@npm:^10.2.4": + version: 10.2.4 + resolution: "minimatch@npm:10.2.4" dependencies: - lru-cache "^11.0.0" - minipass "^7.1.2" + brace-expansion: "npm:^5.0.2" + checksum: 10c0/35f3dfb7b99b51efd46afd378486889f590e7efb10e0f6a10ba6800428cf65c9a8dedb74427d0570b318d749b543dc4e85f06d46d2858bc8cac7e1eb49a95945 + languageName: node + linkType: hard -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +"minipass@npm:^7.1.2, minipass@npm:^7.1.3": + version: 7.1.3 + resolution: "minipass@npm:7.1.3" + checksum: 10c0/539da88daca16533211ea5a9ee98dc62ff5742f531f54640dd34429e621955e91cc280a91a776026264b7f9f6735947629f920944e9c1558369e8bf22eb33fbb + languageName: node + linkType: hard -prettier@^3.8.1: - version "3.8.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz" - integrity sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg== +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== +"optionator@npm:^0.9.4": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" dependencies: - prelude-ls "^1.2.1" + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard -typescript@^5.9.3: - version "5.9.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz" - integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== +"path-scurry@npm:^2.0.2": + version: 2.0.2 + resolution: "path-scurry@npm:2.0.2" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10c0/b35ad37cf6557a87fd057121ce2be7695380c9138d93e87ae928609da259ea0a170fac6f3ef1eb3ece8a068e8b7f2f3adf5bb2374cf4d4a57fe484954fcc9482 + languageName: node + linkType: hard -undici-types@~7.18.0: - version "7.18.2" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz" - integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== +"prettier@npm:^3.8.1": + version: 3.8.1 + resolution: "prettier@npm:3.8.1" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/33169b594009e48f570471271be7eac7cdcf88a209eed39ac3b8d6d78984039bfa9132f82b7e6ba3b06711f3bfe0222a62a1bfb87c43f50c25a83df1b78a2c42 + languageName: node + linkType: hard -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== \ No newline at end of file +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"typescript@npm:^5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + languageName: node + linkType: hard + +"undici-types@npm:~7.18.0": + version: 7.18.2 + resolution: "undici-types@npm:7.18.2" + checksum: 10c0/85a79189113a238959d7a647368e4f7c5559c3a404ebdb8fc4488145ce9426fcd82252a844a302798dfc0e37e6fb178ff481ed03bc4caf634c5757d9ef43521d + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard