yay uses the same -S --noconfirm interface as paru. Detection priority
is paru > yay > pacman so paru is preferred when both are present.
When installing paru itself via paru-build special, yay -S paru is
offered as a method when yay is available, in addition to the
makepkg-from-source fallback.
Older fzf (pre-0.62) does not support the focus and resize events in
bind actions, causing a startup error when --fish or the bundled
integration is sourced. Split the FZF_DEFAULT_OPTS preview block into
an if/else: newer fzf gets the dynamic bg-transform bind with wrap-word;
older fzf gets a static preview window with plain wrap and no event bind.
- config.fish: add ~/.fzf/bin to PATH for git-installed fzf
- config.fish: prefer fzf --fish | source (fzf >= 0.48, always
version-matched) with fallback to integrations/fzf.fish for
older builds; erase plugin bindings reliably when fzf is absent
- functions/fzf-update.fish: install or upgrade fzf from git HEAD
using --bin so shell config files are not modified
conf.d/fzf.fish is owned by Fisher and gets restored to the plugin's
original on fisher update, so any guard placed there is unreliable.
config.fish is never touched by Fisher, making it the right place to
call _fzf_uninstall_bindings after conf.d has already run and set up
the fzf key bindings on machines where fzf is not installed.
toggle-raw is unavailable in fzf 0.60 devel. Gate it alongside
preview-wrap-sign using the existing _fzf_transform_action check,
consolidating both version-conditional variables into one block.
preview-wrap-sign is unavailable in fzf 0.60 devel. Reuse the
existing _fzf_transform_action gate to conditionally append it
to the history widget base options, keeping parity with the
wrap-word and bg-transform fallbacks.
wrap-word in --preview-window was added alongside bg-transform.
Reuse the existing _fzf_transform_action variable (already inherited
by fzf-history-widget) to select wrap-word on newer fzf and plain
wrap on older builds — no additional version check needed.
Detect fzf version once at shell startup inside fzf_key_bindings.
Use bg-transform (non-blocking) on fzf >= 0.62 and the synchronous
transform on older builds (e.g. 0.60 devel which lacks bg-transform).
The chosen action is captured into fzf-history-widget via fish's
--inherit-variable so the check runs once, not on every Ctrl+R press.
- conf.d/fzf.fish: skip fzf_configure_bindings if fzf is not in PATH
- key_bindings.fish: only bind Ctrl+Alt+= when qalc is installed
- _qalc_eval: return 1 early if qalc is absent so callers can react
- _smart_execute: fall back to normal execute when _qalc_eval returns 1
- integrations/fzf.fish: replace bg-transform with transform (available
since fzf 0.53; bg-transform requires a newer version and caused
"unknown action" errors on fzf 0.60 devel)
The CDPATH regression was introduced when unifying completions: the `z`
function only checked `test -d` (absolute path existence) before falling
through to zoxide query, silently ignoring CDPATH-relative directories.
Now mirrors the completion logic — checks direct path, then each CDPATH
prefix, then zoxide — so `cd subdir` resolves correctly when `subdir`
lives under a CDPATH entry.
- Add copyright + SPDX header to functions/zoxide.fish and
conf.d/zoxide.fish (modified from original, owned by Rootiest)
- Add sourced-from attribution to completions/zoxide.fish
(unmodified from icezyclon/zoxide.fish, MIT)
cdi was documented and expected to work as an interactive zoxide
directory picker but was never defined as a function, causing it
to silently fail. Wraps zi so completions are inherited correctly.
Previous to this commit, tab completion and auto-suggestions for cd/z
were inconsistent — only one or two of: CWD, CDPATH, and zoxide frecency
results would work at a time, with different sourced matches shown in
tab completion, shown in auto-suggest, and execution after pressing
<Enter>.
- Add _zoxide_z_complete in functions/zoxide.fish that merges all three
sources into a single completion list (CWD via __fish_complete_cd,
CDPATH via __fish_complete_directories, zoxide via query -l capped at
25)
- Wire the new completer to both z and cd via complete directives in
conf.d/zoxide.fish, replacing the previous incomplete approach
- Add completions/zoxide.fish for full tab completion of the zoxide CLI
itself (add, query, remove, import, init subcommands)
- Update README to document the unified completion behavior and fix
structural issues in Personalization/Attribution/Dependencies sections
Consolidates and expands the .gitignore to ignore various temporary and
testing directories. This allows for local experimentation with new
ideas
and the preservation of disabled functions without the risk of
accidentally committing them to the repository.
- Add _smart_execute: context-aware Ctrl+Enter that routes to qalc when
the buffer ends with '=', or falls through to standard execute otherwise
- Refactor qalc_eval → _qalc_eval (private helper, same behavior)
- Bind Ctrl+Enter to _smart_execute in all vi modes
- Add fast-cli wrapper (fast.com speed test) and fast placeholder with
a friendly ANSI redirect message
- Add speedtest-fast abbreviation expanding to fast-cli
- Enhance _replace_command_token to handle sudo-prefixed commands: places
cursor at index 5 (between sudo and the replacement slot)
- Improve rm error reporting: colored output, culprit-path listing, and
cleaned technical detail for non-missing-file errors
- Add SPDX copyright headers to cat, ld, claude-docs, claude-pr functions
- Update README: Ctrl+Enter binding, fast-cli/fast functions, speedtest-fast abbr
Replace hardcoded \$HOME/.config/fish paths with the canonical
\$__fish_config_dir variable for portability. Add proper quoting around
all path strings. Introduce a dot_fish local variable to reduce
repetition in user-dots sourcing blocks. Add LESS=-R for color support
in the pager.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add two Claude Code helper functions to streamline common dev workflows:
- `claude-docs`: triggers Claude to sync README.md with recent session changes
- `claude-pr`: triggers Claude to create a branch, commit, push, and open a PR
Also add `.claude` to .gitignore and document both functions in README.md.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Documents the new inline Qalculate! evaluator shortcut added in the
recent config refactor, so users know it exists and how to use it.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Restructure and expand the Fish shell configuration for better XDG compliance,
interactive-session gating, modularity, and ergonomics.
config.fish:
- Add full XDG Base Directory variable block (XDG_CONFIG_HOME, XDG_CACHE_HOME,
XDG_DATA_HOME, XDG_STATE_HOME) and redirect tool caches/configs accordingly
(cargo, rustup, go, bun, npm, gnupg, wakatime, wget, nvidia, codeium, etc.)
- Add editor setup with `type -q nvim` guard and NVIM_APPNAME
- Add CDPATH block (., ~/projects, ~) with explanatory comments
- Gate all interactive-only setup (key bindings, FZF, direnv, starship, secrets,
local overrides, CLAUDE_CODE_NO_FLICKER) behind `status is-interactive`
- Guard FZF integration source behind a file-existence check
- Move secrets.fish and local.fish sourcing into the interactive block as overrides
- Remove obsolete universal `cdp` variable and duplicate PATH/editor blocks
- Update PATH entries to use XDG-resolved $CARGO_HOME and $BUN_INSTALL
conf.d/theme.fish:
- Move FZF_DEFAULT_OPTS (Catppuccin Mocha palette) from config.fish into theme.fish
so all theming lives in one place
- Add section header for FZF colors; condense file header comment
conf.d/abbr.fish:
- Add `/exit` abbreviation as a vim-style alias for the `exit` builtin
conf.d/key_bindings.fish:
- Bind Ctrl+Alt+= to new `qalc_eval` function (inline Qalculate! evaluation)
- Add binding in both normal and all Vi modes
- Add descriptive comment block explaining the keybinding purpose
functions/bash.fish:
- Pass `--rcfile "$XDG_CONFIG_HOME/bash/bashrc"` so bash respects XDG config location
functions/cat.fish:
- Extend cat wrapper: detect directory arguments and delegate to `ls` instead of bat
- Preserve stdin-passthrough behavior when no arguments are provided
functions/__auto_source_fallback_venv.fish (new):
- Extract auto-venv PWD watcher from config.fish into its own autoloaded function file
- Skips activation when direnv manages the directory (.envrc present or DIRENV_DIR set)
- Deactivates venv when leaving its project tree
functions/ld.fish (new):
- Wrapper for lazydocker that injects the active Docker context's DOCKER_HOST,
enabling correct context-aware operation
functions/joplin.fish (new):
- Joplin CLI wrapper function
functions/qalc_eval.fish (new):
- Inline Qalculate! evaluator: reads the current commandline buffer, passes it to
`qalc`, prints the result, and clears the buffer for rapid-fire math in the shell
README.md:
- Remove stale `cdp` variable example from the local.fish documentation section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add comprehensive `--description` flags to all fish functions for better `help` and `functions` output.
- Introduce and correct `--wraps` flags to ensure proper completions for aliased commands (e.g., `top` wrapping `btop`, `zellij`, `upgrade` wrapping `paru`).
- Prepend descriptive comments before function definitions for better source readability.
- Add standard copyright and SPDX license identifiers to shell scripts.
- Enhance script robustness by ensuring consistent terminal checks (Kitty, WezTerm) and graceful fallbacks in window/tab spawning functions (`spwin`, `tab`).
- Implement graceful fallbacks to basic core utilities when preferred modern alternatives are missing (e.g., `top` falling back to system `top` if `btop` is missing, `view` falling back to `less` or `cat` if `nvim` is unavailable).
- Improve overall code consistency across the `functions/` directory.
- Wrap Kitty-specific abbreviations and functions with $TERM checks
- Resurrect WezTerm abbreviations and wrap with $TERM_PROGRAM checks
- Add check_fish_deps function to list and verify all fish-related dependencies
- Update README to recommend Kitty and WezTerm and document requirements
- Improve fallback behavior for rg outside of Kitty
- A bootstrap script in the config.fish file handles automatic
installation of fisher and the included plugins upon launching the shell
for the first time
- `cd` is now essentially aliased to `z` allowing frecency matching for
`cd` commands.
- `cdi` is now aliased to `zi` allowing interactive frecency matching
for `cd` commands.