Compare commits

...

53 Commits

Author SHA1 Message Date
renovate[bot]
4e0e4b8883 fix(github-action): update ivuorinen/actions (25.7.21 → 25.7.28) (#156)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-02 10:43:13 +00:00
renovate[bot]
5b6f43e22f chore(deps): update node.js to v22.18.0 (#157) 2025-08-02 13:42:23 +03:00
ca594f9b2d chore(config): zed: php formatter
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-30 18:09:30 +03:00
685a843d78 chore(config): tms: use rose pine colors
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-30 18:08:56 +03:00
470acd8956 chore(config): fish: add ivuorinen/phpenv.fish
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-30 18:08:34 +03:00
a6907d890e chore: update configs, add .go-version 2025-07-29 14:13:52 +03:00
renovate[bot]
c37fdb7cd3 fix(github-action): update ivuorinen/actions (25.7.14 → 25.7.21) (#154)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-24 12:44:02 +03:00
bad1ce2a34 chore(fish): add bob completions
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-24 11:43:33 +03:00
e67d4285b6 chore(nvim): tweak plugins
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-24 11:42:58 +03:00
f577ad28a9 chore(deps): update yarn dependencies
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-24 11:41:39 +03:00
github-actions[bot]
e9ac5e48ac chore: update pre-commit hooks (#155)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2025-07-24 11:15:17 +03:00
github-actions[bot]
cc01f4fdde chore: update pre-commit hooks (#153)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2025-07-21 09:08:43 +03:00
52a5f226e9 chore(nvim): plugin cleanup
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-18 17:10:38 +03:00
github-actions[bot]
9b94302270 chore: update pre-commit hooks (#152)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2025-07-17 11:49:04 +03:00
renovate[bot]
fe7e9173d0 fix(github-action): update ivuorinen/actions (25.7.7 → 25.7.14) (#151)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-16 20:57:27 +03:00
renovate[bot]
fb5aae3deb chore(deps): update node.js to v22.17.1 (#150)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-16 15:43:54 +03:00
036392d38a fix(ci): editorconfig-linter config version 2025-07-16 13:51:44 +03:00
2cb11292d4 chore(fish): add pinact completions file 2025-07-16 13:39:04 +03:00
a163d6338a chore(config): upgrade editorconfig-linter config 2025-07-16 13:38:27 +03:00
191488c081 chore(git): add masf to git profile 2025-07-13 21:09:32 +03:00
cc47614280 chore(git): move gitignore to ignore 2025-07-13 21:09:11 +03:00
91cde60dba fix(scripts): resolve shellcheck warnings (#148) 2025-07-10 17:44:36 +03:00
5dea757707 chore(config): remove aqua from go packages
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-10 12:38:54 +03:00
f8833fca73 chore(zed): add templ, add requirements
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-10 12:38:26 +03:00
9cd99dbc88 chore(zed): update theme, update config
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-10 12:37:26 +03:00
14f67cb5ca chore(yabai): ignore golang
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-10 12:19:24 +03:00
github-actions[bot]
4ce76fbd70 chore: update pre-commit hooks (#147) 2025-07-10 09:36:39 +03:00
renovate[bot]
ca68803fb9 feat(github-action): update ivuorinen/actions (25.6.30 → 25.7.7) (#146) 2025-07-09 15:29:09 +03:00
fb97f10f64 chore(nvim): lax hardtime rules
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-08 01:34:33 +03:00
6dbbc439b3 feat(nvim): switch to rose pine
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-08 01:33:18 +03:00
368fbfc7c8 feat(fish): cr function
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-07 22:32:08 +03:00
d6d5a8ca36 feat(shell): patrickf1/fzf.fish
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-07-07 14:29:45 +03:00
github-actions[bot]
d65c25819f chore: update pre-commit hooks (#145) 2025-07-07 09:45:56 +03:00
renovate[bot]
62c620efad fix(github-action): update ivuorinen/actions (25.6.25 → 25.6.30) (#144) 2025-07-03 09:45:24 +03:00
07fe18af75 fix(scripts): correct usage and help exit status (#143) 2025-06-30 08:51:06 +03:00
renovate[bot]
29d3676b38 fix(github-action): update ivuorinen/actions (25.6.23 → 25.6.25) (#142) 2025-06-30 08:04:34 +03:00
0b9e1803d4 docs(agents): update instructions for yarn (#141) 2025-06-30 07:59:58 +03:00
github-actions[bot]
c45ad9710d chore: update pre-commit hooks (#140) 2025-06-30 07:52:04 +03:00
cf7ca2109f feat: add bats tests, docs (#139)
* fix(test): ensure bats file list uses xargs

* docs(readme): use yarn for testing instructions

* fix(test): ensure pipelines fail properly

* docs(alias): fix table header

---------

Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-30 04:30:06 +03:00
1531647e01 feat(ci): use pr-lint action instead of reviewdog (#136) 2025-06-30 03:21:47 +03:00
github-actions[bot]
15aff17f03 chore: update pre-commit hooks (#138)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2025-06-26 10:21:22 +03:00
renovate[bot]
42a5b79048 chore(deps): update node.js to v22.17.0 (#137) 2025-06-25 17:13:11 +03:00
a72c8ff33a chore(config): zed config update 2025-06-24 04:42:23 +03:00
19d9035214 chore(config): don't format config/op/plugins 2025-06-23 20:04:50 +03:00
7ca077c852 fix(ci): typo
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-23 20:00:04 +03:00
48604d81d6 fix(ci): add actions/setup-node to linters.yml
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-23 19:57:34 +03:00
github-actions[bot]
405e68f895 chore: update pre-commit hooks (#135) 2025-06-23 10:18:13 +03:00
6d62352127 chore(deps): update fisher plugins, add jgusta/paths 2025-06-22 11:44:41 +03:00
017d82abc5 fix(bin): path append quoting (#130) 2025-06-21 21:32:23 +03:00
github-actions[bot]
24ad4bf5b7 chore: update pre-commit hooks (#128)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2025-06-19 13:10:14 +03:00
07264c594f chore(config): ideavim config tweaks
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-16 14:03:00 +03:00
github-actions[bot]
7b58f660ac chore: update pre-commit hooks (#127) 2025-06-16 07:33:21 +03:00
renovate[bot]
b000f2b0c4 fix(container): update image python (3.13.4 → 3.13.5) (#126) 2025-06-14 09:53:35 +03:00
194 changed files with 4479 additions and 767 deletions

View File

@@ -1,9 +1,9 @@
{
"Version": "2.7.0",
"Version": "v3.3.0",
"Verbose": false,
"Debug": false,
"IgnoreDefaults": false,
"SpacesAftertabs": false,
"SpacesAfterTabs": false,
"NoColor": false,
"Exclude": [],
"AllowedContentTypes": [],

5
.gitattributes vendored
View File

@@ -85,6 +85,7 @@ LICENSE text
NEWS text
readme text
*README* text
# Files literally named "TODO", not a todo list item
TODO text
# Templates
@@ -122,7 +123,8 @@ package.json text eol=lf
package-lock.json text eol=lf -diff
pnpm-lock.yaml text eol=lf -diff
.prettierrc text
yarn.lock text -diff
# Ensure yarn.lock shows textual diffs
yarn.lock text eol=lf
*.toml text
*.yaml text
*.yml text
@@ -251,3 +253,4 @@ install text eol=lf diff=shell
*.snippets text eol=lf
*.theme text eol=lf
*.yamlfmt text eol=lf
*.bats text eol=lf diff=shell

30
.github/AGENTS.md vendored Normal file
View File

@@ -0,0 +1,30 @@
# Guidelines for AI contributors
These instructions help language models work with this repository.
## Setup
1. Run `yarn install` to get linting tools and the Bats test framework.
## Formatting
- Format code and docs with Prettier and markdownlint:
```bash
yarn fix:prettier
yarn fix:markdown
```
- Shell scripts should pass `shellcheck`.
## Testing
- When code changes, run `yarn test` to execute Bats tests.
- If only comments or documentation change, tests may be skipped.
## Commits and PRs
- Use Semantic Commit messages: `type(scope): summary`.
- Keep PR titles in the same format.
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

View File

@@ -60,7 +60,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
ismo@ivuorinen.net.
<ismo@ivuorinen.net>.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
@@ -116,7 +116,7 @@ the community.
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
<https://www.contributor-covenant.org/version/2/0/code_of_conduct.html>.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
@@ -124,5 +124,5 @@ enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.
<https://www.contributor-covenant.org/faq>. Translations are available at
<https://www.contributor-covenant.org/translations>.

46
.github/README.md vendored
View File

@@ -43,6 +43,12 @@ see what interesting stuff you've done with it. Sharing is caring.
| `local/bin` | Helper scripts that I've collected or wrote. |
| `scripts` | Setup scripts. |
### Host specific configuration
Configurations under `hosts/<hostname>` are applied only when running on the
matching machine. Each host folder contains its own `install.conf.yaml` that
is processed by Dotbot during installation.
### dotfile folders
| Repo | Destination | Description |
@@ -58,6 +64,21 @@ see what interesting stuff you've done with it. Sharing is caring.
Running `dfm` gives you a list of available commands.
#### Documentation generation
`dfm docs` generates Markdown documentation under the `docs/` directory. The
subcommands are:
```bash
dfm docs alias # regenerate alias table
dfm docs folders # document interesting folders
dfm docs keybindings # update keybinding docs for tmux, nvim and others
dfm docs all # run every docs task
```
The `docs/` folder contains generated cheat sheets, keybindings and other
reference files. New documentation can be added without modifying this README.
## Configuration
The folder structure follows [XDG Base Directory Specification][xdg] where possible.
@@ -73,6 +94,31 @@ The folder structure follows [XDG Base Directory Specification][xdg] where possi
Please see [docs/folders.md][docs-folders] for more information.
## Managing submodules
This repository uses Git submodules for external dependencies. After cloning,
run:
```bash
git submodule update --init --recursive
```
To pull submodule updates later use:
```bash
git submodule update --remote --merge
```
The helper script `add-submodules.sh` documents how each submodule is added and
configured. Submodules are automatically updated by the
[update-submodules.yml](.github/workflows/update-submodules.yml) workflow.
## Testing
Shell scripts under `local/bin` are validated with [Bats](https://github.com/bats-core/bats-core).
Run `yarn test` to execute every test file. Bats is installed as a development
dependency, so run `yarn install` first if needed.
[dfm]: https://github.com/ivuorinen/dotfiles/blob/main/local/bin/dfm
[docs-folders]: https://github.com/ivuorinen/dotfiles/blob/main/docs/folders.md
[xdg]: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html

View File

@@ -1,5 +1,5 @@
---
# yaml-language-server: https://json.schemastore.org/github-workflow.json
# $schema: "https://json.schemastore.org/github-workflow.json"
name: Debug Changelog # Workflow name displayed on GitHub
on:

View File

@@ -1,8 +1,10 @@
---
# yaml-language-server: https://json.schemastore.org/github-workflow.json
name: Reviewdog
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: Lint Code Base
on: [push]
on:
pull_request:
branches: [master, main]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -11,47 +13,24 @@ concurrency:
permissions: read-all
jobs:
linters:
name: Linters
runs-on: self-hosted
permissions: write-all
Linter:
name: PR Lint
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
statuses: write
contents: read
packages: read
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: GitHub Actions
uses: reviewdog/action-actionlint@a5524e1c19e62881d79c1f1b9b6f09f16356e281 # v1.65.2
- name: Yarn Lock Changes
uses: Simek/yarn-lock-changes@34017425198654c20162a4dfd4f238fbece9636f # v0.12.1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
token: ${{ secrets.GITHUB_TOKEN }}
- name: detect-secrets
uses: reviewdog/action-detect-secrets@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
- name: markdownlint
uses: reviewdog/action-markdownlint@3667398db9118d7e78f7a63d10e26ce454ba5f58 # v0.26.2
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
- name: shfmt
uses: reviewdog/action-shfmt@d8f080930b9be5847b4f97e9f4122b81a82aaeac # v1.0.4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
shfmt_flags: |
--find
--list
--write
--diff
--simplify
--language-dialect bash
--indent 2
--binary-next-line
--case-indent
--space-redirects
--func-next-line
- name: Run PR Lint
# https://github.com/ivuorinen/actions
uses: ivuorinen/actions/pr-lint@1018ccd7fe3d4520222a558d7d5f701515c45af0 # 25.7.28

View File

@@ -1,5 +1,5 @@
---
# yaml-language-server: https://json.schemastore.org/github-workflow.json
# $schema: "https://json.schemastore.org/github-workflow.json"
name: Release Daily State
on:

View File

@@ -1,5 +1,5 @@
---
# yaml-language-server: https://json.schemastore.org/github-workflow.json
# $schema: "https://json.schemastore.org/github-workflow.json"
name: Pre-commit autoupdate
on:
@@ -16,7 +16,7 @@ permissions: read-all
jobs:
auto-update:
runs-on: ubuntu-latest
runs-on: self-hosted
permissions:
contents: write

View File

@@ -1,5 +1,5 @@
---
# yaml-language-server: https://json.schemastore.org/github-workflow.json
# $schema: "https://json.schemastore.org/github-workflow.json"
name: Semantic PR
on:

View File

@@ -1,5 +1,5 @@
---
# yaml-language-server: https://json.schemastore.org/github-workflow.json
# $schema: "https://json.schemastore.org/github-workflow.json"
name: Sync labels
# yamllint disable-line rule:truthy
@@ -23,10 +23,10 @@ permissions: read-all
jobs:
SyncLabels:
runs-on: ubuntu-latest
runs-on: self-hosted
permissions:
issues: write
steps:
- uses: ivuorinen/actions/sync-labels@main
- uses: ivuorinen/actions/sync-labels@1018ccd7fe3d4520222a558d7d5f701515c45af0 # 25.7.28

View File

@@ -1,5 +1,5 @@
---
# yaml-language-server: https://json.schemastore.org/github-workflow.json
# $schema: "https://json.schemastore.org/github-workflow.json"
name: Update submodules
on:

1
.go-version Normal file
View File

@@ -0,0 +1 @@
1.23.0

View File

@@ -1,6 +1,7 @@
# only care about files that are directly under our control
config/cheat/cheatsheets/community/*
config/cheat/cheatsheets/tldr/*
config/op/plugins/used_plugins/*
config/tmux/plugins/*
local/bin/asdf/*
tools/*

29
.mega-linter.yml Normal file
View File

@@ -0,0 +1,29 @@
---
# Configuration file for MegaLinter
# See all available variables at
# https://megalinter.io/configuration/ and in linters documentation
APPLY_FIXES: all
SHOW_ELAPSED_TIME: false # Show elapsed time at the end of MegaLinter run
PARALLEL: true
VALIDATE_ALL_CODEBASE: true
FILEIO_REPORTER: false # Generate file.io report
GITHUB_STATUS_REPORTER: true # Generate GitHub status report
IGNORE_GENERATED_FILES: true # Ignore generated files
JAVASCRIPT_DEFAULT_STYLE: prettier # Default style for JavaScript
PRINT_ALPACA: false # Print Alpaca logo in console
SARIF_REPORTER: true # Generate SARIF report
SHOW_SKIPPED_LINTERS: false # Show skipped linters in MegaLinter log
TYPESCRIPT_DEFAULT_STYLE: prettier # Default style for TypeScript
DISABLE_LINTERS:
- REPOSITORY_DEVSKIM
YAML_YAMLLINT_CONFIG_FILE: .yamllint.yml
MARKDOWN_MARKDOWNLINT_CONFIG_FILE: .markdownlint.json
JAVASCRIPT_ES_CONFIG_FILE: .eslintrc.json
TYPESCRIPT_ES_CONFIG_FILE: .eslintrc.json
FILTER_REGEX_EXCLUDE: >
(node_modules|tools|config/cheat/cheatsheets/community|config/cheat/cheatsheets/tldr|config/fzf|config/zsh|config/tmux/plugins)

2
.nvmrc
View File

@@ -1 +1 @@
22.16.0
22.18.0

View File

@@ -39,7 +39,7 @@ repos:
- id: shellcheck
- repo: https://github.com/scop/pre-commit-shfmt
rev: v3.11.0-1
rev: v3.12.0-2
hooks:
- id: shfmt
@@ -49,7 +49,7 @@ repos:
- id: actionlint
- repo: https://github.com/renovatebot/pre-commit-hooks
rev: 40.49.12
rev: 41.43.0
hooks:
- id: renovate-config-validator

View File

@@ -5,6 +5,7 @@ config/cheat/cheatsheets/community
config/cheat/cheatsheets/tldr
config/fzf/*
config/nvim/*
config/op/plugins/used_plugins/*
config/tmux/plugins/*
config/zsh/*
lazy-lock.json

View File

@@ -1 +1 @@
3.13.4
3.13.5

34
AGENTS.md Normal file
View File

@@ -0,0 +1,34 @@
# Project guidelines
This repository contains configuration files and helper scripts for managing a development environment. Dotbot drives the installation and host specific folders under `hosts/` include extra configs.
## Keeping the repository up to date
1. Update submodules with `git submodule update --remote --merge`.
2. Pull the latest changes and run `./install`.
3. Run `yarn install` whenever `package.json` changes.
## Linting and tests
- Format files with:
```bash
yarn fix:prettier
yarn fix:markdown
```
- Shell scripts must pass `shellcheck`. Run:
```bash
find . -path ./node_modules -prune -o -name '*.sh' -print0 | xargs -0 shellcheck
```
- Execute tests with `yarn test`.
## Debugging lint issues
- `yarn lint:prettier` and `yarn lint:markdown` show formatting errors.
- Ensure shell scripts have a shebang or `# shellcheck shell=bash` directive.
- Consult `.shellcheckrc` for project specific checks.
Scripts rely on helpers in `config/shared.sh` so they run under Bash, Zsh and Fish by default.

View File

@@ -20,6 +20,16 @@
"value": "Ismo Vuorinen"
}
],
"masf": [
{
"key": "user.email",
"value": "ismo@masf.fi"
},
{
"key": "user.name",
"value": "Ismo Vuorinen"
}
],
"work": [
{
"key": "user.email",

View File

@@ -1,8 +1,6 @@
// These are golang packages I use,
// so they should be available with all versions
// Aqua is a package manager like asdf, or Brew
github.com/aquaproj/aqua/v2/cmd/aqua@latest
// Git Profile allows you to switch between user profiles in git repos
github.com/dotzero/git-profile@v1.4.0
// An extensible command line tool or library to format yaml files.
@@ -21,3 +19,8 @@ github.com/rhysd/actionlint/cmd/actionlint@v1.7.1
github.com/doron-cohen/antidot@v0.6.3
// FZF is a general-purpose command-line fuzzy finder.
github.com/junegunn/fzf@latest
// gopls, the Go language server
golang.org/x/tools/gopls@latest
// A language for writing HTML user interfaces in Go.
github.com/a-h/templ/cmd/templ@latest

View File

@@ -1,4 +1,5 @@
### Do not edit. This was autogenerated by 'asdf direnv setup' ###
# shellcheck shell=bash
use_asdf() {
source_env "$(asdf direnv envrc "$@")"
}

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/completions/app.fish:v7.0.0
# @halostatue/fish-macos/completions/app.fish:v7.0.1
complete --command app --erase

View File

@@ -0,0 +1,71 @@
# Print an optspec for argparse to handle cmd's options that are independent of any subcommand.
function __fish_bob_global_optspecs
string join \n h/help V/version
end
function __fish_bob_needs_command
# Figure out if the current invocation already has a command.
set -l cmd (commandline -opc)
set -e cmd[1]
argparse -s (__fish_bob_global_optspecs) -- $cmd 2>/dev/null
or return
if set -q argv[1]
# Also print the command, so this can be used to figure out what it is.
echo $argv[1]
return 1
end
return 0
end
function __fish_bob_using_subcommand
set -l cmd (__fish_bob_needs_command)
test -z "$cmd"
and return 1
contains -- $cmd[1] $argv
end
complete -c bob -n "__fish_bob_needs_command" -s h -l help -d 'Print help'
complete -c bob -n "__fish_bob_needs_command" -s V -l version -d 'Print version'
complete -c bob -n "__fish_bob_needs_command" -f -a "use" -d 'Switch to the specified version, by default will auto-invoke install command if the version is not installed already'
complete -c bob -n "__fish_bob_needs_command" -f -a "install" -d 'Install the specified version, can also be used to update out-of-date nightly version'
complete -c bob -n "__fish_bob_needs_command" -f -a "sync" -d 'If Config::version_sync_file_location is set, the version in that file will be parsed and installed'
complete -c bob -n "__fish_bob_needs_command" -f -a "uninstall" -d 'Uninstall the specified version'
complete -c bob -n "__fish_bob_needs_command" -f -a "rm" -d 'Uninstall the specified version'
complete -c bob -n "__fish_bob_needs_command" -f -a "rollback" -d 'Rollback to an existing nightly rollback'
complete -c bob -n "__fish_bob_needs_command" -f -a "erase" -d 'Erase any change bob ever made, including neovim installation, neovim version downloads and registry changes'
complete -c bob -n "__fish_bob_needs_command" -f -a "list" -d 'List all installed and used versions'
complete -c bob -n "__fish_bob_needs_command" -f -a "ls" -d 'List all installed and used versions'
complete -c bob -n "__fish_bob_needs_command" -f -a "list-remote"
complete -c bob -n "__fish_bob_needs_command" -f -a "ls-remote"
complete -c bob -n "__fish_bob_needs_command" -f -a "complete" -d 'Generate shell completion'
complete -c bob -n "__fish_bob_needs_command" -f -a "update" -d 'Update existing version |nightly|stable|--all|'
complete -c bob -n "__fish_bob_needs_command" -f -a "run"
complete -c bob -n "__fish_bob_needs_command" -f -a "help" -d 'Print this message or the help of the given subcommand(s)'
complete -c bob -n "__fish_bob_using_subcommand use" -s n -l no-install -d 'Whether not to auto-invoke install command'
complete -c bob -n "__fish_bob_using_subcommand use" -s h -l help -d 'Print help (see more with \'--help\')'
complete -c bob -n "__fish_bob_using_subcommand install" -s h -l help -d 'Print help (see more with \'--help\')'
complete -c bob -n "__fish_bob_using_subcommand sync" -s h -l help -d 'Print help'
complete -c bob -n "__fish_bob_using_subcommand uninstall" -s h -l help -d 'Print help (see more with \'--help\')'
complete -c bob -n "__fish_bob_using_subcommand rm" -s h -l help -d 'Print help (see more with \'--help\')'
complete -c bob -n "__fish_bob_using_subcommand rollback" -s h -l help -d 'Print help'
complete -c bob -n "__fish_bob_using_subcommand erase" -s h -l help -d 'Print help'
complete -c bob -n "__fish_bob_using_subcommand list" -s h -l help -d 'Print help'
complete -c bob -n "__fish_bob_using_subcommand ls" -s h -l help -d 'Print help'
complete -c bob -n "__fish_bob_using_subcommand list-remote" -s h -l help -d 'Print help'
complete -c bob -n "__fish_bob_using_subcommand ls-remote" -s h -l help -d 'Print help'
complete -c bob -n "__fish_bob_using_subcommand complete" -s h -l help -d 'Print help'
complete -c bob -n "__fish_bob_using_subcommand update" -s a -l all -d 'Apply the update to all versions'
complete -c bob -n "__fish_bob_using_subcommand update" -s h -l help -d 'Print help'
complete -c bob -n "__fish_bob_using_subcommand run" -s h -l help -d 'Print help'
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "use" -d 'Switch to the specified version, by default will auto-invoke install command if the version is not installed already'
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "install" -d 'Install the specified version, can also be used to update out-of-date nightly version'
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "sync" -d 'If Config::version_sync_file_location is set, the version in that file will be parsed and installed'
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "uninstall" -d 'Uninstall the specified version'
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "rollback" -d 'Rollback to an existing nightly rollback'
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "erase" -d 'Erase any change bob ever made, including neovim installation, neovim version downloads and registry changes'
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "list" -d 'List all installed and used versions'
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "list-remote"
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "complete" -d 'Generate shell completion'
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "update" -d 'Update existing version |nightly|stable|--all|'
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "run"
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)'

View File

@@ -1,235 +0,0 @@
# fish completion for docker -*- shell-script -*-
function __docker_debug
set -l file "$BASH_COMP_DEBUG_FILE"
if test -n "$file"
echo "$argv" >> $file
end
end
function __docker_perform_completion
__docker_debug "Starting __docker_perform_completion"
# Extract all args except the last one
set -l args (commandline -opc)
# Extract the last arg and escape it in case it is a space
set -l lastArg (string escape -- (commandline -ct))
__docker_debug "args: $args"
__docker_debug "last arg: $lastArg"
# Disable ActiveHelp which is not supported for fish shell
set -l requestComp "DOCKER_ACTIVE_HELP=0 $args[1] __complete $args[2..-1] $lastArg"
__docker_debug "Calling $requestComp"
set -l results (eval $requestComp 2> /dev/null)
# Some programs may output extra empty lines after the directive.
# Let's ignore them or else it will break completion.
# Ref: https://github.com/spf13/cobra/issues/1279
for line in $results[-1..1]
if test (string trim -- $line) = ""
# Found an empty line, remove it
set results $results[1..-2]
else
# Found non-empty line, we have our proper output
break
end
end
set -l comps $results[1..-2]
set -l directiveLine $results[-1]
# For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)
# completions must be prefixed with the flag
set -l flagPrefix (string match -r -- '-.*=' "$lastArg")
__docker_debug "Comps: $comps"
__docker_debug "DirectiveLine: $directiveLine"
__docker_debug "flagPrefix: $flagPrefix"
for comp in $comps
printf "%s%s\n" "$flagPrefix" "$comp"
end
printf "%s\n" "$directiveLine"
end
# this function limits calls to __docker_perform_completion, by caching the result behind $__docker_perform_completion_once_result
function __docker_perform_completion_once
__docker_debug "Starting __docker_perform_completion_once"
if test -n "$__docker_perform_completion_once_result"
__docker_debug "Seems like a valid result already exists, skipping __docker_perform_completion"
return 0
end
set --global __docker_perform_completion_once_result (__docker_perform_completion)
if test -z "$__docker_perform_completion_once_result"
__docker_debug "No completions, probably due to a failure"
return 1
end
__docker_debug "Performed completions and set __docker_perform_completion_once_result"
return 0
end
# this function is used to clear the $__docker_perform_completion_once_result variable after completions are run
function __docker_clear_perform_completion_once_result
__docker_debug ""
__docker_debug "========= clearing previously set __docker_perform_completion_once_result variable =========="
set --erase __docker_perform_completion_once_result
__docker_debug "Successfully erased the variable __docker_perform_completion_once_result"
end
function __docker_requires_order_preservation
__docker_debug ""
__docker_debug "========= checking if order preservation is required =========="
__docker_perform_completion_once
if test -z "$__docker_perform_completion_once_result"
__docker_debug "Error determining if order preservation is required"
return 1
end
set -l directive (string sub --start 2 $__docker_perform_completion_once_result[-1])
__docker_debug "Directive is: $directive"
set -l shellCompDirectiveKeepOrder 32
set -l keeporder (math (math --scale 0 $directive / $shellCompDirectiveKeepOrder) % 2)
__docker_debug "Keeporder is: $keeporder"
if test $keeporder -ne 0
__docker_debug "This does require order preservation"
return 0
end
__docker_debug "This doesn't require order preservation"
return 1
end
# This function does two things:
# - Obtain the completions and store them in the global __docker_comp_results
# - Return false if file completion should be performed
function __docker_prepare_completions
__docker_debug ""
__docker_debug "========= starting completion logic =========="
# Start fresh
set --erase __docker_comp_results
__docker_perform_completion_once
__docker_debug "Completion results: $__docker_perform_completion_once_result"
if test -z "$__docker_perform_completion_once_result"
__docker_debug "No completion, probably due to a failure"
# Might as well do file completion, in case it helps
return 1
end
set -l directive (string sub --start 2 $__docker_perform_completion_once_result[-1])
set --global __docker_comp_results $__docker_perform_completion_once_result[1..-2]
__docker_debug "Completions are: $__docker_comp_results"
__docker_debug "Directive is: $directive"
set -l shellCompDirectiveError 1
set -l shellCompDirectiveNoSpace 2
set -l shellCompDirectiveNoFileComp 4
set -l shellCompDirectiveFilterFileExt 8
set -l shellCompDirectiveFilterDirs 16
if test -z "$directive"
set directive 0
end
set -l compErr (math (math --scale 0 $directive / $shellCompDirectiveError) % 2)
if test $compErr -eq 1
__docker_debug "Received error directive: aborting."
# Might as well do file completion, in case it helps
return 1
end
set -l filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) % 2)
set -l dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) % 2)
if test $filefilter -eq 1; or test $dirfilter -eq 1
__docker_debug "File extension filtering or directory filtering not supported"
# Do full file completion instead
return 1
end
set -l nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) % 2)
set -l nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) % 2)
__docker_debug "nospace: $nospace, nofiles: $nofiles"
# If we want to prevent a space, or if file completion is NOT disabled,
# we need to count the number of valid completions.
# To do so, we will filter on prefix as the completions we have received
# may not already be filtered so as to allow fish to match on different
# criteria than the prefix.
if test $nospace -ne 0; or test $nofiles -eq 0
set -l prefix (commandline -t | string escape --style=regex)
__docker_debug "prefix: $prefix"
set -l completions (string match -r -- "^$prefix.*" $__docker_comp_results)
set --global __docker_comp_results $completions
__docker_debug "Filtered completions are: $__docker_comp_results"
# Important not to quote the variable for count to work
set -l numComps (count $__docker_comp_results)
__docker_debug "numComps: $numComps"
if test $numComps -eq 1; and test $nospace -ne 0
# We must first split on \t to get rid of the descriptions to be
# able to check what the actual completion will be.
# We don't need descriptions anyway since there is only a single
# real completion which the shell will expand immediately.
set -l split (string split --max 1 \t $__docker_comp_results[1])
# Fish won't add a space if the completion ends with any
# of the following characters: @=/:.,
set -l lastChar (string sub -s -1 -- $split)
if not string match -r -q "[@=/:.,]" -- "$lastChar"
# In other cases, to support the "nospace" directive we trick the shell
# by outputting an extra, longer completion.
__docker_debug "Adding second completion to perform nospace directive"
set --global __docker_comp_results $split[1] $split[1].
__docker_debug "Completions are now: $__docker_comp_results"
end
end
if test $numComps -eq 0; and test $nofiles -eq 0
# To be consistent with bash and zsh, we only trigger file
# completion when there are no other completions
__docker_debug "Requesting file completion"
return 1
end
end
return 0
end
# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves
# so we can properly delete any completions provided by another script.
# Only do this if the program can be found, or else fish may print some errors; besides,
# the existing completions will only be loaded if the program can be found.
if type -q "docker"
# The space after the program name is essential to trigger completion for the program
# and not completion of the program name itself.
# Also, we use '> /dev/null 2>&1' since '&>' is not supported in older versions of fish.
complete --do-complete "docker " > /dev/null 2>&1
end
# Remove any pre-existing completions for the program since we will be handling all of them.
complete -c docker -e
# this will get called after the two calls below and clear the $__docker_perform_completion_once_result global
complete -c docker -n '__docker_clear_perform_completion_once_result'
# The call to __docker_prepare_completions will setup __docker_comp_results
# which provides the program's completion choices.
# If this doesn't require order preservation, we don't use the -k flag
complete -c docker -n 'not __docker_requires_order_preservation && __docker_prepare_completions' -f -a '$__docker_comp_results'
# otherwise we use the -k flag
complete -k -c docker -n '__docker_requires_order_preservation && __docker_prepare_completions' -f -a '$__docker_comp_results'

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/completions/finder.fish:v7.0.0
# @halostatue/fish-macos/completions/finder.fish:v7.0.1
complete --command finder --erase

View File

@@ -0,0 +1,8 @@
complete fzf_configure_bindings --no-files
complete fzf_configure_bindings --long help --short h --description "Print help" --condition "not __fish_seen_argument --help -h"
complete fzf_configure_bindings --long directory --description "Change the key binding for Search Directory" --condition "not __fish_seen_argument --directory"
complete fzf_configure_bindings --long git_log --description "Change the key binding for Search Git Log" --condition "not __fish_seen_argument --git_log"
complete fzf_configure_bindings --long git_status --description "Change the key binding for Search Git Status" --condition "not __fish_seen_argument --git_status"
complete fzf_configure_bindings --long history --description "Change the key binding for Search History" --condition "not __fish_seen_argument --history"
complete fzf_configure_bindings --long processes --description "Change the key binding for Search Processes" --condition "not __fish_seen_argument --processes"
complete fzf_configure_bindings --long variables --description "Change the key binding for Search Variables" --condition "not __fish_seen_argument --variables"

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/completions/mac.fish:v7.0.0
# @halostatue/fish-macos/completions/mac.fish:v7.0.1
complete --command mac --erase

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/completions/manp.fish:v7.0.0
# @halostatue/fish-macos/completions/manp.fish:v7.0.1
complete --command manp --erase
complete --command manp --wraps man

View File

@@ -0,0 +1,123 @@
# Completions for phpenv command
# Place in ~/.config/fish/completions/phpenv.fish
# Complete main commands
complete -c phpenv -f -n "__fish_use_subcommand" -a "install" -d "Install a PHP version"
complete -c phpenv -f -n "__fish_use_subcommand" -a "uninstall" -d "Uninstall a PHP version"
complete -c phpenv -f -n "__fish_use_subcommand" -a "use" -d "Use PHP version for current shell"
complete -c phpenv -f -n "__fish_use_subcommand" -a "local" -d "Set PHP version for current project"
complete -c phpenv -f -n "__fish_use_subcommand" -a "global" -d "Set global PHP version"
complete -c phpenv -f -n "__fish_use_subcommand" -a "list" -d "List installed PHP versions"
complete -c phpenv -f -n "__fish_use_subcommand" -a "ls" -d "List installed PHP versions"
complete -c phpenv -f -n "__fish_use_subcommand" -a "current" -d "Show current PHP version"
complete -c phpenv -f -n "__fish_use_subcommand" -a "which" -d "Show path to PHP binary"
complete -c phpenv -f -n "__fish_use_subcommand" -a "versions" -d "Show all available versions"
complete -c phpenv -f -n "__fish_use_subcommand" -a "doctor" -d "Check phpenv installation"
complete -c phpenv -f -n "__fish_use_subcommand" -a "config" -d "Manage configuration"
complete -c phpenv -f -n "__fish_use_subcommand" -a "extensions" -d "Manage PHP extensions"
complete -c phpenv -f -n "__fish_use_subcommand" -a "ext" -d "Manage PHP extensions"
complete -c phpenv -f -n "__fish_use_subcommand" -a "help" -d "Show help"
# Helper functions for completions
function __phpenv_complete_installed_versions
phpenv list 2>/dev/null | sed 's/^[* ]*//'
end
function __phpenv_complete_available_versions
# Try to get dynamic versions first
if command -q curl -a command -q jq; and functions -q __phpenv_parse_version_field
echo "latest"
echo "nightly"
echo "5.x"
echo "7.x"
echo "8.x"
__phpenv_parse_version_field "latest" "8.4"
__phpenv_parse_version_field "nightly" "8.5"
__phpenv_parse_version_field "5.x" "5.6"
__phpenv_parse_version_field "7.x" "7.4"
__phpenv_parse_version_field "8.x" "8.4"
end
# Fallback to common versions
printf "5.6\n7.0\n7.1\n7.2\n7.3\n7.4\n8.0\n8.1\n8.2\n8.3\n8.4\n8.5\n"
end
function __phpenv_complete_config_keys
printf "global-version\nauto-install\nauto-install-extensions\nauto-switch\ndefault-extensions\n"
end
function __phpenv_complete_extensions
printf "xdebug\nredis\nimagick\nmongodb\nmemcached\npcov\nast\ngrpc\n"
printf "protobuf\nyaml\nzip\ncurl\ngd\nintl\nmbstring\nmysql\nopcache\npdo\nsockets\nxml\n"
end
function __phpenv_complete_binaries
printf "php\nphp-config\nphpize\ncomposer\npecl\npear\n"
end
# Complete versions for install command
complete -c phpenv -f -n "__fish_seen_subcommand_from install" \
-a "(__phpenv_complete_available_versions)" -d "PHP version"
# Complete installed versions for uninstall, use commands
complete -c phpenv -f -n "__fish_seen_subcommand_from uninstall use local global" \
-a "(__phpenv_complete_installed_versions)" -d "Installed PHP version"
# Add system option for use command
complete -c phpenv -f -n "__fish_seen_subcommand_from use" -a "system" -d "Use system PHP"
# Complete binaries for which command
complete -c phpenv -f -n "__fish_seen_subcommand_from which" -a "(__phpenv_complete_binaries)" -d "PHP binary"
# Complete config subcommands
complete -c phpenv -f -n "__fish_seen_subcommand_from config; and not __fish_seen_subcommand_from get set list" \
-a "get" -d "Get configuration value"
complete -c phpenv -f -n "__fish_seen_subcommand_from config; and not __fish_seen_subcommand_from get set list" \
-a "set" -d "Set configuration value"
complete -c phpenv -f -n "__fish_seen_subcommand_from config; and not __fish_seen_subcommand_from get set list" \
-a "list" -d "List all configuration"
# Complete config keys
complete -c phpenv -f -n "__fish_seen_subcommand_from config; and __fish_seen_subcommand_from get set" \
-a "(__phpenv_complete_config_keys)" -d "Configuration key"
# Complete config values for boolean settings
complete -c phpenv -f \
-n "__fish_seen_subcommand_from config; and __fish_seen_subcommand_from set" \
-n "contains -- (commandline -opc)[-1] auto-install auto-install-extensions auto-switch" \
-a "true false" -d "Boolean value"
# Complete extensions subcommands
complete -c phpenv -f \
-n "__fish_seen_subcommand_from extensions ext" \
-n "not __fish_seen_subcommand_from install uninstall remove list ls available" \
-a "install" -d "Install PHP extension"
complete -c phpenv -f \
-n "__fish_seen_subcommand_from extensions ext" \
-n "not __fish_seen_subcommand_from install uninstall remove list ls available" \
-a "uninstall" -d "Uninstall PHP extension"
complete -c phpenv -f \
-n "__fish_seen_subcommand_from extensions ext" \
-n "not __fish_seen_subcommand_from install uninstall remove list ls available" \
-a "remove" -d "Remove PHP extension"
complete -c phpenv -f \
-n "__fish_seen_subcommand_from extensions ext" \
-n "not __fish_seen_subcommand_from install uninstall remove list ls available" \
-a "list" -d "List installed extensions"
complete -c phpenv -f \
-n "__fish_seen_subcommand_from extensions ext" \
-n "not __fish_seen_subcommand_from install uninstall remove list ls available" \
-a "ls" -d "List installed extensions"
complete -c phpenv -f \
-n "__fish_seen_subcommand_from extensions ext" \
-n "not __fish_seen_subcommand_from install uninstall remove list ls available" \
-a "available" -d "Show available extensions"
# Complete extension names
complete -c phpenv -f \
-n "__fish_seen_subcommand_from extensions ext; and __fish_seen_subcommand_from install" \
-a "(__phpenv_complete_extensions)" -d "PHP extension"
# Complete help options
complete -c phpenv -f -s h -l help -d "Show help"

View File

@@ -0,0 +1,54 @@
# pinact fish shell completion
function __fish_pinact_no_subcommand --description 'Test if there has been any subcommand yet'
for i in (commandline -opc)
if contains -- $i init run migrate token version help-all help h completion
return 1
end
end
return 0
end
complete -c pinact -n '__fish_pinact_no_subcommand' -f -l log-level -r -d 'log level'
complete -c pinact -n '__fish_pinact_no_subcommand' -f -l config -s c -r -d 'configuration file path'
complete -c pinact -n '__fish_pinact_no_subcommand' -f -l help -s h -d 'show help'
complete -c pinact -n '__fish_pinact_no_subcommand' -f -l version -s v -d 'print the version'
complete -x -c pinact -n '__fish_pinact_no_subcommand' -a 'init' -d 'Create .pinact.yaml if it doesn\'t exist'
complete -c pinact -n '__fish_seen_subcommand_from init' -f -l help -s h -d 'show help'
complete -x -c pinact -n '__fish_seen_subcommand_from init; and not __fish_seen_subcommand_from help h' -a 'help' -d 'Shows a list of commands or help for one command'
complete -x -c pinact -n '__fish_pinact_no_subcommand' -a 'run' -d 'Pin GitHub Actions versions'
complete -c pinact -n '__fish_seen_subcommand_from run' -f -l verify -s v -d 'Verify if pairs of commit SHA and version are correct'
complete -c pinact -n '__fish_seen_subcommand_from run' -f -l check -d 'Exit with a non-zero status code if actions are not pinned. If this is true, files aren\'t updated'
complete -c pinact -n '__fish_seen_subcommand_from run' -f -l update -s u -d 'Update actions to latest versions'
complete -c pinact -n '__fish_seen_subcommand_from run' -f -l review -d 'Create reviews'
complete -c pinact -n '__fish_seen_subcommand_from run' -f -l fix -d 'Fix code. By default, this is true. If -check or -diff is true, this is false by default'
complete -c pinact -n '__fish_seen_subcommand_from run' -f -l diff -d 'Output diff. By default, this is false'
complete -c pinact -n '__fish_seen_subcommand_from run' -f -l repo-owner -r -d 'GitHub repository owner'
complete -c pinact -n '__fish_seen_subcommand_from run' -f -l repo-name -r -d 'GitHub repository name'
complete -c pinact -n '__fish_seen_subcommand_from run' -f -l sha -r -d 'Commit SHA to be reviewed'
complete -c pinact -n '__fish_seen_subcommand_from run' -f -l pr -r -d 'GitHub pull request number'
complete -c pinact -n '__fish_seen_subcommand_from run' -f -l help -s h -d 'show help'
complete -x -c pinact -n '__fish_seen_subcommand_from run; and not __fish_seen_subcommand_from help h' -a 'help' -d 'Shows a list of commands or help for one command'
complete -x -c pinact -n '__fish_pinact_no_subcommand' -a 'migrate' -d 'Migrate .pinact.yaml'
complete -c pinact -n '__fish_seen_subcommand_from migrate' -f -l help -s h -d 'show help'
complete -x -c pinact -n '__fish_seen_subcommand_from migrate; and not __fish_seen_subcommand_from help h' -a 'help' -d 'Shows a list of commands or help for one command'
complete -x -c pinact -n '__fish_pinact_no_subcommand' -a 'token' -d 'Manage GitHub Access token'
complete -c pinact -n '__fish_seen_subcommand_from token' -f -l help -s h -d 'show help'
complete -x -c pinact -n '__fish_seen_subcommand_from token; and not __fish_seen_subcommand_from set remove rm help h' -a 'set' -d 'Set GitHub Access token'
complete -c pinact -n '__fish_seen_subcommand_from token; and __fish_seen_subcommand_from set' -f -l stdin -d 'Read GitHub Access token from stdin'
complete -c pinact -n '__fish_seen_subcommand_from token; and __fish_seen_subcommand_from set' -f -l help -s h -d 'show help'
complete -x -c pinact -n '__fish_seen_subcommand_from token; and __fish_seen_subcommand_from set; and not __fish_seen_subcommand_from help h' -a 'help' -d 'Shows a list of commands or help for one command'
complete -x -c pinact -n '__fish_seen_subcommand_from token; and not __fish_seen_subcommand_from set remove rm help h' -a 'remove' -d 'Remove GitHub Access token'
complete -c pinact -n '__fish_seen_subcommand_from token; and __fish_seen_subcommand_from remove rm' -f -l help -s h -d 'show help'
complete -x -c pinact -n '__fish_seen_subcommand_from token; and __fish_seen_subcommand_from remove rm; and not __fish_seen_subcommand_from help h' -a 'help' -d 'Shows a list of commands or help for one command'
complete -x -c pinact -n '__fish_seen_subcommand_from token; and not __fish_seen_subcommand_from set remove rm help h' -a 'help' -d 'Shows a list of commands or help for one command'
complete -x -c pinact -n '__fish_pinact_no_subcommand' -a 'version' -d 'Show version'
complete -c pinact -n '__fish_seen_subcommand_from version' -f -l json -s j -d 'Output version in JSON format'
complete -c pinact -n '__fish_seen_subcommand_from version' -f -l help -s h -d 'show help'
complete -x -c pinact -n '__fish_seen_subcommand_from version; and not __fish_seen_subcommand_from help h' -a 'help' -d 'Shows a list of commands or help for one command'
complete -c pinact -n '__fish_seen_subcommand_from help-all' -f -l help -s h -d 'show help'
complete -x -c pinact -n '__fish_seen_subcommand_from help-all; and not __fish_seen_subcommand_from help h' -a 'help' -d 'Shows a list of commands or help for one command'
complete -x -c pinact -n '__fish_pinact_no_subcommand' -a 'help' -d 'Shows a list of commands or help for one command'
complete -x -c pinact -n '__fish_pinact_no_subcommand' -a 'completion' -d 'Output shell completion script for bash, zsh, fish, or Powershell'
complete -c pinact -n '__fish_seen_subcommand_from completion' -f -l help -s h -d 'show help'
complete -x -c pinact -n '__fish_seen_subcommand_from completion; and not __fish_seen_subcommand_from help h' -a 'help' -d 'Shows a list of commands or help for one command'

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/completions/ql.fish:v7.0.0
# @halostatue/fish-macos/completions/ql.fish:v7.0.1
complete --erase --command ql
complete --command ql --wraps qlmanage

View File

@@ -0,0 +1,28 @@
# fzf.fish is only meant to be used in interactive mode. If not in interactive mode and not in CI, skip the config to speed up shell startup
if not status is-interactive && test "$CI" != true
exit
end
# Because of scoping rules, to capture the shell variables exactly as they are, we must read
# them before even executing _fzf_search_variables. We use psub to store the
# variables' info in temporary files and pass in the filenames as arguments.
# This variable is global so that it can be referenced by fzf_configure_bindings and in tests
set --global _fzf_search_vars_command '_fzf_search_variables (set --show | psub) (set --names | psub)'
# Install the default bindings, which are mnemonic and minimally conflict with fish's preset bindings
fzf_configure_bindings
# Doesn't erase autoloaded _fzf_* functions because they are not easily accessible once key bindings are erased
function _fzf_uninstall --on-event fzf_uninstall
_fzf_uninstall_bindings
set --erase _fzf_search_vars_command
functions --erase _fzf_uninstall _fzf_migration_message _fzf_uninstall_bindings fzf_configure_bindings
complete --erase fzf_configure_bindings
set_color cyan
echo "fzf.fish uninstalled."
echo "You may need to manually remove fzf_configure_bindings from your config.fish if you were using custom key bindings."
set_color normal
end

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/conf.d/halostatue_fish_macos.fish:v7.0.0
# @halostatue/fish-macos/conf.d/halostatue_fish_macos.fish:v7.0.1
function _halostatue_fish_macos_uninstall -e halostatue_fish_macos_uninstall
set --function functions app finder has_app mac manp note ql remind

View File

@@ -0,0 +1,22 @@
function ___paths_plugin_set_colors
if not set -q ___paths_plugin_colors
set -Ux ___paths_plugin_colors 27e6ff 29e0ff 5cd8ff 77d0ff 8ac8ff 9cbfff afb5ff c5a7ff d99bfe ea8feb f684d5 fe7abd ff73a3 ff708a fa7070 ff708a ff73a3 fe7abd f684d5 ea8feb d99bfe c5a7ff afb5ff 9cbfff 8ac8ff 77d0ff 5cd8ff 29e0ff
end
return 0
end
function _paths_uninstall --on-event paths_uninstall
for i in ___paths_plugin_wrap_color ___paths_plugin_output ___paths_plugin_handle_found_item ___paths_plugin_handle_source ___paths_plugin_cycle_color
functions -e $i
end
set -e ___paths_plugin_colors
set -e ___paths_plugin_current_color
end
function _paths_install --on-event _paths_install
___paths_plugin_set_colors
end
function _paths_update --on-event paths_update
___paths_plugin_set_colors
end

View File

@@ -0,0 +1,38 @@
# phpenv configuration file
# Place in ~/.config/fish/conf.d/phpenv.fish
# Set default configuration using session variables for most settings
# Only PHPENV_GLOBAL_VERSION needs to persist across shells
if not set -q PHPENV_AUTO_INSTALL
set -g PHPENV_AUTO_INSTALL false
end
if not set -q PHPENV_AUTO_INSTALL_EXTENSIONS
set -g PHPENV_AUTO_INSTALL_EXTENSIONS false
end
if not set -q PHPENV_AUTO_SWITCH
set -g PHPENV_AUTO_SWITCH true
end
if not set -q PHPENV_DEFAULT_EXTENSIONS
set -g PHPENV_DEFAULT_EXTENSIONS "opcache"
end
# Initialize PATH on shell startup if global version is set (less aggressive)
if test -n "$PHPENV_GLOBAL_VERSION"; and not set -q PHPENV_INITIALIZED
if functions -q __phpenv_is_version_installed __phpenv_set_php_path
if __phpenv_is_version_installed "$PHPENV_GLOBAL_VERSION" 2>/dev/null
# Only set PATH if no project-specific version is detected
if not __phpenv_find_version_file .php-version >/dev/null 2>&1
if not __phpenv_find_version_file .tool-version >/dev/null 2>&1
if not test -f composer.json
__phpenv_set_php_path "$PHPENV_GLOBAL_VERSION" 2>/dev/null
end
end
end
end
end
set -g PHPENV_INITIALIZED true
end

View File

@@ -7,3 +7,6 @@ halostatue/fish-brew@v3
edc/bass
meaningful-ooo/sponge
nickeb96/puffer-fish
jgusta/paths
patrickf1/fzf.fish
ivuorinen/phpenv.fish

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_app_bundleid.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_app_bundleid.fish:v7.0.1
function __macos_app_bundleid
argparse --name 'app bundleid' x/exact a/all h/help q/quiet s/short -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_app_find.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_app_find.fish:v7.0.1
function __macos_app_find
argparse --name 'app find' x/exact a/all q/quiet h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_app_frontmost.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_app_frontmost.fish:v7.0.1
function __macos_app_frontmost::info
set --function value (lsappinfo info -only $argv[2] $argv[1] | string split =)[2]

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_app_icon.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_app_icon.fish:v7.0.1
function __macos_app_icon
argparse --name 'app quit' x/exact h/help 'o/output=' 'w/width=' -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_app_quit.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_app_quit.fish:v7.0.1
function __macos_app_quit
argparse --name 'app quit' x/exact r/restart h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_cd.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_cd.fish:v7.0.1
function __macos_finder_cd
argparse --name 'finder cd' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_clean.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_clean.fish:v7.0.1
function __macos_finder_clean
argparse --name 'finder clean' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_column.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_column.fish:v7.0.1
function __macos_finder_column
argparse --name 'finder column' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_desktop_icons.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_desktop_icons.fish:v7.0.1
function __macos_finder_desktop_icons
argparse --name 'finder desktop-icons' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_hidden.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_hidden.fish:v7.0.1
function __macos_finder_hidden
argparse --name 'finder hidden' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_icon.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_icon.fish:v7.0.1
function __macos_finder_icon
argparse --name 'finder icon' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_list.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_list.fish:v7.0.1
function __macos_finder_list
argparse --name 'finder list' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_pushd.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_pushd.fish:v7.0.1
function __macos_finder_pushd
argparse --name 'finder pushd' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_pwd.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_pwd.fish:v7.0.1
function __macos_finder_pwd
argparse --name 'finder pwd' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_quarantine.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_quarantine.fish:v7.0.1
function __macos_finder_quarantine::run
set --query argv[1]

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_selected.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_selected.fish:v7.0.1
function __macos_finder_selected
argparse --name 'finder selected' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_track.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_track.fish:v7.0.1
function __macos_finder_track
argparse --name 'finder track' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_untrack.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_untrack.fish:v7.0.1
function __macos_finder_untrack
argparse --name 'finder untrack' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_finder_update.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_finder_update.fish:v7.0.1
function __macos_finder_update
argparse --name 'finder update' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_airdrop.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_airdrop.fish:v7.0.1
function __macos_mac_airdrop
argparse --name 'mac airdrop' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_airport.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_airport.fish:v7.0.1
function __macos_mac_airport::ssid
__macos_mac_airport::run -I | string replace --filter --regex '\s+SSID: (\S+)' '$1'

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_brightness.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_brightness.fish:v7.0.1
function __macos_mac_brightness
argparse --name 'mac brightness' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_defaults_query.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_defaults_query.fish:v7.0.1
function __macos_mac_defaults_query
if set --function value (defaults read $argv[1] $argv[2] 2>/dev/null)

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_flushdns.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_flushdns.fish:v7.0.1
function __macos_mac_flushdns
argparse --name 'mac flushdns' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_font_smoothing.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_font_smoothing.fish:v7.0.1
function __macos_mac_font_smoothing
argparse --name 'mac font-smoothing' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_lsclean.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_lsclean.fish:v7.0.1
function __macos_mac_lsclean
argparse --name 'mac lsclean' h/help -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_mail.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_mail.fish:v7.0.1
# Speed up Mail.app by vacuuming the Envelope Index
# - Code from: http://web.archive.org/web/20071008123746/http://www.hawkwings.net/2007/03/03/scripts-to-automate-the-mailapp-envelope-speed-trick/

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_proxy_icon.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_proxy_icon.fish:v7.0.1
function __macos_mac_proxy_icon
argparse --name 'mac proxy-icon' h/help q/query -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_serialnumber.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_serialnumber.fish:v7.0.1
function __macos_mac_serialnumber
argparse --name 'mac serialnumber' h/help c/copy -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_touchid.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_touchid.fish:v7.0.1
function __macos_mac_touchid
argparse --name 'mac touchid' h/help q/quiet -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_touchid_sudo.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_touchid_sudo.fish:v7.0.1
# Massively simplified. This version _only_ works if /etc/pam.d/sudo includes `auth
# include sudo_local` and requires manual removal of `pam_reattach` and `pam_tid` from

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_transparency.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_transparency.fish:v7.0.1
function __macos_mac_transparency
argparse --name 'mac transparency' h/help q/query -- $argv

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_version.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_version.fish:v7.0.1
function __macos_mac_version
argparse \

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/__macos_mac_vol.fish:v7.0.0
# @halostatue/fish-macos/functions/__macos_mac_vol.fish:v7.0.1
function __macos_mac_vol
argparse --name 'mac vol' h/help -- $argv

View File

@@ -0,0 +1,43 @@
function _fzf_configure_bindings_help --description "Prints the help message for fzf_configure_bindings."
echo "\
USAGE:
fzf_configure_bindings [--COMMAND=[KEY_SEQUENCE]...]
DESCRIPTION
fzf_configure_bindings installs key bindings for fzf.fish's commands and erases any bindings it
previously installed. It installs bindings for both default and insert modes. fzf.fish executes
it without options on fish startup to install the out-of-the-box key bindings.
By default, commands are bound to a mnemonic key sequence, shown below. Each command's binding
can be configured using a namesake corresponding option:
COMMAND | DEFAULT KEY SEQUENCE | CORRESPONDING OPTION
Search Directory | Ctrl+Alt+F (F for file) | --directory
Search Git Log | Ctrl+Alt+L (L for log) | --git_log
Search Git Status | Ctrl+Alt+S (S for status) | --git_status
Search History | Ctrl+R (R for reverse) | --history
Search Processes | Ctrl+Alt+P (P for process) | --processes
Search Variables | Ctrl+V (V for variable) | --variables
Override a command's binding by specifying its corresponding option with the desired key
sequence. Disable a command's binding by specifying its corresponding option with no value.
Because fzf_configure_bindings erases bindings it previously installed, it can be cleanly
executed multiple times. Once the desired fzf_configure_bindings command has been found, add it
to your config.fish in order to persist the customized bindings.
In terms of validation, fzf_configure_bindings fails if passed unknown options. It expects an
equals sign between an option's name and value. However, it does not validate key sequences.
Pass -h or --help to print this help message and exit.
EXAMPLES
Default bindings but bind Search Directory to Ctrl+F and Search Variables to Ctrl+Alt+V
\$ fzf_configure_bindings --directory=\cf --variables=\e\cv
Default bindings but disable Search History
\$ fzf_configure_bindings --history=
An agglomeration of different options
\$ fzf_configure_bindings --git_status=\cg --history=\ch --variables= --processes=
SEE Also
To learn more about fish key bindings, see bind(1) and fish_key_reader(1).
"
end

View File

@@ -0,0 +1,15 @@
# helper function for _fzf_search_variables
function _fzf_extract_var_info --argument-names variable_name set_show_output --description "Extract and reformat lines pertaining to \$variable_name from \$set_show_output."
# Extract only the lines about the variable, all of which begin with either
# $variable_name: ...or... $variable_name[
string match --regex "^\\\$$variable_name(?::|\[).*" <$set_show_output |
# Strip the variable name prefix, including ": " for scope info lines
string replace --regex "^\\\$$variable_name(?:: )?" '' |
# Distill the lines of values, replacing...
# [1]: |value|
# ...with...
# [1] value
string replace --regex ": \|(.*)\|" ' $1'
end

View File

@@ -0,0 +1,49 @@
# helper for _fzf_search_git_status
# arg should be a line from git status --short, e.g.
# MM functions/_fzf_preview_changed_file.fish
# D README.md
# R LICENSE -> "New License"
function _fzf_preview_changed_file --argument-names path_status --description "Show the git diff of the given file."
# remove quotes because they'll be interpreted literally by git diff
# no need to requote when referencing $path because fish does not perform word splitting
# https://fishshell.com/docs/current/fish_for_bash_users.html
set -f path (string unescape (string sub --start 4 $path_status))
# first letter of short format shows index, second letter shows working tree
# https://git-scm.com/docs/git-status/2.35.0#_short_format
set -f index_status (string sub --length 1 $path_status)
set -f working_tree_status (string sub --start 2 --length 1 $path_status)
set -f diff_opts --color=always
if test $index_status = '?'
_fzf_report_diff_type Untracked
_fzf_preview_file $path
else if contains {$index_status}$working_tree_status DD AU UD UA DU AA UU
# Unmerged statuses taken directly from git status help's short format table
# Unmerged statuses are mutually exclusive with other statuses, so if we see
# these, then safe to assume the path is unmerged
_fzf_report_diff_type Unmerged
git diff $diff_opts -- $path
else
if test $index_status != ' '
_fzf_report_diff_type Staged
# renames are only detected in the index, never working tree, so only need to test for it here
# https://stackoverflow.com/questions/73954214
if test $index_status = R
# diff the post-rename path with the original path, otherwise the diff will show the entire file as being added
set -f orig_and_new_path (string split --max 1 -- ' -> ' $path)
git diff --staged $diff_opts -- $orig_and_new_path[1] $orig_and_new_path[2]
# path currently has the form of "original -> current", so we need to correct it before it's used below
set path $orig_and_new_path[2]
else
git diff --staged $diff_opts -- $path
end
end
if test $working_tree_status != ' '
_fzf_report_diff_type Unstaged
git diff $diff_opts -- $path
end
end
end

View File

@@ -0,0 +1,43 @@
# helper function for _fzf_search_directory and _fzf_search_git_status
function _fzf_preview_file --description "Print a preview for the given file based on its file type."
# because there's no way to guarantee that _fzf_search_directory passes the path to _fzf_preview_file
# as one argument, we collect all the arguments into one single variable and treat that as the path
set -f file_path $argv
if test -L "$file_path" # symlink
# notify user and recurse on the target of the symlink, which can be any of these file types
set -l target_path (realpath "$file_path")
set_color yellow
echo "'$file_path' is a symlink to '$target_path'."
set_color normal
_fzf_preview_file "$target_path"
else if test -f "$file_path" # regular file
if set --query fzf_preview_file_cmd
# need to escape quotes to make sure eval receives file_path as a single arg
eval "$fzf_preview_file_cmd '$file_path'"
else
bat --style=numbers --color=always "$file_path"
end
else if test -d "$file_path" # directory
if set --query fzf_preview_dir_cmd
# see above
eval "$fzf_preview_dir_cmd '$file_path'"
else
# -A list hidden files as well, except for . and ..
# -F helps classify files by appending symbols after the file name
command ls -A -F "$file_path"
end
else if test -c "$file_path"
_fzf_report_file_type "$file_path" "character device file"
else if test -b "$file_path"
_fzf_report_file_type "$file_path" "block device file"
else if test -S "$file_path"
_fzf_report_file_type "$file_path" socket
else if test -p "$file_path"
_fzf_report_file_type "$file_path" "named pipe"
else
echo "$file_path doesn't exist." >&2
end
end

View File

@@ -0,0 +1,18 @@
# helper for _fzf_preview_changed_file
# prints out something like
# ╭────────╮
# │ Staged │
# ╰────────╯
function _fzf_report_diff_type --argument-names diff_type --description "Print a distinct colored header meant to preface a git patch."
# number of "-" to draw is the length of the string to box + 2 for padding
set -f repeat_count (math 2 + (string length $diff_type))
set -f line (string repeat --count $repeat_count)
set -f top_border$line
set -f btm_border$line
set_color yellow
echo $top_border
echo "$diff_type"
echo $btm_border
set_color normal
end

View File

@@ -0,0 +1,6 @@
# helper function for _fzf_preview_file
function _fzf_report_file_type --argument-names file_path file_type --description "Explain the file type for a file."
set_color red
echo "Cannot preview '$file_path': it is a $file_type."
set_color normal
end

View File

@@ -0,0 +1,33 @@
function _fzf_search_directory --description "Search the current directory. Replace the current token with the selected file paths."
# Directly use fd binary to avoid output buffering delay caused by a fd alias, if any.
# Debian-based distros install fd as fdfind and the fd package is something else, so
# check for fdfind first. Fall back to "fd" for a clear error message.
set -f fd_cmd (command -v fdfind || command -v fd || echo "fd")
set -f --append fd_cmd --color=always $fzf_fd_opts
set -f fzf_arguments --multi --ansi $fzf_directory_opts
set -f token (commandline --current-token)
# expand any variables or leading tilde (~) in the token
set -f expanded_token (eval echo -- $token)
# unescape token because it's already quoted so backslashes will mess up the path
set -f unescaped_exp_token (string unescape -- $expanded_token)
# If the current token is a directory and has a trailing slash,
# then use it as fd's base directory.
if string match --quiet -- "*/" $unescaped_exp_token && test -d "$unescaped_exp_token"
set --append fd_cmd --base-directory=$unescaped_exp_token
# use the directory name as fzf's prompt to indicate the search is limited to that directory
set --prepend fzf_arguments --prompt="Directory $unescaped_exp_token> " --preview="_fzf_preview_file $expanded_token{}"
set -f file_paths_selected $unescaped_exp_token($fd_cmd 2>/dev/null | _fzf_wrapper $fzf_arguments)
else
set --prepend fzf_arguments --prompt="Directory> " --query="$unescaped_exp_token" --preview='_fzf_preview_file {}'
set -f file_paths_selected ($fd_cmd 2>/dev/null | _fzf_wrapper $fzf_arguments)
end
if test $status -eq 0
commandline --current-token --replace -- (string escape -- $file_paths_selected | string join ' ')
end
commandline --function repaint
end

View File

@@ -0,0 +1,36 @@
function _fzf_search_git_log --description "Search the output of git log and preview commits. Replace the current token with the selected commit hash."
if not git rev-parse --git-dir >/dev/null 2>&1
echo '_fzf_search_git_log: Not in a git repository.' >&2
else
if not set --query fzf_git_log_format
# %h gives you the abbreviated commit hash, which is useful for saving screen space, but we will have to expand it later below
set -f fzf_git_log_format '%C(bold blue)%h%C(reset) - %C(cyan)%ad%C(reset) %C(yellow)%d%C(reset) %C(normal)%s%C(reset) %C(dim normal)[%an]%C(reset)'
end
set -f preview_cmd 'git show --color=always --stat --patch {1}'
if set --query fzf_diff_highlighter
set preview_cmd "$preview_cmd | $fzf_diff_highlighter"
end
set -f selected_log_lines (
git log --no-show-signature --color=always --format=format:$fzf_git_log_format --date=short | \
_fzf_wrapper --ansi \
--multi \
--scheme=history \
--prompt="Git Log> " \
--preview=$preview_cmd \
--query=(commandline --current-token) \
$fzf_git_log_opts
)
if test $status -eq 0
for line in $selected_log_lines
set -f abbreviated_commit_hash (string split --field 1 " " $line)
set -f full_commit_hash (git rev-parse $abbreviated_commit_hash)
set -f --append commit_hashes $full_commit_hash
end
commandline --current-token --replace (string join ' ' $commit_hashes)
end
end
commandline --function repaint
end

View File

@@ -0,0 +1,41 @@
function _fzf_search_git_status --description "Search the output of git status. Replace the current token with the selected file paths."
if not git rev-parse --git-dir >/dev/null 2>&1
echo '_fzf_search_git_status: Not in a git repository.' >&2
else
set -f preview_cmd '_fzf_preview_changed_file {}'
if set --query fzf_diff_highlighter
set preview_cmd "$preview_cmd | $fzf_diff_highlighter"
end
set -f selected_paths (
# Pass configuration color.status=always to force status to use colors even though output is sent to a pipe
git -c color.status=always status --short |
_fzf_wrapper --ansi \
--multi \
--prompt="Git Status> " \
--query=(commandline --current-token) \
--preview=$preview_cmd \
--nth="2.." \
$fzf_git_status_opts
)
if test $status -eq 0
# git status --short automatically escapes the paths of most files for us so not going to bother trying to handle
# the few edges cases of weird file names that should be extremely rare (e.g. "this;needs;escaping")
set -f cleaned_paths
for path in $selected_paths
if test (string sub --length 1 $path) = R
# path has been renamed and looks like "R LICENSE -> LICENSE.md"
# extract the path to use from after the arrow
set --append cleaned_paths (string split -- "-> " $path)[-1]
else
set --append cleaned_paths (string sub --start=4 $path)
end
end
commandline --current-token --replace -- (string join ' ' $cleaned_paths)
end
end
commandline --function repaint
end

View File

@@ -0,0 +1,39 @@
function _fzf_search_history --description "Search command history. Replace the command line with the selected command."
# history merge incorporates history changes from other fish sessions
# it errors out if called in private mode
if test -z "$fish_private_mode"
builtin history merge
end
if not set --query fzf_history_time_format
# Reference https://devhints.io/strftime to understand strftime format symbols
set -f fzf_history_time_format "%m-%d %H:%M:%S"
end
# Delinate time from command in history entries using the vertical box drawing char (U+2502).
# Then, to get raw command from history entries, delete everything up to it. The ? on regex is
# necessary to make regex non-greedy so it won't match into commands containing the char.
set -f time_prefix_regex '^.*? │ '
# Delinate commands throughout pipeline using null rather than newlines because commands can be multi-line
set -f commands_selected (
builtin history --null --show-time="$fzf_history_time_format" |
_fzf_wrapper --read0 \
--print0 \
--multi \
--scheme=history \
--prompt="History> " \
--query=(commandline) \
--preview="string replace --regex '$time_prefix_regex' '' -- {} | fish_indent --ansi" \
--preview-window="bottom:3:wrap" \
$fzf_history_opts |
string split0 |
# remove timestamps from commands selected
string replace --regex $time_prefix_regex ''
)
if test $status -eq 0
commandline --replace -- $commands_selected
end
commandline --function repaint
end

View File

@@ -0,0 +1,32 @@
function _fzf_search_processes --description "Search all running processes. Replace the current token with the pid of the selected process."
# Directly use ps command because it is often aliased to a different command entirely
# or with options that dirty the search results and preview output
set -f ps_cmd (command -v ps || echo "ps")
# use all caps to be consistent with ps default format
# snake_case because ps doesn't seem to allow spaces in the field names
set -f ps_preview_fmt (string join ',' 'pid' 'ppid=PARENT' 'user' '%cpu' 'rss=RSS_IN_KB' 'start=START_TIME' 'command')
set -f processes_selected (
$ps_cmd -A -opid,command | \
_fzf_wrapper --multi \
--prompt="Processes> " \
--query (commandline --current-token) \
--ansi \
# first line outputted by ps is a header, so we need to mark it as so
--header-lines=1 \
# ps uses exit code 1 if the process was not found, in which case show an message explaining so
--preview="$ps_cmd -o '$ps_preview_fmt' -p {1} || echo 'Cannot preview {1} because it exited.'" \
--preview-window="bottom:4:wrap" \
$fzf_processes_opts
)
if test $status -eq 0
for process in $processes_selected
set -f --append pids_selected (string split --no-empty --field=1 -- " " $process)
end
# string join to replace the newlines outputted by string split with spaces
commandline --current-token --replace -- (string join ' ' $pids_selected)
end
commandline --function repaint
end

View File

@@ -0,0 +1,47 @@
# This function expects the following two arguments:
# argument 1 = output of (set --show | psub), i.e. a file with the scope info and values of all variables
# argument 2 = output of (set --names | psub), i.e. a file with all variable names
function _fzf_search_variables --argument-names set_show_output set_names_output --description "Search and preview shell variables. Replace the current token with the selected variable."
if test -z "$set_names_output"
printf '%s\n' '_fzf_search_variables requires 2 arguments.' >&2
commandline --function repaint
return 22 # 22 means invalid argument in POSIX
end
# Exclude the history variable from being piped into fzf because
# 1. it's not included in $set_names_output
# 2. it tends to be a very large value => increases computation time
# 3._fzf_search_history is a much better way to examine history anyway
set -f all_variable_names (string match --invert history <$set_names_output)
set -f current_token (commandline --current-token)
# Use the current token to pre-populate fzf's query. If the current token begins
# with a $, remove it from the query so that it will better match the variable names
set -f cleaned_curr_token (string replace -- '$' '' $current_token)
set -f variable_names_selected (
printf '%s\n' $all_variable_names |
_fzf_wrapper --preview "_fzf_extract_var_info {} $set_show_output" \
--prompt="Variables> " \
--preview-window="wrap" \
--multi \
--query=$cleaned_curr_token \
$fzf_variables_opts
)
if test $status -eq 0
# If the current token begins with a $, do not overwrite the $ when
# replacing the current token with the selected variable.
# Uses brace expansion to prepend $ to each variable name.
commandline --current-token --replace (
if string match --quiet -- '$*' $current_token
string join " " \${$variable_names_selected}
else
string join " " $variable_names_selected
end
)
end
commandline --function repaint
end

View File

@@ -0,0 +1,21 @@
function _fzf_wrapper --description "Prepares some environment variables before executing fzf."
# Make sure fzf uses fish to execute preview commands, some of which
# are autoloaded fish functions so don't exist in other shells.
# Use --function so that it doesn't clobber SHELL outside this function.
set -f --export SHELL (command --search fish)
# If neither FZF_DEFAULT_OPTS nor FZF_DEFAULT_OPTS_FILE are set, then set some sane defaults.
# See https://github.com/junegunn/fzf#environment-variables
set --query FZF_DEFAULT_OPTS FZF_DEFAULT_OPTS_FILE
if test $status -eq 2
# cycle allows jumping between the first and last results, making scrolling faster
# layout=reverse lists results top to bottom, mimicking the familiar layouts of git log, history, and env
# border shows where the fzf window begins and ends
# height=90% leaves space to see the current command and some scrollback, maintaining context of work
# preview-window=wrap wraps long lines in the preview window, making reading easier
# marker=* makes the multi-select marker more distinguishable from the pointer (since both default to >)
set --export FZF_DEFAULT_OPTS '--cycle --layout=reverse --border --height=90% --preview-window=wrap --marker="*"'
end
fzf $argv
end

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/app.fish:v7.0.0
# @halostatue/fish-macos/functions/app.fish:v7.0.1
function app --description 'Operate on macOS applications'
argparse --stop-nonopt h/help -- $argv

View File

@@ -0,0 +1,303 @@
# cr.fish — Create and manage code review worktrees for Fish shell
#
# Synopsis:
# cr [OPTIONS] <source-branch>
# cr cleanup [OPTIONS]
#
# Description:
# Create a dedicated worktree for reviewing code based on a ticket ID
# extracted from a branch name, or clean up existing cr- worktrees.
#
# Constants:
# CR_DEFAULT_REMOTE Default Git remote used when none specified
#
# Fish Requirements:
# Fish shell >= 3.1.0 for argparse builtin
#
# Based on work by ville6000 (https://github.com/ville6000)
#
# Examples:
# cr feature/1234-add-login
# cr -r upstream 5678
# cr cleanup --dry-run
if not set -q CR_DEFAULT_REMOTE
set -g CR_DEFAULT_REMOTE origin
end
function __cr_show_help
echo 'Usage: cr [OPTIONS] <source-branch>'
echo ' cr cleanup [OPTIONS]'
echo
echo " -r, --remote <name> Git remote (default: $CR_DEFAULT_REMOTE)"
echo ' -d, --dry-run Show actions without executing'
echo ' -f, --force Skip confirmation prompts'
echo ' -k, --keep-branch In cleanup, keep local branches'
echo ' -b, --branch-only <ticket> Create only the review branch (no worktree)'
echo ' --cleanup-branches-only In cleanup, delete branches only'
echo ' -h, --help Show this help'
end
function __cr_run_with_spinner --argument-names msg cmd
set -l tmp (mktemp)
eval $cmd >$tmp 2>&1 &
set -l pid $last_pid
set -l spin_chars '/-\|'
set -l i 1
while kill -0 $pid 2>/dev/null
printf "\r[%c] %s" (string sub -s $i -l 1 $spin_chars) "$msg"
set i (math (math $i % 4) + 1)
sleep 0.1
end
printf "\r%s\r" (string repeat -n (math (string length "$msg") + 5) " ")
wait $pid
set -l output (cat $tmp)
rm $tmp
# Remove any leading empty or all-whitespace lines (from spinner clear)
for line in $output
if test -n (string trim -- $line)
echo $line
end
end
end
function __cr_cleanup
argparse dry_run force keep_branch cleanup_branches_only -- $argv
or return
set -l dry_run (set -q _flag_dry_run; and echo 1; or echo 0)
set -l force (set -q _flag_force; and echo 1; or echo 0)
set -l keep_branch (set -q _flag_keep_branch; and echo 1; or echo 0)
set -l branches_only (set -q _flag_cleanup_branches_only; and echo 1; or echo 0)
set -l target_branch
if test (count $argv) -gt 0
set target_branch $argv[1]
end
git worktree prune
for wt in (git worktree list --porcelain | awk '/^worktree /{print $2}')
set -l base (basename $wt)
if string match -r '^cr-.*' $base
if test -n "$target_branch" -a "$base" != "$target_branch"
continue
end
if test "$branches_only" = 0
if test "$dry_run" = 1
echo "[DRY-RUN] remove worktree: $wt"
else if test "$force" = 1
git worktree remove --force $wt
else
echo "git worktree remove --force $wt"
echo "(!) Use --force to actually remove worktree: $wt."
end
end
if test "$keep_branch" = 0
if test "$branches_only" = 0
if test "$dry_run" = 1
echo "[DRY-RUN] delete branch: $base"
else if test "$force" = 1
git branch -D $base
else
echo "git branch -D $base"
echo "(!) Use --force to actually delete branch: $base."
end
end
end
end
end
end
# --- Main Entrypoint ---
function cr --description 'Create or cleanup code-review worktrees'
if not git rev-parse --is-inside-work-tree >/dev/null 2>&1
echo "Not inside a git repository." >&2
return 1
end
set -l remotes (git remote)
if test (count $remotes) -eq 0
echo "No git remotes found. Please add a remote before using cr." >&2
return 1
end
if not type -q argparse
echo 'cr.fish requires the argparse builtin' >&2
return 1
end
argparse \
r/remote= \
h/help \
d/dry-run \
f/force \
y/yes \
k/keep-branch \
b/branch-only= \
cleanup-branches-only \
-- $argv
or return
if set -q _flag_h; or set -q _flag_help
__cr_show_help
return 0
end
set -l remote (set -q _flag_remote; and echo $_flag_remote[-1]; or echo $CR_DEFAULT_REMOTE)
if set -q _flag_yes
set -g _flag_force 1
end
if not contains $remote $remotes
echo "Remote '$remote' does not exist. Available remotes: $remotes" >&2
return 1
end
if test (count $argv) -gt 0 -a "$argv[1]" = cleanup
__cr_cleanup \
(set -q _flag_dry_run; and echo --dry_run) \
(set -q _flag_force; and echo --force) \
(set -q _flag_keep_branch; and echo --keep_branch) \
(set -q _flag_cleanup_branches_only; and echo --cleanup_branches_only)
return 0
end
set -l source_branch ""
if test (count $argv) -gt 0
set source_branch $argv[1]
else if type -q fzf
set -l branches (__cr_run_with_spinner "Fetching branches..." \
"git ls-remote --heads $remote | sed 's|.*refs/heads/||'")
printf "\n"
if test (count $branches) -eq 0
echo "No branches found on remote '$remote'." >&2
return 1
end
set -l exclude_branches main master develop dev trunk
set -l filtered_branches
for b in $branches
set b (string trim -- $b)
if not contains -- $b $exclude_branches
set filtered_branches $filtered_branches $b
end
end
set source_branch (printf '%s\n' $filtered_branches | fzf --prompt='Select branch: ')
echo "Selected branch: $source_branch"
if test $status -ne 0
echo 'Selection aborted' >&2
return 1
end
if test -z "$source_branch"
echo 'No branch selected' >&2
return 1
end
else
__cr_show_help >&2
return 1
end
# Extract ticket ID from branch name, or use slug if not found
set -l branch_tail (string split "/" $source_branch)[-1]
set -l ticket_id (printf '%s\n' $branch_tail | grep -o '[0-9]\+' | tail -n1)
set -l review_suffix ""
if test -z "$ticket_id"
# No numeric ticket, use slug of branch name as suffix
set review_suffix (string replace -ra '[^a-zA-Z0-9]+' '-' -- $source_branch)
else
set review_suffix $ticket_id
end
if set -q _flag_b; or set -q _flag_branch_only
set review_suffix $_flag_branch_only[-1]
end
set -l review_branch cr-$review_suffix
set -l folder ../$review_branch
# Branch-only mode
if set -q _flag_b; or set -q _flag_branch_only
if set -q _flag_dry_run
echo "[DRY-RUN] Create branch $review_branch from $remote/$source_branch"
return 0
end
__cr_run_with_spinner "Fetching from $remote..." \
"git fetch $remote $source_branch"
git branch $review_branch $remote/$source_branch
echo "Created branch $review_branch"
return 0
end
__cr_run_with_spinner "Checking remote branch..." \
"git ls-remote --exit-code --heads $remote $source_branch >/dev/null 2>&1"
if test $status -ne 0
echo "No remote branch $remote/$source_branch" >&2
return 1
end
if git show-ref --quiet refs/heads/$review_branch
echo "Local branch $review_branch exists" >&2
return 1
end
if test -d $folder
echo "Directory $folder exists" >&2
return 1
end
if set -q _flag_dry_run
echo "[DRY-RUN] Add worktree $folder -b $review_branch $remote/$source_branch"
return 0
end
__cr_run_with_spinner "Fetching from $remote..." \
"git fetch $remote $source_branch"
git worktree add $folder -b $review_branch $remote/$source_branch
end
# --- Completion Functions ---
complete -c cr -l help -s h -f -d 'Show help'
complete -c cr -l remote -s r -f -d 'Git remote' -a '(git remote)'
complete -c cr -l dry-run -s d -f -d 'Dry run'
complete -c cr -l force -s f -f -d 'Skip confirmations'
complete -c cr -l keep-branch -s k -f -d 'Keep branches in cleanup'
complete -c cr -l branch-only -s b -f -d 'Branch-only mode' \
-a '(__fish_cr_ticket_ids)'
complete -c cr -l cleanup-branches-only -f -d 'Branches-only cleanup'
complete -c cr -f -a cleanup -d 'Cleanup mode' \
-n 'not __fish_seen_subcommand_from cleanup'
complete -c cr -n '__fish_seen_subcommand_from cleanup' -f \
-a '(__fish_cr_cleanup_branches)' -d 'cr-* branch'
complete -c cr -n '__fish_seen_subcommand_from cleanup' -f
complete -c cr -n 'not __fish_seen_subcommand_from cleanup' -f \
-a '(__fish_cr_branches)' -d 'Source branch'
function __fish_cr_cleanup_branches
git worktree list --porcelain | awk '/^worktree /{print $2}' | while read -l wt
set base (basename $wt)
if string match -r '^cr-.*' $base
echo $base
end
end
end
function __fish_cr_branches --description 'List remote branches'
set -l exclude_branches main master develop dev trunk
set -l branches (git ls-remote --heads $CR_DEFAULT_REMOTE | \
sed 's|.*refs/heads/||')
for b in $branches
set b (string trim -- $b)
if not contains -- $b $exclude_branches
echo $b
end
end
end
function __fish_cr_ticket_ids --description 'List ticket IDs from remote branches'
for b in (git ls-remote --heads $CR_DEFAULT_REMOTE | \
sed 's|.*refs/heads/||')
set b (string trim -- $b)
set -l id (string match -r '[0-9]+' -- $b)
if test -n "$id"
echo $id
end
end
end

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/finder.fish:v7.0.0
# @halostatue/fish-macos/functions/finder.fish:v7.0.1
function __macos_finder_defaults::query
set --query argv[1]

View File

@@ -0,0 +1,46 @@
# Always installs bindings for insert and default mode for simplicity and b/c it has almost no side-effect
# https://gitter.im/fish-shell/fish-shell?at=60a55915ee77a74d685fa6b1
function fzf_configure_bindings --description "Installs the default key bindings for fzf.fish with user overrides passed as options."
# no need to install bindings if not in interactive mode or running tests
status is-interactive || test "$CI" = true; or return
set -f options_spec h/help 'directory=?' 'git_log=?' 'git_status=?' 'history=?' 'processes=?' 'variables=?'
argparse --max-args=0 --ignore-unknown $options_spec -- $argv 2>/dev/null
if test $status -ne 0
echo "Invalid option or a positional argument was provided." >&2
_fzf_configure_bindings_help
return 22
else if set --query _flag_help
_fzf_configure_bindings_help
return
else
# Initialize with default key sequences and then override or disable them based on flags
# index 1 = directory, 2 = git_log, 3 = git_status, 4 = history, 5 = processes, 6 = variables
set -f key_sequences \e\cf \e\cl \e\cs \cr \e\cp \cv # \c = control, \e = escape
set --query _flag_directory && set key_sequences[1] "$_flag_directory"
set --query _flag_git_log && set key_sequences[2] "$_flag_git_log"
set --query _flag_git_status && set key_sequences[3] "$_flag_git_status"
set --query _flag_history && set key_sequences[4] "$_flag_history"
set --query _flag_processes && set key_sequences[5] "$_flag_processes"
set --query _flag_variables && set key_sequences[6] "$_flag_variables"
# If fzf bindings already exists, uninstall it first for a clean slate
if functions --query _fzf_uninstall_bindings
_fzf_uninstall_bindings
end
for mode in default insert
test -n $key_sequences[1] && bind --mode $mode $key_sequences[1] _fzf_search_directory
test -n $key_sequences[2] && bind --mode $mode $key_sequences[2] _fzf_search_git_log
test -n $key_sequences[3] && bind --mode $mode $key_sequences[3] _fzf_search_git_status
test -n $key_sequences[4] && bind --mode $mode $key_sequences[4] _fzf_search_history
test -n $key_sequences[5] && bind --mode $mode $key_sequences[5] _fzf_search_processes
test -n $key_sequences[6] && bind --mode $mode $key_sequences[6] "$_fzf_search_vars_command"
end
function _fzf_uninstall_bindings --inherit-variable key_sequences
bind --erase -- $key_sequences
bind --erase --mode insert -- $key_sequences
end
end
end

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/has_app.fish:v7.0.0
# @halostatue/fish-macos/functions/has_app.fish:v7.0.1
function has_app --description 'Returns true if the named application exists'
# Suppress these flags being passed to __macos_app_find

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/mac.fish:v7.0.0
# @halostatue/fish-macos/functions/mac.fish:v7.0.1
function mac --description 'Manage several macOS functions'
argparse --stop-nonopt h/help -- $argv
@@ -36,6 +36,8 @@ Options:
__macos_mac_airdrop $argv
case airport
__macos_mac_airport $argv
case brightness
__macos_mac_brightness $argv
case flushdns
__macos_mac_flushdns $argv
case font-smoothing

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/manp.fish:v7.0.0
# @halostatue/fish-macos/functions/manp.fish:v7.0.1
# Based on man2pdf.sh created by Pico Mitchell (of Random Applications)
# on 11/16/22, licensed under the MIT license.

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/note.fish:v7.0.0
# @halostatue/fish-macos/functions/note.fish:v7.0.1
function note --description 'Add a note to Notes.app'
is_mac 'mountain lion'

View File

@@ -0,0 +1,175 @@
function ___paths_plugin_wrap_color
set_color normal
set_color "$argv[1]"
echo -n (set_color "$argv[1]")"$argv[2..]"
set_color normal
end
# duplicated in conf.d
function ___paths_plugin_set_colors
if not set -q ___paths_plugin_colors
set -Ux ___paths_plugin_colors 27e6ff 29e0ff 5cd8ff 77d0ff 8ac8ff 9cbfff afb5ff c5a7ff d99bfe ea8feb f684d5 fe7abd ff73a3 ff708a fa7070 ff708a ff73a3 fe7abd f684d5 ea8feb d99bfe c5a7ff afb5ff 9cbfff 8ac8ff 77d0ff 5cd8ff 29e0ff
end
return 0
end
function ___paths_plugin_cycle_color
if not set -q ___paths_plugin_current_color
set -Ux ___paths_plugin_current_color 1
else if test $___paths_plugin_current_color -gt (count $___paths_plugin_colors)
set -Ux ___paths_plugin_current_color 1
end
echo $___paths_plugin_colors[$___paths_plugin_current_color]
set -Ux ___paths_plugin_current_color (math $___paths_plugin_current_color + 1)
end
function ___paths_plugin_handle_found_item -a testName outFlags
set -f flags (string split -n ' ' -- "$outFlags")
set -f options (fish_opt -s c -l clean)
set -a options (fish_opt -s s -l single)
set -a options (fish_opt -s k -l no-color)
set -a options (fish_opt -s n -l inline)
argparse $options -- $flags
set -f arrow "=>"
# check if file exists
if test -e "$testName"
set -f nameOut (string trim -- "$testName")
if not set -q _flag_c # is not clean
if test -L "$testName" # is symlink
set -f __linkname (readlink -f "$testName")
set __linkname (string trim -- "$__linkname")
set testName (string trim -- "$testName")
if not set -q _flag_k # is color
set nameOut (___paths_plugin_wrap_color (___paths_plugin_cycle_color) $testName) (___paths_plugin_wrap_color "yellow" "$arrow") (___paths_plugin_wrap_color (___paths_plugin_cycle_color) $__linkname)
else # is color
set nameOut (echo -n "$testName" "$arrow" "$__linkname")
end
else # is not symlink
if not set -q _flag_k # is color
set testName (string trim -- "$testName")
set nameOut (___paths_plugin_wrap_color (___paths_plugin_cycle_color) "$testName")
else
set testName (string trim -- "$testName")
set nameOut "$testName"
end
end
set nameOut (string trim -- "$nameOut")
# do the tick
if set -q _flag_k # is not color
set nameOut "- $nameOut"
else # is color
set nameOut (___paths_plugin_wrap_color "yellow" "-") "$nameOut"
end
end
set nameOut (string trim -- "$nameOut")
echo -n $nameOut
end
end
function paths --description "Reveal the executable matches in shell paths or fish autoload."
set -f options (fish_opt -s c -l clean)
set -a options (fish_opt -s s -l single)
set -a options (fish_opt -s k -l no-color)
set -a options (fish_opt -s q -l quiet)
set -a options (fish_opt -s n -l inline)
argparse $options -- $argv
if test (count $argv) -lt 1
echo "paths - executable matches in shell paths or fish autoload."
and echo "usage: paths [-c|-s|-k] <name>"
and echo -e "\t-c or --no-color: output without color"
and echo -e "\t-s or --single: output without color or headers, the first result"
and echo -e "\t-k or --clean: output without tick marks or headers"
# and echo -e "\t-n or --inline: output without endline"
and return 1
end
set -f foundStatus 1
set -f input (string trim -- $argv)
# deprecated
if set -q _flag_q
set _flag_c True
end
if set -q _flag_s
set _flag_k True
set _flag_c True
end
set -f outFlags ''
set -q _flag_n; and set -a outFlags -n
set -q _flag_c; and set -a outFlags -c
set -q _flag_k; and set -a outFlags -k
set -q _flag_s; and set -a outFlags -s
set outFlags (string split -n " " -- "$outFlags")
___paths_plugin_set_colors
# loop over list of path lists
for pVar in VIRTUAL_ENV fisher_path fish_function_path fish_user_paths PATH
set -e acc
set -f acc ''
set -e hit
# see if variable is empty
if test -z "$pVar"
continue
end
set -f acc (begin
for t in $$pVar
for snit in "$t/$input.fish" "$t/$input"
set -f found (___paths_plugin_handle_found_item "$snit" "$outFlags")
set found (string trim -- "$found")
if test -n "$found"
set -f hit True
echo "$found"
if set -q _flag_s
break
end
end
end
if set -q _flag_s
if set -q hit
break
end
end
end
end)
# prepend source
if not set -q _flag_c
if set -q hit
set pVar (string trim -- "$pVar")
echo -e -n "$pVar\n"
end
end
if test -n "$acc"
set foundStatus 0
for fk in $acc
echo $fk
if set -q _flag_s
# stop after one
return $foundStatus
end
end
end
end
# check
set -l built (type --type $input 12&>/dev/null)
if test -n "$built"
and test "$built" = 'builtin'
set $foundStatus 0
if not set -q _flag_c
echo -e -n "builtin\n"
if set -q _flag_k
echo - "$input"
else # is color
echo (___paths_plugin_wrap_color "yellow" "-") (___paths_plugin_wrap_color (___paths_plugin_cycle_color) "$input")
end
else
echo "$input"
end
end
return $foundStatus
end

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/ql.fish:v7.0.0
# @halostatue/fish-macos/functions/ql.fish:v7.0.1
function ql --description 'QuickLook a file or directory'
# Updated based on https://gist.github.com/chockenberry/13c15466417b88e40f23e58df8091dac

View File

@@ -1,4 +1,4 @@
# @halostatue/fish-macos/functions/remind.fish:v7.0.0
# @halostatue/fish-macos/functions/remind.fish:v7.0.1
function remind --description 'Add a reminder to Reminders.app'
is_mac 'mountain lion'

View File

@@ -21,3 +21,5 @@ dfm.sh
.scannerwork
.phpactor.json
.zsh_history
**/.claude/settings.local.json

View File

@@ -3,7 +3,7 @@
helper = cache --timeout 30000
[core]
excludesfile = ~/.config/git/gitignore
excludesfile = ~/.config/git/ignore
[init]
defaultBranch = main

View File

@@ -1,6 +1,6 @@
# Beware! This file is rewritten by htop when settings are changed in the interface.
# The parser is also very primitive, and not human-friendly.
htop_version=3.3.0
htop_version=3.4.1
config_reader_min_version=3
fields=0 48 17 18 38 39 2 46 47 49 1
hide_kernel_threads=1
@@ -25,6 +25,7 @@ detailed_cpu_time=0
cpu_count_from_one=0
show_cpu_usage=1
show_cpu_frequency=0
show_cached_memory=1
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=0

Some files were not shown because too many files have changed in this diff Show More