Compare commits

...

58 Commits

Author SHA1 Message Date
dependabot[bot]
ef37681087 chore(deps): bump micromatch from 4.0.7 to 4.0.8 (#24) 2024-08-25 11:26:14 +03:00
renovate[bot]
0c014033d1 chore(deps): update @ivuorinen/base-configs to 2.0.0 (#23) 2024-08-25 10:04:17 +03:00
renovate[bot]
14635009d2 chore(deps): update node to v22.7.0 (#22)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-23 09:26:17 +03:00
70118fee52 chore(deps): update asdf tool-versions 2024-08-21 10:54:44 +03:00
ivuorinen
0dce28ea6a chore(git): Update submodules (automated)
asdf v0.14.1
2024-08-20 03:06:19 +00:00
ba15f82302 chore: tweak bashrc, zshrc, alias and exports 2024-08-20 01:24:14 +03:00
d4972ea30d chore(deps): update asdf tool-versions 2024-08-19 11:32:42 +03:00
ed7263dfee chore(shell): disable tmux autostart 2024-08-17 17:39:29 +03:00
4cda063305 chore(config): exports now loaded from .config 2024-08-14 23:46:14 +03:00
d251ea9cdc fix(config): wezterm now sends alt correctly 2024-08-14 23:45:28 +03:00
bc4e906ff6 chore(dfm): check for fd and shfmt 2024-08-10 13:05:38 +03:00
75c36bacf9 chore(docs): update nvim keymaps 2024-08-10 13:04:31 +03:00
e7cda5ac0c feat: wezterm config and docs generator 2024-08-10 13:02:41 +03:00
41024b1eb5 chore(deps): update nvm/node version to 22.6.0 2024-08-09 19:36:24 +03:00
74afeb61c8 chore(nvim): update nvim-kickstart submodule 2024-08-09 19:33:18 +03:00
104bc369bc chore(brew): update and cleanup brewfile 2024-08-09 19:32:56 +03:00
57e63847ce feat(config): gnupg configuration 2024-08-09 19:32:07 +03:00
2dc08e5e51 chore(shell): cleanup zshenv and zshrc 2024-08-09 19:31:25 +03:00
989b5b5111 feat: add ruby 3.3.4 2024-08-09 19:30:17 +03:00
24a5dd1ff6 feat: direnv, move tool-versions to base 2024-08-09 18:59:34 +03:00
5826e35853 chore(deps): update asdf tool-versions 2024-07-30 00:34:14 +03:00
e329868568 fix(bin): alacritty automatic theme changing 2024-07-30 00:22:07 +03:00
dc76fa8914 chore(meta): add .luarc.json 2024-07-28 15:36:04 +03:00
3413365d41 chore(bin): tweak x-path-* scripts 2024-07-28 15:35:50 +03:00
37299f4893 chore(config): tweak exports 2024-07-28 15:35:34 +03:00
71a78c6e0c chore(config): remove herd config 2024-07-26 14:18:24 +03:00
3f8a4deb05 chore(deps): update asdf tool-versions 2024-07-26 14:17:47 +03:00
ffe288aba3 chore(deps): update nvim-kickstart config 2024-07-26 14:17:35 +03:00
28a1fc2831 chore(deps): update asdf tool-versions 2024-07-23 05:09:54 +03:00
28aae89f70 chore: cleanup and fixes 2024-07-23 05:09:30 +03:00
e8fe5c570b chore(meta): update renovate.json 2024-07-23 03:46:08 +03:00
26f6024292 feat(bin): update scripts to function format 2024-07-23 03:45:22 +03:00
4e4692321b chore(deps): update asdf tool-versions 2024-07-23 03:44:06 +03:00
3ea221ccf9 chore(config): tweak cheat config 2024-07-23 03:43:48 +03:00
e7774c4ab1 chore(docs): update nvim keybindings 2024-07-23 03:43:32 +03:00
1f2ca90ca5 feat!: refactor base, config, dfm and scripts 2024-07-23 03:43:12 +03:00
adecceda7a chore(scripts): eval scripts/shared.sh 2024-07-17 10:04:16 +03:00
8a3b2e703c feat(hosts): air wallpaper 2024-07-17 09:43:41 +03:00
1ee726e30c chore(shell): remove nvm plugin from zshrc 2024-07-17 09:43:18 +03:00
9857c8eb00 feat(asdf): move rust to asdf 2024-07-17 09:41:41 +03:00
a919d9544e chore: tweaks and reworked README 2024-07-17 09:40:53 +03:00
7bc7921a17 chore: rename scripts/shared 2024-07-17 09:39:57 +03:00
735807f245 chore: cleanup 2024-07-16 23:02:13 +03:00
6d531e2d40 chore(deps): update asdf packages 2024-07-16 23:01:52 +03:00
77f89c0f48 feat(asdf): manage go packages with asdf 2024-07-16 23:01:38 +03:00
7f3c7b7e1c feat: prettier-plugin-sh + tweaks and codefixes 2024-07-16 23:00:36 +03:00
fc16b8231e feat!: asdf is now a git submodule 2024-07-16 22:58:29 +03:00
64a626d5c4 chore(asdf): update deps 2024-07-13 20:56:39 +00:00
54816c2ce9 chore(shell): new aliases 2024-07-13 16:21:43 +03:00
3acaea5611 chore(asdf): update packages 2024-07-10 09:48:31 +00:00
e4a313abe7 chore(asdf): update packages 2024-07-10 11:05:30 +03:00
0b1c75cbdd chore(dotbot): create gnupg folder 2024-07-09 03:33:28 +03:00
cab0f4da49 chore(asdf): update asdfrc 2024-07-09 03:33:02 +03:00
cef15eddce chore(asdf): update tools, fix installer 2024-07-09 03:20:50 +03:00
f8987818b8 chore(asdf): cleanup 2024-07-08 10:15:48 +03:00
renovate[bot]
15d1f6a59a fix(github-action): update amannn/action-semantic-pull-request ( v5.5.2 → v5.5.3 )
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-06 17:43:58 +00:00
ba586fca7d feat(workflows): semantic-pr 2024-07-06 20:43:21 +03:00
Ismo Vuorinen
d93bc7aae3 feat(asdf): asdf and configuration (#19)
* chore(shell): configuration tweaks
* feat(asdf): add asdf, settings & most of the deps
2024-07-06 20:19:15 +03:00
97 changed files with 3498 additions and 1719 deletions

View File

@@ -1 +1 @@
extends @ivuorinen/browserslist-config
extends @ivuorinen/browserslist-config

View File

@@ -27,3 +27,9 @@ space_redirects = true
keep_padding = false
function_next_line = true # --func-next-line
# Ignore the entire "third_party" directory when calling shfmt on directories,
# such as "shfmt -l -w .". When formatting files directly,
# like "shfmt -w third_party/foo.sh" or "shfmt --filename=third_party/foo.sh",
# the ignore logic is applied only when the --apply-ignore flag is given.
[{tools/**,local/bin/asdf/**,config/cheat/cheatsheets/**}]
ignore = true

1
.envrc Normal file
View File

@@ -0,0 +1 @@
use asdf

58
.github/README.md vendored
View File

@@ -8,6 +8,9 @@ this repository will live accordingly.
Please for the love of everything good do not use these 1:1 as your own dotfiles,
fork or download the repo as a zip and go from there with your own configs.
It would be nice if you'd add an issue linking to your fork or repo so I can
see what interesing stuff you've done with it. Sharing is caring.
## Setup
### First time setup
@@ -35,7 +38,7 @@ fork or download the repo as a zip and go from there with your own configs.
| Path | Description |
| ------------------- | -------------------------------------------- |
| `.github` | GitHub Repository configuration files. |
| `.github` | GitHub Repository configuration files, meta. |
| `hosts/{hostname}/` | Configs that should apply to that host only. |
| `local/bin` | Helper scripts that I've collected or wrote. |
| `scripts` | Setup scripts. |
@@ -51,7 +54,9 @@ fork or download the repo as a zip and go from there with your own configs.
### dfm - the dotfiles manager
`.local/bin/dfm` is a shell script that has some tools that help with dotfiles management.
[`.local/bin/dfm`][dfm] is a shell script that has some tools that help with dotfiles management.
Running `dfm` gives you a list of available commands.
## Configuration
@@ -66,51 +71,8 @@ The folder structure follows [XDG Base Directory Specification][xdg] where possi
| `$XDG_DATA_HOME` | `$HOME/.local/share` | User-specific data files |
| `$XDG_STATE_HOME` | `$HOME/.local/state` | App state that should persist between restarts |
#### XDG_BIN_HOME (`$HOME/.local/bin`)
`$XDG_BIN_HOME` defines directory that contains local binaries.
User-specific executable files may be stored in `$HOME/.local/bin`.
Distributions should ensure this directory shows up in the UNIX `$PATH`
environment variable, at an appropriate place.
#### XDG_DATA_HOME (`$HOME/.local/share`)
`$XDG_DATA_HOME` defines the base directory relative to which
user-specific _data files_ should be stored.
If `$XDG_DATA_HOME` is either not set or empty,
a default equal to `$HOME/.local/share` should be used.
#### XDG_CONFIG_HOME (`$HOME/.config`)
`$XDG_CONFIG_HOME` defines the base directory relative to which
user-specific _configuration files_ should be stored.
If `$XDG_CONFIG_HOME` is either not set or empty,
a default equal to `$HOME/.config` should be used.
#### XDG_STATE_HOME (`$HOME/.local/state`)
`$XDG_STATE_HOME` defines the base directory relative to which
user-specific _state files_ should be stored.
If `$XDG_STATE_HOME` is either not set or empty,
a default equal to `$HOME/.local/state` should be used.
The `$XDG_STATE_HOME` contains _state data_ that should
_persist between (application) restarts_, but that is not important or
portable enough to the user that it should be stored in `$XDG_DATA_HOME`.
- It may contain:
- actions history (logs, history, recently used files, …)
- current state of the application that can be reused
on a restart (view, layout, open files, undo history, …)
#### XDG_DATA_DIRS
`$XDG_DATA_DIRS` defines the preference-ordered set of base directories
to search for data files in addition to the `$XDG_DATA_HOME` base directory.
The directories in `$XDG_DATA_DIRS` should be separated with a colon ':'.
Please see [docs/folders.md][docs-folders] for more information.
[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,4 +1,4 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["local>ivuorinen/.github:renovate-config"]
"extends": ["local>ivuorinen/renovate-config"]
}

18
.github/workflows/semantic-pr.yml vendored Normal file
View File

@@ -0,0 +1,18 @@
name: Semantic PR
on:
pull_request_target:
types:
- opened
- edited
- synchronize
jobs:
semantic-pr:
runs-on: self-hosted
steps:
- uses: amannn/action-semantic-pull-request@v5.5.3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
validateSingleCommit: true

3
.gitignore vendored
View File

@@ -22,4 +22,7 @@ node_modules
iTermServer-*
lock
config/iterm2/AppSupport
config/gnupg/S.*
config/gnupg/s
config/gnupg/private-keys-v1.d

3
.gitmodules vendored
View File

@@ -64,3 +64,6 @@
[submodule "tmux/tmux-dark-notify"]
path = config/tmux/plugins/tmux-dark-notify
url = https://github.com/erikw/tmux-dark-notify.git
[submodule "asdf"]
path = local/bin/asdf
url = https://github.com/asdf-vm/asdf.git

5
.luarc.json Normal file
View File

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

2
.nvmrc
View File

@@ -1 +1 @@
lts/*
22.7.0

View File

@@ -1,8 +1,12 @@
.mypy_cache/*
tools/dotbot*
local/bin/antigen.zsh
config/cheat/cheatsheets/community
config/tmux/plugins/*
lazy-lock.json
Brewfile.lock.json
config/cheat/cheatsheets/community
config/cheat/cheatsheets/tldr
config/fzf/*
config/nvim-kickstart/*
config/tmux/plugins/*
config/zsh/*
lazy-lock.json
local/bin/antigen.zsh
local/bin/asdf
tools/dotbot*

View File

@@ -1,4 +1,5 @@
module.exports = {
plugins: ['prettier-plugin-sh'],
...require('@ivuorinen/prettier-config'),
trailingComma: 'all',
// Add custom options below:

View File

@@ -18,6 +18,8 @@ git submodule add --name cheat-community \
-f https://github.com/cheat/cheatsheets.git config/cheat/cheatsheets/community
git submodule add --name cheat-tldr \
-f https://github.com/ivuorinen/cheatsheet-tldr.git config/cheat/cheatsheets/tldr
git submodule add --name asdf \
-f https://github.com/asdf-vm/asdf.git local/bin/asdf
# tmux plugin manager and plugins
git submodule add --name tmux/tmux-continuum \

View File

@@ -1,27 +1,11 @@
# this is my bashrc config. there are many like it, but this one is mine.
# shellcheck shell=bash
# Defaults
export DOTFILES="$HOME/.dotfiles"
export PATH="$HOME/.local/bin:$DOTFILES/local/bin:$PATH"
export SHARED_SCRIPTS_SOURCED=0
# Explicitly set XDG folders
# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/state"
# custom variables
export XDG_BIN_HOME="$HOME/.local/bin"
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_RUNTIME_DIR="$HOME/.local/run"
# Paths
export PATH="$XDG_BIN_HOME:$DOTFILES/local/bin:$HOME/.local/go/bin:$XDG_DATA_HOME/cargo/bin:$PATH"
source "$DOTFILES/config/exports"
source "$DOTFILES/config/functions"
source "$DOTFILES/config/alias"
x-load-configs
source "$DOTFILES/config/shared.sh"
# shellcheck source=../config/fzf/fzf.bash
[ -f "${DOTFILES}/config/fzf/fzf.bash" ] &&
@@ -30,14 +14,10 @@ x-load-configs
# Import ssh keys in keychain
ssh-add -A 2>/dev/null
x-have oh-my-posh && {
eval "$(oh-my-posh init bash --config "$DOTFILES/config/omp/own.toml")"
}
x-have antidot && {
eval "$(antidot init)"
}
x-have rbenv && {
eval "$(rbenv init - bash)"
}
x-have oh-my-posh && {
eval "$(oh-my-posh init bash --config $DOTFILES/config/omp/own.toml)"
}

1
base/envrc Normal file
View File

@@ -0,0 +1 @@
use asdf

View File

@@ -1,6 +1,4 @@
#!/bin/env bash
[ -z "$NVM_DIR" ] && export NVM_DIR="$HOME/.config/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

29
base/tool-versions Normal file
View File

@@ -0,0 +1,29 @@
1password-cli 2.30.0
age 1.2.0
asdf-plugin-manager 1.3.1
bottom 0.10.2
direnv 2.34.0
dotenv-linter 3.3.0
editorconfig-checker 2.8.0
eza 0.19.0
fd 10.1.0
github-cli 2.55.0
golang 1.23.0
hadolint 2.12.0
kubectl 1.31.0
lazygit 0.43.1
nodejs 22.6.0
pipx 1.6.0
pre-commit 3.8.0
ripgrep 14.1.0
ruby 3.3.4
rust 1.80.1
semgrep system
shellcheck 0.10.0
shfmt 3.8.0
terraform-lsp 0.0.12
terragrunt 0.66.3
tf-summarize 0.3.10
vault 1.17.3+ent
yamllint 1.35.1
yq 4.44.3

View File

@@ -1,21 +0,0 @@
# shellcheck shell=bash
# vim: filetype=zsh
export PATH="$HOME/.local/bin:$HOME/.dotfiles/local/bin:$HOME/.local/go/bin:$PATH"
export DOTFILES="$HOME/.dotfiles"
# Explicitly set XDG folders
# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/state"
# custom variables
export XDG_BIN_HOME="$HOME/.local/bin"
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_RUNTIME_DIR="$HOME/.local/run"
source "$DOTFILES/config/exports"
source "$DOTFILES/config/alias"

View File

@@ -1,112 +1,102 @@
# this is my zsh config. there are many like it, but this one is mine.
# shellcheck shell=bash
# export VERBOSE=1
# export DEBUG=1
export DOTFILES="$HOME/.dotfiles"
LOCAL_SHARE="$HOME/.local/share"
export PATH="$HOME/.local/bin:$DOTFILES/local/bin:$LOCAL_SHARE/bob/nvim-bin:$LOCAL_SHARE/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
export SHARED_SCRIPTS_SOURCED=0
# Explicitly set XDG folders
# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/state"
source "$DOTFILES/config/shared.sh"
# custom variables
export XDG_BIN_HOME="$HOME/.local/bin"
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_RUNTIME_DIR="$HOME/.local/run"
eval "$(oh-my-posh init zsh --config "$DOTFILES/config/omp/own.toml")"
export PATH="$XDG_BIN_HOME:$DOTFILES/local/bin:$HOME/.local/go/bin:$XDG_DATA_HOME/bob/nvim-bin:$XDG_DATA_HOME/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
# Function to load antigen if available
load_antigen()
{
local antigen_zsh_path="$XDG_BIN_HOME/antigen.zsh"
# shellcheck source=../../.local/bin/antigen.zsh
if [[ -f "$antigen_zsh_path" ]]; then
source "$antigen_zsh_path"
x-load-configs
antigen use oh-my-zsh
x-have oh-my-posh && {
eval "$(oh-my-posh init zsh --config $DOTFILES/config/omp/own.toml)"
export ZSH_TMUX_AUTOSTART=false
export ZSH_TMUX_CONFIG="$DOTFILES/config/tmux/tmux.conf"
export ZSH_TMUX_UNICODE=true
export ZSH_TMUX_AUTOQUIT=false
export ZSH_TMUX_DEFAULT_SESSION_NAME=main
zstyle :omz:plugins:eza 'dirs-first' yes
zstyle :omz:plugins:eza 'git-status' yes
zstyle :omz:plugins:eza 'icons' yes
if [[ "$OSTYPE" == darwin* ]]; then
zstyle :omz:plugins:ssh-agent keychain yes
fi
zstyle :omz:plugins:ssh-agent lazy yes
zstyle :omz:plugins:ssh-agent quiet yes
# z, the zsh version
export ZSHZ_DATA="$XDG_STATE_HOME/z"
antigen bundle z
x-have python && antigen bundle MichaelAquilina/zsh-autoswitch-virtualenv
# these should be always available
antigen bundle jreese/zsh-titles
antigen bundle gnu-utils
antigen bundle ssh-agent
antigen bundle gpg-agent
antigen bundle brew
antigen bundle tmux
antigen bundle colored-man-pages
antigen bundle zsh-users/zsh-completions
antigen bundle eza
# this needs to be the last item
antigen bundle zsh-users/zsh-syntax-highlighting
antigen apply
fi
}
export COMPLETION_WAITING_DOTS=true
if type brew &> /dev/null; then
eval "$(brew shellenv)"
FPATH="$HOMEBREW_PREFIX/share/zsh/site-functions:${FPATH}"
fi
export ZSH_CUSTOM_COMPLETION_PATH="$XDG_CONFIG_HOME/zsh/completion"
x-dc "$ZSH_CUSTOM_COMPLETION_PATH"
# Add completion scripts to zsh path
FPATH="$ZSH_CUSTOM_COMPLETION_PATH:$FPATH"
# Try to load antigen, if present
ANTIGEN_ZSH_PATH="$XDG_BIN_HOME/antigen.zsh"
# shellcheck source=../../.local/bin/antigen.zsh
[[ -f "$ANTIGEN_ZSH_PATH" ]] && source "$ANTIGEN_ZSH_PATH"
# antigen is present
antigen use oh-my-zsh
export ZSH_TMUX_AUTOSTART=true
export ZSH_TMUX_CONFIG="$DOTFILES/config/tmux/tmux.conf"
export ZSH_TMUX_UNICODE=true
export ZSH_TMUX_AUTOQUIT=false
export ZSH_TMUX_DEFAULT_SESSION_NAME=main
export NVM_DIR="$XDG_CONFIG_HOME/nvm"
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME"/npm/npmrc
# z, the zsh version
export ZSHZ_DATA="$XDG_STATE_HOME/z"
antigen bundle z
# these should be always available
antigen bundle tmux
antigen bundle colored-man-pages
antigen bundle ssh-agent
antigen bundle jreese/zsh-titles
antigen bundle zsh-users/zsh-completions
x-have python && antigen bundle MichaelAquilina/zsh-autoswitch-virtualenv
# nvm is a strange beast
zstyle ':omz:plugins:nvm' autoload yes
antigen bundle nvm
# this needs to be the last item
antigen bundle zsh-users/zsh-syntax-highlighting
antigen apply
# shellcheck source=../config/fzf/fzf.zsh
[ -f "${DOTFILES}/config/fzf/fzf.zsh" ] \
&& source "${DOTFILES}/config/fzf/fzf.zsh"
x-have pyenv && {
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
# Function to source FZF configuration
source_fzf_config()
{
local fzf_config="${DOTFILES}/config/fzf/fzf.zsh"
if [[ -f "$fzf_config" ]]; then
# shellcheck source=config/fzf/fzf.zsh
source "$fzf_config"
fi
}
# Run only if tmux is active
[[ -n "$TMUX" ]] && {
# Autoupdate tmux window name
TMUX_WINDOW_NAME_PLUGIN="$DOTFILES/config/tmux/plugins/tmux-window-name/scripts/rename_session_windows.py"
[ -f "$TMUX_WINDOW_NAME_PLUGIN" ] && {
tmux-window-name()
{
($TMUX_WINDOW_NAME_PLUGIN &)
}
add-zsh-hook chpwd tmux-window-name
tmux-window-name
}
# Function to set up tmux window name plugin if tmux is active
setup_tmux_window_name_plugin()
{
if [[ -n "$TMUX" ]]; then
local tmux_window_name_plugin="$DOTFILES/config/tmux/plugins/tmux-window-name/scripts/rename_session_windows.py"
if [[ -f "$tmux_window_name_plugin" ]]; then
tmux_window_name()
{
($tmux_window_name_plugin &)
}
add-zsh-hook chpwd tmux_window_name
tmux_window_name
fi
fi
}
x-have antidot && {
eval "$(antidot init)"
main()
{
load_antigen
source_fzf_config
setup_tmux_window_name_plugin
if x-have antidot; then
eval "$(antidot init)"
fi
source "${XDG_CONFIG_HOME:-$HOME/.config}/asdf-direnv/zshrc"
}
source "$DOTFILES/config/alias"
# Herd checks for a few environment variables to inject PHP binaries and configurations.
# Herd injected PHP binary.
# export PATH="/Users/ivuorinen/Library/Application Support/Herd/bin/":$PATH
# Herd injected PHP 8.3 configuration.
# export HERD_PHP_83_INI_SCAN_DIR="/Users/ivuorinen/Library/Application Support/Herd/config/php/83/"
# Herd injected PHP 7.4 configuration.
# export HERD_PHP_74_INI_SCAN_DIR="/Users/ivuorinen/Library/Application Support/Herd/config/php/74/"
main "$@"

View File

@@ -1,6 +1,4 @@
#!/usr/bin/env bash
# shellcheck source="../scripts/shared.sh"
# shellcheck disable=1091,2139
# Color the grep output
alias grep="grep --color"
@@ -17,6 +15,14 @@ alias ....="cd ../../.."
# cd to git root directory
alias cdgr='cd "$(git root)"'
# interesting folders, and shortcuts
alias .="cd $HOME"
alias .b="cd $XDG_BIN_HOME"
alias .c="cd $HOME/Code"
alias .d="cd $DOTFILES"
alias .dx="cd $DOTFILES;ks"
alias .l="cd $HOME/.local"
# Shortcuts for listing
alias ll="ls -la"
alias l="ls -a"
@@ -107,62 +113,12 @@ if [[ $(uname) == 'Darwin' ]]; then
# x-set-php-aliases
fi
# Alacritty preexec hook to update dynamic title
preexec()
{
print -Pn "\e]0;$1%~\a"
}
# Update dotfiles
dfu()
{
(
cd "$DOTFILES" && git pull --ff-only && ./install -q
)
}
# Weather in Tampere, or other city
weather()
{
# https://github.com/chubin/wttr.in#usage
local city="${1:-Tampere}"
curl "http://wttr.in/${city// /+}?2nFQM&lang=fi"
}
# Docker
ssh-docker()
{
docker exec -it "$@" bash
}
# Rector project to php version 8.2 by default.
rector()
{
local php="${1:-82}"
docker run -v "$(pwd)":/project rector/rector:latest process \
"/project/$1" \
--set "php${php}" \
--autoload-file /project/vendor/autoload.php
}
# Commit everything
commit()
{
commitMessage="$*"
if [ "$commitMessage" = "" ]; then
commitMessage="Automated commit"
fi
git add .
eval "git commit -a -m '${commitMessage}'"
}
scheduler()
{
while :; do
php artisan schedule:run
echo "Sleeping 60 seconds..."
sleep 60
done
}
X_ALIAS_FILES=(
"$HOME/.config/alias-secret"
"$HOME/.config/alias-$(hostname)"
"$HOME/.config/alias-$(hostname)-secret"
)
for aliasFile in "${X_ALIAS_FILES[@]}"; do
[ -f "$aliasFile" ] && source "$aliasFile" && msg "Sourced $aliasFile"
done
unset X_ALIAS_FILES

5
config/asdf/asdfrc Normal file
View File

@@ -0,0 +1,5 @@
# See the docs for explanations: https://asdf-vm.com/manage/configuration.html
legacy_version_file=yes
use_release_candidates=no
concurrency=auto

View File

@@ -0,0 +1,21 @@
// A cargo subcommand for checking and applying
// updates to installed executables
cargo-update
// Cargo cache management utility
cargo-cache
// An incremental parsing system for programming tools
tree-sitter-cli
// a subprocess caching utility
bkt
// a structural diff that understands syntax
difftastic
// A simple, fast and user-friendly alternative to 'find'
fd-find
// recursively searches directories for a
// regex pattern while respecting your gitignore
ripgrep
// A version manager for neovim
bob-nvim
// bottom, btm - A cross-platform graphical process/system monitor with
// a customizable interface and a multitude of features.
bottom

1
config/asdf/gem-packages Normal file
View File

@@ -0,0 +1 @@
bundler

View File

@@ -0,0 +1,21 @@
// These are golang packages I use,
// so they should be available with all versions
// sysadmin/scripting utilities, distributed as a single binary
github.com/skx/sysbox@release-0.18.0
// Git Profile allows you to switch between user profiles in git repos
github.com/dotzero/git-profile@v1.4.0
// An extensible command line tool or library to format yaml files.
github.com/google/yamlfmt/cmd/yamlfmt@v0.13.0
// Parsing HTML at the command line
github.com/ericchiang/pup@v0.4.0
// HTML to Markdown converter
github.com/suntong/html2md@v1.5.0
// cheat allows you to create and view interactive cheatsheets on the cli.
github.com/cheat/cheat/cmd/cheat@4.4.2
// Render markdown on the CLI, with pizzazz! 💅
github.com/charmbracelet/glow@v1.5.1
// Static checker for GitHub Actions workflow files
github.com/rhysd/actionlint/cmd/actionlint@v1.7.1
// Cleans up your $HOME from those pesky dotfiles
github.com/doron-cohen/antidot@v0.6.3

7
config/asdf/npm-packages Normal file
View File

@@ -0,0 +1,7 @@
blade-formatter
corepack
editorconfig-checker
github-release-notes
neovim
npm
stylelint-lsp

View File

@@ -0,0 +1,28 @@
1password-cli https://github.com/NeoHsu/asdf-1password-cli.git f5d5aab
age https://github.com/threkk/asdf-age.git 4df80a0
asdf-plugin-manager https://github.com/asdf-community/asdf-plugin-manager.git 50d2735
bottom https://github.com/carbonteq/asdf-btm.git fd8a55a
dotenv-linter https://github.com/wesleimp/asdf-dotenv-linter.git 1369f53
editorconfig-checker https://github.com/gabitchov/asdf-editorconfig-checker.git 585c1d5
eza https://github.com/lwiechec/asdf-eza.git 08c1b65
fd https://gitlab.com/wt0f/asdf-fd.git 17d56e0
github-cli https://github.com/bartlomiejdanek/asdf-github-cli.git e0605b7
hadolint https://github.com/devlincashman/asdf-hadolint.git 335e230
kubectl https://github.com/asdf-community/asdf-kubectl.git cbe6df4
lazygit https://github.com/nklmilojevic/asdf-lazygit.git 78e04f1
neovim https://github.com/richin13/asdf-neovim d6118ad
nodejs https://github.com/asdf-vm/asdf-nodejs.git c5b7c40
pipx https://github.com/yozachar/asdf-pipx.git 31db618
pre-commit https://github.com/jonathanmorley/asdf-pre-commit.git 26bfc42
ripgrep https://gitlab.com/wt0f/asdf-ripgrep.git e836665
rust https://github.com/code-lever/asdf-rust.git 95acf4f
semgrep https://github.com/brentjanderson/asdf-semgrep.git 13ff78b
shellcheck https://github.com/luizm/asdf-shellcheck.git 780d78d
shfmt https://github.com/luizm/asdf-shfmt.git a42c5ff
terraform-ls https://github.com/asdf-community/asdf-hashicorp.git f1602b6
terraform-lsp https://github.com/bartlomiejdanek/asdf-terraform-lsp.git bba7106
terragrunt https://github.com/ohmer/asdf-terragrunt 4a6651a
tf-summarize https://github.com/adamcrews/asdf-tf-summarize.git 880ad26
vault https://github.com/asdf-community/asdf-hashicorp.git f1602b6
yamllint https://github.com/ericcornelissen/asdf-yamllint.git d5c3161
yq https://github.com/sudermanjr/asdf-yq.git 772992f

View File

@@ -3,11 +3,11 @@
# editor: $EDITOR
# Should 'cheat' always colorize output?
colorize: true
colorize: false
# Which 'chroma' colorscheme should be applied to the output?
# Options are available here:
# https://github.com/alecthomas/chroma/tree/master/styles
style: 'catppuccin'
style: 'tokyonight'
# Which 'chroma' "formatter" should be applied?
# One of: "terminal", "terminal256", "terminal16m"
formatter: terminal256

View File

@@ -2,14 +2,47 @@
# shellcheck shell=bash
# vim: filetype=zsh
# Set XDG directories if not already set
# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
[ -z "$XDG_CONFIG_HOME" ] && export XDG_CONFIG_HOME="$HOME/.config"
[ -z "$XDG_DATA_HOME" ] && export XDG_DATA_HOME="$HOME/.local/share"
[ -z "$XDG_CACHE_HOME" ] && export XDG_CACHE_HOME="$HOME/.cache"
[ -z "$XDG_STATE_HOME" ] && export XDG_STATE_HOME="$HOME/.local/state"
[ -z "$XDG_BIN_HOME" ] && export XDG_BIN_HOME="$HOME/.local/bin"
# if DOTFILES is not set, set it to the default location
[ -z "$DOTFILES" ] && export DOTFILES="$HOME/.dotfiles"
export PATH="$XDG_BIN_HOME:$DOTFILES/local/bin:$XDG_DATA_HOME/bob/nvim-bin:$XDG_DATA_HOME/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
# Load asdf
export ASDF_DIR="$XDG_BIN_HOME/asdf"
if [[ -d $ASDF_DIR ]]; then
[[ -d $ASDF_DIR/bin ]] && x-path-prepend "$ASDF_DIR/bin"
[[ -d $ASDF_DIR/shims ]] && x-path-prepend "$ASDF_DIR/shims"
[[ -d $ASDF_DIR/completions ]] && fpath=("$ASDF_DIR/completions" $fpath)
[[ -d $ASDF_DIR/plugins ]] && fpath=("$ASDF_DIR/plugins" $fpath)
source "$ASDF_DIR/asdf.sh"
fi
if ! command -v msg &> /dev/null; then
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "-> $1"
return 0
}
fi
# Cache commands using bkt if installed
if command -v bkt >&/dev/null; then
if command -v bkt &> /dev/null; then
bkt()
{
command bkt --cache-dir="$XDG_CACHE_HOME/bkt" "$@"
}
else
# If bkt isn't installed skip its arguments and just execute directly.
# If bkt isn't installed, skip its arguments and just execute directly.
# Optionally write a msg to stderr suggesting users install bkt.
bkt()
{
@@ -18,44 +51,55 @@ else
}
fi
# shorthand for checking if the system has the bin in path,
# this version does not use caching
# usage: have_command php && php -v
# Shorthand for checking if the system has the bin in path,
# this version does not use caching.
# Usage: have_command php && php -v
have_command()
{
command -v "$1" >&/dev/null
[ -z "$1" ] && {
echo "Usage: have_command <command>"
return 1
}
command -v "$1" &> /dev/null
}
# shorthand for checking if the system has the bin in path,
# this version uses caching
# usage: have php && php -v
# Shorthand for checking if the system has the bin in path,
# this version uses caching.
# Usage: have php && php -v
have()
{
bkt -- which "$1" >&/dev/null
bkt -- which "$1" &> /dev/null
}
# function to run dark-notify and change alacritty theme
# it uses flock to prevent running multiple instances
# install flock with `brew install flock` on macOS
function darknotify-alacritty {
have flock && [[ -f /tmp/dark-notify-alacritty.lock ]] && return
have dark-notify && {
# true is used to prevent the command show it was backgrounded
true & flock /tmp/dark-notify-alacritty.lock dark-notify -c "$HOME/.dotfiles/local/bin/x-change-alacritty-theme" &
# Function to run dark-notify and change alacritty theme
# It uses flock to prevent running multiple instances.
# Install flock with `brew install flock` on macOS.
darknotify_alacritty()
{
x-have flock && [[ -f /tmp/dark-notify-alacritty.lock ]] && return
x-have dark-notify && {
# subprocess is used to prevent the command from showing it was backgrounded
(
flock /tmp/dark-notify-alacritty.lock dark-notify \
-c "$HOME/.dotfiles/local/bin/x-change-alacritty-theme" &
) &> /dev/null
}
return 0
}
darknotify-alacritty
darknotify_alacritty
# Function to list installed Homebrew packages using bkt caching
brew_installed()
{
bkt -- brew list
}
# shorthand for checking if brew package is installed
# usage: have_brew php && php -v
# Shorthand for checking if a Homebrew package is installed
# Usage: have_brew php && php -v
have_brew()
{
! x-have brew && return 125
! have brew && return 125
if bkt -- brew list "$1" &> /dev/null; then
return 0
@@ -64,9 +108,376 @@ have_brew()
fi
}
if [[ -f "$DOTFILES/config/exports-secret" ]]; then
source "$DOTFILES/config/exports-secret"
fi
# Alacritty preexec hook to update dynamic title
preexec()
{
print -n -P "\e]0;$1%~\a"
}
source "$DOTFILES/config/exports-shell"
source "$DOTFILES/config/exports-apps"
# Update dotfiles
dfu()
{
(
cd "$DOTFILES" && git pull --ff-only && ./install
)
}
# Weather in Tampere, or other city
weather()
{
# https://github.com/chubin/wttr.in#usage
local city="${1:-Tampere}"
curl "http://wttr.in/${city// /+}?2nFQM&lang=fi"
}
# Docker
ssh_docker()
{
docker exec -it "$@" bash
}
# Rector project to php version 8.2 by default.
rector()
{
local php="${1:-82}"
docker run -v "$(pwd)":/project rector/rector:latest process \
"/project/$1" \
--set "php${php}" \
--autoload-file /project/vendor/autoload.php
}
# Commit everything
commit()
{
local commitMessage="$*"
if [ -z "$commitMessage" ]; then
commitMessage="Automated commit"
fi
git add .
git commit -a -m "$commitMessage"
}
scheduler()
{
while :; do
php artisan schedule:run
echo "Sleeping 60 seconds..."
sleep 60
done
}
# Run command silently
# Usage: silent uptime
silent()
{
"$@" >&/dev/null
}
# Check if a file contains non-ascii characters
nonascii()
{
LC_ALL=C grep -n '[^[:print:][:space:]]' "${@}"
}
# Remove non-ascii characters from string
# Usage: strip_nonascii "string"
strip_nonascii()
{
echo "$1" | LC_ALL=C sed 's/[^[:print:][:space:]]//g'
}
# Slugify a string
# Usage: slugify "string"
slugify()
{
echo "$1" | iconv -t ascii//TRANSLIT | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr A-Z a-z
}
# https://stackoverflow.com/a/85932
fn_exists()
{
declare -f -F "$1" > /dev/null
return $?
}
# Creates a random string
rnd()
{
echo $RANDOM | md5sum | head -c 20
}
# return sha256sum for file
# $1 - filename (string)
get_sha256sum()
{
sha256sum "$1" | head -c 64
}
# Replaceable file
#
# $1 - filename (string)
# $2 - filename (string)
#
# Returns 1 when replaceable, 0 when not replaceable.
replacable()
{
FILE1="$1"
FILE2="$2"
[[ ! -r "$FILE1" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "File 1 ($FILE1) does not exist"
return 0
}
[[ ! -r "$FILE2" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "File 2 ($FILE2) does not exist, replaceable"
return 1
}
FILE1_HASH=$(get_sha256sum "$FILE1")
FILE2_HASH=$(get_sha256sum "$FILE2")
[[ $FILE1_HASH = "" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "Could not get hash for file 1 ($FILE1)"
return 0
}
[[ $FILE2_HASH = "" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "Could not get hash for file 2 ($FILE2), replaceable"
return 1
}
[[ "$FILE1_HASH" == "$FILE2_HASH" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_ok "Files match, not replaceable: $FILE1"
return 0
}
[[ $VERBOSE -eq 1 ]] && msg_warn "Files do not match ($FILE1_HASH != $FILE2_HASH), replaceable"
return 1
}
export COMPLETION_WAITING_DOTS=true
# Bash completion file location
export BASH_COMPLETION_USER_FILE="${XDG_CONFIG_HOME}/bash-completion/bash_completion"
# History env variables
export HIST_STAMPS="yyyy-mm-dd"
# Larger bash history (allow 32³ entries; default is 500)
export HISTSIZE=32768
export HISTFILESIZE=$HISTSIZE
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
export HISTCONTROL=ignoreboth
# Make some commands not show up in history
export HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help"
# And include the parameter for ZSH
export HISTORY_IGNORE="(ls|cd|cd -|pwd|exit|date|* --help)"
# Less history location
export LESSHISTFILE="$XDG_STATE_HOME"/less/history
# Highlight section titles in manual pages
# export LESS_TERMCAP_md="$ORANGE"
# zsh autoloaded terminfo
export TERMINFO="${XDG_DATA_HOME}/terminfo"
export TERMINFO_DIRS="${XDG_DATA_HOME}/terminfo":/usr/share/terminfo
# Don't clear the screen after quitting a manual page
export MANPAGER="less -X"
# Always enable colored `grep` output
export GREP_OPTIONS="--color=auto"
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
hash shopt 2> /dev/null && shopt -s checkwinsize
export SHORT_HOST=$(hostname -s)
# Antigen configuration
# https://github.com/zsh-users/antigen/wiki/Configuration
msg "Setting up Antigen configuration"
export ADOTDIR="$XDG_DATA_HOME/antigen"
export ANTIGEN_CACHE="$XDG_CACHE_HOME/antigen"
export ANTIGEN_SYSTEM_RECEIPT_F=".local/share/antigen/antigen_system_lastupdate"
export ANTIGEN_PLUGIN_RECEIPT_F=".local/share/antigen/antigen_plugin_lastupdate"
# Ansible configuration
# https://docs.ansible.com/ansible/latest/reference_appendices/config.html
msg "Setting up Ansible configuration"
export ANSIBLE_HOME="$XDG_CONFIG_HOME/ansible"
export ANSIBLE_CONFIG="$XDG_CONFIG_HOME/ansible.cfg"
export ANSIBLE_GALAXY_CACHE_DIR="$XDG_CACHE_HOME/ansible/galaxy_cache"
x-dc "$ANSIBLE_HOME"
x-dc "$ANSIBLE_GALAXY_CACHE_DIR"
# asdf
# https://github.com/asdf-vm/asdf
msg "Setting up asdf configuration"
export ASDF_DIR="${XDG_BIN_HOME}/asdf"
export ASDF_CONFIG_FILE="${XDG_CONFIG_HOME}/asdf/asdfrc"
export ASDF_DATA_DIR="${ASDF_DIR}"
export ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME="${XDG_CONFIG_HOME}/asdf/plugin-versions"
export ASDF_LOG_FILE="${XDG_CACHE_HOME}/asdf/asdf.log"
export ASDF_NODEJS_LEGACY_FILE_DYNAMIC_STRATEGY="latest_available"
export ASDF_NPM_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/npm-packages"
export ASDF_GOLANG_MOD_VERSION_ENABLED=true
export ASDF_GOLANG_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/golang-packages"
export ASDF_CRATE_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/cargo-packages"
export ASDF_GEM_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/gem-packages"
export ASDF_DIRENV_IGNORE_MISSING_PLUGINS=1
export PATH="${ASDF_DIR}/bin:${PATH}"
# bob manages nvim versions
msg "Setting up bob configuration"
x-path-prepend "$XDG_DATA_HOME/bob/nvim-bin"
# bkt (shell command caching tool) configuration
msg "Setting up bkt configuration"
export BKT_TTL=1m
# brew, https://docs.brew.sh/Manpage
msg "Setting up Homebrew configuration"
export HOMEBREW_NO_ANALYTICS=true
export HOMEBREW_NO_ENV_HINTS=true
export HOMEBREW_BUNDLE_MAS_SKIP=true
export HOMEBREW_BUNDLE_FILE="$XDG_CONFIG_HOME/homebrew/Brewfile"
x-have brew && {
eval "$(brew shellenv)"
}
# composer, https://getcomposer.org/
msg "Setting up Composer configuration"
export COMPOSER_HOME="$XDG_STATE_HOME/composer"
export COMPOSER_BIN="$COMPOSER_HOME/vendor/bin"
export PATH="$COMPOSER_BIN:$PATH"
# direnv, https://direnv.net/
# https://direnv.net/docs/hook.html
# Set the hook to show the direnv message in a different color
export DIRENV_LOG_FORMAT=$'\033[2mdirenv: %s\033[0m'
# docker, https://docs.docker.com/engine/reference/commandline/cli/
msg "Setting up Docker configuration"
export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker"
x-dc "$DOCKER_CONFIG"
# Docker: Disable snyk ad
export DOCKER_SCAN_SUGGEST=false
# ffmpeg
# https://ffmpeg.org/ffmpeg.html
msg "Setting up FFmpeg configuration"
export FFMPEG_DATADIR="$XDG_CONFIG_HOME/ffmpeg"
x-have ffmpeg && x-dc "$FFMPEG_DATADIR"
# GnuPG
# https://gnupg.org/documentation/manuals/gnupg/Invoking-GPG.html
msg "Setting up GnuPG configuration"
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
# Go
# https://golang.org/doc/code.html
msg "Setting up Go configuration"
export GOPATH="$XDG_DATA_HOME/go"
export GOBIN="$XDG_BIN_HOME"
# nb, https://xwmx.github.io/nb/
msg "Setting up nb configuration"
export NBRC_PATH="$XDG_CONFIG_HOME/nbrc"
export NB_DIR="$XDG_STATE_HOME/nb"
# NPM: Add npm packages to path
msg "Setting up NPM configuration"
x-have node && {
NVM_NODE_BIN_DIR="$(dirname "$(which node)")"
export PATH="$NVM_NODE_BIN_DIR:$PATH"
}
# oh-my-posh (omp) configuration
msg "Setting up oh-my-posh configuration"
export OHMYPOSH_CFG="$DOTFILES/config/omp/own.toml"
# op (1Password cli) is present
msg "Setting up 1Password CLI configuration"
export OP_CACHE="$XDG_STATE_HOME/1password"
# Python
#
# pyenv, python environments
msg "Setting up Python configuration"
export WORKON_HOME="$XDG_DATA_HOME/virtualenvs"
export PYENV_ROOT="$XDG_STATE_HOME/pyenv"
export PATH="$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH"
x-have pyenv && {
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
}
# Ruby
#
# including: bundler, rbenv
msg "Setting up Ruby configuration"
export GEM_HOME="${XDG_DATA_HOME}"/gem
export GEM_SPEC_CACHE="${XDG_CACHE_HOME}"/gem
export BUNDLE_USER_CONFIG="$XDG_CONFIG_HOME"/bundle
export BUNDLE_USER_CACHE="$XDG_CACHE_HOME"/bundle
export BUNDLE_USER_PLUGIN="$XDG_DATA_HOME"/bundle
export RBENV_ROOT="$XDG_STATE_HOME/rbenv"
x-dc "$RBENV_ROOT"
x-have gem && export PATH="${GEM_HOME}/bin:$PATH"
# Rust / cargo
msg "Setting up Rust/Cargo configuration"
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
export CARGO_HOME="$XDG_DATA_HOME/cargo"
export PATH="$CARGO_HOME/bin:$PATH"
# screen
# https://www.gnu.org/software/screen/manual/screen.html
msg "Setting up screen configuration"
export SCREENRC="$XDG_CONFIG_HOME/misc/screenrc"
# sonarlint
# https://www.sonarlint.org/
msg "Setting up Sonarlint configuration"
export SONARLINT_USER_HOME="$XDG_DATA_HOME/sonarlint"
# terraform
# https://www.terraform.io/docs/cli/config/config-file.html
# https://www.terraform.io/docs/cli/config/environment-variables.html
msg "Setting up Terraform configuration"
export TF_DATA_DIR="$XDG_STATE_HOME/terraform"
export TF_CLI_CONFIG_FILE="$XDG_CONFIG_HOME/terraform/terraformrc"
export TF_PLUGIN_CACHE_DIR="$XDG_CACHE_HOME/terraform/plugin-cache"
# tldr / tealdeer
msg "Setting up tldr configuration"
export TEALDEER_CONFIG_DIR="$XDG_CONFIG_HOME/tealdeer/"
# tmux
# https://tmux.github.io/
msg "Setting up tmux configuration"
export TMUX_CONF="$XDG_CONFIG_HOME/tmux/tmux.conf"
# wakatime, https://github.com/wakatime/wakatime-cli
msg "Setting up Wakatime configuration"
export WAKATIME_HOME="$XDG_STATE_HOME/wakatime"
x-dc "$WAKATIME_HOME"
# Misc
msg "Setting up miscellaneous configuration"
export CHEAT_USE_FZF=true
export SQLITE_HISTORY="${XDG_CACHE_HOME}/sqlite_history"
X_EXPORTS_FILES=(
"$HOME/.config/exports-secret"
"$HOME/.config/exports-$(hostname)"
"$HOME/.config/exports-$(hostname)-secret"
)
for exportFile in "${X_EXPORTS_FILES[@]}"; do
[ -f "$exportFile" ] && source "$exportFile" && msg "Sourced $exportFile"
done
unset X_EXPORTS_FILES

View File

@@ -1,134 +0,0 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# shellcheck enable=external-sources
# shellcheck disable=1091,2139
# vim: filetype=bash
# Antigen configuration
# https://github.com/zsh-users/antigen/wiki/Configuration
export ADOTDIR="$XDG_DATA_HOME/antigen"
export ANTIGEN_CACHE="$XDG_CACHE_HOME/antigen"
export ANTIGEN_SYSTEM_RECEIPT_F=".local/share/antigen/antigen_system_lastupdate"
export ANTIGEN_PLUGIN_RECEIPT_F=".local/share/antigen/antigen_plugin_lastupdate"
# Ansible configuration
# https://docs.ansible.com/ansible/latest/reference_appendices/config.html
export ANSIBLE_HOME="$XDG_CONFIG_HOME/ansible"
export ANSIBLE_CONFIG="$XDG_CONFIG_HOME/ansible.cfg"
export ANSIBLE_GALAXY_CACHE_DIR="$XDG_CACHE_HOME/ansible/galaxy_cache"
x-dc "$ANSIBLE_HOME"
x-dc "$ANSIBLE_GALAXY_CACHE_DIR"
export ANDROID_HOME="$XDG_DATA_HOME/android"
# bob manages nvim versions
export PATH="$XDG_DATA_HOME/bob/nvim-bin:$PATH"
# bkt (shell command caching tool) configuration
export BKT_TTL=1m
# brew, https://docs.brew.sh/Manpage
export HOMEBREW_NO_ENV_HINTS=true
export HOMEBREW_BUNDLE_MAS_SKIP=true
export HOMEBREW_BUNDLE_FILE="$XDG_CONFIG_HOME/homebrew/Brewfile"
# composer, https://getcomposer.org/
export COMPOSER_HOME="$XDG_STATE_HOME/composer"
export COMPOSER_BIN="$COMPOSER_HOME/vendor/bin"
export PATH="$COMPOSER_BIN:$PATH"
# docker, https://docs.docker.com/engine/reference/commandline/cli/
export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker"
x-dc "$DOCKER_CONFIG"
# Docker: Disable snyk ad
export DOCKER_SCAN_SUGGEST=false
# ffmpeg
export FFMPEG_DATADIR="$XDG_CONFIG_HOME/ffmpeg"
x-have ffmpeg && x-dc "$FFMPEG_DATADIR"
# GnuPG
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
# Go
export GOPATH="$XDG_DATA_HOME/go"
export GOBIN="$XDG_BIN_HOME"
# Herd, herd.laravel.com
# Herd injected PHP binary.
export PATH="$HOME/Library/Application Support/Herd/bin/":$PATH
x-have herd && {
# Herd injected PHP 8.3 configuration.
export HERD_PHP_83_INI_SCAN_DIR="$HOME/Library/Application Support/Herd/config/php/83/"
# Herd injected PHP 7.4 configuration.
export HERD_PHP_74_INI_SCAN_DIR="$HOME/Library/Application Support/Herd/config/php/74/"
}
# nb, https://xwmx.github.io/nb/
export NBRC_PATH="$XDG_CONFIG_HOME/nbrc"
export NB_DIR="$XDG_STATE_HOME/nb"
# NPM: Add npm packages to path
x-have node && {
NVM_NODE_BIN_DIR="$(dirname "$(which node)")"
export PATH="$NVM_NODE_BIN_DIR:$PATH"
}
# op (1Password cli) is present
export OP_CACHE="$XDG_STATE_HOME/1password"
# Python
#
# pyenv, python environments
export WORKON_HOME="$XDG_DATA_HOME/virtualenvs"
export PYENV_ROOT="$XDG_STATE_HOME/pyenv"
export PATH="$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH"
x-have pyenv && {
eval "$(pyenv init -)"
}
# Ruby
#
# including: bundler, rbenv
export GEM_HOME="${XDG_DATA_HOME}"/gem
export GEM_SPEC_CACHE="${XDG_CACHE_HOME}"/gem
export BUNDLE_USER_CONFIG="$XDG_CONFIG_HOME"/bundle
export BUNDLE_USER_CACHE="$XDG_CACHE_HOME"/bundle
export BUNDLE_USER_PLUGIN="$XDG_DATA_HOME"/bundle
export RBENV_ROOT="$XDG_STATE_HOME/rbenv"
x-dc "$RBENV_ROOT"
x-have gem && export PATH="${GEM_HOME}/bin:$PATH"
# Rust / cargo
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
export CARGO_HOME="$XDG_DATA_HOME/cargo"
export PATH="$CARGO_HOME/bin:$PATH"
# screen
export SCREENRC="$XDG_CONFIG_HOME/misc/screenrc"
# sonarlint
export SONARLINT_USER_HOME="$XDG_DATA_HOME/sonarlint"
# terraform
# https://www.terraform.io/docs/cli/config/config-file.html
# https://www.terraform.io/docs/cli/config/environment-variables.html
export TF_DATA_DIR="$XDG_STATE_HOME/terraform"
export TF_CLI_CONFIG_FILE="$XDG_CONFIG_HOME/terraform/terraformrc"
export TF_PLUGIN_CACHE_DIR="$XDG_CACHE_HOME/terraform/plugin-cache"
# tldr / tealdeer
export TEALDEER_CONFIG_DIR="$XDG_CONFIG_HOME/tealdeer/"
# tmux
export TMUX_CONF="$XDG_CONFIG_HOME/tmux/tmux.conf"
# wakatime, https://github.com/wakatime/wakatime-cli
export WAKATIME_HOME="$XDG_STATE_HOME/wakatime"
x-dc "$WAKATIME_HOME"
# Misc
export BAT_THEME="ansi"
export CHEAT_USE_FZF=true
export SQLITE_HISTORY="$XDG_CACHE_HOME"/sqlite_history

View File

@@ -1,19 +1,25 @@
# lakka exports
## LUA
x-have luarocks && $(luarocks path --bin)
if command -v luarocks &> /dev/null; then
eval "$(luarocks path --bin)"
fi
export PATH="$HOME/.local/go/bin:$PATH"
alias logrotate='/usr/sbin/logrotate -s $HOME/logs/state'
alias logrotate='/usr/sbin/logrotate -s "$HOME/logs/state"'
alias nano='nano -wS -$'
alias gpg=gpg2
ACME_PATH="$HOME/.acme.sh"
# shellcheck source=$HOME/.acme.sh/acme.sh.env
[[ -s "$ACME_PATH/acme.sh.env" ]] && . "$ACME_PATH/acme.sh.env"
if [[ -s "$ACME_PATH/acme.sh.env" ]]; then
source "$ACME_PATH/acme.sh.env"
fi
export RVM_PATH="$HOME/.rvm"
export PATH="$RVM_PATH/bin:$PATH"
# shellcheck source=$HOME/.rvm/scripts/rvm
[[ -s "$RVM_PATH/scripts/rvm" ]] && source "$RVM_PATH/scripts/rvm" # Load RVM into a shell session *as a function*
if [[ -s "$RVM_PATH/scripts/rvm" ]]; then
source "$RVM_PATH/scripts/rvm" # Load RVM into a shell session *as a function*
fi

View File

@@ -1,40 +0,0 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# shellcheck disable=1091,2046
# vim: filetype=bash
# Bash completion file location
export BASH_COMPLETION_USER_FILE="${XDG_CONFIG_HOME}/bash-completion/bash_completion"
# History env variables
export HIST_STAMPS="yyyy-mm-dd"
# Larger bash history (allow 32³ entries; default is 500)
export HISTSIZE=32768
export HISTFILESIZE=$HISTSIZE
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
export HISTCONTROL=ignoreboth
# Make some commands not show up in history
export HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help"
# And include the parameter for ZSH
export HISTORY_IGNORE="(ls|cd|cd -|pwd|exit|date|* --help)"
# Less history location
export LESSHISTFILE="$XDG_STATE_HOME"/less/history
# Highlight section titles in manual pages
# export LESS_TERMCAP_md="$ORANGE"
# zsh autoloaded terminfo
export TERMINFO="${XDG_DATA_HOME}/terminfo"
export TERMINFO_DIRS="${XDG_DATA_HOME}/terminfo":/usr/share/terminfo
# Don't clear the screen after quitting a manual page
export MANPAGER="less -X"
# Always enable colored `grep` output
export GREP_OPTIONS="--color=auto"
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
hash shopt 2> /dev/null && shopt -s checkwinsize

View File

@@ -1,3 +0,0 @@
#!/usr/bin/env bash
#
# shell functions

View File

@@ -0,0 +1,2 @@
disable-ipv6
enable-ssh-support

View File

@@ -0,0 +1,2 @@
disable-ipv6
enable-ssh-support

View File

@@ -8,7 +8,6 @@ tap "gesquive/tap"
tap "github/gh"
tap "homebrew/autoupdate"
tap "homebrew/bundle"
tap "homebrew/cask-fonts"
tap "homebrew/services"
tap "jesseduffield/lazygit"
tap "k8sgpt-ai/k8sgpt"
@@ -57,26 +56,28 @@ brew "apr"
brew "apr-util"
# Password hashing library and CLI utility
brew "argon2"
# Spell checker with better logic than ispell
brew "aspell"
# Automatic configure script builder
brew "autoconf"
# Collection of over 500 reusable autoconf macros
brew "autoconf-archive"
# Tool for generating GNU Standards-compliant Makefiles
brew "automake"
# GNU multiple precision arithmetic library
brew "gmp"
# GNU File, Shell, and Text utilities
brew "coreutils"
# Extendable version manager with support for Ruby, Node.js, Erlang & more
brew "asdf"
# Spell checker with better logic than ispell
brew "aspell"
# Collection of over 500 reusable autoconf macros
brew "autoconf-archive"
# Manage compile and link flags for libraries
brew "pkg-config"
# Automated text file generator
brew "autogen"
# Tool for generating GNU Standards-compliant Makefiles
brew "automake"
# Bourne-Again SHell, a UNIX command interpreter
brew "bash"
# Clone of cat(1) with syntax highlighting and Git integration
brew "bat"
# Yet another cross-platform graphical process/system monitor
brew "bottom"
# Software library to render fonts
brew "freetype"
# XML-based font configuration API for X Windows
@@ -89,24 +90,18 @@ brew "glib"
brew "choose-rust"
# Cross-platform make
brew "cmake"
# GNU File, Shell, and Text utilities
brew "coreutils"
# Open source suite of directory software
brew "openldap"
# Get a file from an HTTP, HTTPS or FTP server
brew "curl"
# Lightweight DNS forwarder and DHCP server
brew "dnsmasq"
# Lightning-fast linter for .env files written in Rust
brew "dotenv-linter"
# Spellchecker wrapping library
brew "enchant"
# Perl lib for reading and writing EXIF metadata
brew "exiftool"
# Simple, fast and user-friendly alternative to find
brew "fd"
# Banner-like program prints strings as ASCII art
brew "figlet"
# Lock file during command
brew "flock"
# Libraries to talk to Microsoft SQL Server and Sybase databases
brew "freetds"
# Monitor a directory for changes and run a shell command
@@ -117,8 +112,6 @@ brew "fzf"
brew "gd"
# Disk usage analyzer with console interface written in Go
brew "gdu"
# GitHub command-line tool
brew "gh"
# Distributed revision control system
brew "git"
# Enable transparent encryption/decryption of files in a git repo
@@ -137,10 +130,10 @@ brew "unbound"
brew "gnutls"
# GNU Pretty Good Privacy (PGP) package
brew "gnupg"
# Open source programming language to build simple/reliable/efficient software
brew "go"
# Library access to GnuPG
brew "gpgme"
# Open source suite of directory software
brew "openldap"
# Manage your GnuPG keys with ease!
brew "gpg-tui"
# Image manipulation
@@ -159,8 +152,6 @@ brew "graphviz"
brew "grep"
# Popular GNU data compression program
brew "gzip"
# Smarter Dockerfile linter to validate best practices
brew "hadolint"
# Improved top (interactive process viewer)
brew "htop"
# Portable abstraction of the hierarchical topology of modern architectures
@@ -177,8 +168,6 @@ brew "jq"
brew "json-c"
# Scanning your k8s clusters, diagnosing, and triaging issues in simple English
brew "k8sgpt"
# Network authentication protocol
brew "krb5"
# Tool to detect/remediate misconfig and security risks of GitHub/GitLab assets
brew "legitify"
# Secure hashing function
@@ -205,8 +194,6 @@ brew "nginx"
brew "nmap"
# ISO-C API and CLI for generating UUIDs
brew "ossp-uuid"
# General-purpose scripting language
brew "php"
# Coreutils progress viewer
brew "progress"
# Python version management
@@ -221,22 +208,12 @@ brew "python@3.11"
brew "ruby-build"
# Ruby version manager
brew "rbenv"
# Search tool like grep and The Silver Searcher
brew "ripgrep"
# Safe, concurrent, practical language
brew "rust"
# Static analysis and lint tool, for (ba)sh scripts
brew "shellcheck"
# Autoformat shell script source code
brew "shfmt"
# Feature-rich console based todo list manager
brew "task"
# Terminal user interface for taskwarrior
brew "taskwarrior-tui"
# Send macOS User Notifications from the command-line
brew "terminal-notifier"
# Thin wrapper for Terraform e.g. for locking state
brew "terragrunt"
# Tool which checks for the support of TLS/SSL ciphers and flaws
brew "testssl"
# Terraform version manager inspired by rbenv
@@ -259,17 +236,32 @@ brew "watch"
brew "wget"
# Check your $HOME for unwanted files and directories
brew "xdg-ninja", args: ["HEAD"]
# JavaScript package manager
brew "yarn"
# Watcher for macOS 10.14+ light/dark mode changes
brew "cormacrelf/tap/dark-notify"
# Cleans up your $HOME from those pesky dotfiles
brew "doron-cohen/tap/antidot"
# lets you quickly switch between multiple git user profiles
brew "gesquive/tap/git-user"
brew "keith/formulae/reminders-cli"
# Automated code review tool integrated with any code analysis tools regardless of programming language.
brew "reviewdog/tap/reviewdog"
# Imagick PHP extension
brew "shivammathur/extensions/imagick@8.3"
# Mcrypt PHP extension
brew "shivammathur/extensions/mcrypt@8.3"
# Msgpack PHP extension
brew "shivammathur/extensions/msgpack@8.3"
# PCOV PHP extension
brew "shivammathur/extensions/pcov@8.3"
# Redis PHP extension
brew "shivammathur/extensions/redis@8.3"
# Uuid PHP extension
brew "shivammathur/extensions/uuid@8.3"
# Yaml PHP extension
brew "shivammathur/extensions/yaml@8.3"
# General-purpose scripting language
brew "shivammathur/php/php"
# General-purpose scripting language
brew "shivammathur/php/php-debug"
# Command-line interface for 1Password
cask "1password-cli"
# GPU-accelerated terminal emulator
@@ -282,22 +274,6 @@ cask "dbeaver-community"
cask "dbngin"
# App to build and share containerised applications and microservices
cask "docker"
# Unofficial overcast.fm podcast app
cask "fog"
# Typeface made for developers
cask "font-jetbrains-mono"
# Developer targeted fonts with a high number of glyphs
cask "font-jetbrains-mono-nerd-font"
cask "font-lato"
cask "font-open-sans"
# Font with a mechanical skeleton and the forms are largely geometric
cask "font-roboto"
cask "font-source-code-pro"
cask "font-source-code-pro-for-powerline"
cask "font-source-sans-pro"
cask "font-source-serif-pro"
# Open Source Webfont Converter
cask "fontplop"
# GIT client
cask "fork"
# HTTP and GraphQL Client
@@ -348,6 +324,8 @@ cask "soundsource"
cask "suspicious-package"
# Quicklook extension for source files
cask "syntax-highlight"
# Python IDE for beginners
cask "thonny"
# Configuration application for the Ultimate Hacking Keyboard
cask "uhk-agent"
# Open-source code editor
@@ -358,3 +336,5 @@ cask "vlc"
cask "voikkospellservice"
# Application for generating TOTP and HOTP codes
cask "yubico-authenticator"
# Multiplayer code editor
cask "zed"

View File

@@ -32,4 +32,4 @@
"NEWS.md": "6077"
},
"version": 6
}
}

View File

@@ -111,9 +111,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
},
@@ -128,9 +126,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

96
config/shared.sh Executable file
View File

@@ -0,0 +1,96 @@
#!/usr/bin/env bash
#
# Shared configuration
#
# shellcheck shell=bash
# Defaults
[ -z "$DOTFILES" ] && export DOTFILES="$HOME/.dotfiles"
export DOTFILES_CURRENT_SHELL=$(basename "$SHELL")
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Enable debugging with DEBUG=1
DEBUG="${DEBUG:-0}"
# Enable debugging with DEBUG=1
[ "${DEBUG:-0}" -eq 1 ] && set -x
# Explicitly set XDG folders, if not already set
# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
[ -z "$XDG_CONFIG_HOME" ] && export XDG_CONFIG_HOME="$HOME/.config"
[ -z "$XDG_DATA_HOME" ] && export XDG_DATA_HOME="$HOME/.local/share"
[ -z "$XDG_CACHE_HOME" ] && export XDG_CACHE_HOME="$HOME/.cache"
[ -z "$XDG_STATE_HOME" ] && export XDG_STATE_HOME="$HOME/.local/state"
[ -z "$XDG_BIN_HOME" ] && export XDG_BIN_HOME="$HOME/.local/bin"
# Paths
x-path-prepend "/usr/local/bin"
x-path-prepend "/opt/homebrew/bin"
x-path-prepend "$XDG_DATA_HOME/cargo/bin"
x-path-prepend "$XDG_DATA_HOME/bob/nvim-bin"
x-path-prepend "$DOTFILES/local/bin"
x-path-prepend "$XDG_BIN_HOME"
# Custom completion paths
[ -z "$ZSH_CUSTOM_COMPLETION_PATH" ] && export ZSH_CUSTOM_COMPLETION_PATH="$XDG_CONFIG_HOME/zsh/completion"
x-dc "$ZSH_CUSTOM_COMPLETION_PATH"
export FPATH="$ZSH_CUSTOM_COMPLETION_PATH:$FPATH"
if ! declare -f msg > /dev/null; then
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[ "$VERBOSE" -eq 1 ] && echo "$1"
return 0
}
msg "msg was not defined, defined it now"
fi
if ! declare -f msg_err > /dev/null; then
msg "msg_err was not defined, defined it now"
# Function to print error messages and exit
# $1 - error message (string)
msg_err()
{
echo "(!) ERROR: $1" >&2
exit 1
}
fi
if ! declare -f msg_done > /dev/null; then
msg "msg_done was not defined, defined it now"
# Function to print done message
# $1 - message (string)
msg_done()
{
echo "$1"
return 0
}
fi
if ! declare -f msg_run > /dev/null; then
msg "msg_run was not defined, defined it now"
# Function to print running message
# $1 - message (string)
msg_run()
{
echo "$1"
return 0
}
fi
if ! declare -f msg_ok > /dev/null; then
msg "msg_ok was not defined, defined it now"
# Function to print ok message
# $1 - message (string)
msg_ok()
{
echo "$1"
return 0
}
fi
source "$DOTFILES/config/exports"
source "$DOTFILES/config/alias"

View File

@@ -0,0 +1,37 @@
local wezterm = require("wezterm")
local config = wezterm.config_builder()
-- Font and font size
config.font_size = 14.0
config.font = wezterm.font("JetBrainsMonoNL Nerd Font Mono")
-- Make the window a bit transparent
config.window_background_opacity = 0.97
-- Don't show tab bar
config.enable_tab_bar = false
config.send_composed_key_when_left_alt_is_pressed = true
-- Function to detect the theme based on appearance
function Scheme_for_appearance(appearance)
if appearance:find("Dark") then
return "Tokyo Night Storm"
else
return "Tokyo Night Day"
end
end
-- Set the color scheme based on appearance
---@diagnostic disable-next-line: unused-local
wezterm.on("window-config-reloaded", function(window, pane)
local overrides = window:get_config_overrides() or {}
local appearance = window:get_appearance()
local scheme = Scheme_for_appearance(appearance)
if overrides.color_scheme ~= scheme then
overrides.color_scheme = scheme
window:set_config_overrides(overrides)
end
end)
return config

53
docs/folders.md Normal file
View File

@@ -0,0 +1,53 @@
# Interesting folders
## XDG
XDG is a set of specifications that provide a standard for the organization
of user-specific files and directories. It is based on the _XDG Base Directory Specification_.
### XDG_BIN_HOME (`$HOME/.local/bin`)
`$XDG_BIN_HOME` defines directory that contains local binaries.
User-specific executable files may be stored in `$HOME/.local/bin`.
Distributions should ensure this directory shows up in the UNIX `$PATH`
environment variable, at an appropriate place.
### XDG_DATA_HOME (`$HOME/.local/share`)
`$XDG_DATA_HOME` defines the base directory relative to which
user-specific _data files_ should be stored.
If `$XDG_DATA_HOME` is either not set or empty,
a default equal to `$HOME/.local/share` should be used.
### XDG_CONFIG_HOME (`$HOME/.config`)
`$XDG_CONFIG_HOME` defines the base directory relative to which
user-specific _configuration files_ should be stored.
If `$XDG_CONFIG_HOME` is either not set or empty,
a default equal to `$HOME/.config` should be used.
### XDG_STATE_HOME (`$HOME/.local/state`)
`$XDG_STATE_HOME` defines the base directory relative to which
user-specific _state files_ should be stored.
If `$XDG_STATE_HOME` is either not set or empty,
a default equal to `$HOME/.local/state` should be used.
The `$XDG_STATE_HOME` contains _state data_ that should
_persist between (application) restarts_, but that is not important or
portable enough to the user that it should be stored in `$XDG_DATA_HOME`.
- It may contain:
- actions history (logs, history, recently used files, …)
- current state of the application that can be reused
on a restart (view, layout, open files, undo history, …)
### XDG_DATA_DIRS
`$XDG_DATA_DIRS` defines the preference-ordered set of base directories
to search for data files in addition to the `$XDG_DATA_HOME` base directory.
The directories in `$XDG_DATA_DIRS` should be separated with a colon ':'.

View File

@@ -3,8 +3,6 @@
```txt
n <Esc> * <Cmd>nohlsearch<CR>
n <Space>tc * <Cmd>CloakToggle<CR>
Toggle Cloak
n <Space>zg * :Rg<CR>
FZF: search with rg (aka live grep).
n <Space>zm * :Maps<CR>
@@ -19,34 +17,36 @@ n <Space>zc * :Commands<CR>
FZF: search commands.
n <Space>zf * :FZF<Space>
FZF: search for files in given path.
<Space>f * <Lua 40: ~/.dotfiles/config/nvim-kickstart/init.lua:505>
[F]ormat buffer
n <Space>e * <Lua 80: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Space>tz * <Lua 60: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Toggle ZenMode
n <Space>4 * <Lua 58: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Space>tc * <Cmd>CloakToggle<CR>
[tc] Toggle Cloak
n <Space>4 * <Lua 84: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 4
n <Space>3 * <Lua 57: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Space>3 * <Lua 83: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 3
n <Space>2 * <Lua 56: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Space>2 * <Lua 82: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 2
n <Space>1 * <Lua 55: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Space>1 * <Lua 81: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 1
n <Space>xn * <Lua 54: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Space>xn * <Lua 80: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to next file
n <Space>xN * <Lua 53: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to previous file
n <Space>xa * <Lua 52: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Space>xa * <Lua 79: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon quick menu
n <Space>xA * <Lua 51: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Space>xN * <Lua 78: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to previous file
n <Space>xA * <Lua 77: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon file
n <Space>5 * <Lua 49: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Space>5 * <Lua 76: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 5
n <Space>tz * <Lua 51: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
[tz] Toggle ZenMode
n <Space>e * <Lua 47: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
<Space>f * <Lua 40: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
[f] Format buffer
n <Space>qq * <Cmd>wq!<CR>
Quickly Quit
n <Space>bq * <Lua 27: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1984>
n <Space>bq * <Lua 28: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1984>
Open diagnostic [Q]uickfix list
n <Space>be * <Lua 26: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1694>
n <Space>be * <Lua 27: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1694>
Show diagnostic [E]rror messages
x # * <Lua 7: vim/_defaults.lua:0>
:help v_#-default
@@ -74,108 +74,98 @@ n ]% <Plug>(MatchitNormalMultiForward)
n ]d * <Lua 14: vim/_defaults.lua:0>
Jump to the next diagnostic
x a% <Plug>(MatchitVisualTextObject)
o al <Lua 322: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
o al <Lua 247: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around last textobject
o an <Lua 318: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
o an <Lua 246: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around next textobject
x al <Lua 292: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
x al <Lua 243: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around last textobject
x an <Lua 291: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
x an <Lua 242: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around next textobject
o a <Lua 288: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
o a <Lua 240: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around textobject
x a <Lua 285: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
x a <Lua 238: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around textobject
n dj * <Lua 25: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1222>
n dj * <Lua 26: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1222>
Go to next [D]iagnostic message
n dk * <Lua 23: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1145>
n dk * <Lua 25: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1145>
Go to previous [D]iagnostic message
o g% <Plug>(MatchitOperationBackward)
x g% <Plug>(MatchitVisualBackward)
n g% <Plug>(MatchitNormalBackward)
o g] <Lua 281: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1142>
n gR * :RegexplainerToggle<CR>
Toggle Regexplainer
o g] <Lua 237: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1169>
Move to right "around"
x g] <Lua 280: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1142>
x g] <Lua 236: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1169>
Move to right "around"
n g] <Lua 278: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1142>
n g] <Lua 235: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1169>
Move to right "around"
o g[ <Lua 277: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1141>
o g[ <Lua 234: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1168>
Move to left "around"
x g[ <Lua 273: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1141>
x g[ <Lua 233: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1168>
Move to left "around"
n g[ <Lua 266: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1141>
n g[ <Lua 232: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1168>
Move to left "around"
n gcA * <Lua 275: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:218>
Comment insert end of line
n gcO * <Lua 274: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:179>
Comment insert above
n gco * <Lua 11: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:182>
Comment insert below
x gb * <Plug>(comment_toggle_blockwise_visual)
Comment toggle blockwise (visual)
n gbc * <Lua 12: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/init.lua:107>
Comment toggle current block
n gb * <Plug>(comment_toggle_blockwise)
Comment toggle blockwise
o gc * <Lua 13: vim/_defaults.lua:0>
Comment textobject
n gcc * <Lua 10: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/init.lua:103>
Comment toggle current line
x gc * <Plug>(comment_toggle_linewise_visual)
Comment toggle linewise (visual)
n gc * <Plug>(comment_toggle_linewise)
Comment toggle linewise
n gcc * <Lua 12: vim/_defaults.lua:0>
Toggle comment line
x gc * <Lua 11: vim/_defaults.lua:0>
Toggle comment
n gc * <Lua 10: vim/_defaults.lua:0>
Toggle comment
x gx * <Lua 9: vim/_defaults.lua:0>
Opens filepath or URI under cursor with the system handler (file explorer, web browser, …)
n gx * <Lua 8: vim/_defaults.lua:0>
Opens filepath or URI under cursor with the system handler (file explorer, web browser, …)
o il <Lua 325: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
o il <Lua 249: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside last textobject
o in <Lua 324: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
o in <Lua 248: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside next textobject
x il <Lua 296: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
x il <Lua 245: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside last textobject
x in <Lua 295: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
x in <Lua 244: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside next textobject
o i <Lua 289: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
o i <Lua 241: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside textobject
x i <Lua 286: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1145>
x i <Lua 239: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside textobject
n shn * <Lua 428: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n shn * <Lua 266: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Highlight next surrounding
n sFn * <Lua 427: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sFn * <Lua 265: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find next left surrounding
n sfn * <Lua 426: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sfn * <Lua 264: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find next right surrounding
n srn * <Lua 425: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n srn * <Lua 263: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Replace next surrounding
n sdn * <Lua 424: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sdn * <Lua 262: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Delete next surrounding
n shl * <Lua 423: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n shl * <Lua 261: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Highlight previous surrounding
n sFl * <Lua 422: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sFl * <Lua 260: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find previous left surrounding
n sfl * <Lua 421: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sfl * <Lua 259: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find previous right surrounding
n srl * <Lua 386: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n srl * <Lua 258: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Replace previous surrounding
n sdl * <Lua 371: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sdl * <Lua 257: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Delete previous surrounding
x sa * :<C-U>lua MiniSurround.add('visual')<CR>
Add surrounding to selection
n sn * <Lua 370: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:861>
n sn * <Lua 256: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:892>
Update `MiniSurround.config.n_lines`
n sh * <Lua 351: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sh * <Lua 255: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Highlight surrounding
n sF * <Lua 59: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sF * <Lua 254: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find left surrounding
n sf * <Lua 331: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sf * <Lua 253: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find right surrounding
n sr * <Lua 330: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sr * <Lua 252: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Replace surrounding
n sd * <Lua 328: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sd * <Lua 251: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Delete surrounding
n sa * <Lua 327: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1220>
n sa * <Lua 250: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Add surrounding
x <Plug>(MatchitVisualTextObject) <Plug>(MatchitVisualMultiBackward)o<Plug>(MatchitVisualMultiForward)
o <Plug>(MatchitOperationMultiForward) * :<C-U>call matchit#MultiMatch("W", "o")<CR>
@@ -197,29 +187,12 @@ x <Plug>(fzf-maps-x) * :<C-U>call fzf#vim#maps('x', 0)<CR>
n <Plug>(fzf-maps-n) * :<C-U>call fzf#vim#maps('n', 0)<CR>
n <Plug>(fzf-normal) * <Nop>
n <Plug>(fzf-insert) * i
n <Plug>PlenaryTestFile * :lua require('plenary.test_harness').test_file(vim.fn.expand("%:p"))<CR>
x <Plug>(comment_toggle_blockwise_visual) * <Esc><Cmd>lua require("Comment.api").locked("toggle.blockwise")(vim.fn.visualmode())<CR>
Comment toggle blockwise (visual)
x <Plug>(comment_toggle_linewise_visual) * <Esc><Cmd>lua require("Comment.api").locked("toggle.linewise")(vim.fn.visualmode())<CR>
Comment toggle linewise (visual)
n <Plug>(comment_toggle_blockwise_count) * <Lua 272: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle blockwise with count
n <Plug>(comment_toggle_linewise_count) * <Lua 271: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle linewise with count
n <Plug>(comment_toggle_blockwise_current) * <Lua 270: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle current block
n <Plug>(comment_toggle_linewise_current) * <Lua 269: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle current line
n <Plug>(comment_toggle_blockwise) * <Lua 268: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle blockwise
n <Plug>(comment_toggle_linewise) * <Lua 267: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle linewise
n <C-Bslash> * <Lua 75: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-Bslash> * <Lua 60: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-S> * <Cmd>w<CR>
Save file
n <C-K> * <Lua 78: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-J> * <Lua 76: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-H> * <Lua 77: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-K> * <Lua 57: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-J> * <Lua 56: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-H> * <Lua 58: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Down> * <Cmd>echo "Use j to move!!"<CR>
n <Up> * <Cmd>echo "Use k to move!!"<CR>
n <Right> * <Cmd>echo "Use l to move!!"<CR>
@@ -228,7 +201,7 @@ n <C-W><C-D> <C-W>d
Show diagnostics under the cursor
n <C-W>d * <Lua 16: vim/_defaults.lua:0>
Show diagnostics under the cursor
n <C-L> * <Lua 73: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-L> * <Lua 59: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
```
- Generated on Sun 30 Jun 2024 14:16:28 EEST
- Generated on Sat 10 Aug 2024 13:01:59 EEST

280
docs/wezterm-keybindings.md Normal file
View File

@@ -0,0 +1,280 @@
# wezterm keybindings
```txt
Default key table
-----------------
CTRL Tab -> ActivateTabRelative(1)
SHIFT | CTRL Tab -> ActivateTabRelative(-1)
ALT Enter -> ToggleFullScreen
CTRL ! -> ActivateTab(0)
SHIFT | CTRL ! -> ActivateTab(0)
ALT | CTRL " -> SplitVertical(SpawnCommand domain=CurrentPaneDomain)
SHIFT | ALT | CTRL " -> SplitVertical(SpawnCommand domain=CurrentPaneDomain)
CTRL # -> ActivateTab(2)
SHIFT | CTRL # -> ActivateTab(2)
CTRL $ -> ActivateTab(3)
SHIFT | CTRL $ -> ActivateTab(3)
CTRL % -> ActivateTab(4)
SHIFT | CTRL % -> ActivateTab(4)
ALT | CTRL % -> SplitHorizontal(SpawnCommand domain=CurrentPaneDomain)
SHIFT | ALT | CTRL % -> SplitHorizontal(SpawnCommand domain=CurrentPaneDomain)
CTRL & -> ActivateTab(6)
SHIFT | CTRL & -> ActivateTab(6)
SHIFT | ALT | CTRL ' -> SplitVertical(SpawnCommand domain=CurrentPaneDomain)
CTRL ( -> ActivateTab(-1)
SHIFT | CTRL ( -> ActivateTab(-1)
CTRL ) -> ResetFontSize
SHIFT | CTRL ) -> ResetFontSize
CTRL * -> ActivateTab(7)
SHIFT | CTRL * -> ActivateTab(7)
CTRL + -> IncreaseFontSize
SHIFT | CTRL + -> IncreaseFontSize
CTRL - -> DecreaseFontSize
SHIFT | CTRL - -> DecreaseFontSize
SUPER - -> DecreaseFontSize
CTRL 0 -> ResetFontSize
SHIFT | CTRL 0 -> ResetFontSize
SUPER 0 -> ResetFontSize
SHIFT | CTRL 1 -> ActivateTab(0)
SUPER 1 -> ActivateTab(0)
SHIFT | CTRL 2 -> ActivateTab(1)
SUPER 2 -> ActivateTab(1)
SHIFT | CTRL 3 -> ActivateTab(2)
SUPER 3 -> ActivateTab(2)
SHIFT | CTRL 4 -> ActivateTab(3)
SUPER 4 -> ActivateTab(3)
SHIFT | CTRL 5 -> ActivateTab(4)
SHIFT | ALT | CTRL 5 -> SplitHorizontal(SpawnCommand domain=CurrentPaneDomain)
SUPER 5 -> ActivateTab(4)
SHIFT | CTRL 6 -> ActivateTab(5)
SUPER 6 -> ActivateTab(5)
SHIFT | CTRL 7 -> ActivateTab(6)
SUPER 7 -> ActivateTab(6)
SHIFT | CTRL 8 -> ActivateTab(7)
SUPER 8 -> ActivateTab(7)
SHIFT | CTRL 9 -> ActivateTab(-1)
SUPER 9 -> ActivateTab(-1)
CTRL = -> IncreaseFontSize
SHIFT | CTRL = -> IncreaseFontSize
SUPER = -> IncreaseFontSize
CTRL @ -> ActivateTab(1)
SHIFT | CTRL @ -> ActivateTab(1)
CTRL C -> CopyTo(Clipboard)
SHIFT | CTRL C -> CopyTo(Clipboard)
CTRL F -> Search(CurrentSelectionOrEmptyString)
SHIFT | CTRL F -> Search(CurrentSelectionOrEmptyString)
CTRL H -> HideApplication
SHIFT | CTRL H -> HideApplication
CTRL K -> ClearScrollback(ScrollbackOnly)
SHIFT | CTRL K -> ClearScrollback(ScrollbackOnly)
CTRL L -> ShowDebugOverlay
SHIFT | CTRL L -> ShowDebugOverlay
CTRL M -> Hide
SHIFT | CTRL M -> Hide
CTRL N -> SpawnWindow
SHIFT | CTRL N -> SpawnWindow
CTRL P -> ActivateCommandPalette
SHIFT | CTRL P -> ActivateCommandPalette
CTRL Q -> QuitApplication
SHIFT | CTRL Q -> QuitApplication
CTRL R -> ReloadConfiguration
SHIFT | CTRL R -> ReloadConfiguration
CTRL T -> SpawnTab(CurrentPaneDomain)
SHIFT | CTRL T -> SpawnTab(CurrentPaneDomain)
CTRL U -> CharSelect(CharSelectArguments { group: None, copy_on_select: true, copy_to: ClipboardAndPrimarySelection })
SHIFT | CTRL U -> CharSelect(CharSelectArguments { group: None, copy_on_select: true, copy_to: ClipboardAndPrimarySelection })
CTRL V -> PasteFrom(Clipboard)
SHIFT | CTRL V -> PasteFrom(Clipboard)
CTRL W -> CloseCurrentTab { confirm: true }
SHIFT | CTRL W -> CloseCurrentTab { confirm: true }
CTRL X -> ActivateCopyMode
SHIFT | CTRL X -> ActivateCopyMode
CTRL Z -> TogglePaneZoomState
SHIFT | CTRL Z -> TogglePaneZoomState
SHIFT | SUPER [ -> ActivateTabRelative(-1)
SHIFT | SUPER ] -> ActivateTabRelative(1)
CTRL ^ -> ActivateTab(5)
SHIFT | CTRL ^ -> ActivateTab(5)
CTRL _ -> DecreaseFontSize
SHIFT | CTRL _ -> DecreaseFontSize
SHIFT | CTRL c -> CopyTo(Clipboard)
SUPER c -> CopyTo(Clipboard)
SHIFT | CTRL f -> Search(CurrentSelectionOrEmptyString)
SUPER f -> Search(CurrentSelectionOrEmptyString)
SHIFT | CTRL h -> HideApplication
SUPER h -> HideApplication
SHIFT | CTRL k -> ClearScrollback(ScrollbackOnly)
SUPER k -> ClearScrollback(ScrollbackOnly)
SHIFT | CTRL l -> ShowDebugOverlay
SHIFT | CTRL m -> Hide
SUPER m -> Hide
SHIFT | CTRL n -> SpawnWindow
SUPER n -> SpawnWindow
SHIFT | CTRL p -> ActivateCommandPalette
SHIFT | CTRL q -> QuitApplication
SUPER q -> QuitApplication
SHIFT | CTRL r -> ReloadConfiguration
SUPER r -> ReloadConfiguration
SHIFT | CTRL t -> SpawnTab(CurrentPaneDomain)
SUPER t -> SpawnTab(CurrentPaneDomain)
SHIFT | CTRL u -> CharSelect(CharSelectArguments { group: None, copy_on_select: true, copy_to: ClipboardAndPrimarySelection })
SHIFT | CTRL v -> PasteFrom(Clipboard)
SUPER v -> PasteFrom(Clipboard)
SHIFT | CTRL w -> CloseCurrentTab { confirm: true }
SUPER w -> CloseCurrentTab { confirm: true }
SHIFT | CTRL x -> ActivateCopyMode
SHIFT | CTRL z -> TogglePaneZoomState
SUPER { -> ActivateTabRelative(-1)
SHIFT | SUPER { -> ActivateTabRelative(-1)
SUPER } -> ActivateTabRelative(1)
SHIFT | SUPER } -> ActivateTabRelative(1)
SHIFT | CTRL Space (Physical) -> QuickSelect
SHIFT PageUp -> ScrollByPage(NotNan(-1.0))
CTRL PageUp -> ActivateTabRelative(-1)
SHIFT | CTRL PageUp -> MoveTabRelative(-1)
SHIFT PageDown -> ScrollByPage(NotNan(1.0))
CTRL PageDown -> ActivateTabRelative(1)
SHIFT | CTRL PageDown -> MoveTabRelative(1)
SHIFT | CTRL LeftArrow -> ActivatePaneDirection(Left)
SHIFT | ALT | CTRL LeftArrow -> AdjustPaneSize(Left, 1)
SHIFT | CTRL RightArrow -> ActivatePaneDirection(Right)
SHIFT | ALT | CTRL RightArrow -> AdjustPaneSize(Right, 1)
SHIFT | CTRL UpArrow -> ActivatePaneDirection(Up)
SHIFT | ALT | CTRL UpArrow -> AdjustPaneSize(Up, 1)
SHIFT | CTRL DownArrow -> ActivatePaneDirection(Down)
SHIFT | ALT | CTRL DownArrow -> AdjustPaneSize(Down, 1)
Copy -> CopyTo(Clipboard)
Paste -> PasteFrom(Clipboard)
Key Table: copy_mode
--------------------
Tab -> CopyMode(MoveForwardWord)
SHIFT Tab -> CopyMode(MoveBackwardWord)
Enter -> CopyMode(MoveToStartOfNextLine)
Escape -> CopyMode(Close)
Space -> CopyMode(SetSelectionMode(Some(Cell)))
$ -> CopyMode(MoveToEndOfLineContent)
SHIFT $ -> CopyMode(MoveToEndOfLineContent)
, -> CopyMode(JumpReverse)
0 -> CopyMode(MoveToStartOfLine)
; -> CopyMode(JumpAgain)
F -> CopyMode(JumpBackward { prev_char: false })
SHIFT F -> CopyMode(JumpBackward { prev_char: false })
G -> CopyMode(MoveToScrollbackBottom)
SHIFT G -> CopyMode(MoveToScrollbackBottom)
H -> CopyMode(MoveToViewportTop)
SHIFT H -> CopyMode(MoveToViewportTop)
L -> CopyMode(MoveToViewportBottom)
SHIFT L -> CopyMode(MoveToViewportBottom)
M -> CopyMode(MoveToViewportMiddle)
SHIFT M -> CopyMode(MoveToViewportMiddle)
O -> CopyMode(MoveToSelectionOtherEndHoriz)
SHIFT O -> CopyMode(MoveToSelectionOtherEndHoriz)
T -> CopyMode(JumpBackward { prev_char: true })
SHIFT T -> CopyMode(JumpBackward { prev_char: true })
V -> CopyMode(SetSelectionMode(Some(Line)))
SHIFT V -> CopyMode(SetSelectionMode(Some(Line)))
^ -> CopyMode(MoveToStartOfLineContent)
SHIFT ^ -> CopyMode(MoveToStartOfLineContent)
b -> CopyMode(MoveBackwardWord)
ALT b -> CopyMode(MoveBackwardWord)
CTRL b -> CopyMode(PageUp)
CTRL c -> CopyMode(Close)
CTRL d -> CopyMode(MoveByPage(NotNan(0.5)))
e -> CopyMode(MoveForwardWordEnd)
f -> CopyMode(JumpForward { prev_char: false })
ALT f -> CopyMode(MoveForwardWord)
CTRL f -> CopyMode(PageDown)
g -> CopyMode(MoveToScrollbackTop)
CTRL g -> CopyMode(Close)
h -> CopyMode(MoveLeft)
j -> CopyMode(MoveDown)
k -> CopyMode(MoveUp)
l -> CopyMode(MoveRight)
ALT m -> CopyMode(MoveToStartOfLineContent)
o -> CopyMode(MoveToSelectionOtherEnd)
q -> CopyMode(Close)
t -> CopyMode(JumpForward { prev_char: true })
CTRL u -> CopyMode(MoveByPage(NotNan(-0.5)))
v -> CopyMode(SetSelectionMode(Some(Cell)))
CTRL v -> CopyMode(SetSelectionMode(Some(Block)))
w -> CopyMode(MoveForwardWord)
y -> Multiple([CopyTo(ClipboardAndPrimarySelection), CopyMode(Close)])
PageUp -> CopyMode(PageUp)
PageDown -> CopyMode(PageDown)
End -> CopyMode(MoveToEndOfLineContent)
Home -> CopyMode(MoveToStartOfLine)
LeftArrow -> CopyMode(MoveLeft)
ALT LeftArrow -> CopyMode(MoveBackwardWord)
RightArrow -> CopyMode(MoveRight)
ALT RightArrow -> CopyMode(MoveForwardWord)
UpArrow -> CopyMode(MoveUp)
DownArrow -> CopyMode(MoveDown)
Key Table: search_mode
----------------------
Enter -> CopyMode(PriorMatch)
Escape -> CopyMode(Close)
CTRL n -> CopyMode(NextMatch)
CTRL p -> CopyMode(PriorMatch)
CTRL r -> CopyMode(CycleMatchType)
CTRL u -> CopyMode(ClearPattern)
PageUp -> CopyMode(PriorMatchPage)
PageDown -> CopyMode(NextMatchPage)
UpArrow -> CopyMode(PriorMatch)
DownArrow -> CopyMode(NextMatch)
Mouse
-----
Down { streak: 1, button: Left } -> SelectTextAtMouseCursor(Cell)
SHIFT Down { streak: 1, button: Left } -> ExtendSelectionToMouseCursor(Cell)
ALT Down { streak: 1, button: Left } -> SelectTextAtMouseCursor(Block)
SHIFT | ALT Down { streak: 1, button: Left } -> ExtendSelectionToMouseCursor(Block)
Down { streak: 1, button: Middle } -> PasteFrom(PrimarySelection)
Down { streak: 1, button: WheelUp(1) } -> ScrollByCurrentEventWheelDelta
Down { streak: 1, button: WheelDown(1) } -> ScrollByCurrentEventWheelDelta
Down { streak: 2, button: Left } -> SelectTextAtMouseCursor(Word)
Down { streak: 3, button: Left } -> SelectTextAtMouseCursor(Line)
Drag { streak: 1, button: Left } -> ExtendSelectionToMouseCursor(Cell)
ALT Drag { streak: 1, button: Left } -> ExtendSelectionToMouseCursor(Block)
SHIFT | CTRL Drag { streak: 1, button: Left } -> StartWindowDrag
SUPER Drag { streak: 1, button: Left } -> StartWindowDrag
Drag { streak: 2, button: Left } -> ExtendSelectionToMouseCursor(Word)
Drag { streak: 3, button: Left } -> ExtendSelectionToMouseCursor(Line)
Up { streak: 1, button: Left } -> CompleteSelectionOrOpenLinkAtMouseCursor(ClipboardAndPrimarySelection)
SHIFT Up { streak: 1, button: Left } -> CompleteSelectionOrOpenLinkAtMouseCursor(ClipboardAndPrimarySelection)
ALT Up { streak: 1, button: Left } -> CompleteSelection(ClipboardAndPrimarySelection)
SHIFT | ALT Up { streak: 1, button: Left } -> CompleteSelectionOrOpenLinkAtMouseCursor(PrimarySelection)
Up { streak: 2, button: Left } -> CompleteSelection(ClipboardAndPrimarySelection)
Up { streak: 3, button: Left } -> CompleteSelection(ClipboardAndPrimarySelection)
Mouse: alt_screen
-----------------
Down { streak: 1, button: Left } -> SelectTextAtMouseCursor(Cell)
SHIFT Down { streak: 1, button: Left } -> ExtendSelectionToMouseCursor(Cell)
ALT Down { streak: 1, button: Left } -> SelectTextAtMouseCursor(Block)
SHIFT | ALT Down { streak: 1, button: Left } -> ExtendSelectionToMouseCursor(Block)
Down { streak: 1, button: Middle } -> PasteFrom(PrimarySelection)
Down { streak: 2, button: Left } -> SelectTextAtMouseCursor(Word)
Down { streak: 3, button: Left } -> SelectTextAtMouseCursor(Line)
Drag { streak: 1, button: Left } -> ExtendSelectionToMouseCursor(Cell)
ALT Drag { streak: 1, button: Left } -> ExtendSelectionToMouseCursor(Block)
SHIFT | CTRL Drag { streak: 1, button: Left } -> StartWindowDrag
SUPER Drag { streak: 1, button: Left } -> StartWindowDrag
Drag { streak: 2, button: Left } -> ExtendSelectionToMouseCursor(Word)
Drag { streak: 3, button: Left } -> ExtendSelectionToMouseCursor(Line)
Up { streak: 1, button: Left } -> CompleteSelectionOrOpenLinkAtMouseCursor(ClipboardAndPrimarySelection)
SHIFT Up { streak: 1, button: Left } -> CompleteSelectionOrOpenLinkAtMouseCursor(ClipboardAndPrimarySelection)
ALT Up { streak: 1, button: Left } -> CompleteSelection(ClipboardAndPrimarySelection)
SHIFT | ALT Up { streak: 1, button: Left } -> CompleteSelectionOrOpenLinkAtMouseCursor(PrimarySelection)
Up { streak: 2, button: Left } -> CompleteSelection(ClipboardAndPrimarySelection)
Up { streak: 3, button: Left } -> CompleteSelection(ClipboardAndPrimarySelection)
```
- Generated on Sat 10 Aug 2024 13:01:59 EEST

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -16,6 +16,8 @@
~/.local/bin:
~/.local/run:
~/.local/share:
~/.local/share/gnupg:
mode: 0700
~/.local/state:
~/.ssh:
mode: 0700

1
local/bin/asdf Submodule

Submodule local/bin/asdf added at f00f759f3d

View File

@@ -14,19 +14,92 @@
SCRIPT=$(basename "$0")
if ! declare -f msg > /dev/null; then
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[ "$VERBOSE" -eq 1 ] && echo "$1"
return 0
}
fi
if ! declare -f msg_err > /dev/null; then
# Function to print error messages and exit
# $1 - error message (string)
msg_err()
{
echo "(!) ERROR: $1" >&2
exit 1
}
fi
if ! declare -f msg_done > /dev/null; then
# Function to print done message
# $1 - message (string)
msg_done()
{
echo "✓ $1"
return 0
}
fi
VERSION_NVM="v0.39.5"
export DOTFILES="$HOME/.dotfiles"
# shellcheck source=./../../scripts/shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
source "$DOTFILES/config/exports"
source "$DOTFILES/config/alias"
source "$DOTFILES/config/functions"
# Loads configs for better installation experience
x-load-configs
source "$DOTFILES/config/shared.sh"
function section_install
source "${DOTFILES}/local/bin/msgr"
# -- Menu builder -- #
menu_section()
{
LINE=$(printf '%-18s [ %-15s ]\n' "$1" "$2")
echo -e " $(__log_marker) $LINE"
}
menu_item()
{
LINE=$(printf '%-15s %-30s\n' "$1" "$2")
echo -e "$(__log_indent)$(__log_marker) $LINE"
}
# Takes a bash array ("cow:moo", "dinosaur:roar") and loops
# through the keys to build menu section listing.
menu_usage_header()
{
MENU_CMD="$1"
shift
MENU_ARRAY=("$@")
KEYS=""
for item in "${MENU_ARRAY[@]}"; do
CMD=$(echo "${item}" | awk -F ":" '{print $1}')
KEYS+="${CMD} | "
done
# "???" removes 3 last characters, being " | " from the end
menu_section "$MENU_CMD" "${KEYS%???}"
}
# Takes the usage command "$0 dotfiles" and a
# bash array ("cow:moo" "dinosaur:roar") and loops
# through in building a menu for dfm command usage listing.
menu_usage()
{
MENU_CMD="$1"
shift
MENU_ARRAY=("$@")
msg "$MENU_CMD"
for item in "${MENU_ARRAY[@]}"; do
CMD=$(echo "${item}" | awk -F ":" '{print $1}')
DESC=$(echo "${item}" | awk -F ":" '{print $2}')
menu_item "$CMD" "$DESC"
done
}
section_install()
{
USAGE_PREFIX="$SCRIPT install <command>"
@@ -56,29 +129,29 @@ function section_install
case "$1" in
all)
msgr msg "Starting to install all and reloading configurations..."
x-load-configs
$0 install macos
$0 install fonts
$0 install antigen
$0 brew install
$0 install ohmyposh
$0 install ohmybash
$0 install pip
$0 install cargo
$0 install asdf
# $0 install ohmybash
# $0 install pip
# $0 install cargo
$0 install composer
$0 install dotenv
# $0 install dotenv
$0 install fzf
$0 install gh
$0 install go
# $0 install gh
# $0 install go
$0 install cheat-databases
$0 install imagick
$0 install neofetch
$0 install nvm
$0 install npm
# $0 install neofetch
# $0 install nvm
# $0 install npm
$0 install ntfy
$0 install z
msgr msg "Reloading configurations again..."
x-load-configs
source "$DOTFILES/config/shared.sh"
msgr yay "All done!"
;;
antigen)
@@ -86,6 +159,11 @@ function section_install
curl -sSfL git.io/antigen -o "$DOTFILES/local/bin/antigen.zsh" \
&& msg_yay "New antigen installed!"
;;
asdf)
msg "Installing asdf..."
bash "$DOTFILES/scripts/install-asdf.sh" \
&& msg_yay "asdf installed!"
;;
cargo)
msg "Installing cargo packages..."
bash "$DOTFILES/scripts/install-cargo-packages.sh" \
@@ -204,7 +282,7 @@ function section_install
esac
}
function section_brew
section_brew()
{
USAGE_PREFIX="$SCRIPT brew <command>"
@@ -252,7 +330,7 @@ function section_brew
! x-have brew && menu_section "$USAGE_PREFIX" "brew not available on this system"
}
function section_helpers
section_helpers()
{
USAGE_PREFIX="$SCRIPT helpers <command>"
MENU=(
@@ -268,21 +346,31 @@ function section_helpers
esac
}
function section_docs
section_docs()
{
USAGE_PREFIX="$SCRIPT docs <command>"
MENU=(
"all:Update all keybindings documentations"
"tmux:Update tmux keybindings documentation"
"nvim:Update nvim keybindings documentation"
"wezterm:Update wezterm keybindings documentation"
)
case "$1" in
all)
$0 docs tmux
$0 docs nvim
$0 docs wezterm
;;
tmux) bash "$DOTFILES/local/bin/x-dfm-docs-xterm-keybindings" ;;
nvim) bash "$DOTFILES/scripts/create-nvim-keymaps.sh" ;;
wezterm) bash "$DOTFILES/scripts/create-wezterm-keymaps.sh" ;;
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
esac
}
function section_dotfiles
section_dotfiles()
{
USAGE_PREFIX="$SCRIPT dotfiles <command>"
@@ -324,6 +412,9 @@ function section_dotfiles
! x-have yamlfmt && msg_err "yamlfmt not found"
;;
shfmt)
# If system doesn't have fd or shfmt installed, exit
! x-have fd && msg_err "fd not found, install with asdf"
! x-have shfmt && msg_err "shfmt not found, install with asdf"
# Format shell scripts according to following rules.
fd --full-path "$DOTFILES" -tx \
-E '*.pl' -E '*.php' -E '*.py' -E '*.zsh' -E 'plugins' -E 'fzf' -E 'dotbot' \
@@ -338,7 +429,7 @@ function section_dotfiles
esac
}
function section_check
section_check()
{
USAGE_PREFIX="$SCRIPT check <command>"
X_HOSTNAME=$(hostname)
@@ -363,7 +454,7 @@ function section_check
}
# Secret menu for visual tests
function section_tests
section_tests()
{
USAGE_PREFIX="$SCRIPT tests <command>"
@@ -392,7 +483,7 @@ function section_tests
esac
}
function usage
usage()
{
echo ""
msg_prompt "Usage: $SCRIPT <section> <command>"

View File

@@ -19,20 +19,28 @@
# Default dir to check, can be overridden in env (.bashrc, .zshrc, ...)
: "${GIT_DIRTY_DIR:=$HOME/Code}"
# If user has provided folder as a first argument, use it.
if [ "$1" != "" ]; then
GIT_DIRTY_DIR="$1"
fi
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# UTF-8 ftw
GITDIRTY="❌ "
GITCLEAN="✅ "
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[ "$VERBOSE" -eq 1 ] && echo "$1"
}
# Function to handle errors
catch()
{
echo "Error $1 occurred on $2"
}
# Function to check the git status of a directory
# $1 - directory (string)
gitdirty()
{
local d="$1"
@@ -40,13 +48,13 @@ gitdirty()
if [[ -d "$d" ]]; then
if [[ -e "$d/.ignore" ]]; then
echo -e ""
msg "Skipping ignored directory: $d"
else
# Check that $d is not '--', 'vendor', or 'node_modules'
if [[ "${d:0:2}" == "--" ]] || [[ "$d" == "vendor" ]] || [[ "$d" == "node_modules" ]]; then
echo ""
msg "Skipping excluded directory: $d"
else
cd "$d"
cd "$d" || exit
# If we have `.git` folder, check it.
if [[ -d ".git" ]]; then
@@ -60,12 +68,14 @@ gitdirty()
# If it wasn't git repository, check subdirectories.
gitdirtyrepos ./*
fi
cd - > /dev/null || exit
fi
cd .. > /dev/null
fi
fi
}
# Function to check git status for multiple directories
# $@ - directories
gitdirtyrepos()
{
for x in "$@"; do
@@ -73,10 +83,20 @@ gitdirtyrepos()
done
}
set -e
trap 'case $? in
139) echo "segfault occurred";;
11) echo "ssegfault occurred";;
esac' EXIT
# Main function
main()
{
# If user has provided folder as a first argument, use it.
if [ "${1:-}" != "" ]; then
GIT_DIRTY_DIR="$1"
fi
gitdirtyrepos "$GIT_DIRTY_DIR"
trap 'case $? in
139) echo "segfault occurred";;
11) echo "segfault occurred";;
esac' EXIT
gitdirtyrepos "$GIT_DIRTY_DIR"
}
main "$@"

View File

@@ -6,18 +6,46 @@
# Copyright 2023 Ismo Vuorinen. All Rights Reserved.
# License: MIT <https://opensource.org/license/mit/>
STARTING_PATH=${1:-$(pwd)}
set -euo pipefail
DIRS=$(find "$STARTING_PATH" -mindepth 1 -maxdepth 1 -type d)
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
for DIR in $DIRS; do
echo "-> Processing dir: $DIR"
cd "$DIR" || exit 1
if [ -d "$DIR/.git" ]; then
git fsck --no-dangling --full --no-progress
echo ""
fi
done
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[ "$VERBOSE" -eq 1 ] && echo "$1"
}
echo ""
echo "Done."
# Function to perform git fsck on a repository
# $1 - directory (string)
fsck_repo()
{
local dir=$1
msg "Processing dir: $dir"
(
cd "$dir" || exit 1
if [ -d ".git" ]; then
git fsck --no-dangling --full --no-progress
echo ""
fi
)
}
# Main function
main()
{
local starting_path=${1:-$(pwd)}
local dirs
dirs=$(find "$starting_path" -mindepth 1 -maxdepth 1 -type d)
for dir in $dirs; do
fsck_repo "$dir"
done
echo ""
echo "Done."
}
main "$@"

View File

@@ -8,7 +8,39 @@
# Copyright (c) 2023 Ismo Vuorinen. All Rights Reserved.
# License: MIT <https://opensource.org/license/mit/>
for f in */; do (cd "$f" && echo "-> $f" && git pull --rebase --autostash --prune); done
set -euo pipefail
echo "Done."
echo ""
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[ "$VERBOSE" -eq 1 ] && echo "$1"
}
# Function to update a git repository
# $1 - directory (string)
update_repo()
{
local dir=$1
(
cd "$dir" || exit
msg "Updating $dir"
git pull --rebase --autostash --prune
)
}
# Main function to update all subfolder git repositories
main()
{
for dir in */; do
update_repo "$dir"
done
echo "Done."
echo ""
}
main "$@"

View File

@@ -3,33 +3,84 @@
# Backup a folder with a timestamp
# Usage: x-backup-folder folder_to_backup [filename]
# If filename is not provided, folder_to_backup will be used
#
# Example: x-backup-folder ~/Documents/MyFolder
#
# Copyright (c) 2022 Ismo Vuorinen. All Rights Reserved.
# Licensed under the MIT license.
DIRECTORY=$1
FILENAME=$2
set -euo pipefail
if [ -z "${DIRECTORY}" ]; then
echo "DIRECTORY (first argument) is missing"
echo "Usage: $0 folder_to_backup"
exit
fi
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
if [ -z "${FILENAME}" ]; then
FILENAME=$DIRECTORY
fi
# Function to print usage information
usage()
{
echo "Usage: $0 folder_to_backup [filename]"
exit 1
}
FILENAME=$(
${FILENAME} \
| tr '/' _ \
| iconv -t ascii//TRANSLIT \
| sed -r s/[^a-zA-Z0-9]+/_/g \
| sed -r s/^_+\|-+$//g
)
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
}
TIMESTAMP=$(date "+%Y%m%d_%H%M%S")
FILENAME_TIMESTAMP="${FILENAME}_${TIMESTAMP}"
# Function to print error messages and exit
# $1 - error message (string)
msg_err()
{
echo "(!) ERROR: $1" >&2
exit 1
}
tar cvzf "${FILENAME_TIMESTAMP}.tar.gz" "${DIRECTORY}/"
# Function to sanitize the filename
# $1 - filename (string)
sanitize_filename()
{
local filename=$1
echo "$filename" | tr '/' '_' | iconv -t ascii//TRANSLIT | sed -r 's/[^a-zA-Z0-9]+/_/g' | sed -r 's/^_+|_+$//g'
}
# Function to backup the directory
# $1 - directory to backup (string)
# $2 - filename prefix (string)
backup_directory()
{
local directory=$1
local filename=$2
local sanitized_filename
sanitized_filename=$(sanitize_filename "$filename")
local timestamp
timestamp=$(date "+%Y%m%d_%H%M%S")
local filename_timestamp="${sanitized_filename}_${timestamp}"
msg "Backing up directory '$directory' to '${filename_timestamp}.tar.gz'"
tar cvzf "${filename_timestamp}.tar.gz" "${directory}/"
msg "Backup completed and saved to '${filename_timestamp}.tar.gz'"
}
# Main function
main()
{
if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
usage
fi
local directory=$1
local filename=${2:-$directory}
if [ -z "$directory" ]; then
msg_err "DIRECTORY (first argument) is missing"
fi
backup_directory "$directory" "$filename"
}
main "$@"

View File

@@ -1,43 +1,91 @@
#!/usr/bin/env bash
#
# Backup local MySQL Database tables with certain prefix.
# Backup local MySQL Database tables with a certain prefix.
# Ismo Vuorinen <https://github.com/ivuorinen> 2018
# License: MIT
SCRIPT=$(basename "$0")
PREFIX=$1
FILENAME=$2
DATABASE=$3
set -euo pipefail
: "${VERBOSE:=0}"
: "${DEFAULT_DATABASE:="wordpress"}"
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Default database
DEFAULT_DATABASE="wordpress"
if [ -z "${PREFIX}" ]; then
echo "(!) TABLE_PREFIX (first argument) is missing"
# Function to print usage information
usage()
{
echo "(>) Usage: $SCRIPT <TABLE_PREFIX> <FILENAME_PREFIX> [<DATABASE>]"
echo " * <TABLE_PREFIX> = database table prefix, e.g. 'wp_'"
echo " * <FILENAME_PREFIX> = FILENAME prefix, defaults to table prefix. Use something descriptive e.g. 'wordpress'"
echo " * <DATABASE> = [optional] Third argument DATABASE, defaults to '$DEFAULT_DATABASE'."
exit 0
fi
exit 1
}
if [ -z "${FILENAME}" ]; then
# echo "FILENAME (second argument) is missing, using PREFIX ($PREFIX)"
FILENAME=$PREFIX
fi
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
}
if [ -z "${DATABASE}" ]; then
# echo "DATABASE (third argument) is missing, using default ($DEFAULT_DATABASE)"
DATABASE=$DEFAULT_DATABASE
fi
# Function to print error messages and exit
# $1 - error message (string)
msg_err()
{
echo "(!) ERROR: $1" >&2
exit 1
}
TIMESTAMP=$(date "+%Y%m%d_%H%M%S")
FILENAME_TIMESTAMP="${DATABASE}_${FILENAME}_${TIMESTAMP}.sql"
# Function to backup MySQL tables with a certain prefix
# $1 - table prefix (string)
# $2 - filename prefix (string)
# $3 - database name (string)
backup_mysql_tables()
{
local prefix=$1
local filename=$2
local database=$3
mysqldump \
"${DATABASE}" \
"$(
echo "show tables like '${PREFIX}%';" \
| mysql "${DATABASE}" \
| sed '/Tables_in/d'
)" > "${FILENAME_TIMESTAMP}"
local timestamp
timestamp=$(date "+%Y%m%d_%H%M%S")
local filename_timestamp="${database}_${filename}_${timestamp}.sql"
msg "Backing up tables with prefix '$prefix' from database '$database' to file '$filename_timestamp'"
mysqldump \
"${database}" \
"$(
echo "show tables like '${prefix}%';" \
| mysql "${database}" \
| sed '/Tables_in/d'
)" > "${filename_timestamp}"
msg "Backup completed and saved to '$filename_timestamp'"
}
# Main function
main()
{
if [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; then
usage
fi
local prefix=$1
local filename=$2
local database=${3:-$DEFAULT_DATABASE}
if [ -z "$prefix" ]; then
msg_err "TABLE_PREFIX (first argument) is missing"
fi
if [ -z "$filename" ]; then
filename=$prefix
fi
backup_mysql_tables "$prefix" "$filename" "$database"
}
# Script name for usage information
SCRIPT=$(basename "$0")
main "$@"

View File

@@ -1,19 +1,71 @@
#!/usr/bin/env bash
#
# Adapted from https://gist.github.com/xqm32/17777d035930d622d0ff7530bfab61fd
#
set -euo pipefail
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
A_DIR="$HOME/.config/alacritty"
set_alacritty_theme() {
cp -f "$A_DIR/theme-$1.toml" "$A_DIR/theme-active.toml"
# Function to print usage information
usage()
{
echo "Usage: $0 <theme>"
echo "Available themes: (dark|night) to turn dark mode on, (day|light) to turn off"
exit 1
}
ALACRITTY_THEME=$1
if [ "$ALACRITTY_THEME" = "dark" ] || [ "$ALACRITTY_THEME" = "night" ]; then
set_alacritty_theme "night"
else
set_alacritty_theme "day"
fi
# Notify alacritty about the changes
touch "$A_DIR/alacritty.toml"
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
return 0
}
# Function to set the alacritty theme
# $1 - theme (string)
set_alacritty_theme()
{
local theme=$1
local theme_file="$A_DIR/theme-$theme.toml"
msg "Setting alacritty theme to $theme ($theme_file)"
cp -f "$theme_file" "$A_DIR/theme-active.toml"
return 0
}
# Function to notify alacritty about the changes
notify_alacritty()
{
msg "Notifying alacritty about the changes"
touch "$A_DIR/alacritty.toml"
return 0
}
# Main function
main()
{
if [ "$#" -ne 1 ]; then
usage
fi
local alacritty_theme=$1
case "$alacritty_theme" in
day | light)
set_alacritty_theme "day"
;;
*)
set_alacritty_theme "night"
;;
esac
notify_alacritty
msg "Theme set successfully!"
exit 0
}
main "$@"

View File

@@ -1,19 +1,41 @@
#!/usr/bin/env bash
#
# Check git repo's files .gitattributes and are all of them mapped.
# Check git repo's files .gitattributes and ensure all of them are mapped.
# Ismo Vuorinen <https://github.com/ivuorinen> 2022
#
source "${DOTFILES}/config/shared.sh"
if ! command -v git &> /dev/null; then
echo "git could not be found, please install it first"
exit 1
fi
set -euo pipefail
missing_attributes=$(git ls-files | git check-attr -a --stdin | grep "text: auto")
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
if [[ "$missing_attributes" ]]; then
echo ".gitattributes rule missing for the following files:"
echo "$missing_attributes"
else
echo "All files have a corresponding rule in .gitattributes"
fi
# Function to check if git is installed
check_git_installed()
{
if ! command -v git &> /dev/null; then
msg_err "git could not be found, please install it first"
fi
}
# Function to check for missing .gitattributes
check_gitattributes()
{
local missing_attributes
missing_attributes=$(git ls-files | git check-attr -a --stdin | grep "text: auto" || true)
if [[ -n "$missing_attributes" ]]; then
echo ".gitattributes rule missing for the following files:"
echo "$missing_attributes"
else
echo "All files have a corresponding rule in .gitattributes"
fi
}
# Main function
main()
{
check_git_installed
check_gitattributes
}
main "$@"

View File

@@ -4,13 +4,49 @@
# Copyright (c) 2023 Ismo Vuorinen. All Rights Reserved.
# Licensed under MIT License. http://www.opensource.org/licenses/mit-license.
dir="$1"
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
[ $# -eq 0 ] && {
# Function to print usage information
usage()
{
echo "Usage: $0 full/path/to/dir/to/create"
exit 1
}
if [ ! -d "$dir" ]; then
mkdir -p "$dir" && exit 0
fi
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
return 0
}
# Function to create a directory if it doesn't exist
# $1 - directory to create (string)
create_directory()
{
local dir=$1
if [ ! -d "$dir" ]; then
msg "Creating directory: $dir"
mkdir -p "$dir"
msg "Directory created: $dir"
else
msg "Directory already exists: $dir"
fi
return 0
}
# Main function
main()
{
if [ "$#" -ne 1 ]; then
usage
fi
create_directory "$1"
exit 0
}
main "$@"

View File

@@ -2,24 +2,48 @@
#
# x-xterm-update-keybindings
# Updates $HOME/.dotfiles/docs/tmux.md with my keybindings.
# Usage: x-xterm-update-keybindings
# Author: Ismo Vuorinen <https://github.com/ivuorinen> 2024
# shellcheck source=./../../config/shared.sh
source "${DOTFILES}/config/shared.sh"
# shellcheck source=./../../scripts/shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
x-have tmux || {
msg_err "tmux not found" && exit 0
# Check if tmux is installed
check_tmux_installed()
{
if ! x-have tmux; then
msg_err "tmux not found"
fi
}
TMUX_KEYBINDINGS_DOCS="$DOTFILES/docs/tmux-keybindings.md"
# Generate tmux keybindings documentation
generate_tmux_keybindings()
{
local tmux_keybindings_docs="$1"
CB="\n\`\`\`\n"
KB=$(tmux lsk -Tprefix -N | sed -e 's/^/ /;')
H="# tmux keybindings\n"
L="\nLeader: \`<ctrl><space>\`\n"
local cb="\n\`\`\`\n"
local kb
kb=$(tmux lsk -Tprefix -N | sed -e 's/^/ /;')
local h="# tmux keybindings\n"
local l="\nLeader: \`<ctrl><space>\`\n"
# Generalize expanded $HOME to "$HOME"
KB="${KB//$HOME/\$HOME}"
# Generalize expanded $HOME to "$HOME"
kb="${kb//$HOME/\$HOME}"
msg "Outputting tmux keybindings to $TMUX_KEYBINDINGS_DOCS"
echo -e "${H}${L}${CB}${KB}${CB}" > "$TMUX_KEYBINDINGS_DOCS"
msg_done "Done!"
msg "Outputting tmux keybindings to $tmux_keybindings_docs"
echo -e "${h}${l}${cb}${kb}${cb}" > "$tmux_keybindings_docs"
msg "Done!"
}
# Main function
main()
{
check_tmux_installed
local tmux_keybindings_docs="$DOTFILES/docs/tmux-keybindings.md"
generate_tmux_keybindings "$tmux_keybindings_docs"
}
main "$@"

View File

@@ -1,17 +1,102 @@
#!/usr/bin/env bash
#
# Fetch the latest release version of a GitHub repository in tar.gz format (e.g. v1.0.0.tar.gz)
# Usage: x-gh-get-latest-release-targ <repo> [--get]
# Author: Ismo Vuorinen <https://github.com/ivuorinen> 2024
REPO=$1
set -euo pipefail
if [ -z "$REPO" ]; then
echo "Usage: $0 <repo> (e.g. ivuorinen/dotfiles)"
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Function to print usage information
usage()
{
echo "Usage: $0 <github repo> [--get] (e.g. ivuorinen/dotfiles)"
echo " --get: Download and extract the tarball"
exit 1
fi
}
LOCATION=$(curl -s "https://api.github.com/repos/${REPO}/releases/latest" \
| sed -Ene '/^[[:blank:]]+"tarball_url":[[:blank:]]"(https:[^"]+)",/s//\1/p')
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
return 0
}
echo "Downloading and extracting from: $LOCATION"
# Function to fetch the tarball URL of the latest release from GitHub
# $1 - GitHub repository (string)
get_latest_tarball_url()
{
local repo=$1
curl --location --silent "$LOCATION" | tar --extract --gzip --file=-
local tarball_url
tarball_url=$(curl -s "https://api.github.com/repos/${repo}/releases/latest" \
| sed -Ene '/^[[:blank:]]+"tarball_url":[[:blank:]]"(https:[^"]+)",/s//\1/p')
if [ -z "$tarball_url" ]; then
echo "(!) Failed to fetch the tarball URL for repository: $repo"
exit 1
fi
echo "$tarball_url"
return 0
}
# Function to download and extract the tarball
# $1 - tarball URL (string)
download_and_extract()
{
local url="$1"
msg "Downloading and extracting from: $url"
curl --location --silent "$url" | tar --extract --gzip --file=- || {
echo "(!) Failed to download or extract the tarball."
exit 1
}
return 0
}
# Main function
main()
{
if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
usage
fi
local repo=$1
local get_tarball=false
if [ "$#" -eq 2 ]; then
# Check if the first or second argument is --get
if [ "$1" == "--get" ] || [ "$2" == "--get" ]; then
get_tarball=true
else
usage
fi
fi
# Check if the first argument is --get
if [ "$1" == "--get" ]; then
repo="$2"
fi
msg "Fetching the tarball URL for the latest release of repository: $repo"
local location
location=$(get_latest_tarball_url "$repo")
if $get_tarball; then
download_and_extract "$location"
else
echo "$location"
fi
return 0
}
main "$@"
# vim: set ts=2 sw=2 ft=sh et:

View File

@@ -1,18 +1,68 @@
#!/usr/bin/env bash
#
# Get latest release version from GitHub
# Usage: x-gh-get-latest-version <repo>
# Author: Ismo Vuorinen <https://github.com/ivuorinen> 2024
REPO=$1
set -euo pipefail
if [ -z "$REPO" ]; then
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Function to print usage information
usage()
{
echo "Usage: $0 <repo> (e.g. ivuorinen/dotfiles)"
exit 1
fi
}
VERSION=$(
curl -s "https://api.github.com/repos/${REPO}/releases/latest" \
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
return 0
}
# Function to fetch the latest release version from GitHub
# $1 - GitHub repository (string)
get_latest_release()
{
local repo=$1
local version
version=$(curl -s "https://api.github.com/repos/${repo}/releases/latest" \
| grep "tag_name" \
| awk '{print substr($2, 2, length($2)-3)}'
)
| awk -F '"' '{print $4}')
echo "$VERSION"
if [ -z "$version" ]; then
msg "Failed to fetch the latest release version for repository: $repo"
echo ""
exit 1
fi
echo "$version"
return 0
}
# Main function
main()
{
if [ "$#" -ne 1 ]; then
usage
fi
local repo=$1
msg "Fetching the latest release version for repository: $repo"
local version
version=$(get_latest_release "$repo")
echo "$version"
return 0
}
main "$@"
# vim: set ts=2 sw=2 ft=sh et:

View File

@@ -1,9 +1,47 @@
#!/usr/bin/env bash
# Returns which status
which "$1" >&/dev/null
if [ $? -eq 0 ]; then
exit 0
else
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Function to print usage information
usage()
{
echo "Usage: $0 <command>"
exit 1
fi
}
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
return 0
}
# Function to check if a command exists
# $1 - command to check (string)
check_command()
{
local cmd=$1
if command -v "$cmd" > /dev/null 2>&1; then
msg "(*) '$cmd' is available on the system."
exit 0
else
msg "(!) '$cmd' is NOT available on the system."
exit 1
fi
}
# Main function
main()
{
if [ "$#" -ne 1 ]; then
usage
fi
check_command "$1"
}
main "$@"

View File

@@ -2,76 +2,96 @@
# Load our configuration files
# Copyright (c) 2023 Ismo Vuorinen. All Rights Reserved.
set -euo pipefail
DOTFILES="${DOTFILES:-$HOME/.dotfiles}"
# Set verbosity with VERBOSE=1 x-load-configs
VERBOSE="${VERBOSE:=0}"
source "$DOTFILES/config/shared.sh"
[ "$VERBOSE" = "1" ] && {
set -x
# Enable verbosity with VERBOSE=1 x-load-configs
VERBOSE="${VERBOSE:-0}"
# Enable debugging with DEBUG=1 x-load-configs
DEBUG="${DEBUG:-0}"
# Get the hostname
CONFIG_HOST="$(hostname -s)"
# Enable debugging if requested
[ "$DEBUG" = "1" ] && set -x
CONFIG_PATH="${HOME}/.config"
[ -d "$DOTFILES" ] || {
msg_err "Error: DOTFILES is not set or $DOTFILES does not exist"
}
CONFIG_PATH="$DOTFILES/config"
# Function to print messages if VERBOSE is enabled
# $1 - message type (string)
# $2 - message content (string)
config_msg()
{
# if $1 is empty, return
[ -z "$1" ] && return
[ -z "$2" ] && $2=""
# Load the shell dotfiles, and then some:
HOST="$(hostname -s)"
[ "$VERBOSE" = "1" ] && {
echo "x-load-configs: VERBOSE=1"
echo "x-load-configs: HOST: $HOST"
local msg_type="$1"
local msg_content="$2"
[[ "$VERBOSE" -eq 1 ]] && printf 'x-load-configs: %s %s\n' "$msg_type" "$msg_content"
return 0
}
configFile()
# Function to get the full path of a config file
# $1 - filename (string)
config_file_path()
{
echo "$CONFIG_PATH/$1"
}
configMsg()
# Function to source configuration files
source_config()
{
printf 'x-load-configs: %s %s\n' "$1" "$2"
local config_file=$1
if [ -f "$config_file" ]; then
eval "$config_file"
config_msg "Sourced" "$config_file"
else
msg "Config file $config_file not found"
fi
return 0
}
loadConfigFiles()
# Function to load a configuration file
# $1 - base config file name (string)
load_config_files()
{
CONFIG_FILE=$1
SECRET_FILE=$CONFIG_FILE-secret
HOST_FILE=$CONFIG_FILE-$HOST
SECRET_HOST=$HOST_FILE-secret
local config_file="$1"
local secret_file="${config_file}-secret"
local host_file="${config_file}-${CONFIG_HOST}"
local secret_host_file="${host_file}-secret"
[ "$VERBOSE" = "1" ] && configMsg "?" "$CONFIG_FILE"
# global (exports|alias|functions) FILENAME for all hosts
# shellcheck source=../config/exports
[ -r "$CONFIG_FILE" ] && {
source "$CONFIG_FILE" && [ "$VERBOSE" = "1" ] && configMsg "Found" "$CONFIG_FILE"
config_msg "Looking for" "$config_file"
[ -r "$config_file" ] && {
source_config "$config_file"
}
# global secret FILENAME, git ignored
# shellcheck source=../config/exports-secret
[ "$VERBOSE" = "1" ] && configMsg "?" "$SECRET_FILE"
[ -r "$SECRET_FILE" ] && {
source "$SECRET_FILE" && [ "$VERBOSE" = "1" ] && configMsg "Found" "$SECRET_FILE"
config_msg "Looking for" "$secret_file"
[ -r "$secret_file" ] && {
source_config "$secret_file"
}
# host specific (exports|alias|functions) FILENAME
# shellcheck source=../config/exports
[ "$VERBOSE" = "1" ] && configMsg "?" "$HOST_FILE"
[ -r "$HOST_FILE" ] && {
source "$HOST_FILE" && [ "$VERBOSE" = "1" ] && configMsg "Found" "$HOST_FILE"
config_msg "Looking for" "$host_file"
[ -r "$host_file" ] && {
source_config "$host_file"
}
# host specific (exports|alias|functions) FILENAME, git ignored
# shellcheck source=../config/exports
[ "$VERBOSE" = "1" ] && configMsg "?" "$SECRET_HOST"
[ -r "$SECRET_HOST" ] && {
source "$SECRET_HOST" \
&& [ "$VERBOSE" = "1" ] && configMsg "Found" "$SECRET_HOST"
config_msg "Looking for" "$secret_host_file"
[ -r "$secret_host_file" ] && {
source_config "$secret_host_file"
}
return 0
}
FILE_EXPORTS=$(configFile "exports")
FILE_FUNCTIONS=$(configFile "functions")
FILE_ALIAS=$(configFile "alias")
loadConfigFiles "$FILE_EXPORTS"
loadConfigFiles "$FILE_FUNCTIONS"
loadConfigFiles "$FILE_ALIAS"
config_msg "VERBOSE=1" "Verbose mode enabled"
config_msg "HOST" "$CONFIG_HOST"
load_config_files "$(config_file_path "exports")"
load_config_files "$(config_file_path "alias")"
exit 0

View File

@@ -1,4 +1,50 @@
#!/usr/bin/env bash
#
# Create a directory and cd into it
# Usage: mkcd <dir>
mkdir -p "$@" && cd "$@" || exit
set -euo pipefail
# Set verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Function to print usage information
usage()
{
echo "Usage: $0 <dir>"
exit 1
}
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
}
# Function to create a directory and cd into it
# $1 - directory to create and cd into (string)
mkcd()
{
local dir=$1
mkdir -p "$dir" && msg "Directory $dir created"
cd "$dir" || {
msg "Failed to cd into $dir"
exit 1
}
msg "Changed directory to $dir"
}
# Main function
main()
{
if [ "$#" -ne 1 ]; then
usage
fi
mkcd "$1"
}
main "$@"

View File

@@ -6,16 +6,34 @@
# Modified by: Ismo Vuorinen <https://github.com/ivuorinen> 2020
# Originally from: https://www.commandlinefu.com/commands/view/8951
# Original author: https://www.commandlinefu.com/commands/by/wickedcpj
#
echo 'User: Command: PID: Port:'
echo '========================================================='
lsof -i 4 -P -n +c 0 \
| grep -i 'listen' \
| awk '{print $3, $1, $2, $9}' \
| sed 's/ [a-z0-9\.\*]*:/ /' \
| sort -k 3 -n \
| xargs printf '%-15s %-25s %-8s %-5s\n' \
| uniq
set -euo pipefail
echo ""
# Function to print the header
print_header()
{
echo 'User: Command: PID: Port:'
echo '========================================================='
}
# Function to list open ports
list_open_ports()
{
lsof -i 4 -P -n +c 0 \
| grep -i 'listen' \
| awk '{print $3, $1, $2, $9}' \
| sed 's/ [a-z0-9\.\*]*:/ /' \
| sort -k 3 -n \
| xargs printf '%-15s %-25s %-8s %-5s\n' \
| uniq
}
# Main function
main()
{
print_header
list_open_ports
echo ""
}
main "$@"

View File

@@ -3,5 +3,38 @@
# Add a directory to the beginning of the PATH if it's not already there.
# Usage: x-path-append <dir>
x-path-remove "$1"
export PATH="${PATH:+"$PATH:"}$1"
# Set verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
}
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <dir>"
exit 1
fi
dir="$1"
if echo "$PATH" | grep -qE "(^|:)$dir($|:)"; then
export PATH=$(echo -n "$PATH" | awk -v RS=: -v ORS=: "\$0 != \"$dir\"" | sed 's/:$//')
msg "Directory $dir has been removed from PATH"
else
msg "Directory $dir is not in PATH"
fi
if [ ! -d "$dir" ]; then
msg "(?) Directory $dir does not exist"
exit 0
fi
if echo "$PATH" | grep -qE "(^|:)$dir($|:)"; then
msg "(!) Directory $dir is already in PATH"
else
export PATH="${PATH:+"$PATH:"}$dir"
msg "(!) Directory $dir has been added to the end of PATH"
fi

View File

@@ -3,4 +3,31 @@
# Add a directory to the front of the PATH if it exists and is not already there
# Usage: x-path-prepend <dir>
export PATH="$1${PATH:+":$PATH"}"
# Set verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
}
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <dir>"
exit 1
fi
dir="$1"
if [ ! -d "$dir" ]; then
msg "(?) Directory $dir does not exist"
exit 0
fi
if echo "$PATH" | grep -qE "(^|:)$dir($|:)"; then
msg "(!) Directory $dir is already in PATH"
else
export PATH="$dir${PATH:+":$PATH"}"
msg "(!) Directory $dir has been added to the front of PATH"
fi

View File

@@ -3,4 +3,27 @@
# Remove a directory from the PATH
# Usage: x-path-remove <dir>
export PATH=$(echo -n "$PATH" | awk -v RS=: -v ORS=: "\$0 != \"$1\"" | sed 's/:$//')
# Set verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
}
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <dir>"
exit 1
fi
dir="$1"
if ! echo "$PATH" | grep -qE "(^|:)$dir($|:)"; then
msg "(?) Directory $dir is not in PATH"
exit 0
fi
export PATH=$(echo -n "$PATH" | awk -v RS=: -v ORS=: "\$0 != \"$dir\"" | sed 's/:$//')
msg "(!) Directory $dir has been removed from PATH"

View File

@@ -1,5 +1,15 @@
#!/usr/bin/env php
<?php
/**
* Quota usage
* Show quota usage
*
* @package x-quota-usage
* @version 1.0.0
* @link https://github.com/ivuorinen/dotfiles/blob/main/local/bin/x-quota-usage.php
* @license MIT
* @author Ismo Vuorinen <https://github.com/ivuorinen>
*/
error_reporting(E_ALL);
$debug = false;

View File

@@ -14,168 +14,119 @@
# pkill (coreutils)
#
# 2021-2022 : João F. © BeyondMagic <koetemagie@gmail.com>
# 2024- : Ismo Vuorinen <https://github.com/ivuorinen>
# 1. Variables.
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Variables
frame_rate=30
name='camera'
path_recordings="$HOME/.cache/recording"
replace_id="$HOME/.cache/recording.id"
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
# A. Indepedent of variables.
frame_rate=30
time=10
name='カメラ'
# B. Depedent of variables.
path_recordings="$HOME/.cache/recording"
icons="$HOME/.local/share/icons"
replace_id="$HOME/.cache/recording.id"
[ "$VERBOSE" -eq 1 ] && echo "$1"
}
# 2. Functions to minise code.
#{
# I.
# Notify function
notify()
{
notify-call \
--replace-file "$replace_id" \
"$@"
notify-call --replace-file "$replace_id" "$@"
}
# II.
# Stop recording function
stop()
{
# A.
#pkill -INT -f 'ffmpeg -f alsa -ac 1 -i pulse -f x11grab -r 30 -s '
giph --stop
# C.
eww update record_menu=false
}
#}
# #. Kill previous giph process.
if [ "$(pgrep -f 'bash.+giph')" ]; then
# A. Let the user decide.
next=$(notify \
-d 'echo yes' \
"$name" \
'Do you want to stop current recording?')
# A. End with previous giph session.
[ "$next" = 'yes' ] && stop
# B. Just exit cleanly.
exit 0
fi
# 2. To see if current fyletype is supported.
{
case "$1" in
# A. Supported.
'mkv' | 'gif' | 'webm' | 'mp4') ;;
# B. Not supported.
*)
# I. Let the user decide.
format=$(notify \
-o 'echo mkv:MKV' \
-o 'echo webm:WEBM' \
-o 'echo mp4:MP4' \
-o 'echo gif:GIF' \
"$name" \
'What is the filetype you want to record?')
# II. Execute itself.
exec $0 $format $2
;;
esac
}
# 3. Whether to choose fullscreen recording or sizeable one.
# Function to check for required applications
check_dependencies()
{
if [ "$2" = 'fullscreen' ]; then
# A. From <WxH+X+Y> monitor.
geometry="$(xrandr | awk '/ primary/{print $4}')"
elif [ "$2" = 'set' ]; then
# A. To get size & position of the recording set.
geometry="$(slop -f "%wx%h+%x+%y")"
else
# I. Let the user decide.
next=$(notify \
-o 'echo fullscreen:The whole_screen!' \
-o 'echo set:Let me set.' \
"$name" \
'How exactly do you want to record?')
# II. Execute itself.
exec $0 $1 $next
for cmd in ffmpeg notify-send.sh pkill eww giph slop; do
if ! command -v "$cmd" &> /dev/null; then
echo "Required command '$cmd' not found. Please install it before running this script."
exit 1
fi
done
}
# Function to kill previous giph process if running
kill_previous_process()
{
if pgrep -f 'bash.+giph' > /dev/null; then
next=$(notify -d 'echo yes' "$name" 'Do you want to stop current recording?')
[ "$next" = 'yes' ] && stop
exit 0
fi
}
# 4. Start recording.
# Function to check if the current file type is supported
check_file_type()
{
case "$1" in
'mkv' | 'gif' | 'webm' | 'mp4') ;;
*)
format=$(
notify \
-o 'echo mkv:MKV' \
-o 'echo webm:WEBM' \
-o 'echo mp4:MP4' \
-o 'echo gif:GIF' \
"$name" \
'What is the filetype you want to record?'
)
exec "$0" "$format" "$2"
;;
esac
}
# Function to determine recording scope
determine_scope()
{
if [ "$2" = 'fullscreen' ]; then
geometry=$(xrandr | awk '/ primary/{print $4}')
elif [ "$2" = 'set' ]; then
geometry=$(slop -f "%wx%h+%x+%y")
else
next=$(notify -o 'echo fullscreen:The whole_screen!' -o 'echo set:Let me set.' "$name" 'How exactly do you want to record?')
exec "$0" "$1" "$next"
fi
}
# Function to start recording
start_recording()
{
mkdir -p "$path_recordings"
name_file="$path_recordings/$2-$(date +'%a_%b_%d_%H:%M:%S').$1"
# A. Timer.
#for i in {1..$time}; do
# # I.
# notify "Starting in $i seconds."
# # II. Wait for next second.
# sleep ${i}s
#done
# B. Send a sign of recording to lemonbar so that you know it is being recorded.
eww update record_menu=true
# C. Start recording.
giph \
-g "$geometry" \
-f "$frame_rate" \
"$name_file"
giph -g "$geometry" -f "$frame_rate" "$name_file"
# D.
stop
# E.
responder="$(notify \
-o 'echo open:See file?' \
-o 'echo none:Hell no' \
"$name" \
'Recording has finished.')"
responder=$(notify -o 'echo open:See file?' -o 'echo none:Hell no' "$name" 'Recording has finished.')
# F. For action-driven response.
if [ "$responder" = 'open' ]; then
# I.
nohup \
gtk-launch \
"$(xdg-mime query default inode/directory)" \
"$path_recordings/" \
> /dev/null 2>&1 &
nohup gtk-launch "$(xdg-mime query default inode/directory)" "$path_recordings/" > /dev/null 2>&1 &
fi
rm -f "$replace_id"
}
rm -f "$replace_id"
main()
{
check_dependencies
kill_previous_process "$@"
check_file_type "$@"
determine_scope "$@"
start_recording "$@"
}
main "$@"

View File

@@ -1,50 +1,71 @@
#!/usr/bin/env bash
# Check which php versions are installed with brew, and create aliases for each installation.
# Check which PHP versions are installed with brew, and create aliases for each installation.
# Copyright (c) 2023 Ismo Vuorinen. All Rights Reserved.
set -euo pipefail
# Set verbosity with VERBOSE=1 x-load-configs
VERBOSE="${VERBOSE:=0}"
# Set verbosity with VERBOSE=1 x-set-php-aliases
VERBOSE="${VERBOSE:-0}"
[ "$VERBOSE" = "2" ] && {
set -x
}
# Enable debugging if verbosity is set to 2
[ "$VERBOSE" = "2" ] && set -x
! x-have brew && {
# Check if brew is installed, if not exit.
if ! command -v brew &> /dev/null; then
exit 0
fi
# Function to read installed PHP versions using brew
get_php_versions()
{
local versions=()
while IFS="" read -r line; do
versions+=("$line")
done < <(bkt -- brew list | grep '^php')
echo "${versions[@]}"
}
# Get installed php versions from brew and setup aliases
php_versions=()
while IFS="" read -r line; do php_versions+=("$line"); done < <(bkt -- brew list | grep '^php')
# Function to create aliases for each PHP version
create_aliases()
{
local php_versions=("$@")
local php_error_reporting='-d error_reporting=22527'
php_error_reporting='-d error_reporting=22527'
for version in "${php_versions[@]}"; do
[ "$VERBOSE" = "1" ] && echo "Setting aliases for $version"
for version in "${php_versions[@]}"; do
[ "$VERBOSE" = "1" ] && echo "Setting aliases for $version"
# drop the dot from version (8.0 -> 80)
php_abbr="${version//\./}"
# replace "php@" with "p" so "php@80" becomes "p80"
php_alias="${php_abbr//php@/p}"
# Drop the dot from version (e.g., 8.0 -> 80)
local php_abbr="${version//\./}"
# Replace "php@" with "p" so "php@80" becomes "p80"
local php_alias="${php_abbr//php@/p}"
# Fetch the exec path once
php_exec="$HOMEBREW_PREFIX/opt/$version/bin/php"
# Fetch the exec path once
local php_exec="$HOMEBREW_PREFIX/opt/$version/bin/php"
[ -f "$php_exec" ] && {
[ "$VERBOSE" = "1" ] && echo "-> php_exec $php_exec"
if [ -f "$php_exec" ]; then
[ "$VERBOSE" = "1" ] && echo "-> php_exec $php_exec"
# Raw PHP without error_reporting flag.
# shellcheck disable=SC2139
alias "${php_alias}"r="$php_exec"
# PHP with error_reporting flag.
# shellcheck disable=SC2139,SC2140
alias "$php_alias"="$php_exec $php_error_reporting"
# Local PHP Server.
# shellcheck disable=SC2139,SC2140
alias "${php_alias}s"="$php_exec -S localhost:9000"
# Use composer with specific PHP and error_reporting flag on.
# shellcheck disable=SC2139,SC2140
alias "${php_alias}c"="$php_exec $php_error_reporting $(which composer)"
}
done
# Raw PHP without error_reporting flag.
alias "${php_alias}r"="$php_exec"
# PHP with error_reporting flag.
alias "$php_alias"="$php_exec $php_error_reporting"
# Local PHP Server.
alias "${php_alias}s"="$php_exec -S localhost:9000"
# Use composer with specific PHP and error_reporting flag on.
alias "${php_alias}c"="$php_exec $php_error_reporting $(which composer)"
fi
done
}
# Main function
main()
{
local php_versions
php_versions=($(get_php_versions))
create_aliases "${php_versions[@]}"
}
main "$@"

View File

@@ -6,47 +6,73 @@
# Ismo Vuorinen <https://github.com/ivuorinen> 2023
# MIT License
set -euo pipefail
# ENV Variables
: "${VERBOSE:=0}" # VERBOSE=1 x-sha256sum-matcher file1 file2
file_1="$1"
file_2="$2"
# return sha256sum for file
# Return sha256sum for file
# $1 - filename (string)
get_sha256sum()
{
sha256sum "$1" | head -c 64
}
[ $# -eq 0 ] && {
echo "Usage: $0 file1.sh file2.sh" && exit 1
}
# Print message if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
}
# Print error message and exit
# $1 - error message (string)
error()
{
msg "(!) ERROR: $1" && exit 1
msg "(!) ERROR: $1"
exit 1
}
if [ ! -f "$file_1" ]; then
error "File 1 does not exist: $file_1"
fi
# Validate input arguments
validate_inputs()
{
if [ "$#" -ne 2 ]; then
echo "Usage: $0 file1 file2"
exit 1
fi
}
if [ ! -f "$file_2" ]; then
error "File 2 does not exist: $file_2"
fi
# Check if file exists
# $1 - filename (string)
check_file_exists()
{
local filename=$1
if [ ! -f "$filename" ]; then
error "File does not exist: $filename"
fi
}
file_1_hash=$(get_sha256sum "$file_1")
file_2_hash=$(get_sha256sum "$file_2")
# Main function
main()
{
local file_1=$1
local file_2=$2
if [ "$file_1_hash" != "$file_2_hash" ]; then
error "Files do not match"
else
msg "(*) Success: Files do match"
exit 0
fi
validate_inputs "$file_1" "$file_2"
check_file_exists "$file_1"
check_file_exists "$file_2"
local file_1_hash
local file_2_hash
file_1_hash=$(get_sha256sum "$file_1")
file_2_hash=$(get_sha256sum "$file_2")
if [ "$file_1_hash" != "$file_2_hash" ]; then
error "Files do not match"
else
msg "(*) Success: Files do match"
fi
}
main "$@"

View File

@@ -1,39 +1,69 @@
#!/usr/bin/env bash
# Generate thumbnails using magick
# Generate thumbnails using ImageMagick (magick)
# https://imagemagick.org/script/download.php
#
# Defaults to current directory creating thumbs with 1000x1000
# images with 200px white borders around the original image.
# Defaults to current directory creating thumbnails with 1000x1000
# dimensions and 200px white borders around the original image.
#
# Defaults can be overridden with ENV variables like this:
# $ THMB_BACKGROUND=black x-thumbgen ~/images/
#
# Created by: Ismo Vuorinen <https://github.com/ivuorinen> 2015
: "${THMB_SOURCE:=$1}"
set -euo pipefail
# Default values
: "${THMB_SOURCE:=${1:-}}"
: "${THMB_BACKGROUND:=white}"
: "${THMB_RESIZE:=800x800}"
: "${THMB_EXTENT:=1000x1000}"
[ $# -eq 0 ] && {
# Print usage information
usage()
{
echo "Usage: $0 /full/path/to/image/folder"
exit 1
}
if [ "$THMB_SOURCE" == "" ] || [ ! -d "$THMB_SOURCE" ]; then
THMB_SOURCE=$(pwd)
fi
# Check if ImageMagick is installed
check_magick_installed()
{
if ! command -v magick &> /dev/null; then
echo "magick not found in PATH, https://imagemagick.org/script/download.php"
exit 1
fi
}
if command -v magick &> /dev/null; then
# Generate thumbnails
generate_thumbnails()
{
local source=$1
magick \
"$THMB_SOURCE/*" \
"${source}/*" \
-resize "$THMB_RESIZE" \
-background "$THMB_BACKGROUND" \
-gravity center \
-extent "$THMB_EXTENT" \
-set filename:fname '%t_thumb.%e' +adjoin '%[filename:fname]'
}
else
echo "magick not found in PATH, https://imagemagick.org/script/download.php"
fi
# Main function
main()
{
# Validate input
if [ -z "$THMB_SOURCE" ]; then
usage
fi
# Check if the source directory is valid
if [ ! -d "$THMB_SOURCE" ]; then
echo "Invalid directory: $THMB_SOURCE"
exit 1
fi
check_magick_installed
generate_thumbnails "$THMB_SOURCE"
}
main "$@"

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
##
# This script contains helper for sha256 validating your downloads
#
# This script contains a helper for sha256 validating your downloads
#
# Source: https://gist.github.com/onnimonni/b49779ebc96216771a6be3de46449fa1
# Author: Onni Hakala
@@ -9,44 +9,60 @@
# Updated by Ismo Vuorinen <https://github.com/ivuorinen> 2022
##
if ! command -v sha256 &> /dev/null; then
echo "git could not be found, please install it first"
exit
fi
set -euo pipefail
# Stop program and give error message
# $1 - error message (string)
function error
error()
{
echo "(!) ERROR: $1"
echo "(!) ERROR: $1" >&2
exit 1
}
# return sha256sum for file
# Check for sha256sum command
if ! command -v sha256sum &> /dev/null; then
error "sha256sum could not be found, please install it first"
fi
# Return sha256sum for file
# $1 - filename (string)
function get_sha256sum
get_sha256sum()
{
sha256sum "$1" | head -c 64
}
# Good variable names pls
filename=$1
file_hash=$2
# Validate input arguments
validate_inputs()
{
if [ -z "${filename:-}" ]; then
error "You need to provide filename as the first parameter"
fi
# Check input
if [ -z "$filename" ]; then
error "You need to provide filename in first parameter"
fi
if [ -z "${file_hash:-}" ]; then
error "You need to provide sha256sum as the second parameter"
fi
}
if [ -z "$file_hash" ]; then
error "You need to provide sha256sum in second parameter"
fi
# Main validation logic
validate_file()
{
if [ ! -f "$filename" ]; then
error "File $filename doesn't exist"
elif [ "$(get_sha256sum "$filename")" = "$file_hash" ]; then
echo "(*) Success: $filename matches provided sha256sum"
else
error "$filename doesn't match provided sha256sum"
fi
}
# Check if the file is valid
if [ ! -f "$filename" ]; then
error "File $filename doesn't exist"
elif [ "$(get_sha256sum "$filename")" = "$file_hash" ]; then
echo "(*) Success: $filename matches provided sha256sum"
else
error "$filename doesn't match provided sha256sum"
fi
# Main function
main()
{
filename=$1
file_hash=$2
validate_inputs
validate_file
}
main "$@"

View File

@@ -10,23 +10,31 @@
# ./when-down 1.2.3.4 ssh 1.2.3.4
#
#
# Ensure we received the correct number of arguments.
#
if [ $# -lt 2 ]; then
# Ensure we received the correct number of arguments.
if [ "$#" -lt 2 ]; then
echo "Usage: $0 HOST COMMAND..."
exit 1
fi
HOST=$1
wait_for_host_down()
{
local host=$1
echo "Waiting for $HOST to get down..."
echo "Waiting for $host to go down..."
true
while [ $? -ne 1 ]; do
ping -c 1 -W 1 "$HOST" > /dev/null
done
while ping -c 1 -W 1 "$host" > /dev/null 2>&1; do
sleep 1
done
}
shift
main()
{
local host=$1
shift
"$@"
wait_for_host_down "$host"
"$@"
}
main "$@"

View File

@@ -14,32 +14,46 @@
# ./when-up ssh 1.2.3.4
#
#
# Ensure we received the correct number of arguments.
#
if [ $# -lt 2 ]; then
# Ensure we received the correct number of arguments.
if [ "$#" -lt 2 ]; then
echo "Usage: $0 HOST COMMAND..."
exit 1
fi
if [ "$1" = "ssh" ]; then
HOST=$2
else
HOST=$1
fi
get_host()
{
if [ "$1" = "ssh" ]; then
echo "$2"
else
echo "$1"
fi
}
echo "Waiting for $HOST to come online..."
wait_for_host()
{
local host=$1
ping -c 1 -W 1 "$HOST" > /dev/null
while [ $? -ne 0 ]; do
sleep 1
ping -c 1 -W 1 "$HOST" > /dev/null
done
echo "Waiting for $host to come online..."
# By the time we reach here the ping-command has completed successfully
# so we can launch the command we were given - along with any arguments.
if [ "$1" != "ssh" ]; then
shift
fi
while ! ping -c 1 -W 1 "$host" > /dev/null 2>&1; do
sleep 1
done
}
"$@"
main()
{
local host
host=$(get_host "$@")
wait_for_host "$host"
if [ "$1" = "ssh" ]; then
shift 1
else
shift
fi
"$@"
}
main "$@"

View File

@@ -28,7 +28,8 @@
},
"homepage": "https://github.com/ivuorinen/dotfiles#readme",
"devDependencies": {
"@ivuorinen/base-configs": "^1.1.0"
"@ivuorinen/base-configs": "^2.0.0",
"prettier-plugin-sh": "^0.14.0"
},
"packageManager": "yarn@1.22.22"
}

View File

@@ -1,23 +1,28 @@
#!/usr/bin/env bash
# Create file containing key mappings for Neovim
# Usage: ./create-nvim-keymaps.sh
source "$HOME/.dotfiles/scripts/shared.sh"
source "$HOME/.dotfiles/config/exports"
source "$HOME/.dotfiles/config/alias"
source "$HOME/.dotfiles/config/functions"
#
# shellcheck source=shared.sh
source "${DOTFILES}/config/shared.sh"
DEST="$HOME/.dotfiles/docs/nvim-keybindings.md"
main()
{
printf "# nvim keybindings\n";
printf "\n";
printf "\`\`\`txt";
} > "$DEST"
msg "Generating Neovim keybindings documentation"
NVIM_APPNAME="nvim-kickstart" nvim -c "redir! >> $DEST" -c 'silent verbose map' -c 'redir END' -c 'q'
{
printf "# nvim keybindings\n\n"
printf "\`\`\`txt"
} > "$DEST"
printf "\n\`\`\`\n\n- Generated on %s\n" "$(date)" >> "$DEST"
NVIM_APPNAME="nvim-kickstart" nvim -c "redir! >> $DEST" -c 'silent verbose map' -c 'redir END' -c 'q'
# Remove lines with "Last set from" from the file
sed -e '/^ Last set from/d' "$DEST" > "$DEST.tmp" && mv "$DEST.tmp" "$DEST"
printf "\n\`\`\`\n\n- Generated on %s\n" "$(date)" >> "$DEST"
# Remove lines with "Last set from" from the file
sed -e '/^ Last set from/d' "$DEST" > "${DEST}.tmp" && mv "${DEST}.tmp" "$DEST"
msg "Neovim keybindings documentation generated at $DEST"
}
main "$@"

View File

@@ -1,11 +1,18 @@
#!/usr/bin/env bash
#
# Export oh-my-posh configuration as an image
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
set -e
source "${DOTFILES}/config/shared.sh"
cd "$DOTFILES" || exit
oh-my-posh config export image \
--config "$OHMYPOSH_CFG" \
--output "$HOME/.dotfiles/.github/screenshots/oh-my-posh.png" \
--author "Ismo Vuorinen"
main()
{
cd "$DOTFILES" || msg_err "Failed to change directory to $DOTFILES"
oh-my-posh config export image \
--config "$OHMYPOSH_CFG" \
--output "$HOME/.dotfiles/.github/screenshots/oh-my-posh.png" \
--author "Ismo Vuorinen"
}
main "$@"

View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
# Create file containing key mappings for wezterm
# Usage: ./create-wezterm-keymaps.sh
#
# shellcheck source=shared.sh
source "${DOTFILES}/config/shared.sh"
DEST="$HOME/.dotfiles/docs/wezterm-keybindings.md"
main()
{
msg "Generating wezterm keybindings documentation"
{
printf "# wezterm keybindings\n\n"
printf "\`\`\`txt\n"
} > "$DEST"
wezterm show-keys >> "$DEST"
printf "\`\`\`\n\n- Generated on %s\n" "$(date)" >> "$DEST"
msg "wezterm keybindings documentation generated at $DEST"
}
main "$@"

78
scripts/install-asdf.sh Executable file
View File

@@ -0,0 +1,78 @@
#!/usr/bin/env bash
#
# Install asdf
source "${DOTFILES}/config/shared.sh"
export ASDF_DIR="${XDG_BIN_HOME}/asdf"
export PATH="${ASDF_DIR}/bin:$PATH"
msg "Sourcing asdf in your shell"
. "$ASDF_DIR/asdf.sh"
# Function to update asdf and plugins
update_asdf()
{
asdf update
asdf plugin add asdf-plugin-manager https://github.com/asdf-community/asdf-plugin-manager.git
asdf install asdf-plugin-manager latest
asdf global asdf-plugin-manager "$(asdf latest asdf-plugin-manager)"
asdf-plugin-manager version
asdf-plugin-manager add-all
asdf install
}
ASDF_INSTALLABLES=(
"1password-cli:github.com/NeoHsu/asdf-1password-cli.git"
"age:github.com/threkk/asdf-age.git"
"bottom:github.com/carbonteq/asdf-btm.git"
"direnv:github.com/asdf-community/asdf-direnv.git"
"dotenv-linter:github.com/wesleimp/asdf-dotenv-linter.git"
"editorconfig-checker:github.com/gabitchov/asdf-editorconfig-checker.git"
"eza:github.com/lwiechec/asdf-eza.git"
"fd:gitlab.com/wt0f/asdf-fd.git"
"github-cli:github.com/bartlomiejdanek/asdf-github-cli.git"
"golang:github.com/asdf-community/asdf-golang.git"
"hadolint:github.com/devlincashman/asdf-hadolint.git"
"kubectl:github.com/asdf-community/asdf-kubectl.git"
"lazygit:github.com/nklmilojevic/asdf-lazygit.git"
"nodejs:github.com/asdf-vm/asdf-nodejs.git"
"pipx:github.com/yozachar/asdf-pipx.git"
"pre-commit:github.com/jonathanmorley/asdf-pre-commit.git"
"ripgrep:gitlab.com/wt0f/asdf-ripgrep.git"
"rust:github.com/code-lever/asdf-rust.git"
"semgrep:github.com/brentjanderson/asdf-semgrep.git"
"shellcheck:github.com/luizm/asdf-shellcheck.git"
"shfmt:github.com/luizm/asdf-shfmt.git"
"terraform-ls:github.com/asdf-community/asdf-hashicorp.git"
"terraform-lsp:github.com/bartlomiejdanek/asdf-terraform-lsp.git"
"terragrunt:github.com/ohmer/asdf-terragrunt.git"
"tf-summarize:github.com/adamcrews/asdf-tf-summarize.git"
"vault:github.com/asdf-community/asdf-hashicorp.git"
"yamllint:github.com/ericcornelissen/asdf-yamllint.git"
"yq:github.com/sudermanjr/asdf-yq.git"
)
# Function to install asdf plugins
install_asdf_plugins()
{
msg "Installing asdf plugins, if not already installed"
for item in "${ASDF_INSTALLABLES[@]}"; do
CMD=$(echo "${item}" | awk -F ":" '{print $1}')
URL=$(echo "${item}" | awk -F ":" '{print $2}')
asdf plugin add "${CMD}" "https://${URL}"
asdf install "${CMD}" latest
asdf global "${CMD}" "$(asdf latest "${CMD}")"
done
}
main()
{
update_asdf
install_asdf_plugins
msg "Reshim asdf"
asdf reshim
}
main "$@"

View File

@@ -2,33 +2,18 @@
# Install cargo/rust packages.
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/config/exports"
source "$HOME/.dotfiles/config/alias"
source "$HOME/.dotfiles/config/functions"
source "$HOME/.dotfiles/scripts/shared.sh"
eval "$HOME/.dotfiles/config/shared.sh"
msg "Starting to install rust/cargo packages"
! x-have cargo && {
msg "cargo could not be found. installing cargo with rustup.rs"
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --no-modify-path -y
}
source "$CARGO_HOME/env"
! x-have rustup && {
msg_err "rustup could not be found. Aborting..."
exit 1
}
rustup default stable
# If we have cargo install-update, use it first
x-have cargo-install-update && {
if command -v cargo-install-update &> /dev/null; then
msg_run "Updating cargo packages with cargo install-update"
cargo install-update -a
msg_done "Done with cargo install-update"
}
fi
packages=(
# A cargo subcommand for checking and applying
@@ -57,28 +42,41 @@ packages=(
# Number of jobs to run in parallel, this helps to keep the system responsive
BUILD_JOBS=$(nproc --ignore=2)
for pkg in "${packages[@]}"; do
# Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
# Function to install cargo packages
install_packages()
{
for pkg in "${packages[@]}"; do
# Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
msg_run "Installing cargo package $pkg"
cargo install --jobs $BUILD_JOBS "$pkg"
echo ""
done
msg_done "Installed cargo packages!"
msg_run "Now doing the next steps for cargo packages"
# use bob to install latest stable nvim
x-have bob && {
bob use stable && x-path-append "$XDG_DATA_HOME/bob/nvim-bin"
msg_run "Installing cargo package $pkg"
cargo install --jobs $BUILD_JOBS "$pkg"
echo ""
done
}
msg_run "Removing cargo cache"
cargo cache --autoclean
msg_done "Done removing cargo cache"
# Function to perform additional steps for installed cargo packages
post_install_steps()
{
msg_run "Now doing the next steps for cargo packages"
# use bob to install latest stable nvim
if command -v bob &> /dev/null; then
bob use stable && x-path-append "$XDG_DATA_HOME/bob/nvim-bin"
fi
msg_run "Removing cargo cache"
cargo cache --autoclean
msg_done "Done removing cargo cache"
}
main()
{
install_packages
msg_done "Installed cargo packages!"
post_install_steps
}
main "$@"

View File

@@ -1,58 +1,83 @@
#!/usr/bin/env bash
# shellcheck disable=SC2231,SC2034,SC2181,SC2068
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
source "${DOTFILES}/config/shared.sh"
PBB_REQUIRED_TOOLS=(git cheat)
for t in ${PBB_REQUIRED_TOOLS[@]}; do
! x-have "$t" && echo "(!) $t is missing, can't continue..." && exit 1
done
PBB_GIT="https://github.com/dylanaraps/pure-bash-bible.git"
PBB_SOURCE="source: $PBB_GIT"
PBB_SYNTAX="syntax: bash"
PBB_TAGS="tags: [bash]"
PBB_TEMP_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/cheat/pbb"
PBB_TEMP_PREFIX=$(basename "$0")
PBB_TEMP_DIR="$XDG_CACHE_HOME/cheat/pbb"
check_required_tools()
{
for t in "${PBB_REQUIRED_TOOLS[@]}"; do
if ! x-have "$t"; then
echo "(!) $t is missing, can't continue..."
exit 1
fi
done
}
# If there's no .git, clone the folder
if [ ! -d "$PBB_TEMP_DIR/.git" ]; then
msg_run "Starting to clone $PBB_GIT"
git clone --depth 1 --single-branch -q "$PBB_GIT" "$PBB_TEMP_DIR" \
&& msg_yay "Cloned $PBB_GIT"
else
# Update the repo
msg_run "Starting to update $PBB_GIT"
git -C "$PBB_TEMP_DIR" reset --hard origin/master
git -C "$PBB_TEMP_DIR" pull -q \
&& msg_yay "Updated $PBB_GIT"
fi
clone_or_update_repo()
{
if [ ! -d "$PBB_TEMP_DIR/.git" ]; then
msg_run "Starting to clone $PBB_GIT"
git clone --depth 1 --single-branch -q "$PBB_GIT" "$PBB_TEMP_DIR" \
&& msg_yay "Cloned $PBB_GIT"
else
msg_run "Starting to update $PBB_GIT"
git -C "$PBB_TEMP_DIR" reset --hard origin/master
git -C "$PBB_TEMP_DIR" pull -q \
&& msg_yay "Updated $PBB_GIT"
fi
}
PBB_CHAPTERS=$(ls -1v "$PBB_TEMP_DIR"/manuscript/chapter*)
CHEAT_DEST="$(cheat -d | grep pure-bash-bible | head -1 | awk '{print $2}')"
prepare_cheat_dest()
{
local cheat_dest
cheat_dest="$(cheat -d | grep pure-bash-bible | head -1 | awk '{print $2}')"
if [ ! -d "$CHEAT_DEST" ]; then
mkdir -p "$CHEAT_DEST"
fi
for f in ${PBB_CHAPTERS[@]}; do
# get all headers, take the first one, strip the # and return the first word in lowercase
HEADER=$(grep -e '^[#] ' "$f" | head -1 | awk '{print tolower($2)}')
CHEAT_FILE="$CHEAT_DEST/${HEADER}"
replacable "$f" "$CHEAT_FILE"
override=$?
if [ "$override" -ne 1 ]; then
cp "$f" "$CHEAT_FILE" && msg_run "Updated: $CHEAT_FILE"
if [ ! -d "$cheat_dest" ]; then
mkdir -p "$cheat_dest"
fi
LC_ALL=C perl -pi.bak -e 's/\<\!-- CHAPTER END --\>//' "$CHEAT_FILE"
rm "$CHEAT_FILE.bak"
echo "$cheat_dest"
}
# add tags if the file doesn't have them
if [ '---' != "$(head -1 < "$CHEAT_FILE")" ]; then
T="$PBB_SYNTAX\n$PBB_TAGS\n$PBB_SOURCE\n"
echo -e "---\n$T---\n$(cat "$CHEAT_FILE")" > "$CHEAT_FILE"
fi
done
process_chapters()
{
local cheat_dest
cheat_dest=$(prepare_cheat_dest)
mapfile -t PBB_CHAPTERS < <(ls -1v "$PBB_TEMP_DIR"/manuscript/chapter*)
for f in "${PBB_CHAPTERS[@]}"; do
local header cheat_file
header=$(grep -e '^[#] ' "$f" | head -1 | awk '{print tolower($2)}')
cheat_file="$cheat_dest/$header"
if ! replacable "$f" "$cheat_file"; then
cp "$f" "$cheat_file" && msg_run "Updated: $cheat_file"
fi
LC_ALL=C perl -pi.bak -e 's/\<\!-- CHAPTER END --\>//' "$cheat_file"
rm "$cheat_file.bak"
if [ '---' != "$(head -1 < "$cheat_file")" ]; then
local metadata
metadata="$PBB_SYNTAX\n$PBB_TAGS\n$PBB_SOURCE\n"
echo -e "---\n$metadata---\n$(cat "$cheat_file")" > "$cheat_file"
fi
done
}
main()
{
check_required_tools
clone_or_update_repo
process_chapters
}
main "$@"

View File

@@ -2,9 +2,12 @@
# Install PHP Package Manager Composer
#
# shellcheck source="shared.sh"
source "$HOME/.dotfiles/scripts/shared.sh"
eval "$HOME/.dotfiles/config/shared.sh"
! x-have "php" && msg_err "PHP Not Available, cannot install composer" && exit 0
if ! command -v php &> /dev/null; then
msg_err "PHP Not Available, cannot install composer"
exit 0
fi
EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')"
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

View File

@@ -2,7 +2,7 @@
# Install NerdFonts
#
# shellcheck source="shared.sh"
source "$HOME/.dotfiles/scripts/shared.sh"
source "$DOTFILES/config/shared.sh"
GIT_REPO="https://github.com/ryanoasis/nerd-fonts.git"
TMP_PATH="$XDG_CACHE_HOME/nerd-fonts"
@@ -17,28 +17,50 @@ fonts=(
SpaceMono
)
if [ ! -d "$TMP_PATH" ]; then
git clone --filter=blob:none --sparse "$GIT_REPO" "$TMP_PATH"
fi
# Function to clone or update the NerdFonts repository
clone_or_update_repo()
{
if [ ! -d "$TMP_PATH" ]; then
git clone --quiet --filter=blob:none --sparse "$GIT_REPO" "$TMP_PATH"
fi
cd "$TMP_PATH" || {
msg_err "No such folder $TMP_PATH"
exit 1
cd "$TMP_PATH" || msg_err "No such folder $TMP_PATH"
}
for ext in "${fonts[@]}"; do
# Trim spaces
ext=${ext// /}
# Skip comments
if [[ ${ext:0:1} == "#" ]]; then continue; fi
# Function to add fonts to sparse-checkout
add_fonts_to_sparse_checkout()
{
for font in "${fonts[@]}"; do
# Trim spaces
font=${font// /}
# Skip comments
if [[ ${font:0:1} == "#" ]]; then continue; fi
msg_run "Adding $ext to sparse-checkout"
git sparse-checkout add "patched-fonts/$ext"
echo ""
done
msg_run "Adding $font to sparse-checkout"
git sparse-checkout add "patched-fonts/$font"
echo ""
done
}
msg "Starting to install NerdFonts..."
# Function to install NerdFonts
install_fonts()
{
msg "Starting to install NerdFonts..."
./install.sh -q -s ${fonts[*]}
msg_ok "Done"
}
./install.sh -s ${fonts[*]}
remove_tmp_path()
{
rm -rf "$TMP_PATH"
}
msg_ok "Done"
main()
{
clone_or_update_repo
add_fonts_to_sparse_checkout
install_fonts
remove_tmp_path
}
main "$@"

View File

@@ -3,17 +3,23 @@
# Install fzf
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
eval "$DOTFILES/config/shared.sh"
FZF_GIT="https://github.com/junegunn/fzf.git"
FZF_PATH="${XDG_CONFIG_HOME}/fzf"
FZF_BUILD="/tmp/fzf"
if [ ! -d "$FZF_BUILD" ]; then
git clone --depth 1 "$FZF_GIT" "$FZF_BUILD"
"$FZF_BUILD/install" \
--xdg \
--bin
else
msg_done "fzf ($FZF_PATH/) already installed"
fi
main()
{
if [ ! -d "$FZF_BUILD" ]; then
git clone --depth 1 "$FZF_GIT" "$FZF_BUILD"
"$FZF_BUILD/install" \
--xdg \
--bin
msg_done "fzf installed"
else
msg_done "fzf ($FZF_PATH/) already installed"
fi
}
main "$@"

View File

@@ -2,13 +2,17 @@
# Install GitHub CLI extensions
#
# shellcheck source="shared.sh"
source "$HOME/.dotfiles/scripts/shared.sh"
source "${DOTFILES}/config/shared.sh"
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
msg_run "Installing gh (GitHub Client) extensions"
! x-have "gh" \
&& msg_err "gh (GitHub Client) could not be found, please install it first" \
&& exit 0
if ! command -v gh &> /dev/null; then
msg_err "gh (GitHub Client) could not be found, please install it first"
exit 0
fi
extensions=(
# GitHub CLI extension for generating a report on repository dependencies.
@@ -30,15 +34,25 @@ extensions=(
rsese/gh-actions-status
)
for ext in "${extensions[@]}"; do
# Trim spaces
ext=${ext// /}
# Skip comments
if [[ ${ext:0:1} == "#" ]]; then continue; fi
# Function to install GitHub CLI extensions
install_extensions()
{
for ext in "${extensions[@]}"; do
# Trim spaces
ext=${ext// /}
# Skip comments
if [[ ${ext:0:1} == "#" ]]; then continue; fi
msg_nested "Installing $ext"
gh extensions install "$ext"
echo ""
done
msg_nested "Installing $ext"
gh extension install "$ext"
echo ""
done
}
msg_ok "Done"
main()
{
install_extensions
msg_ok "Done"
}
main "$@"

View File

@@ -4,12 +4,14 @@
# NOTE: Experimental, wip
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
source "${DOTFILES}/config/shared.sh"
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
msg_run "Installing git-crypt"
x-have "git-crypt" || {
if ! command -v git-crypt &> /dev/null; then
REPO_URL="https://github.com/AGWA/git-crypt.git"
CHECK_PATH="${XDG_BIN_HOME}/git-crypt"
BUILD_PATH="/tmp/git-crypt"
@@ -23,5 +25,6 @@ x-have "git-crypt" || {
else
msg_done "git-crypt ($CHECK_PATH) already installed"
fi
}
fi
msg_done "Done installing git-crypt"

View File

@@ -2,7 +2,10 @@
# Install Go packages
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
eval "$DOTFILES/config/shared.sh"
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
msg_run "Installing go packages"
@@ -33,32 +36,50 @@ packages=(
github.com/doron-cohen/antidot@latest
)
for pkg in "${packages[@]}"; do
# Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
# Function to install go packages
install_packages()
{
for pkg in "${packages[@]}"; do
# Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
msg_nested "Installing go package: $pkg"
go install "$pkg"
echo ""
done
msg_run "Installing completions for selected packages"
x-have git-profile && {
git-profile completion zsh > "$ZSH_CUSTOM_COMPLETION_PATH/_git-profile" \
&& msg_ok "Installed completions for git-profile"
msg_nested "Installing go package: $pkg"
go install "$pkg"
echo ""
done
}
x-have antidot && {
antidot update \
&& msg_ok "Updated antidot database"
# Function to install completions and run actions for selected packages
post_install()
{
msg_run "Installing completions for selected packages"
if command -v git-profile &> /dev/null; then
git-profile completion zsh > "$ZSH_CUSTOM_COMPLETION_PATH/_git-profile" \
&& msg_ok "Installed completions for git-profile"
fi
if command -v antidot &> /dev/null; then
antidot update \
&& msg_ok "Updated antidot database"
fi
}
echo ""
# Function to clear go cache
clear_go_cache()
{
msg_run "Clearing go cache"
go clean -cache -modcache
}
msg_run "Clearing go cache"
go clean -cache -modcache
main()
{
install_packages
post_install
clear_go_cache
msg_ok "Done"
}
msg_ok "Done"
main "$@"

View File

@@ -3,23 +3,71 @@
# Install neofetch from source
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
source "$DOTFILES/config/shared.sh"
NEOFETCH_VERSION="7.1.0"
if ! declare -f msg > /dev/null; then
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[ "$VERBOSE" -eq 1 ] && echo "$1"
return 0
}
fi
if ! declare -f msg_err > /dev/null; then
# Function to print error messages and exit
# $1 - error message (string)
msg_err()
{
echo "(!) ERROR: $1" >&2
exit 1
}
fi
if ! declare -f msg_done > /dev/null; then
# Function to print done message
# $1 - message (string)
msg_done()
{
echo "$1"
return 0
}
fi
NEOFETCH_VERSION="$(x-gh-get-latest-version dylanaraps/neofetch)"
NEOFETCH_REPO="https://github.com/dylanaraps/neofetch"
NEOFETCH_URL="${NEOFETCH_REPO}/archive/refs/tags/${NEOFETCH_VERSION}.tar.gz"
NEOFETCH_TEMP="/tmp/neofetch"
NEOFETCH_INSTALL_PREFIX="$HOME/.local"
x-have "neofetch" || {
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Function to install neofetch from source
install_neofetch()
{
LC_ALL=C
mkdir -p "$NEOFETCH_TEMP" "$NEOFETCH_INSTALL_PREFIX"
curl -L "$NEOFETCH_URL" > "$NEOFETCH_TEMP.tar.gz"
curl -L "$NEOFETCH_URL" -o "$NEOFETCH_TEMP.tar.gz"
tar zxvf "$NEOFETCH_TEMP.tar.gz" --directory="$NEOFETCH_TEMP"
cd "$NEOFETCH_TEMP/neofetch-$NEOFETCH_VERSION" \
&& make PREFIX="${NEOFETCH_INSTALL_PREFIX}" install \
&& rm -rf "$NEOFETCH_TEMP*" \
&& msg_yay "neofetch installed!"
}
main()
{
if ! command -v neofetch &> /dev/null; then
install_neofetch
elif [ "$NEOFETCH_VERSION" != "$(neofetch --version | awk '{print $2}')" ]; then
install_neofetch
else
msg_done "neofetch v.${NEOFETCH_VERSION} already installed"
fi
}
main "$@"

View File

@@ -2,11 +2,17 @@
# Install npm packages globally.
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
eval "$DOTFILES/config/shared.sh"
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
msg "Starting to install npm packages"
! x-have "npm" && msg_err "npm could not be found." && exit 0
if ! command -v npm &> /dev/null; then
msg_err "npm could not be found."
exit 0
fi
packages=(
# This is a tool to check if your files consider your .editorconfig rules.
@@ -18,27 +24,48 @@ packages=(
"corepack"
)
for pkg in "${packages[@]}"; do
# Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
# Function to install npm packages
install_packages()
{
for pkg in "${packages[@]}"; do
# Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
if [[ $(npm ls -g -p "$pkg") != "" ]]; then
msg_run_done "$pkg" "already installed"
else
msg_run "Installing npm package:" "$pkg"
npm install -g --no-fund --no-progress --no-timing "$pkg"
fi
if npm ls -g -p "$pkg" &> /dev/null; then
msg_run_done "$pkg" "already installed"
else
msg_run "Installing npm package:" "$pkg"
npm install -g --no-fund --no-progress --no-timing "$pkg"
fi
echo ""
done
}
echo ""
done
# Function to upgrade all global npm packages
upgrade_global_packages()
{
msg_run "Upgrading all global packages"
npm -g --no-progress --no-timing --no-fund outdated
npm -g --no-timing --no-fund upgrade
}
msg_run "Upgrading all global packages"
npm -g --no-progress --no-timing --no-fund outdated
npm -g --no-timing --no-fund upgrade
# Function to clean npm cache
clean_npm_cache()
{
msg_run "Cleaning up npm cache"
npm cache verify
npm cache clean --force
npm cache verify
}
msg_run "Cleaning up npm cache"
npm cache verify
npm cache clean --force
npm cache verify
main()
{
install_packages
upgrade_global_packages
clean_npm_cache
msg_yay "npm package installations complete"
}
main "$@"

View File

@@ -3,11 +3,18 @@
# Install ntfy
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
set -e
eval "$DOTFILES/config/shared.sh"
x-have "ntfy" && msg "ntfy already installed" && exit 0
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Check if ntfy is already installed
if x-have "ntfy"; then
msg "ntfy already installed"
exit 0
fi
# Determine the architecture
case $(dfm check arch) in
Linux)
NTFY_ARCH="linux_$(arch)"
@@ -15,21 +22,36 @@ case $(dfm check arch) in
Darwin)
NTFY_ARCH="macOS_all"
;;
*)
msg_err "Unsupported OS"
;;
esac
NTFY_VERSION=2.2.0
NTFY_VERSION="$(x-gh-get-latest-version binwiederhier/ntfy)"
NTFY_URL="https://github.com/binwiederhier/ntfy"
NTFY_DEST="/tmp/ntfy_${NTFY_VERSION}_${NTFY_ARCH}"
curl -L "$NTFY_URL/releases/download/v${NTFY_VERSION}/${NTFY_DEST}.tar.gz" \
> "${NTFY_DEST}.tar.gz"
tar zxvf "${NTFY_DEST}.tar.gz"
cp -a "${NTFY_DEST}/ntfy" ~/.local/bin/ntfy
mkdir -p ~/.config/ntfy
# Download and extract ntfy
install_ntfy()
{
curl -L "$NTFY_URL/releases/download/v${NTFY_VERSION}/${NTFY_DEST}.tar.gz" -o "${NTFY_DEST}.tar.gz"
tar zxvf "${NTFY_DEST}.tar.gz"
cp -a "${NTFY_DEST}/ntfy" ~/.local/bin/ntfy
mkdir -p ~/.config/ntfy
# copy config only if it does not exist
if [ ! -f "$HOME/.config/ntfy/client.yml" ]; then
cp "${NTFY_DEST}/client/client.yml" ~/.config/ntfy/client.yml
fi
# Copy config only if it does not exist
if [ ! -f "$HOME/.config/ntfy/client.yml" ]; then
cp "${NTFY_DEST}/client/client.yml" ~/.config/ntfy/client.yml
fi
rm -rf "${NTFY_DEST}" "${NTFY_DEST}.tar.gz"
# Clean up
rm -rf "${NTFY_DEST}" "${NTFY_DEST}.tar.gz"
}
main()
{
install_ntfy
msg "ntfy installation complete"
}
main "$@"

View File

@@ -3,14 +3,31 @@
# Install oh-my-bash
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
source "${DOTFILES}/config/shared.sh"
export OSH="$HOME/.local/share/oh-my-bash"
set -euo pipefail
if [ ! -d "$OSH" ]; then
[ -f "$HOME/.bashrc" ] && mv "$HOME/.bashrc" "$HOME/.bashrc.temp"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)" --unattended
[ -f "$HOME/.bashrc.temp" ] && mv "$HOME/.bashrc.temp" "$HOME/.bashrc"
else
msg_done "oh-my-bash ($OSH) already installed"
fi
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
OSH="$HOME/.local/share/oh-my-bash"
# Function to install oh-my-bash
install_oh_my_bash()
{
if [ ! -d "$OSH" ]; then
[ -f "$HOME/.bashrc" ] && mv "$HOME/.bashrc" "$HOME/.bashrc.temp"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)" --unattended
[ -f "$HOME/.bashrc.temp" ] && mv "$HOME/.bashrc.temp" "$HOME/.bashrc"
msg "oh-my-bash installed to $OSH"
else
msg_done "oh-my-bash ($OSH) already installed"
fi
}
main()
{
install_oh_my_bash
}
main "$@"

View File

@@ -3,9 +3,31 @@
# Install oh-my-posh
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
source "${DOTFILES}/config/shared.sh"
curl -s https://ohmyposh.dev/install.sh | bash -s -- -d ~/.local/bin
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
eval "$(oh-my-posh init zsh --config $OHMYPOSH_CFG)"
msg "Starting to install oh-my-posh"
# Install oh-my-posh
install_oh_my_posh()
{
curl -s https://ohmyposh.dev/install.sh | bash -s -- -d ~/.local/bin
msg "oh-my-posh installed to ~/.local/bin"
}
# Initialize oh-my-posh
init_oh_my_posh()
{
eval "$(oh-my-posh init zsh --config $OHMYPOSH_CFG)"
msg "oh-my-posh initialized with config $OHMYPOSH_CFG"
}
main()
{
install_oh_my_posh
init_oh_my_posh
}
main "$@"

View File

@@ -2,13 +2,17 @@
# Install python/pip packages.
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
source "${DOTFILES}/config/shared.sh"
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
msg "Starting to install pip packages"
x-have "python3" || {
msg_err "Could not find python3, something really weird is going on." && exit 1
}
if ! command -v python3 &> /dev/null; then
msg_err "Could not find python3, something really weird is going on."
exit 1
fi
msg_nested "Upgrading pip"
python3 -m pip install --user --upgrade pip
@@ -18,16 +22,20 @@ packages=(
"libtmux"
)
for pkg in "${packages[@]}"; do
# Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
# Function to install pip packages
install_packages()
{
for pkg in "${packages[@]}"; do
# Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
msg_nested "Installing pip package: $pkg"
python3 -m pip install --user --upgrade "$pkg"
echo ""
done
msg_nested "Installing pip package: $pkg"
python3 -m pip install --user --upgrade "$pkg"
echo ""
done
}
install_packages
msg_yay "Run pip package installations"

View File

@@ -4,29 +4,40 @@
# Ismo Vuorinen <https://github.com/ivuorinen> 2018
#
[ "$(uname)" != "Darwin" ] && echo "Not a macOS system" && exit 0
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
! x-have xcode-select \
&& msg_err "xcode-select could not be found, skipping" \
&& exit 0
# Check if the script is running on macOS
if [ "$(uname)" != "Darwin" ]; then
echo "Not a macOS system"
exit 0
fi
# Check if xcode-select is available
if ! command -v xcode-select &> /dev/null; then
msg_err "xcode-select could not be found, skipping"
exit 0
fi
# Ask for the administrator password upfront
sudo -v
# Keep-alive: update existing `sudo` time stamp until `settler` has finished
while true; do
sudo -n true
sleep 60
kill -0 "$$" || exit
done 2> /dev/null &
# Keep-alive: update existing `sudo` time stamp until the script has finished
keep_alive_sudo()
{
while true; do
sudo -n true
sleep 60
kill -0 "$$" || exit
done 2> /dev/null &
}
XCODE_TOOLS_PATH=$(xcode-select -p)
XCODE_SWIFT_PATH="$XCODE_TOOLS_PATH/usr/bin/swift"
# Modified from https://unix.stackexchange.com/a/408305
if [ -a "$XCODE_SWIFT_PATH" ]; then
echo "You have swift from xcode-select. Continuing..."
else
# Function to prompt for XCode CLI Tools installation
prompt_xcode_install()
{
XCODE_MESSAGE="$(
osascript -e \
'tell app "System Events" to display dialog "Please click install when Command Line Developer Tools appears"'
@@ -36,11 +47,25 @@ else
xcode-select --install
else
echo "You have cancelled the installation, please rerun the installer."
exit
exit 1
fi
fi
}
until [ -f "$XCODE_SWIFT_PATH" ]; do
echo -n "."
sleep 1
done
# Main function
main()
{
keep_alive_sudo
if [ -x "$XCODE_SWIFT_PATH" ]; then
echo "You have swift from xcode-select. Continuing..."
else
prompt_xcode_install
fi
until [ -f "$XCODE_SWIFT_PATH" ]; do
echo -n "."
sleep 1
done
}
main "$@"

View File

@@ -3,13 +3,29 @@
# Install z
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
source "${DOTFILES}/config/shared.sh"
Z_GIT_PATH="https://github.com/rupa/z.git"
Z_BIN_PATH="$XDG_BIN_HOME/z"
if [ ! -d "$Z_BIN_PATH" ]; then
git clone "$Z_GIT_PATH" "$Z_BIN_PATH"
else
msg_done "z ($Z_BIN_PATH/) already installed"
fi
# Function to clone the z repository
clone_z_repo()
{
local git_path=$1
local bin_path=$2
if [ ! -d "$bin_path" ]; then
git clone "$git_path" "$bin_path"
msg "z installed at $bin_path"
else
msg "z ($bin_path/) already installed"
fi
}
# Main function
main()
{
clone_z_repo "$Z_GIT_PATH" "$Z_BIN_PATH"
}
main "$@"

View File

@@ -9,7 +9,7 @@
[ "$(uname)" != "Darwin" ] && echo "Not a macOS system" && exit 0
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
eval "$HOME/.dotfiles/config/shared.sh"
msg_run "Starting to set macOS defaults, these require sudo privileges:"
@@ -63,7 +63,7 @@ defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false
# Automatically quit printer app once the print jobs complete
defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true
# Disable the Are you sure you want to open this application? dialog
# Disable the "Are you sure you want to open this application?" dialog
defaults write com.apple.LaunchServices LSQuarantine -bool false
# Disable Resume system-wide
@@ -79,10 +79,10 @@ defaults write NSGlobalDomain NSDisableAutomaticTermination -bool true
# in the login window
sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo HostName
# Disable smart quotes as theyre annoying when typing code
# Disable smart quotes as they're annoying when typing code
defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false
# Disable smart dashes as theyre annoying when typing code
# Disable smart dashes as they're annoying when typing code
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
###############################################################################
@@ -94,7 +94,7 @@ msg_nested "Setting SSD-specific tweaks"
# Disable hibernation (speeds up entering sleep mode)
sudo pmset -a hibernatemode 0
# Disable the sudden motion sensor as its not useful for SSDs
# Disable the sudden motion sensor as it's not useful for SSDs
sudo pmset -a sms 0
###############################################################################
@@ -117,7 +117,7 @@ defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool Min" 80
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3
# Set language and text formats
# Note: if youre in the US, replace `EUR` with `USD`, `Centimeters` with
# Note: if you're in the US, replace `EUR` with `USD`, `Centimeters` with
# `Inches`, `en_GB` with `en_US`, and `true` with `false`.
defaults write NSGlobalDomain AppleLanguages -array "en"
defaults write NSGlobalDomain AppleLocale -string "en_GB@currency=EUR"
@@ -197,7 +197,7 @@ defaults write com.apple.finder WarnOnEmptyTrash -bool false
# chflags nohidden /Users
# Expand the following File Info panes:
# General, Open with, and Sharing & Permissions
# "General", "Open with", and "Sharing & Permissions"
defaults write com.apple.finder FXInfoPanesExpanded -dict \
General -bool true \
OpenWith -bool true \
@@ -235,17 +235,17 @@ defaults write com.apple.dock tilesize -int 30
defaults write com.apple.dock show-process-indicators -bool true
# Wipe all (default) app icons from the Dock
# This is only really useful when setting up a new Mac, or if you dont use
# This is only really useful when setting up a new Mac, or if you don't use
# the Dock to launch apps.
# defaults write com.apple.dock persistent-apps -array ""
# Disable Dashboard
defaults write com.apple.dashboard mcx-disabled -bool true
# Dont show Dashboard as a Space
# Don't show Dashboard as a Space
defaults write com.apple.dock dashboard-in-overlay -bool true
# Dont automatically rearrange Spaces based on most recent use
# Don't automatically rearrange Spaces based on most recent use
defaults write com.apple.dock mru-spaces -bool false
# Make Dock icons of hidden applications translucent
@@ -257,7 +257,7 @@ defaults write com.apple.dock showhidden -bool true
msg_nested "Settings for Safari & WebKit"
# Enable Safaris debug menu
# Enable Safari's debug menu
defaults write com.apple.Safari IncludeInternalDebugMenu -bool true
# Enable the Develop menu and the Web Inspector in Safari
@@ -268,7 +268,7 @@ defaults write com.apple.Safari \
com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled \
-bool true
# Dont display the annoying prompt when quitting iTerm
# Don't display the annoying prompt when quitting iTerm
defaults write com.googlecode.iterm2 PromptOnQuit -bool false
# Use iTerm2 preferences from the .dotfiles folder.
defaults write com.googlecode.iterm2 PrefsCustomFolder \
@@ -315,7 +315,7 @@ defaults write com.apple.TextEdit PlainTextEncodingForWrite -int 4
msg_nested "Settings for Messages"
# Disable smart quotes as its annoying for messages that contain code
# Disable smart quotes as it's annoying for messages that contain code
defaults write com.apple.messageshelper.MessageController \
SOInputLineSettings \
-dict-add "automaticQuoteSubstitutionEnabled" \
@@ -335,7 +335,7 @@ msg_nested "Restarting applications to apply changes"
for app in "Activity Monitor" "Address Book" "Calendar" "Contacts" "cfprefsd" \
"Dock" "Finder" "Mail" "Messages" "Safari" "SizeUp" "SystemUIServer" \
"Terminal" "Transmission" "Twitter" "iCal"; do
"Terminal" "Transmission" "iCal"; do
killall "${app}" > /dev/null 2>&1
done

View File

@@ -6,174 +6,14 @@
# Helper env variables. Use like this: VERBOSE=1 ./script.sh
: "${VERBOSE:=0}"
# Modified from https://stackoverflow.com/a/28776166
(
[[ -n $ZSH_VERSION && $ZSH_EVAL_CONTEXT =~ :file$ ]] \
|| [[ -n $BASH_VERSION ]] && (return 0 2> /dev/null)
) && sourced=1 || sourced=0
# Set variable that checks if the shared.sh script has been sourced only once
# If the script has been sourced more than once, the script not be sourced again
[ -z "$SHARED_SCRIPTS_SOURCED" ] && {
export DOTFILES="$HOME/.dotfiles"
DOTFILES_CURRENT_SHELL=$(ps -p $$ -oargs=)
export DOTFILES_CURRENT_SHELL
source "${DOTFILES}/config/shared.sh"
msgr done "(!) shared.sh not sourced"
# Explicitly set XDG folders
# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/state"
# custom variables
export XDG_BIN_HOME="$HOME/.local/bin"
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_RUNTIME_DIR="$HOME/.local/run"
# Other variables
export OHMYPOSH_CFG="$HOME/.dotfiles/config/omp/own.toml"
# Remove directory from the PATH variable
# usage: path_remove ~/.local/bin
function path_remove
{
x-path-remove "$1"
}
# Append directory to the PATH
# usage: path_append ~/.local/bin
function path_append
{
x-path-remove "$1"
x-path-prepend "$1"
}
# Prepend directory to the PATH
# usage: path_prepend ~/.local/bin
function path_prepend
{
x-path-remove "$1"
x-path-prepend "$1"
}
# Run command silently
# Usage: silent uptime
silent()
{
"$@" >&/dev/null
}
# Check if a file contains non-ascii characters
nonascii()
{
LC_ALL=C grep -n '[^[:print:][:space:]]' "${@}"
}
source "$DOTFILES/local/bin/msgr"
# -- Menu builder -- #
function menu_section()
{
LINE=$(printf '%-18s [ %-15s ]\n' "$1" "$2")
echo -e " $(__log_marker) $LINE"
}
function menu_item()
{
LINE=$(printf '%-15s %-30s\n' "$1" "$2")
echo -e "$(__log_indent)$(__log_marker) $LINE"
}
# https://stackoverflow.com/a/85932
function fn_exists()
{
declare -f -F "$1" > /dev/null
return $?
}
# Takes a bash array ("cow:moo", "dinosaur:roar") and loops
# through the keys to build menu section listing.
function menu_usage_header()
{
MENU_CMD="$1"
shift
MENU_ARRAY=("$@")
KEYS=""
for item in "${MENU_ARRAY[@]}"; do
CMD=$(echo "${item}" | awk -F ":" '{print $1}')
KEYS+="${CMD} | "
done
# "???" removes 3 last characters, being " | " from the end
menu_section "$MENU_CMD" "${KEYS%???}"
}
# Takes the usage command "$0 dotfiles" and a
# bash array ("cow:moo" "dinosaur:roar") and loops
# through in building a menu for dfm command usage listing.
function menu_usage()
{
MENU_CMD="$1"
shift
MENU_ARRAY=("$@")
msg "$MENU_CMD"
for item in "${MENU_ARRAY[@]}"; do
CMD=$(echo "${item}" | awk -F ":" '{print $1}')
DESC=$(echo "${item}" | awk -F ":" '{print $2}')
menu_item "$CMD" "$DESC"
done
}
# Creates a random string
rnd()
{
echo $RANDOM | md5sum | head -c 20
}
# return sha256sum for file
# $1 - filename (string)
function get_sha256sum()
{
sha256sum "$1" | head -c 64
}
# Replaceable file
#
# $1 - filename (string)
# $2 - filename (string)
#
# Returns 1 when replaceable, 0 when not replaceable.
function replacable()
{
FILE1="$1"
FILE2="$2"
[[ ! -r "$FILE1" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "File 1 ($FILE1) does not exist"
return 0
}
[[ ! -r "$FILE2" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "File 2 ($FILE2) does not exist, replaceable"
return 1
}
FILE1_HASH=$(get_sha256sum "$FILE1")
FILE2_HASH=$(get_sha256sum "$FILE2")
[[ $FILE1_HASH = "" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "Could not get hash for file 1 ($FILE1)"
return 0
}
[[ $FILE2_HASH = "" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "Could not get hash for file 2 ($FILE2), replaceable"
return 1
}
[[ "$FILE1_HASH" == "$FILE2_HASH" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_ok "Files match, not replaceable: $FILE1"
return 0
}
[[ $VERBOSE -eq 1 ]] && msg_warn "Files do not match ($FILE1_HASH != $FILE2_HASH), replaceable"
return 1
# Set variable that checks if the shared.sh script has been sourced only once
# shellcheck disable=SC2034
export SHARED_SCRIPTS_SOURCED=1
}

329
yarn.lock
View File

@@ -30,15 +30,15 @@
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
"@commitlint/cli@19.3.0":
version "19.3.0"
resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.3.0.tgz#44e6da9823a01f0cdcc43054bbefdd2c6c5ddf39"
integrity sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==
"@commitlint/cli@19.4.0":
version "19.4.0"
resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.4.0.tgz#9f93d3ed07e531fcfa371015c8c87e0aa26d974f"
integrity sha512-sJX4J9UioVwZHq7JWM9tjT5bgWYaIN3rC4FP7YwfEwBYiIO+wMyRttRvQLNkow0vCdM0D67r9NEWU0Ui03I4Eg==
dependencies:
"@commitlint/format" "^19.3.0"
"@commitlint/lint" "^19.2.2"
"@commitlint/load" "^19.2.0"
"@commitlint/read" "^19.2.1"
"@commitlint/load" "^19.4.0"
"@commitlint/read" "^19.4.0"
"@commitlint/types" "^19.0.3"
execa "^8.0.1"
yargs "^17.0.0"
@@ -102,10 +102,10 @@
"@commitlint/rules" "^19.0.3"
"@commitlint/types" "^19.0.3"
"@commitlint/load@^19.2.0":
version "19.2.0"
resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.2.0.tgz#3ca51fdead4f1e1e09c9c7df343306412b1ef295"
integrity sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==
"@commitlint/load@^19.4.0":
version "19.4.0"
resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.4.0.tgz#7df034e226e300fd577d3f63a72d790d5c821f53"
integrity sha512-I4lCWaEZYQJ1y+Y+gdvbGAx9pYPavqZAZ3/7/8BpWh+QjscAn8AjsUpLV2PycBsEx7gupq5gM4BViV9xwTIJuw==
dependencies:
"@commitlint/config-validator" "^19.0.3"
"@commitlint/execute-rule" "^19.0.0"
@@ -132,10 +132,10 @@
conventional-changelog-angular "^7.0.0"
conventional-commits-parser "^5.0.0"
"@commitlint/read@^19.2.1":
version "19.2.1"
resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-19.2.1.tgz#7296b99c9a989e60e5927fff8388a1dd44299c2f"
integrity sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==
"@commitlint/read@^19.4.0":
version "19.4.0"
resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-19.4.0.tgz#3866b1f9a272ef6a388986efa349d24228fc8b00"
integrity sha512-r95jLOEZzKDakXtnQub+zR3xjdnrl2XzerPwm7ch1/cc5JGq04tyaNpa6ty0CRCWdVrk4CZHhqHozb8yZwy2+g==
dependencies:
"@commitlint/top-level" "^19.0.0"
"@commitlint/types" "^19.0.3"
@@ -193,19 +193,24 @@
dependencies:
eslint-visitor-keys "^3.3.0"
"@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1":
"@eslint-community/regexpp@^4.11.0":
version "4.11.0"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae"
integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==
"@eslint-community/regexpp@^4.6.0":
version "4.10.1"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.1.tgz#361461e5cb3845d874e61731c11cfedd664d83a0"
integrity sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==
"@eslint/config-array@^0.15.1":
version "0.15.1"
resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.15.1.tgz#1fa78b422d98f4e7979f2211a1fde137e26c7d61"
integrity sha512-K4gzNq+yymn/EVsXYmf+SBcBro8MTf+aXJZUphM96CdzUEr+ClGDvAbpmaEK+cGVigVXIgs9gNmvHAlrzzY5JQ==
"@eslint/config-array@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d"
integrity sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==
dependencies:
"@eslint/object-schema" "^2.1.3"
"@eslint/object-schema" "^2.1.4"
debug "^4.3.1"
minimatch "^3.0.5"
minimatch "^3.1.2"
"@eslint/eslintrc@^3.1.0":
version "3.1.0"
@@ -222,12 +227,12 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@eslint/js@9.4.0":
version "9.4.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.4.0.tgz#96a2edd37ec0551ce5f9540705be23951c008a0c"
integrity sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg==
"@eslint/js@9.9.1", "@eslint/js@^9.9.0":
version "9.9.1"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06"
integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==
"@eslint/object-schema@^2.1.3":
"@eslint/object-schema@^2.1.4":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843"
integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==
@@ -259,83 +264,82 @@
resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b"
integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==
"@ivuorinen/base-configs@^1.1.0":
version "1.1.95"
resolved "https://registry.yarnpkg.com/@ivuorinen/base-configs/-/base-configs-1.1.95.tgz#d81bedaebefb456678f1aef21c26d65257561202"
integrity sha512-v05urBaIWP4/g/f3CfD4qN66TjiYK2F/o3WZ5OplIHz8l+D1/v3jXKVnTyZE5Ou4OFQyGJt8MheoST/Tr22ysw==
"@ivuorinen/base-configs@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@ivuorinen/base-configs/-/base-configs-2.0.0.tgz#78282d1bde5c0cd40d1e6a78552970c5487334fb"
integrity sha512-4ULxBh4/+idPPIkYePxtHU0scCb1qyFO/inngCEX2czrnzAge/bwCiVsSS2l8PORf8VCljra8QxrUOG1iFE1TA==
dependencies:
"@ivuorinen/browserslist-config" "^0.2.7"
"@ivuorinen/commitlint-config" "^0.2.22"
"@ivuorinen/eslint-config" "^0.4.42"
"@ivuorinen/markdownlint-config" "^0.2.8"
"@ivuorinen/prettier-config" "^0.2.14"
"@ivuorinen/semantic-release-config" "^0.2.22"
eslint-plugin-n "^17.0.0"
"@ivuorinen/browserslist-config" "^0.3.0"
"@ivuorinen/commitlint-config" "^0.3.0"
"@ivuorinen/eslint-config" "^0.5.0"
"@ivuorinen/markdownlint-config" "^0.3.0"
"@ivuorinen/prettier-config" "^0.3.0"
"@ivuorinen/semantic-release-config" "^0.3.0"
"@ivuorinen/browserslist-config@^0.2.7":
version "0.2.7"
resolved "https://registry.yarnpkg.com/@ivuorinen/browserslist-config/-/browserslist-config-0.2.7.tgz#eb83e7769ed96d4ecb750e9bc51e9128522ac450"
integrity sha512-H3DH7zuO9Fd8XXHllL2Ij/3bJU1plW3vnxJ5XVylRNXZ1hFuKNZQjsT8VPq91obRr3go+tKHpGAiCbG+9xhVag==
"@ivuorinen/browserslist-config@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@ivuorinen/browserslist-config/-/browserslist-config-0.3.0.tgz#9aa0b0e9052d6c2332db3d2da403cc58f78aa3b5"
integrity sha512-CslwLwyoDin+5r7VWTVsMakg0xjwWHyu6OFnvE8n26gL1s3LYiaCp/ecZXZVDHd4NW9YgbU5efwbPlHGZY3OPw==
dependencies:
"@ivuorinen/config-checker" "^1.1.3"
browserslist "4.23.1"
"@ivuorinen/config-checker" "^1.1.5"
browserslist "4.23.3"
"@ivuorinen/commitlint-config@^0.2.22":
version "0.2.22"
resolved "https://registry.yarnpkg.com/@ivuorinen/commitlint-config/-/commitlint-config-0.2.22.tgz#6b475417a048ba1a5399294e17545609cd560b8e"
integrity sha512-epJj2WjtpOdrDiDT67Lue7ruewMpGwYHjZoIAlNQF1IgRDnA+z4hBGX6fYY/IMKHpGUB+Prz88B12/bNyguPFA==
"@ivuorinen/commitlint-config@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@ivuorinen/commitlint-config/-/commitlint-config-0.3.0.tgz#157854548c47e9c1ef652a17d263b344832dd299"
integrity sha512-BKt0ee/qHv6XgLag8paH/OMhDBjBIuh8kyf7KwlXgonWzrCF0GKhsb/H6X0Gl+mpyC++Ej1SWZG5qrQxZJ0BVA==
dependencies:
"@commitlint/cli" "19.3.0"
"@commitlint/cli" "19.4.0"
"@commitlint/config-conventional" "19.2.2"
"@ivuorinen/config-checker" "^1.1.3"
"@types/node" "*"
typescript ">=4"
"@ivuorinen/config-checker" "^1.1.5"
"@ivuorinen/config-checker@^1.1.3":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@ivuorinen/config-checker/-/config-checker-1.1.3.tgz#0db285b9d2fd4c7704d1d72d5ebebd6878b41aa6"
integrity sha512-ohQx3IDJqnMoy5UsSULmqhtOgKZLsin5lb0HOuAhdusZAUEg8DYMGROLMsFpcy6QKeWXrrVlMQ0kGAx6wWe8Zg==
"@ivuorinen/config-checker@^1.1.5":
version "1.1.5"
resolved "https://registry.yarnpkg.com/@ivuorinen/config-checker/-/config-checker-1.1.5.tgz#f5e374b473e4c9b7f6c54e5b0d5a98b8720b6dce"
integrity sha512-xkKXbZAdeboB7MsjGClE/6em98huy6kwxqM4OYsXeVS+uHYhVm07Owoz5xVraMMl3uaRkqsz/lfv7OCCeq+U3A==
"@ivuorinen/eslint-config@^0.4.42":
version "0.4.42"
resolved "https://registry.yarnpkg.com/@ivuorinen/eslint-config/-/eslint-config-0.4.42.tgz#dabd9154b82a89f9454cdb3c89e6386c057f74dd"
integrity sha512-KVAsTLfsRcMtWyaupt1fOXspzeqJ6CJmFfR4v40fU1czv5izjpWnIpzTa7hURMZauzVdPWAWLtZ/KhWAL9ghzw==
"@ivuorinen/eslint-config@^0.5.0":
version "0.5.0"
resolved "https://registry.yarnpkg.com/@ivuorinen/eslint-config/-/eslint-config-0.5.0.tgz#d30f0fcacb527ac210ceb63eab535e765869a6b9"
integrity sha512-CaD7TZ1TAKHNbpsiklo/R9CEzVdN7EF0wBHJCG4x9HDH14TWLbT+aDER9EzfyYdmOb0sbhvwLE0hRVMKuvKCcQ==
dependencies:
"@ivuorinen/config-checker" "^1.1.3"
eslint "9.4.0"
"@eslint/js" "^9.9.0"
"@ivuorinen/config-checker" "^1.1.5"
eslint "^9"
eslint-config-prettier "^9"
eslint-config-standard "^17"
eslint-plugin-import "^2"
eslint-plugin-jest "^28"
eslint-plugin-n "^17"
eslint-plugin-promise "^6"
eslint-plugin-promise "^7"
eslint-plugin-sonarjs "^1"
globals "^15.9.0"
"@ivuorinen/markdownlint-config@^0.2.8":
version "0.2.8"
resolved "https://registry.yarnpkg.com/@ivuorinen/markdownlint-config/-/markdownlint-config-0.2.8.tgz#5f11571934ed4d2a6334c54fcbcfb56bee3c4fa4"
integrity sha512-vXhFZr2h8k+1ueZ+nPPvCz3GRsmArlcEQxizgYNOD7LAkHQjWC/d+WfFs+Mf/6X2Kvu+HLUR9mFkXSwdDuP42Q==
"@ivuorinen/markdownlint-config@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@ivuorinen/markdownlint-config/-/markdownlint-config-0.3.0.tgz#12707ac8af10f08504ab6e6a9086ce28a076fa14"
integrity sha512-TkbF4zktyBTDtev8GA88ilUgngdiIZCrt5O7Yl0jM84Jhp9adyIpt0J66gZxJH/UhYKV4dUo+3wpdK86fRYHtQ==
dependencies:
"@ivuorinen/config-checker" "^1.1.3"
"@ivuorinen/config-checker" "^1.1.5"
markdownlint-cli "0.41.0"
"@ivuorinen/prettier-config@^0.2.14":
version "0.2.14"
resolved "https://registry.yarnpkg.com/@ivuorinen/prettier-config/-/prettier-config-0.2.14.tgz#22d8850669a1b17cb6194c0af81a82b7c1f1729a"
integrity sha512-vyAUmV6tF+KkdSchiPCRZ4jV1T8viDqI0V+QDDvP5LcNdQX1zc1XYbyRR1wWzAhXOJi2D6AbKhPLIV3Wbnuzuw==
"@ivuorinen/prettier-config@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@ivuorinen/prettier-config/-/prettier-config-0.3.0.tgz#5e8d8eabad6bed508d2991bbc71ccc0d2b6036b6"
integrity sha512-k8NgdQ81UD00+F5avTlj/h+RVB07Il1EUe97xoCmYXfrii/1RpMwG7Lu9ZH1YTo2N8P4K59c3M2/8sW95AztiA==
dependencies:
"@ivuorinen/config-checker" "^1.1.3"
prettier "3.3.2"
"@ivuorinen/config-checker" "^1.1.5"
prettier "3.3.3"
"@ivuorinen/semantic-release-config@^0.2.22":
version "0.2.22"
resolved "https://registry.yarnpkg.com/@ivuorinen/semantic-release-config/-/semantic-release-config-0.2.22.tgz#199bf3edc0695700528cc5e2607fa93b5b998c11"
integrity sha512-uS/DHU8A6f97K4idFMQRARy/wGVOsNcoHFZ/VSy4A+EB+nE/ZmRxa78WMI6sphQc/WzH3seIO2G571k36ww1Ng==
"@ivuorinen/semantic-release-config@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@ivuorinen/semantic-release-config/-/semantic-release-config-0.3.0.tgz#42c7d130da2e9772ffa7dd41c7543aa623836667"
integrity sha512-Jw8VOvIieR5RDsgnDBurI1ZWu0mh2c6sbI/aJb2xDHvOF2Ud4XHSuKnoBEX5Lvf9Tt9w3U2GUxOKil6KsVcsYQ==
dependencies:
"@ivuorinen/config-checker" "^1.1.3"
"@ivuorinen/config-checker" "^1.1.5"
"@semantic-release/changelog" "6.0.3"
"@semantic-release/git" "10.0.1"
semantic-release "24.0.0"
semantic-release "24.1.0"
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -923,6 +927,11 @@ acorn@^8.11.3:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c"
integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==
acorn@^8.12.0:
version "8.12.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248"
integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
@@ -1162,15 +1171,15 @@ braces@^3.0.3:
dependencies:
fill-range "^7.1.1"
browserslist@4.23.1:
version "4.23.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96"
integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==
browserslist@4.23.3:
version "4.23.3"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800"
integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==
dependencies:
caniuse-lite "^1.0.30001629"
electron-to-chromium "^1.4.796"
node-releases "^2.0.14"
update-browserslist-db "^1.0.16"
caniuse-lite "^1.0.30001646"
electron-to-chromium "^1.5.4"
node-releases "^2.0.18"
update-browserslist-db "^1.1.0"
cacache@^18.0.0, cacache@^18.0.3:
version "18.0.3"
@@ -1206,10 +1215,10 @@ callsites@^3.0.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
caniuse-lite@^1.0.30001629:
version "1.0.30001636"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz#b15f52d2bdb95fad32c2f53c0b68032b85188a78"
integrity sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==
caniuse-lite@^1.0.30001646:
version "1.0.30001651"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz#52de59529e8b02b1aedcaaf5c05d9e23c0c28138"
integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==
chalk@^2.3.2, chalk@^2.4.2:
version "2.4.2"
@@ -1588,10 +1597,10 @@ eastasianwidth@^0.2.0:
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
electron-to-chromium@^1.4.796:
version "1.4.803"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.803.tgz#cf55808a5ee12e2a2778bbe8cdc941ef87c2093b"
integrity sha512-61H9mLzGOCLLVsnLiRzCbc63uldP0AniRYPV3hbGVtONA1pI7qSGILdbofR7A8TMbOypDocEAjH/e+9k1QIe3g==
electron-to-chromium@^1.5.4:
version "1.5.13"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6"
integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==
emoji-regex@^8.0.0:
version "8.0.0"
@@ -1846,7 +1855,7 @@ eslint-plugin-jest@^28:
dependencies:
"@typescript-eslint/utils" "^6.0.0 || ^7.0.0"
eslint-plugin-n@^17, eslint-plugin-n@^17.0.0:
eslint-plugin-n@^17:
version "17.9.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-17.9.0.tgz#91b43d4e10a35e455bfac2c64671f9cecc396590"
integrity sha512-CPSaXDXdrT4nsrOrO4mT4VB6FMUkoySRkHWuuJJHVqsIEjIeZgMY1H7AzSwPbDScikBmLN82KeM1u7ixV7PzGg==
@@ -1860,20 +1869,20 @@ eslint-plugin-n@^17, eslint-plugin-n@^17.0.0:
minimatch "^9.0.0"
semver "^7.5.3"
eslint-plugin-promise@^6:
version "6.2.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz#e24ab0e3c0a25fa227d98d9ff612156b5af15945"
integrity sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==
eslint-plugin-promise@^7:
version "7.1.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-7.1.0.tgz#06b3ad6d36b3c3ef3ec201c8a8d97049cf5dbb20"
integrity sha512-8trNmPxdAy3W620WKDpaS65NlM5yAumod6XeC4LOb+jxlkG4IVcp68c6dXY2ev+uT4U1PtG57YDV6EGAXN0GbQ==
eslint-plugin-sonarjs@^1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-1.0.3.tgz#423de6f9244c886633ff36183c6fbc9fb1ed867d"
integrity sha512-6s41HLPYPyDrp+5+7Db5yFYbod6h9pC7yx+xfcNwHRcLe1EZwbbQT/tdOAkR7ekVUkNGEvN3GmYakIoQUX7dEg==
eslint-scope@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.1.tgz#a9601e4b81a0b9171657c343fb13111688963cfc"
integrity sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==
eslint-scope@^8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.2.tgz#5cbb33d4384c9136083a71190d548158fe128f94"
integrity sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==
dependencies:
esrecurse "^4.3.0"
estraverse "^5.2.0"
@@ -1888,16 +1897,16 @@ eslint-visitor-keys@^4.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb"
integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==
eslint@9.4.0:
version "9.4.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.4.0.tgz#79150c3610ae606eb131f1d648d5f43b3d45f3cd"
integrity sha512-sjc7Y8cUD1IlwYcTS9qPSvGjAC8Ne9LctpxKKu3x/1IC9bnOg98Zy6GxEJUfr1NojMgVPlyANXYns8oE2c1TAA==
eslint@^9:
version "9.9.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.1.tgz#147ac9305d56696fb84cf5bdecafd6517ddc77ec"
integrity sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
"@eslint/config-array" "^0.15.1"
"@eslint-community/regexpp" "^4.11.0"
"@eslint/config-array" "^0.18.0"
"@eslint/eslintrc" "^3.1.0"
"@eslint/js" "9.4.0"
"@eslint/js" "9.9.1"
"@humanwhocodes/module-importer" "^1.0.1"
"@humanwhocodes/retry" "^0.3.0"
"@nodelib/fs.walk" "^1.2.8"
@@ -1906,10 +1915,10 @@ eslint@9.4.0:
cross-spawn "^7.0.2"
debug "^4.3.2"
escape-string-regexp "^4.0.0"
eslint-scope "^8.0.1"
eslint-scope "^8.0.2"
eslint-visitor-keys "^4.0.0"
espree "^10.0.1"
esquery "^1.4.2"
espree "^10.1.0"
esquery "^1.5.0"
esutils "^2.0.2"
fast-deep-equal "^3.1.3"
file-entry-cache "^8.0.0"
@@ -1937,10 +1946,19 @@ espree@^10.0.1:
acorn-jsx "^5.3.2"
eslint-visitor-keys "^4.0.0"
esquery@^1.4.2:
version "1.5.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
espree@^10.1.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/espree/-/espree-10.1.0.tgz#8788dae611574c0f070691f522e4116c5a11fc56"
integrity sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==
dependencies:
acorn "^8.12.0"
acorn-jsx "^5.3.2"
eslint-visitor-keys "^4.0.0"
esquery@^1.5.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
dependencies:
estraverse "^5.1.0"
@@ -2324,6 +2342,11 @@ globals@^15.0.0:
resolved "https://registry.yarnpkg.com/globals/-/globals-15.5.0.tgz#093c5b7677809f6cc9dd2c01518b1b0962f1f085"
integrity sha512-r7/9tQj5RylGxt/BKGv0D2SvehYvRFYg4ukSNk+EuZxvWI7uK/MJFmOCLq8aKvgh3EVBYFbBlOMAtaITXZr80w==
globals@^15.9.0:
version "15.9.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-15.9.0.tgz#e9de01771091ffbc37db5714dab484f9f69ff399"
integrity sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==
globalthis@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236"
@@ -3293,9 +3316,9 @@ merge2@^1.3.0, merge2@^1.4.1:
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4:
version "4.0.7"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5"
integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==
version "4.0.8"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
dependencies:
braces "^3.0.3"
picomatch "^2.3.1"
@@ -3315,7 +3338,7 @@ mimic-fn@^4.0.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
minimatch@^3.0.5, minimatch@^3.1.2:
minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -3418,6 +3441,11 @@ mute-stream@^1.0.0:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e"
integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==
mvdan-sh@^0.10.1:
version "0.10.1"
resolved "https://registry.yarnpkg.com/mvdan-sh/-/mvdan-sh-0.10.1.tgz#5b3a4462a89cf20739b12d851589342c875f4d1f"
integrity sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==
mz@^2.4.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
@@ -3473,10 +3501,10 @@ node-gyp@^10.0.0, node-gyp@^10.1.0:
tar "^6.1.2"
which "^4.0.0"
node-releases@^2.0.14:
version "2.0.14"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
node-releases@^2.0.18:
version "2.0.18"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
nopt@^7.0.0, nopt@^7.2.1:
version "7.2.1"
@@ -4008,10 +4036,18 @@ prelude-ls@^1.2.1:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
prettier@3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a"
integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==
prettier-plugin-sh@^0.14.0:
version "0.14.0"
resolved "https://registry.yarnpkg.com/prettier-plugin-sh/-/prettier-plugin-sh-0.14.0.tgz#22b186adea79b36212ccd9faa8dd01f33ef34ff6"
integrity sha512-hfXulj5+zEl/ulrO5kMuuTPKmXvOg0bnLHY1hKFNN/N+/903iZbNp8NyZBTsgI8dtkSgFfAEIQq0IQTyP1ZVFQ==
dependencies:
mvdan-sh "^0.10.1"
sh-syntax "^0.4.1"
prettier@3.3.3:
version "3.3.3"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105"
integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==
pretty-ms@^9.0.0:
version "9.0.0"
@@ -4274,10 +4310,10 @@ safe-regex-test@^1.0.3:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
semantic-release@24.0.0:
version "24.0.0"
resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-24.0.0.tgz#779493f1426469ce0ef60cf74e50aba6e7a0af16"
integrity sha512-v46CRPw+9eI3ZuYGF2oAjqPqsfbnfFTwLBgQsv/lch4goD09ytwOTESMN4QIrx/wPLxUGey60/NMx+ANQtWRsA==
semantic-release@24.1.0:
version "24.1.0"
resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-24.1.0.tgz#da799e6def44a0c3708fa1cfc2685d20e29b0f83"
integrity sha512-FwaE2hKDHQn9G6GA7xmqsc9WnsjaFD/ppLM5PUg56Do9oKSCf+vH6cPeb3hEBV/m06n8Sh9vbVqPjHu/1onzQw==
dependencies:
"@semantic-release/commit-analyzer" "^13.0.0-beta.1"
"@semantic-release/error" "^4.0.0"
@@ -4353,6 +4389,13 @@ set-function-name@^2.0.1:
functions-have-names "^1.2.3"
has-property-descriptors "^1.0.2"
sh-syntax@^0.4.1:
version "0.4.2"
resolved "https://registry.yarnpkg.com/sh-syntax/-/sh-syntax-0.4.2.tgz#3bad5c6134b510e7b4c53b16f409ce4fd2a65245"
integrity sha512-/l2UZ5fhGZLVZa16XQM9/Vq/hezGGbdHeVEA01uWjOL1+7Ek/gt6FquW0iKKws4a9AYPYvlz6RyVvjh3JxOteg==
dependencies:
tslib "^2.6.2"
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -4796,6 +4839,11 @@ tsconfig-paths@^3.15.0:
minimist "^1.2.6"
strip-bom "^3.0.0"
tslib@^2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0"
integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==
tuf-js@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.1.tgz#fdd8794b644af1a75c7aaa2b197ddffeb2911b56"
@@ -4883,11 +4931,6 @@ typedarray.prototype.slice@^1.0.3:
typed-array-buffer "^1.0.2"
typed-array-byte-offset "^1.0.2"
typescript@>=4:
version "5.4.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611"
integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==
uc.micro@^2.0.0, uc.micro@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee"
@@ -4954,10 +4997,10 @@ universalify@^2.0.0:
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
update-browserslist-db@^1.0.16:
version "1.0.16"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356"
integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==
update-browserslist-db@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e"
integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==
dependencies:
escalade "^3.1.2"
picocolors "^1.0.1"