mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-02-01 12:47:33 +00:00
Compare commits
112 Commits
25.4.2
...
codex/2025
| Author | SHA1 | Date | |
|---|---|---|---|
| 191488c081 | |||
| cc47614280 | |||
| 91cde60dba | |||
| 5dea757707 | |||
| f8833fca73 | |||
| 9cd99dbc88 | |||
| 14f67cb5ca | |||
|
|
4ce76fbd70 | ||
|
|
ca68803fb9 | ||
| fb97f10f64 | |||
| 6dbbc439b3 | |||
| 368fbfc7c8 | |||
| d6d5a8ca36 | |||
|
|
d65c25819f | ||
|
|
62c620efad | ||
| 07fe18af75 | |||
|
|
29d3676b38 | ||
| 0b9e1803d4 | |||
|
|
c45ad9710d | ||
| cf7ca2109f | |||
| 1531647e01 | |||
|
|
15aff17f03 | ||
|
|
42a5b79048 | ||
| a72c8ff33a | |||
| 19d9035214 | |||
| 7ca077c852 | |||
| 48604d81d6 | |||
|
|
405e68f895 | ||
| 6d62352127 | |||
| 017d82abc5 | |||
|
|
24ad4bf5b7 | ||
| 07264c594f | |||
|
|
7b58f660ac | ||
|
|
b000f2b0c4 | ||
| 4d548687e1 | |||
| 519d8398de | |||
| 2203bb3957 | |||
|
|
ddafdfe3c9 | ||
| a3f35b2d18 | |||
| 90020a4998 | |||
| 0f806c172d | |||
|
|
e8eb9b98b2 | ||
| 7e0a88cf8f | |||
| f72f57ebf0 | |||
| b5e56e2cbb | |||
|
|
179938132c | ||
|
|
bae84c176c | ||
| be8a6761af | |||
| c348f3625f | |||
| 094f19c99c | |||
| 5a23ae8f01 | |||
|
|
ee47821089 | ||
|
|
b834ce04f7 | ||
|
|
6a62d73d7f | ||
|
|
440842ed34 | ||
|
|
d0563e4a29 | ||
|
|
bc404bfbea | ||
| 923f881725 | |||
| ccc5903290 | |||
|
|
786efc48fa | ||
| 2a11a28422 | |||
| 812a27ea61 | |||
| e73e61f01b | |||
| 314679b4fc | |||
|
|
516b27384a | ||
|
|
9e1af3053d | ||
|
|
9e4f8741b3 | ||
| c0995c1b49 | |||
| c9f1e824c3 | |||
| 3d301daeb1 | |||
| 8b4198dc90 | |||
| 66461f9b1b | |||
| 80851d1efd | |||
|
|
c457c0f3ab | ||
| 9936e4bd76 | |||
| c3a45e2653 | |||
| 506360a027 | |||
|
|
00074ec3ff | ||
|
|
7c7daf89ea | ||
|
|
267c54aa56 | ||
|
|
d72409efc0 | ||
| 3d9e0477b0 | |||
| cfab48eee0 | |||
| 624920b2ab | |||
|
|
fd82f1e36c | ||
|
|
48ec8cd7a7 | ||
|
|
3a61bd2b72 | ||
| 895b0ad353 | |||
| 3c733ec7eb | |||
| 5321ad7bd7 | |||
| 196077bea9 | |||
|
|
75147c7dd6 | ||
| f28ad41f67 | |||
| 61b66d3114 | |||
| 282f760a4f | |||
| 4a9c9b4cb9 | |||
| 16311ee5b4 | |||
| 2fddfa82c0 | |||
| 8f5f44db2d | |||
| 8ad1f5c4d0 | |||
| ac0aa1fbc0 | |||
| e8c6794ff6 | |||
| 4de9a649f0 | |||
|
|
e7f115680e | ||
| f3b4551d0c | |||
| 64725c57dc | |||
| b32ee414e3 | |||
|
|
6ea7807718 | ||
| 6a776bd3dd | |||
| 6ffe581326 | |||
| 5d476e8eed | |||
|
|
bf84c67f08 |
@@ -8,11 +8,14 @@ indent_style = space
|
|||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.fish]
|
||||||
|
max_line_length = 80
|
||||||
|
|
||||||
[*.md]
|
[*.md]
|
||||||
max_line_length = 100
|
max_line_length = 100
|
||||||
|
|
||||||
[*.lua]
|
[*.lua]
|
||||||
max_line_length = 120
|
max_line_length = 90
|
||||||
|
|
||||||
[*.{php,fish}]
|
[*.{php,fish}]
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|||||||
50
.gitattributes
vendored
50
.gitattributes
vendored
@@ -1,4 +1,4 @@
|
|||||||
## GITATTRIBUTES FOR WEB PROJECTS
|
## GITATTRIBUTES
|
||||||
#
|
#
|
||||||
# These settings are for any web project.
|
# These settings are for any web project.
|
||||||
#
|
#
|
||||||
@@ -20,20 +20,23 @@
|
|||||||
*.bat text eol=crlf
|
*.bat text eol=crlf
|
||||||
*.cmd text eol=crlf
|
*.cmd text eol=crlf
|
||||||
*.coffee text
|
*.coffee text
|
||||||
*.css text diff=css
|
*.css text diff=css eol=lf
|
||||||
*.htm text diff=html
|
*.fish text diff=shell eol=lf
|
||||||
*.html text diff=html
|
*.htm text diff=html eol=lf
|
||||||
|
*.html text diff=html eol=lf
|
||||||
*.inc text
|
*.inc text
|
||||||
*.ini text
|
*.ini text
|
||||||
*.js text
|
*.js text
|
||||||
*.json text
|
*.json text
|
||||||
*.jsx text
|
*.jsx text
|
||||||
*.less text
|
*.less text
|
||||||
|
*.lua text diff=lua eol=lf
|
||||||
*.ls text
|
*.ls text
|
||||||
*.map text -diff
|
*.map text -diff
|
||||||
*.od text
|
*.od text
|
||||||
*.onlydata text
|
*.onlydata text
|
||||||
*.php text diff=php
|
*.php text diff=php
|
||||||
|
*.plist text eol=lf
|
||||||
*.pl text
|
*.pl text
|
||||||
*.ps1 text eol=crlf
|
*.ps1 text eol=crlf
|
||||||
*.py text diff=python
|
*.py text diff=python
|
||||||
@@ -41,15 +44,18 @@
|
|||||||
*.sass text
|
*.sass text
|
||||||
*.scm text
|
*.scm text
|
||||||
*.scss text diff=css
|
*.scss text diff=css
|
||||||
*.sh text eol=lf
|
*.sh text eol=lf diff=shell
|
||||||
.husky/* text eol=lf
|
.husky/* text eol=lf
|
||||||
*.sql text
|
*.sql text
|
||||||
*.styl text
|
*.styl text
|
||||||
*.tag text
|
*.tag text
|
||||||
|
*.tmux text eol=lf diff=tmux
|
||||||
*.ts text
|
*.ts text
|
||||||
*.tsx text
|
*.tsx text
|
||||||
|
*.vim text eol=lf
|
||||||
*.xml text
|
*.xml text
|
||||||
*.xhtml text diff=html
|
*.xhtml text diff=html
|
||||||
|
*.zsh text diff=zsh eol=lf
|
||||||
|
|
||||||
# Docker
|
# Docker
|
||||||
Dockerfile text
|
Dockerfile text
|
||||||
@@ -68,6 +74,7 @@ Dockerfile text
|
|||||||
AUTHORS text
|
AUTHORS text
|
||||||
CHANGELOG text
|
CHANGELOG text
|
||||||
CHANGES text
|
CHANGES text
|
||||||
|
CODEOWNERS text
|
||||||
CONTRIBUTING text
|
CONTRIBUTING text
|
||||||
COPYING text
|
COPYING text
|
||||||
copyright text
|
copyright text
|
||||||
@@ -78,6 +85,7 @@ LICENSE text
|
|||||||
NEWS text
|
NEWS text
|
||||||
readme text
|
readme text
|
||||||
*README* text
|
*README* text
|
||||||
|
# Files literally named "TODO", not a todo list item
|
||||||
TODO text
|
TODO text
|
||||||
|
|
||||||
# Templates
|
# Templates
|
||||||
@@ -105,6 +113,8 @@ TODO text
|
|||||||
*.config text
|
*.config text
|
||||||
.editorconfig text
|
.editorconfig text
|
||||||
.env text
|
.env text
|
||||||
|
*.env text
|
||||||
|
*.env.* text
|
||||||
.gitattributes text
|
.gitattributes text
|
||||||
.gitconfig text
|
.gitconfig text
|
||||||
.htaccess text
|
.htaccess text
|
||||||
@@ -113,7 +123,8 @@ package.json text eol=lf
|
|||||||
package-lock.json text eol=lf -diff
|
package-lock.json text eol=lf -diff
|
||||||
pnpm-lock.yaml text eol=lf -diff
|
pnpm-lock.yaml text eol=lf -diff
|
||||||
.prettierrc text
|
.prettierrc text
|
||||||
yarn.lock text -diff
|
# Ensure yarn.lock shows textual diffs
|
||||||
|
yarn.lock text eol=lf
|
||||||
*.toml text
|
*.toml text
|
||||||
*.yaml text
|
*.yaml text
|
||||||
*.yml text
|
*.yml text
|
||||||
@@ -208,15 +219,38 @@ Procfile text
|
|||||||
|
|
||||||
*.gitignore text
|
*.gitignore text
|
||||||
*.gitkeep text
|
*.gitkeep text
|
||||||
.gitattributes export-ignore
|
.gitattributes text export-ignore
|
||||||
|
*.gitattributes text export-ignore
|
||||||
|
.gitmodules text export-ignore
|
||||||
|
*.gitmodules text export-ignore
|
||||||
**/.gitignore export-ignore
|
**/.gitignore export-ignore
|
||||||
**/.gitkeep export-ignore
|
**/.gitkeep export-ignore
|
||||||
|
|
||||||
# Repo specials
|
# Repo specials
|
||||||
local/bin/* text eol=lf
|
local/bin/* text eol=lf diff=shell
|
||||||
|
local/bin/*.md text eol=lf diff=markdown
|
||||||
config/antigen.zsh text
|
config/antigen.zsh text
|
||||||
git/* text
|
git/* text
|
||||||
**/git/* text
|
**/git/* text
|
||||||
**/alias text
|
**/alias text
|
||||||
ssh/* text
|
ssh/* text
|
||||||
|
ssh/shared.d/* text
|
||||||
|
ssh/local.d/* text
|
||||||
|
|
||||||
|
# Auto-generated rules - 2025-04-16 10:28:04
|
||||||
|
# Shell scripts detected by content
|
||||||
|
install text eol=lf diff=shell
|
||||||
|
|
||||||
|
# File extension-based rules
|
||||||
|
*.1 text eol=lf
|
||||||
|
*.applescript text eol=lf
|
||||||
|
*.d/work-git text eol=lf
|
||||||
|
*.dirs text eol=lf
|
||||||
|
*.example text eol=lf
|
||||||
|
*.itermcolors text eol=lf
|
||||||
|
*.locale text eol=lf
|
||||||
|
*.python-version text eol=lf
|
||||||
|
*.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
30
.github/AGENTS.md
vendored
Normal 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 : -->
|
||||||
8
.github/CODE_OF_CONDUCT.md
vendored
8
.github/CODE_OF_CONDUCT.md
vendored
@@ -60,7 +60,7 @@ representative at an online or offline event.
|
|||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
reported to the community leaders responsible for enforcement at
|
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 complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
All community leaders are obligated to respect the privacy and security of the
|
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],
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
version 2.0, available at
|
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
|
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||||
enforcement ladder](https://github.com/mozilla/diversity).
|
enforcement ladder](https://github.com/mozilla/diversity).
|
||||||
@@ -124,5 +124,5 @@ enforcement ladder](https://github.com/mozilla/diversity).
|
|||||||
[homepage]: https://www.contributor-covenant.org
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
For answers to common questions about this code of conduct, see the FAQ at
|
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/faq>. Translations are available at
|
||||||
https://www.contributor-covenant.org/translations.
|
<https://www.contributor-covenant.org/translations>.
|
||||||
|
|||||||
46
.github/README.md
vendored
46
.github/README.md
vendored
@@ -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. |
|
| `local/bin` | Helper scripts that I've collected or wrote. |
|
||||||
| `scripts` | Setup scripts. |
|
| `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
|
### dotfile folders
|
||||||
|
|
||||||
| Repo | Destination | Description |
|
| 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.
|
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
|
## Configuration
|
||||||
|
|
||||||
The folder structure follows [XDG Base Directory Specification][xdg] where possible.
|
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.
|
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
|
[dfm]: https://github.com/ivuorinen/dotfiles/blob/main/local/bin/dfm
|
||||||
[docs-folders]: https://github.com/ivuorinen/dotfiles/blob/main/docs/folders.md
|
[docs-folders]: https://github.com/ivuorinen/dotfiles/blob/main/docs/folders.md
|
||||||
[xdg]: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
[xdg]: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||||||
|
|||||||
2
.github/workflows/changelog.yml
vendored
2
.github/workflows/changelog.yml
vendored
@@ -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
|
name: Debug Changelog # Workflow name displayed on GitHub
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|||||||
64
.github/workflows/linters.yml
vendored
64
.github/workflows/linters.yml
vendored
@@ -1,8 +1,10 @@
|
|||||||
---
|
---
|
||||||
# yaml-language-server: https://json.schemastore.org/github-workflow.json
|
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
||||||
name: Reviewdog
|
name: Lint Code Base
|
||||||
|
|
||||||
on: [push]
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches: [master, main]
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
@@ -11,48 +13,24 @@ concurrency:
|
|||||||
permissions: read-all
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
linters:
|
Linter:
|
||||||
name: Linters
|
name: PR Lint
|
||||||
|
runs-on: ubuntu-latest
|
||||||
runs-on: self-hosted
|
timeout-minutes: 15
|
||||||
|
permissions:
|
||||||
permissions: write-all
|
statuses: write
|
||||||
|
contents: read
|
||||||
|
packages: read
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Checkout
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: GitHub Actions
|
- name: Yarn Lock Changes
|
||||||
uses: reviewdog/action-actionlint@a5524e1c19e62881d79c1f1b9b6f09f16356e281 # v1.65.2
|
uses: Simek/yarn-lock-changes@34017425198654c20162a4dfd4f238fbece9636f # v0.12.1
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
reporter: github-pr-review
|
|
||||||
|
|
||||||
- name: detect-secrets
|
- name: Run PR Lint
|
||||||
uses: reviewdog/action-detect-secrets@master
|
# https://github.com/ivuorinen/actions
|
||||||
with:
|
uses: ivuorinen/actions/pr-lint@625c37446b1c7e219755a40807f825c9283f6e05 # 25.7.7
|
||||||
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
|
|
||||||
|
|||||||
4
.github/workflows/new-release.yml
vendored
4
.github/workflows/new-release.yml
vendored
@@ -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
|
name: Release Daily State
|
||||||
|
|
||||||
on:
|
on:
|
||||||
@@ -40,7 +40,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Create release
|
- name: Create release
|
||||||
if: steps.daily-version.outputs.created
|
if: steps.daily-version.outputs.created
|
||||||
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2.2.1
|
uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # v2.3.2
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
tag_name: ${{ steps.daily-version.outputs.version }}
|
tag_name: ${{ steps.daily-version.outputs.version }}
|
||||||
|
|||||||
12
.github/workflows/pre-commit-autoupdate.yml
vendored
12
.github/workflows/pre-commit-autoupdate.yml
vendored
@@ -1,11 +1,11 @@
|
|||||||
---
|
---
|
||||||
# yaml-language-server: https://json.schemastore.org/github-workflow.json
|
# $schema: "https://json.schemastore.org/github-workflow.json"
|
||||||
name: Pre-commit autoupdate
|
name: Pre-commit autoupdate
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
# At 04:00 on Monday and Thursday.
|
# At 04:00 on Monday and Thursday.
|
||||||
- cron: "0 4 * * 1,4"
|
- cron: '0 4 * * 1,4'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@@ -16,7 +16,7 @@ permissions: read-all
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
auto-update:
|
auto-update:
|
||||||
runs-on: ubuntu-latest
|
runs-on: self-hosted
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
||||||
|
|
||||||
- run: pip install pre-commit && pre-commit autoupdate
|
- run: pip install pre-commit && pre-commit autoupdate
|
||||||
|
|
||||||
@@ -33,6 +33,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
branch: update/pre-commit-hooks
|
branch: update/pre-commit-hooks
|
||||||
title: "chore: update pre-commit hooks"
|
title: 'chore: update pre-commit hooks'
|
||||||
commit-message: "chore: update pre-commit hooks"
|
commit-message: 'chore: update pre-commit hooks'
|
||||||
body: Update versions of pre-commit hooks to latest version.
|
body: Update versions of pre-commit hooks to latest version.
|
||||||
|
|||||||
2
.github/workflows/semantic-pr.yml
vendored
2
.github/workflows/semantic-pr.yml
vendored
@@ -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
|
name: Semantic PR
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|||||||
8
.github/workflows/sync-labels.yml
vendored
8
.github/workflows/sync-labels.yml
vendored
@@ -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
|
name: Sync labels
|
||||||
|
|
||||||
# yamllint disable-line rule:truthy
|
# yamllint disable-line rule:truthy
|
||||||
@@ -11,7 +11,7 @@ on:
|
|||||||
- .github/workflows/sync-labels.yml
|
- .github/workflows/sync-labels.yml
|
||||||
- .github/labels.yml
|
- .github/labels.yml
|
||||||
schedule:
|
schedule:
|
||||||
- cron: "34 5 * * *"
|
- cron: '34 5 * * *'
|
||||||
workflow_call:
|
workflow_call:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
@@ -23,10 +23,10 @@ permissions: read-all
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
SyncLabels:
|
SyncLabels:
|
||||||
runs-on: ubuntu-latest
|
runs-on: self-hosted
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
issues: write
|
issues: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: ivuorinen/actions/sync-labels@main
|
- uses: ivuorinen/actions/sync-labels@625c37446b1c7e219755a40807f825c9283f6e05 # 25.7.7
|
||||||
|
|||||||
5
.github/workflows/update-submodules.yml
vendored
5
.github/workflows/update-submodules.yml
vendored
@@ -1,11 +1,11 @@
|
|||||||
---
|
---
|
||||||
# yaml-language-server: https://json.schemastore.org/github-workflow.json
|
# $schema: "https://json.schemastore.org/github-workflow.json"
|
||||||
name: Update submodules
|
name: Update submodules
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
# At 04:00 on Monday and Thursday.
|
# At 04:00 on Monday and Thursday.
|
||||||
- cron: "0 4 * * 1"
|
- cron: '0 4 * * 1'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@@ -21,7 +21,6 @@ jobs:
|
|||||||
permissions: write-all
|
permissions: write-all
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
|
|||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -40,9 +40,12 @@ node_modules
|
|||||||
ssh/local.d/*
|
ssh/local.d/*
|
||||||
!ssh/local.d/.gitkeep
|
!ssh/local.d/.gitkeep
|
||||||
config/fish/fish_variables
|
config/fish/fish_variables
|
||||||
|
**/exports.secret.fish
|
||||||
**/exports-secret.fish
|
**/exports-secret.fish
|
||||||
config/fish/completions/asdf.fish
|
config/fish/completions/asdf.fish
|
||||||
config/vim/.netrwhist
|
config/vim/.netrwhist
|
||||||
config/vim/extra/*
|
config/vim/extra/*
|
||||||
config/gh/hosts.yml
|
config/gh/hosts.yml
|
||||||
dependency-check-report.html
|
dependency-check-report.html
|
||||||
|
local/bin/yabai
|
||||||
|
local/man/yabai.1
|
||||||
|
|||||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -80,3 +80,6 @@
|
|||||||
shallow = true
|
shallow = true
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
|
|
||||||
|
[submodule "tmux/tmux-resurrect"]
|
||||||
|
path = config/tmux/plugins/tmux-resurrect
|
||||||
|
url = https://github.com/tmux-plugins/tmux-resurrect.git
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
{
|
{
|
||||||
"diagnostics.globals": [
|
"diagnostics.globals": ["vim"]
|
||||||
"vim"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# only care about files that are directly under our control
|
# only care about files that are directly under our control
|
||||||
config/cheat/cheatsheets/community/*
|
config/cheat/cheatsheets/community/*
|
||||||
config/cheat/cheatsheets/tldr/*
|
config/cheat/cheatsheets/tldr/*
|
||||||
|
config/op/plugins/used_plugins/*
|
||||||
config/tmux/plugins/*
|
config/tmux/plugins/*
|
||||||
local/bin/asdf/*
|
local/bin/asdf/*
|
||||||
tools/*
|
tools/*
|
||||||
|
|||||||
29
.mega-linter.yml
Normal file
29
.mega-linter.yml
Normal 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)
|
||||||
|
|
||||||
@@ -23,13 +23,13 @@ repos:
|
|||||||
args: [--autofix, --no-sort-keys]
|
args: [--autofix, --no-sort-keys]
|
||||||
|
|
||||||
- repo: https://github.com/igorshubovych/markdownlint-cli
|
- repo: https://github.com/igorshubovych/markdownlint-cli
|
||||||
rev: v0.44.0
|
rev: v0.45.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: markdownlint
|
- id: markdownlint
|
||||||
args: [-c, .markdownlint.json, --fix]
|
args: [-c, .markdownlint.json, --fix]
|
||||||
|
|
||||||
- repo: https://github.com/adrienverge/yamllint
|
- repo: https://github.com/adrienverge/yamllint
|
||||||
rev: v1.37.0
|
rev: v1.37.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: yamllint
|
- id: yamllint
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ repos:
|
|||||||
- id: shellcheck
|
- id: shellcheck
|
||||||
|
|
||||||
- repo: https://github.com/scop/pre-commit-shfmt
|
- repo: https://github.com/scop/pre-commit-shfmt
|
||||||
rev: v3.11.0-1
|
rev: v3.12.0-1
|
||||||
hooks:
|
hooks:
|
||||||
- id: shfmt
|
- id: shfmt
|
||||||
|
|
||||||
@@ -49,12 +49,12 @@ repos:
|
|||||||
- id: actionlint
|
- id: actionlint
|
||||||
|
|
||||||
- repo: https://github.com/renovatebot/pre-commit-hooks
|
- repo: https://github.com/renovatebot/pre-commit-hooks
|
||||||
rev: 39.222.1
|
rev: 41.23.5
|
||||||
hooks:
|
hooks:
|
||||||
- id: renovate-config-validator
|
- id: renovate-config-validator
|
||||||
|
|
||||||
- repo: https://github.com/JohnnyMorganz/StyLua
|
- repo: https://github.com/JohnnyMorganz/StyLua
|
||||||
rev: v2.0.2
|
rev: v2.1.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: stylua # or stylua-system / stylua-github
|
- id: stylua # or stylua-system / stylua-github
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ config/cheat/cheatsheets/community
|
|||||||
config/cheat/cheatsheets/tldr
|
config/cheat/cheatsheets/tldr
|
||||||
config/fzf/*
|
config/fzf/*
|
||||||
config/nvim/*
|
config/nvim/*
|
||||||
|
config/op/plugins/used_plugins/*
|
||||||
config/tmux/plugins/*
|
config/tmux/plugins/*
|
||||||
config/zsh/*
|
config/zsh/*
|
||||||
lazy-lock.json
|
lazy-lock.json
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
3.13.2
|
3.13.5
|
||||||
|
|||||||
34
AGENTS.md
Normal file
34
AGENTS.md
Normal 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.
|
||||||
@@ -26,6 +26,8 @@ git submodule add --name tmux/tmux-continuum \
|
|||||||
-f https://github.com/tmux-plugins/tmux-continuum config/tmux/plugins/tmux-continuum
|
-f https://github.com/tmux-plugins/tmux-continuum config/tmux/plugins/tmux-continuum
|
||||||
git submodule add --name tmux/tmux-mode-indicator \
|
git submodule add --name tmux/tmux-mode-indicator \
|
||||||
-f https://github.com/MunifTanjim/tmux-mode-indicator.git config/tmux/plugins/tmux-mode-indicator
|
-f https://github.com/MunifTanjim/tmux-mode-indicator.git config/tmux/plugins/tmux-mode-indicator
|
||||||
|
git submodule add --name tmux/tmux-resurrect \
|
||||||
|
-f https://github.com/tmux-plugins/tmux-resurrect.git config/tmux/plugins/tmux-resurrect
|
||||||
git submodule add --name tmux/tmux-sensible \
|
git submodule add --name tmux/tmux-sensible \
|
||||||
-f https://github.com/tmux-plugins/tmux-sensible.git config/tmux/plugins/tmux-sensible
|
-f https://github.com/tmux-plugins/tmux-sensible.git config/tmux/plugins/tmux-sensible
|
||||||
git submodule add --name tmux/tmux-sessionist \
|
git submodule add --name tmux/tmux-sessionist \
|
||||||
@@ -55,7 +57,6 @@ folders=(
|
|||||||
"config/tmux/plugins/tpm"
|
"config/tmux/plugins/tpm"
|
||||||
"config/tmux/plugins/tmux"
|
"config/tmux/plugins/tmux"
|
||||||
"config/tmux/plugins/tmux-menus"
|
"config/tmux/plugins/tmux-menus"
|
||||||
"config/tmux/plugins/tmux-resurrect"
|
|
||||||
"tools/dotbot-crontab"
|
"tools/dotbot-crontab"
|
||||||
"tools/dotbot-snap"
|
"tools/dotbot-snap"
|
||||||
"config/nvim-kickstart"
|
"config/nvim-kickstart"
|
||||||
|
|||||||
@@ -20,6 +20,16 @@
|
|||||||
"value": "Ismo Vuorinen"
|
"value": "Ismo Vuorinen"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"masf": [
|
||||||
|
{
|
||||||
|
"key": "user.email",
|
||||||
|
"value": "ismo@masf.fi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "user.name",
|
||||||
|
"value": "Ismo Vuorinen"
|
||||||
|
}
|
||||||
|
],
|
||||||
"work": [
|
"work": [
|
||||||
{
|
{
|
||||||
"key": "user.email",
|
"key": "user.email",
|
||||||
|
|||||||
@@ -8,14 +8,8 @@
|
|||||||
# supported_envs:
|
# supported_envs:
|
||||||
# - all
|
# - all
|
||||||
registries:
|
registries:
|
||||||
- type: standard
|
- type: standard
|
||||||
ref: v4.331.0 # renovate: depName=aquaproj/aqua-registry
|
ref: v4.346.0 # renovate: depName=aquaproj/aqua-registry
|
||||||
packages:
|
packages:
|
||||||
- name: cli/cli
|
- name: cli/cli
|
||||||
version: 'v2.69.0'
|
version: 'v2.69.0'
|
||||||
- name: junegunn/fzf
|
|
||||||
version: 'v0.60.3'
|
|
||||||
- name: jqlang/jq
|
|
||||||
version: 'jq-1.7.1'
|
|
||||||
- name: 1password/cli
|
|
||||||
version: '2.30.3'
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
// These are golang packages I use,
|
// These are golang packages I use,
|
||||||
// so they should be available with all versions
|
// 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
|
// Git Profile allows you to switch between user profiles in git repos
|
||||||
github.com/dotzero/git-profile@v1.4.0
|
github.com/dotzero/git-profile@v1.4.0
|
||||||
// An extensible command line tool or library to format yaml files.
|
// 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
|
github.com/doron-cohen/antidot@v0.6.3
|
||||||
// FZF is a general-purpose command-line fuzzy finder.
|
// FZF is a general-purpose command-line fuzzy finder.
|
||||||
github.com/junegunn/fzf@latest
|
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
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,6 @@ cheatpaths:
|
|||||||
path: ~/.dotfiles/config/cheat/cheatsheets/personal
|
path: ~/.dotfiles/config/cheat/cheatsheets/personal
|
||||||
tags: [personal]
|
tags: [personal]
|
||||||
readonly: false
|
readonly: false
|
||||||
|
|
||||||
# While it requires no configuration here, it's also worth noting that
|
# While it requires no configuration here, it's also worth noting that
|
||||||
# cheat will automatically append directories named '.cheat' within the
|
# cheat will automatically append directories named '.cheat' within the
|
||||||
# current working directory to the 'cheatpath'. This can be very useful if
|
# current working directory to the 'cheatpath'. This can be very useful if
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
### Do not edit. This was autogenerated by 'asdf direnv setup' ###
|
### Do not edit. This was autogenerated by 'asdf direnv setup' ###
|
||||||
|
# shellcheck shell=bash
|
||||||
use_asdf() {
|
use_asdf() {
|
||||||
source_env "$(asdf direnv envrc "$@")"
|
source_env "$(asdf direnv envrc "$@")"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ get_sha256sum()
|
|||||||
# $2 - filename (string)
|
# $2 - filename (string)
|
||||||
#
|
#
|
||||||
# Returns 1 when replaceable, 0 when not replaceable.
|
# Returns 1 when replaceable, 0 when not replaceable.
|
||||||
replacable()
|
replaceable()
|
||||||
{
|
{
|
||||||
FILE1="$1"
|
FILE1="$1"
|
||||||
FILE2="$2"
|
FILE2="$2"
|
||||||
|
|||||||
@@ -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
|
complete --command app --erase
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
|
||||||
@@ -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
|
complete --command finder --erase
|
||||||
|
|
||||||
|
|||||||
8
config/fish/completions/fzf_configure_bindings.fish
Normal file
8
config/fish/completions/fzf_configure_bindings.fish
Normal 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"
|
||||||
176
config/fish/completions/git-profile.fish
Normal file
176
config/fish/completions/git-profile.fish
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
# fish completion for git-profile -*- shell-script -*-
|
||||||
|
|
||||||
|
function __git_profile_debug
|
||||||
|
set -l file "$BASH_COMP_DEBUG_FILE"
|
||||||
|
if test -n "$file"
|
||||||
|
echo "$argv" >> $file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function __git_profile_perform_completion
|
||||||
|
__git_profile_debug "Starting __git_profile_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))
|
||||||
|
|
||||||
|
__git_profile_debug "args: $args"
|
||||||
|
__git_profile_debug "last arg: $lastArg"
|
||||||
|
|
||||||
|
set -l requestComp "$args[1] __complete $args[2..-1] $lastArg"
|
||||||
|
|
||||||
|
__git_profile_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")
|
||||||
|
|
||||||
|
__git_profile_debug "Comps: $comps"
|
||||||
|
__git_profile_debug "DirectiveLine: $directiveLine"
|
||||||
|
__git_profile_debug "flagPrefix: $flagPrefix"
|
||||||
|
|
||||||
|
for comp in $comps
|
||||||
|
printf "%s%s\n" "$flagPrefix" "$comp"
|
||||||
|
end
|
||||||
|
|
||||||
|
printf "%s\n" "$directiveLine"
|
||||||
|
end
|
||||||
|
|
||||||
|
# This function does two things:
|
||||||
|
# - Obtain the completions and store them in the global __git_profile_comp_results
|
||||||
|
# - Return false if file completion should be performed
|
||||||
|
function __git_profile_prepare_completions
|
||||||
|
__git_profile_debug ""
|
||||||
|
__git_profile_debug "========= starting completion logic =========="
|
||||||
|
|
||||||
|
# Start fresh
|
||||||
|
set --erase __git_profile_comp_results
|
||||||
|
|
||||||
|
set -l results (__git_profile_perform_completion)
|
||||||
|
__git_profile_debug "Completion results: $results"
|
||||||
|
|
||||||
|
if test -z "$results"
|
||||||
|
__git_profile_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 $results[-1])
|
||||||
|
set --global __git_profile_comp_results $results[1..-2]
|
||||||
|
|
||||||
|
__git_profile_debug "Completions are: $__git_profile_comp_results"
|
||||||
|
__git_profile_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
|
||||||
|
__git_profile_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
|
||||||
|
__git_profile_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)
|
||||||
|
|
||||||
|
__git_profile_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)
|
||||||
|
__git_profile_debug "prefix: $prefix"
|
||||||
|
|
||||||
|
set -l completions (string match -r -- "^$prefix.*" $__git_profile_comp_results)
|
||||||
|
set --global __git_profile_comp_results $completions
|
||||||
|
__git_profile_debug "Filtered completions are: $__git_profile_comp_results"
|
||||||
|
|
||||||
|
# Important not to quote the variable for count to work
|
||||||
|
set -l numComps (count $__git_profile_comp_results)
|
||||||
|
__git_profile_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 $__git_profile_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.
|
||||||
|
__git_profile_debug "Adding second completion to perform nospace directive"
|
||||||
|
set --global __git_profile_comp_results $split[1] $split[1].
|
||||||
|
__git_profile_debug "Completions are now: $__git_profile_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
|
||||||
|
__git_profile_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 "git-profile"
|
||||||
|
# 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 "git-profile " > /dev/null 2>&1
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove any pre-existing completions for the program since we will be handling all of them.
|
||||||
|
complete -c git-profile -e
|
||||||
|
|
||||||
|
# The call to __git_profile_prepare_completions will setup __git_profile_comp_results
|
||||||
|
# which provides the program's completion choices.
|
||||||
|
complete -c git-profile -n '__git_profile_prepare_completions' -f -a '$__git_profile_comp_results'
|
||||||
|
|
||||||
@@ -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
|
complete --command mac --erase
|
||||||
|
|
||||||
|
|||||||
@@ -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 --erase
|
||||||
complete --command manp --wraps man
|
complete --command manp --wraps man
|
||||||
|
|||||||
@@ -1,63 +0,0 @@
|
|||||||
# NVM (https://github.com/creationix/nvm) completions for Fish shell
|
|
||||||
# Inspired on (https://github.com/derekstavis/plugin-nvm)
|
|
||||||
|
|
||||||
function __nvm_complete_ls_remote
|
|
||||||
if not test "$__nvm_ls_remote"
|
|
||||||
set -g __nvm_ls_remote (nvm ls-remote | grep -Po '(?:iojs-)?v[0-9]+\.[0-9]+\.[0-9]+')
|
|
||||||
end
|
|
||||||
|
|
||||||
printf "%s\n" $__nvm_ls_remote
|
|
||||||
end
|
|
||||||
|
|
||||||
function __nvm_complete_ls
|
|
||||||
if not test "$__nvm_ls"
|
|
||||||
set -g __nvm_ls (nvm ls | grep -Po '[[:space:]].\K(v[0-9]+\.[0-9]+\.[0-9]+)')
|
|
||||||
end
|
|
||||||
|
|
||||||
printf "%s\n" $__nvm_ls
|
|
||||||
end
|
|
||||||
|
|
||||||
#Install
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'install' -d 'Download and install a <version>. Uses .nvmrc if available'
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from install" -a "(__nvm_complete_ls_remote)"
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from install" -l reinstall-packages-from= -d 'When installing, reinstall packages installed in <node|iojs|node version number>'
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from install" -s s -d 'From source'
|
|
||||||
|
|
||||||
#Use
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'use' -d 'Modify PATH to use <version>. Uses .nvmrc if available'
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from use" -a "(__nvm_complete_ls)"
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from use" -l silent
|
|
||||||
|
|
||||||
#Exec
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'exec' -d 'Run <command> on <version>. Uses .nvmrc if available'
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from exec" -a "(__nvm_complete_ls)"
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from exec" -l silent
|
|
||||||
|
|
||||||
#Run
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'run' -d 'Run <command> on <version>. Uses .nvmrc if available'
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from run" -a "(__nvm_complete_ls)"
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from run" -l silent
|
|
||||||
|
|
||||||
|
|
||||||
#Uninstall
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'uninstall' -d 'Uninstall a version'
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from uninstall" -a "(__nvm_complete_ls)"
|
|
||||||
|
|
||||||
#Which
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'which' -d 'Display path to installed node version. Uses .nvmrc if available'
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from which" -a "(__nvm_complete_ls)"
|
|
||||||
|
|
||||||
#Reinstall-Packages
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'reinstall-packages' -d 'Reinstall global `npm` packages contained in <version> to current version'
|
|
||||||
complete -f -c nvm -n "__fish_seen_subcommand_from reinstall-packages" -a "(__nvm_complete_ls)"
|
|
||||||
|
|
||||||
#Completions
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'current' -d 'Display currently activated version'
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'ls' -d 'List installed versions'
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'ls-remote' -d 'List remote versions available for install'
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'version' -d 'Resolve the given description to a single local <version>'
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'version-remote' -d 'Resolve the given description to a single remote <version>'
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'deactivate' -d 'Undo effects of `nvm` on current shell'
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'alias' -d 'Show all aliases beginning with <pattern> or set an alias named <name> pointing to <version>'
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'unalias' -d 'Deletes the alias named <name>'
|
|
||||||
complete -f -c nvm -n '__fish_use_subcommand' -a 'unload' -d 'Unload `nvm` from shell'
|
|
||||||
@@ -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 --erase --command ql
|
||||||
complete --command ql --wraps qlmanage
|
complete --command ql --wraps qlmanage
|
||||||
|
|||||||
28
config/fish/conf.d/fzf.fish
Normal file
28
config/fish/conf.d/fzf.fish
Normal 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
|
||||||
@@ -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
|
function _halostatue_fish_macos_uninstall -e halostatue_fish_macos_uninstall
|
||||||
set --function functions app finder has_app mac manp note ql remind
|
set --function functions app finder has_app mac manp note ql remind
|
||||||
|
|||||||
25
config/fish/conf.d/puffer_fish_key_bindings.fish
Normal file
25
config/fish/conf.d/puffer_fish_key_bindings.fish
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
status is-interactive || exit
|
||||||
|
|
||||||
|
function _puffer_fish_key_bindings --on-variable fish_key_bindings
|
||||||
|
set -l modes
|
||||||
|
if test "$fish_key_bindings" = fish_default_key_bindings
|
||||||
|
set modes default insert
|
||||||
|
else
|
||||||
|
set modes insert default
|
||||||
|
end
|
||||||
|
|
||||||
|
bind --mode $modes[1] . _puffer_fish_expand_dots
|
||||||
|
bind --mode $modes[1] ! _puffer_fish_expand_bang
|
||||||
|
bind --mode $modes[1] '$' _puffer_fish_expand_lastarg
|
||||||
|
bind --mode $modes[2] --erase . ! '$'
|
||||||
|
end
|
||||||
|
|
||||||
|
_puffer_fish_key_bindings
|
||||||
|
|
||||||
|
set -l uninstall_event puffer_fish_key_bindings_uninstall
|
||||||
|
|
||||||
|
function _$uninstall_event --on-event $uninstall_event
|
||||||
|
bind -e .
|
||||||
|
bind -e !
|
||||||
|
bind -e '$'
|
||||||
|
end
|
||||||
52
config/fish/conf.d/sponge.fish
Normal file
52
config/fish/conf.d/sponge.fish
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# Sponge version
|
||||||
|
set --global sponge_version 1.1.0
|
||||||
|
|
||||||
|
# Allow to repeat previous command by default
|
||||||
|
if not set --query --universal sponge_delay
|
||||||
|
set --universal sponge_delay 2
|
||||||
|
end
|
||||||
|
|
||||||
|
# Purge entries both after `sponge_delay` entries and on exit by default
|
||||||
|
if not set --query --universal sponge_purge_only_on_exit
|
||||||
|
set --universal sponge_purge_only_on_exit false
|
||||||
|
end
|
||||||
|
|
||||||
|
# Add default filters
|
||||||
|
if not set --query --universal sponge_filters
|
||||||
|
set --universal sponge_filters sponge_filter_failed sponge_filter_matched
|
||||||
|
end
|
||||||
|
|
||||||
|
# Don't filter out commands that already have been in the history by default
|
||||||
|
if not set --query --universal sponge_allow_previously_successful
|
||||||
|
set --universal sponge_allow_previously_successful true
|
||||||
|
end
|
||||||
|
|
||||||
|
# Consider `0` the only successful exit code by default
|
||||||
|
if not set --query --universal sponge_successful_exit_codes
|
||||||
|
set --universal sponge_successful_exit_codes 0
|
||||||
|
end
|
||||||
|
|
||||||
|
# No active regex patterns by default
|
||||||
|
if not set --query --universal sponge_regex_patterns
|
||||||
|
set --universal sponge_regex_patterns
|
||||||
|
end
|
||||||
|
|
||||||
|
# Attach event handlers
|
||||||
|
functions --query \
|
||||||
|
_sponge_on_prompt \
|
||||||
|
_sponge_on_preexec \
|
||||||
|
_sponge_on_postexec \
|
||||||
|
_sponge_on_exit
|
||||||
|
|
||||||
|
# Initialize empty state for the first run
|
||||||
|
function _sponge_install --on-event sponge_install
|
||||||
|
set --global _sponge_current_command ''
|
||||||
|
set --global _sponge_current_command_exit_code 0
|
||||||
|
set --global _sponge_current_command_previously_in_history false
|
||||||
|
end
|
||||||
|
|
||||||
|
# Clean up variables
|
||||||
|
function _sponge_uninstall --on-event sponge_uninstall
|
||||||
|
_sponge_clear_state
|
||||||
|
set --erase sponge_version
|
||||||
|
end
|
||||||
@@ -8,18 +8,29 @@ test -e "$HOME/.config/fish/alias.fish" &&
|
|||||||
test -e "$HOME/.config/fish/exports.fish" &&
|
test -e "$HOME/.config/fish/exports.fish" &&
|
||||||
source "$HOME/.config/fish/exports.fish"
|
source "$HOME/.config/fish/exports.fish"
|
||||||
|
|
||||||
if status is-interactive
|
test -e "$HOME/.dotfiles/config/fzf/key-bindings.fish" &&
|
||||||
# Commands to run in interactive sessions can go here
|
source "$HOME/.dotfiles/config/fzf/key-bindings.fish"
|
||||||
|
|
||||||
# Start tmux if not already running and not in SSH
|
if status is-interactive
|
||||||
open-tmux # defined in functions/open-tmux.fish
|
# Commands to run in interactive shell
|
||||||
|
|
||||||
|
# 1Password plugins if op command is available
|
||||||
|
type -q op; and test -e "$HOME/.config/op/plugins.sh" &&
|
||||||
|
source "$HOME/.config/op/plugins.sh"
|
||||||
|
|
||||||
|
# version manager initializers
|
||||||
|
type -q rbenv; and source (rbenv init -|psub)
|
||||||
|
type -q pyenv; and source (pyenv init -|psub)
|
||||||
|
type -q pyenv; and source (pyenv virtualenv-init -|psub)
|
||||||
|
type -q goenv; and source (goenv init -|psub)
|
||||||
|
# type -q fnm; and fnm env --use-on-cd --shell fish | source
|
||||||
|
type -q load_nvm; and load_nvm > /dev/stderr
|
||||||
|
|
||||||
|
# Start tmux if not already running and not in SSH
|
||||||
|
open-tmux # defined in functions/open-tmux.fish
|
||||||
end
|
end
|
||||||
|
|
||||||
# Added by LM Studio CLI (lms)
|
# Added by LM Studio CLI (lms)
|
||||||
set -gx PATH $PATH $HOME/.lmstudio/bin
|
set -gx PATH $PATH $HOME/.lmstudio/bin
|
||||||
|
|
||||||
type -q rbenv; and source (rbenv init -|psub)
|
# vim: ft=fish ts=4 sw=4 et:
|
||||||
type -q pyenv; and source (pyenv init -|psub)
|
|
||||||
type -q goenv; and source (goenv init -|psub)
|
|
||||||
type -q fnm; and fnm env --use-on-cd --shell fish | source
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,11 +22,6 @@ fish_add_path "$XDG_BIN_HOME"
|
|||||||
# Add cargo bin to path
|
# Add cargo bin to path
|
||||||
fish_add_path "$XDG_SHARE_HOME/cargo/bin"
|
fish_add_path "$XDG_SHARE_HOME/cargo/bin"
|
||||||
|
|
||||||
# Set Aqua configuration
|
|
||||||
set -q AQUA_BIN; or set -gx AQUA_BIN "$XDG_DATA_HOME/aquaproj-aqua/bin"
|
|
||||||
set -q AQUA_CONFIG; or set -gx AQUA_CONFIG "$XDG_CONFIG_HOME/aqua/aqua.yaml"
|
|
||||||
set -gx PATH $AQUA_BIN $PATH
|
|
||||||
|
|
||||||
# NPM/NVM configuration
|
# NPM/NVM configuration
|
||||||
set -q NVM_DIR; or set -x NVM_DIR "$XDG_DATA_HOME/nvm"
|
set -q NVM_DIR; or set -x NVM_DIR "$XDG_DATA_HOME/nvm"
|
||||||
fish_add_path "$NVM_DIR/bin"
|
fish_add_path "$NVM_DIR/bin"
|
||||||
@@ -109,7 +104,6 @@ set -q GNUPGHOME; or set -x GNUPGHOME "$XDG_DATA_HOME/gnupg"
|
|||||||
# Go configuration
|
# Go configuration
|
||||||
# set -q GOPATH; or set -x GOPATH "$XDG_DATA_HOME/go"
|
# set -q GOPATH; or set -x GOPATH "$XDG_DATA_HOME/go"
|
||||||
set -q GOBIN; or set -x GOBIN "$XDG_BIN_HOME"
|
set -q GOBIN; or set -x GOBIN "$XDG_BIN_HOME"
|
||||||
fish_add_path "$GOBIN"
|
|
||||||
|
|
||||||
set -q GOENV_ROOT; or set -x GOENV_ROOT "$XDG_DATA_HOME/goenv"
|
set -q GOENV_ROOT; or set -x GOENV_ROOT "$XDG_DATA_HOME/goenv"
|
||||||
set -q GOENV_RC_FILE; or set -x GOENV_RC_FILE "$XDG_CONFIG_HOME/goenv/goenvrc.fish"
|
set -q GOENV_RC_FILE; or set -x GOENV_RC_FILE "$XDG_CONFIG_HOME/goenv/goenvrc.fish"
|
||||||
@@ -131,7 +125,6 @@ set -q CARGO_HOME; or set -x CARGO_HOME "$XDG_DATA_HOME/cargo"
|
|||||||
set -q CARGO_BIN_HOME; or set -x CARGO_BIN_HOME "$XDG_BIN_HOME"
|
set -q CARGO_BIN_HOME; or set -x CARGO_BIN_HOME "$XDG_BIN_HOME"
|
||||||
set -q RUSTUP_HOME; or set -x RUSTUP_HOME "$XDG_DATA_HOME/rustup"
|
set -q RUSTUP_HOME; or set -x RUSTUP_HOME "$XDG_DATA_HOME/rustup"
|
||||||
set -x RUST_WITHOUT "clippy,docs,rls"
|
set -x RUST_WITHOUT "clippy,docs,rls"
|
||||||
fish_add_path "$CARGO_BIN_HOME"
|
|
||||||
fish_add_path "$CARGO_HOME/bin"
|
fish_add_path "$CARGO_HOME/bin"
|
||||||
fish_add_path "$XDG_SHARE_HOME/bob/nvim-bin"
|
fish_add_path "$XDG_SHARE_HOME/bob/nvim-bin"
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ jorgebucaran/fisher
|
|||||||
ilancosman/tide@v6
|
ilancosman/tide@v6
|
||||||
jethrokuan/z
|
jethrokuan/z
|
||||||
halostatue/fish-macos@v7
|
halostatue/fish-macos@v7
|
||||||
jgusta/paths
|
|
||||||
danhper/fish-ssh-agent
|
danhper/fish-ssh-agent
|
||||||
halostatue/fish-brew@v3
|
halostatue/fish-brew@v3
|
||||||
edc/bass
|
edc/bass
|
||||||
jorgebucaran/nvm.fish
|
meaningful-ooo/sponge
|
||||||
fabioantunes/fish-nvm
|
nickeb96/puffer-fish
|
||||||
|
jgusta/paths
|
||||||
|
patrickf1/fzf.fish
|
||||||
|
|||||||
@@ -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
|
function __macos_app_bundleid
|
||||||
argparse --name 'app bundleid' x/exact a/all h/help q/quiet s/short -- $argv
|
argparse --name 'app bundleid' x/exact a/all h/help q/quiet s/short -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_app_find
|
||||||
argparse --name 'app find' x/exact a/all q/quiet h/help -- $argv
|
argparse --name 'app find' x/exact a/all q/quiet h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_app_frontmost::info
|
||||||
set --function value (lsappinfo info -only $argv[2] $argv[1] | string split =)[2]
|
set --function value (lsappinfo info -only $argv[2] $argv[1] | string split =)[2]
|
||||||
|
|||||||
@@ -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
|
function __macos_app_icon
|
||||||
argparse --name 'app quit' x/exact h/help 'o/output=' 'w/width=' -- $argv
|
argparse --name 'app quit' x/exact h/help 'o/output=' 'w/width=' -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_app_quit
|
||||||
argparse --name 'app quit' x/exact r/restart h/help -- $argv
|
argparse --name 'app quit' x/exact r/restart h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_cd
|
||||||
argparse --name 'finder cd' h/help -- $argv
|
argparse --name 'finder cd' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_clean
|
||||||
argparse --name 'finder clean' h/help -- $argv
|
argparse --name 'finder clean' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_column
|
||||||
argparse --name 'finder column' h/help -- $argv
|
argparse --name 'finder column' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_desktop_icons
|
||||||
argparse --name 'finder desktop-icons' h/help -- $argv
|
argparse --name 'finder desktop-icons' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_hidden
|
||||||
argparse --name 'finder hidden' h/help -- $argv
|
argparse --name 'finder hidden' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_icon
|
||||||
argparse --name 'finder icon' h/help -- $argv
|
argparse --name 'finder icon' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_list
|
||||||
argparse --name 'finder list' h/help -- $argv
|
argparse --name 'finder list' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_pushd
|
||||||
argparse --name 'finder pushd' h/help -- $argv
|
argparse --name 'finder pushd' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_pwd
|
||||||
argparse --name 'finder pwd' h/help -- $argv
|
argparse --name 'finder pwd' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_quarantine::run
|
||||||
set --query argv[1]
|
set --query argv[1]
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_selected
|
||||||
argparse --name 'finder selected' h/help -- $argv
|
argparse --name 'finder selected' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_track
|
||||||
argparse --name 'finder track' h/help -- $argv
|
argparse --name 'finder track' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_untrack
|
||||||
argparse --name 'finder untrack' h/help -- $argv
|
argparse --name 'finder untrack' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_finder_update
|
||||||
argparse --name 'finder update' h/help -- $argv
|
argparse --name 'finder update' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_airdrop
|
||||||
argparse --name 'mac airdrop' h/help -- $argv
|
argparse --name 'mac airdrop' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_airport::ssid
|
||||||
__macos_mac_airport::run -I | string replace --filter --regex '\s+SSID: (\S+)' '$1'
|
__macos_mac_airport::run -I | string replace --filter --regex '\s+SSID: (\S+)' '$1'
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_brightness
|
||||||
argparse --name 'mac brightness' h/help -- $argv
|
argparse --name 'mac brightness' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_defaults_query
|
||||||
if set --function value (defaults read $argv[1] $argv[2] 2>/dev/null)
|
if set --function value (defaults read $argv[1] $argv[2] 2>/dev/null)
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_flushdns
|
||||||
argparse --name 'mac flushdns' h/help -- $argv
|
argparse --name 'mac flushdns' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_font_smoothing
|
||||||
argparse --name 'mac font-smoothing' h/help -- $argv
|
argparse --name 'mac font-smoothing' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_lsclean
|
||||||
argparse --name 'mac lsclean' h/help -- $argv
|
argparse --name 'mac lsclean' h/help -- $argv
|
||||||
|
|||||||
@@ -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
|
# 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/
|
# - Code from: http://web.archive.org/web/20071008123746/http://www.hawkwings.net/2007/03/03/scripts-to-automate-the-mailapp-envelope-speed-trick/
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_proxy_icon
|
||||||
argparse --name 'mac proxy-icon' h/help q/query -- $argv
|
argparse --name 'mac proxy-icon' h/help q/query -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_serialnumber
|
||||||
argparse --name 'mac serialnumber' h/help c/copy -- $argv
|
argparse --name 'mac serialnumber' h/help c/copy -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_touchid
|
||||||
argparse --name 'mac touchid' h/help q/quiet -- $argv
|
argparse --name 'mac touchid' h/help q/quiet -- $argv
|
||||||
|
|||||||
@@ -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
|
# 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
|
# include sudo_local` and requires manual removal of `pam_reattach` and `pam_tid` from
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_transparency
|
||||||
argparse --name 'mac transparency' h/help q/query -- $argv
|
argparse --name 'mac transparency' h/help q/query -- $argv
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_version
|
||||||
argparse \
|
argparse \
|
||||||
|
|||||||
@@ -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
|
function __macos_mac_vol
|
||||||
argparse --name 'mac vol' h/help -- $argv
|
argparse --name 'mac vol' h/help -- $argv
|
||||||
|
|||||||
@@ -1,70 +0,0 @@
|
|||||||
function __nvm_run
|
|
||||||
set count (count $argv)
|
|
||||||
|
|
||||||
if test "$count" -le 0
|
|
||||||
echo 'No params'
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
|
|
||||||
if test (uname -s) = 'Darwin'; and string match -q "*versions/node/*/bin" $PATH
|
|
||||||
set -l nvm_node_path (string match "*versions/node/*/bin" $PATH)
|
|
||||||
set -l nvm_index (contains -i -- $nvm_node_path $PATH)
|
|
||||||
if test $nvm_index -gt 1
|
|
||||||
set -gx PATH $nvm_node_path (string match -v $nvm_node_path $PATH)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function run_command
|
|
||||||
set stack (status stack-trace | grep called | cut -d " " -f 7)
|
|
||||||
set count (count $argv)
|
|
||||||
|
|
||||||
if type -fq $argv[1]; and test "$stack[1]" != (type -fP $argv[1])
|
|
||||||
set count (count $argv)
|
|
||||||
if test "$count" -ge 2
|
|
||||||
set args $argv[2..-1]
|
|
||||||
|
|
||||||
# https://stackoverflow.com/questions/45237675/proxying-arguments-from-one-function-to-a-command/45238056#45238056
|
|
||||||
eval (string escape -- (type -fP $argv[1]) $args)
|
|
||||||
else
|
|
||||||
eval (string escape -- (type -fP $argv[1]))
|
|
||||||
end
|
|
||||||
else
|
|
||||||
echo (set_color -o)"Fish nvm:"(set_color normal) "'$argv[1]' is currently not installed, try running npm i -g $argv[1]"
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function can_run_command
|
|
||||||
if type -P $argv[1] > /dev/null 2>&1; or type -P node > /dev/null 2>&1
|
|
||||||
return
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function run_default
|
|
||||||
nvm use default > /dev/null
|
|
||||||
set -gx NVM_HAS_RUN 1
|
|
||||||
if can_run_command $argv[1]
|
|
||||||
run_command $argv
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if not test -n "$NVM_HAS_RUN"
|
|
||||||
if test -f .nvmrc;
|
|
||||||
set nvm_output (nvm use)
|
|
||||||
set nvm_status $status
|
|
||||||
if test $nvm_status -gt 0
|
|
||||||
echo $nvm_output
|
|
||||||
end
|
|
||||||
if test $nvm_status -eq 0; and can_run_command $argv[1]
|
|
||||||
set -gx NVM_HAS_RUN 1
|
|
||||||
run_command $argv
|
|
||||||
end
|
|
||||||
else
|
|
||||||
run_default $argv
|
|
||||||
end
|
|
||||||
else
|
|
||||||
run_command $argv
|
|
||||||
end
|
|
||||||
end
|
|
||||||
43
config/fish/functions/_fzf_configure_bindings_help.fish
Normal file
43
config/fish/functions/_fzf_configure_bindings_help.fish
Normal 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
|
||||||
15
config/fish/functions/_fzf_extract_var_info.fish
Normal file
15
config/fish/functions/_fzf_extract_var_info.fish
Normal 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
|
||||||
49
config/fish/functions/_fzf_preview_changed_file.fish
Normal file
49
config/fish/functions/_fzf_preview_changed_file.fish
Normal 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
|
||||||
43
config/fish/functions/_fzf_preview_file.fish
Normal file
43
config/fish/functions/_fzf_preview_file.fish
Normal 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
|
||||||
18
config/fish/functions/_fzf_report_diff_type.fish
Normal file
18
config/fish/functions/_fzf_report_diff_type.fish
Normal 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
|
||||||
6
config/fish/functions/_fzf_report_file_type.fish
Normal file
6
config/fish/functions/_fzf_report_file_type.fish
Normal 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
|
||||||
33
config/fish/functions/_fzf_search_directory.fish
Normal file
33
config/fish/functions/_fzf_search_directory.fish
Normal 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
|
||||||
36
config/fish/functions/_fzf_search_git_log.fish
Normal file
36
config/fish/functions/_fzf_search_git_log.fish
Normal 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
|
||||||
41
config/fish/functions/_fzf_search_git_status.fish
Normal file
41
config/fish/functions/_fzf_search_git_status.fish
Normal 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
|
||||||
39
config/fish/functions/_fzf_search_history.fish
Normal file
39
config/fish/functions/_fzf_search_history.fish
Normal 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
|
||||||
32
config/fish/functions/_fzf_search_processes.fish
Normal file
32
config/fish/functions/_fzf_search_processes.fish
Normal 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
|
||||||
47
config/fish/functions/_fzf_search_variables.fish
Normal file
47
config/fish/functions/_fzf_search_variables.fish
Normal 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
|
||||||
21
config/fish/functions/_fzf_wrapper.fish
Normal file
21
config/fish/functions/_fzf_wrapper.fish
Normal 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
|
||||||
9
config/fish/functions/_puffer_fish_expand_bang.fish
Normal file
9
config/fish/functions/_puffer_fish_expand_bang.fish
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
function _puffer_fish_expand_bang
|
||||||
|
switch (commandline -t)
|
||||||
|
case '!'
|
||||||
|
commandline -t $history[1]
|
||||||
|
case '*'
|
||||||
|
commandline -i '!'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
9
config/fish/functions/_puffer_fish_expand_dots.fish
Normal file
9
config/fish/functions/_puffer_fish_expand_dots.fish
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
function _puffer_fish_expand_dots -d 'expand ... to ../.. etc'
|
||||||
|
set -l cmd (commandline --cut-at-cursor)
|
||||||
|
set -l split (string split -- ' ' $cmd)
|
||||||
|
if string match --quiet --regex -- '^(\.\./)*\.\.$' $split[-1]
|
||||||
|
commandline --insert '/..'
|
||||||
|
else
|
||||||
|
commandline --insert '.'
|
||||||
|
end
|
||||||
|
end
|
||||||
9
config/fish/functions/_puffer_fish_expand_lastarg.fish
Normal file
9
config/fish/functions/_puffer_fish_expand_lastarg.fish
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
function _puffer_fish_expand_lastarg
|
||||||
|
switch (commandline -t)
|
||||||
|
case '!'
|
||||||
|
commandline -t ""
|
||||||
|
commandline -f history-token-search-backward
|
||||||
|
case '*'
|
||||||
|
commandline -i '$'
|
||||||
|
end
|
||||||
|
end
|
||||||
5
config/fish/functions/_sponge_clear_state.fish
Normal file
5
config/fish/functions/_sponge_clear_state.fish
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
function _sponge_clear_state
|
||||||
|
set --erase --global _sponge_current_command
|
||||||
|
set --erase --global _sponge_current_command_exit_code
|
||||||
|
set --erase --global _sponge_current_command_previously_in_history
|
||||||
|
end
|
||||||
3
config/fish/functions/_sponge_on_exit.fish
Normal file
3
config/fish/functions/_sponge_on_exit.fish
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
function _sponge_on_exit --on-event fish_exit
|
||||||
|
sponge_delay=0 _sponge_remove_from_history
|
||||||
|
end
|
||||||
24
config/fish/functions/_sponge_on_postexec.fish
Normal file
24
config/fish/functions/_sponge_on_postexec.fish
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
function _sponge_on_postexec --on-event fish_postexec
|
||||||
|
set --global _sponge_current_command_exit_code $status
|
||||||
|
|
||||||
|
# Remove command from the queue if it's been added previously
|
||||||
|
if set --local index (contains --index -- $_sponge_current_command $_sponge_queue)
|
||||||
|
set --erase _sponge_queue[$index]
|
||||||
|
end
|
||||||
|
|
||||||
|
# Ignore empty commands
|
||||||
|
if test -n $_sponge_current_command
|
||||||
|
set --local command ''
|
||||||
|
# Run filters
|
||||||
|
for filter in $sponge_filters
|
||||||
|
if $filter \
|
||||||
|
$_sponge_current_command \
|
||||||
|
$_sponge_current_command_exit_code \
|
||||||
|
$_sponge_current_command_previously_in_history
|
||||||
|
set command $_sponge_current_command
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
set --prepend --global _sponge_queue $command
|
||||||
|
end
|
||||||
|
end
|
||||||
16
config/fish/functions/_sponge_on_preexec.fish
Normal file
16
config/fish/functions/_sponge_on_preexec.fish
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
function _sponge_on_preexec --on-event fish_preexec \
|
||||||
|
--argument-names command
|
||||||
|
_sponge_clear_state
|
||||||
|
|
||||||
|
set --global _sponge_current_command $command
|
||||||
|
|
||||||
|
builtin history search --case-sensitive --exact --max=1 --null $command \
|
||||||
|
| read --local --null found_entries
|
||||||
|
|
||||||
|
# If a command is in the history and in the queue, ignore it, like if it wasn’t in the history
|
||||||
|
if test (count $found_entries) -ne 0; and not contains $command $_sponge_queue
|
||||||
|
set --global _sponge_current_command_previously_in_history true
|
||||||
|
else
|
||||||
|
set --global _sponge_current_command_previously_in_history false
|
||||||
|
end
|
||||||
|
end
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user