Compare commits

...

110 Commits

Author SHA1 Message Date
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
77b0428cec chore(docs): update nvim keybindings 2024-06-30 14:17:35 +03:00
387432b27b chore(ssh): vine now accepts my id_rsa key 2024-06-25 20:38:59 +03:00
88fa706b75 chore(docs): update nvim keybindings 2024-06-25 09:53:48 +03:00
96ce9fec0c chore(docs): update tmux keybinding 2024-06-25 01:43:10 +03:00
66d5fbc8ac chore(meta): add light and dark modes to readme 2024-06-25 01:42:23 +03:00
cc3ceb4176 chore(meta): update screenshots 2024-06-25 01:30:29 +03:00
0f9c69bb65 chore(meta): update oh-my-posh screenshot 2024-06-25 01:25:24 +03:00
c754746b9f chore(scripts): extract oh-my-posh screenshotter 2024-06-25 01:24:44 +03:00
df5cab6a88 fix(scripts): some typoes in scripts/shared.sh 2024-06-25 01:23:22 +03:00
b9ddba4666 fix(scripts): oh-my-posh config path 2024-06-25 01:16:38 +03:00
77e92ef15e chore(scripts): tweak ntfy download path 2024-06-25 01:15:52 +03:00
383bc2b052 chore(scripts): tweak cargo updates 2024-06-25 01:15:15 +03:00
0e109c3da3 fix(config): oh-my-posh: remove shell_integration 2024-06-25 01:14:16 +03:00
50abd5aa30 feat(alacritty): update theme automagically 2024-06-23 01:23:37 +03:00
082e27fb0a chore(nvim-kickstart): update submodule 2024-06-23 01:22:26 +03:00
e05e68f5d1 fix(bin): msgr typo 2024-06-20 00:36:23 +03:00
074c169e3c feat(alacritty): theme changing improvements 2024-06-20 00:36:01 +03:00
636ea749ac chore(nvim): update lazyvim.json 2024-06-19 15:41:25 +03:00
da2a2e0f81 chore(nvim-kickstart): update submodule 2024-06-19 15:34:00 +03:00
0ef12b61ac feat(alacritty): change theme based on dark-notify 2024-06-19 15:31:44 +03:00
c6fc3db52f chore(alacritty): clean up config 2024-06-19 15:31:03 +03:00
1bde81a673 chore(shell): update omp cfg path to dotfiles 2024-06-18 08:50:10 +03:00
d60248f356 chore(tmux): tweak light status-current-style bg 2024-06-17 16:18:34 +03:00
40e8b9443b chore(tmux): cleanup, fixes, theme tweaks 2024-06-17 03:55:03 +03:00
8a032a2804 chore(deps): update yarn packages 2024-06-17 03:53:30 +03:00
367be373c4 fix(zsh): bring back tmux and zsh-titles 2024-06-17 03:53:13 +03:00
cf2f98d5c0 chore(zsh): tweak config 2024-06-16 08:52:44 +03:00
a3704f7db9 chore(ssh): add turing nodes to ssh config 2024-06-15 15:40:50 +03:00
7c359ffea0 chore(tmux): tweak config 2024-06-15 15:40:01 +03:00
9542624323 chore(zsh): tweak zshrc and move omp conf to omp/ 2024-06-15 15:39:41 +03:00
ivuorinen
b0d74bad1a chore(git): Update submodules (automated)
tmux/tmux-dark-notify v0.1.1
2024-06-13 03:04:48 +00:00
fcade15933 chore(nvim): update nvim-kickstart 2024-06-09 16:00:01 +03:00
6860909d39 chore(brew): Update bundle 2024-06-09 15:58:11 +03:00
493ad17c15 feat: antidot
Cleans up your $HOME from those pesky dotfiles
2024-06-09 15:57:41 +03:00
ivuorinen
0495ac1ea8 chore(git): Update submodules (automated)
tmux/tmux-dark-notify v0.1.0
2024-06-08 03:04:45 +00:00
9b5d372a74 chore: tweaks, updates 2024-06-07 11:38:44 +03:00
9d04343a26 chore(tmux): update tmux-dark-notify 2024-06-07 11:38:30 +03:00
ivuorinen
4aa0fba682 chore(git): Update submodules (automated)
tmux/tmux-dark-notify v0.1.0
2024-06-07 03:05:14 +00:00
ad6482b34a chore(nvim): update nvim-kickstart 2024-06-06 22:56:40 +03:00
113e27734a chore(nvim): config tweaks, lazyvim updates 2024-06-06 22:54:45 +03:00
378abfe896 feat(tmux): tmux-dark-notify + themes 2024-06-06 22:53:28 +03:00
eadf1e5c84 chore(nvim): update nvim-kickstart 2024-06-06 21:09:02 +03:00
ea4d185fb4 chore(brew): Update bundle 2024-06-06 21:06:58 +03:00
22bd8ca870 chore(alacritty): hide_when_typing = false 2024-06-06 10:45:34 +03:00
7ee81b005c chore(tmux): tweak visual bell and activity msg 2024-06-06 10:45:34 +03:00
3faf8224e8 chore(nvim): update nvim-kickstart submodule 2024-06-04 14:39:27 +03:00
d028f37c00 chore(nvim): update lazyvim.json extras 2024-06-04 14:39:02 +03:00
1df05ac0ba feat: ssh config for demons 2024-06-03 12:38:54 +03:00
e54e202281 chore(tmux): update config 2024-06-02 21:12:27 +03:00
c226943aa9 chore(nvim): update lazyvim packages 2024-06-02 21:11:56 +03:00
dda4b65458 fix: huskyrc nvm location 2024-05-22 16:47:14 +03:00
7d564d0b4d feat: if exports-secrets exists, source it 2024-05-22 16:46:34 +03:00
bc30e5f7a6 chore(config): tweak alacritty configuration 2024-05-16 12:19:56 +03:00
9e2f7e8f1b chore(config): change alacritty decorations to Full 2024-05-16 02:20:31 +03:00
7b47e49804 chore(config): ssh add ServerAlive settings 2024-05-16 02:17:12 +03:00
1be7649122 chore(tmux): tweak config, move status to left 2024-05-16 02:16:00 +03:00
453d54bc7f chore(config): tweak alacritty config 2024-04-26 12:45:02 +03:00
7ede7b9ac1 chore: update kickstart.nvim 2024-04-22 08:56:49 +03:00
a90743a09c feat(bin): x-gh-get-latest-* release and version helpers 2024-04-21 14:56:41 +03:00
185d28e587 feat: kickstart.nvim, and aliases 2024-04-21 14:55:36 +03:00
renovate[bot]
37f023351d chore(deps): update yarn to v1.22.22
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-17 05:10:25 +00:00
39523e9234 chore: add packageManager to package.json 2024-04-16 12:20:06 +03:00
dependabot[bot]
1f8fc0d289 chore(deps): bump tar from 6.2.0 to 6.2.1 (#16) 2024-04-12 08:48:11 +03:00
c083d2a20a feat(dfm): Add brew leaves and clean commands 2024-04-08 02:51:32 +03:00
75c6a0bccd chore(shell): update exports-apps to include pyenv 2024-04-08 02:49:48 +03:00
5ce86b3229 chore(nvim): update lazyvim.json 2024-04-08 02:49:08 +03:00
885189e4ff chore(nvim): update lazyvim.json 2024-03-09 10:21:32 +02:00
8f3f4d7ed9 chore(brew): update brewfile, add env to skip mas 2024-03-09 10:21:05 +02:00
03a1b5fb85 chore(brew): Remove unused formula and casks 2024-03-06 09:59:44 +02:00
7b83f6e943 chore(deps): upgraded yarn packages 2024-03-06 09:11:40 +02:00
261ff41e28 feat(nvim): neo-tree should show interesting files 2024-03-04 20:57:27 +02:00
36ad2a2ad9 chore(config): Cleanup 2024-03-03 16:39:22 +02:00
108 changed files with 5269 additions and 3794 deletions

View File

@@ -27,3 +27,9 @@ space_redirects = true
keep_padding = false keep_padding = false
function_next_line = true # --func-next-line 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

64
.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, 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. 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 ## Setup
### First time setup ### First time setup
@@ -23,7 +26,11 @@ fork or download the repo as a zip and go from there with your own configs.
## The looks ## The looks
![screenshot of tmux with nvim editing this repo](./screenshots/tmux-nvim.png) ![screenshot of the oh-my-posh shell](./screenshots/oh-my-posh.png)
![screenshot of light version of tmux with nvim editing this repo](./screenshots/tmux-nvim-kickstart-light.png)
![screenshot of dark version of tmux with nvim editing this repo](./screenshots/tmux-nvim-kickstart-dark.png)
## Interesting files and locations ## Interesting files and locations
@@ -31,7 +38,7 @@ fork or download the repo as a zip and go from there with your own configs.
| Path | Description | | Path | Description |
| ------------------- | -------------------------------------------- | | ------------------- | -------------------------------------------- |
| `.github` | GitHub Repository configuration files. | | `.github` | GitHub Repository configuration files, meta. |
| `hosts/{hostname}/` | Configs that should apply to that host only. | | `hosts/{hostname}/` | Configs that should apply to that host only. |
| `local/bin` | Helper scripts that I've collected or wrote. | | `local/bin` | Helper scripts that I've collected or wrote. |
| `scripts` | Setup scripts. | | `scripts` | Setup scripts. |
@@ -47,7 +54,9 @@ fork or download the repo as a zip and go from there with your own configs.
### dfm - the dotfiles manager ### 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 ## Configuration
@@ -62,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_DATA_HOME` | `$HOME/.local/share` | User-specific data files |
| `$XDG_STATE_HOME` | `$HOME/.local/state` | App state that should persist between restarts | | `$XDG_STATE_HOME` | `$HOME/.local/state` | App state that should persist between restarts |
#### XDG_BIN_HOME (`$HOME/.local/bin`) Please see [docs/folders.md][docs-folders] for more information.
`$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 seperated with a colon ':'.
[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 [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", "$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["local>ivuorinen/.github:renovate-config"] "extends": ["local>ivuorinen/renovate-config"]
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

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

1
.gitignore vendored
View File

@@ -10,6 +10,7 @@ config/cheat/cheatsheets/tldr/*
config/git/credentials config/git/credentials
config/npm/npmrc config/npm/npmrc
config/zsh/.zcompdump config/zsh/.zcompdump
config/alacritty/theme-active.toml
ssh/local.d/* ssh/local.d/*
!ssh/local.d/.gitkeep !ssh/local.d/.gitkeep
!.gitkeep !.gitkeep

9
.gitmodules vendored
View File

@@ -58,3 +58,12 @@
[submodule "cheat-tldr"] [submodule "cheat-tldr"]
path = config/cheat/cheatsheets/tldr path = config/cheat/cheatsheets/tldr
url = https://github.com/ivuorinen/cheatsheet-tldr.git url = https://github.com/ivuorinen/cheatsheet-tldr.git
[submodule "nvim-kickstart"]
path = config/nvim-kickstart
url = https://github.com/ivuorinen/kickstart.nvim
[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"
]
}

View File

@@ -1,8 +1,12 @@
.mypy_cache/* .mypy_cache/*
tools/dotbot*
local/bin/antigen.zsh
config/cheat/cheatsheets/community
config/tmux/plugins/*
lazy-lock.json
Brewfile.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 = { module.exports = {
plugins: ['prettier-plugin-sh'],
...require('@ivuorinen/prettier-config'), ...require('@ivuorinen/prettier-config'),
trailingComma: 'all', trailingComma: 'all',
// Add custom options below: // Add custom options below:

View File

@@ -10,11 +10,16 @@ git submodule add --name dotbot-include \
git submodule add --name dotbot-pip \ git submodule add --name dotbot-pip \
-f https://github.com/sobolevn/dotbot-pip.git tools/dotbot-pip -f https://github.com/sobolevn/dotbot-pip.git tools/dotbot-pip
git submodule add --name nvim-kickstart \
-f https://github.com/ivuorinen/kickstart.nvim config/nvim-kickstart
# other repos # other repos
git submodule add --name cheat-community \ git submodule add --name cheat-community \
-f https://github.com/cheat/cheatsheets.git config/cheat/cheatsheets/community -f https://github.com/cheat/cheatsheets.git config/cheat/cheatsheets/community
git submodule add --name cheat-tldr \ git submodule add --name cheat-tldr \
-f https://github.com/ivuorinen/cheatsheet-tldr.git config/cheat/cheatsheets/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 # tmux plugin manager and plugins
git submodule add --name tmux/tmux-continuum \ git submodule add --name tmux/tmux-continuum \
@@ -35,6 +40,8 @@ git submodule add --name tmux/tmux-yank \
-f https://github.com/tmux-plugins/tmux-yank.git config/tmux/plugins/tmux-yank -f https://github.com/tmux-plugins/tmux-yank.git config/tmux/plugins/tmux-yank
git submodule add --name tmux/tmux-current-pane-hostname \ git submodule add --name tmux/tmux-current-pane-hostname \
-f https://github.com/soyuka/tmux-current-pane-hostname.git config/tmux/plugins/tmux-current-pane-hostname -f https://github.com/soyuka/tmux-current-pane-hostname.git config/tmux/plugins/tmux-current-pane-hostname
git submodule add --name tmux/tmux-dark-notify \
-f https://github.com/erikw/tmux-dark-notify.git config/tmux/plugins/tmux-dark-notify
# Takes submodules and sets them to ignore all changes # Takes submodules and sets them to ignore all changes
for MODULE in $(git config --file .gitmodules --get-regexp path | awk '{ print $2 }'); do for MODULE in $(git config --file .gitmodules --get-regexp path | awk '{ print $2 }'); do

View File

@@ -1,27 +1,11 @@
# this is my bashrc config. there are many like it, but this one is mine. # this is my bashrc config. there are many like it, but this one is mine.
# shellcheck shell=bash # shellcheck shell=bash
# Defaults
export DOTFILES="$HOME/.dotfiles" export DOTFILES="$HOME/.dotfiles"
export PATH="$HOME/.local/bin:$DOTFILES/local/bin:$PATH"
export SHARED_SCRIPTS_SOURCED=0
# Explicitly set XDG folders source "$DOTFILES/config/shared.sh"
# 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
# shellcheck source=../config/fzf/fzf.bash # shellcheck source=../config/fzf/fzf.bash
[ -f "${DOTFILES}/config/fzf/fzf.bash" ] && [ -f "${DOTFILES}/config/fzf/fzf.bash" ] &&
@@ -30,12 +14,13 @@ x-load-configs
# Import ssh keys in keychain # Import ssh keys in keychain
ssh-add -A 2>/dev/null ssh-add -A 2>/dev/null
x-have rbenv && { x-have oh-my-posh && {
eval "$(rbenv init - bash)" eval "$(oh-my-posh init bash --config "$DOTFILES/config/omp/own.toml")"
} }
# eval "$(starship init bash)" . "$XDG_BIN_HOME/asdf/asdf.sh"
x-have oh-my-posh && { . "$XDG_BIN_HOME/asdf/completions/asdf.bash"
eval "$(oh-my-posh init bash --config $XDG_CONFIG_HOME/oh-my-posh.omp.json)"
x-have antidot && {
eval "$(antidot init)"
} }
source "$DOTFILES/config/alias"

View File

@@ -1,6 +1,4 @@
#!/bin/env bash #!/bin/env bash
export NVM_DIR="$HOME/.nvm" [ -z "$NVM_DIR" ] && export NVM_DIR="$HOME/.config/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads 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

View File

@@ -1,19 +1,6 @@
# shellcheck shell=bash # shellcheck shell=bash
# vim: filetype=zsh # vim: filetype=zsh
export PATH="$HOME/.local/bin:$HOME/.dotfiles/local/bin:$HOME/.local/go/bin:$PATH"
export DOTFILES="$HOME/.dotfiles" export DOTFILES="$HOME/.dotfiles"
export PATH="$HOME/.local/bin:$DOTFILES/local/bin:$PATH"
# Explicitly set XDG folders export SHARED_SCRIPTS_SOURCED=0
# 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"

View File

@@ -1,112 +1,128 @@
# this is my zsh config. there are many like it, but this one is mine. # this is my zsh config. there are many like it, but this one is mine.
# shellcheck shell=bash # shellcheck shell=bash
# export VERBOSE=1
# export DEBUG=1
export DOTFILES="$HOME/.dotfiles" export DOTFILES="$HOME/.dotfiles"
# Explicitly set XDG folders source "$DOTFILES/config/shared.sh"
# 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 x-path-prepend "/usr/local/bin"
export XDG_BIN_HOME="$HOME/.local/bin" x-path-prepend "/opt/homebrew/bin"
export XDG_CACHE_HOME="$HOME/.cache" x-path-prepend "$HOME/.local/share/cargo/bin"
export XDG_RUNTIME_DIR="$HOME/.local/run" x-path-prepend "$HOME/.local/share/bob/nvim-bin"
x-path-prepend "$HOME/.local/bin"
x-path-prepend "$DOTFILES/local/bin"
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" eval "$(oh-my-posh init zsh --config "$DOTFILES/config/omp/own.toml")"
x-load-configs # Load asdf
export ASDF_DIR="$XDG_BIN_HOME/asdf"
export COMPLETION_WAITING_DOTS=true if [[ -d $ASDF_DIR ]]; then
[[ -d $ASDF_DIR/bin ]] && x-path-prepend "$ASDF_DIR/bin"
if type brew &> /dev/null; then [[ -d $ASDF_DIR/shims ]] && x-path-prepend "$ASDF_DIR/shims"
eval "$(brew shellenv)" [[ -d $ASDF_DIR/completions ]] && fpath=("$ASDF_DIR/completions" $fpath)
FPATH="$HOMEBREW_PREFIX/share/zsh/site-functions:${FPATH}" [[ -d $ASDF_DIR/plugins ]] && fpath=("$ASDF_DIR/plugins" $fpath)
source "$ASDF_DIR/asdf.sh"
fi fi
export ZSH_CUSTOM_COMPLETION_PATH="$XDG_CONFIG_HOME/zsh/completion" # Function to load antigen if available
x-dc "$ZSH_CUSTOM_COMPLETION_PATH" 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"
# Add completion scripts to zsh path antigen use oh-my-zsh
FPATH="$ZSH_CUSTOM_COMPLETION_PATH:$FPATH"
# Try to load antigen, if present export ZSH_TMUX_AUTOSTART=true
ANTIGEN_ZSH_PATH="$XDG_BIN_HOME/antigen.zsh" export ZSH_TMUX_CONFIG="$DOTFILES/config/tmux/tmux.conf"
# shellcheck source=../../.local/bin/antigen.zsh export ZSH_TMUX_UNICODE=true
[[ -f "$ANTIGEN_ZSH_PATH" ]] && source "$ANTIGEN_ZSH_PATH" export ZSH_TMUX_AUTOQUIT=false
export ZSH_TMUX_DEFAULT_SESSION_NAME=main
# antigen is present # z, the zsh version
antigen use oh-my-zsh export ZSHZ_DATA="$XDG_STATE_HOME/z"
antigen bundle z
export ZSH_TMUX_AUTOSTART=true # these should be always available
export ZSH_TMUX_CONFIG="$DOTFILES/config/tmux/tmux.conf" antigen bundle brew
export ZSH_TMUX_UNICODE=true antigen bundle tmux
export ZSH_TMUX_AUTOQUIT=false antigen bundle colored-man-pages
export ZSH_TMUX_DEFAULT_SESSION_NAME=main antigen bundle ssh-agent
antigen bundle jreese/zsh-titles
antigen bundle zsh-users/zsh-completions
export NVM_DIR="$XDG_CONFIG_HOME/nvm" x-have python && antigen bundle MichaelAquilina/zsh-autoswitch-virtualenv
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME"/npm/npmrc
# z, the zsh version # this needs to be the last item
export ZSHZ_DATA="$XDG_STATE_HOME/z" antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle z antigen apply
fi
# these should be always available
antigen bundle tmux
antigen bundle colored-man-pages
antigen bundle command-not-found
antigen bundle ssh-agent
antigen bundle jreese/zsh-titles
antigen bundle zsh-users/zsh-completions
# these should be available if there's need
# x-have brew && antigen bundle brew
# x-have php && antigen bundle php
x-have python && antigen bundle MichaelAquilina/zsh-autoswitch-virtualenv
# nvm is a strange beast
zstyle ':omz:plugins:nvm' autoload yes
antigen bundle nvm
# antigen bundle "$DOTFILES/config/zsh/plugins/nvm-auto-use"
# nice to have stuff
# antigen bundle gcloud
# 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 rbenv && {
eval "$(rbenv init - zsh)"
} }
x-have pyenv && { # Function to source FZF configuration
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" source_fzf_config()
eval "$(pyenv init -)" {
eval "$(pyenv virtualenv-init -)" 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 # Function to initialize pyenv if available
[[ -n "$TMUX" ]] && { initialize_pyenv()
# Autoupdate tmux window name {
TMUX_WINDOW_NAME_PLUGIN="$DOTFILES/config/tmux/plugins/tmux-window-name/scripts/rename_session_windows.py" if x-have pyenv; then
[ -f "$TMUX_WINDOW_NAME_PLUGIN" ] && { [[ -d $PYENV_ROOT/bin ]] && x-path-append "$PYENV_ROOT/bin"
tmux-window-name() [[ -d $PYENV_ROOT/shims ]] && x-path-append "$PYENV_ROOT/shims"
{ eval "$(pyenv init -)"
($TMUX_WINDOW_NAME_PLUGIN &) eval "$(pyenv virtualenv-init -)"
} fi
add-zsh-hook chpwd tmux-window-name
tmux-window-name
}
} }
# eval "$(starship init zsh)" # Function to set up tmux window name plugin if tmux is active
x-have oh-my-posh && { setup_tmux_window_name_plugin()
eval "$(oh-my-posh init zsh --config $XDG_CONFIG_HOME/oh-my-posh.omp.json)" {
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
} }
source "$DOTFILES/config/alias"
# Function to initialize antidot if available
initialize_antidot()
{
if x-have antidot; then
eval "$(antidot init)"
fi
}
main()
{
load_antigen
source_fzf_config
initialize_pyenv
setup_tmux_window_name_plugin
initialize_antidot
}
main "$@"
# 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/"

View File

@@ -1,344 +1,51 @@
[colors] import = [
draw_bold_text_with_bright_colors = true # Default to night if the copied one doesn't exist.
"~/.dotfiles/config/alacritty/theme-night.toml",
[colors.bright] "~/.config/alacritty/theme-active.toml"
black = "0x414868" ]
blue = "0x7aa2f7"
cyan = "0x7dcfff"
green = "0x9ece6a"
magenta = "0xbb9af7"
red = "0xf7768e"
white = "0xc0caf5"
yellow = "0xe0af68"
[colors.normal]
black = "0x1d202f"
blue = "0x7aa2f7"
cyan = "0x7dcfff"
green = "0x9ece6a"
magenta = "0xbb9af7"
red = "0xf7768e"
white = "0xa9b1d6"
yellow = "0xe0af68"
[colors.primary]
background = "0x24283b"
foreground = "0xc0caf5"
[env] [env]
TERM = "xterm-256color" TERM = "xterm-256color"
[colors]
draw_bold_text_with_bright_colors = true
[font] [font]
size = 14.0 size = 14.0
[font.bold]
family = "JetBrainsMonoNL Nerd Font Mono"
style = "Bold"
[font.glyph_offset] [font.glyph_offset]
x = 0 x = 0
y = 0 y = 0
[font.normal]
family = "JetBrainsMonoNL Nerd Font Mono"
style = "ExtraLight"
[font.italic] [font.italic]
family = "JetBrainsMonoNL Nerd Font Mono" family = "JetBrainsMonoNL Nerd Font Mono"
style = "Italic" style = "Italic"
[font.normal] [font.bold]
family = "JetBrainsMonoNL Nerd Font Mono" family = "JetBrainsMonoNL Nerd Font Mono"
style = "ExtraLight" style = "Bold"
[font.offset] [font.offset]
x = 0 x = 0
y = 0 y = 0
[[keyboard.bindings]]
action = "Paste"
key = "V"
mods = "Command"
[[keyboard.bindings]]
action = "Copy"
key = "C"
mods = "Command"
[[keyboard.bindings]]
action = "Quit"
key = "Q"
mods = "Command"
[[keyboard.bindings]]
action = "Quit"
key = "W"
mods = "Command"
[[keyboard.bindings]]
action = "SpawnNewInstance"
key = "N"
mods = "Command"
[[keyboard.bindings]]
chars = "\u001BOH"
key = "Home"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001B[1~"
key = "Home"
mode = "~AppCursor"
[[keyboard.bindings]]
chars = "\u001BOF"
key = "End"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001B[4~"
key = "End"
mode = "~AppCursor"
[[keyboard.bindings]]
chars = "\u001B[5;2~"
key = "PageUp"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[5;5~"
key = "PageUp"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[5~"
key = "PageUp"
[[keyboard.bindings]]
chars = "\u001B[6;2~"
key = "PageDown"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[6;5~"
key = "PageDown"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[6~"
key = "PageDown"
[[keyboard.bindings]]
chars = "\u001B[1;2D"
key = "Left"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;5D"
key = "Left"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;3D"
key = "Left"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[D"
key = "Left"
mode = "~AppCursor"
[[keyboard.bindings]]
chars = "\u001BOD"
key = "Left"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001B[1;2C"
key = "Right"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;5C"
key = "Right"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;3C"
key = "Right"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[C"
key = "Right"
mode = "~AppCursor"
[[keyboard.bindings]]
chars = "\u001BOC"
key = "Right"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001B[1;2A"
key = "Up"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;5A"
key = "Up"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;3A"
key = "Up"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[A"
key = "Up"
mode = "~AppCursor"
[[keyboard.bindings]]
chars = "\u001BOA"
key = "Up"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001B[1;2B"
key = "Down"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;5B"
key = "Down"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;3B"
key = "Down"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[B"
key = "Down"
mode = "~AppCursor"
[[keyboard.bindings]]
chars = "\u001BOB"
key = "Down"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001B[Z"
key = "Tab"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001BOP"
key = "F1"
[[keyboard.bindings]]
chars = "\u001BOQ"
key = "F2"
[[keyboard.bindings]]
chars = "\u001BOR"
key = "F3"
[[keyboard.bindings]]
chars = "\u001BOS"
key = "F4"
[[keyboard.bindings]]
chars = "\u001B[15~"
key = "F5"
[[keyboard.bindings]]
chars = "\u001B[17~"
key = "F6"
[[keyboard.bindings]]
chars = "\u001B[18~"
key = "F7"
[[keyboard.bindings]]
chars = "\u001B[19~"
key = "F8"
[[keyboard.bindings]]
chars = "\u001B[20~"
key = "F9"
[[keyboard.bindings]]
chars = "\u001B[21~"
key = "F10"
[[keyboard.bindings]]
chars = "\u001B[23~"
key = "F11"
[[keyboard.bindings]]
chars = "\u001B[24~"
key = "F12"
[[keyboard.bindings]]
key = "Back"
action = "ReceiveChar"
[[keyboard.bindings]]
chars = "\u001B[2~"
key = "Insert"
[[keyboard.bindings]]
chars = "\u001B[3~"
key = "Delete"
[[keyboard.bindings]]
chars = "\u0002&"
key = "W"
mods = "Command"
[[keyboard.bindings]]
chars = "\u0002c"
key = "T"
mods = "Command"
[[keyboard.bindings]]
chars = "\u0002n"
key = "RBracket"
mods = "Command|Shift"
[[keyboard.bindings]]
chars = "\u0002p"
key = "LBracket"
mods = "Command|Shift"
[[keyboard.bindings]]
chars = "\u0002o"
key = "RBracket"
mods = "Command"
[[keyboard.bindings]]
chars = "\u0002;"
key = "LBracket"
mods = "Command"
[[keyboard.bindings]]
chars = "\u0002/"
key = "F"
mods = "Command"
[[mouse.bindings]]
action = "PasteSelection"
mouse = "Middle"
[selection] [selection]
semantic_escape_chars = ",│`|:\"' ()[]{}<>" semantic_escape_chars = ",│`|:\"' ()[]{}<>"
save_to_clipboard = true
[window] [window]
decorations = "none" decorations = "Full"
dynamic_title = true dynamic_title = true
opacity = 0.98 opacity = 0.98
blur = true
[window.dimensions] [window.dimensions]
columns = 200 columns = 200
lines = 100 lines = 75
[window.padding] [window.padding]
x = 5 x = 5

View File

@@ -0,0 +1,40 @@
# TokyoNight Alacritty Colors: Day
# Default colors
[colors.primary]
background = '#e1e2e7'
foreground = '#3760bf'
#[colors.cursor]
#cursor = '#3760bf'
#text = '#e1e2e7'
# Normal colors
[colors.normal]
black = '#e9e9ed'
red = '#f52a65'
green = '#587539'
yellow = '#8c6c3e'
blue = '#2e7de9'
magenta = '#9854f1'
cyan = '#007197'
white = '#6172b0'
# Bright colors
[colors.bright]
black = '#a1a6c5'
red = '#f52a65'
green = '#587539'
yellow = '#8c6c3e'
blue = '#2e7de9'
magenta = '#9854f1'
cyan = '#007197'
white = '#3760bf'
# Indexed Colors
[[colors.indexed_colors]]
index = 16
color = '#b15c00'
[[colors.indexed_colors]]
index = 17
color = '#c64343'

View File

@@ -0,0 +1,40 @@
# TokyoNight Alacritty Colors: Storm
# Default colors
[colors.primary]
background = '#24283b'
foreground = '#c0caf5'
#[colors.cursor]
#cursor = '#c0caf5'
#text = '#24283b'
# Normal colors
[colors.normal]
black = '#1d202f'
red = '#f7768e'
green = '#9ece6a'
yellow = '#e0af68'
blue = '#7aa2f7'
magenta = '#bb9af7'
cyan = '#7dcfff'
white = '#a9b1d6'
# Bright colors
[colors.bright]
black = '#414868'
red = '#f7768e'
green = '#9ece6a'
yellow = '#e0af68'
blue = '#7aa2f7'
magenta = '#bb9af7'
cyan = '#7dcfff'
white = '#c0caf5'
# Indexed Colors
[[colors.indexed_colors]]
index = 16
color = '#ff9e64'
[[colors.indexed_colors]]
index = 17
color = '#db4b4b'

View File

@@ -1,6 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# shellcheck source="../scripts/shared.sh"
# shellcheck disable=1091,2139
# Color the grep output # Color the grep output
alias grep="grep --color" alias grep="grep --color"
@@ -17,6 +15,14 @@ alias ....="cd ../../.."
# cd to git root directory # cd to git root directory
alias cdgr='cd "$(git root)"' 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 # Shortcuts for listing
alias ll="ls -la" alias ll="ls -la"
alias l="ls -a" alias l="ls -a"
@@ -51,6 +57,10 @@ alias tmux='tmux new-session -A -s main'
# tmux: attach or create new session # tmux: attach or create new session
alias ta='tmux attach || tmux' alias ta='tmux attach || tmux'
# nvim
alias nvim-ks='NVIM_APPNAME="nvim-kickstart" nvim'
alias ks='NVIM_APPNAME="nvim-kickstart" nvim'
# watch with: differences, precise, beep and color # watch with: differences, precise, beep and color
alias watchx='watch -dpbc' alias watchx='watch -dpbc'
# delete .DS_Store files # delete .DS_Store files
@@ -99,65 +109,6 @@ if [[ $(uname) == 'Darwin' ]]; then
# Also, clear Apple's System Logs to improve shell startup speed # Also, clear Apple's System Logs to improve shell startup speed
alias emptytrash="sudo rm -rfv /Volumes/*/.Trashes; sudo rm -rfv ~/.Trash; sudo rm -rfv /private/var/log/asl/*.asl" alias emptytrash="sudo rm -rfv /Volumes/*/.Trashes; sudo rm -rfv ~/.Trash; sudo rm -rfv /private/var/log/asl/*.asl"
x-set-php-aliases # Using herd for php now, so this is not needed anymore
# x-set-php-aliases
fi 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
}

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

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

29
config/asdf/tool-versions Normal file
View File

@@ -0,0 +1,29 @@
1password-cli 2.29.0
age 1.2.0
asdf-plugin-manager 1.3.1
bottom 0.9.7
dotenv-linter 3.3.0
editorconfig-checker 2.8.0
eza 0.18.23
fd 10.1.0
github-cli 2.53.0
golang 1.22.5
hadolint 2.12.0
kubectl 1.30.3
lazygit 0.43.1
neovim system
nodejs 22.5.1
pipx 1.6.0
pre-commit 3.8.0
ripgrep 14.1.0
rust 1.79.0
semgrep system
shellcheck 0.10.0
shfmt 3.8.0
terraform-ls 0.33.3
terraform-lsp 0.0.12
terragrunt 0.64.2
tf-summarize 0.3.10
vault 1.17.2+ent
yamllint 1.35.1
yq 4.44.2

View File

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

View File

@@ -2,14 +2,37 @@
# shellcheck shell=bash # shellcheck shell=bash
# vim: filetype=zsh # 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"
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 # Cache commands using bkt if installed
if command -v bkt >&/dev/null; then if command -v bkt &> /dev/null; then
bkt() bkt()
{ {
command bkt --cache-dir="$XDG_CACHE_HOME/bkt" "$@" command bkt --cache-dir="$XDG_CACHE_HOME/bkt" "$@"
} }
else 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. # Optionally write a msg to stderr suggesting users install bkt.
bkt() bkt()
{ {
@@ -18,32 +41,55 @@ else
} }
fi fi
# shorthand for checking if the system has the bin in path, # Shorthand for checking if the system has the bin in path,
# this version does not use caching # this version does not use caching.
# usage: have_command php && php -v # Usage: have_command php && php -v
have_command() 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, # Shorthand for checking if the system has the bin in path,
# this version uses caching # this version uses caching.
# usage: have php && php -v # Usage: have php && php -v
have() 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.
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
# Function to list installed Homebrew packages using bkt caching
brew_installed() brew_installed()
{ {
bkt -- brew list bkt -- brew list
} }
# shorthand for checking if brew package is installed # Shorthand for checking if a Homebrew package is installed
# usage: have_brew php && php -v # Usage: have_brew php && php -v
have_brew() have_brew()
{ {
! x-have brew && return 125 ! have brew && return 125
if bkt -- brew list "$1" &> /dev/null; then if bkt -- brew list "$1" &> /dev/null; then
return 0 return 0
@@ -52,5 +98,359 @@ have_brew()
fi fi
} }
source "$DOTFILES/config/exports-shell" # Alacritty preexec hook to update dynamic title
source "$DOTFILES/config/exports-apps" preexec()
{
print -n -P "\e]0;$1%~\a"
}
# 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
# 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}"
# This seems wrong, but `asdf info` and `versions.bash` differ on path resolution.
export ASDF_DEFAULT_TOOL_VERSIONS_FILENAME=".config/asdf/tool-versions"
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 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"
# 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 -)"
}
# 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"

View File

@@ -1,121 +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
# 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"
# 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"
x-have pyenv && {
export PATH="$PYENV_ROOT/shims:$PATH"
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 # lakka exports
## LUA ## 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" 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 nano='nano -wS -$'
alias gpg=gpg2 alias gpg=gpg2
ACME_PATH="$HOME/.acme.sh" ACME_PATH="$HOME/.acme.sh"
# shellcheck source=$HOME/.acme.sh/acme.sh.env # 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 RVM_PATH="$HOME/.rvm"
export PATH="$RVM_PATH/bin:$PATH" export PATH="$RVM_PATH/bin:$PATH"
# shellcheck source=$HOME/.rvm/scripts/rvm # 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

@@ -1,22 +1,40 @@
tap "1password/tap" tap "1password/tap"
tap "anchore/grype" tap "anchore/grype"
tap "cormacrelf/tap"
tap "ddosify/tap" tap "ddosify/tap"
tap "dm3ch/tap" tap "dm3ch/tap"
tap "doron-cohen/tap"
tap "gesquive/tap" tap "gesquive/tap"
tap "github/gh" tap "github/gh"
tap "homebrew/autoupdate" tap "homebrew/autoupdate"
tap "homebrew/bundle" tap "homebrew/bundle"
tap "homebrew/cask"
tap "homebrew/cask-fonts" tap "homebrew/cask-fonts"
tap "homebrew/core"
tap "homebrew/services" tap "homebrew/services"
tap "jesseduffield/lazygit" tap "jesseduffield/lazygit"
tap "k8sgpt-ai/k8sgpt"
tap "keith/formulae" tap "keith/formulae"
tap "mongodb/brew" tap "mongodb/brew"
tap "reviewdog/tap"
tap "shivammathur/extensions" tap "shivammathur/extensions"
tap "shivammathur/php" tap "shivammathur/php"
tap "teamookla/speedtest" tap "teamookla/speedtest"
tap "xwmx/taps" tap "xwmx/taps"
# Run your GitHub Actions locally
brew "act"
# Simple, modern, secure file encryption
brew "age"
# Mozilla CA certificate store
brew "ca-certificates"
# Mozilla CA bundle for Python
brew "certifi"
# Cryptographic recipes and primitives for Python
brew "cryptography"
# YAML Parser
brew "libyaml"
# Automate deployment, configuration, and upgrading
brew "ansible"
# Checks ansible playbooks for practices and behaviour
brew "ansible-lint"
# Generic-purpose lossless compression algorithm by Google # Generic-purpose lossless compression algorithm by Google
brew "brotli" brew "brotli"
# Library and utilities for processing GIFs # Library and utilities for processing GIFs
@@ -35,26 +53,28 @@ brew "jpeg-xl"
brew "aom" brew "aom"
# Apache Portable Runtime library # Apache Portable Runtime library
brew "apr" brew "apr"
# Mozilla CA certificate store
brew "ca-certificates"
# Cryptography and SSL/TLS Toolkit
brew "openssl@3"
# Companion library to apr, the Apache Portable Runtime library # Companion library to apr, the Apache Portable Runtime library
brew "apr-util" brew "apr-util"
# Password hashing library and CLI utility # Password hashing library and CLI utility
brew "argon2" brew "argon2"
# Open Source Kubernetes Marketplace
brew "arkade"
# Spell checker with better logic than ispell # Spell checker with better logic than ispell
brew "aspell" brew "aspell"
# Automatic configure script builder # Automatic configure script builder
brew "autoconf" brew "autoconf"
# Collection of over 500 reusable autoconf macros
brew "autoconf-archive"
# GNU multiple precision arithmetic library
brew "gmp"
# 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 # Bourne-Again SHell, a UNIX command interpreter
brew "bash" brew "bash"
# Clone of cat(1) with syntax highlighting and Git integration # Clone of cat(1) with syntax highlighting and Git integration
brew "bat" brew "bat"
# C/C++ and Java libraries for Unicode and globalization
brew "icu4c"
# Yet another cross-platform graphical process/system monitor # Yet another cross-platform graphical process/system monitor
brew "bottom" brew "bottom"
# Software library to render fonts # Software library to render fonts
@@ -69,12 +89,8 @@ brew "glib"
brew "choose-rust" brew "choose-rust"
# Cross-platform make # Cross-platform make
brew "cmake" brew "cmake"
# GNU multiple precision arithmetic library
brew "gmp"
# GNU File, Shell, and Text utilities # GNU File, Shell, and Text utilities
brew "coreutils" brew "coreutils"
# Get, unpack, build, and install modules from CPAN
brew "cpanminus"
# Open source suite of directory software # Open source suite of directory software
brew "openldap" brew "openldap"
# Get a file from an HTTP, HTTPS or FTP server # Get a file from an HTTP, HTTPS or FTP server
@@ -129,6 +145,8 @@ brew "gpgme"
brew "gpg-tui" brew "gpg-tui"
# Image manipulation # Image manipulation
brew "netpbm" brew "netpbm"
# C/C++ and Java libraries for Unicode and globalization
brew "icu4c"
# OpenType text shaping engine # OpenType text shaping engine
brew "harfbuzz" brew "harfbuzz"
# Framework for layout and rendering of i18n text # Framework for layout and rendering of i18n text
@@ -145,6 +163,8 @@ brew "gzip"
brew "hadolint" brew "hadolint"
# Improved top (interactive process viewer) # Improved top (interactive process viewer)
brew "htop" brew "htop"
# Portable abstraction of the hierarchical topology of modern architectures
brew "hwloc"
# ISO/IEC 23008-12:2017 HEIF file format decoder and encoder # ISO/IEC 23008-12:2017 HEIF file format decoder and encoder
brew "libheif" brew "libheif"
# Tools and libraries to manipulate images in many formats # Tools and libraries to manipulate images in many formats
@@ -153,44 +173,40 @@ brew "imagemagick"
brew "irssi" brew "irssi"
# Lightweight and flexible command-line JSON processor # Lightweight and flexible command-line JSON processor
brew "jq" brew "jq"
# JSON parser for C
brew "json-c"
# Scanning your k8s clusters, diagnosing, and triaging issues in simple English
brew "k8sgpt"
# Network authentication protocol # Network authentication protocol
brew "krb5" brew "krb5"
# Tool to detect/remediate misconfig and security risks of GitHub/GitLab assets # Tool to detect/remediate misconfig and security risks of GitHub/GitLab assets
brew "legitify" brew "legitify"
# Secure hashing function
brew "libb2"
# Postgres C API library # Postgres C API library
brew "libpq" brew "libpq"
# Manage compile and link flags for libraries # Multi-platform support library with a focus on asynchronous I/O
brew "pkg-config" brew "libuv"
# YAML Parser
brew "libyaml"
# Interpreted, interactive, object-oriented programming language
brew "python@3.11"
# Package manager for the Lua programming language # Package manager for the Lua programming language
brew "luarocks" brew "luarocks"
# LZMA-based compression program similar to gzip or bzip2 # LZMA-based compression program similar to gzip or bzip2
brew "lzip" brew "lzip"
# Swiss Army Knife for macOS # Swiss Army Knife for macOS
brew "m-cli" brew "m-cli"
# Collection of tools that nobody wrote when UNIX was young
brew "moreutils"
# Mongrel of mail user agents (part elm, pine, mush, mh, etc.) # Mongrel of mail user agents (part elm, pine, mush, mh, etc.)
brew "mutt" brew "mutt"
# NCurses Disk Usage # NCurses Disk Usage
brew "ncdu" brew "ncdu"
# Ambitious Vim-fork focused on extensibility and agility
brew "neovim"
# HTTP(S) server and reverse proxy, and IMAP/POP3 proxy server # HTTP(S) server and reverse proxy, and IMAP/POP3 proxy server
brew "nginx" brew "nginx"
# Port scanning utility for large networks # Port scanning utility for large networks
brew "nmap" brew "nmap"
# Manage multiple Node.js versions # ISO-C API and CLI for generating UUIDs
brew "nvm" brew "ossp-uuid"
# Development kit for the Java programming language # General-purpose scripting language
brew "openjdk@11" brew "php"
# Generate clients, server & docs from an OpenAPI spec (v2, v3)
brew "openapi-generator"
# Development kit for the Java programming language
brew "openjdk"
# Highly capable, feature-rich programming language
brew "perl"
# Coreutils progress viewer # Coreutils progress viewer
brew "progress" brew "progress"
# Python version management # Python version management
@@ -199,10 +215,12 @@ brew "pyenv"
brew "pyenv-pip-migrate" brew "pyenv-pip-migrate"
# Pyenv plugin to manage virtualenv # Pyenv plugin to manage virtualenv
brew "pyenv-virtualenv" brew "pyenv-virtualenv"
# Interpreted, interactive, object-oriented programming language
brew "python@3.11"
# Install various Ruby versions and implementations
brew "ruby-build"
# Ruby version manager # Ruby version manager
brew "rbenv" brew "rbenv"
# RC file (dotfile) management
brew "rcm"
# Search tool like grep and The Silver Searcher # Search tool like grep and The Silver Searcher
brew "ripgrep" brew "ripgrep"
# Safe, concurrent, practical language # Safe, concurrent, practical language
@@ -215,8 +233,6 @@ brew "shfmt"
brew "task" brew "task"
# Terminal user interface for taskwarrior # Terminal user interface for taskwarrior
brew "taskwarrior-tui" brew "taskwarrior-tui"
# Very fast implementation of tldr in Rust
brew "tealdeer"
# Send macOS User Notifications from the command-line # Send macOS User Notifications from the command-line
brew "terminal-notifier" brew "terminal-notifier"
# Thin wrapper for Terraform e.g. for locking state # Thin wrapper for Terraform e.g. for locking state
@@ -243,45 +259,21 @@ brew "watch"
brew "wget" brew "wget"
# Check your $HOME for unwanted files and directories # Check your $HOME for unwanted files and directories
brew "xdg-ninja", args: ["HEAD"] brew "xdg-ninja", args: ["HEAD"]
# Hackable, minimal, fast TUI file explorer
brew "xplr"
# JavaScript package manager # JavaScript package manager
brew "yarn" brew "yarn"
# High-performance load testing tool, written in Golang. # Watcher for macOS 10.14+ light/dark mode changes
brew "ddosify/tap/ddosify" 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 # lets you quickly switch between multiple git user profiles
brew "gesquive/tap/git-user" brew "gesquive/tap/git-user"
brew "keith/formulae/reminders-cli" brew "keith/formulae/reminders-cli"
# Imagick PHP extension # Automated code review tool integrated with any code analysis tools regardless of programming language.
brew "shivammathur/extensions/imagick@8.2" brew "reviewdog/tap/reviewdog"
# Imagick PHP extension
brew "shivammathur/extensions/imagick@8.3"
# Mcrypt PHP extension
brew "shivammathur/extensions/mcrypt@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"
# Xdebug PHP extension
brew "shivammathur/extensions/xdebug@7.4"
# Xdebug PHP extension
brew "shivammathur/extensions/xdebug@8.0"
# Xdebug PHP extension
brew "shivammathur/extensions/xdebug@8.1"
# Yaml PHP extension
brew "shivammathur/extensions/yaml@8.3"
# General-purpose scripting language
brew "shivammathur/php/php"
# Command-line interface for 1Password # Command-line interface for 1Password
cask "1password-cli" cask "1password-cli"
# GPU-accelerated terminal emulator # GPU-accelerated terminal emulator
cask "alacritty" cask "alacritty"
# Automatic tiling window manager similar to xmonad
cask "amethyst"
# Turn audio CDs and files into audiobooks
cask "audiobook-builder"
# Text editor # Text editor
cask "coda" cask "coda"
# Universal database tool and SQL client # Universal database tool and SQL client
@@ -290,8 +282,6 @@ cask "dbeaver-community"
cask "dbngin" cask "dbngin"
# App to build and share containerised applications and microservices # App to build and share containerised applications and microservices
cask "docker" cask "docker"
# UI toolkit for building applications for mobile, web and desktop
cask "flutter"
# Unofficial overcast.fm podcast app # Unofficial overcast.fm podcast app
cask "fog" cask "fog"
# Typeface made for developers # Typeface made for developers
@@ -344,12 +334,6 @@ cask "quicklookase"
cask "quitter" cask "quitter"
# Control your tools with a few keystrokes # Control your tools with a few keystrokes
cask "raycast" cask "raycast"
# Move and resize windows using keyboard shortcuts or snap areas
cask "rectangle"
# GUI for rsync
cask "rsyncosx"
# GUI for rsync
cask "rsyncui"
# MySQL/MariaDB database management # MySQL/MariaDB database management
cask "sequel-ace" cask "sequel-ace"
# Plugin for AWS CLI to start and end sessions that connect to managed instances # Plugin for AWS CLI to start and end sessions that connect to managed instances
@@ -364,13 +348,13 @@ cask "soundsource"
cask "suspicious-package" cask "suspicious-package"
# Quicklook extension for source files # Quicklook extension for source files
cask "syntax-highlight" cask "syntax-highlight"
# Configuration application for the Ultimate Hacking Keyboard
cask "uhk-agent"
# Open-source code editor # Open-source code editor
cask "visual-studio-code" cask "visual-studio-code"
# Multimedia player # Multimedia player
cask "vlc" cask "vlc"
# Spell-checking service for Finnish # Spell-checking service for Finnish
cask "voikkospellservice" cask "voikkospellservice"
# Rust-based terminal
cask "warp"
# Application for generating TOTP and HOTP codes # Application for generating TOTP and HOTP codes
cask "yubico-authenticator" cask "yubico-authenticator"

1
config/nvim-kickstart Submodule

Submodule config/nvim-kickstart added at 1c129627e8

View File

@@ -3,27 +3,33 @@
"lazyvim.plugins.extras.coding.copilot", "lazyvim.plugins.extras.coding.copilot",
"lazyvim.plugins.extras.coding.yanky", "lazyvim.plugins.extras.coding.yanky",
"lazyvim.plugins.extras.editor.aerial", "lazyvim.plugins.extras.editor.aerial",
"lazyvim.plugins.extras.editor.aerial",
"lazyvim.plugins.extras.editor.harpoon2",
"lazyvim.plugins.extras.editor.leap", "lazyvim.plugins.extras.editor.leap",
"lazyvim.plugins.extras.editor.symbols-outline", "lazyvim.plugins.extras.editor.outline",
"lazyvim.plugins.extras.editor.refactoring",
"lazyvim.plugins.extras.formatting.black", "lazyvim.plugins.extras.formatting.black",
"lazyvim.plugins.extras.formatting.prettier", "lazyvim.plugins.extras.formatting.prettier",
"lazyvim.plugins.extras.lang.ansible",
"lazyvim.plugins.extras.lang.docker", "lazyvim.plugins.extras.lang.docker",
"lazyvim.plugins.extras.lang.go", "lazyvim.plugins.extras.lang.go",
"lazyvim.plugins.extras.lang.json", "lazyvim.plugins.extras.lang.json",
"lazyvim.plugins.extras.lang.markdown", "lazyvim.plugins.extras.lang.markdown",
"lazyvim.plugins.extras.lang.php",
"lazyvim.plugins.extras.lang.python", "lazyvim.plugins.extras.lang.python",
"lazyvim.plugins.extras.lang.tailwind", "lazyvim.plugins.extras.lang.tailwind",
"lazyvim.plugins.extras.lang.terraform", "lazyvim.plugins.extras.lang.terraform",
"lazyvim.plugins.extras.lang.typescript", "lazyvim.plugins.extras.lang.typescript",
"lazyvim.plugins.extras.lang.vue",
"lazyvim.plugins.extras.lang.yaml", "lazyvim.plugins.extras.lang.yaml",
"lazyvim.plugins.extras.linting.eslint", "lazyvim.plugins.extras.linting.eslint",
"lazyvim.plugins.extras.ui.edgy", "lazyvim.plugins.extras.ui.edgy",
"lazyvim.plugins.extras.ui.mini-animate", "lazyvim.plugins.extras.ui.mini-animate",
"lazyvim.plugins.extras.util.dot", "lazyvim.plugins.extras.util.dot",
"lazyvim.plugins.extras.vscode" "lazyvim.plugins.extras.util.mini-hipatterns"
], ],
"news": { "news": {
"NEWS.md": "2123" "NEWS.md": "6077"
}, },
"version": 2 "version": 6
} }

View File

@@ -12,6 +12,7 @@ return {
opts = function(_, opts) opts = function(_, opts)
vim.list_extend(opts.ensure_installed, { vim.list_extend(opts.ensure_installed, {
"phpactor", "phpactor",
"intelephense",
}) })
end, end,
}, },

View File

@@ -1,5 +1,24 @@
-- luacheck: globals vim -- luacheck: globals vim
return { return {
-- Neotree configuration
{
"nvim-neo-tree/neo-tree.nvim",
opts = {
filesystem = {
filtered_items = {
always_show = {
".github",
".gitignore",
".editorconfig",
".python-version",
".nvmrc",
".env",
".env.example",
},
},
},
},
},
-- Cloak allows you to overlay *'s over defined patterns in defined files. -- Cloak allows you to overlay *'s over defined patterns in defined files.
-- https://github.com/laytan/cloak.nvim -- https://github.com/laytan/cloak.nvim
{ "laytan/cloak.nvim" }, { "laytan/cloak.nvim" },
@@ -36,7 +55,7 @@ return {
end, end,
opts = { opts = {
open_fold_hl_timeout = 150, open_fold_hl_timeout = 150,
close_fold_kinds = { "imports", "comment" }, close_fold_kinds_for_ft = { "imports", "comment" },
preview = { preview = {
win_config = { win_config = {
border = { "", "", "", "", "", "", "", "" }, border = { "", "", "", "", "", "", "", "" },

View File

@@ -1,7 +1,6 @@
{ {
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json", "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"final_space": true, "final_space": true,
"shell_integration": true,
"console_title_template": "{{.UserName}}@{{.HostName}} {{.Shell}} in {{.PWD}}", "console_title_template": "{{.UserName}}@{{.HostName}} {{.Shell}} in {{.PWD}}",
"blocks": [ "blocks": [
{ {
@@ -130,21 +129,5 @@
"foreground_templates": ["{{ if gt .Code 0 }}red{{ end }}"], "foreground_templates": ["{{ if gt .Code 0 }}red{{ end }}"],
"template": "\u279c " "template": "\u279c "
}, },
"tooltips": [
{
"type": "git",
"tips": ["git", "g"],
"style": "diamond",
"foreground": "#193549",
"background": "#fffb38",
"leading_diamond": "",
"trailing_diamond": "",
"template": "{{ .HEAD }}{{ if .Staging.Changed }}  {{ .Staging.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Working.Changed }}  {{ .Working.String }}{{ end }}",
"properties": {
"fetch_status": true,
"fetch_upstream_icon": true
}
}
],
"version": 2 "version": 2
} }

119
config/omp/own.toml Normal file
View File

@@ -0,0 +1,119 @@
"$schema" = "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json"
final_space = true
console_title_template = "{{.UserName}}@{{.HostName}} {{.Shell}} in {{.PWD}}"
version = 2
[[blocks]]
alignment = "left"
type = "prompt"
[[blocks.segments]]
foreground = "cyan"
style = "powerline"
template = "{{ .Icon }}"
type = "os"
[[blocks.segments]]
type = "session"
style = "plain"
template = " {{ if .SSHSession }} {{ .UserName }}@{{ end }}{{ .HostName }}"
[[blocks.segments]]
foreground = "cyan"
style = "plain"
template = " {{ .Path }} "
type = "path"
[blocks.segments.properties]
style = "mixed"
[blocks.segments.mapped_locations]
"~/Code/*" = ""
[[blocks.segments]]
type = "git"
style = "plain"
foreground = "lightGreen"
template = "{{ .UpstreamIcon }}{{ if or (.Staging.Changed) (.Working.Changed) }}({{if .Behind }}\u2193 {{ .Behind }} {{ end }}{{if .Staging.Changed }}\uF046 {{ .Staging.String }} {{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }}| {{ end }}{{ if .Working.Changed }} {{ .Working.String }}{{ end }}){{ end }}"
[blocks.segments.properties]
fetch_status = true
fetch_upstream_icon = true
[blocks.segments.properties.untracked_modes]
"~/Code/oh-my-posh/" = "no"
[[blocks.segments]]
type = "terraform"
style = "plain"
foreground = "#000000"
background = "#ebcc34"
template = "{{.WorkspaceName}}"
[[blocks]]
alignment = "left"
type = "prompt"
[[blocks.segments]]
foreground = "#68a063"
style = "plain"
template = " {{ if .PackageManagerIcon }}{{ .PackageManagerIcon }} {{ end }}{{ .Full }}"
type = "node"
[blocks.segments.properties]
display_mode = "files"
fetch_package_manager = true
fetch_version = true
[[blocks.segments]]
foreground = "#4063D8"
style = "plain"
template = " {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}"
type = "crystal"
[blocks.segments.properties]
display_mode = "files"
fetch_version = true
[[blocks.segments]]
foreground = "#DE3F24"
style = "plain"
template = " {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}"
type = "ruby"
[blocks.segments.properties]
display_mode = "files"
fetch_version = true
[[blocks.segments]]
foreground = "#FED142"
style = "plain"
template = " {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}"
type = "python"
[blocks.segments.properties]
display_mode = "context"
fetch_virtual_env = false
[[blocks]]
alignment = "left"
newline = true
type = "prompt"
[[blocks.segments]]
background = "transparent"
foreground = "lightGreen"
foreground_templates = [ "{{ if gt .Code 0 }}red{{ end }}" ]
style = "plain"
template = "➜"
type = "status"
[blocks.segments.properties]
always_enabled = true
[transient_prompt]
background = "transparent"
foreground = "lightGreen"
foreground_templates = [ "{{ if gt .Code 0 }}red{{ end }}" ]
template = "➜ "

74
config/omp/zen.toml Normal file
View File

@@ -0,0 +1,74 @@
#:schema https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json
version = 2
final_space = true
console_title_template = '{{ .Shell }} in {{ .Folder }}'
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'path'
style = 'plain'
background = 'transparent'
foreground = 'blue'
template = '{{ .Path }}'
[blocks.segments.properties]
style = 'full'
[[blocks.segments]]
type = 'git'
style = 'plain'
foreground = 'p:grey'
background = 'transparent'
template = ' {{ .HEAD }}{{ if or (.Working.Changed) (.Staging.Changed) }}*{{ end }} <cyan>{{ if gt .Behind 0 }}⇣{{ end }}{{ if gt .Ahead 0 }}⇡{{ end }}</>'
[blocks.segments.properties]
branch_icon = ''
commit_icon = '@'
fetch_status = true
[[blocks]]
type = 'rprompt'
overflow = 'hidden'
[[blocks.segments]]
type = 'executiontime'
style = 'plain'
foreground = 'yellow'
background = 'transparent'
template = '{{ .FormattedMs }}'
[blocks.segments.properties]
threshold = 5000
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
type = 'text'
style = 'plain'
foreground_templates = [
"{{if gt .Code 0}}red{{end}}",
"{{if eq .Code 0}}magenta{{end}}",
]
background = 'transparent'
template = ''
[transient_prompt]
foreground_templates = [
"{{if gt .Code 0}}red{{end}}",
"{{if eq .Code 0}}magenta{{end}}",
]
background = 'transparent'
template = ' '
[secondary_prompt]
foreground = 'magenta'
background = 'transparent'
template = ' '

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,7 @@
set-option -g status-style 'fg=#cad3f5,bg=default'
set-window-option -g window-status-style 'fg=#cad3f5,bg=default dim'
set-window-option -g window-status-current-style 'fg=#04a5e5,bg=default'
set-window-option -g window-status-activity-style 'fg=#cad3f5,bg=default nodim'
set-window-option -g window-status-bell-style 'fg=#cad3f5,bg=default'
set -g message-style 'fg=#c6a0f6 bg=#24273a bold'

View File

@@ -0,0 +1,7 @@
set-option -g status-style 'fg=#4c4f69,bg=#eff1f5'
set-window-option -g window-status-style 'fg=#4c4f69,bg=#eff1f5 dim'
set-window-option -g window-status-current-style 'fg=#8839ef,bg=#eff1f5'
set-window-option -g window-status-activity-style 'fg=#4c4f69,bg=#eff1f5 nodim'
set-window-option -g window-status-bell-style 'fg=#4c4f69,bg=#eff1f5'
set -g message-style 'fg=#8839ef bg=#e6e9ef bold' # fg magenta, bg black

View File

@@ -1,6 +1,6 @@
# ~/.config/tmux/tmux.conf, or .dotfiles/config/tmux/tmux.conf # ~/.config/tmux/tmux.conf, or .dotfiles/config/tmux/tmux.conf
# #
# Contains configuration from the follwing sources: # Contains configuration from the following sources:
# - https://tmuxguide.readthedocs.io/en/latest/tmux/tmux.html # - https://tmuxguide.readthedocs.io/en/latest/tmux/tmux.html
# - https://github.com/dreamsofcode-io/tmux/blob/main/tmux.conf # - https://github.com/dreamsofcode-io/tmux/blob/main/tmux.conf
@@ -25,10 +25,6 @@ bind -n M-Right select-pane -R
bind -n M-Up select-pane -U bind -n M-Up select-pane -U
bind -n M-Down select-pane -D bind -n M-Down select-pane -D
# Control-Tab & Control-Shift-Tab to switch windows
bind -n C-Tab previous-window
bind -n C-S-Tab next-window
# Reload tmux config with <prefix> + r # Reload tmux config with <prefix> + r
bind r source-file ~/.dotfiles/config/tmux/tmux.conf \; display "tmux cfg reloaded!" bind r source-file ~/.dotfiles/config/tmux/tmux.conf \; display "tmux cfg reloaded!"
@@ -47,6 +43,7 @@ bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
bind '"' split-window -v -c "#{pane_current_path}" bind '"' split-window -v -c "#{pane_current_path}"
bind '!' split-window -h -c "#{pane_current_path}" bind '!' split-window -h -c "#{pane_current_path}"
bind '^' switch-client -t'{marked}'
# synchronize all panes in a window # synchronize all panes in a window
bind y setw synchronize-panes bind y setw synchronize-panes
@@ -56,9 +53,6 @@ bind y setw synchronize-panes
unbind [ unbind [
bind Escape copy-mode bind Escape copy-mode
# start selection with 'space' and copy using 'y'
#bind -t vi-copy 'y' copy-selection
# paste using 'p' # paste using 'p'
unbind p unbind p
bind p paste-buffer bind p paste-buffer
@@ -67,12 +61,29 @@ bind p paste-buffer
# │ Settings │ # │ Settings │
# ╰──────────────────────────────────────────────────────────╯ # ╰──────────────────────────────────────────────────────────╯
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
# Setting status on # Setting status on
set -g status "on" set -g status "on"
# Hide clock
set -g display-time 0
# Activity Monitoring (for when something happens in another pain)
set -g monitor-activity on
set -g visual-activity off
set -g visual-bell off
# Expose window title # Expose window title
set-option -g set-titles on set-option -g set-titles on
# Set bigger history limit
set -g history-limit 20000
# Keep Tmux alive when the initial command is finished
set -g remain-on-exit off
# Mouse support # Mouse support
set -g mouse on set -g mouse on
@@ -92,21 +103,23 @@ set-window-option -g mode-keys vi
# │ Theme │ # │ Theme │
# ╰──────────────────────────────────────────────────────────╯ # ╰──────────────────────────────────────────────────────────╯
# Make sure status sides are long enough and centered is in the middle set -g status-left-length "0"
set -g status-left-length "30"
set -g status-right-length "30" set -g status-right-length "30"
set-option -g status-position "bottom" set-option -g status-position "bottom"
set-option -g status-style 'bg=default,fg=#ffffff' set-option -g status-justify left
set-option -g status-justify centre set-option -g status-left ''
set-option -g status-left '#h '
set-window-option -g window-status-style 'fg=#ffffff,bg=default'
set-option -g window-status-format ' #I:#W ' set-option -g window-status-format ' #I:#W '
set-window-option -g window-status-current-style 'fg=#111111,bg=#7aa2f7' set-option -g window-status-current-format ' #I:#W#{?window_zoomed_flag, ◈ ,} '
set-option -g window-status-current-format ' #I:#W#{?window_zoomed_flag,  , } '
set-option -g status-left "#{hostname_short}/#S" set-option -g status-right "#{hostname_short}/#S #{tmux_mode_indicator}"
set-option -g status-right "%H:%M #{tmux_mode_indicator}"
set -g pane-border-style "fg=#3b4261"
set -g pane-active-border-style "fg=#7aa2f7"
# https://github.com/erikw/tmux-dark-notify
set -g @dark-notify-theme-path-light '~/.dotfiles/config/tmux/theme-light.conf'
set -g @dark-notify-theme-path-dark '~/.dotfiles/config/tmux/theme-dark.conf'
# ╭──────────────────────────────────────────────────────────╮ # ╭──────────────────────────────────────────────────────────╮
# │ Plugins related configurations │ # │ Plugins related configurations │
@@ -123,9 +136,10 @@ set -g @suspend_key 'F12'
set -g @tmux_window_name_max_name_len "20" set -g @tmux_window_name_max_name_len "20"
### Replace $HOME with ~ in window names ### Replace $HOME with ~ in window names
set -g @tmux_window_name_use_tilde "True" set -g @tmux_window_name_use_tilde "True"
set -g @tmux_window_name_shells "['bash', 'fish', 'sh', 'zsh']" set -g @tmux_window_name_shells "['bash', 'fish', 'sh', 'zsh', 'oh-my-posh']"
set -g @tmux_window_dir_programs "['nvim', 'vim', 'vi', 'git']" set -g @tmux_window_dir_programs "['nvim', 'vim', 'vi', 'git']"
set -g @tmux_window_name_ignored_programs "['sqlite3', 'x-set-php-aliases']" # Default is [] set -g @tmux_window_name_ignored_programs "['sqlite3', 'x-set-php-aliases', 'oh-my-posh', 'antidot']" # Default is []
set -g @tmux_window_name_substitute_sets "[('.+ipython2', 'ipython2'), ('.+ipython3', 'ipython3'), ('.+\.local', '.local')]"
## https://github.com/tmux-plugins/tmux-continuum ## https://github.com/tmux-plugins/tmux-continuum
set -g @continuum-restore 'on' set -g @continuum-restore 'on'
@@ -153,4 +167,8 @@ run-shell ~/.dotfiles/config/tmux/plugins/tmux-mode-indicator/mode_indicator.tmu
run-shell ~/.dotfiles/config/tmux/plugins/tmux-suspend/suspend.tmux run-shell ~/.dotfiles/config/tmux/plugins/tmux-suspend/suspend.tmux
run-shell ~/.dotfiles/config/tmux/plugins/tmux-yank/yank.tmux run-shell ~/.dotfiles/config/tmux/plugins/tmux-yank/yank.tmux
run-shell ~/.dotfiles/config/tmux/plugins/tmux-current-pane-hostname/current_pane_hostname.tmux run-shell ~/.dotfiles/config/tmux/plugins/tmux-current-pane-hostname/current_pane_hostname.tmux
run-shell ~/.dotfiles/config/tmux/plugins/tmux-dark-notify/main.tmux
if-shell "test -e $HOME/.local/state/tmux/tmux-dark-notify-theme.conf" \
"source-file $HOME/.local/state/tmux/tmux-dark-notify-theme.conf"

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

@@ -1,220 +1,233 @@
# nvim keybindings # nvim keybindings
```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>
FZF: search mappings.
n <Space>zh * :History<CR>
FZF: search history of opened files
n <Space>zb * :Buffers<CR>
FZF: search open buffers.
n <Space>zt * :Windows<CR>
FZF: search open tabs.
n <Space>zc * :Commands<CR>
FZF: search commands.
n <Space>zf * :FZF<Space>
FZF: search for files in given path.
<Space>f * <Lua 69: ~/.dotfiles/config/nvim-kickstart/init.lua:505>
[F]ormat buffer
n <Space>e * <Lua 52: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Space>4 * <Lua 49: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 4
n <Space>3 * <Lua 48: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 3
n <Space>2 * <Lua 47: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 2
n <Space>1 * <Lua 46: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 1
n <Space>xn * <Lua 45: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to next file
n <Space>xN * <Lua 44: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to previous file
n <Space>xa * <Lua 43: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon quick menu
n <Space>xA * <Lua 42: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon file
n <Space>5 * <Lua 39: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 5
n <Space>tz * <Lua 37: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Toggle ZenMode
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>
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>
Show diagnostic [E]rror messages
x # * <Lua 7: vim/_defaults.lua:0>
:help v_#-default
o % <Plug>(MatchitOperationForward)
x % <Plug>(MatchitVisualForward)
n % <Plug>(MatchitNormalForward)
n & * :&&<CR>
:help &-default
x * * <Lua 3: vim/_defaults.lua:0>
:help v_star-default
x @ * mode() == 'V' ? ':normal! @'.getcharstr().'<CR>' : '@'
:help v_@-default
x Q * mode() == 'V' ? ':normal! @<C-R>=reg_recorded()<CR><CR>' : 'Q'
:help v_Q-default
n Y * y$
:help Y-default
o [% <Plug>(MatchitOperationMultiBackward)
x [% <Plug>(MatchitVisualMultiBackward)
n [% <Plug>(MatchitNormalMultiBackward)
n [d * <Lua 15: vim/_defaults.lua:0>
Jump to the previous diagnostic
o ]% <Plug>(MatchitOperationMultiForward)
x ]% <Plug>(MatchitVisualMultiForward)
n ]% <Plug>(MatchitNormalMultiForward)
n ]d * <Lua 14: vim/_defaults.lua:0>
Jump to the next diagnostic
x a% <Plug>(MatchitVisualTextObject)
o al <Lua 236: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around last textobject
o an <Lua 235: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around next textobject
x al <Lua 232: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around last textobject
x an <Lua 231: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around next textobject
o a <Lua 229: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around textobject
x a <Lua 227: ~/.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>
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>
Go to previous [D]iagnostic message
o g% <Plug>(MatchitOperationBackward)
x g% <Plug>(MatchitVisualBackward)
n g% <Plug>(MatchitNormalBackward)
o g] <Lua 226: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1169>
Move to right "around"
x g] <Lua 225: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1169>
Move to right "around"
n g] <Lua 224: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1169>
Move to right "around"
o g[ <Lua 223: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1168>
Move to left "around"
x g[ <Lua 222: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1168>
Move to left "around"
n g[ <Lua 221: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1168>
Move to left "around"
n gcA * <Lua 209: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:218>
Comment insert end of line
n gcO * <Lua 208: ~/.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
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 238: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside last textobject
o in <Lua 237: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside next textobject
x il <Lua 234: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside last textobject
x in <Lua 233: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside next textobject
o i <Lua 230: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside textobject
x i <Lua 228: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside textobject
n shn * <Lua 255: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Highlight next surrounding
n sFn * <Lua 254: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find next left surrounding
n sfn * <Lua 253: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find next right surrounding
n srn * <Lua 252: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Replace next surrounding
n sdn * <Lua 251: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Delete next surrounding
n shl * <Lua 250: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Highlight previous surrounding
n sFl * <Lua 249: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find previous left surrounding
n sfl * <Lua 248: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find previous right surrounding
n srl * <Lua 247: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Replace previous surrounding
n sdl * <Lua 246: ~/.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 245: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:892>
Update `MiniSurround.config.n_lines`
n sh * <Lua 244: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Highlight surrounding
n sF * <Lua 243: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find left surrounding
n sf * <Lua 242: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Find right surrounding
n sr * <Lua 241: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Replace surrounding
n sd * <Lua 240: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
Delete surrounding
n sa * <Lua 239: ~/.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>
o <Plug>(MatchitOperationMultiBackward) * :<C-U>call matchit#MultiMatch("bW", "o")<CR>
x <Plug>(MatchitVisualMultiForward) * :<C-U>call matchit#MultiMatch("W", "n")<CR>m'gv``
x <Plug>(MatchitVisualMultiBackward) * :<C-U>call matchit#MultiMatch("bW", "n")<CR>m'gv``
n <Plug>(MatchitNormalMultiForward) * :<C-U>call matchit#MultiMatch("W", "n")<CR>
n <Plug>(MatchitNormalMultiBackward) * :<C-U>call matchit#MultiMatch("bW", "n")<CR>
o <Plug>(MatchitOperationBackward) * :<C-U>call matchit#Match_wrapper('',0,'o')<CR>
o <Plug>(MatchitOperationForward) * :<C-U>call matchit#Match_wrapper('',1,'o')<CR>
x <Plug>(MatchitVisualBackward) * :<C-U>call matchit#Match_wrapper('',0,'v')<CR>m'gv``
x <Plug>(MatchitVisualForward) * :<C-U>call matchit#Match_wrapper('',1,'v')<CR>:if col("''") != col("$") | exe ":normal! m'" | endif<CR>gv``
n <Plug>(MatchitNormalBackward) * :<C-U>call matchit#Match_wrapper('',0,'n')<CR>
n <Plug>(MatchitNormalForward) * :<C-U>call matchit#Match_wrapper('',1,'n')<CR>
n <C-P> * :Files<CR>
FZF: search for files starting at current directory.
o <Plug>(fzf-maps-o) * <C-C>:<C-U>call fzf#vim#maps('o', 0)<CR>
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
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 206: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle blockwise with count
n <Plug>(comment_toggle_linewise_count) * <Lua 205: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle linewise with count
n <Plug>(comment_toggle_blockwise_current) * <Lua 204: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle current block
n <Plug>(comment_toggle_linewise_current) * <Lua 203: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle current line
n <Plug>(comment_toggle_blockwise) * <Lua 202: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle blockwise
n <Plug>(comment_toggle_linewise) * <Lua 201: ~/.local/share/nvim-kickstart/lazy/Comment.nvim/lua/Comment/api.lua:246>
Comment toggle linewise
n <C-Bslash> * <Lua 58: ~/.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 59: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-J> * <Lua 54: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-H> * <Lua 57: ~/.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>
n <Left> * <Cmd>echo "Use h to move!!"<CR>
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 56: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
``` ```
n ! * <Cmd>lua require("which-key").show("!", {mode = "n", auto = true})<CR>
n ' * <Cmd>lua require("which-key").show("'", {mode = "n", auto = true})<CR> - Generated on Mon 22 Jul 2024 17:32:22 EEST
n " * <Cmd>lua require("which-key").show("\"", {mode = "n", auto = true})<CR>
n [ * <Cmd>lua require("which-key").show("[", {mode = "n", auto = true})<CR>
n [b * <Lua 246: ~/.config/nvim/lua/astronvim/mappings.lua:54> Previous buffer
n [g * <Lua 277: ~/.config/nvim/lua/astronvim/mappings.lua:150> Previous Git hunk
n [t * <Lua 281: ~/.config/nvim/lua/astronvim/mappings.lua:120> Previous tab
n ] * <Cmd>lua require("which-key").show("]", {mode = "n", auto = true})<CR>
n ]b * <Lua 250: ~/.config/nvim/lua/astronvim/mappings.lua:52> Next buffer
n ]g * <Lua 278: ~/.config/nvim/lua/astronvim/mappings.lua:149> Next Git hunk
n ]t * <Lua 282: ~/.config/nvim/lua/astronvim/mappings.lua:119> Next tab
n @ * <Cmd>lua require("which-key").show("@", {mode = "n", auto = true})<CR>
n \ * <Cmd>split<CR> Horizontal Split
n & * :&&<CR> Nvim builtin
n `* <Cmd>lua require("which-key").show("`", {mode = "n", auto = true})<CR>
n < * <Cmd>lua require("which-key").show("<", {mode = "n", auto = true})<CR>
n <b * <Lua 297: ~/.config/nvim/lua/astronvim/mappings.lua:62> Move buffer tab left
n <C-'> * <Cmd>ToggleTerm<CR> Toggle terminal
n <C-Down> * <Lua 263: ~/.config/nvim/lua/astronvim/mappings.lua:213> Resize split down
n <C-H> * <Lua 266: ~/.config/nvim/lua/astronvim/mappings.lua:208> Move to left split
n <C-J> * <Lua 283: ~/.config/nvim/lua/astronvim/mappings.lua:209> Move to below split
n <C-K> * <Lua 327: ~/.config/nvim/lua/astronvim/mappings.lua:210> Move to above split
n <C-L> * <Lua 265: ~/.config/nvim/lua/astronvim/mappings.lua:211> Move to right split
n <C-Left> * <Lua 262: ~/.config/nvim/lua/astronvim/mappings.lua:214> Resize split left
n <C-N> * <Lua 79: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Goto next mark
n <C-P> * <Lua 80: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Goto previous mark
n <C-Q> * <Cmd>q!<CR> Force quit
n <C-Right> * <Lua 261: ~/.config/nvim/lua/astronvim/mappings.lua:215> Resize split right
n <C-S> * <Cmd>w!<CR> Force write
n <C-Up> * <Lua 264: ~/.config/nvim/lua/astronvim/mappings.lua:212> Resize split up
n <C-W> * <Cmd>lua require("which-key").show("\23", {mode = "n", auto = true})<CR>
n <CR> *@<Lua 391: ~/.local/share/nvim/lazy/alpha-nvim/lua/alpha.lua:705>
n <F10> * <Lua 348: ~/.config/nvim/lua/astronvim/mappings.lua:353> Debugger: Step Over
n <F11> * <Lua 333: ~/.config/nvim/lua/astronvim/mappings.lua:354> Debugger: Step Into
n <F17> * <Lua 344: ~/.config/nvim/lua/astronvim/mappings.lua:341> Debugger: Stop
n <F21> * <Lua 342: ~/.config/nvim/lua/astronvim/mappings.lua:343> Debugger: Conditional Breakpoint
n <F23> * <Lua 331: ~/.config/nvim/lua/astronvim/mappings.lua:355> Debugger: Step Out
n <F29> * <Lua 334: ~/.config/nvim/lua/astronvim/mappings.lua:350> Debugger: Restart
n <F5> * <Lua 341: ~/.config/nvim/lua/astronvim/mappings.lua:340> Debugger: Start
n <F6> * <Lua 339: ~/.config/nvim/lua/astronvim/mappings.lua:351> Debugger: Pause
n <F7> * <Cmd>ToggleTerm<CR> Toggle terminal
n <F9> * <Lua 337: ~/.config/nvim/lua/astronvim/mappings.lua:352> Debugger: Toggle Breakpoint
n <M-CR> *@<Lua 394: ~/.local/share/nvim/lazy/alpha-nvim/lua/alpha.lua:708>
n <Plug>PlenaryTestFile *:lua require('plenary.test_harness').test_directory(vim.fn.expand("%:p"))<CR>
n <Space> * <Cmd>lua require("which-key").show(" ", {mode = "n", auto = true})<CR>
n <Space>/ * <Lua 279: ~/.config/nvim/lua/astronvim/mappings.lua:139> Comment line
n <Space><Space> * <Lua 49: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Harpoon
n <Space><Space>a * <Lua 81: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Add file
n <Space><Space>e * <Lua 82: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Toggle quick menu
n <Space><Space>j * <Lua 48: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Goto to TMUX tmux window
n <Space><Space>m * <Lua 83: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Show marks in Telescope
n <Space><Space>t * <Lua 84: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Goto to terminal window
n <Space>a * <Lua 102: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Annotation
n <Space>a<CR> * <Lua 103: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Current
n <Space>ac * <Lua 104: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Class
n <Space>af * <Lua 105: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Function
n <Space>aF * <Lua 96: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> File
n <Space>at * <Lua 86: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Type
n <Space>b\ * <Lua 285: ~/.config/nvim/lua/astronvim/mappings.lua:100> Horizontal split buffer from tabline
n <Space>b| * <Lua 284: ~/.config/nvim/lua/astronvim/mappings.lua:109> Vertical split buffer from tabline
n <Space>bb * <Lua 294: ~/.config/nvim/lua/astronvim/mappings.lua:71> Select buffer from tabline
n <Space>bC * <Lua 295: ~/.config/nvim/lua/astronvim/mappings.lua:69> Close all buffers
n <Space>bc * <Lua 296: ~/.config/nvim/lua/astronvim/mappings.lua:68> Close all buffers except current
n <Space>bd * <Lua 293: ~/.config/nvim/lua/astronvim/mappings.lua:77> Delete buffer from tabline
n <Space>bD * <Lua 320: ~/.config/astronvim/lua/user/mappings.lua:13> Pick to close
n <Space>bl * <Lua 292: ~/.config/nvim/lua/astronvim/mappings.lua:85> Close all buffers to the left
n <Space>bn * <Cmd>tabnew<CR> New tab
n <Space>br * <Lua 291: ~/.config/nvim/lua/astronvim/mappings.lua:87> Close all buffers to the right
n <Space>bse * <Lua 290: ~/.config/nvim/lua/astronvim/mappings.lua:90> Sort by extension (buffers)
n <Space>bsi * <Lua 287: ~/.config/nvim/lua/astronvim/mappings.lua:96> Sort by buffer number (buffers)
n <Space>bsm * <Lua 286: ~/.config/nvim/lua/astronvim/mappings.lua:98> Sort by modification (buffers)
n <Space>bsp * <Lua 288: ~/.config/nvim/lua/astronvim/mappings.lua:94> Sort by full path (buffers)
n <Space>bsr * <Lua 289: ~/.config/nvim/lua/astronvim/mappings.lua:92> Sort by relative path (buffers)
n <Space>C * <Lua 299: ~/.config/nvim/lua/astronvim/mappings.lua:50> Force close buffer
n <Space>c * <Lua 300: ~/.config/nvim/lua/astronvim/mappings.lua:49> Close buffer
n <Space>dB * <Lua 328: ~/.config/nvim/lua/astronvim/mappings.lua:357> Clear Breakpoints
n <Space>db * <Lua 329: ~/.config/nvim/lua/astronvim/mappings.lua:356> Toggle Breakpoint (F9)
n <Space>dC * <Lua 324: ~/.config/nvim/lua/astronvim/mappings.lua:360> Conditional Breakpoint (S-F9)
n <Space>dc * <Lua 326: ~/.config/nvim/lua/astronvim/mappings.lua:358> Start/Continue (F5)
n <Space>dE * <Lua 308: ~/.config/nvim/lua/astronvim/mappings.lua:379> Evaluate Input
n <Space>dh * <Lua 305: ~/.config/nvim/lua/astronvim/mappings.lua:388> Debugger Hover
n <Space>di * <Lua 323: ~/.config/nvim/lua/astronvim/mappings.lua:367> Step Into (F11)
n <Space>dO * <Lua 321: ~/.config/nvim/lua/astronvim/mappings.lua:369> Step Out (S-F11)
n <Space>do * <Lua 322: ~/.config/nvim/lua/astronvim/mappings.lua:368> Step Over (F10)
n <Space>dp * <Lua 316: ~/.config/nvim/lua/astronvim/mappings.lua:372> Pause (F6)
n <Space>dQ * <Lua 318: ~/.config/nvim/lua/astronvim/mappings.lua:371> Terminate Session (S-F5)
n <Space>dq * <Lua 319: ~/.config/nvim/lua/astronvim/mappings.lua:370> Close Session
n <Space>dR * <Lua 312: ~/.config/nvim/lua/astronvim/mappings.lua:374> Toggle REPL
n <Space>dr * <Lua 314: ~/.config/nvim/lua/astronvim/mappings.lua:373> Restart (C-F5)
n <Space>ds * <Lua 310: ~/.config/nvim/lua/astronvim/mappings.lua:375> Run To Cursor
n <Space>du * <Lua 315: ~/.config/nvim/lua/astronvim/mappings.lua:387> Toggle Debugger UI
n <Space>e * <Cmd>Neotree toggle<CR> Toggle Explorer
n <Space>f' * <Lua 255: ~/.config/nvim/lua/astronvim/mappings.lua:241> Find marks
n <Space>f<CR> * <Lua 256: ~/.config/nvim/lua/astronvim/mappings.lua:240> Resume previous search
n <Space>fa * <Lua 254: ~/.config/nvim/lua/astronvim/mappings.lua:243> Find AstroNvim config files
n <Space>fb * <Lua 253: ~/.config/nvim/lua/astronvim/mappings.lua:263> Find buffers
n <Space>fC * <Lua 251: ~/.config/nvim/lua/astronvim/mappings.lua:266> Find commands
n <Space>fc * <Lua 252: ~/.config/nvim/lua/astronvim/mappings.lua:265> Find for word under cursor
n <Space>fF * <Lua 248: ~/.config/nvim/lua/astronvim/mappings.lua:269> Find all files
n <Space>ff * <Lua 249: ~/.config/nvim/lua/astronvim/mappings.lua:267> Find files
n <Space>fh * <Lua 247: ~/.config/nvim/lua/astronvim/mappings.lua:272> Find help
n <Space>fk * <Lua 245: ~/.config/nvim/lua/astronvim/mappings.lua:273> Find keymaps
n <Space>fm * <Lua 309: ~/.config/nvim/lua/astronvim/mappings.lua:274> Find man
n <Space>fn * <Lua 242: ~/.config/nvim/lua/astronvim/mappings.lua:277> Find notifications
n <Space>fo * <Lua 240: ~/.config/nvim/lua/astronvim/mappings.lua:279> Find history
n <Space>fr * <Lua 239: ~/.config/nvim/lua/astronvim/mappings.lua:280> Find registers
n <Space>ft * <Lua 238: ~/.config/nvim/lua/astronvim/mappings.lua:282> Find themes
n <Space>fW * <Lua 236: ~/.config/nvim/lua/astronvim/mappings.lua:285> Find words in all files
n <Space>fw * <Lua 237: ~/.config/nvim/lua/astronvim/mappings.lua:283> Find words
n <Space>gb * <Lua 259: ~/.config/nvim/lua/astronvim/mappings.lua:237> Git branches
n <Space>gc * <Lua 258: ~/.config/nvim/lua/astronvim/mappings.lua:238> Git commits
n <Space>gd * <Lua 268: ~/.config/nvim/lua/astronvim/mappings.lua:159> View Git diff
n <Space>gg * <Lua 304: ~/.config/nvim/lua/astronvim/mappings.lua:312> ToggleTerm lazygit
n <Space>gh * <Lua 273: ~/.config/nvim/lua/astronvim/mappings.lua:154> Reset Git hunk
n <Space>gL * <Lua 275: ~/.config/nvim/lua/astronvim/mappings.lua:152> View full Git blame
n <Space>gl * <Lua 276: ~/.config/nvim/lua/astronvim/mappings.lua:151> View Git blame
n <Space>gp * <Lua 274: ~/.config/nvim/lua/astronvim/mappings.lua:153> Preview Git hunk
n <Space>gr * <Lua 272: ~/.config/nvim/lua/astronvim/mappings.lua:155> Reset Git buffer
n <Space>gS * <Lua 270: ~/.config/nvim/lua/astronvim/mappings.lua:157> Stage Git buffer
n <Space>gs * <Lua 271: ~/.config/nvim/lua/astronvim/mappings.lua:156> Stage Git hunk
n <Space>gt * <Lua 257: ~/.config/nvim/lua/astronvim/mappings.lua:239> Git status
n <Space>gu * <Lua 269: ~/.config/nvim/lua/astronvim/mappings.lua:158> Unstage Git hunk
n <Space>h * <Lua 280: ~/.config/nvim/lua/astronvim/mappings.lua:125> Home Screen
n <Space>lD * <Lua 313: ~/.config/nvim/lua/astronvim/mappings.lua:293> Search diagnostics
n <Space>ls * <Lua 235: ~/.config/nvim/lua/astronvim/mappings.lua:295> Search symbols
n <Space>lS * <Lua 260: ~/.config/nvim/lua/astronvim/mappings.lua:230> Symbols outline
n <Space>n * <Cmd>enew<CR> New File
n <Space>o * <Lua 267: ~/.config/nvim/lua/astronvim/mappings.lua:166> Toggle Explorer Focus
n <Space>p * <Cmd>lua require("which-key").show(" p", {mode = "n", auto = true})<CR>
n <Space>pA * <Cmd>AstroUpdate<CR> AstroNvim Update
n <Space>pa * <Cmd>AstroUpdatePackages<CR> Update Plugins and Mason
n <Space>pi * <Lua 307: ~/.config/nvim/lua/astronvim/mappings.lua:36> Plugins Install
n <Space>pl * <Cmd>AstroChangelog<CR> AstroNvim Changelog
n <Space>pm * <Cmd>Mason<CR> Mason Installer
n <Space>pM * <Cmd>MasonUpdateAll<CR> Mason Update
n <Space>pS * <Lua 233: ~/.config/nvim/lua/astronvim/mappings.lua:38> Plugins Sync
n <Space>ps * <Lua 234: ~/.config/nvim/lua/astronvim/mappings.lua:37> Plugins Status
n <Space>pU * <Lua 229: ~/.config/nvim/lua/astronvim/mappings.lua:40> Plugins Update
n <Space>pu * <Lua 231: ~/.config/nvim/lua/astronvim/mappings.lua:39> Plugins Check Updates
n <Space>pv * <Cmd>AstroVersion<CR> AstroNvim Version
n <Space>q * <Cmd>confirm q<CR> Quit
n <Space>s * <Lua 45: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Search / Replace
n <Space>S. * <Cmd>SessionManager! load_current_dir_session<CR> Load current directory session
n <Space>Sd * <Cmd>SessionManager! delete_session<CR> Delete session
n <Space>Sf * <Cmd>SessionManager! load_session<CR> Search sessions
n <Space>sf * <Lua 36: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Spectre (current file)
n <Space>Sl * <Cmd>SessionManager! load_last_session<CR> Load last session
n <Space>Ss * <Cmd>SessionManager! save_current_session<CR> Save this session
n <Space>ss * <Lua 35: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Spectre
n <Space>tf * <Cmd>ToggleTerm direction=float<CR> ToggleTerm float
n <Space>th * <Cmd>ToggleTerm size=10 direction=horizontal<CR> ToggleTerm horizontal split
n <Space>tl * <Lua 232: ~/.config/nvim/lua/astronvim/mappings.lua:313> ToggleTerm lazygit
n <Space>tn * <Lua 230: ~/.config/nvim/lua/astronvim/mappings.lua:316> ToggleTerm node
n <Space>tp * <Lua 311: ~/.config/nvim/lua/astronvim/mappings.lua:325> ToggleTerm python
n <Space>tt * <Lua 306: ~/.config/nvim/lua/astronvim/mappings.lua:322> ToggleTerm btm
n <Space>tu * <Lua 355: ~/.config/nvim/lua/astronvim/mappings.lua:319> ToggleTerm gdu
n <Space>tv * <Cmd>ToggleTerm size=80 direction=vertical<CR> ToggleTerm vertical split
n <Space>ua * <Lua 350: ~/.config/nvim/lua/astronvim/utils/ui.lua:27> Toggle autopairs
n <Space>ub * <Lua 303: ~/.config/nvim/lua/astronvim/utils/ui.lua:58> Toggle background
n <Space>uC * <Cmd>ColorizerToggle<CR> Toggle color highlight
n <Space>uc * <Lua 354: ~/.config/nvim/lua/astronvim/utils/ui.lua:64> Toggle autocompletion
n <Space>ud * <Lua 353: ~/.config/nvim/lua/astronvim/utils/ui.lua:43> Toggle diagnostics
n <Space>ug * <Lua 301: ~/.config/nvim/lua/astronvim/utils/ui.lua:134> Toggle signcolumn
n <Space>uh * <Lua 352: ~/.config/nvim/lua/astronvim/utils/ui.lua:215> Toggle foldcolumn
n <Space>ui * <Lua 325: ~/.config/nvim/lua/astronvim/utils/ui.lua:146> Change indent setting
n <Space>ul * <Lua 330: ~/.config/nvim/lua/astronvim/utils/ui.lua:117> Toggle statusline
n <Space>uL * <Lua 345: ~/.config/nvim/lua/astronvim/utils/ui.lua:98> Toggle CodeLens
n <Space>uN * <Lua 340: ~/.config/nvim/lua/astronvim/utils/ui.lua:21> Toggle UI notifications
n <Space>un * <Lua 343: ~/.config/nvim/lua/astronvim/utils/ui.lua:161> Change line numbering
n <Space>up * <Lua 338: ~/.config/nvim/lua/astronvim/utils/ui.lua:183> Toggle paste mode
n <Space>uS * <Lua 332: ~/.config/nvim/lua/astronvim/utils/ui.lua:111> Toggle conceal
n <Space>us * <Lua 335: ~/.config/nvim/lua/astronvim/utils/ui.lua:177> Toggle spellcheck
n <Space>uT * <Cmd>TransparentToggle<CR> Toggle transparency
n <Space>ut * <Lua 302: ~/.config/nvim/lua/astronvim/utils/ui.lua:105> Toggle tabline
n <Space>uu * <Lua 351: ~/.config/nvim/lua/astronvim/utils/ui.lua:208> Toggle URL highlight
n <Space>uw * <Lua 349: ~/.config/nvim/lua/astronvim/utils/ui.lua:189> Toggle wrap
n <Space>uy * <Lua 346: ~/.config/nvim/lua/astronvim/utils/ui.lua:195> Toggle syntax highlight
n <Space>w * <Cmd>w<CR> Save
n <Space>x * <Lua 126: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Trouble
n <Space>xl * <Lua 171: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Location List (Trouble)
n <Space>xq * <Lua 172: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Quickfix List (Trouble)
n <Space>xX * <Lua 132: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Workspace Diagnostics (Trouble)
n <Space>xx * <Lua 170: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Document Diagnostics (Trouble)
n > * <Cmd>lua require("which-key").show(">", {mode = "n", auto = true})<CR>
n >b * <Lua 298: ~/.config/nvim/lua/astronvim/mappings.lua:58> Move buffer tab right
n | * <Cmd>vsplit<CR> Vertical Split
n c * <Cmd>lua require("which-key").show("c", {mode = "n", auto = true})<CR>
n d * <Cmd>lua require("which-key").show("d", {mode = "n", auto = true})<CR>
n g * <Cmd>lua require("which-key").show("g", {mode = "n", auto = true})<CR>
n gb * <Lua 123: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Comment toggle blockwise
n gc * <Lua 107: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Comment toggle linewise
n gx * <Lua 241: ~/.config/nvim/lua/astronvim/utils/init.lua:134> Open the file under cursor with system app
n j * v:count == 0 ? 'gj' : 'j' Move cursor down
n k * v:count == 0 ? 'gk' : 'k' Move cursor up
n v * <Cmd>lua require("which-key").show("v", {mode = "n", auto = true})<CR>
n y * <Cmd>lua require("which-key").show("y", {mode = "n", auto = true})<CR>
n Y * y$ Nvim builtin
n z * <Cmd>lua require("which-key").show("z", {mode = "n", auto = true})<CR>
n zM * <Lua 244: ~/.config/nvim/lua/astronvim/mappings.lua:395> Close all folds
n zm * <Lua 317: ~/.config/nvim/lua/astronvim/mappings.lua:397> Fold more
n zp * <Lua 347: ~/.config/nvim/lua/astronvim/mappings.lua:398> Peek fold
n zr * <Lua 243: ~/.config/nvim/lua/astronvim/mappings.lua:396> Fold less
n zR * <Lua 336: ~/.config/nvim/lua/astronvim/mappings.lua:394> Open all folds
v <Tab> * >gv indent line
v <S-Tab> * <gv unindent line
v <Space>/ * <Esc><Cmd>lua require('Comment.api').toggle.linewise(vim.fn.visualmode())<CR> Toggle comment line
v <Space>dE * <Lua 228: ~/.config/nvim/lua/astronvim/mappings.lua:386> Evaluate Input
v gb * <Lua 124: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Comment toggle blockwise
v gc * <Lua 114: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Comment toggle linewise
x " * <Cmd>lua require("which-key").show("\"", {mode = "v", auto = true})<CR>
x ** y/\V<C-R>"<CR> Nvim builtin
x # * y?\V<C-R>"<CR> Nvim builtin
x <Space> * <Cmd>lua require("which-key").show(" ", {mode = "v", auto = true})<CR>
x <Space>s * <Lua 46: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Search / Replace
x <Space>sw * <Lua 47: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:67> Spectre (current word)
x g * <Cmd>lua require("which-key").show("g", {mode = "v", auto = true})<CR>
```

View File

@@ -31,7 +31,7 @@ Leader: `<ctrl><space>`
; Move to the previously active pane ; Move to the previously active pane
= Choose a paste buffer from a list = Choose a paste buffer from a list
? List key bindings ? List key bindings
D Choose a client from a list D Choose and detach a client from a list
E Spread panes out evenly E Spread panes out evenly
L Switch to the last client L Switch to the last client
M Clear the marked pane M Clear the marked pane

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

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

1
local/bin/asdf Submodule

Submodule local/bin/asdf added at ccdd47df9b

View File

@@ -14,19 +14,92 @@
SCRIPT=$(basename "$0") 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" 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 # 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>" USAGE_PREFIX="$SCRIPT install <command>"
@@ -56,29 +129,29 @@ function section_install
case "$1" in case "$1" in
all) all)
msgr msg "Starting to install all and reloading configurations..." msgr msg "Starting to install all and reloading configurations..."
x-load-configs
$0 install macos $0 install macos
$0 install fonts $0 install fonts
$0 install antigen $0 install antigen
$0 brew install $0 brew install
$0 install ohmyposh $0 install ohmyposh
$0 install ohmybash $0 install asdf
$0 install pip # $0 install ohmybash
$0 install cargo # $0 install pip
# $0 install cargo
$0 install composer $0 install composer
$0 install dotenv # $0 install dotenv
$0 install fzf $0 install fzf
$0 install gh # $0 install gh
$0 install go # $0 install go
$0 install cheat-databases $0 install cheat-databases
$0 install imagick $0 install imagick
$0 install neofetch # $0 install neofetch
$0 install nvm # $0 install nvm
$0 install npm # $0 install npm
$0 install ntfy $0 install ntfy
$0 install z $0 install z
msgr msg "Reloading configurations again..." msgr msg "Reloading configurations again..."
x-load-configs source "$DOTFILES/config/shared.sh"
msgr yay "All done!" msgr yay "All done!"
;; ;;
antigen) antigen)
@@ -86,6 +159,11 @@ function section_install
curl -sSfL git.io/antigen -o "$DOTFILES/local/bin/antigen.zsh" \ curl -sSfL git.io/antigen -o "$DOTFILES/local/bin/antigen.zsh" \
&& msg_yay "New antigen installed!" && msg_yay "New antigen installed!"
;; ;;
asdf)
msg "Installing asdf..."
bash "$DOTFILES/scripts/install-asdf.sh" \
&& msg_yay "asdf installed!"
;;
cargo) cargo)
msg "Installing cargo packages..." msg "Installing cargo packages..."
bash "$DOTFILES/scripts/install-cargo-packages.sh" \ bash "$DOTFILES/scripts/install-cargo-packages.sh" \
@@ -204,7 +282,7 @@ function section_install
esac esac
} }
function section_brew section_brew()
{ {
USAGE_PREFIX="$SCRIPT brew <command>" USAGE_PREFIX="$SCRIPT brew <command>"
@@ -213,6 +291,8 @@ function section_brew
"update:Updates and upgrades brew packages" "update:Updates and upgrades brew packages"
"updatebundle:Updates Brewfile with descriptions" "updatebundle:Updates Brewfile with descriptions"
"autoupdate:Setups brew auto-update and runs it immediately" "autoupdate:Setups brew auto-update and runs it immediately"
"leaves:List brew leaves (installed on request)"
"clean:Clean up brew packages"
) )
x-have brew && { x-have brew && {
@@ -225,12 +305,18 @@ function section_brew
msg_yay "Done!" msg_yay "Done!"
;; ;;
updatebundle) updatebundle)
# Updates .dotfiles/Brewfile with descriptions # Updates .dotfiles/homebrew/Brewfile with descriptions
brew bundle dump \ brew bundle dump \
--force \ --force \
--file="$BREWFILE" \ --file="$BREWFILE" \
--describe && msg_yay "Done!" --describe && msg_yay "Done!"
;; ;;
leaves)
brew leaves --installed-on-request
;;
clean)
brew bundle cleanup --file="$BREWFILE" && msg_yay "Done!"
;;
autoupdate) autoupdate)
brew autoupdate delete brew autoupdate delete
brew autoupdate start 43200 --upgrade --cleanup --immediate brew autoupdate start 43200 --upgrade --cleanup --immediate
@@ -244,7 +330,7 @@ function section_brew
! x-have brew && menu_section "$USAGE_PREFIX" "brew not available on this system" ! x-have brew && menu_section "$USAGE_PREFIX" "brew not available on this system"
} }
function section_helpers section_helpers()
{ {
USAGE_PREFIX="$SCRIPT helpers <command>" USAGE_PREFIX="$SCRIPT helpers <command>"
MENU=( MENU=(
@@ -260,21 +346,23 @@ function section_helpers
esac esac
} }
function section_docs section_docs()
{ {
USAGE_PREFIX="$SCRIPT docs <command>" USAGE_PREFIX="$SCRIPT docs <command>"
MENU=( MENU=(
"tmux:Update tmux keybindings documentation" "tmux:Update tmux keybindings documentation"
"nvim:Update nvim keybindings documentation"
) )
case "$1" in case "$1" in
tmux) bash "$DOTFILES/local/bin/x-dfm-docs-xterm-keybindings" ;; tmux) bash "$DOTFILES/local/bin/x-dfm-docs-xterm-keybindings" ;;
nvim) bash "$DOTFILES/scripts/create-nvim-keymaps.sh" ;;
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;; *) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
esac esac
} }
function section_dotfiles section_dotfiles()
{ {
USAGE_PREFIX="$SCRIPT dotfiles <command>" USAGE_PREFIX="$SCRIPT dotfiles <command>"
@@ -330,7 +418,7 @@ function section_dotfiles
esac esac
} }
function section_check section_check()
{ {
USAGE_PREFIX="$SCRIPT check <command>" USAGE_PREFIX="$SCRIPT check <command>"
X_HOSTNAME=$(hostname) X_HOSTNAME=$(hostname)
@@ -355,7 +443,7 @@ function section_check
} }
# Secret menu for visual tests # Secret menu for visual tests
function section_tests section_tests()
{ {
USAGE_PREFIX="$SCRIPT tests <command>" USAGE_PREFIX="$SCRIPT tests <command>"
@@ -384,7 +472,7 @@ function section_tests
esac esac
} }
function usage usage()
{ {
echo "" echo ""
msg_prompt "Usage: $SCRIPT <section> <command>" msg_prompt "Usage: $SCRIPT <section> <command>"

View File

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

@@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# msgr / Messanger helper # msgr / Messenger helper
# Copyright (c) 2023 Ismo Vuorinen. All Rights Reserved. # Copyright (c) 2023 Ismo Vuorinen. All Rights Reserved.
# MIT License, https://opensource.org/license/mit/ # MIT License, https://opensource.org/license/mit/

View File

@@ -3,33 +3,84 @@
# Backup a folder with a timestamp # Backup a folder with a timestamp
# Usage: x-backup-folder folder_to_backup [filename] # Usage: x-backup-folder folder_to_backup [filename]
# If filename is not provided, folder_to_backup will be used # If filename is not provided, folder_to_backup will be used
#
# Example: x-backup-folder ~/Documents/MyFolder # Example: x-backup-folder ~/Documents/MyFolder
# #
# Copyright (c) 2022 Ismo Vuorinen. All Rights Reserved. # Copyright (c) 2022 Ismo Vuorinen. All Rights Reserved.
# Licensed under the MIT license. # Licensed under the MIT license.
DIRECTORY=$1 set -euo pipefail
FILENAME=$2
if [ -z "${DIRECTORY}" ]; then # Enable verbosity with VERBOSE=1
echo "DIRECTORY (first argument) is missing" VERBOSE="${VERBOSE:-0}"
echo "Usage: $0 folder_to_backup"
exit
fi
if [ -z "${FILENAME}" ]; then # Function to print usage information
FILENAME=$DIRECTORY usage()
fi {
echo "Usage: $0 folder_to_backup [filename]"
exit 1
}
FILENAME=$( # Function to print messages if VERBOSE is enabled
${FILENAME} \ # $1 - message (string)
| tr '/' _ \ msg()
| iconv -t ascii//TRANSLIT \ {
| sed -r s/[^a-zA-Z0-9]+/_/g \ [[ "$VERBOSE" -eq 1 ]] && echo "$1"
| sed -r s/^_+\|-+$//g }
)
TIMESTAMP=$(date "+%Y%m%d_%H%M%S") # Function to print error messages and exit
FILENAME_TIMESTAMP="${FILENAME}_${TIMESTAMP}" # $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 #!/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 # Ismo Vuorinen <https://github.com/ivuorinen> 2018
# License: MIT # License: MIT
SCRIPT=$(basename "$0") set -euo pipefail
PREFIX=$1
FILENAME=$2
DATABASE=$3
: "${VERBOSE:=0}" # Enable verbosity with VERBOSE=1
: "${DEFAULT_DATABASE:="wordpress"}" VERBOSE="${VERBOSE:-0}"
# Default database
DEFAULT_DATABASE="wordpress"
if [ -z "${PREFIX}" ]; then # Function to print usage information
echo "(!) TABLE_PREFIX (first argument) is missing" usage()
{
echo "(>) Usage: $SCRIPT <TABLE_PREFIX> <FILENAME_PREFIX> [<DATABASE>]" echo "(>) Usage: $SCRIPT <TABLE_PREFIX> <FILENAME_PREFIX> [<DATABASE>]"
echo " * <TABLE_PREFIX> = database table prefix, e.g. 'wp_'" 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 " * <FILENAME_PREFIX> = FILENAME prefix, defaults to table prefix. Use something descriptive e.g. 'wordpress'"
echo " * <DATABASE> = [optional] Third argument DATABASE, defaults to '$DEFAULT_DATABASE'." echo " * <DATABASE> = [optional] Third argument DATABASE, defaults to '$DEFAULT_DATABASE'."
exit 0 exit 1
fi }
if [ -z "${FILENAME}" ]; then # Function to print messages if VERBOSE is enabled
# echo "FILENAME (second argument) is missing, using PREFIX ($PREFIX)" # $1 - message (string)
FILENAME=$PREFIX msg()
fi {
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
}
if [ -z "${DATABASE}" ]; then # Function to print error messages and exit
# echo "DATABASE (third argument) is missing, using default ($DEFAULT_DATABASE)" # $1 - error message (string)
DATABASE=$DEFAULT_DATABASE msg_err()
fi {
echo "(!) ERROR: $1" >&2
exit 1
}
TIMESTAMP=$(date "+%Y%m%d_%H%M%S") # Function to backup MySQL tables with a certain prefix
FILENAME_TIMESTAMP="${DATABASE}_${FILENAME}_${TIMESTAMP}.sql" # $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 \ local timestamp
"${DATABASE}" \ timestamp=$(date "+%Y%m%d_%H%M%S")
"$( local filename_timestamp="${database}_${filename}_${timestamp}.sql"
echo "show tables like '${PREFIX}%';" \
| mysql "${DATABASE}" \ msg "Backing up tables with prefix '$prefix' from database '$database' to file '$filename_timestamp'"
| sed '/Tables_in/d'
)" > "${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

@@ -0,0 +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"
# 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
}
# 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 #!/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 # Ismo Vuorinen <https://github.com/ivuorinen> 2022
# source "${DOTFILES}/config/shared.sh"
if ! command -v git &> /dev/null; then set -euo pipefail
echo "git could not be found, please install it first"
exit 1
fi
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 # Function to check if git is installed
echo ".gitattributes rule missing for the following files:" check_git_installed()
echo "$missing_attributes" {
else if ! command -v git &> /dev/null; then
echo "All files have a corresponding rule in .gitattributes" msg_err "git could not be found, please install it first"
fi 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. # Copyright (c) 2023 Ismo Vuorinen. All Rights Reserved.
# Licensed under MIT License. http://www.opensource.org/licenses/mit-license. # 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" echo "Usage: $0 full/path/to/dir/to/create"
exit 1 exit 1
} }
if [ ! -d "$dir" ]; then # Function to print messages if VERBOSE is enabled
mkdir -p "$dir" && exit 0 # $1 - message (string)
fi 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 # x-xterm-update-keybindings
# Updates $HOME/.dotfiles/docs/tmux.md with my 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 # Enable verbosity with VERBOSE=1
source "$HOME/.dotfiles/scripts/shared.sh" VERBOSE="${VERBOSE:-0}"
x-have tmux || { # Check if tmux is installed
msg_err "tmux not found" && exit 0 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" local cb="\n\`\`\`\n"
KB=$(tmux lsk -Tprefix -N | sed -e 's/^/ /;') local kb
H="# tmux keybindings\n" kb=$(tmux lsk -Tprefix -N | sed -e 's/^/ /;')
L="\nLeader: \`<ctrl><space>\`\n" local h="# tmux keybindings\n"
local l="\nLeader: \`<ctrl><space>\`\n"
# Generalize expanded $HOME to "$HOME" # Generalize expanded $HOME to "$HOME"
KB="${KB//$HOME/\$HOME}" kb="${kb//$HOME/\$HOME}"
msg "Outputting tmux keybindings to $TMUX_KEYBINDINGS_DOCS" msg "Outputting tmux keybindings to $tmux_keybindings_docs"
echo -e "${H}${L}${CB}${KB}${CB}" > "$TMUX_KEYBINDINGS_DOCS" echo -e "${h}${l}${cb}${kb}${cb}" > "$tmux_keybindings_docs"
msg_done "Done!" 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

@@ -0,0 +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
set -euo pipefail
# 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
}
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "$1"
return 0
}
# Function to fetch the tarball URL of the latest release from GitHub
# $1 - GitHub repository (string)
get_latest_tarball_url()
{
local repo=$1
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

@@ -0,0 +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
set -euo pipefail
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
# Function to print usage information
usage()
{
echo "Usage: $0 <repo> (e.g. ivuorinen/dotfiles)"
exit 1
}
# 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 -F '"' '{print $4}')
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 #!/usr/bin/env bash
# Returns which status # Returns which status
which "$1" >&/dev/null
if [ $? -eq 0 ]; then # Enable verbosity with VERBOSE=1
exit 0 VERBOSE="${VERBOSE:-0}"
else
# Function to print usage information
usage()
{
echo "Usage: $0 <command>"
exit 1 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 # Load our configuration files
# Copyright (c) 2023 Ismo Vuorinen. All Rights Reserved. # Copyright (c) 2023 Ismo Vuorinen. All Rights Reserved.
set -euo pipefail DOTFILES="${DOTFILES:-$HOME/.dotfiles}"
# Set verbosity with VERBOSE=1 x-load-configs source "$DOTFILES/config/shared.sh"
VERBOSE="${VERBOSE:=0}"
[ "$VERBOSE" = "1" ] && { # Enable verbosity with VERBOSE=1 x-load-configs
set -x 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="${DOTFILES}/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: local msg_type="$1"
HOST="$(hostname -s)" local msg_content="$2"
[ "$VERBOSE" = "1" ] && { [[ "$VERBOSE" -eq 1 ]] && printf 'x-load-configs: %s %s\n' "$msg_type" "$msg_content"
echo "x-load-configs: VERBOSE=1" return 0
echo "x-load-configs: HOST: $HOST"
} }
configFile() # Function to get the full path of a config file
# $1 - filename (string)
config_file_path()
{ {
echo "$CONFIG_PATH/$1" 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 local config_file="$1"
SECRET_FILE=$CONFIG_FILE-secret local secret_file="${config_file}-secret"
HOST_FILE=$CONFIG_FILE-$HOST local host_file="${config_file}-${CONFIG_HOST}"
SECRET_HOST=$HOST_FILE-secret local secret_host_file="${host_file}-secret"
[ "$VERBOSE" = "1" ] && configMsg "?" "$CONFIG_FILE" config_msg "Looking for" "$config_file"
[ -r "$config_file" ] && {
# global (exports|alias|functions) FILENAME for all hosts source_config "$config_file"
# shellcheck source=../config/exports
[ -r "$CONFIG_FILE" ] && {
source "$CONFIG_FILE" && [ "$VERBOSE" = "1" ] && configMsg "Found" "$CONFIG_FILE"
} }
# global secret FILENAME, git ignored config_msg "Looking for" "$secret_file"
# shellcheck source=../config/exports-secret [ -r "$secret_file" ] && {
[ "$VERBOSE" = "1" ] && configMsg "?" "$SECRET_FILE" source_config "$secret_file"
[ -r "$SECRET_FILE" ] && {
source "$SECRET_FILE" && [ "$VERBOSE" = "1" ] && configMsg "Found" "$SECRET_FILE"
} }
# host specific (exports|alias|functions) FILENAME
# shellcheck source=../config/exports config_msg "Looking for" "$host_file"
[ "$VERBOSE" = "1" ] && configMsg "?" "$HOST_FILE" [ -r "$host_file" ] && {
[ -r "$HOST_FILE" ] && { source_config "$host_file"
source "$HOST_FILE" && [ "$VERBOSE" = "1" ] && configMsg "Found" "$HOST_FILE"
} }
# host specific (exports|alias|functions) FILENAME, git ignored
# shellcheck source=../config/exports config_msg "Looking for" "$secret_host_file"
[ "$VERBOSE" = "1" ] && configMsg "?" "$SECRET_HOST" [ -r "$secret_host_file" ] && {
[ -r "$SECRET_HOST" ] && { source_config "$secret_host_file"
source "$SECRET_HOST" \
&& [ "$VERBOSE" = "1" ] && configMsg "Found" "$SECRET_HOST"
} }
return 0
} }
FILE_EXPORTS=$(configFile "exports") config_msg "VERBOSE=1" "Verbose mode enabled"
FILE_FUNCTIONS=$(configFile "functions") config_msg "HOST" "$CONFIG_HOST"
FILE_ALIAS=$(configFile "alias")
loadConfigFiles "$FILE_EXPORTS"
loadConfigFiles "$FILE_FUNCTIONS"
loadConfigFiles "$FILE_ALIAS"
load_config_files "$(config_file_path "exports")"
load_config_files "$(config_file_path "alias")"
exit 0 exit 0

View File

@@ -1,4 +1,50 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#
# Create a directory and cd into it # 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 # Modified by: Ismo Vuorinen <https://github.com/ivuorinen> 2020
# Originally from: https://www.commandlinefu.com/commands/view/8951 # Originally from: https://www.commandlinefu.com/commands/view/8951
# Original author: https://www.commandlinefu.com/commands/by/wickedcpj # Original author: https://www.commandlinefu.com/commands/by/wickedcpj
#
echo 'User: Command: PID: Port:'
echo '========================================================='
lsof -i 4 -P -n +c 0 \ set -euo pipefail
| 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
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. # Add a directory to the beginning of the PATH if it's not already there.
# Usage: x-path-append <dir> # Usage: x-path-append <dir>
x-path-remove "$1" # Set verbosity with VERBOSE=1
export PATH="${PATH:+"$PATH:"}$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 # Add a directory to the front of the PATH if it exists and is not already there
# Usage: x-path-prepend <dir> # 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 # Remove a directory from the PATH
# Usage: x-path-remove <dir> # 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 #!/usr/bin/env php
<?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); error_reporting(E_ALL);
$debug = false; $debug = false;

View File

@@ -14,168 +14,119 @@
# pkill (coreutils) # pkill (coreutils)
# #
# 2021-2022 : João F. © BeyondMagic <koetemagie@gmail.com> # 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. [ "$VERBOSE" -eq 1 ] && echo "$1"
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"
} }
# 2. Functions to minise code. # Notify function
#{
# I.
notify() notify()
{ {
notify-call --replace-file "$replace_id" "$@"
notify-call \
--replace-file "$replace_id" \
"$@"
} }
# II. # Stop recording function
stop() stop()
{ {
# A.
#pkill -INT -f 'ffmpeg -f alsa -ac 1 -i pulse -f x11grab -r 30 -s '
giph --stop giph --stop
# C.
eww update record_menu=false 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 for cmd in ffmpeg notify-send.sh pkill eww giph slop; do
if ! command -v "$cmd" &> /dev/null; then
# A. From <WxH+X+Y> monitor. echo "Required command '$cmd' not found. Please install it before running this script."
geometry="$(xrandr | awk '/ primary/{print $4}')" exit 1
fi
elif [ "$2" = 'set' ]; then done
}
# 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
# 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 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" mkdir -p "$path_recordings"
name_file="$path_recordings/$2-$(date +'%a_%b_%d_%H:%M:%S').$1" 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 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 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 if [ "$responder" = 'open' ]; then
nohup gtk-launch "$(xdg-mime query default inode/directory)" "$path_recordings/" > /dev/null 2>&1 &
# I.
nohup \
gtk-launch \
"$(xdg-mime query default inode/directory)" \
"$path_recordings/" \
> /dev/null 2>&1 &
fi 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 #!/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. # Copyright (c) 2023 Ismo Vuorinen. All Rights Reserved.
set -euo pipefail set -euo pipefail
# Set verbosity with VERBOSE=1 x-load-configs # Set verbosity with VERBOSE=1 x-set-php-aliases
VERBOSE="${VERBOSE:=0}" VERBOSE="${VERBOSE:-0}"
[ "$VERBOSE" = "2" ] && { # Enable debugging if verbosity is set to 2
set -x [ "$VERBOSE" = "2" ] && set -x
}
! x-have brew && { # Check if brew is installed, if not exit.
if ! command -v brew &> /dev/null; then
exit 0 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 # Function to create aliases for each PHP version
php_versions=() create_aliases()
while IFS="" read -r line; do php_versions+=("$line"); done < <(bkt -- brew list | grep '^php') {
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 # Drop the dot from version (e.g., 8.0 -> 80)
[ "$VERBOSE" = "1" ] && echo "Setting aliases for $version" local php_abbr="${version//\./}"
# drop the dot from version (8.0 -> 80) # Replace "php@" with "p" so "php@80" becomes "p80"
php_abbr="${version//\./}" local php_alias="${php_abbr//php@/p}"
# replace "php@" with "p" so "php@80" becomes "p80"
php_alias="${php_abbr//php@/p}"
# Fetch the exec path once # Fetch the exec path once
php_exec="$HOMEBREW_PREFIX/opt/$version/bin/php" local php_exec="$HOMEBREW_PREFIX/opt/$version/bin/php"
[ -f "$php_exec" ] && { if [ -f "$php_exec" ]; then
[ "$VERBOSE" = "1" ] && echo "-> php_exec $php_exec" [ "$VERBOSE" = "1" ] && echo "-> php_exec $php_exec"
# Raw PHP without error_reporting flag. # Raw PHP without error_reporting flag.
# shellcheck disable=SC2139 alias "${php_alias}r"="$php_exec"
alias "${php_alias}"r="$php_exec"
# PHP with error_reporting flag. # PHP with error_reporting flag.
# shellcheck disable=SC2139,SC2140 alias "$php_alias"="$php_exec $php_error_reporting"
alias "$php_alias"="$php_exec $php_error_reporting"
# Local PHP Server. # Local PHP Server.
# shellcheck disable=SC2139,SC2140 alias "${php_alias}s"="$php_exec -S localhost:9000"
alias "${php_alias}s"="$php_exec -S localhost:9000"
# Use composer with specific PHP and error_reporting flag on. # 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)"
alias "${php_alias}c"="$php_exec $php_error_reporting $(which composer)" fi
} done
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 # Ismo Vuorinen <https://github.com/ivuorinen> 2023
# MIT License # MIT License
set -euo pipefail
# ENV Variables # ENV Variables
: "${VERBOSE:=0}" # VERBOSE=1 x-sha256sum-matcher file1 file2 : "${VERBOSE:=0}" # VERBOSE=1 x-sha256sum-matcher file1 file2
file_1="$1" # Return sha256sum for file
file_2="$2"
# return sha256sum for file
# $1 - filename (string) # $1 - filename (string)
get_sha256sum() get_sha256sum()
{ {
sha256sum "$1" | head -c 64 sha256sum "$1" | head -c 64
} }
[ $# -eq 0 ] && { # Print message if VERBOSE is enabled
echo "Usage: $0 file1.sh file2.sh" && exit 1 # $1 - message (string)
}
msg() msg()
{ {
[[ "$VERBOSE" -eq 1 ]] && echo "$1" [[ "$VERBOSE" -eq 1 ]] && echo "$1"
} }
# Print error message and exit
# $1 - error message (string)
error() error()
{ {
msg "(!) ERROR: $1" && exit 1 msg "(!) ERROR: $1"
exit 1
} }
if [ ! -f "$file_1" ]; then # Validate input arguments
error "File 1 does not exist: $file_1" validate_inputs()
fi {
if [ "$#" -ne 2 ]; then
echo "Usage: $0 file1 file2"
exit 1
fi
}
if [ ! -f "$file_2" ]; then # Check if file exists
error "File 2 does not exist: $file_2" # $1 - filename (string)
fi check_file_exists()
{
local filename=$1
if [ ! -f "$filename" ]; then
error "File does not exist: $filename"
fi
}
file_1_hash=$(get_sha256sum "$file_1") # Main function
file_2_hash=$(get_sha256sum "$file_2") main()
{
local file_1=$1
local file_2=$2
if [ "$file_1_hash" != "$file_2_hash" ]; then validate_inputs "$file_1" "$file_2"
error "Files do not match" check_file_exists "$file_1"
else check_file_exists "$file_2"
msg "(*) Success: Files do match"
exit 0 local file_1_hash
fi 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 #!/usr/bin/env bash
# Generate thumbnails using magick # Generate thumbnails using ImageMagick (magick)
# https://imagemagick.org/script/download.php # https://imagemagick.org/script/download.php
# #
# Defaults to current directory creating thumbs with 1000x1000 # Defaults to current directory creating thumbnails with 1000x1000
# images with 200px white borders around the original image. # dimensions and 200px white borders around the original image.
# #
# Defaults can be overridden with ENV variables like this: # Defaults can be overridden with ENV variables like this:
# $ THMB_BACKGROUND=black x-thumbgen ~/images/ # $ THMB_BACKGROUND=black x-thumbgen ~/images/
# #
# Created by: Ismo Vuorinen <https://github.com/ivuorinen> 2015 # Created by: Ismo Vuorinen <https://github.com/ivuorinen> 2015
: "${THMB_SOURCE:=$1}" set -euo pipefail
# Default values
: "${THMB_SOURCE:=${1:-}}"
: "${THMB_BACKGROUND:=white}" : "${THMB_BACKGROUND:=white}"
: "${THMB_RESIZE:=800x800}" : "${THMB_RESIZE:=800x800}"
: "${THMB_EXTENT:=1000x1000}" : "${THMB_EXTENT:=1000x1000}"
[ $# -eq 0 ] && { # Print usage information
usage()
{
echo "Usage: $0 /full/path/to/image/folder" echo "Usage: $0 /full/path/to/image/folder"
exit 1 exit 1
} }
if [ "$THMB_SOURCE" == "" ] || [ ! -d "$THMB_SOURCE" ]; then # Check if ImageMagick is installed
THMB_SOURCE=$(pwd) check_magick_installed()
fi {
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 \ magick \
"$THMB_SOURCE/*" \ "${source}/*" \
-resize "$THMB_RESIZE" \ -resize "$THMB_RESIZE" \
-background "$THMB_BACKGROUND" \ -background "$THMB_BACKGROUND" \
-gravity center \ -gravity center \
-extent "$THMB_EXTENT" \ -extent "$THMB_EXTENT" \
-set filename:fname '%t_thumb.%e' +adjoin '%[filename:fname]' -set filename:fname '%t_thumb.%e' +adjoin '%[filename:fname]'
}
else # Main function
echo "magick not found in PATH, https://imagemagick.org/script/download.php" main()
fi {
# 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 #!/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 # Source: https://gist.github.com/onnimonni/b49779ebc96216771a6be3de46449fa1
# Author: Onni Hakala # Author: Onni Hakala
@@ -9,44 +9,60 @@
# Updated by Ismo Vuorinen <https://github.com/ivuorinen> 2022 # Updated by Ismo Vuorinen <https://github.com/ivuorinen> 2022
## ##
if ! command -v sha256 &> /dev/null; then set -euo pipefail
echo "git could not be found, please install it first"
exit
fi
# Stop program and give error message # Stop program and give error message
# $1 - error message (string) # $1 - error message (string)
function error error()
{ {
echo "(!) ERROR: $1" echo "(!) ERROR: $1" >&2
exit 1 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) # $1 - filename (string)
function get_sha256sum get_sha256sum()
{ {
sha256sum "$1" | head -c 64 sha256sum "$1" | head -c 64
} }
# Good variable names pls # Validate input arguments
filename=$1 validate_inputs()
file_hash=$2 {
if [ -z "${filename:-}" ]; then
error "You need to provide filename as the first parameter"
fi
# Check input if [ -z "${file_hash:-}" ]; then
if [ -z "$filename" ]; then error "You need to provide sha256sum as the second parameter"
error "You need to provide filename in first parameter" fi
fi }
if [ -z "$file_hash" ]; then # Main validation logic
error "You need to provide sha256sum in second parameter" validate_file()
fi {
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 # Main function
if [ ! -f "$filename" ]; then main()
error "File $filename doesn't exist" {
elif [ "$(get_sha256sum "$filename")" = "$file_hash" ]; then filename=$1
echo "(*) Success: $filename matches provided sha256sum" file_hash=$2
else
error "$filename doesn't match provided sha256sum" validate_inputs
fi validate_file
}
main "$@"

View File

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

View File

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

28
scripts/create-nvim-keymaps.sh Executable file
View File

@@ -0,0 +1,28 @@
#!/usr/bin/env bash
# Create file containing key mappings for Neovim
# Usage: ./create-nvim-keymaps.sh
#
# shellcheck source=shared.sh
source "${DOTFILES}/config/shared.sh"
DEST="$HOME/.dotfiles/docs/nvim-keybindings.md"
main()
{
msg "Generating Neovim keybindings documentation"
{
printf "# nvim keybindings\n\n"
printf "\`\`\`txt\n"
} > "$DEST"
NVIM_APPNAME="nvim-kickstart" nvim -c "redir! >> $DEST" -c 'silent verbose map' -c 'redir END' -c 'q'
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

@@ -0,0 +1,18 @@
#!/usr/bin/env bash
#
# Export oh-my-posh configuration as an image
#
# shellcheck source=shared.sh
source "${DOTFILES}/config/shared.sh"
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 "$@"

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

@@ -0,0 +1,76 @@
#!/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"
"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"
"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,31 +2,25 @@
# Install cargo/rust packages. # Install cargo/rust packages.
# #
# shellcheck source=shared.sh # shellcheck source=shared.sh
source "$HOME/.dotfiles/config/exports" eval "$HOME/.dotfiles/config/shared.sh"
source "$HOME/.dotfiles/config/alias"
source "$HOME/.dotfiles/config/functions"
source "$HOME/.dotfiles/scripts/shared.sh"
msg "Starting to install rust/cargo packages" 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" source "$CARGO_HOME/env"
! x-have rustup && { # If we have cargo install-update, use it first
msg_err "rustup could not be found. Aborting..." if command -v cargo-install-update &> /dev/null; then
exit 1 msg_run "Updating cargo packages with cargo install-update"
} cargo install-update -a
msg_done "Done with cargo install-update"
rustup default system fi
packages=( packages=(
# A cargo subcommand for checking and applying
# updates to installed executables
"cargo-update"
# Cargo cache management utility
"cargo-cache" "cargo-cache"
# starship.rs
# "starship"
# An incremental parsing system for programming tools # An incremental parsing system for programming tools
"tree-sitter-cli" "tree-sitter-cli"
# a subprocess caching utility # a subprocess caching utility
@@ -37,9 +31,6 @@ packages=(
"eza" "eza"
# A simple, fast and user-friendly alternative to 'find' # A simple, fast and user-friendly alternative to 'find'
"fd-find" "fd-find"
# A cargo subcommand for checking and applying
# updates to installed executables
"cargo-update"
# recursively searches directories for a # recursively searches directories for a
# regex pattern while respecting your gitignore # regex pattern while respecting your gitignore
"ripgrep" "ripgrep"
@@ -48,26 +39,44 @@ packages=(
"bottom" "bottom"
) )
for pkg in "${packages[@]}"; do # Number of jobs to run in parallel, this helps to keep the system responsive
# Trim spaces BUILD_JOBS=$(nproc --ignore=2)
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
msg_run "Installing cargo package $pkg" # Function to install cargo packages
cargo install "$pkg" install_packages()
{
for pkg in "${packages[@]}"; do
# Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
echo "" msg_run "Installing cargo package $pkg"
done cargo install --jobs $BUILD_JOBS "$pkg"
echo ""
msg_done "Installed cargo packages!" done
msg_run "Now doing the next steps for cargo packages"
# use bob to install nvim
x-have bob && {
bob use stable && x-path-append "$XDG_DATA_HOME/bob/nvim-bin"
} }
msg_run "Removing cargo cache" # Function to perform additional steps for installed cargo packages
cargo cache --autoclean 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 #!/usr/bin/env bash
# shellcheck disable=SC2231,SC2034,SC2181,SC2068 # shellcheck disable=SC2231,SC2034,SC2181,SC2068
# shellcheck source=shared.sh # shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh" source "${DOTFILES}/config/shared.sh"
PBB_REQUIRED_TOOLS=(git cheat) 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_GIT="https://github.com/dylanaraps/pure-bash-bible.git"
PBB_SOURCE="source: $PBB_GIT" PBB_SOURCE="source: $PBB_GIT"
PBB_SYNTAX="syntax: bash" PBB_SYNTAX="syntax: bash"
PBB_TAGS="tags: [bash]" PBB_TAGS="tags: [bash]"
PBB_TEMP_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/cheat/pbb"
PBB_TEMP_PREFIX=$(basename "$0") check_required_tools()
PBB_TEMP_DIR="$XDG_CACHE_HOME/cheat/pbb" {
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 clone_or_update_repo()
if [ ! -d "$PBB_TEMP_DIR/.git" ]; then {
msg_run "Starting to clone $PBB_GIT" if [ ! -d "$PBB_TEMP_DIR/.git" ]; then
git clone --depth 1 --single-branch -q "$PBB_GIT" "$PBB_TEMP_DIR" \ msg_run "Starting to clone $PBB_GIT"
&& msg_yay "Cloned $PBB_GIT" git clone --depth 1 --single-branch -q "$PBB_GIT" "$PBB_TEMP_DIR" \
else && msg_yay "Cloned $PBB_GIT"
# Update the repo else
msg_run "Starting to update $PBB_GIT" msg_run "Starting to update $PBB_GIT"
git -C "$PBB_TEMP_DIR" reset --hard origin/master git -C "$PBB_TEMP_DIR" reset --hard origin/master
git -C "$PBB_TEMP_DIR" pull -q \ git -C "$PBB_TEMP_DIR" pull -q \
&& msg_yay "Updated $PBB_GIT" && msg_yay "Updated $PBB_GIT"
fi fi
}
PBB_CHAPTERS=$(ls -1v "$PBB_TEMP_DIR"/manuscript/chapter*) prepare_cheat_dest()
CHEAT_DEST="$(cheat -d | grep pure-bash-bible | head -1 | awk '{print $2}')" {
local cheat_dest
cheat_dest="$(cheat -d | grep pure-bash-bible | head -1 | awk '{print $2}')"
if [ ! -d "$CHEAT_DEST" ]; then if [ ! -d "$cheat_dest" ]; then
mkdir -p "$CHEAT_DEST" 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"
fi fi
LC_ALL=C perl -pi.bak -e 's/\<\!-- CHAPTER END --\>//' "$CHEAT_FILE" echo "$cheat_dest"
rm "$CHEAT_FILE.bak" }
# add tags if the file doesn't have them process_chapters()
if [ '---' != "$(head -1 < "$CHEAT_FILE")" ]; then {
T="$PBB_SYNTAX\n$PBB_TAGS\n$PBB_SOURCE\n" local cheat_dest
echo -e "---\n$T---\n$(cat "$CHEAT_FILE")" > "$CHEAT_FILE" cheat_dest=$(prepare_cheat_dest)
fi
done 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 # Install PHP Package Manager Composer
# #
# shellcheck source="shared.sh" # 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");')" EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')"
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

View File

@@ -2,7 +2,7 @@
# Install NerdFonts # Install NerdFonts
# #
# shellcheck source="shared.sh" # shellcheck source="shared.sh"
source "$HOME/.dotfiles/scripts/shared.sh" source "$DOTFILES/config/shared.sh"
GIT_REPO="https://github.com/ryanoasis/nerd-fonts.git" GIT_REPO="https://github.com/ryanoasis/nerd-fonts.git"
TMP_PATH="$XDG_CACHE_HOME/nerd-fonts" TMP_PATH="$XDG_CACHE_HOME/nerd-fonts"
@@ -17,28 +17,50 @@ fonts=(
SpaceMono SpaceMono
) )
if [ ! -d "$TMP_PATH" ]; then # Function to clone or update the NerdFonts repository
git clone --filter=blob:none --sparse "$GIT_REPO" "$TMP_PATH" clone_or_update_repo()
fi {
if [ ! -d "$TMP_PATH" ]; then
git clone --quiet --filter=blob:none --sparse "$GIT_REPO" "$TMP_PATH"
fi
cd "$TMP_PATH" || { cd "$TMP_PATH" || msg_err "No such folder $TMP_PATH"
msg_err "No such folder $TMP_PATH"
exit 1
} }
for ext in "${fonts[@]}"; do # Function to add fonts to sparse-checkout
# Trim spaces add_fonts_to_sparse_checkout()
ext=${ext// /} {
# Skip comments for font in "${fonts[@]}"; do
if [[ ${ext:0:1} == "#" ]]; then continue; fi # Trim spaces
font=${font// /}
# Skip comments
if [[ ${font:0:1} == "#" ]]; then continue; fi
msg_run "Adding $ext to sparse-checkout" msg_run "Adding $font to sparse-checkout"
git sparse-checkout add "patched-fonts/$ext" git sparse-checkout add "patched-fonts/$font"
echo "" echo ""
done 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 # Install fzf
# #
# shellcheck source=shared.sh # shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh" eval "$DOTFILES/config/shared.sh"
FZF_GIT="https://github.com/junegunn/fzf.git" FZF_GIT="https://github.com/junegunn/fzf.git"
FZF_PATH="${XDG_CONFIG_HOME}/fzf" FZF_PATH="${XDG_CONFIG_HOME}/fzf"
FZF_BUILD="/tmp/fzf" FZF_BUILD="/tmp/fzf"
if [ ! -d "$FZF_BUILD" ]; then main()
git clone --depth 1 "$FZF_GIT" "$FZF_BUILD" {
"$FZF_BUILD/install" \ if [ ! -d "$FZF_BUILD" ]; then
--xdg \ git clone --depth 1 "$FZF_GIT" "$FZF_BUILD"
--bin "$FZF_BUILD/install" \
else --xdg \
msg_done "fzf ($FZF_PATH/) already installed" --bin
fi msg_done "fzf installed"
else
msg_done "fzf ($FZF_PATH/) already installed"
fi
}
main "$@"

View File

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

View File

@@ -4,12 +4,14 @@
# NOTE: Experimental, wip # NOTE: Experimental, wip
# #
# shellcheck source=shared.sh # 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" 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" REPO_URL="https://github.com/AGWA/git-crypt.git"
CHECK_PATH="${XDG_BIN_HOME}/git-crypt" CHECK_PATH="${XDG_BIN_HOME}/git-crypt"
BUILD_PATH="/tmp/git-crypt" BUILD_PATH="/tmp/git-crypt"
@@ -23,5 +25,6 @@ x-have "git-crypt" || {
else else
msg_done "git-crypt ($CHECK_PATH) already installed" msg_done "git-crypt ($CHECK_PATH) already installed"
fi fi
} fi
msg_done "Done installing git-crypt" msg_done "Done installing git-crypt"

View File

@@ -2,7 +2,10 @@
# Install Go packages # Install Go packages
# #
# shellcheck source=shared.sh # 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" msg_run "Installing go packages"
@@ -29,29 +32,54 @@ packages=(
github.com/rhysd/actionlint/cmd/actionlint@latest github.com/rhysd/actionlint/cmd/actionlint@latest
# simple terminal UI for git commands # simple terminal UI for git commands
github.com/jesseduffield/lazygit@latest github.com/jesseduffield/lazygit@latest
# Cleans up your $HOME from those pesky dotfiles
github.com/doron-cohen/antidot@latest
) )
for pkg in "${packages[@]}"; do # Function to install go packages
# Trim spaces install_packages()
pkg=${pkg// /} {
# Skip comments for pkg in "${packages[@]}"; do
if [[ ${pkg:0:1} == "#" ]]; then continue; fi # Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
msg_nested "Installing go package: $pkg" msg_nested "Installing go package: $pkg"
go install "$pkg" go install "$pkg"
echo "" echo ""
done 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"
} }
echo "" # Function to install completions and run actions for selected packages
post_install()
{
msg_run "Installing completions for selected packages"
msg_run "Clearing go cache" if command -v git-profile &> /dev/null; then
go clean -cache -modcache git-profile completion zsh > "$ZSH_CUSTOM_COMPLETION_PATH/_git-profile" \
&& msg_ok "Installed completions for git-profile"
fi
msg_ok "Done" if command -v antidot &> /dev/null; then
antidot update \
&& msg_ok "Updated antidot database"
fi
}
# Function to clear go cache
clear_go_cache()
{
msg_run "Clearing go cache"
go clean -cache -modcache
}
main()
{
install_packages
post_install
clear_go_cache
msg_ok "Done"
}
main "$@"

View File

@@ -3,23 +3,71 @@
# Install neofetch from source # Install neofetch from source
# #
# shellcheck source=shared.sh # 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_REPO="https://github.com/dylanaraps/neofetch"
NEOFETCH_URL="${NEOFETCH_REPO}/archive/refs/tags/${NEOFETCH_VERSION}.tar.gz" NEOFETCH_URL="${NEOFETCH_REPO}/archive/refs/tags/${NEOFETCH_VERSION}.tar.gz"
NEOFETCH_TEMP="/tmp/neofetch" NEOFETCH_TEMP="/tmp/neofetch"
NEOFETCH_INSTALL_PREFIX="$HOME/.local" 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 LC_ALL=C
mkdir -p "$NEOFETCH_TEMP" "$NEOFETCH_INSTALL_PREFIX" 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" tar zxvf "$NEOFETCH_TEMP.tar.gz" --directory="$NEOFETCH_TEMP"
cd "$NEOFETCH_TEMP/neofetch-$NEOFETCH_VERSION" \ cd "$NEOFETCH_TEMP/neofetch-$NEOFETCH_VERSION" \
&& make PREFIX="${NEOFETCH_INSTALL_PREFIX}" install \ && make PREFIX="${NEOFETCH_INSTALL_PREFIX}" install \
&& rm -rf "$NEOFETCH_TEMP*" \ && rm -rf "$NEOFETCH_TEMP*" \
&& msg_yay "neofetch installed!" && 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. # Install npm packages globally.
# #
# shellcheck source=shared.sh # 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" 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=( packages=(
# This is a tool to check if your files consider your .editorconfig rules. # This is a tool to check if your files consider your .editorconfig rules.
@@ -18,27 +24,48 @@ packages=(
"corepack" "corepack"
) )
for pkg in "${packages[@]}"; do # Function to install npm packages
# Trim spaces install_packages()
pkg=${pkg// /} {
# Skip comments for pkg in "${packages[@]}"; do
if [[ ${pkg:0:1} == "#" ]]; then continue; fi # Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
if [[ $(npm ls -g -p "$pkg") != "" ]]; then if npm ls -g -p "$pkg" &> /dev/null; then
msg_run_done "$pkg" "already installed" msg_run_done "$pkg" "already installed"
else else
msg_run "Installing npm package:" "$pkg" msg_run "Installing npm package:" "$pkg"
npm install -g --no-fund --no-progress --no-timing "$pkg" npm install -g --no-fund --no-progress --no-timing "$pkg"
fi fi
echo ""
done
}
echo "" # Function to upgrade all global npm packages
done 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" # Function to clean npm cache
npm -g --no-progress --no-timing --no-fund outdated clean_npm_cache()
npm -g --no-timing --no-fund upgrade {
msg_run "Cleaning up npm cache"
npm cache verify
npm cache clean --force
npm cache verify
}
msg_run "Cleaning up npm cache" main()
npm cache verify {
npm cache clean --force install_packages
npm cache verify upgrade_global_packages
clean_npm_cache
msg_yay "npm package installations complete"
}
main "$@"

View File

@@ -3,11 +3,18 @@
# Install ntfy # Install ntfy
# #
# shellcheck source=shared.sh # shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh" eval "$DOTFILES/config/shared.sh"
set -e
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 case $(dfm check arch) in
Linux) Linux)
NTFY_ARCH="linux_$(arch)" NTFY_ARCH="linux_$(arch)"
@@ -15,21 +22,36 @@ case $(dfm check arch) in
Darwin) Darwin)
NTFY_ARCH="macOS_all" NTFY_ARCH="macOS_all"
;; ;;
*)
msg_err "Unsupported OS"
;;
esac esac
NTFY_VERSION=2.2.0 NTFY_VERSION="$(x-gh-get-latest-version binwiederhier/ntfy)"
NTFY_URL="https://github.com/binwiederhier/ntfy" NTFY_URL="https://github.com/binwiederhier/ntfy"
NTFY_DEST="ntfy_${NTFY_VERSION}_${NTFY_ARCH}" NTFY_DEST="/tmp/ntfy_${NTFY_VERSION}_${NTFY_ARCH}"
curl -L "$NTFY_URL/releases/download/v${NTFY_VERSION}/${NTFY_DEST}.tar.gz" \ # Download and extract ntfy
> "${NTFY_DEST}.tar.gz" install_ntfy()
tar zxvf "${NTFY_DEST}.tar.gz" {
cp -a "${NTFY_DEST}/ntfy" ~/.local/bin/ntfy curl -L "$NTFY_URL/releases/download/v${NTFY_VERSION}/${NTFY_DEST}.tar.gz" -o "${NTFY_DEST}.tar.gz"
mkdir -p ~/.config/ntfy 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 # Copy config only if it does not exist
if [ ! -f "$HOME/.config/ntfy/client.yml" ]; then if [ ! -f "$HOME/.config/ntfy/client.yml" ]; then
cp "${NTFY_DEST}/client/client.yml" ~/.config/ntfy/client.yml cp "${NTFY_DEST}/client/client.yml" ~/.config/ntfy/client.yml
fi 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 # Install oh-my-bash
# #
# shellcheck source=shared.sh # 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 # Enable verbosity with VERBOSE=1
[ -f "$HOME/.bashrc" ] && mv "$HOME/.bashrc" "$HOME/.bashrc.temp" VERBOSE="${VERBOSE:-0}"
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" OSH="$HOME/.local/share/oh-my-bash"
else
msg_done "oh-my-bash ($OSH) already installed" # Function to install oh-my-bash
fi 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,16 +3,31 @@
# Install oh-my-posh # Install oh-my-posh
# #
# shellcheck source=shared.sh # 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}"
OHMYPOSH_CFG="$HOME/.dotfiles/config/oh-my-posh.omp.json" msg "Starting to install oh-my-posh"
eval "$(oh-my-posh init zsh --config $OHMYPOSH_CFG)" # 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"
}
#cd ~/.dotfiles || exit # Initialize oh-my-posh
#oh-my-posh config export image \ init_oh_my_posh()
# --config "$OHMYPOSH_CFG" \ {
# --output "~/.dotfiles/.github/screenshots/oh-my-posh.png" \ eval "$(oh-my-posh init zsh --config $OHMYPOSH_CFG)"
# --author "Ismo Vuorinen" 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. # Install python/pip packages.
# #
# shellcheck source=shared.sh # 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" msg "Starting to install pip packages"
x-have "python3" || { if ! command -v python3 &> /dev/null; then
msg_err "Could not find python3, something really weird is going on." && exit 1 msg_err "Could not find python3, something really weird is going on."
} exit 1
fi
msg_nested "Upgrading pip" msg_nested "Upgrading pip"
python3 -m pip install --user --upgrade pip python3 -m pip install --user --upgrade pip
@@ -18,16 +22,20 @@ packages=(
"libtmux" "libtmux"
) )
for pkg in "${packages[@]}"; do # Function to install pip packages
# Trim spaces install_packages()
pkg=${pkg// /} {
# Skip comments for pkg in "${packages[@]}"; do
if [[ ${pkg:0:1} == "#" ]]; then continue; fi # Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
msg_nested "Installing pip package: $pkg" msg_nested "Installing pip package: $pkg"
python3 -m pip install --user --upgrade "$pkg" python3 -m pip install --user --upgrade "$pkg"
echo ""
echo "" done
done }
install_packages
msg_yay "Run pip package installations" msg_yay "Run pip package installations"

View File

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

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