Compare commits

...

28 Commits

Author SHA1 Message Date
renovate[bot]
62c620efad fix(github-action): update ivuorinen/actions (25.6.25 → 25.6.30) (#144) 2025-07-03 09:45:24 +03:00
07fe18af75 fix(scripts): correct usage and help exit status (#143) 2025-06-30 08:51:06 +03:00
renovate[bot]
29d3676b38 fix(github-action): update ivuorinen/actions (25.6.23 → 25.6.25) (#142) 2025-06-30 08:04:34 +03:00
0b9e1803d4 docs(agents): update instructions for yarn (#141) 2025-06-30 07:59:58 +03:00
github-actions[bot]
c45ad9710d chore: update pre-commit hooks (#140) 2025-06-30 07:52:04 +03:00
cf7ca2109f feat: add bats tests, docs (#139)
* fix(test): ensure bats file list uses xargs

* docs(readme): use yarn for testing instructions

* fix(test): ensure pipelines fail properly

* docs(alias): fix table header

---------

Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-30 04:30:06 +03:00
1531647e01 feat(ci): use pr-lint action instead of reviewdog (#136) 2025-06-30 03:21:47 +03:00
github-actions[bot]
15aff17f03 chore: update pre-commit hooks (#138)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2025-06-26 10:21:22 +03:00
renovate[bot]
42a5b79048 chore(deps): update node.js to v22.17.0 (#137) 2025-06-25 17:13:11 +03:00
a72c8ff33a chore(config): zed config update 2025-06-24 04:42:23 +03:00
19d9035214 chore(config): don't format config/op/plugins 2025-06-23 20:04:50 +03:00
7ca077c852 fix(ci): typo
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-23 20:00:04 +03:00
48604d81d6 fix(ci): add actions/setup-node to linters.yml
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-23 19:57:34 +03:00
github-actions[bot]
405e68f895 chore: update pre-commit hooks (#135) 2025-06-23 10:18:13 +03:00
6d62352127 chore(deps): update fisher plugins, add jgusta/paths 2025-06-22 11:44:41 +03:00
017d82abc5 fix(bin): path append quoting (#130) 2025-06-21 21:32:23 +03:00
github-actions[bot]
24ad4bf5b7 chore: update pre-commit hooks (#128)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2025-06-19 13:10:14 +03:00
07264c594f chore(config): ideavim config tweaks
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-16 14:03:00 +03:00
github-actions[bot]
7b58f660ac chore: update pre-commit hooks (#127) 2025-06-16 07:33:21 +03:00
renovate[bot]
b000f2b0c4 fix(container): update image python (3.13.4 → 3.13.5) (#126) 2025-06-14 09:53:35 +03:00
4d548687e1 chore(lint): prettier
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-12 10:20:58 +03:00
519d8398de chore(deps): remove bundle-audit, add @types/node and typescript, upgrade
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-12 10:16:53 +03:00
2203bb3957 chore(config): ideavim harpoon config
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-12 09:19:09 +03:00
github-actions[bot]
ddafdfe3c9 chore: update pre-commit hooks (#125) 2025-06-12 07:32:53 +03:00
a3f35b2d18 feat(fish): add nickeb96/puffer-fish
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-06-11 13:40:36 +03:00
90020a4998 chore(config): zed config update 2025-06-11 08:18:33 +03:00
0f806c172d chore(tmux): move resurrect and continuum last 2025-06-11 08:18:33 +03:00
renovate[bot]
e8eb9b98b2 feat(github-action): update softprops/action-gh-release (v2.2.2 → v2.3.2)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-11 00:09:23 +00:00
168 changed files with 2704 additions and 8905 deletions

5
.gitattributes vendored
View File

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

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

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

View File

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

46
.github/README.md vendored
View File

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

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
---
# yaml-language-server: https://json.schemastore.org/github-workflow.json
# $schema: "https://json.schemastore.org/github-workflow.json"
name: Release Daily State
on:
@@ -40,7 +40,7 @@ jobs:
- name: Create release
if: steps.daily-version.outputs.created
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2.2.2
uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # v2.3.2
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ steps.daily-version.outputs.version }}

View File

@@ -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
on:
schedule:
# At 04:00 on Monday and Thursday.
- cron: "0 4 * * 1,4"
- cron: '0 4 * * 1,4'
workflow_dispatch:
concurrency:
@@ -16,7 +16,7 @@ permissions: read-all
jobs:
auto-update:
runs-on: ubuntu-latest
runs-on: self-hosted
permissions:
contents: write
@@ -33,6 +33,6 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: update/pre-commit-hooks
title: "chore: update pre-commit hooks"
commit-message: "chore: update pre-commit hooks"
title: 'chore: update pre-commit hooks'
commit-message: 'chore: update pre-commit hooks'
body: Update versions of pre-commit hooks to latest version.

View File

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

View File

@@ -1,5 +1,5 @@
---
# yaml-language-server: https://json.schemastore.org/github-workflow.json
# $schema: "https://json.schemastore.org/github-workflow.json"
name: Sync labels
# yamllint disable-line rule:truthy
@@ -11,7 +11,7 @@ on:
- .github/workflows/sync-labels.yml
- .github/labels.yml
schedule:
- cron: "34 5 * * *"
- cron: '34 5 * * *'
workflow_call:
workflow_dispatch:
@@ -23,10 +23,10 @@ permissions: read-all
jobs:
SyncLabels:
runs-on: ubuntu-latest
runs-on: self-hosted
permissions:
issues: write
steps:
- uses: ivuorinen/actions/sync-labels@main
- uses: ivuorinen/actions/sync-labels@c0f919957eb60743682a6e0cd6d454fd4b142ac9 # 25.6.30

View File

@@ -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
on:
schedule:
# At 04:00 on Monday and Thursday.
- cron: "0 4 * * 1"
- cron: '0 4 * * 1'
workflow_dispatch:
concurrency:
@@ -21,7 +21,6 @@ jobs:
permissions: write-all
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:

View File

@@ -1,5 +1,3 @@
{
"diagnostics.globals": [
"vim"
]
"diagnostics.globals": ["vim"]
}

View File

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

29
.mega-linter.yml Normal file
View File

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

2
.nvmrc
View File

@@ -1 +1 @@
22.16.0
22.17.0

View File

@@ -49,7 +49,7 @@ repos:
- id: actionlint
- repo: https://github.com/renovatebot/pre-commit-hooks
rev: 40.48.4
rev: 41.17.2
hooks:
- id: renovate-config-validator

View File

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

View File

@@ -1 +1 @@
3.13.4
3.13.5

View File

@@ -8,8 +8,8 @@
# supported_envs:
# - all
registries:
- type: standard
ref: v4.346.0 # renovate: depName=aquaproj/aqua-registry
- type: standard
ref: v4.346.0 # renovate: depName=aquaproj/aqua-registry
packages:
- name: cli/cli
version: 'v2.69.0'
- name: cli/cli
version: 'v2.69.0'

View File

@@ -75,7 +75,6 @@ cheatpaths:
path: ~/.dotfiles/config/cheat/cheatsheets/personal
tags: [personal]
readonly: false
# While it requires no configuration here, it's also worth noting that
# cheat will automatically append directories named '.cheat' within the
# current working directory to the 'cheatpath'. This can be very useful if

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,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

View File

@@ -6,3 +6,5 @@ danhper/fish-ssh-agent
halostatue/fish-brew@v3
edc/bass
meaningful-ooo/sponge
nickeb96/puffer-fish
jgusta/paths

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,9 @@
function _puffer_fish_expand_bang
switch (commandline -t)
case '!'
commandline -t $history[1]
case '*'
commandline -i '!'
end
end

View 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

View 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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -6,10 +6,41 @@ source $HOME/.dotfiles/config/vim/vimrc
let mapleader = "\<SPACE>"
set clipboard+=unnamed
set cursorline " Highlight current line
set nocompatible " disable compatibility mode with vi
filetype off " disable filetype detection (but re-enable later, see below)
set undolevels=1000 " Number of undo levels
set backspace=indent,eol,start " Backspace behaviour
" Show a few lines of context around the cursor. Note that this makes the
" text scroll if you mouse-click near the start or end of the window.
set scrolloff=5
" Do incremental searching.
set incsearch
" Don't use Ex mode, use Q for formatting.
map Q gq
call plug#begin('~/.config/vim/plugged')
" Plug 'ayu-theme/ayu-vim'
call plug#end()
set ideajoin
set ideastatusicon=gray
set ideamarks
set idearefactormode=normal
set which-key
set mini-ai
" which-key settings
" https://github.com/TheBlob42/idea-which-key
let g:WhichKey_ShowVimActions = "true"
let g:WhichKey_DefaultDelay = 600 " make the popup appear much slower
let g:WhichKey_PrefixStyle = "bold"
" disable the timeout option
set notimeout
" Map esc to :noh
map <esc> :noh<cr>
@@ -31,7 +62,6 @@ nmap <leader>ss <Action>(GotoSymbol)
nmap <leader>fl <Action>(RecentLocations)
nmap <leader>fc <Action>(FindInPath)
nmap <leader>fr <Action>(RecentFiles)
nmap <leader>fe :NERDTreeToggle<CR>
nmap <Leader>fu :action FindUsages<CR>
nmap <Leader>ff :action GotoFile<CR>
nmap <leader>fi <Action>(SelectIn)
@@ -168,27 +198,32 @@ nnoremap 'x `X
nnoremap 'y `Y
nnoremap 'z `Z
" Harpoon
nmap <leader><C-1> :action SetHarpoon1<cr>
nmap <leader><C-2> :action SetHarpoon2<cr>
nmap <leader><C-3> :action SetHarpoon3<cr>
nmap <leader><C-4> :action SetHarpoon4<cr>
nmap <leader><C-5> :action SetHarpoon5<cr>
nmap <leader><C-6> :action SetHarpoon6<cr>
nmap <C-1> :action GotoHarpoon1<cr>
nmap <C-2> :action GotoHarpoon2<cr>
nmap <C-3> :action GotoHarpoon3<cr>
nmap <C-4> :action GotoHarpoon4<cr>
nmap <C-5> :action GotoHarpoon5<cr>
nmap <C-6> :action GotoHarpoon6<cr>
nmap <C-e> :action ShowHarpoon<cr>
nmap <C-a> :action AddToHarpoon<cr>
" ---
set cursorline " Highlight current line
set nocompatible " disable compatibility mode with vi
filetype off " disable filetype detection (but re-enable later, see below)
set undolevels=1000 " Number of undo levels
set backspace=indent,eol,start " Backspace behaviour
" Don't use Ex mode, use Q for formatting.
map Q gq
syntax enable
filetype plugin indent on
" call plug#begin('~/.config/vim/plugged')
" Plug 'ayu-theme/ayu-vim'
" call plug#end()
set termguicolors
if has('gui_running')
set macligatures
set guifont=JetBrainsMono:h14
endif
" vim: set filetype=vim :

View File

@@ -112,9 +112,7 @@
{
"background": "transparent",
"foreground": "lightGreen",
"foreground_templates": [
"{{ if gt .Code 0 }}red{{ end }}"
],
"foreground_templates": ["{{ if gt .Code 0 }}red{{ end }}"],
"properties": {
"always_enabled": true
},
@@ -129,9 +127,7 @@
"transient_prompt": {
"background": "transparent",
"foreground": "lightGreen",
"foreground_templates": [
"{{ if gt .Code 0 }}red{{ end }}"
],
"foreground_templates": ["{{ if gt .Code 0 }}red{{ end }}"],
"template": "\u279c "
},
"version": 2

View File

@@ -1,15 +1,13 @@
{
"account_id": "S5Z2DMNFKJEZBPCWRHRWC4DCGI",
"entrypoint": [
"gh"
],
"credentials": [
{
"plugin": "github",
"credential_type": "personal_access_token",
"usage_id": "personal_access_token",
"vault_id": "injcin7obv3jdet3r2u3kfihfy",
"item_id": "f6vinbnc6l7ngdzvlw66ayewlq"
}
]
}
"account_id": "S5Z2DMNFKJEZBPCWRHRWC4DCGI",
"entrypoint": ["gh"],
"credentials": [
{
"plugin": "github",
"credential_type": "personal_access_token",
"usage_id": "personal_access_token",
"vault_id": "injcin7obv3jdet3r2u3kfihfy",
"item_id": "f6vinbnc6l7ngdzvlw66ayewlq"
}
]
}

View File

@@ -1 +1,7 @@
[{"account_id":"S5Z2DMNFKJEZBPCWRHRWC4DCGI","vault_id":"injcin7obv3jdet3r2u3kfihfy","item_id":"f6vinbnc6l7ngdzvlw66ayewlq"}]
[
{
"account_id": "S5Z2DMNFKJEZBPCWRHRWC4DCGI",
"vault_id": "injcin7obv3jdet3r2u3kfihfy",
"item_id": "f6vinbnc6l7ngdzvlw66ayewlq"
}
]

View File

@@ -160,11 +160,11 @@ run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-sensible/sensible.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-window-name/tmux_window_name.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-mode-indicator/mode_indicator.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-suspend/suspend.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-continuum/continuum.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-resurrect/resurrect.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-sessionist/sessionist.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-yank/yank.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-current-pane-hostname/current_pane_hostname.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-fzf-url/fzf-url.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-resurrect/resurrect.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-continuum/continuum.tmux"
# run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-dark-notify/main.tmux"

View File

@@ -1,8 +1,13 @@
{
"context_servers": {
"github-activity-summarizer": {
"settings": {}
}
},
"telemetry": {
"metrics": false
},
"assistant": {
"agent": {
"always_allow_tool_actions": false,
"default_model": {
"provider": "copilot_chat",
@@ -11,6 +16,9 @@
"version": "2"
},
"languages": {
"PHP": {
"language_servers": ["intelephense", "phpactor"]
},
"Python": {
"enable_language_server": true,
"allow_rewrap": "anywhere",
@@ -25,6 +33,13 @@
"source.fixAll.eslint": true
}
},
"Markdown": {
"enable_language_server": true,
"preferred_line_length": 160,
"prettier": {
"allowed": true
}
},
"Lua": {
"enable_language_server": true,
"tab_size": 2
@@ -50,13 +65,32 @@
}
}
},
"diagnostics": {
"button": true,
"include_warnings": true,
"lsp_pull_diagnostics": {
"enabled": true,
"debounce_ms": 50
},
"inline": {
"enabled": true,
"update_debounce_ms": 150
}
},
"multi_cursor_modifier": "cmd_or_ctrl", // alias: "cmd", "ctrl"
"indent_guides": {
"enabled": true,
"coloring": "indent_aware"
},
"preferred_line_length": 100,
"soft_wrap": "bounded",
"wrap_guides": [100, 120, 160, 200],
"format_on_save": "on",
"vim_mode": true,
"theme": {
"mode": "system",
"light": "Tokyo Night Light",
"dark": "Tokyo Night Storm"
"light": "Tomorrow",
"dark": "Tomorrow at Midnight"
},
"inlay_hints": {
"enabled": true,
@@ -67,8 +101,44 @@
"ui_font_size": 16,
"buffer_font_size": 16,
"buffer_font_fallbacks": ["JetBrainsMono Nerd Font"],
"edit_predictions": {
"disabled_globs": [".env", ".env.*"]
},
"hour_format": "hour24"
"use_autoclose": false,
"hour_format": "hour24",
"auto_install_extensions": {
"angular": true,
"ansible": true,
"basher": true,
"biome": true,
"blade": true,
"csharp": true,
"css-modules-kit": true,
"dockerfile": true,
"git-firefly": true,
"github-activity-summarizer": true,
"golangci-lint": true,
"gosum": true,
"go-snippets": true,
"html": true,
"ini": true,
"json": true,
"json5": true,
"just": true,
"just-ls": true,
"lua": true,
"make": true,
"php": true,
"python-snippets": true,
"python-requirements": true,
"ruff": true,
"scss": true,
"sieve": true,
"stylelint": true,
"sql": true,
"toml": true,
"vue": true,
"vue-snippets": true,
"wakatime": true,
"xcode-themes": true,
"yaml": true,
"tomorrow-theme": true
}
}

View File

@@ -2,64 +2,64 @@
## main
| Key | Command(s) and actions |
|-----------------|-----------------------------------------------|
| alt-a | mode apps |
| alt-h | focus left |
| alt-j | focus down |
| alt-k | focus up |
| alt-l | focus right |
| alt-m | mode move |
| alt-s | mode service |
| alt-shift-1 | workspace 1 |
| alt-shift-2 | workspace 2 |
| alt-shift-tab | workspace-back-and-forth |
| ctrl-shift-1 | move-node-to-workspace 1 |
| ctrl-shift-2 | move-node-to-workspace 2 |
| ctrl-shift-tab | move-workspace-to-monitor --wrap-around prev |
| Key | Command(s) and actions |
| -------------- | -------------------------------------------- |
| alt-a | mode apps |
| alt-h | focus left |
| alt-j | focus down |
| alt-k | focus up |
| alt-l | focus right |
| alt-m | mode move |
| alt-s | mode service |
| alt-shift-1 | workspace 1 |
| alt-shift-2 | workspace 2 |
| alt-shift-tab | workspace-back-and-forth |
| ctrl-shift-1 | move-node-to-workspace 1 |
| ctrl-shift-2 | move-node-to-workspace 2 |
| ctrl-shift-tab | move-workspace-to-monitor --wrap-around prev |
## apps
| Key | Command(s) and actions |
|------|----------------------------------------------------------------------|
| b | exec-and-forget open -a /Applications/Brave Browser.app; mode main |
| c | exec-and-forget open -a /Applications/Ferdium.app; mode main |
| esc | reload-config; mode main |
| g | exec-and-forget open -a /Applications/Ghostty.app; mode main |
| o | exec-and-forget open -a /Applications/Obsidian.app; mode main |
| s | exec-and-forget open -a /Applications/Slack.app; mode main |
| t | exec-and-forget open -a /Applications/TIDAL.app; mode main |
| w | exec-and-forget open -a /Applications/WezTerm.app; mode main |
| Key | Command(s) and actions |
| --- | ------------------------------------------------------------------ |
| b | exec-and-forget open -a /Applications/Brave Browser.app; mode main |
| c | exec-and-forget open -a /Applications/Ferdium.app; mode main |
| esc | reload-config; mode main |
| g | exec-and-forget open -a /Applications/Ghostty.app; mode main |
| o | exec-and-forget open -a /Applications/Obsidian.app; mode main |
| s | exec-and-forget open -a /Applications/Slack.app; mode main |
| t | exec-and-forget open -a /Applications/TIDAL.app; mode main |
| w | exec-and-forget open -a /Applications/WezTerm.app; mode main |
## move
| Key | Command(s) and actions |
|--------------|--------------------------------------------------|
| 1 | move-node-to-workspace 1 --focus-follows-window |
| 2 | move-node-to-workspace 2 --focus-follows-window |
| ctrl-h | resize smart -70 |
| ctrl-l | resize smart +70 |
| esc | reload-config; mode main |
| h | move left |
| j | move down |
| k | move up |
| l | move right |
| r | flatten-workspace-tree; mode main |
| shift-h | join-with left |
| shift-j | join-with down |
| shift-k | join-with up |
| shift-l | join-with right |
| shift-left | resize smart +70 |
| shift-right | resize smart -70 |
| Key | Command(s) and actions |
| ----------- | ----------------------------------------------- |
| 1 | move-node-to-workspace 1 --focus-follows-window |
| 2 | move-node-to-workspace 2 --focus-follows-window |
| ctrl-h | resize smart -70 |
| ctrl-l | resize smart +70 |
| esc | reload-config; mode main |
| h | move left |
| j | move down |
| k | move up |
| l | move right |
| r | flatten-workspace-tree; mode main |
| shift-h | join-with left |
| shift-j | join-with down |
| shift-k | join-with up |
| shift-l | join-with right |
| shift-left | resize smart +70 |
| shift-right | resize smart -70 |
## service
| Key | Command(s) and actions |
|------------|-------------------------------------------|
| backspace | close-all-windows-but-current; mode main |
| esc | reload-config; mode main |
| f | layout floating tiling; mode main |
| r | flatten-workspace-tree; mode main |
| Key | Command(s) and actions |
| --------- | ---------------------------------------- |
| backspace | close-all-windows-but-current; mode main |
| esc | reload-config; mode main |
| f | layout floating tiling; mode main |
| r | flatten-workspace-tree; mode main |
File generated: 2025-01-15 13:32:41

View File

@@ -2,51 +2,51 @@
This file lists all aliases defined in `config/alias`.
| Alias | Command |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `....` | `cd ../../..` |
| `...` | `cd ../..` |
| `..` | `cd ..` |
| `.` | `cd $HOME` |
| `.b` | `cd $XDG_BIN_HOME` |
| `.c` | `cd $HOME/Code` |
| `.d` | `cd $DOTFILES` |
| `.l` | `cd $HOME/.local` |
| `.o` | `cd $HOME/Code/ivuorinen/obsidian/` |
| `art` | `[ -f artisan ] && php artisan \|\| php vendor/bin/artisan` |
| `cd..` | `cd ..` |
| `cdgr` | `cd "$(get_git_root)"` |
| `dn` | `du -chd1` |
| `flush` | `dscacheutil -flushcache` |
| `grep` | `grep --color` |
| `hide` | `defaults write com.apple.finder AppleShowAllFiles -bool false; killall Finder` |
| `ips` | `ifconfig -a \| grep -o 'inet6\? \(\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)\\|[a-fA-F0-9:]\+\)' \| sed -e 's/inet6* //' \| sort` |
| `irssi` | `irssi --config=$XDG_CONFIG_HOME/irssi/config --home=$XDG_CONFIG_HOME/irssi` |
| `isodate` | `date +'%Y-%m-%d'` |
| `l` | `ls -a` |
| `ll` | `ls -la` |
| `localip` | `ipconfig getifaddr en1` |
| `mirror_site` | `wget -m -k -K -E -e robots=off` |
| `peek` | `tee >(cat 1>&2)` |
| `pubkey` | `more ~/.ssh/id_rsa.pub \| pbcopy \| echo '=> Public key copied to pasteboard.'` |
| `sail` | `[ -f sail ] && bash sail \|\| bash vendor/bin/sail` |
| `show` | `defaults write com.apple.finder AppleShowAllFiles -bool true; killall Finder` |
| `sl` | `ls` |
| `svn` | `svn --config-dir $XDG_CONFIG_HOME/subversion` |
| `trivy_scan` | `docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy` |
| `updatedb` | `sudo /usr/libexec/locate.updatedb` |
| `vi` | `nvim` |
| `vim` | `nvim` |
| `watchx` | `watch -dpbc` |
| `wget` | `wget --hsts-file=$XDG_DATA_HOME/wget-hsts` |
| `x-datetime` | `date +'%Y-%m-%d %H:%M:%S'` |
| `x-ip` | `dig +short myip.opendns.com @resolver1.opendns.com` |
| `x-timestamp` | `date +'%s'` |
| `xdg` | `xdg-ninja --skip-ok --skip-unsupported` |
| `zapall` | `zapds && zappyc` |
| `zapds` | `find . -name ".DS_Store" -print -delete` |
| `zappyc` | `find . -type f -name '*.pyc' -ls -delete` |
| `zedit` | `$EDITOR ~/.dotfiles` |
| Alias | Command |
| ------------- | ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| `....` | `cd ../../..` |
| `...` | `cd ../..` |
| `..` | `cd ..` |
| `.` | `cd $HOME` |
| `.b` | `cd $XDG_BIN_HOME` |
| `.c` | `cd $HOME/Code` |
| `.d` | `cd $DOTFILES` |
| `.l` | `cd $HOME/.local` |
| `.o` | `cd $HOME/Code/ivuorinen/obsidian/` |
| `art` | `[ -f artisan ] && php artisan \|\| php vendor/bin/artisan` |
| `cd..` | `cd ..` |
| `cdgr` | `cd "$(get_git_root)"` |
| `dn` | `du -chd1` |
| `flush` | `dscacheutil -flushcache` |
| `grep` | `grep --color` |
| `hide` | `defaults write com.apple.finder AppleShowAllFiles -bool false; killall Finder` |
| `ips` | `ifconfig -a \| grep -o 'inet6\? \(\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)\\ | [a-fA-F0-9:]\+\)' \| sed -e 's/inet6\* //' \| sort` |
| `irssi` | `irssi --config=$XDG_CONFIG_HOME/irssi/config --home=$XDG_CONFIG_HOME/irssi` |
| `isodate` | `date +'%Y-%m-%d'` |
| `l` | `ls -a` |
| `ll` | `ls -la` |
| `localip` | `ipconfig getifaddr en1` |
| `mirror_site` | `wget -m -k -K -E -e robots=off` |
| `peek` | `tee >(cat 1>&2)` |
| `pubkey` | `more ~/.ssh/id_rsa.pub \| pbcopy \| echo '=> Public key copied to pasteboard.'` |
| `sail` | `[ -f sail ] && bash sail \|\| bash vendor/bin/sail` |
| `show` | `defaults write com.apple.finder AppleShowAllFiles -bool true; killall Finder` |
| `sl` | `ls` |
| `svn` | `svn --config-dir $XDG_CONFIG_HOME/subversion` |
| `trivy_scan` | `docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy` |
| `updatedb` | `sudo /usr/libexec/locate.updatedb` |
| `vi` | `nvim` |
| `vim` | `nvim` |
| `watchx` | `watch -dpbc` |
| `wget` | `wget --hsts-file=$XDG_DATA_HOME/wget-hsts` |
| `x-datetime` | `date +'%Y-%m-%d %H:%M:%S'` |
| `x-ip` | `dig +short myip.opendns.com @resolver1.opendns.com` |
| `x-timestamp` | `date +'%s'` |
| `xdg` | `xdg-ninja --skip-ok --skip-unsupported` |
| `zapall` | `zapds && zappyc` |
| `zapds` | `find . -name ".DS_Store" -print -delete` |
| `zappyc` | `find . -type f -name '*.pyc' -ls -delete` |
| `zedit` | `$EDITOR ~/.dotfiles` |
Total aliases: 43
Last updated: Fri 17 Jan 2025 13:06:59 EET

View File

@@ -87,4 +87,3 @@ Leader: `<ctrl><space>`
S-Left Move the visible part of the window left
S-Right Move the visible part of the window right
```

View File

@@ -277,4 +277,4 @@ Mouse: alt_screen
```
- Generated on Thu 2 Jan 2025 17:41:13 EET
- Generated on Thu 2 Jan 2025 17:41:13 EET

11
hosts/README.md Normal file
View File

@@ -0,0 +1,11 @@
# Host specific directories
Host folders contain machine specific overrides and an `install.conf.yaml` file that Dotbot processes during setup.
Current hosts:
- **air** personal computer
- **lakka** remote server
- **s** work laptop
- **tunkki** local server
- **v** work desktop

View File

@@ -20,7 +20,7 @@ Some problematic code has been fixed per `shellcheck` suggestions.
## Sourced
| Script | Source |
|-------------------------|-------------------|
| ----------------------- | ----------------- |
| `x-dupes` | skx/sysadmin-util |
| `x-foreach` | mvdan/dotfiles |
| `x-multi-ping` | skx/sysadmin-util |

29
local/bin/a.md Normal file
View File

@@ -0,0 +1,29 @@
# a
Encrypt or decrypt files and directories using `age` and your GitHub SSH keys.
## Usage
```bash
a encrypt <file|dir>
a decrypt <file.age|dir>
```
Options:
- `-v`, `--verbose` show log output
Environment variables:
- `AGE_KEYSFILE` location of the keys file
- `AGE_KEYSSOURCE` URL to fetch keys if missing
- `AGE_LOGFILE` log file path
## Example
```bash
a encrypt secret.txt
a decrypt secret.txt.age
```
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

19
local/bin/ad.md Normal file
View File

@@ -0,0 +1,19 @@
# ad
Decrypt a file encrypted with `age` using your GitHub SSH keys.
## Usage
```bash
ad <file.age>
```
Uses `AGE_KEYSFILE` and `AGE_KEYSSOURCE` if keys are missing.
## Example
```bash
ad secret.txt.age
```
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

19
local/bin/ae.md Normal file
View File

@@ -0,0 +1,19 @@
# ae
Encrypt a file with `age` using your GitHub SSH keys.
## Usage
```bash
ae <file>
```
Uses `AGE_KEYSFILE` and `AGE_KEYSSOURCE` if keys are missing.
## Example
```bash
ae secret.txt
```
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

26
local/bin/dfm.md Normal file
View File

@@ -0,0 +1,26 @@
# dfm
Dotfiles manager and installation helper. Provides wrappers for many
setup tasks defined in this repository.
## Usage
```bash
dfm <command> [options]
```
Common commands include:
- `install` install tools or run platform specific setup
- `brew` manage Homebrew packages
- `docs` regenerate markdown documentation
Set `VERBOSE=1` to see debug output.
### Example
```bash
dfm install all
```
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

21
local/bin/fzf-tmux.md Normal file
View File

@@ -0,0 +1,21 @@
# fzf-tmux
Wrapper around [`fzf`](https://github.com/junegunn/fzf) that opens the
interface inside a tmux pane or popup.
## Usage
```bash
fzf-tmux [layout options] [--] [fzf options]
```
Layout flags like `-p` or `-d` control popup and split behaviour. Use
`--` to pass arguments directly to `fzf`.
### Example
```bash
fzf-tmux -p 80%,60% -- --reverse
```
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

16
local/bin/fzf.md Normal file
View File

@@ -0,0 +1,16 @@
# fzf
Binary of the fuzzy finder [fzf](https://github.com/junegunn/fzf).
Use `fzf` as you would normally; this wrapper ships the prebuilt
binary in the dotfiles.
## Usage
```bash
fzf [options]
```
Refer to the upstream `fzf` documentation for all available
flags and features.
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

View File

@@ -0,0 +1,25 @@
# git-attributes
Checks that every tracked file has a matching pattern in `.gitattributes`.
Can optionally suggest or write missing rules.
## Usage
```bash
git-attributes [options]
```
Options include:
- `-v, --verbose` show progress information
- `-e, --exit` exit with non-zero status if missing rules
- `-p, --pattern <glob>` pattern to check (default: `text: auto`)
- `-w, --write` append suggestions to `.gitattributes`
### Example
```bash
git-attributes -v --write
```
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

View File

@@ -0,0 +1,15 @@
# iterm2_shell_integration.zsh
Official iTerm2 shell integration script for zsh. Source this file to
enable prompt tracking and command notifications in iTerm2.
## Usage
```bash
source iterm2_shell_integration.zsh
```
No parameters are required. The script modifies your prompt to work
with iTerm2 features such as badges and profile switching.
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

20
local/bin/msgr.md Normal file
View File

@@ -0,0 +1,20 @@
# msgr
Helper library for printing colorized log messages from shell scripts.
## Usage
```bash
msgr <type> "message" [extra]
```
Message types include `ok`, `warn`, `err`, `run` and many more. The
script is primarily sourced by other scripts.
### Example
```bash
msgr ok "Installation complete"
```
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

23
local/bin/php-switcher.md Normal file
View File

@@ -0,0 +1,23 @@
# php-switcher
Switch between Homebrew-installed PHP versions or list installed versions.
## Usage
```bash
php-switcher <version>|--auto [options]
```
Options:
- `--installed` list versions installed via Homebrew
- `--current` print currently active PHP version
- `--auto` read version from `.php-version` in current directory
### Example
```bash
php-switcher 8.3
```
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

View File

@@ -56,22 +56,31 @@ __pushover_send_message()
response="$(eval "${curl_cmd}")"
printf "%s\n" "$response"
# TODO: Parse response
r="${?}"
if [ "${r}" -ne 0 ]; then
printf "%s: Failed to send message\n" "${0}" >&2
# Parse response status. Expect JSON like: {"status":1,"request":"..."}
if echo "$response" | grep -q '"status"[[:space:]]*:[[:space:]]*1'; then
r=0
else
r=1
fi
return "${r}"
if [ "$r" -ne 0 ]; then
# Extract possible error message from JSON
err=$(echo "$response" | grep -o '"errors".*' | sed 's/"errors"[:,\[]//g' | tr -d '[]"')
[ -n "$err" ] && printf "%s: %s\n" "$0" "$err" >&2
printf "%s: Failed to send message\n" "$0" >&2
fi
return "$r"
}
CURL="$(which curl)"
CURL="$(command -v curl)"
PUSHOVER_URL="https://api.pushover.net/1/messages.json"
TOKEN=$PUSHOVER_TOKEN
USER=$PUSHOVER_USER
CURL_OPTS=""
devices="${devices} ${device}"
optstring="c:d:D:e:f:p:r:t:T:s:u:U:a:h"
devices=""
optstring="c:d:D:e:p:r:t:T:s:u:U:a:h"
OPTIND=1
while getopts ${optstring} c; do
@@ -97,7 +106,7 @@ while getopts ${optstring} c; do
t)
title="${OPTARG}"
;;
k)
T)
TOKEN="${OPTARG}"
;;
s)

25
local/bin/pushover.md Normal file
View File

@@ -0,0 +1,25 @@
# pushover
Send notifications via the Pushover API.
## Usage
```bash
pushover -T <token> -U <user> [-t title] [-p priority] message
```
Common options:
- `-c <callback>` callback URL
- `-d <device>` target device
- `-s <sound>` notification sound name
- `-T <token>` application token (or `PUSHOVER_TOKEN` env)
- `-U <user>` user key (or `PUSHOVER_USER` env)
## Example
```bash
pushover -T $TOKEN -U $USER -t "Build" "Finished successfully"
```
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->

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