mirror of
https://github.com/m-housh/dotfiles.git
synced 2026-02-16 15:12:36 +00:00
Compare commits
230 Commits
50191dde0c
...
arch
| Author | SHA1 | Date | |
|---|---|---|---|
|
5d6cb3a843
|
|||
|
5561f3ccaf
|
|||
|
3a82ae15df
|
|||
|
d26ca008c0
|
|||
|
d29876b367
|
|||
|
24440f845b
|
|||
|
4a08de9573
|
|||
|
b1c3b16cc6
|
|||
|
b159565288
|
|||
|
df876d2cac
|
|||
|
e052f0c394
|
|||
|
0d916fe960
|
|||
|
1b504cca65
|
|||
|
fb0e4d705b
|
|||
|
b9f248926b
|
|||
|
f798ef2e4e
|
|||
|
fa47fcaed7
|
|||
|
f39a9113d6
|
|||
|
207e4469b2
|
|||
|
047c241df8
|
|||
|
b8bf70f117
|
|||
|
bec884f866
|
|||
|
943427b3e1
|
|||
|
eae3bfbc90
|
|||
|
6621475808
|
|||
|
090a0681ca
|
|||
|
3acaf486c0
|
|||
|
80c6eefe8c
|
|||
|
0c80780ade
|
|||
|
5ea0ef74e4
|
|||
|
5bad99f712
|
|||
|
44aec09d62
|
|||
|
a0dcba3810
|
|||
|
7356d129cc
|
|||
|
eece231724
|
|||
|
3446460827
|
|||
|
1e60f88ec4
|
|||
|
45666a5911
|
|||
|
46186e2741
|
|||
|
fe25f1bf19
|
|||
|
c8212b7587
|
|||
|
4b674c40c9
|
|||
|
8daa596205
|
|||
|
9977a8806b
|
|||
|
c667bfb8ee
|
|||
|
2ed9208e6a
|
|||
|
0be8bcd1a2
|
|||
|
dcb186393e
|
|||
|
b7ce95dc66
|
|||
|
358b9719f1
|
|||
|
89b12fc5fa
|
|||
|
23a27446df
|
|||
|
c44c2cf5ea
|
|||
|
9d6b99206a
|
|||
|
d19a33f4f0
|
|||
|
9c7d395c6b
|
|||
|
2f9c68acfb
|
|||
|
df109c3803
|
|||
|
cbe53484fa
|
|||
|
2aa9f4e839
|
|||
|
ad593bc25f
|
|||
|
790ba581aa
|
|||
|
e57262b4d3
|
|||
|
e63e4f4fab
|
|||
|
86d3a54e3b
|
|||
|
cf05f11759
|
|||
|
059dba6f18
|
|||
|
00c9c77bcc
|
|||
|
52cbe2ad89
|
|||
|
f1b65e955e
|
|||
|
3c98a008c8
|
|||
|
74011a46bc
|
|||
|
e972dd331c
|
|||
|
9c007c9434
|
|||
|
381a0450e5
|
|||
|
af7b46efa5
|
|||
|
f269906fd5
|
|||
|
307a971371
|
|||
|
6b13291fff
|
|||
|
b4b7fa0a84
|
|||
|
d166c246ef
|
|||
|
746167a9c8
|
|||
|
419752b381
|
|||
|
79da2db401
|
|||
|
0da387b1b9
|
|||
|
e1ed84d343
|
|||
|
d5f1d56b94
|
|||
|
97f3047989
|
|||
|
18fc260a75
|
|||
|
5811d5602b
|
|||
|
d172a0071b
|
|||
|
2995edfc86
|
|||
|
10987bd255
|
|||
|
0045e6149c
|
|||
|
3081c6b9b3
|
|||
|
e154efcac4
|
|||
|
71eae2eb5b
|
|||
|
9af452c849
|
|||
|
0636832796
|
|||
|
05cb700cb1
|
|||
|
a03617608d
|
|||
|
ef933bd3aa
|
|||
|
6b9f2203c1
|
|||
|
e0214a49d2
|
|||
|
b090430cd8
|
|||
|
e53cef27a0
|
|||
|
43f18eb45a
|
|||
|
c1eae18c67
|
|||
|
4d73fede8b
|
|||
|
ba06819221
|
|||
|
ba81c53054
|
|||
|
36fd0558b0
|
|||
|
1b349b11c3
|
|||
|
26f2b360e3
|
|||
|
2ac8560de1
|
|||
|
f4341f3b5f
|
|||
|
9ab1bed56a
|
|||
|
def9a00b76
|
|||
|
d1e9e3cc5a
|
|||
|
005403f939
|
|||
|
9c7940b5fa
|
|||
|
2949a85159
|
|||
|
737f9bfb2c
|
|||
|
654c61a460
|
|||
|
6f14542b7d
|
|||
|
63e698acb5
|
|||
|
aec01d5876
|
|||
|
95ffc9fa44
|
|||
|
b45503717f
|
|||
|
8acc2e6647
|
|||
|
f5705e9809
|
|||
|
eda3213f72
|
|||
|
d21e9931eb
|
|||
|
ed76943b79
|
|||
|
4909aa1fcb
|
|||
|
fcfbfac7dd
|
|||
|
281c26ed71
|
|||
|
cb479a5370
|
|||
|
32bdafff4f
|
|||
|
1006821a9c
|
|||
|
3b89eb4877
|
|||
|
45fa5196a7
|
|||
|
f94d724d67
|
|||
|
a6fcc8a460
|
|||
|
3799a81f05
|
|||
|
97ed707936
|
|||
|
|
6aee095859 | ||
|
|
461d06f681 | ||
|
|
2f626d4664 | ||
| b87348da96 | |||
|
4fcd2f43fd
|
|||
|
d1dffb632f
|
|||
|
1196849c3b
|
|||
|
e77b3e7535
|
|||
|
ee2898053b
|
|||
|
f1202d77f3
|
|||
|
087d7963e8
|
|||
|
8b25509344
|
|||
|
0034ac6d87
|
|||
|
5c6409c2e9
|
|||
|
8a63efd6cf
|
|||
|
7d4a0714d0
|
|||
|
b454c5d01d
|
|||
|
e003be5bee
|
|||
|
0bb288b3d6
|
|||
|
23a5dc0bdc
|
|||
|
72ff2e6316
|
|||
|
390230e532
|
|||
|
a006539bf1
|
|||
|
6332eafea5
|
|||
|
933ce337a1
|
|||
|
ae73074f6a
|
|||
|
63c8645051
|
|||
|
aec425c7d2
|
|||
|
fa6a482f2f
|
|||
|
dff77ae065
|
|||
|
bac516d446
|
|||
|
4674b132f3
|
|||
|
fd22a4ab4a
|
|||
|
18fce8e2bb
|
|||
|
0922f7578f
|
|||
|
335b60f43c
|
|||
|
99110dea2a
|
|||
|
2eb831e565
|
|||
|
53c439a418
|
|||
|
77c168cc99
|
|||
|
cfc846e2f7
|
|||
|
55d7199315
|
|||
|
5ddf6c3927
|
|||
|
dd9c018f99
|
|||
|
1eea0b84a7
|
|||
|
8d21e9a9fe
|
|||
|
52b78aadf8
|
|||
|
7178a12893
|
|||
|
931903d18c
|
|||
|
7024182f49
|
|||
|
7aec9d1610
|
|||
|
5946a177fb
|
|||
|
7c08fec16b
|
|||
|
78e40a9401
|
|||
|
b5198a5df6
|
|||
|
54fe479ee1
|
|||
|
503df7ce33
|
|||
|
009efbb952
|
|||
|
b1fb505ac5
|
|||
|
6721b2a8c5
|
|||
|
a4a560eb3d
|
|||
|
a7e6bc893c
|
|||
|
90c97263cb
|
|||
|
dccb1ca0a3
|
|||
|
f729bedc99
|
|||
|
4edf92e034
|
|||
|
5e8fbbcbab
|
|||
|
6d6f24467f
|
|||
|
cc47106e74
|
|||
|
bad3282dc5
|
|||
|
33e6683369
|
|||
|
c38348e62c
|
|||
|
55257e7c28
|
|||
|
318e7c7f95
|
|||
|
b6ce570f1d
|
|||
|
f911bfb7f1
|
|||
|
d32d0cf64f
|
|||
|
1def0356d7
|
|||
|
4d4b8c9945
|
|||
|
cedb6d8ab7
|
|||
|
eae42b40b8
|
|||
|
42e962d439
|
|||
|
27767d3948
|
|||
|
8bb6d35acd
|
6
.gitmodules
vendored
Normal file
6
.gitmodules
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
[submodule "mail"]
|
||||
path = mail
|
||||
url = ssh://git@git.housh.dev:2222/michael/mail.git
|
||||
[submodule "env/.config/nvim"]
|
||||
path = env/.config/nvim
|
||||
url = https://github.com/m-housh/mhoush.nvim.git
|
||||
4
.prettierrc
Normal file
4
.prettierrc
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"proseWrap": "always"
|
||||
"printWidth": 100
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
proseWrap: always
|
||||
printWidth: 80
|
||||
47
README.md
47
README.md
@@ -1,20 +1,16 @@
|
||||
# My Dotfiles
|
||||
|
||||
This is a repository for my dotfiles. Be warned that these may often change and
|
||||
that the installation documentation may not always be correct as things
|
||||
progress. In general the setup process is something that is only done when
|
||||
a new machine is purchased or I feel like testing in a virtual machine (which
|
||||
does not happen often). It is helpful to have an understanding of what these
|
||||
commands do on your own.
|
||||
This is a repository for my dotfiles. Be warned that these may often change and that the installation documentation may
|
||||
not always be correct as things progress. In general the setup process is something that is only done when a new machine
|
||||
is purchased or I feel like testing in a virtual machine (which does not happen often). It is helpful to have an
|
||||
understanding of what these commands do on your own.
|
||||
|
||||
In general no pull-requests or changes will be accepted, however you can
|
||||
generate an issue if you find a problem.
|
||||
In general no pull-requests or changes will be accepted, however you can generate an issue if you find a problem.
|
||||
|
||||
It currently will install homebrew and the following homebrew formula.
|
||||
|
||||
Most of the functionality is contained in the
|
||||
[dots](https://github.com/m-housh/dots) project, that is a companion to manage
|
||||
the dotfiles, which expects the dotfiles directory to be at `~/.dotfiles`.
|
||||
Most of the functionality is contained in the [dots](https://github.com/m-housh/dots) project, that is a companion to
|
||||
manage the dotfiles, which expects the dotfiles directory to be at `~/.dotfiles`.
|
||||
|
||||
```
|
||||
fd
|
||||
@@ -78,15 +74,14 @@ On a fresh system run the following command from the dotfiles root.
|
||||
make bootstrap
|
||||
```
|
||||
|
||||
This start by installing homebrew, then install the required homebrew formulas and casks. Next it will use
|
||||
`gnu-stow` to symlink configuration files to the appropriate locations. And finally, it will download
|
||||
applications from the `App Store`. When the bootstrap command is done it will open up the `~/Downloads` folder
|
||||
for the few applications that get downloaded from the internet, so that you can finish the installation of those applications.
|
||||
This start by installing homebrew, then install the required homebrew formulas and casks. Next it will use `gnu-stow` to
|
||||
symlink configuration files to the appropriate locations. And finally, it will download applications from the
|
||||
`App Store`. When the bootstrap command is done it will open up the `~/Downloads` folder for the few applications that
|
||||
get downloaded from the internet, so that you can finish the installation of those applications.
|
||||
|
||||
### Minimal Setup
|
||||
|
||||
If you would like to just setup minimal stuff, link dotfiles, and install brews.
|
||||
Then you can run the following command.
|
||||
If you would like to just setup minimal stuff, link dotfiles, and install brews. Then you can run the following command.
|
||||
|
||||
```bash
|
||||
make bootstrap-minimal
|
||||
@@ -100,14 +95,13 @@ source scripts/setup_defaults
|
||||
|
||||
## Post Installation
|
||||
|
||||
After everything has finished up, you will be able to open `iTerm2` and load
|
||||
the profile which should now be symlinked to `~/.config/macOS/iterm/profile.json`
|
||||
After everything has finished up, you will be able to open `iTerm2` and load the profile which should now be symlinked
|
||||
to `~/.config/macOS/iterm/profile.json`
|
||||
|
||||
## Make commands
|
||||
|
||||
It is also possible to not do the full bootstrapping. If you would only like
|
||||
to install homebrew (without any formula or casks) then you can run the following
|
||||
command.
|
||||
It is also possible to not do the full bootstrapping. If you would only like to install homebrew (without any formula or
|
||||
casks) then you can run the following command.
|
||||
|
||||
```
|
||||
make bootstrap-homebrew
|
||||
@@ -115,13 +109,12 @@ make bootstrap-homebrew
|
||||
|
||||
## Other Make Commands
|
||||
|
||||
If you would like to setup any specific `zsh` configuration that is only for
|
||||
the local machine then you can run the following command.
|
||||
If you would like to setup any specific `zsh` configuration that is only for the local machine then you can run the
|
||||
following command.
|
||||
|
||||
```bash
|
||||
make zshrc-local
|
||||
```
|
||||
|
||||
This will generate and symlink a file that you can use to extend the default
|
||||
`zshrc` configuration. In general, I use this to set custom location for
|
||||
homebrew casks to be installed on certain machines.
|
||||
This will generate and symlink a file that you can use to extend the default `zshrc` configuration. In general, I use
|
||||
this to set custom location for homebrew casks to be installed on certain machines.
|
||||
|
||||
72
TODO.md
72
TODO.md
@@ -1,29 +1,59 @@
|
||||
# TODO
|
||||
|
||||
- Add zsh functions to dots cli manager.
|
||||
- Add tmux plugins to dots cli manager.
|
||||
- Add tmux-powerline linking to `dots` cli manager.
|
||||
- Clean up zet commands, maybe make a gum / fzf filter script.
|
||||
- Update README to reflect ansible installation
|
||||
- Update ansible to do gpg installation.
|
||||
- Update ansible to include sketchybar.
|
||||
A list of in-progress and completed todo's.
|
||||
|
||||
# Arch Todos
|
||||
## Arch Todos
|
||||
|
||||
- Separate scripts that are used for configurations / store them somewhere aside
|
||||
- [ ] Update README, it's way out of date.
|
||||
- [x] Separate scripts that are used for configurations / store them somewhere aside
|
||||
from `~/.local/bin`
|
||||
- Clipse didn't work when installed on a new machine when I try to use the
|
||||
- [x] Add neomutt configuration files into the repo (or probably a private repo)
|
||||
- [x] Clipse didn't work when installed on a new machine when I try to use the
|
||||
config in the dotfiles, but works if I use the default config. Need to explore
|
||||
why (current thoughts are it has to do with creating the
|
||||
clipboard_history.json file and not letting clipse do it automatically).
|
||||
- Set sddm login theme, currently it doesn't allow me to echo values into the
|
||||
/etc/sddm.conf file, also need to edit the theme in
|
||||
`/usr/share/sddm/themes/catppuccin-mocha/theme.conf` to use the wallpaper as a
|
||||
background image.
|
||||
- Note: The background needs to be copied into the theme's background
|
||||
directory. It didn't seem to work when I just set the path to somewhere in
|
||||
my home directory.
|
||||
- Add script to generate yubikey authentication using the pam-u2f module
|
||||
[documentation](https://wiki.archlinux.org/title/Universal_2nd_Factor).
|
||||
- Note: that the directory this is stored in MUST be ~/.config/Yubico (I tried
|
||||
using ~/.config/yubico and it didn't work)
|
||||
- [x] Need to add the following system packages for neovim/render-markdown.nvim
|
||||
- [x] `libtexprintf`
|
||||
- [ ] Add pipewire-zeroconf to runs.
|
||||
- [ ] Setup pipewire config to allow streaming output to homepod's.
|
||||
- [See arch.wiki](https://wiki.archlinux.org/title/PipeWire)
|
||||
|
||||
### Bootstrapping a new machine
|
||||
|
||||
- [ ] Need to confirm bootstrap does things properly with git submodules. Currently the
|
||||
system run handles installing packages needed for my yubikey, probably need to automate
|
||||
installing the public key into the keyring.
|
||||
- [x] Add gpg public key import into `runs/after/system`
|
||||
- [ ] Need to ensure ssh keys are setup before private submodules are loaded / installed,
|
||||
so I need to make sure that Yubikey setup runs early and works for ssh authentication.
|
||||
- [ ] Setup a new machine / virtual machine to test, as it's hard to test the scripts once a machine is setup.
|
||||
- [ ] Need to add `repos` script when bootstrapping.
|
||||
|
||||
### Keyboard / kanata
|
||||
|
||||
- [x] Move keyboard (kanata) systemd service to be started as a '--user' service, as
|
||||
it seems to not work when used on a desktop (mac mini) vs. laptop.
|
||||
- [x] Need to update kanatactl to generate udev rules, etc. (see
|
||||
here)[https://github.com/jtroo/kanata/blob/main/docs/setup-linux.md]
|
||||
- [ ] Need to rethink symbol / number keyboard layers.
|
||||
- [ ] Move symbols to their own layer.
|
||||
- [ ] I would like to have a symbols layer that I can hold modifier keys with a symbol
|
||||
and would also like to possibly pass through underlying key / experiment so that
|
||||
I can use default keybinds in certain applications (i.e. neovim `[b`, etc.).
|
||||
- [x] Remove pkg sub-commands from kanatactl, it is available via package manager now.
|
||||
|
||||
### Runs (package installs)
|
||||
|
||||
- [x] Should runs just export / echo a list of packages, then the `run` script can handle the package
|
||||
manager options / command.
|
||||
- [x] Think about adding a `before` and an `after` directory for runs, so that they can perform setup tasks after
|
||||
the packages are installed.
|
||||
- [x] The `before` and `after` file should have the same name as the `run` file.
|
||||
- [ ] This could allow to remove / move the `system` script into the `after` directory.
|
||||
- [ ] Look into install packages with `nvim --headless`, not sure if this possible when using the new package
|
||||
manager builtin to neovim as it prompts for user input to install packages.
|
||||
- With lazy this was done with `nvim --headless "+Lazy! sync" +qa`
|
||||
|
||||
### Mail
|
||||
|
||||
- [ ] Remove outlook / office email setup, this has been moved to proton.
|
||||
|
||||
15
bootstrap
15
bootstrap
@@ -4,8 +4,8 @@
|
||||
#
|
||||
|
||||
if [ -z "$DEV_ENV" ]; then
|
||||
echo "env var DEV_ENV needs to be present"
|
||||
exit 1
|
||||
echo "env var DEV_ENV needs to be present"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# if i just did DEV_ENV=$(pwd) ./run then this is needed for the rest of the
|
||||
@@ -15,15 +15,16 @@ export DEV_ENV="$DEV_ENV"
|
||||
args=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ "$1" =~ dry ]]; then
|
||||
args="--dry-run"
|
||||
fi
|
||||
if [[ "$1" =~ dry ]]; then
|
||||
args="--dry-run"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Args to bootstrap scripts: $args"
|
||||
echo "Installing packages may require your password multiple times."
|
||||
|
||||
echo "Running packages" && $DEV_ENV/run "$args"
|
||||
echo "Installing configuration" && $DEV_ENV/dev-env "$args"
|
||||
# TODO: Need to run system run early, then once ssh keys are setup pull
|
||||
# git submodules, then run config install again.
|
||||
echo "Running packages" && $DEV_ENV/run "$args"
|
||||
echo "Installing webapps" && $DEV_ENV/webapp "$args"
|
||||
echo "Starting system services" && $DEV_ENV/system "$args"
|
||||
|
||||
158
dev-env
158
dev-env
@@ -7,93 +7,108 @@
|
||||
dry_run="0"
|
||||
|
||||
if [ -z "$XDG_CONFIG_HOME" ]; then
|
||||
echo "no xdg config home"
|
||||
echo "using ~/.config"
|
||||
XDG_CONFIG_HOME=$HOME/.config
|
||||
echo "no xdg config home"
|
||||
echo "using ~/.config"
|
||||
XDG_CONFIG_HOME=$HOME/.config
|
||||
fi
|
||||
|
||||
if [ -z "$XDG_DATA_HOME" ]; then
|
||||
echo "no xdg data home"
|
||||
echo "using ~/.local/share"
|
||||
XDG_DATA_HOME=$HOME/.local/share
|
||||
echo "no xdg data home"
|
||||
echo "using ~/.local/share"
|
||||
XDG_DATA_HOME=$HOME/.local/share
|
||||
fi
|
||||
|
||||
if [ -z "$DEV_ENV" ]; then
|
||||
echo "env var DEV_ENV needs to be present"
|
||||
exit 1
|
||||
echo "env var DEV_ENV needs to be present"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $1 =~ ^--dry ]]; then
|
||||
dry_run="1"
|
||||
dry_run="1"
|
||||
fi
|
||||
|
||||
log() {
|
||||
if [[ $dry_run == "1" ]]; then
|
||||
echo "[DRY_RUN]: $1"
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
if [[ $dry_run == "1" ]]; then
|
||||
echo "[DRY_RUN]: $1"
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
log "env: $DEV_ENV"
|
||||
|
||||
# Removes a destination directory and copies all files to the destination.
|
||||
update_dirs() {
|
||||
log "copying over files from: $1"
|
||||
pushd $1 &>/dev/null
|
||||
(
|
||||
# Copy everything except systemd, share, and zsh folders, they need treated differently.
|
||||
configs=$(find . -mindepth 1 -maxdepth 1 -type d \( -name "systemd" -o -name "zsh" -o -name "share" \) -prune -o -type d -print)
|
||||
for c in $configs; do
|
||||
directory=${2%/}/${c#./}
|
||||
log " removing: rm -rf $directory"
|
||||
log "copying over files from: $1"
|
||||
pushd $1 &>/dev/null
|
||||
(
|
||||
# Copy everything except systemd, share, and zsh folders, they need treated differently.
|
||||
configs=$(
|
||||
find . -mindepth 1 -maxdepth 1 -type d \
|
||||
\( -name "systemd" -o -name "zsh" -o -name "share" -o -name "scripts" -o -name "kanata" \) \
|
||||
-prune -o -type d -print
|
||||
)
|
||||
for c in $configs; do
|
||||
directory=${2%/}/${c#./}
|
||||
log " removing: rm -rf $directory"
|
||||
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
rm -rf $directory
|
||||
fi
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
rm -rf $directory
|
||||
fi
|
||||
|
||||
log " copying env: cp $c $2"
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
cp -r ./$c $2
|
||||
fi
|
||||
done
|
||||
log " copying env: cp $c $2"
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
cp -r ./$c $2
|
||||
fi
|
||||
done
|
||||
|
||||
)
|
||||
popd &>/dev/null
|
||||
)
|
||||
popd &>/dev/null
|
||||
}
|
||||
|
||||
# Removes a destination file and copies a single file to the destination.
|
||||
copy() {
|
||||
log "removing: $2"
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
rm $2 &>/dev/null
|
||||
fi
|
||||
log "copying: $1 to $2"
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
cp $1 $2
|
||||
fi
|
||||
log "removing: $2"
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
rm $2 &>/dev/null
|
||||
fi
|
||||
log "copying: $1 to $2"
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
cp $1 $2
|
||||
fi
|
||||
}
|
||||
|
||||
# Copy all files from a directory into another directory.
|
||||
copy_files() {
|
||||
log "copying over files from: $1"
|
||||
pushd $1 &>/dev/null
|
||||
(
|
||||
for f in $(find . -mindepth 1 -maxdepth 1 -type f); do
|
||||
log "copying over files from: $1"
|
||||
pushd "$1" &>/dev/null || exit 1
|
||||
(
|
||||
for f in $(find . -mindepth 1 -maxdepth 1 -type f); do
|
||||
|
||||
local dest="$2/$(basename $f)"
|
||||
declare dest
|
||||
dest="$2/$(basename "$f")"
|
||||
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
rm -rf $dest >/dev/null 2>&1
|
||||
fi
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
rm -rf $dest >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
log " copying env: cp $f $dest"
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
cp $f $dest
|
||||
fi
|
||||
done
|
||||
)
|
||||
popd &>/dev/null
|
||||
log " copying env: cp $f $dest"
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
cp $f $dest
|
||||
fi
|
||||
done
|
||||
)
|
||||
popd &>/dev/null || exit 1
|
||||
}
|
||||
|
||||
email() {
|
||||
if command -v mailctl; then
|
||||
log "Updating using mailctl..."
|
||||
[[ $dry_run == "0" ]] && mailctl update && mailctl config
|
||||
else
|
||||
log "Installing mailctl..."
|
||||
[[ $dry_run == "0" ]] && . "$DEV_ENV/mail/install"
|
||||
fi
|
||||
}
|
||||
|
||||
############################## MAIN ##############################
|
||||
@@ -102,6 +117,16 @@ copy_files() {
|
||||
update_dirs $DEV_ENV/env/.config $XDG_CONFIG_HOME
|
||||
update_dirs $DEV_ENV/env/.local $HOME/.local
|
||||
|
||||
# SCRIPTS
|
||||
mkdir -p ~/.local/scripts/{hypr,utils} >/dev/null 2>&1
|
||||
mkdir -p ~/.local/scripts/utils/{kanatactl,hpa,shorten-url} >/dev/null 2>&1
|
||||
update_dirs $DEV_ENV/env/.local/scripts/hypr $HOME/.local/scripts/hypr
|
||||
copy_files $DEV_ENV/env/.local/scripts/hypr $HOME/.local/scripts/hypr
|
||||
copy_files "$DEV_ENV/env/.local/scripts/utils/kanatactl" "$HOME/.local/scripts/utils/kanatactl"
|
||||
copy_files "$DEV_ENV/env/.local/scripts/utils/hpa" "$HOME/.local/scripts/utils/hpa"
|
||||
copy_files "$DEV_ENV/env/.local/scripts/utils/shorten-url" "$HOME/.local/scripts/utils/shorten-url"
|
||||
copy_files $DEV_ENV/env/.local/scripts $HOME/.local/scripts
|
||||
|
||||
# SYSTEMD
|
||||
mkdir -p $XDG_CONFIG_HOME/systemd/user >/dev/null 2>&1
|
||||
copy_files $DEV_ENV/env/.config/systemd/user $XDG_CONFIG_HOME/systemd/user
|
||||
@@ -111,8 +136,8 @@ copy_files $DEV_ENV/env/.config/systemd/user $XDG_CONFIG_HOME/systemd/user
|
||||
# copying configuration.
|
||||
copy $DEV_ENV/env/.zshenv $HOME/.zshenv
|
||||
mkdir -p $XDG_CONFIG_HOME/zsh >/dev/null 2>&1
|
||||
update_dirs $DEV_ENV/env/.config/zsh $XDG_CONFIG_HOME/zsh
|
||||
copy_files $DEV_ENV/env/.config/zsh $XDG_CONFIG_HOME/zsh
|
||||
update_dirs $DEV_ENV/env/.config/zsh $XDG_CONFIG_HOME/zsh # copies sup-directories.
|
||||
copy_files $DEV_ENV/env/.config/zsh $XDG_CONFIG_HOME/zsh # copies files in the root directory.
|
||||
|
||||
# TMUX
|
||||
copy $DEV_ENV/env/.tmux.conf $HOME/.tmux.conf
|
||||
@@ -129,12 +154,23 @@ copy_files $DEV_ENV/env/wallpapers $HOME/wallpapers
|
||||
mkdir $HOME/Pictures >/dev/null 2>&1
|
||||
mkdir -p $XDG_DATA_HOME/clipse/tmp_files
|
||||
copy $DEV_ENV/dev-env $HOME/.local/scripts/dev-env
|
||||
copy $DEV_ENV/env/.markdownlint.jsonc $HOME/.markdownlint.jsonc
|
||||
copy $DEV_ENV/env/.prettierrc $HOME/.prettierrc
|
||||
|
||||
mkdir -p $XDG_DATA_HOME/applications/icons
|
||||
copy_files $DEV_ENV/env/.local/share/applications $XDG_DATA_HOME/applications
|
||||
copy_files $DEV_ENV/env/.local/share/applications/icons $XDG_DATA_HOME/applications/icons
|
||||
# TODO: Copy icons
|
||||
|
||||
systemctl --user daemon-reload
|
||||
hyprctl reload
|
||||
exec zsh -l
|
||||
# Custom package builds.
|
||||
mkdir $HOME/pkgbuilds
|
||||
update_dirs $DEV_ENV/env/pkgbuilds $HOME/pkgbuilds
|
||||
|
||||
# Email.
|
||||
email
|
||||
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
systemctl --user daemon-reload
|
||||
hyprctl reload
|
||||
espanso service restart
|
||||
exec zsh -l
|
||||
fi
|
||||
|
||||
76
devcontainer-env
Executable file
76
devcontainer-env
Executable file
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
# Intsalls appropriate dotfiles inside a devcontainer context.
|
||||
|
||||
XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-"$HOME/.config"}
|
||||
DEV_ENV=${DEV_ENV:-""}
|
||||
|
||||
if [ ! -d "$DEV_ENV" ]; then
|
||||
echo "[ERROR]: DEV_ENV variable does not exist."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log() {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
copy_dir() {
|
||||
local dir=${1:-""}
|
||||
local path="${DEV_ENV}/${dir}"
|
||||
|
||||
if [ -z "$dir" ] || [ ! -d "$path" ]; then
|
||||
log "[ERROR]: Directory does not exist: $dir"
|
||||
exit 1
|
||||
else
|
||||
log "Copying dir: $dir"
|
||||
cp -R "$path" "$XDG_CONFIG_HOME"
|
||||
fi
|
||||
}
|
||||
|
||||
copy_file() {
|
||||
local file=${1:-""}
|
||||
|
||||
if [[ -z "$file" ]] || [[ ! -f "$file" ]]; then
|
||||
log "[ERROR]: file does not exist: $file"
|
||||
exit 1
|
||||
else
|
||||
log "Copying file: $file"
|
||||
cp "$DEV_ENV/$file" "$HOME"
|
||||
fi
|
||||
}
|
||||
|
||||
# MAIN
|
||||
dirs=(
|
||||
env/.config/eza
|
||||
env/.config/git
|
||||
env/.config/ripgrep
|
||||
env/.config/starship
|
||||
env/.config/yazi
|
||||
env/.config/zsh
|
||||
)
|
||||
|
||||
files=(
|
||||
env/.markdownlint.jsonc
|
||||
env/.prettierrc
|
||||
env/.tmux.conf
|
||||
env/.zshenv
|
||||
)
|
||||
|
||||
for dir in "${dirs[@]}"; do
|
||||
copy_dir "$dir"
|
||||
done
|
||||
|
||||
for file in "${files[@]}"; do
|
||||
copy_file "$file"
|
||||
done
|
||||
|
||||
# Install neovim config
|
||||
git submodule update --init --remote env/.config/nvim
|
||||
source env/.config/nvim/install.sh
|
||||
|
||||
# Install my scripts
|
||||
cp -R env/.local/scripts "$HOME/.local"
|
||||
75
env/.config/aap/config.toml
vendored
Normal file
75
env/.config/aap/config.toml
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
# This config is setup for running inside the docker container.
|
||||
#
|
||||
# NOTE:
|
||||
# Configuration settings for the `hpa` command line tool.
|
||||
# You can delete settings that are not applicable to your use case.
|
||||
|
||||
# Default arguments / options that get passed into `ansible-playbook` commands.
|
||||
# WARNING: Do not put arguments / options that contain spaces in the same string,
|
||||
# they should be separate strings, for example do not do something like
|
||||
# ['--tags debug'], instead use ['--tags', 'debug'].
|
||||
#
|
||||
args = ['--tags', 'debug']
|
||||
|
||||
# Set to true if you want to pass the vault args to `ansible-playbook` commands.
|
||||
useVaultArgs = true
|
||||
|
||||
# NOTE:
|
||||
# Configuration for running the generate command(s). This allows custimizations
|
||||
# to the files that get used to generate the final output (generally a pdf).
|
||||
# See `pandoc --help`. Below are the defaults that get used, which only need
|
||||
# adjusted if your template does not follow the default template design or if
|
||||
# you add extra files to your template that need to be included in the final
|
||||
# output. Also be aware that any of the files specified in the `files` or
|
||||
# `includeInHeader` options, need to be inside the `buildDirectory` when generating
|
||||
# the final output file.
|
||||
|
||||
# [generate]
|
||||
# this relative to the project directory.
|
||||
# buildDirectory = '.build'
|
||||
# pdfEngine = 'xelatex'
|
||||
# includeInHeader = [
|
||||
# 'head.tex',
|
||||
# 'footer.tex'
|
||||
# ]
|
||||
# files = [
|
||||
# 'Report.md',
|
||||
# 'Definitions.md'
|
||||
# ]
|
||||
# outputFileName = 'Report'
|
||||
|
||||
# NOTE:
|
||||
# These are more for local development of the ansible playbook and should not be needed
|
||||
# in most cases. Uncomment the lines if you want to customize the playbook and use it
|
||||
# instead of the provided / default playbook.
|
||||
|
||||
[playbook]
|
||||
directory = '/root/.local/share/hpa/playbook'
|
||||
inventory = '/root/.local/share/hpa/playbook/inventory.ini'
|
||||
version = 'main'
|
||||
|
||||
# NOTE:
|
||||
# These are to declare where your template files are either on your local system or
|
||||
# a remote git repository.
|
||||
[template]
|
||||
# The directory path on your local system to the template files.
|
||||
directory = '/root/.local/share/hpa/airflow-assessment-template'
|
||||
vars = 'repo_vars'
|
||||
|
||||
# The url to a git repository that contains your template files.
|
||||
# url = 'https://git.example.com/consult-template.git'
|
||||
|
||||
# The version, tag, branch, or sha of the template files to clone from the remote
|
||||
# template repository. In general it is best practice to use a version instead of a
|
||||
# branch.
|
||||
# version = '1.0.0'
|
||||
|
||||
# NOTE:
|
||||
# Holds settings for `ansible-vault` commands.
|
||||
[vault]
|
||||
# Arguments to pass to commands that use `ansible-vault`, such as encrypting or decrypting
|
||||
# files.
|
||||
args = ['--vault-password-file=/run/secrets/vault-pass']
|
||||
|
||||
# An id to use when encrypting `ansible-vault` files.
|
||||
#encryptId = 'myId'
|
||||
7
env/.config/espanso/match/email.yml
vendored
7
env/.config/espanso/match/email.yml
vendored
@@ -4,8 +4,11 @@ matches:
|
||||
# Email Addresses
|
||||
- trigger: ":@hhe"
|
||||
replace: "mhoush@houshhomeenergy.com"
|
||||
- trigger: ":@service"
|
||||
- trigger: ":@w"
|
||||
replace: "mhoush@houshhomeenergy.com"
|
||||
- trigger: ":@ser"
|
||||
replace: "service@houshhomeenergy.com"
|
||||
- trigger: ":@me"
|
||||
replace: "michael@mhoush.com"
|
||||
|
||||
- trigger: ":@p"
|
||||
replace: "michael@mhoush.com"
|
||||
|
||||
2
env/.config/ghostty/config
vendored
2
env/.config/ghostty/config
vendored
@@ -3,7 +3,7 @@ theme = Catppuccin Mocha
|
||||
confirm-close-surface = false
|
||||
|
||||
font-family = "Fira Code"
|
||||
font-size = 13
|
||||
font-size = 18
|
||||
font-thicken = false
|
||||
|
||||
window-save-state = always
|
||||
|
||||
5
env/.config/git/config
vendored
5
env/.config/git/config
vendored
@@ -8,6 +8,7 @@
|
||||
[user]
|
||||
name = Michael Housh
|
||||
email = michael@mhoush.com
|
||||
signingkey = 0x90D3EB6274D5B7CF
|
||||
|
||||
[commit]
|
||||
gpgsign = true
|
||||
@@ -29,6 +30,7 @@
|
||||
default = simple
|
||||
autoSetupRemote = true
|
||||
followTags = true
|
||||
recurseSubmodules = on-demand
|
||||
|
||||
[fetch]
|
||||
prune = true
|
||||
@@ -64,3 +66,6 @@
|
||||
autoSquash = true
|
||||
autoStash = true
|
||||
updateRefs = true
|
||||
|
||||
[submodule]
|
||||
recurse = true
|
||||
|
||||
75
env/.config/hpa/config.toml
vendored
Normal file
75
env/.config/hpa/config.toml
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
# This config is setup for running inside the docker container.
|
||||
#
|
||||
# NOTE:
|
||||
# Configuration settings for the `hpa` command line tool.
|
||||
# You can delete settings that are not applicable to your use case.
|
||||
|
||||
# Default arguments / options that get passed into `ansible-playbook` commands.
|
||||
# WARNING: Do not put arguments / options that contain spaces in the same string,
|
||||
# they should be separate strings, for example do not do something like
|
||||
# ['--tags debug'], instead use ['--tags', 'debug'].
|
||||
#
|
||||
args = ['--tags', 'debug']
|
||||
|
||||
# Set to true if you want to pass the vault args to `ansible-playbook` commands.
|
||||
useVaultArgs = true
|
||||
|
||||
# NOTE:
|
||||
# Configuration for running the generate command(s). This allows custimizations
|
||||
# to the files that get used to generate the final output (generally a pdf).
|
||||
# See `pandoc --help`. Below are the defaults that get used, which only need
|
||||
# adjusted if your template does not follow the default template design or if
|
||||
# you add extra files to your template that need to be included in the final
|
||||
# output. Also be aware that any of the files specified in the `files` or
|
||||
# `includeInHeader` options, need to be inside the `buildDirectory` when generating
|
||||
# the final output file.
|
||||
|
||||
# [generate]
|
||||
# this relative to the project directory.
|
||||
# buildDirectory = '.build'
|
||||
# pdfEngine = 'xelatex'
|
||||
# includeInHeader = [
|
||||
# 'head.tex',
|
||||
# 'footer.tex'
|
||||
# ]
|
||||
# files = [
|
||||
# 'Report.md',
|
||||
# 'Definitions.md'
|
||||
# ]
|
||||
# outputFileName = 'Report'
|
||||
|
||||
# NOTE:
|
||||
# These are more for local development of the ansible playbook and should not be needed
|
||||
# in most cases. Uncomment the lines if you want to customize the playbook and use it
|
||||
# instead of the provided / default playbook.
|
||||
|
||||
[playbook]
|
||||
directory = '/root/.local/share/hpa/playbook'
|
||||
inventory = '/root/.local/share/hpa/playbook/inventory.ini'
|
||||
version = 'main'
|
||||
|
||||
# NOTE:
|
||||
# These are to declare where your template files are either on your local system or
|
||||
# a remote git repository.
|
||||
[template]
|
||||
# The directory path on your local system to the template files.
|
||||
directory = '/root/.local/share/hpa/template'
|
||||
vars = 'repo_vars'
|
||||
|
||||
# The url to a git repository that contains your template files.
|
||||
# url = 'https://git.example.com/consult-template.git'
|
||||
|
||||
# The version, tag, branch, or sha of the template files to clone from the remote
|
||||
# template repository. In general it is best practice to use a version instead of a
|
||||
# branch.
|
||||
# version = '1.0.0'
|
||||
|
||||
# NOTE:
|
||||
# Holds settings for `ansible-vault` commands.
|
||||
[vault]
|
||||
# Arguments to pass to commands that use `ansible-vault`, such as encrypting or decrypting
|
||||
# files.
|
||||
args = ['--vault-password-file=/run/secrets/vault-pass']
|
||||
|
||||
# An id to use when encrypting `ansible-vault` files.
|
||||
#encryptId = 'myId'
|
||||
@@ -6,11 +6,10 @@
|
||||
# Autostart necessary processes (like notifications daemons, status bars, etc.)
|
||||
# Or execute your favorite apps at launch like this:
|
||||
|
||||
exec-once = pidof hyprpaper | uwsm app -- hyprpaper
|
||||
exec-once = uwsm app -- hyprpaper
|
||||
exec-once = pidof hypridle | uwsm app -- hypridle
|
||||
exec-once = uwsm app -- elephant
|
||||
exec-once = uwsm app -- swaync
|
||||
exec-once = uwsm app -- walker --gapplication-service &
|
||||
exec-once = uwsm app -- waybar
|
||||
exec-once = pidof hyprlauncher | uwsm app -- hyprlauncher -d
|
||||
exec-once = pidof swaync | uwsm app -- swaync
|
||||
exec-once = pidof waybar | uwsm app -- waybar
|
||||
exec-once = uwsm app -- clipse -listen
|
||||
|
||||
@@ -18,7 +18,7 @@ env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
||||
env = OZONE_PLATFORM,wayland
|
||||
env = XDG_SESSION_TYPE,wayland
|
||||
|
||||
env = GDK_SCALE=2
|
||||
env = GDK_SCALE,2
|
||||
|
||||
# Allow better support for screen sharing (Google Meet, Discord, etc)
|
||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||
@@ -10,7 +10,7 @@ input {
|
||||
kb_options = ctrl:nocaps
|
||||
kb_rules =
|
||||
|
||||
repeat_rate = 35
|
||||
repeat_rate = 50
|
||||
repeat_delay = 200
|
||||
|
||||
follow_mouse = 2
|
||||
@@ -24,9 +24,9 @@ input {
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#gestures
|
||||
gestures {
|
||||
workspace_swipe = false
|
||||
}
|
||||
# gestures {
|
||||
# workspace_swipe = false
|
||||
# }
|
||||
|
||||
# Example per-device config
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
||||
@@ -4,22 +4,23 @@
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||
$mainMod = SUPER # "Command/Windows" key as main modifier
|
||||
# TODO: Use 'ALT' as window mod, need to change some tmux keybinds to do so.
|
||||
$windowMod = ALT # Control + Option for window controls.
|
||||
$windowMod = ALT # Option for window controls.
|
||||
$MEH = ALT SHIFT CTRL
|
||||
$HYPER = ALT SHIFT SUPER CTRL
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||
|
||||
$terminal = uwsm app -- ghostty
|
||||
$browser = uwsm app -- zen-browser
|
||||
$browser = uwsm app -- brave
|
||||
$fileManager = $terminal -e yazi
|
||||
$fileBrowser = uwsm app -- nautilus
|
||||
$menu = uwsm app -- walker
|
||||
$scripts = ~/.local/scripts
|
||||
$pwa = $scripts/launch-webapp
|
||||
$tmuxSessionator = $scripts/tmux-sessionator
|
||||
$clipboardHistory = $terminal --class=com.ghostty.clipse -e clipse
|
||||
$menu = hyprlauncher
|
||||
$scripts = ~/.local/scripts/hypr
|
||||
$pwa = $scripts/webapp launch
|
||||
$tmuxSessionator = ~/.local/scripts/tmux-sessionator
|
||||
$clipboardHistory = com.ghostty.clipse $terminal --class=com.ghostty.clipse -e clipse
|
||||
$uninstallDesktop = $terminal --class=com.ghostty.float -e $scripts/uninstall-desktop-app
|
||||
$utilsLauncher = com.ghostty.utils-launcher $scripts/utils-launcher --launch
|
||||
$housecallPro = https://pro.housecallpro.com/app/calendar_new
|
||||
|
||||
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||
@@ -35,55 +36,63 @@ $housecallPro = https://pro.housecallpro.com/app/calendar_new
|
||||
bindd = $mainMod, SPACE, Application launcher, exec, $menu
|
||||
bindd = $mainMod, RETURN, New terminal, exec, $terminal
|
||||
bindd = $mainMod SHIFT, RETURN, New floating terminal, exec, $terminal --class=com.ghostty.float
|
||||
bindd = $mainMod, TAB, Focus previous workspace, workspace, previous
|
||||
bindd = $mainMod, A, Chat-gpt [a]i - launch / focus, exec, $pwa --focus "https://chatgpt.com"
|
||||
bindd = $mainMod SHIFT, A, Chat-gpt [a]i - new window, exec, $pwa "https://chatgpt.com"
|
||||
bindd = $mainMod, TAB, Focus previous workspace, exec, $scripts/workspacectl switch --to previous
|
||||
bindd = $mainMod, A, [A]i - launch / focus, exec, $pwa --or-focus "https://ollama.housh.dev"
|
||||
bindd = $mainMod SHIFT, A, [A]i - new window, exec, $pwa "https://ollama.housh.dev"
|
||||
bindd = $mainMod, B, New [b]rowser, exec, $browser
|
||||
bindd = $mainMod SHIFT, B, New private [b]rowser, exec, $browser --private-window
|
||||
bindd = $mainMod, C, [C]alendar, exec, $pwa --focus "https://www.icloud.com/calendar"
|
||||
bindd = $mainMod SHIFT, B, New private [b]rowser, exec, $browser --incognito
|
||||
bindd = $mainMod, C, [C]alendar, togglespecialworkspace, calendar
|
||||
bindd = $mainMod SHIFT, C, [C]onfig folder in tmux session, exec, $terminal -e $tmuxSessionator ~/.config
|
||||
bindd = $mainMod, D, [D]ispatch app - special workspace, exec, $pwa --special dispatch $housecallPro
|
||||
bindd = $mainMod SHIFT, D, [D]ispatch app - new window, exec, $pwa $housecallPro
|
||||
bindd = $mainMod, E, [E]mail - personal, exec, $pwa --focus "https://mail.proton.me"
|
||||
bindd = $mainMod SHIFT, E, [E]mail - work, exec, $scripts/launch-or-focus thunderbird uwsm app -- thunderbird
|
||||
bindd = $mainMod, D, [D]ispatch app - special workspace, togglespecialworkspace, dispatch
|
||||
bindd = $mainMod SHIFT, D, [D]ispatch app - new window, exec, $pwa --new $housecallPro
|
||||
bindd = $mainMod, E, [E]mail - personal, exec, $pwa --or-focus "https://mail.proton.me"
|
||||
bindd = $mainMod SHIFT, E, [E]mail - work, exec, $scripts/launch --or-focus thunderbird uwsm app -- thunderbird
|
||||
bindd = $mainMod, F, [F]ile manager - terminal, exec, $fileManager
|
||||
bindd = $mainMod SHIFT, F, [F]ile manager - application, exec, $fileBrowser
|
||||
bindd = $mainMod, G, [G]itea, exec, $pwa "https://git.housh.dev"
|
||||
bindd = $mainMod, G, [G]itea, exec, $pwa --or-focus "https://git.housh.dev"
|
||||
bindd = $mainMod SHIFT, G, [G]ithub, exec, $pwa --or-focus "https://github.com"
|
||||
bindd = $mainMod, H, Focus window - left, movefocus, l # move window focus using vim keys
|
||||
bindd = $mainMod SHIFT, H, Workspace - back, workspace, -1
|
||||
bindd = $mainMod, I, Localsend, exec, $scripts/launch --or-close localsend uwsm app -- localsend
|
||||
bindd = $mainMod, J, Focus window - down, movefocus, d # move window focus using vim keys
|
||||
bindd = $mainMod, K, Focus window - up, movefocus, u # move window focus using vim keys
|
||||
bindd = $mainMod, L, Focus window - right, movefocus, r # move window focus using vim keys
|
||||
bindd = $mainMod SHIFT, L, Workspace - forward, workspace, +1
|
||||
bindd = $mainMod, M, [M]usic - apple, exec, $pwa --special music "https://music.apple.com"
|
||||
bindd = $mainMod SHIFT, M, [M]enu bar - toggle visible, exec, $scripts/toggle-waybar
|
||||
bindd = $mainMod, P, [P]assword manager, exec, $pwa --special pass "https://pass.proton.me"
|
||||
bindd = $mainMod SHIFT, P, Toggle [p]seudo window mode, pseudo, # dwindle
|
||||
bindd = $mainMod SHIFT, R, [R]estart menu bar, exec, $scripts/waybar-restart
|
||||
bindd = $mainMod, M, [M]usic - jellyfin-tui, togglespecialworkspace, music
|
||||
bindd = $mainMod SHIFT, M, [M]enu bar - toggle visible, exec, $scripts/waybarctl --toggle
|
||||
bindd = $mainMod, O, Purchase [o]rders, exec, $pwa --special dispatch "https://po.housh.dev"
|
||||
bindd = $mainMod, P, [P]assword manager, togglespecialworkspace, pass
|
||||
bindd = $mainMod SHIFT, P, [P]hotos, exec, $pwa --or-focus "https://photos.housh.dev"
|
||||
bindd = $mainMod SHIFT, R, [R]estart menu bar, exec, $scripts/waybarctl --restart
|
||||
bindd = $mainMod, S, Toggle [s]pecial workspace, togglespecialworkspace, magic # use $windowMod S to send window to the special workspace
|
||||
bindd = $mainMod, Y, [Y]ouTube, exec, $pwa --focus "https://youtube.com"
|
||||
bindd = $mainMod, Y, [Y]ouTube, exec, $pwa --or-focus "https://youtube.com"
|
||||
bindd = $mainMod, U, [U]nifi, exec, $pwa "https://unifi.ui.com"
|
||||
bindd = $mainMod SHIFT, U, [U]ninstall desktop app, exec, $uninstallDesktop
|
||||
bindd = $mainMod, V, Clipboard history, exec, $clipboardHistory
|
||||
bindd = $mainMod SHIFT, U, [U]tility launcher, exec, $scripts/launch --or-close $utilsLauncher
|
||||
bindd = $mainMod, V, Clipboard history, exec, $scripts/launch --or-close $clipboardHistory
|
||||
bindd = $mainMod, W, Close current window, killactive,
|
||||
bindd = $mainMod SHIFT, W, Close all windows in active workspace, exec, $scripts/close-windows --active-workspace
|
||||
bindd = $mainMod SHIFT, W, Close all windows in active workspace, exec, $scripts/windowctl close --active-workspace
|
||||
|
||||
# Switch to workspaces with mainMod + [0-9]
|
||||
bindd = $mainMod, 1, Switch to workspace [1], workspace, 1
|
||||
bindd = $mainMod, 2, Switch to workspace [2], workspace, 2
|
||||
bindd = $mainMod, 3, Switch to workspace [3], workspace, 3
|
||||
bindd = $mainMod, 4, Switch to workspace [4], workspace, 4
|
||||
bindd = $mainMod, 5, Switch to workspace [5], workspace, 5
|
||||
bindd = $mainMod, 6, Switch to workspace [6], workspace, 6
|
||||
bindd = $mainMod, 7, Switch to workspace [7], workspace, 7
|
||||
bindd = $mainMod, 8, Switch to workspace [8], workspace, 8
|
||||
bindd = $mainMod, 9, Switch to workspace [9], workspace, 9
|
||||
bindd = $mainMod, 0, Switch to workspace 1[0], workspace, 10
|
||||
bindd = $mainMod, 1, Switch to workspace [1], exec, $scripts/workspacectl switch --to 1
|
||||
bindd = $mainMod, 2, Switch to workspace [2], exec, $scripts/workspacectl switch --to 2
|
||||
bindd = $mainMod, 3, Switch to workspace [3], exec, $scripts/workspacectl switch --to 3
|
||||
bindd = $mainMod, 4, Switch to workspace [4], exec, $scripts/workspacectl switch --to 4
|
||||
bindd = $mainMod, 5, Switch to workspace [5], exec, $scripts/workspacectl switch --to 5
|
||||
bindd = $mainMod, 6, Switch to workspace [6], exec, $scripts/workspacectl switch --to 6
|
||||
bindd = $mainMod, 7, Switch to workspace [7], exec, $scripts/workspacectl switch --to 7
|
||||
bindd = $mainMod, 8, Switch to workspace [8], exec, $scripts/workspacectl switch --to 8
|
||||
bindd = $mainMod, 9, Switch to workspace [9], exec, $scripts/workspacectl switch --to 9
|
||||
bindd = $mainMod, 0, Switch to workspace 1[0], exec, $scripts/workspacectl switch --to 10
|
||||
|
||||
# Move all workspaces to a monitor
|
||||
bindd = $mainMod SHIFT, 1, Switch all workspaces to monitor [1], exec, $scripts/mv-all-workspaces-to-monitor 1
|
||||
bindd = $mainMod SHIFT, 0, Switch all workspaces to monitor [0], exec, $scripts/mv-all-workspaces-to-monitor 0
|
||||
|
||||
# Screen Shots
|
||||
bindd = $mainMod SHIFT, 3, Screenshot a monitor, exec, hyprshot --mode output --output-folder ~/Pictures
|
||||
bindd = $mainMod SHIFT, 4, Screenshot a selection, exec, hyprshot --mode region --output-folder ~/Pictures
|
||||
bindd = $mainMod SHIFT, 5, Screenshot a window, exec, hyprshot --mode window --output-folder ~/Pictures
|
||||
|
||||
# Scroll through existing workspaces with mainMod + scroll
|
||||
bind = $mainMod, mouse_down, workspace, e+1
|
||||
bind = $mainMod, mouse_up, workspace, e-1
|
||||
@@ -97,19 +106,21 @@ bindm = $mainMod SHIFT, mouse_down, resizewindow
|
||||
# Window controls
|
||||
#
|
||||
# These should in general use the $windowMod prefix
|
||||
#######################################################################################
|
||||
# MOD # KEY # DESC # Action #
|
||||
#######################################################################################
|
||||
bindd = CTRL SHIFT, F, Toggle [f]loating, exec, $scripts/window-toggle-floating
|
||||
##########################################################################################
|
||||
# MOD # KEY # DESC # Action #
|
||||
##########################################################################################
|
||||
# TODO: Decide which is prefered to switch to fullscreen.
|
||||
bindd = CTRL, F, Toggle [f]ullscreen, fullscreen,
|
||||
bindd = $windowMod, F, Toggle [f]ullscreen, fullscreen,
|
||||
bindd = $windowMod, H, Move window - left, movewindow, l # move windows with windowMod + vim keys
|
||||
bindd = $windowMod, J, Move window - down, movewindow, d # move windows with windowMod + vim keys
|
||||
bindd = $windowMod, K, Move window - up, movewindow, u # move windows with windowMod + vim keys
|
||||
bindd = $windowMod, L, Move window - right , movewindow, r # move windows with windowMod + vim keys
|
||||
bindd = $windowMod, M, Move window to [m]usic workspace, movetoworkspace, special:music
|
||||
bindd = $windowMod, S, Move window to [s]pecial workspace, movetoworkspacesilent, special:magic
|
||||
bindd = CTRL, F, Toggle [f]ullscreen, fullscreen,
|
||||
bindd = $windowMod, F, Toggle [f]loating, exec, $scripts/windowctl toggle-floating --active --width 80% --height 80%
|
||||
bindd = $windowMod SHIFT, F, Toggle [f]loating, exec, $scripts/windowctl toggle-floating --active
|
||||
bindd = $windowMod, H, Move window - left, movewindow, l # move windows with windowMod + vim keys
|
||||
bindd = $windowMod, J, Move window - down, movewindow, d # move windows with windowMod + vim keys
|
||||
bindd = $windowMod, K, Move window - up, movewindow, u # move windows with windowMod + vim keys
|
||||
bindd = $windowMod, L, Move window - right , movewindow, r # move windows with windowMod + vim keys
|
||||
bindd = $windowMod, M, Move window to [m]usic workspace, movetoworkspace, special:music
|
||||
bindd = $windowMod SHIFT, P, Toggle [p]seudo window mode, pseudo, # dwindle
|
||||
bindd = $windowMod, S, Move window to [s]pecial workspace, movetoworkspacesilent, special:magic
|
||||
bindd = $windowMod, W, [W]indow actions, exec, $scripts/windowctl launch action --active
|
||||
# FIX: Changes size of window, this works a different depending on if
|
||||
# the window is on the right or left of the screen.
|
||||
#
|
||||
@@ -133,16 +144,17 @@ bindd = $windowMod, 9, Move window to workspace [9], movetoworkspace, 9
|
||||
bindd = $windowMod, 0, Move window to workspace 1[0], movetoworkspace, 10
|
||||
|
||||
#######################################################################################
|
||||
# HYPER controls
|
||||
# HYPER (Alt + Shift + Super + Ctrl) controls
|
||||
#
|
||||
# These should in general use the $HYPER prefix
|
||||
#######################################################################################
|
||||
# MOD # KEY # DESC # Action #
|
||||
#######################################################################################
|
||||
|
||||
bindd = $HYPER, H, [H]ide / show windows, exec, $scripts/workspacectl toggle
|
||||
bindd = $HYPER, J, Toggle split orientation, togglesplit # dwindle
|
||||
bindd = $HYPER, L, [L]ock computer, exec, hyprlock
|
||||
bindd = $HYPER, W, Close all windows, exec, $scripts/close-windows --all
|
||||
bindd = $HYPER, W, Close all windows, exec, $scripts/windowctl close --all
|
||||
|
||||
# Move active window to a workspace silently with HYPER + [0-9]
|
||||
bindd = $HYPER, 1, Move window to workspace silent [1], movetoworkspacesilent, 1
|
||||
@@ -156,6 +168,16 @@ bindd = $HYPER, 8, Move window to workspace silent [8], movetoworkspacesilent, 8
|
||||
bindd = $HYPER, 9, Move window to workspace silent [9], movetoworkspacesilent, 9
|
||||
bindd = $HYPER, 0, Move window to workspace silent 1[0], movetoworkspacesilent, 10
|
||||
|
||||
|
||||
#######################################################################################
|
||||
# MEH (Alt + Shift + Ctrl) controls
|
||||
#
|
||||
# These should in general use the $MEH prefix
|
||||
#######################################################################################
|
||||
# MOD # KEY # DESC # Action #
|
||||
#######################################################################################
|
||||
bindd = $MEH, L, [L]ogs picker / viewer, exec, $terminal --class=com.ghostty.float -e $scripts/utils/logs/logs-picker
|
||||
|
||||
##################################################
|
||||
# Multi-media keys
|
||||
##################################################
|
||||
13
env/.config/hypr/hyprland.conf
vendored
13
env/.config/hypr/hyprland.conf
vendored
@@ -6,12 +6,13 @@
|
||||
# Refer to the wiki for more information.
|
||||
# https://wiki.hyprland.org/Configuring/
|
||||
|
||||
source = ~/.config/hypr/env.conf
|
||||
source = ~/.config/hypr/monitors.conf
|
||||
source = ~/.config/hypr/windows.conf
|
||||
source = ~/.config/hypr/keybinds.conf
|
||||
source = ~/.config/hypr/input.conf
|
||||
source = ~/.config/hypr/autostart.conf
|
||||
source = ~/.config/hypr/hyprenv.conf
|
||||
source = ~/.config/hypr/hyprmonitors.conf
|
||||
source = ~/.config/hypr/hyprwindows.conf
|
||||
source = ~/.config/hypr/hyprworkspaces.conf
|
||||
source = ~/.config/hypr/hyprkeybinds.conf
|
||||
source = ~/.config/hypr/hyprinput.conf
|
||||
source = ~/.config/hypr/hyprautostart.conf
|
||||
|
||||
#####################
|
||||
### LOOK AND FEEL ###
|
||||
|
||||
2
env/.config/hypr/hyprlauncher.conf
vendored
Normal file
2
env/.config/hypr/hyprlauncher.conf
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
desktop_launch_prefix = uwsm app --
|
||||
@@ -4,7 +4,5 @@
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||
monitor= ,preferred,auto,auto
|
||||
#monitor = HDMI-A-1, preferred, 0x0, auto
|
||||
#monitor = HDMI-A-1, preferred, 0x0, 1.66667
|
||||
|
||||
|
||||
8
env/.config/hypr/hyprtoolkit.conf
vendored
Normal file
8
env/.config/hypr/hyprtoolkit.conf
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
background = rgb(1e1e2e)
|
||||
base = rgb(b4befe)
|
||||
alternate_base = rgb(cdd6f4)
|
||||
text = rgb(cdd6f4)
|
||||
bright_text = rgb(89b4fa)
|
||||
accent = rgb(b4befe)
|
||||
accent_secondary = rgb(cba6f7)
|
||||
|
||||
47
env/.config/hypr/hyprwindows.conf
vendored
Normal file
47
env/.config/hypr/hyprwindows.conf
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
###############
|
||||
### WINDOWS ###
|
||||
###############
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||
|
||||
# windowrule = float, tag:floating-window
|
||||
# windowrule = center, tag:floating-window
|
||||
# windowrule = size 60% 60%, tag:floating-window
|
||||
#
|
||||
# # Weather tui
|
||||
# windowrule = float, class:^(com.ghostty.weather)$
|
||||
# windowrule = center, class:^(com.ghostty.weather)$
|
||||
# windowrule = size 90% 80%, class:^(com.ghostty.weather)$
|
||||
#
|
||||
# # Force windows to be a floating window
|
||||
# windowrule = tag +floating-window, class:^(blueberry.py|org.gnome.Nautilus|com.ghostty.float)$
|
||||
# windowrule = tag +floating-window, class:^(com.ghostty.windowctl)$
|
||||
# windowrule = tag +floating-window, class:^(com.ghostty.utils-launcher)$
|
||||
# windowrule = tag +floating-window, class:^(com.ghostty.homelab-launcher)$
|
||||
#
|
||||
# # Force to stay focused when visible.
|
||||
# windowrule = stayfocused, class:(blueberry.py)
|
||||
# windowrule = stayfocused, class:Pinentry.gtk
|
||||
# windowrule = stayfocused, class:com.ghostty.float
|
||||
# windowrule = stayfocused, class:com.ghostty.windowctl
|
||||
# windowrule = stayfocused, class:^(com.ghostty.utils-launcher)$
|
||||
#
|
||||
# # Clipboard history tui in floating window.
|
||||
# windowrule = tag +floating-window, class:.*clipse.*
|
||||
# windowrule = stayfocused, class:.*clipse.*
|
||||
#
|
||||
# # Ignore maximize requests from apps. You'll probably like this.
|
||||
# windowrule = suppressevent maximize, class:.*
|
||||
#
|
||||
# # Just a dash of opacity by default.
|
||||
# windowrule = opacity 0.97 0.92, class:.*
|
||||
# # No opacity on youtube.
|
||||
# windowrule = opacity 1.0, class:.*youtube.com.*
|
||||
#
|
||||
# # Fix some dragging issues with XWayland
|
||||
# windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
||||
#
|
||||
# # To get more information about a window’s class, title, XWayland status or its size, you can use `hyprctl clients`. (From Hyprland Wiki)
|
||||
# windowrulev2 = float,class:^(one.alynx.showmethekey)$
|
||||
# windowrulev2 = float,class:^(showmethekey-gtk)$ # make window floating
|
||||
# windowrulev2 = pin,class:^(showmethekey-gtk)$ # pin window
|
||||
15
env/.config/hypr/hyprworkspaces.conf
vendored
Normal file
15
env/.config/hypr/hyprworkspaces.conf
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
##################
|
||||
### WORKSPACES ###
|
||||
##################
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||
|
||||
$scripts = ~/.local/scripts/hypr
|
||||
$pwa = $scripts/webapp launch
|
||||
$housecallPro = $pwa "https://pro.housecallpro.com/app/calendar_new"
|
||||
|
||||
workspace = special:hidden, invisible
|
||||
workspace = special:pass,on-created-empty: $pwa "https://pass.proton.me"
|
||||
workspace = special:dispatch,on-created-empty: $housecallPro && $housecallPro
|
||||
workspace = special:music,on-created-empty: ghostty --class=com.ghostty.music -e jellyfin-tui
|
||||
workspace = special:calendar,on-created-empty: uwsm app -- gnome-calendar
|
||||
44
env/.config/hypr/windows.conf
vendored
44
env/.config/hypr/windows.conf
vendored
@@ -1,44 +0,0 @@
|
||||
##############################
|
||||
### WINDOWS AND WORKSPACES ###
|
||||
##############################
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||
#
|
||||
|
||||
windowrule = float, tag:floating-window
|
||||
windowrule = center, tag:floating-window
|
||||
windowrule = size 800 600, tag:floating-window
|
||||
|
||||
# Weather tui
|
||||
windowrule = float, class:^(com.ghostty.weather)$
|
||||
windowrule = center, class:^(com.ghostty.weather)$
|
||||
windowrule = size 90% 80%, class:^(com.ghostty.weather)$
|
||||
|
||||
# Force windows to be a floating window
|
||||
windowrule = tag +floating-window, class:^(blueberry.py|org.gnome.Nautilus|com.ghostty.float)$
|
||||
|
||||
# Force to stay focused when visible.
|
||||
windowrule = stayfocused, class:(blueberry.py)
|
||||
windowrule = stayfocused, class:Pinentry.gtk
|
||||
windowrule = stayfocused, class:com.ghostty.float
|
||||
# windowrule = stayfocused, class:.*pass.proton.me.*
|
||||
|
||||
# Clipboard history tui in floating window.
|
||||
windowrule = tag +floating-window, class:.*clipse.*
|
||||
windowrule = stayfocused, class:.*clipse.*
|
||||
|
||||
# Ignore maximize requests from apps. You'll probably like this.
|
||||
windowrule = suppressevent maximize, class:.*
|
||||
|
||||
# Just a dash of opacity by default.
|
||||
windowrule = opacity 0.97 0.92, class:.*
|
||||
# No opacity on youtube.
|
||||
windowrule = opacity 1.0, class:.*youtube.com.*
|
||||
|
||||
# Fix some dragging issues with XWayland
|
||||
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
||||
|
||||
workspace = special:hidden, invisible
|
||||
workspace = special:pass, class:.*pass.proton.me.*
|
||||
workspace = special:dispatch, class:.*pro.housecallpro.com.*
|
||||
14
env/.config/hypr/workspaces.conf
vendored
14
env/.config/hypr/workspaces.conf
vendored
@@ -1,14 +0,0 @@
|
||||
|
||||
# Set work spaces 1-5 to be on external monitor
|
||||
workspace = 1, monitor:1
|
||||
workspace = 2, monitor:1
|
||||
workspace = 3, monitor:1
|
||||
workspace = 4, monitor:1
|
||||
workspace = 5, monitor:1
|
||||
|
||||
# Set work spaces 6-10 to be on internal monitor
|
||||
workspace = 6, monitor:0
|
||||
workspace = 7, monitor:0
|
||||
workspace = 8, monitor:0
|
||||
workspace = 9, monitor:0
|
||||
workspace = 10, monitor:0
|
||||
151
env/.config/kanata/macbook.kbd
vendored
Normal file
151
env/.config/kanata/macbook.kbd
vendored
Normal file
@@ -0,0 +1,151 @@
|
||||
;; Macbook-Pro configuration file.
|
||||
;;
|
||||
|
||||
;; Adapted from https://github.com/linkarzu/dotfiles-latest/blob/main/kanata/configs/macbook-subl.kbd
|
||||
;; Video related to this file
|
||||
;; https://youtu.be/jvJ3f4HHiMY
|
||||
|
||||
;; Kanata docs
|
||||
;; https://github.com/jtroo/kanata/blob/main/docs/config.adoc
|
||||
|
||||
;; OS key code mappings
|
||||
;; https://github.com/jtroo/kanata/blob/main/parser/src/keys/mod.rs
|
||||
|
||||
(defcfg
|
||||
process-unmapped-keys yes
|
||||
log-layer-changes no
|
||||
danger-enable-cmd yes
|
||||
concurrent-tap-hold yes
|
||||
rapid-event-delay 10
|
||||
allow-hardware-repeat false
|
||||
|
||||
;; When any non-chord activation happens, this timeout begins. Until this timeout expires
|
||||
;; all inputs will immediately skip chords processing and be processed by the active layer.
|
||||
;; chords-v2-min-idle 250
|
||||
)
|
||||
|
||||
;; Variables
|
||||
(defvar
|
||||
tap-higher 400
|
||||
tap-time 200
|
||||
tap-time-plus 300
|
||||
hold-time-plus 300
|
||||
hold-time 200
|
||||
chord-time 60
|
||||
subl-time 200
|
||||
tmux-delay 40
|
||||
)
|
||||
|
||||
;; Only one defsrc is allowed.
|
||||
;;
|
||||
;; defsrc defines the keys that will be intercepted by kanata. The order of the
|
||||
;; keys matches with deflayer declarations and all deflayer declarations must
|
||||
;; have the same number of keys as defsrc. Any keys not listed in defsrc will
|
||||
;; be passed straight to the operating system.
|
||||
(defsrc
|
||||
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
|
||||
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
|
||||
tab q w e r t y u i o p [ ] \
|
||||
caps a s d f g h j k l ; ' ret
|
||||
lsft z x c v b n m , . / ▲ rsft
|
||||
lctl lalt lmet spc rmet ralt ◀ ▼ ▶
|
||||
)
|
||||
|
||||
(defalias
|
||||
;; Modifier keys - Left
|
||||
mlctl (tap-hold $tap-time $hold-time a lctl)
|
||||
mlalt (tap-hold $tap-time $hold-time s lalt)
|
||||
mlmet (tap-hold $tap-time $hold-time d lmet)
|
||||
mlsft (tap-hold $tap-time $hold-time f lsft)
|
||||
|
||||
;; Modifier keys - Right
|
||||
mrsft (tap-hold $tap-time $hold-time j rsft)
|
||||
mrmet (tap-hold $tap-time $hold-time k rmet)
|
||||
mralt (tap-hold $tap-time $hold-time l ralt)
|
||||
mrctl (tap-hold $tap-time $hold-time ; rctl)
|
||||
|
||||
mretu (tap-hold $tap-time $hold-time tab ret)
|
||||
|
||||
;; number and symbols layer trigger keys.
|
||||
mlnums (tap-hold-press $tap-time-plus $hold-time-plus lmet (layer-while-held nums_and_symbols))
|
||||
mrnums (tap-hold-press $tap-time-plus $hold-time-plus rmet (layer-while-held nums_and_symbols))
|
||||
|
||||
;; mouse layer trigger keys.
|
||||
mlms (tap-hold-press $tap-time $hold-time esc (layer-while-held mouse))
|
||||
mrms (tap-hold-press $tap-time $hold-time ret (layer-while-held mouse))
|
||||
|
||||
;; Multi
|
||||
mhypr (tap-hold $tap-time $hold-time spc (multi lsft lctl lalt lmet)) ;; Hyper key
|
||||
|
||||
;; Sublayers
|
||||
;; I implemented sublayers thanks to the help in this discussion
|
||||
;; https://github.com/jtroo/kanata/discussions/1765
|
||||
;; DO NOT USE THE SUBLAYERS IN A FREQUENTLY PRESSED KEY LIKE SPACEBAR
|
||||
;; It made typing spaces a pain in the ass, enter is not pressed to often, so it works way better
|
||||
;; msubl (tap-hold-press $subl-time $subl-time ret (layer-while-held sublayers))
|
||||
|
||||
;; Execute script
|
||||
;; maltt (cmd open "btt://execute_assigned_actions_for_trigger/?uuid=F35EF770-FAA5-448A-957D-70BB449DEB0F")
|
||||
|
||||
;; key and script at the same time
|
||||
;; maltt (tap-hold $tap-time $hold-time lsft (cmd open "btt://execute_assigned_actions_for_trigger/?uuid=F35EF770-FAA5-448A-957D-70BB449DEB0F"))
|
||||
)
|
||||
|
||||
;; Blank layer
|
||||
;; (deflayer {{NAME}}
|
||||
;; esc XX XX XX XX XX XX XX XX XX XX XX XX ;; function row
|
||||
;; grv XX XX XX XX XX XX XX XX XX XX XX XX bspc ;; number row
|
||||
;; tab XX XX XX XX XX XX XX XX XX XX XX XX XX ;; top letter row
|
||||
;; caps XX XX XX XX XX XX XX XX XX XX XX ret ;; home row
|
||||
;; lsft XX XX XX XX XX XX XX XX XX XX XX rsft ;; bottom letter row
|
||||
;; lctl lalt lmet spc rmet ralt ◀ ▼ ▶ ;; control row
|
||||
;; )
|
||||
|
||||
;; Main layer
|
||||
;;
|
||||
;; Disable most function keys, and add homerow mods.
|
||||
;;
|
||||
(deflayer main
|
||||
esc brdn bru XX XX XX XX XX XX XX mute vold volu
|
||||
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
|
||||
tab q w e r t y u i o p [ ] \
|
||||
@mlms @mlctl @mlalt @mlmet @mlsft g h @mrsft @mrmet @mralt @mrctl ' @mrms
|
||||
lsft z x c v b n m , . / ▲ rsft
|
||||
lctl lalt @mlnums spc @mrnums ralt ◀ ▼ ▶
|
||||
)
|
||||
|
||||
;; Number and Symbols layer
|
||||
(deflayer nums_and_symbols
|
||||
esc XX XX XX XX XX XX XX XX XX XX XX XX
|
||||
S-grv XX XX XX XX XX XX XX XX XX XX - = bspc
|
||||
grv S-1 S-9 S-0 S-2 XX XX 1 2 3 \ XX XX XX
|
||||
XX [ ] S-[ S-] XX XX 4 5 6 . XX ret
|
||||
lsft S-7 S-8 S-4 S-3 XX XX 7 8 9 / XX rsft
|
||||
lctl lalt lmet 0 rmet ralt ◀ ▼ ▶
|
||||
)
|
||||
|
||||
(defalias
|
||||
mwu (mwheel-up 50 120)
|
||||
mwd (mwheel-down 50 120)
|
||||
mwl (mwheel-left 50 120)
|
||||
mwr (mwheel-right 50 120)
|
||||
|
||||
ma↑ (movemouse-accel-up 5 1000 1 3)
|
||||
ma← (movemouse-accel-left 5 1000 1 3)
|
||||
ma↓ (movemouse-accel-down 5 1000 1 3)
|
||||
ma→ (movemouse-accel-right 5 1000 1 3)
|
||||
|
||||
sm (setmouse 32228 32228)
|
||||
|
||||
fst (movemouse-speed 200)
|
||||
)
|
||||
|
||||
;; Mouse and arrow layer
|
||||
(deflayer mouse
|
||||
esc XX XX XX XX XX XX XX XX XX XX XX XX ;; function row
|
||||
grv XX XX XX XX XX XX XX XX XX XX XX XX bspc ;; number row
|
||||
tab XX XX ▲ XX XX @mwl @mwd @mwu @mwr XX XX XX XX ;; top letter row
|
||||
caps XX ◀ ▼ ▶ XX @ma← @ma↓ @ma↑ @ma→ XX XX mrtp ;; home row
|
||||
lsft XX XX XX XX XX XX XX XX XX XX XX rsft ;; bottom letter row
|
||||
lctl lalt lmet mltp rmet ralt XX XX XX ;; control row
|
||||
)
|
||||
156
env/.config/kanata/voyager.kbd
vendored
Normal file
156
env/.config/kanata/voyager.kbd
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
;; ZSA Voyager configuration file.
|
||||
;;
|
||||
|
||||
;; Adapted from https://github.com/linkarzu/dotfiles-latest/blob/main/kanata/configs/macbook-subl.kbd
|
||||
;; Video related to this file
|
||||
;; https://youtu.be/jvJ3f4HHiMY
|
||||
|
||||
;; Kanata docs
|
||||
;; https://github.com/jtroo/kanata/blob/main/docs/config.adoc
|
||||
|
||||
;; OS key code mappings
|
||||
;; https://github.com/jtroo/kanata/blob/main/parser/src/keys/mod.rs
|
||||
|
||||
(defcfg
|
||||
process-unmapped-keys yes
|
||||
log-layer-changes no
|
||||
danger-enable-cmd yes
|
||||
concurrent-tap-hold yes
|
||||
rapid-event-delay 3
|
||||
allow-hardware-repeat false
|
||||
|
||||
;; When any non-chord activation happens, this timeout begins. Until this timeout expires
|
||||
;; all inputs will immediately skip chords processing and be processed by the active layer.
|
||||
;; chords-v2-min-idle 250
|
||||
)
|
||||
|
||||
;; Variables
|
||||
(defvar
|
||||
tap-higher 400
|
||||
tap-time 150
|
||||
tap-time-plus 300
|
||||
hold-time-plus 300
|
||||
hold-time 200
|
||||
chord-time 60
|
||||
subl-time 200
|
||||
tmux-delay 40
|
||||
)
|
||||
|
||||
;; Only one defsrc is allowed.
|
||||
;;
|
||||
;; defsrc defines the keys that will be intercepted by kanata. The order of the
|
||||
;; keys matches with deflayer declarations and all deflayer declarations must
|
||||
;; have the same number of keys as defsrc. Any keys not listed in defsrc will
|
||||
;; be passed straight to the operating system.
|
||||
(defsrc
|
||||
;;----------------LEFT-------------------;------------------RIGHT-------------------;;
|
||||
= 1 2 3 4 5 6 7 8 9 0 -
|
||||
grv q w e r t y u i o p \
|
||||
esc a s d f g h j k l ; '
|
||||
lsft z x c v b n m , . / rsft
|
||||
ret tab bspc spc
|
||||
)
|
||||
|
||||
(defalias
|
||||
;; Modifier keys - Left
|
||||
mlctl (tap-hold $tap-time $hold-time a lctl)
|
||||
mlalt (tap-hold $tap-time $hold-time s lalt)
|
||||
mlmet (tap-hold $tap-time $hold-time d lmet)
|
||||
mlsft (tap-hold $tap-time $hold-time f lsft)
|
||||
|
||||
;; Modifier keys - Right
|
||||
mrsft (tap-hold $tap-time $hold-time j rsft)
|
||||
mrmet (tap-hold $tap-time $hold-time k rmet)
|
||||
mralt (tap-hold $tap-time $hold-time l ralt)
|
||||
mrctl (tap-hold $tap-time $hold-time ; rctl)
|
||||
|
||||
mretu (tap-hold $tap-time $hold-time tab ret)
|
||||
|
||||
;; number and symbols layer trigger keys.
|
||||
mlnums (tap-hold-press $tap-time-plus $hold-time-plus ret (layer-while-held nums_and_symbols))
|
||||
mrnums (tap-hold-press $tap-time-plus $hold-time-plus spc (layer-while-held nums_and_symbols))
|
||||
|
||||
;; mouse layer trigger keys.
|
||||
mlms (tap-hold-press $tap-time $hold-time esc (layer-while-held mouse))
|
||||
mrms (tap-hold-press $tap-time $hold-time ' (layer-while-held mouse))
|
||||
|
||||
;; Multi
|
||||
mhypr (tap-hold $tap-time $hold-time bspc (multi lsft lctl lalt lmet)) ;; Hyper key
|
||||
|
||||
;; Sublayers
|
||||
;; I implemented sublayers thanks to the help in this discussion
|
||||
;; https://github.com/jtroo/kanata/discussions/1765
|
||||
;; DO NOT USE THE SUBLAYERS IN A FREQUENTLY PRESSED KEY LIKE SPACEBAR
|
||||
;; It made typing spaces a pain in the ass, enter is not pressed to often, so it works way better
|
||||
;; msubl (tap-hold-press $subl-time $subl-time ret (layer-while-held sublayers))
|
||||
|
||||
;; Execute script
|
||||
;; maltt (cmd open "btt://execute_assigned_actions_for_trigger/?uuid=F35EF770-FAA5-448A-957D-70BB449DEB0F")
|
||||
|
||||
;; key and script at the same time
|
||||
;; maltt (tap-hold $tap-time $hold-time lsft (cmd open "btt://execute_assigned_actions_for_trigger/?uuid=F35EF770-FAA5-448A-957D-70BB449DEB0F"))
|
||||
)
|
||||
|
||||
;; BLANK LAYER
|
||||
;; (deflayer {{NAME}}
|
||||
;;;;----------------LEFT-------------------;------------------RIGHT-------------------;;
|
||||
;; = 1 2 3 4 5 6 7 8 9 0 -
|
||||
;; grv q w e r t y u i o p \
|
||||
;; esc a s d f g h j k l ; '
|
||||
;; lsft z x c v b n m , . / rsft
|
||||
;; ret tab bspc spc
|
||||
;; )
|
||||
|
||||
;; Main layer
|
||||
(deflayer main
|
||||
;;----------------LEFT----------------------------;-------------------------RIGHT---------------------------;;
|
||||
= 1 2 3 4 5 6 7 8 9 0 -
|
||||
grv q w e r t y u i o p \
|
||||
@mlms @mlctl @mlalt @mlmet @mlsft g h @mrsft @mrmet @mralt @mrctl @mrms
|
||||
lsft z x c v b n m , . / rsft
|
||||
@mlnums tab @mhypr @mrnums
|
||||
)
|
||||
|
||||
(defalias
|
||||
;; Number layer modifier keys - Left
|
||||
nlctl (tap-hold $tap-time $hold-time [ lctl)
|
||||
nlalt (tap-hold $tap-time $hold-time ] lalt)
|
||||
nlmet (tap-hold $tap-time $hold-time S-[ lmet)
|
||||
nlsft (tap-hold $tap-time $hold-time S-] lsft)
|
||||
)
|
||||
|
||||
;; Number and Symbols layer
|
||||
(deflayer nums_and_symbols
|
||||
;;----------------LEFT---------------------------------;-------------------RIGHT-------------------;;
|
||||
= XX XX XX XX XX XX XX XX XX XX -
|
||||
S-grv S-1 S-9 S-0 S-2 XX - 1 2 3 \ \
|
||||
XX @nlctl @nlalt @nlmet @nlsft XX S-= 4 5 6 . '
|
||||
lsft S-7 S-8 S-3 S-4 XX S-8 7 8 9 / rsft
|
||||
@mlnums tab @mhypr 0
|
||||
)
|
||||
|
||||
(defalias
|
||||
mwu (mwheel-up 50 120)
|
||||
mwd (mwheel-down 50 120)
|
||||
mwl (mwheel-left 50 120)
|
||||
mwr (mwheel-right 50 120)
|
||||
|
||||
ma↑ (movemouse-accel-up 5 1000 1 3)
|
||||
ma← (movemouse-accel-left 5 1000 1 3)
|
||||
ma↓ (movemouse-accel-down 5 1000 1 3)
|
||||
ma→ (movemouse-accel-right 5 1000 1 3)
|
||||
|
||||
sm (setmouse 32228 32228)
|
||||
|
||||
fst (movemouse-speed 200)
|
||||
)
|
||||
|
||||
;; Mouse and arrow layer
|
||||
(deflayer mouse
|
||||
;;----------------LEFT-------------------;------------------RIGHT-------------------;;
|
||||
XX brdn bru XX XX XX XX XX mute vold volu XX
|
||||
XX XX XX ▲ XX XX @mwl @mwd @mwu @mwr XX XX
|
||||
XX XX ◀ ▼ ▶ XX @ma← @ma↓ @ma↑ @ma→ XX XX
|
||||
XX XX XX XX XX XX XX XX XX XX XX XX
|
||||
ret tab mltp mrtp
|
||||
)
|
||||
1
env/.config/nvim
vendored
Submodule
1
env/.config/nvim
vendored
Submodule
Submodule env/.config/nvim added at 5f3d1733e7
8
env/.config/nvim/.gitignore
vendored
8
env/.config/nvim/.gitignore
vendored
@@ -1,8 +0,0 @@
|
||||
tt.*
|
||||
.tests
|
||||
doc/tags
|
||||
debug
|
||||
.repro
|
||||
foo.*
|
||||
*.log
|
||||
data
|
||||
15
env/.config/nvim/.neoconf.json
vendored
15
env/.config/nvim/.neoconf.json
vendored
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"neodev": {
|
||||
"library": {
|
||||
"enabled": true,
|
||||
"plugins": true
|
||||
}
|
||||
},
|
||||
"neoconf": {
|
||||
"plugins": {
|
||||
"lua_ls": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
201
env/.config/nvim/LICENSE
vendored
201
env/.config/nvim/LICENSE
vendored
@@ -1,201 +0,0 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
4
env/.config/nvim/README.md
vendored
4
env/.config/nvim/README.md
vendored
@@ -1,4 +0,0 @@
|
||||
# 💤 LazyVim
|
||||
|
||||
A starter template for [LazyVim](https://github.com/LazyVim/LazyVim).
|
||||
Refer to the [documentation](https://lazyvim.github.io/installation) to get started.
|
||||
20
env/.config/nvim/after/ftplugin/markdown.lua
vendored
20
env/.config/nvim/after/ftplugin/markdown.lua
vendored
@@ -1,20 +0,0 @@
|
||||
-- Markdown specific key maps.
|
||||
--
|
||||
local todos = require("todo-comments")
|
||||
local keywords = { "WARN", "WARNING", "IMPORTANT" }
|
||||
|
||||
-- Show all the warnings in the quick fix list.
|
||||
vim.keymap.set(
|
||||
"n",
|
||||
"<leader>tw",
|
||||
"<CMD>Trouble todo toggle filter = {tag = {WARN, IMPORTANT}}<CR>",
|
||||
{ desc = "[T]odo [W]arnings" }
|
||||
)
|
||||
|
||||
vim.keymap.set("n", "]w", function()
|
||||
todos.jump_next({ keywords = keywords })
|
||||
end, { desc = "Next [W]arning" })
|
||||
|
||||
vim.keymap.set("n", "[w", function()
|
||||
todos.jump_prev({ keywords = keywords })
|
||||
end, { desc = "Previous [W]arning" })
|
||||
2
env/.config/nvim/after/ftplugin/swift.lua
vendored
2
env/.config/nvim/after/ftplugin/swift.lua
vendored
@@ -1,2 +0,0 @@
|
||||
vim.opt.tabstop = 2
|
||||
vim.opt.shiftwidth = 2
|
||||
15
env/.config/nvim/init.lua
vendored
15
env/.config/nvim/init.lua
vendored
@@ -1,15 +0,0 @@
|
||||
-- bootstrap lazy.nvim, LazyVim and your plugin
|
||||
vim.g.netrw_browsex_viewer = "xdg-open"
|
||||
|
||||
require("config.lazy")
|
||||
|
||||
vim.filetype.add({
|
||||
pattern = {
|
||||
[".*"] = function(path, bufnr)
|
||||
local first_line = vim.api.nvim_buf_get_lines(bufnr, 0, 1, false)[1] or ""
|
||||
if first_line:match("^#!.*zsh") then
|
||||
return "bash"
|
||||
end
|
||||
end,
|
||||
},
|
||||
})
|
||||
27
env/.config/nvim/lazyvim.json
vendored
27
env/.config/nvim/lazyvim.json
vendored
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"extras": [
|
||||
"lazyvim.plugins.extras.coding.mini-snippets",
|
||||
"lazyvim.plugins.extras.coding.mini-surround",
|
||||
"lazyvim.plugins.extras.editor.fzf",
|
||||
"lazyvim.plugins.extras.editor.harpoon2",
|
||||
"lazyvim.plugins.extras.formatting.prettier",
|
||||
"lazyvim.plugins.extras.lang.ansible",
|
||||
"lazyvim.plugins.extras.lang.clangd",
|
||||
"lazyvim.plugins.extras.lang.cmake",
|
||||
"lazyvim.plugins.extras.lang.docker",
|
||||
"lazyvim.plugins.extras.lang.git",
|
||||
"lazyvim.plugins.extras.lang.json",
|
||||
"lazyvim.plugins.extras.lang.markdown",
|
||||
"lazyvim.plugins.extras.lang.sql",
|
||||
"lazyvim.plugins.extras.lang.tailwind",
|
||||
"lazyvim.plugins.extras.lang.tex",
|
||||
"lazyvim.plugins.extras.lang.toml",
|
||||
"lazyvim.plugins.extras.lang.yaml",
|
||||
"lazyvim.plugins.extras.util.startuptime"
|
||||
],
|
||||
"install_version": 8,
|
||||
"news": {
|
||||
"NEWS.md": "11866"
|
||||
},
|
||||
"version": 8
|
||||
}
|
||||
76
env/.config/nvim/lua/config/autocmds.lua
vendored
76
env/.config/nvim/lua/config/autocmds.lua
vendored
@@ -1,76 +0,0 @@
|
||||
local defaultGroupOptions = { clear = true }
|
||||
local markdownGroup = vim.api.nvim_create_augroup("MyMarkdownGroup", defaultGroupOptions)
|
||||
local createCmd = vim.api.nvim_create_autocmd
|
||||
|
||||
createCmd("BufEnter", {
|
||||
pattern = "*.md",
|
||||
group = markdownGroup,
|
||||
callback = function(_)
|
||||
-- HACK: Set filetype to markdown for '.md' files.
|
||||
-- Not sure why it doesn't detect these as markdown files, but this fixes the issue.
|
||||
vim.cmd.setlocal("filetype=markdown")
|
||||
vim.cmd.setlocal("textwidth=120")
|
||||
vim.cmd.setlocal("spell spelllang=en_us")
|
||||
end,
|
||||
})
|
||||
|
||||
-- Hyprlang LSP
|
||||
vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
|
||||
pattern = { "*.hl", "hypr*.conf" },
|
||||
callback = function(event)
|
||||
print(string.format("starting hyprls for %s", vim.inspect(event)))
|
||||
vim.lsp.start({
|
||||
name = "hyprlang",
|
||||
cmd = { "hyprls" },
|
||||
root_dir = vim.fn.getcwd(),
|
||||
})
|
||||
end,
|
||||
})
|
||||
|
||||
-- Markdown
|
||||
-- createCmd("BufWritePost", {
|
||||
-- pattern = { "*.md", "*.markdown" },
|
||||
-- group = markdownGroup,
|
||||
-- callback = function(_)
|
||||
-- -- local cursor = vim.fn.getpos(".")
|
||||
-- vim.cmd("FormatWrite")
|
||||
-- -- vim.fn.setpos(".", cursor)
|
||||
-- end,
|
||||
-- })
|
||||
|
||||
-- Go
|
||||
createCmd("BufWritePre", {
|
||||
pattern = "*.go",
|
||||
callback = function()
|
||||
require("go.format").goimport()
|
||||
end,
|
||||
group = vim.api.nvim_create_augroup("GoFormat", defaultGroupOptions),
|
||||
})
|
||||
|
||||
-- GoPass
|
||||
vim.api.nvim_exec2(
|
||||
[[
|
||||
autocmd BufNewFile,BufRead /private/**/gopass** setlocal noswapfile nobackup noundofile shada=""
|
||||
]],
|
||||
{}
|
||||
)
|
||||
|
||||
-- Highlight when yanking.
|
||||
createCmd("TextYankPost", {
|
||||
desc = "Highlight when yanking text.",
|
||||
group = vim.api.nvim_create_augroup("highlight-yank", { clear = true }),
|
||||
callback = function()
|
||||
vim.highlight.on_yank()
|
||||
end,
|
||||
})
|
||||
|
||||
-- Force zsh scripts to use bash syntax hyighlighting.
|
||||
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
|
||||
pattern = "*",
|
||||
callback = function(args)
|
||||
local first_line = vim.api.nvim_buf_get_lines(args.buf, 0, 1, false)[1] or ""
|
||||
if first_line:match("^#!.*zsh") then
|
||||
vim.bo[args.buf].filetype = "bash"
|
||||
end
|
||||
end,
|
||||
})
|
||||
54
env/.config/nvim/lua/config/keymaps.lua
vendored
54
env/.config/nvim/lua/config/keymaps.lua
vendored
@@ -1,54 +0,0 @@
|
||||
-- Keymaps are automatically loaded on the VeryLazy event
|
||||
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
|
||||
-- Add any additional keymaps here
|
||||
|
||||
local keymap = vim.keymap.set
|
||||
local default_options = { noremap = true, silent = true }
|
||||
local wk = require("which-key")
|
||||
|
||||
local wk_add = function(mode, keymaps)
|
||||
wk.add(keymaps, { mode = mode, silent = true })
|
||||
end
|
||||
|
||||
keymap("i", "jk", "<ESC>", default_options)
|
||||
|
||||
local make_executable = function()
|
||||
local file = vim.fn.expand("%:p")
|
||||
vim.cmd("silent !chmod +x " .. file)
|
||||
print("Made " .. file .. " executable")
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Normal Mode
|
||||
--------------------------------------------------------------------------------
|
||||
wk_add("n", {
|
||||
{ "<Left>", ":vertical resize +1<CR>", desc = "Resize Pane Left" },
|
||||
{ "<Right>", ":vertical resize -1<CR>", desc = "Resize Pane Right" },
|
||||
{ "<Up>", "resize -1<CR>", desc = "Resize Pane Up" },
|
||||
{ "<Down>", "resize +1<CR>", desc = "Resize Pane Down" },
|
||||
|
||||
{ "<leader>n", "<CMD>:noh<CR>", desc = "[N]o highlighting" },
|
||||
{ "<leader>s", "<CMD>:set spell!<CR>", desc = "[S]pell check toggle" },
|
||||
{ "<C-s>", "<CMD>:write<CR>", desc = "[S]ave" },
|
||||
|
||||
{ "J", ":move .+1<CR>==", desc = "Move line down" },
|
||||
{ "K", ":move .-2<CR>==", desc = "Move line up" },
|
||||
|
||||
{ "<leader>x", make_executable, desc = "Make current file e[x]ecutable" },
|
||||
{ "<leader>z", "<CMD>:ZenMode<CR>", desc = "[Z]en Mode" },
|
||||
})
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Visual Mode
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
vim.keymap.set("v", "K", ":move '<-2<CR>gv=gv", { desc = "Move selected block up.", silent = true, noremap = true })
|
||||
vim.keymap.set("v", "J", ":move '>+1<CR>gv=gv", { desc = "Move selected block up.", silent = true, noremap = true })
|
||||
|
||||
-- Toggle term key maps, that get attached when terminal is opened.
|
||||
function _G.set_terminal_keymaps()
|
||||
local opts = { buffer = 0 }
|
||||
keymap("t", "<esc>", [[<C-\><C-n>]], opts)
|
||||
end
|
||||
|
||||
vim.cmd("autocmd! TermOpen term://* lua set_terminal_keymaps()")
|
||||
69
env/.config/nvim/lua/config/lazy.lua
vendored
69
env/.config/nvim/lua/config/lazy.lua
vendored
@@ -1,69 +0,0 @@
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
|
||||
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
|
||||
if vim.v.shell_error ~= 0 then
|
||||
vim.api.nvim_echo({
|
||||
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
|
||||
{ out, "WarningMsg" },
|
||||
{ "\nPress any key to exit..." },
|
||||
}, true, {})
|
||||
vim.fn.getchar()
|
||||
os.exit(1)
|
||||
end
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
require("lazy").setup({
|
||||
spec = {
|
||||
-- add LazyVim and import its plugins
|
||||
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
||||
{
|
||||
import = "lazyvim.plugins.extras.editor.mini-files",
|
||||
opts = {
|
||||
options = {
|
||||
use_as_default_explorer = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
import = "lazyvim.plugins.extras.coding.blink",
|
||||
keymap = {
|
||||
preset = "enter",
|
||||
["<C-y>"] = { "select_and_accept" },
|
||||
},
|
||||
},
|
||||
|
||||
-- import/override with your plugins
|
||||
{ import = "plugins" },
|
||||
},
|
||||
defaults = {
|
||||
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
|
||||
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
|
||||
lazy = false,
|
||||
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
|
||||
-- have outdated releases, which may break your Neovim install.
|
||||
version = false, -- always use the latest git commit
|
||||
-- version = "*", -- try installing the latest stable version for plugins that support semver
|
||||
},
|
||||
install = { colorscheme = { "tokyonight", "habamax" } },
|
||||
checker = {
|
||||
enabled = true, -- check for plugin updates periodically
|
||||
notify = false, -- notify on update
|
||||
}, -- automatically check for plugin updates
|
||||
performance = {
|
||||
rtp = {
|
||||
-- disable some rtp plugins
|
||||
disabled_plugins = {
|
||||
"gzip",
|
||||
-- "matchit",
|
||||
-- "matchparen",
|
||||
-- "netrwPlugin",
|
||||
"tarPlugin",
|
||||
"tohtml",
|
||||
"tutor",
|
||||
"zipPlugin",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
72
env/.config/nvim/lua/config/options.lua
vendored
72
env/.config/nvim/lua/config/options.lua
vendored
@@ -1,72 +0,0 @@
|
||||
-- Options are automatically loaded before lazy.nvim startup
|
||||
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
|
||||
-- Add any additional options here
|
||||
--
|
||||
local o = vim.opt
|
||||
local wo = vim.wo
|
||||
local fn = vim.fn
|
||||
|
||||
vim.cmd.set("inccommand=split")
|
||||
o.filetype = "on"
|
||||
o.updatetime = 500 -- faster completion
|
||||
o.timeoutlen = 800 -- time to wait for a mapped sequence to complete (in milliseconds)
|
||||
o.ttimeoutlen = 300 -- Time in milliseconds to wait for a key code sequence to complete
|
||||
o.backup = false -- creates a backup file
|
||||
o.swapfile = false -- enable/disable swap file creation
|
||||
o.dir = fn.stdpath("data") .. "/swp" -- swap file directory
|
||||
o.undofile = false -- enable/disable undo file creation
|
||||
o.undodir = fn.stdpath("data") .. "/undodir" -- set undo directory
|
||||
o.history = 500 -- Use the 'history' option to set the number of lines from command mode that are remembered.
|
||||
o.hidden = true -- required to keep multiple buffers and open multiple buffers
|
||||
--o.clipboard = "unnamedplus" -- allows neovim to access the system clipboard
|
||||
o.fileencoding = "utf-8" -- the encoding written to a file
|
||||
o.conceallevel = 0 -- so that `` is visible in markdown files
|
||||
o.number = true -- set numbered lines
|
||||
o.relativenumber = true -- set relative numbered lines
|
||||
o.cmdheight = 1 -- space for displaying messages/commands
|
||||
o.showmode = false -- we don't need to see things like -- INSERT -- anymore
|
||||
o.showtabline = 2 -- always show tabs
|
||||
o.laststatus = 2 -- The value of this option influences when the last window will have a status line (2 always)
|
||||
o.smartcase = true -- smart case
|
||||
o.smartindent = true -- make indenting smarter again
|
||||
o.splitbelow = true -- force all horizontal splits to go below current window
|
||||
o.splitright = true -- force all vertical splits to go to the right of current window
|
||||
o.autoindent = true -- turn on auto indent.
|
||||
o.expandtab = true -- convert tabs to spaces
|
||||
o.smarttab = true -- turn on smart tab
|
||||
o.shiftwidth = 2 -- the number of spaces inserted for each indentation
|
||||
o.tabstop = 2 -- how many columns a tab counts for
|
||||
o.termguicolors = true -- set term gui colors (most terminals support this)
|
||||
o.cursorline = true -- highlight the current line
|
||||
o.scrolloff = 20 -- Minimal number of screen lines to keep above and below the cursor
|
||||
o.sidescrolloff = 5 -- The minimal number of columns to scroll horizontally
|
||||
o.hlsearch = false -- highlight all matches on previous search pattern
|
||||
o.ignorecase = true -- ignore case in search patterns
|
||||
o.foldenable = false -- disable folding; enable with zi
|
||||
o.foldmethod = "expr"
|
||||
o.foldexpr = "nvim_treesitter#foldexpr()"
|
||||
vim.cmd.set("nolist") -- don't show listchars.
|
||||
-- o.listchars = "eol:¬,tab:>·,trail:~,extends:>,precedes:<"
|
||||
o.listchars = "eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣"
|
||||
o.shortmess = o.shortmess + "c" -- prevent "pattern not found" messages
|
||||
wo.colorcolumn = "99999"
|
||||
o.wildmode = "full"
|
||||
o.lazyredraw = false -- do not redraw screen while running macros
|
||||
o.grepprg = "rg --hidden --vimgrep --smart-case --"
|
||||
o.completeopt = { "menu", "menuone", "noselect", "noinsert" } -- A comma separated list of options for Insert mode completion
|
||||
o.wildignorecase = true -- When set case is ignored when completing file names and directories
|
||||
o.wildignore = [[
|
||||
.git,.hg,.svn
|
||||
*.aux,*.out,*.toc
|
||||
*.o,*.obj,*.exe,*.dll,*.manifest,*.rbc,*.class
|
||||
*.ai,*.bmp,*.gif,*.ico,*.jpg,*.jpeg,*.png,*.psd,*.webp
|
||||
*.avi,*.divx,*.mp4,*.webm,*.mov,*.m2ts,*.mkv,*.vob,*.mpg,*.mpeg
|
||||
*.mp3,*.oga,*.ogg,*.wav,*.flac
|
||||
*.eot,*.otf,*.ttf,*.woff
|
||||
*.doc,*.pdf,*.cbr,*.cbz
|
||||
*.zip,*.tar.gz,*.tar.bz2,*.rar,*.tar.xz,*.kgb
|
||||
*.swp,.lock,.DS_Store,._*
|
||||
*/tmp/*,*.so,*.swp,*.zip,**/node_modules/**,**/target/**,**.terraform/**"
|
||||
]]
|
||||
o.viminfo = "" -- disable viminfo from copying information from current session, for security.
|
||||
vim.g.snacks_animate = false
|
||||
8
env/.config/nvim/lua/plugins/cmp.lua
vendored
8
env/.config/nvim/lua/plugins/cmp.lua
vendored
@@ -1,8 +0,0 @@
|
||||
return {
|
||||
"saghen/blink.cmp",
|
||||
opts = {
|
||||
keymap = {
|
||||
preset = "default"
|
||||
}
|
||||
}
|
||||
}
|
||||
9
env/.config/nvim/lua/plugins/colorscheme.lua
vendored
9
env/.config/nvim/lua/plugins/colorscheme.lua
vendored
@@ -1,9 +0,0 @@
|
||||
return {
|
||||
{ "catppuccin/nvim", name = "catppuccin", priority = 1000 },
|
||||
{
|
||||
"LazyVim/LazyVim",
|
||||
opts = {
|
||||
colorscheme = "catppuccin",
|
||||
},
|
||||
},
|
||||
}
|
||||
4
env/.config/nvim/lua/plugins/disabled.lua
vendored
4
env/.config/nvim/lua/plugins/disabled.lua
vendored
@@ -1,4 +0,0 @@
|
||||
return {
|
||||
{ "nvim-neo-tree/neo-tree.nvim", enabled = false },
|
||||
{ "akinsho/bufferline.nvim", enabled = false },
|
||||
}
|
||||
23
env/.config/nvim/lua/plugins/fidget.lua
vendored
23
env/.config/nvim/lua/plugins/fidget.lua
vendored
@@ -1,23 +0,0 @@
|
||||
return {
|
||||
"j-hui/fidget.nvim",
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
local fidget = require("fidget")
|
||||
fidget.setup({
|
||||
notification = {
|
||||
window = {
|
||||
normal_hl = "String", -- Base highlight group in the notification window
|
||||
winblend = 0, -- Background color opacity in the notification window
|
||||
border = "rounded", -- Border around the notification window
|
||||
zindex = 45, -- Stacking priority of the notification window
|
||||
max_width = 0, -- Maximum width of the notification window
|
||||
max_height = 0, -- Maximum height of the notification window
|
||||
x_padding = 1, -- Padding from right edge of window boundary
|
||||
y_padding = 1, -- Padding from bottom edge of window boundary
|
||||
align = "bottom", -- How to align the notification window
|
||||
relative = "editor", -- What the notification window position is relative to
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
}
|
||||
30
env/.config/nvim/lua/plugins/formatter.lua
vendored
30
env/.config/nvim/lua/plugins/formatter.lua
vendored
@@ -1,30 +0,0 @@
|
||||
return {
|
||||
"stevearc/conform.nvim",
|
||||
opts = {
|
||||
formatters = {
|
||||
["markdown-toc"] = {
|
||||
condition = function(_, ctx)
|
||||
for _, line in ipairs(vim.api.nvim_buf_get_lines(ctx.buf, 0, -1, false)) do
|
||||
if line:find("<!%-%- toc %-%->") then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end,
|
||||
},
|
||||
["markdownlint-cli2"] = {
|
||||
condition = function(_, ctx)
|
||||
local diag = vim.tbl_filter(function(d)
|
||||
return d.source == "markdownlint"
|
||||
end, vim.diagnostic.get(ctx.buf))
|
||||
return #diag > 0
|
||||
end,
|
||||
},
|
||||
},
|
||||
formatters_by_ft = {
|
||||
["markdown"] = { "prettier", "markdownlint-cli2", "markdown-toc" },
|
||||
["markdown.mdx"] = { "prettier", "markdownlint-cli2", "markdown-toc" },
|
||||
lua = { "stulua" },
|
||||
swift = { "swiftformat" },
|
||||
},
|
||||
},
|
||||
}
|
||||
78
env/.config/nvim/lua/plugins/harpoon.lua
vendored
78
env/.config/nvim/lua/plugins/harpoon.lua
vendored
@@ -1,78 +0,0 @@
|
||||
return {
|
||||
{
|
||||
"ThePrimeagen/harpoon",
|
||||
branch = "harpoon2",
|
||||
opts = {
|
||||
settings = {
|
||||
save_on_toggle = true,
|
||||
sync_on_ui_close = true,
|
||||
},
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
"<C-e>",
|
||||
function()
|
||||
require("harpoon").ui:toggle_quick_menu(require("harpoon"):list())
|
||||
end,
|
||||
desc = "Open Harpoon window.",
|
||||
},
|
||||
{
|
||||
"<leader>a",
|
||||
function()
|
||||
require("harpoon"):list():add()
|
||||
end,
|
||||
desc = "[A]dd to the harpoon list.",
|
||||
},
|
||||
{
|
||||
"<A-y>",
|
||||
function()
|
||||
require("harpoon"):list():select(1)
|
||||
end,
|
||||
desc = "Select first harpoon buffer.",
|
||||
},
|
||||
{
|
||||
"<A-u>",
|
||||
function()
|
||||
require("harpoon"):list():select(2)
|
||||
end,
|
||||
desc = "Select second harpoon buffer.",
|
||||
},
|
||||
{
|
||||
"<A-i>",
|
||||
function()
|
||||
require("harpoon"):list():select(3)
|
||||
end,
|
||||
desc = "Select third harpoon buffer.",
|
||||
},
|
||||
{
|
||||
"<A-o>",
|
||||
function()
|
||||
require("harpoon"):list():select(4)
|
||||
end,
|
||||
desc = "Select fourth harpoon buffer.",
|
||||
},
|
||||
{
|
||||
"<C-[>",
|
||||
function()
|
||||
require("harpoon"):list():prev()
|
||||
end,
|
||||
desc = "Previous harpoon buffer.",
|
||||
},
|
||||
{
|
||||
"<C-]>",
|
||||
function()
|
||||
require("harpoon"):list():next()
|
||||
end,
|
||||
desc = "Next harpoon buffer.",
|
||||
},
|
||||
-- Extensions
|
||||
require("harpoon"):extend({
|
||||
UI_CREATE = function(cx)
|
||||
vim.keymap.set("n", "<C-v>", function()
|
||||
require("harpoon").ui:select_menu_item({ vsplit = true })
|
||||
end, { buffer = cx.buffer, desc = "Open in [V]split" })
|
||||
end,
|
||||
}),
|
||||
},
|
||||
},
|
||||
}
|
||||
29
env/.config/nvim/lua/plugins/init.lua
vendored
29
env/.config/nvim/lua/plugins/init.lua
vendored
@@ -1,29 +0,0 @@
|
||||
-- Plugins that don't require much configuration are in here.
|
||||
--
|
||||
return {
|
||||
{
|
||||
"folke/snacks.nvim",
|
||||
opts = {
|
||||
indent = { enabled = false },
|
||||
},
|
||||
},
|
||||
{
|
||||
"christoomey/vim-tmux-navigator",
|
||||
lazy = false,
|
||||
cmd = {
|
||||
"TmuxNavigateLeft",
|
||||
"TmuxNavigateDown",
|
||||
"TmuxNavigateUp",
|
||||
"TmuxNavigateRight",
|
||||
"TmuxNavigatePrevious",
|
||||
"TmuxNavigatorProcessList",
|
||||
},
|
||||
keys = {
|
||||
{ "<c-h>", "<cmd><C-U>TmuxNavigateLeft<cr>" },
|
||||
{ "<c-j>", "<cmd><C-U>TmuxNavigateDown<cr>" },
|
||||
{ "<c-k>", "<cmd><C-U>TmuxNavigateUp<cr>" },
|
||||
{ "<c-l>", "<cmd><C-U>TmuxNavigateRight<cr>" },
|
||||
{ "<c-\\>", "<cmd><C-U>TmuxNavigatePrevious<cr>" },
|
||||
},
|
||||
},
|
||||
}
|
||||
12
env/.config/nvim/lua/plugins/lint.lua
vendored
12
env/.config/nvim/lua/plugins/lint.lua
vendored
@@ -1,12 +0,0 @@
|
||||
return {
|
||||
{
|
||||
"mfussenegger/nvim-lint",
|
||||
opts = {
|
||||
linters = {
|
||||
markdownlint = {
|
||||
args = { "--config", "~/.markdownlint.jsonc", "--" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
169
env/.config/nvim/lua/plugins/lsp.lua
vendored
169
env/.config/nvim/lua/plugins/lsp.lua
vendored
@@ -1,169 +0,0 @@
|
||||
return {
|
||||
{
|
||||
"mason-org/mason.nvim",
|
||||
dependencies = {
|
||||
"neovim/nvim-lspconfig",
|
||||
},
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"clangd",
|
||||
"marksman",
|
||||
"shfmt",
|
||||
"tinymist",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"bash",
|
||||
"cmake",
|
||||
"dockerfile",
|
||||
"editorconfig",
|
||||
"ini",
|
||||
"jq",
|
||||
"latex",
|
||||
"make",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
opts = {
|
||||
servers = {
|
||||
bashls = {},
|
||||
clangd = {},
|
||||
dockerls = {},
|
||||
gopls = {},
|
||||
harper_ls = {},
|
||||
jsonls = {},
|
||||
lua_ls = {
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = {
|
||||
version = "LuaJIT",
|
||||
},
|
||||
diagnostics = {
|
||||
globals = { "vim" },
|
||||
},
|
||||
workspace = {
|
||||
library = vim.api.nvim_get_runtime_file("", true),
|
||||
},
|
||||
telemetry = {
|
||||
enable = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
marksman = {},
|
||||
sourcekit = {},
|
||||
tinymist = {
|
||||
settings = {
|
||||
formatterMode = "typstyle",
|
||||
},
|
||||
},
|
||||
yamlls = {},
|
||||
},
|
||||
setup = {
|
||||
clangd = function(_, opts)
|
||||
opts.capabilities.offsetEncoding = { "utf-16" }
|
||||
end,
|
||||
sourcekit = function(_, opts)
|
||||
opts.cmd = {
|
||||
vim.trim(vim.fn.system("xcrun -f sourcekit-lsp")) or nil,
|
||||
}
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
-- return {
|
||||
-- "neovim/nvim-lspconfig",
|
||||
-- event = { "BufReadPre", "BufNewFile" },
|
||||
-- dependencies = {
|
||||
-- "hrsh7th/cmp-nvim-lsp",
|
||||
-- { "antosha417/nvim-lsp-file-operations", config = true },
|
||||
-- "williamboman/mason.nvim",
|
||||
-- "williamboman/mason-lspconfig.nvim",
|
||||
-- {
|
||||
-- "folke/lazydev.nvim",
|
||||
-- ft = "lua",
|
||||
-- opts = {
|
||||
-- library = {
|
||||
-- { path = "${3rd}/luv/library", words = { "vim%.uv" } },
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- config = function()
|
||||
-- require("mason").setup()
|
||||
-- require("mason-lspconfig").setup({
|
||||
-- opts = {
|
||||
-- ensure_installed = lsp_servers,
|
||||
-- },
|
||||
-- })
|
||||
-- local lspconfig = require("lspconfig")
|
||||
-- local cmp_nvim_lsp = require("cmp_nvim_lsp")
|
||||
-- local capabilities = cmp_nvim_lsp.default_capabilities()
|
||||
-- local opts = { noremap = true, silent = true }
|
||||
-- local on_attach = function(_, bufnr)
|
||||
-- opts.buffer = bufnr
|
||||
--
|
||||
-- opts.desc = "Show line diagnostics"
|
||||
-- vim.keymap.set("n", "<leader>d", vim.diagnostic.open_float, opts)
|
||||
--
|
||||
-- opts.desc = "Show diagnostics in Telescope"
|
||||
-- vim.keymap.set("n", "<leader><leader>d", "<CMD>Telescope diagnostics bufnr=0<CR>", opts)
|
||||
--
|
||||
-- opts.desc = "Show documentation for what is under cursor"
|
||||
-- vim.keymap.set("n", "<C-k>", vim.lsp.buf.hover, opts)
|
||||
--
|
||||
-- opts.desc = "[G]oto [D]efinition"
|
||||
-- vim.keymap.set("n", "gd", "<cmd>Telescope lsp_definitions trim_text=true<cr>", opts)
|
||||
--
|
||||
-- opts.desc = "[G]oto [D]eclaration"
|
||||
-- vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts)
|
||||
--
|
||||
-- opts.desc = "LSP [C]ode [A]ction"
|
||||
-- vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
|
||||
--
|
||||
-- --opts.desc = "[R]e-[N]ame"
|
||||
-- --vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
|
||||
--
|
||||
-- opts.desc = "[R]eload or start LSP"
|
||||
-- vim.keymap.set("n", "<leader>rl", ":LspRestart | :LspStart<CR>", opts)
|
||||
--
|
||||
-- opts.desc = "Goto previous diagnostic"
|
||||
-- vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts)
|
||||
--
|
||||
-- opts.desc = "Goto next diagnostic"
|
||||
-- vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts)
|
||||
-- end
|
||||
--
|
||||
-- for _, lsp in ipairs(lsp_servers) do
|
||||
-- lspconfig[lsp].setup({
|
||||
-- capabilities = capabilities,
|
||||
-- on_attach = on_attach,
|
||||
-- on_init = function(client)
|
||||
-- -- HACK: to fix some issues with LSP
|
||||
-- -- more details: https://github.com/neovim/neovim/issues/19237#issuecomment-2237037154
|
||||
-- client.offset_encoding = "utf-8"
|
||||
-- end,
|
||||
-- cmd = lsp == "sourcekit" and { vim.trim(vim.fn.system("xcrun -f sourcekit-lsp")) } or nil,
|
||||
-- })
|
||||
-- end
|
||||
--
|
||||
-- -- nice icons
|
||||
-- local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " }
|
||||
-- for type, icon in pairs(signs) do
|
||||
-- local hl = "DiagnosticSign" .. type
|
||||
-- vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" })
|
||||
-- end
|
||||
--
|
||||
-- -- For some reason I was having trouble getting this to work inside the on-attach, so it's here.
|
||||
-- vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, { desc = "[R]e-[N]ame" })
|
||||
-- end,
|
||||
-- }
|
||||
39
env/.config/nvim/lua/plugins/luasnip.lua
vendored
39
env/.config/nvim/lua/plugins/luasnip.lua
vendored
@@ -1,39 +0,0 @@
|
||||
return {
|
||||
{
|
||||
"L3MON4D3/LuaSnip",
|
||||
opts = function()
|
||||
LazyVim.cmp.actions.snippet_forward = function()
|
||||
if require("luasnip").jumpable(1) then
|
||||
require("luasnip").jump(1)
|
||||
return true
|
||||
end
|
||||
end
|
||||
LazyVim.cmp.actions.snippet_stop = function()
|
||||
if require("luasnip").expand_or_jumpable() then -- or just jumpable(1) is fine?
|
||||
require("luasnip").unlink_current()
|
||||
return true
|
||||
end
|
||||
end
|
||||
end,
|
||||
keys = {
|
||||
{
|
||||
"<C-k>",
|
||||
mode = { "i", "s" },
|
||||
function()
|
||||
if ls.expand_or_jumpable() then
|
||||
ls.expand_or_jump()
|
||||
end
|
||||
end
|
||||
},
|
||||
{
|
||||
"<C-j>",
|
||||
mode = { "i", "s" },
|
||||
function()
|
||||
if ls.jumpable(-1) then
|
||||
ls.jump(-1)
|
||||
end
|
||||
end
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
40
env/.config/nvim/lua/plugins/oil.lua
vendored
40
env/.config/nvim/lua/plugins/oil.lua
vendored
@@ -1,40 +0,0 @@
|
||||
return {
|
||||
"stevearc/oil.nvim",
|
||||
event = "VeryLazy",
|
||||
dependencies = {
|
||||
"nvim-tree/nvim-web-devicons",
|
||||
},
|
||||
opts = {
|
||||
columns = { "icon" },
|
||||
keymaps = {
|
||||
["<C-h>"] = false,
|
||||
["<M-h>"] = "actions.select_split",
|
||||
["<C-v>"] = {
|
||||
"actions.select",
|
||||
opts = { vertical = true },
|
||||
desc = "Open the entry in a vertical split",
|
||||
},
|
||||
view_options = {
|
||||
show_hidden = true,
|
||||
is_hidden_file = function(name, _) -- second arg is bufnr, but not currently used.
|
||||
-- Don't show .DS_Store in output.
|
||||
-- local is_ds_store = name ~= ".DS_Store"
|
||||
-- return not is_ds_store
|
||||
return false
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
keys = {
|
||||
-- Show the parent directory in current window.
|
||||
{ "-", "<CMD>Oil<CR>", desc = "Open parent directory." },
|
||||
-- Open parent directory in floating window.
|
||||
{
|
||||
"<space>-",
|
||||
function()
|
||||
require("oil").toggle_float()
|
||||
end,
|
||||
desc = "Open parent directory in floating window.",
|
||||
},
|
||||
},
|
||||
}
|
||||
47
env/.config/nvim/lua/plugins/snacks.lua
vendored
47
env/.config/nvim/lua/plugins/snacks.lua
vendored
@@ -1,47 +0,0 @@
|
||||
-- NOTE: Header looks jacked up here, but fine when rendered in the ui.
|
||||
return {
|
||||
"folke/snacks.nvim",
|
||||
opts = {
|
||||
picker = {
|
||||
hidden = true,
|
||||
ignored = true
|
||||
},
|
||||
image = {
|
||||
doc = {
|
||||
enabled = true,
|
||||
},
|
||||
},
|
||||
dashboard = {
|
||||
row = nil,
|
||||
col = nil,
|
||||
preset = {
|
||||
header = [[
|
||||
*
|
||||
+++++
|
||||
+++++++++
|
||||
==+++++++++++
|
||||
+===:+++++++++++*
|
||||
+======--+++++++++++*##+====
|
||||
+==========:=+++++++++++#+====
|
||||
+=============-=++++++++++++====
|
||||
+================-:+++++++++++++==
|
||||
+===================--++++++++++++++*
|
||||
+======================--+++++++++++++++*
|
||||
=========================-++++++++++++++++
|
||||
==========================:+++++++++++++++
|
||||
===========================:++++++++++++++
|
||||
===========================-.-++++++++++++
|
||||
===========================-::.=++++++++++
|
||||
===========================----..=++++++++
|
||||
===========================------..:=+++++
|
||||
===========================--------:...-++
|
||||
===========================------------:.:
|
||||
===========================---------------
|
||||
===========================---------------
|
||||
===========================---------------
|
||||
]],
|
||||
},
|
||||
|
||||
},
|
||||
},
|
||||
}
|
||||
11
env/.config/nvim/lua/plugins/telescope.lua
vendored
11
env/.config/nvim/lua/plugins/telescope.lua
vendored
@@ -1,11 +0,0 @@
|
||||
return {
|
||||
{
|
||||
import = "lazyvim.plugins.extras.editor.telescope",
|
||||
enabled = false,
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"swift",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
14
env/.config/nvim/lua/plugins/todo-comment.lua
vendored
14
env/.config/nvim/lua/plugins/todo-comment.lua
vendored
@@ -1,14 +0,0 @@
|
||||
return {
|
||||
"folke/todo-comments.nvim",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
"folke/trouble.nvim",
|
||||
},
|
||||
keys = {
|
||||
{ "<leader>xt", false },
|
||||
{ "<leader>xT", false },
|
||||
{ "<leader>tq", "<CMD>Trouble todo toggle<CR>", desc = "[T]odo [Q]uick fix list." },
|
||||
{ "<leader><leader>t", "<CMD>TodoTelescope<CR>", desc = "[T]odo telescope list." },
|
||||
{ "<leader>tl", "<CMD>TodoLocList<CR>", desc = "[T]odo [L]ocation list." },
|
||||
},
|
||||
}
|
||||
15
env/.config/nvim/lua/plugins/typst-preview.lua
vendored
15
env/.config/nvim/lua/plugins/typst-preview.lua
vendored
@@ -1,15 +0,0 @@
|
||||
return {
|
||||
'chomosuke/typst-preview.nvim',
|
||||
ft = 'typst', -- or ft = 'typst'
|
||||
version = '1.*',
|
||||
opts = {
|
||||
debug = true,
|
||||
}, -- lazy.nvim will implicitly calls `setup {}`
|
||||
keys = {
|
||||
{
|
||||
"<leader>tp",
|
||||
"<CMD>TypstPreviewToggle<CR>",
|
||||
desc = "Toggle typst preview."
|
||||
},
|
||||
}
|
||||
}
|
||||
73
env/.config/nvim/lua/plugins/xcodebuild.lua
vendored
73
env/.config/nvim/lua/plugins/xcodebuild.lua
vendored
@@ -1,73 +0,0 @@
|
||||
local progress_handle
|
||||
|
||||
return {
|
||||
"wojciech-kulik/xcodebuild.nvim",
|
||||
event = "VeryLazy",
|
||||
dependencies = {
|
||||
"nvim-telescope/telescope.nvim",
|
||||
"MunifTanjim/nui.nvim",
|
||||
},
|
||||
opts = {
|
||||
show_build_progress_bar = false,
|
||||
logs = {
|
||||
auto_open_on_success_tests = false,
|
||||
auto_open_on_failed_tests = false,
|
||||
auto_open_on_success_build = false,
|
||||
auto_open_on_failed_build = false,
|
||||
auto_focus = false,
|
||||
auto_close_on_app_launch = true,
|
||||
only_summary = true,
|
||||
notify = function(message, severity)
|
||||
local fidget = require("fidget")
|
||||
if progress_handle then
|
||||
progress_handle.message = message
|
||||
if not message:find("Loading") then
|
||||
progress_handle:finish()
|
||||
progress_handle = nil
|
||||
if vim.trim(message) ~= "" then
|
||||
fidget.notify(message, severity)
|
||||
end
|
||||
end
|
||||
else
|
||||
fidget.notify(message, severity)
|
||||
end
|
||||
end,
|
||||
notify_progress = function(message)
|
||||
local progress = require("fidget.progress")
|
||||
|
||||
if progress_handle then
|
||||
progress_handle.title = ""
|
||||
progress_handle.message = message
|
||||
else
|
||||
progress_handle = progress.handle.create({
|
||||
message = message,
|
||||
lsp_client = { name = "xcodebuild.nvim" },
|
||||
})
|
||||
end
|
||||
end,
|
||||
},
|
||||
code_coverage = {
|
||||
enabled = true,
|
||||
},
|
||||
},
|
||||
keys = {
|
||||
{ "<leader>X", "<cmd>XcodebuildPicker<cr>", desc = "Show Xcodebuild Actions" },
|
||||
{ "<leader>xf", "<cmd>XcodebuildProjectManager<cr>", desc = "Show Project Manager Actions" },
|
||||
{ "<leader>xb", "<cmd>XcodebuildBuild<cr>", desc = "Build Project" },
|
||||
{ "<leader>xB", "<cmd>XcodebuildBuildForTesting<cr>", desc = "Build For Testing" },
|
||||
{ "<leader>xr", "<cmd>XcodebuildBuildRun<cr>", desc = "Build & Run Project" },
|
||||
{ "<leader>xt", "<cmd>XcodebuildTest<cr>", desc = "Run Tests" },
|
||||
{ "<leader>xt", "<cmd>XcodebuildTestSelected<cr>", desc = "Run Selected Tests" },
|
||||
{ "<leader>xT", "<cmd>XcodebuildTestClass<cr>", desc = "Run This Test Class" },
|
||||
{ "<leader>xl", "<cmd>XcodebuildToggleLogs<cr>", desc = "Toggle Xcodebuild Logs" },
|
||||
{ "<leader>xc", "<cmd>XcodebuildToggleCodeCoverage<cr>", desc = "Toggle Code Coverage" },
|
||||
{ "<leader>xC", "<cmd>XcodebuildShowCodeCoverageReport<cr>", desc = "Show Code Coverage Report" },
|
||||
{ "<leader>xe", "<cmd>XcodebuildTestExplorerToggle<cr>", desc = "Toggle Test Explorer" },
|
||||
{ "<leader>xs", "<cmd>XcodebuildFailingSnapshots<cr>", desc = "Show Failing Snapshots" },
|
||||
{ "<leader>xd", "<cmd>XcodebuildSelectDevice<cr>", desc = "Select Device" },
|
||||
{ "<leader>xp", "<cmd>XcodebuildSelectTestPlan<cr>", desc = "Select Test Plan" },
|
||||
{ "<leader>xq", "<cmd>Telescope quickfix<cr", desc = "Show QuickFix List" },
|
||||
{ "<leader>xx", "<cmd>XcodebuildQuickfixLine<cr>", desc = "Quickfix Line" },
|
||||
{ "<leader>xa", "<cmd>XcodebuildCodeActions<cr>", desc = "Show Code Actions" },
|
||||
},
|
||||
}
|
||||
17
env/.config/nvim/snippets/init.lua
vendored
17
env/.config/nvim/snippets/init.lua
vendored
@@ -1,17 +0,0 @@
|
||||
-- Setup snippets here.
|
||||
local ls = require("luasnip")
|
||||
local s = ls.snippet
|
||||
local sn = ls.snippet_node
|
||||
local ms = ls.multi_snippet
|
||||
local i = ls.insert_node
|
||||
local f = ls.function_node
|
||||
local c = ls.choice_node
|
||||
local t = ls.text_node
|
||||
|
||||
ls.add_snippets("lua", {
|
||||
s("hello", {
|
||||
t('print("hello '),
|
||||
i(1),
|
||||
t(' world")'),
|
||||
}),
|
||||
})
|
||||
41
env/.config/nvim/snippets/lua.lua
vendored
41
env/.config/nvim/snippets/lua.lua
vendored
@@ -1,41 +0,0 @@
|
||||
-- Setup snippets here.
|
||||
local ls = require("luasnip")
|
||||
local s = ls.snippet
|
||||
local sn = ls.snippet_node
|
||||
local ms = ls.multi_snippet
|
||||
local i = ls.insert_node
|
||||
local f = ls.function_node
|
||||
local c = ls.choice_node
|
||||
local t = ls.text_node
|
||||
local fmt = require("luasnip.extras.fmt").fmt
|
||||
|
||||
ls.add_snippets("lua", {
|
||||
-- Setup a new snippet file.
|
||||
s("sf", {
|
||||
t({
|
||||
"-- Setup snippets.",
|
||||
'local ls = require("luasnip")',
|
||||
"local s = ls.snippet",
|
||||
"local sn = ls.snippet_node",
|
||||
"local ms = ls.multi_snippet",
|
||||
"local i = ls.insert_node",
|
||||
"local f = ls.function_node",
|
||||
"local c = ls.choice_node",
|
||||
"local t = ls.text_node",
|
||||
"-- Add snippets",
|
||||
}),
|
||||
t('ls.add_snippets("'),
|
||||
i(1, "<file-type>"),
|
||||
t({
|
||||
'", {',
|
||||
"\t-- Define snippets here.",
|
||||
"})",
|
||||
}),
|
||||
}),
|
||||
s("c", {
|
||||
c(1, {
|
||||
fmt("{}", { i(1), t("debug") }),
|
||||
fmt("{}", { i(1), t("warning") }),
|
||||
}),
|
||||
}),
|
||||
})
|
||||
131
env/.config/nvim/snippets/swift.lua
vendored
131
env/.config/nvim/snippets/swift.lua
vendored
@@ -1,131 +0,0 @@
|
||||
-- Setup snippets.
|
||||
local ls = require("luasnip")
|
||||
local s = ls.snippet
|
||||
local sn = ls.snippet_node
|
||||
local ms = ls.multi_snippet
|
||||
local i = ls.insert_node
|
||||
local f = ls.function_node
|
||||
local c = ls.choice_node
|
||||
local t = ls.text_node
|
||||
local fmt = require("luasnip.extras.fmt").fmt
|
||||
local rep = require("luasnip.extras").rep
|
||||
-- Add snippets
|
||||
ls.add_snippets("swift", {
|
||||
-- Add a dependency snippet.
|
||||
s({ trig = "@d", desc = "Add a dependency." }, fmt("@Dependency(\\.{}) var {}", { i(1), rep(1) })),
|
||||
|
||||
-- Add a dependency client.
|
||||
s(
|
||||
{
|
||||
trig = "@dc",
|
||||
desc = "Add a dependency client.",
|
||||
},
|
||||
fmt(
|
||||
[[
|
||||
public extension DependencyValues {{
|
||||
var {}: {} {{
|
||||
get {{ self[{}.self] }}
|
||||
set {{ self[{}.self] = newValue }}
|
||||
}}
|
||||
}}
|
||||
|
||||
@DependencyClient
|
||||
public struct {} {{
|
||||
|
||||
// Insert interface here.
|
||||
{}
|
||||
}}
|
||||
|
||||
extension {}: TestDependencyKey {{
|
||||
public static let testValue: {} = Self()
|
||||
}}
|
||||
|
||||
]],
|
||||
{
|
||||
i(1, "<name>"),
|
||||
i(2, "<Dependency>"),
|
||||
rep(2),
|
||||
rep(2),
|
||||
rep(2),
|
||||
i(0),
|
||||
rep(2),
|
||||
rep(2),
|
||||
}
|
||||
)
|
||||
),
|
||||
|
||||
s(
|
||||
{ trig = "str", desc = "Add a struct" },
|
||||
fmt(
|
||||
[[
|
||||
struct {}: {} {{
|
||||
{}
|
||||
}}
|
||||
]],
|
||||
{ i(1, "<Name>"), i(2, "<Protocols>"), i(0) }
|
||||
)
|
||||
),
|
||||
|
||||
-- Decorate a type or function with an @_spi(...)
|
||||
s({ trig = "@_s", desc = "Add spi modifier." }, fmt("@_spi({})", { i(1, "name") })),
|
||||
|
||||
-- Add an @_spi(...) import ...
|
||||
s(
|
||||
{ trig = "@_si", desc = "Import with spi." },
|
||||
fmt(
|
||||
[[
|
||||
@_spi({}) import {}
|
||||
{}
|
||||
]],
|
||||
{ i(1, "name"), i(2, "module"), i(0) }
|
||||
)
|
||||
),
|
||||
|
||||
-- Document a function
|
||||
-- TODO: add dynamic number of prameters.
|
||||
s(
|
||||
{ trig = "docf", desc = "Document a function." },
|
||||
fmt(
|
||||
[[
|
||||
/// {}
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - {}: {}
|
||||
]],
|
||||
{ i(1, "A short description."), i(2, "<param>"), i(3, "Describe the parameter.") }
|
||||
)
|
||||
),
|
||||
|
||||
-- Add a parameter to a documentation string.
|
||||
s(
|
||||
{ trig = "param", desc = "Add a parameter to documentation" },
|
||||
fmt(
|
||||
[[
|
||||
/// - {}: {}
|
||||
]],
|
||||
{ i(1, "<param>"), i(2, "<description>") }
|
||||
)
|
||||
),
|
||||
|
||||
-- Add a withDependencies
|
||||
s(
|
||||
{ trig = "wd", desc = "withDependencies" },
|
||||
fmt(
|
||||
[[
|
||||
withDependencies {{
|
||||
$0.{} = {}
|
||||
}} operation: {{
|
||||
@Dependency(\.{}) var {}
|
||||
{}
|
||||
}}
|
||||
]],
|
||||
{
|
||||
i(1, "<dependency>"),
|
||||
i(2, "<override>"),
|
||||
rep(1),
|
||||
rep(1),
|
||||
i(0),
|
||||
}
|
||||
)
|
||||
),
|
||||
})
|
||||
21
env/.config/nvim/spell/en.utf-8.add
vendored
21
env/.config/nvim/spell/en.utf-8.add
vendored
@@ -1,21 +0,0 @@
|
||||
MeasureQuick
|
||||
Housh
|
||||
sealtite
|
||||
Subcool
|
||||
OEM
|
||||
NEC
|
||||
AHJ
|
||||
CFM
|
||||
Hydronic
|
||||
subpar
|
||||
quo
|
||||
IAQ
|
||||
wc
|
||||
HVAC
|
||||
dehumidification
|
||||
ansible
|
||||
orchestrator
|
||||
ethernet
|
||||
unifi
|
||||
wildcard
|
||||
Housh
|
||||
BIN
env/.config/nvim/spell/en.utf-8.add.spl
vendored
BIN
env/.config/nvim/spell/en.utf-8.add.spl
vendored
Binary file not shown.
3
env/.config/nvim/stylua.toml
vendored
3
env/.config/nvim/stylua.toml
vendored
@@ -1,3 +0,0 @@
|
||||
indent_type = "Spaces"
|
||||
indent_width = 2
|
||||
column_width = 120
|
||||
7
env/.config/ripgrep/ripgreprc
vendored
Normal file
7
env/.config/ripgrep/ripgreprc
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
# Show hidden files
|
||||
--hidden
|
||||
# Ignore '.git' directory
|
||||
--glob=!.git/*
|
||||
--no-follow
|
||||
--color=never
|
||||
|
||||
95
env/.config/starship/starship.toml
vendored
95
env/.config/starship/starship.toml
vendored
@@ -9,25 +9,9 @@ $username\
|
||||
$hostname\
|
||||
[](bg:color_pink fg:color_orange)\
|
||||
$directory\
|
||||
[](fg:color_pink bg:color_lavender)\
|
||||
[](fg:color_pink bg:color_bg1)\
|
||||
$git_branch\
|
||||
$git_status\
|
||||
[](fg:color_lavender bg:color_blue)\
|
||||
$c\
|
||||
$rust\
|
||||
$golang\
|
||||
$nodejs\
|
||||
$php\
|
||||
$java\
|
||||
$kotlin\
|
||||
$haskell\
|
||||
$python\
|
||||
[](fg:color_blue bg:color_bg3)\
|
||||
$docker_context\
|
||||
$conda\
|
||||
[](fg:color_bg3 bg:color_green)\
|
||||
$time\
|
||||
[ ](fg:color_green)\
|
||||
$line_break$character"""
|
||||
|
||||
palette = 'catppuccin_mocha'
|
||||
@@ -47,6 +31,7 @@ color_yellow = '#eed49f'
|
||||
color_grey = '#585b70'
|
||||
color_maroon = '#eba0ac'
|
||||
color_pink = '#f5c2e7'
|
||||
color_text = '#585b70'
|
||||
|
||||
[os]
|
||||
disabled = false
|
||||
@@ -75,17 +60,17 @@ RedHatEnterprise = ""
|
||||
|
||||
[username]
|
||||
show_always = true
|
||||
style_user = "bold bg:color_orange fg:color_grey"
|
||||
style_root = "bold bg:color_orange fg:color_grey"
|
||||
style_user = "bold bg:color_orange fg:color_text"
|
||||
style_root = "bold bg:color_orange fg:color_text"
|
||||
format = '[ $user ]($style)'
|
||||
|
||||
[hostname]
|
||||
ssh_only = true
|
||||
format = '[$ssh_symbol : $hostname](bold bg:color_orange fg:color_grey)'
|
||||
format = '[$ssh_symbol : $hostname](bold bg:color_orange fg:color_text)'
|
||||
disabled = false
|
||||
|
||||
[directory]
|
||||
style = "bold fg:color_grey bg:color_pink"
|
||||
style = "bold fg:color_text bg:color_pink"
|
||||
format = "[ $path ]($style)"
|
||||
truncation_length = 3
|
||||
truncation_symbol = "…/"
|
||||
@@ -100,72 +85,12 @@ truncate_to_repo = true
|
||||
|
||||
[git_branch]
|
||||
symbol = ""
|
||||
style = "bg:color_blue"
|
||||
format = '[[ $symbol $branch ](bold fg:color_grey bg:color_lavender)]($style)'
|
||||
style = "bg:color_bg1"
|
||||
format = '[[ $symbol $branch ](bold fg:color_green bg:color_bg1)]($style)'
|
||||
|
||||
[git_status]
|
||||
style = "bg:color_blue"
|
||||
format = '[[($all_status$ahead_behind )](bold fg:color_grey bg:color_lavender)]($style)'
|
||||
|
||||
[nodejs]
|
||||
symbol = ""
|
||||
style = "bg:color_blue"
|
||||
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
|
||||
|
||||
[c]
|
||||
symbol = " "
|
||||
style = "bg:color_blue"
|
||||
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
|
||||
|
||||
[rust]
|
||||
symbol = ""
|
||||
style = "bg:color_blue"
|
||||
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
|
||||
|
||||
[golang]
|
||||
symbol = ""
|
||||
style = "bg:color_blue"
|
||||
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
|
||||
|
||||
[php]
|
||||
symbol = ""
|
||||
style = "bg:color_blue"
|
||||
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
|
||||
|
||||
[java]
|
||||
symbol = " "
|
||||
style = "bg:color_blue"
|
||||
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
|
||||
|
||||
[kotlin]
|
||||
symbol = ""
|
||||
style = "bg:color_blue"
|
||||
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
|
||||
|
||||
[haskell]
|
||||
symbol = ""
|
||||
style = "bg:color_blue"
|
||||
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
|
||||
|
||||
[python]
|
||||
symbol = ""
|
||||
style = "bg:color_blue"
|
||||
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
|
||||
|
||||
[docker_context]
|
||||
symbol = ""
|
||||
style = "bg:color_bg3"
|
||||
format = '[[ $symbol( $context) ](fg:#83a598 bg:color_bg3)]($style)'
|
||||
|
||||
[conda]
|
||||
style = "bg:color_bg3"
|
||||
format = '[[ $symbol( $environment) ](fg:#83a598 bg:color_bg3)]($style)'
|
||||
|
||||
[time]
|
||||
disabled = false
|
||||
time_format = "%R"
|
||||
style = "bg:color_green"
|
||||
format = '[[ $time ](bold fg:color_grey bg:color_green)]($style)'
|
||||
style = "bold bg:color_bg1"
|
||||
format = '[[($all_status$ahead_behind )](bold fg:color_green bg:color_bg1)]($style)'
|
||||
|
||||
[line_break]
|
||||
disabled = false
|
||||
|
||||
@@ -4,5 +4,5 @@ After=graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=%h/.local/scripts/battery-monitor
|
||||
ExecStart=%h/.local/scripts/hypr/battery-monitor
|
||||
Environment=DISPLAY=:0
|
||||
|
||||
2
env/.config/systemd/user/logout-task.service
vendored
2
env/.config/systemd/user/logout-task.service
vendored
@@ -5,7 +5,7 @@ Before=exit.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=%h/.local/scripts/clear-clipboard-history
|
||||
ExecStart=%h/.local/scripts/hypr/clear-clipboard-history
|
||||
|
||||
[Install]
|
||||
WantedBy=exit.target
|
||||
|
||||
7
env/.config/systemd/user/tmux-kill-sessions.service
vendored
Normal file
7
env/.config/systemd/user/tmux-kill-sessions.service
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
[Unit]
|
||||
Description=Tmux kill sessions service
|
||||
After=graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=%h/.local/scripts/tmux-kill-old-sessions
|
||||
11
env/.config/systemd/user/tmux-kill-sessions.timer
vendored
Normal file
11
env/.config/systemd/user/tmux-kill-sessions.timer
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
[Unit]
|
||||
Description=Tmux kill sessions timer
|
||||
Requires=tmux-kill-sessions.service
|
||||
|
||||
[Timer]
|
||||
OnBootSec=2h
|
||||
OnUnitActiveSec=2h
|
||||
AccuracySec=10sec
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
57
env/.config/utils-launcher/config.json
vendored
Normal file
57
env/.config/utils-launcher/config.json
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
[
|
||||
{
|
||||
"name": "App - install web app",
|
||||
"description": "Install a new website as a desktop application that can be launched by an application launcher.",
|
||||
"exec": "$SCRIPTS/hypr/install-webapp"
|
||||
},
|
||||
{
|
||||
"name": "App - uninstall desktop app",
|
||||
"description": "Uninstalls desktop applications and their icon, generally used for web\napplications.\n\nIf the app was installed through a package manager, then you should\nuse the package manager to uninstall the applciation.",
|
||||
"exec": "$SCRIPTS/hypr/uninstall-desktop-app"
|
||||
},
|
||||
{
|
||||
"name": "Clipboard - clear history",
|
||||
"description": "Clear the clipboard history file.",
|
||||
"exec": "$SCRIPTS/hypr/clear-clipboard-history --notify-complete"
|
||||
},
|
||||
{
|
||||
"name": "Logs - view logs",
|
||||
"description": "View logs generated by our custom commands.",
|
||||
"exec": "$SCRIPTS/hypr/utils/logs/logs-picker"
|
||||
},
|
||||
{
|
||||
"name": "Monitors - stats / picker",
|
||||
"description": "View information from hyprctl about currently connected monitors.",
|
||||
"exec": "$SCRIPTS/hypr/monitorctl picker"
|
||||
},
|
||||
{
|
||||
"name": "Waybar - restart",
|
||||
"description": "Restart the menu bar application, useful when making changes to the configuration.",
|
||||
"exec": "$SCRIPTS/hypr/waybarctl --restart"
|
||||
},
|
||||
{
|
||||
"name": "Waybar - toggle",
|
||||
"description": "Toggle the visibility of the menu bar.",
|
||||
"exec": "$SCRIPTS/hypr/waybarctl --toggle"
|
||||
},
|
||||
{
|
||||
"name": "Windows - window stats / picker",
|
||||
"description": "View information from hyprctl about all the current windows.\n\nAllows you to choose an action you would like to perform on the selected window.",
|
||||
"exec": "$SCRIPTS/hypr/windowctl picker"
|
||||
},
|
||||
{
|
||||
"name": "Windows - close in active workspace",
|
||||
"description": "Close all windows in the currently active workspace.",
|
||||
"exec": "$SCRIPTS/hypr/windowctl close --active-workspace"
|
||||
},
|
||||
{
|
||||
"name": "Windows - close ALL",
|
||||
"description": "Close all windows in all workspaces.",
|
||||
"exec": "$SCRIPTS/hypr/windowctl close --all"
|
||||
},
|
||||
{
|
||||
"name": "Workspaces - stats / picker",
|
||||
"description": "View information from hyprctl about currently available workspaces",
|
||||
"exec": "$SCRIPTS/hypr/workspacectl picker"
|
||||
}
|
||||
]
|
||||
138
env/.config/walker/config.toml
vendored
138
env/.config/walker/config.toml
vendored
@@ -1,138 +0,0 @@
|
||||
force_keyboard_focus = true # forces keyboard forcus to stay in Walker
|
||||
close_when_open = true # close walker when invoking while already opened
|
||||
selection_wrap = false # wrap list if at bottom or top
|
||||
global_argument_delimiter = "#" # query: firefox#https://benz.dev => part after delimiter will be ignored when querying. this should be the same as in the elephant config
|
||||
keep_open_modifier = "shift" # won't close on activation, but rather select the next item in the list
|
||||
exact_search_prefix = "'" # disable fuzzy searching
|
||||
theme = "default" # theme to use
|
||||
disable_mouse = false # disable mouse (on input and list only)
|
||||
|
||||
[shell]
|
||||
anchor_top = true
|
||||
anchor_bottom = true
|
||||
anchor_left = true
|
||||
anchor_right = true
|
||||
|
||||
[placeholders]
|
||||
"default" = { input = "Search", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other"
|
||||
|
||||
[keybinds]
|
||||
close = "Escape"
|
||||
next = "Down"
|
||||
previous = "Up"
|
||||
toggle_exact = "ctrl e"
|
||||
resume_last_query = "ctrl r"
|
||||
quick_activate = ["F1", "F2", "F3", "F4"]
|
||||
|
||||
[providers]
|
||||
default = [
|
||||
"desktopapplications",
|
||||
"calc",
|
||||
"runner",
|
||||
"menus",
|
||||
"websearch",
|
||||
] # providers to be queried by default
|
||||
empty = ["desktopapplications"] # providers to be queried when query is empty
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = ";"
|
||||
provider = "providerlist"
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = "/"
|
||||
provider = "files"
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = "."
|
||||
provider = "symbols"
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = "!"
|
||||
provider = "todo"
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = "="
|
||||
provider = "calc"
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = "@"
|
||||
provider = "websearch"
|
||||
|
||||
[[providers.prefixes]]
|
||||
prefix = ":"
|
||||
provider = "clipboard"
|
||||
|
||||
[providers.archlinuxpkgs]
|
||||
default = "install"
|
||||
install = "Return"
|
||||
remove = "ctrl d"
|
||||
|
||||
[providers.calc]
|
||||
default = "copy"
|
||||
copy = "Return"
|
||||
save = "ctrl s"
|
||||
delete = "ctrl d"
|
||||
|
||||
[providers.websearch]
|
||||
default = "search"
|
||||
search = "Return"
|
||||
remove_history = "ctrl BackSpace"
|
||||
|
||||
[providers.providerlist]
|
||||
default = "activate"
|
||||
activate = "Return"
|
||||
|
||||
[providers.clipboard]
|
||||
time_format = "%d.%m. - %H:%M" # format for the clipboard item date
|
||||
default = "copy"
|
||||
copy = "Return"
|
||||
delete = "ctrl d"
|
||||
edit = "ctrl o"
|
||||
toggle_images_only = "ctrl i"
|
||||
|
||||
[providers.desktopapplications]
|
||||
default = "start"
|
||||
start = "Return"
|
||||
start_keep_open = "shift Return"
|
||||
remove_history = "ctrl BackSpace"
|
||||
toggle_pin = "ctrl p"
|
||||
|
||||
[providers.files]
|
||||
default = "open"
|
||||
open = "Return"
|
||||
open_dir = "ctrl Return"
|
||||
copy_path = "ctrl shift c"
|
||||
copy_file = "ctrl c"
|
||||
|
||||
[providers.todo]
|
||||
default = "save"
|
||||
save = "Return"
|
||||
delete = "ctrl d"
|
||||
mark_active = "ctrl a"
|
||||
mark_done = "ctrl f"
|
||||
clear = "ctrl x"
|
||||
|
||||
[providers.runner]
|
||||
default = "start"
|
||||
start = "Return"
|
||||
start_terminal = "shift Return"
|
||||
remove_history = "ctrl BackSpace"
|
||||
|
||||
[providers.dmenu]
|
||||
default = "select"
|
||||
select = "Return"
|
||||
|
||||
[providers.symbols]
|
||||
default = "copy"
|
||||
copy = "Return"
|
||||
remove_history = "ctrl BackSpace"
|
||||
|
||||
[providers.unicode]
|
||||
default = "copy"
|
||||
copy = "Return"
|
||||
remove_history = "ctrl BackSpace"
|
||||
|
||||
[providers.menus]
|
||||
default = "activate"
|
||||
activate = "Return"
|
||||
remove_history = "ctrl BackSpace"
|
||||
9
env/.config/waybar/config.jsonc
vendored
9
env/.config/waybar/config.jsonc
vendored
@@ -6,6 +6,7 @@
|
||||
"modules-center": ["clock"],
|
||||
"modules-right": [
|
||||
"pulseaudio",
|
||||
"idle_inhibitor",
|
||||
"tray",
|
||||
"cpu",
|
||||
"memory",
|
||||
@@ -76,4 +77,12 @@
|
||||
// "format-full": "",
|
||||
"format-icons": ["", "", "", "", ""],
|
||||
},
|
||||
"idle_inhibitor": {
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"activated": "",
|
||||
"deactivated": ""
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
9
env/.config/waybar/style.css
vendored
9
env/.config/waybar/style.css
vendored
@@ -54,7 +54,8 @@
|
||||
#cpu,
|
||||
#memory,
|
||||
#custom-lock,
|
||||
#custom-power {
|
||||
#custom-power,
|
||||
#idle_inhibitor {
|
||||
background-color: @background;
|
||||
padding: 0.5rem 1rem;
|
||||
margin: 5px 0;
|
||||
@@ -69,12 +70,18 @@
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
|
||||
#pulseaudio {
|
||||
color: @red;
|
||||
border-radius: 10px 0px 0px 10px;
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
#idle_inhibitor {
|
||||
border-radius: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
#tray {
|
||||
color: @blue;
|
||||
border-radius: 0px 10px 10px 0px;
|
||||
|
||||
44
env/.config/zsh/.zshrc
vendored
44
env/.config/zsh/.zshrc
vendored
@@ -19,17 +19,6 @@ zle -N down-line-or-beginning-search
|
||||
# Colors
|
||||
autoload -Uz colors && colors
|
||||
|
||||
#------------------------------ pager ------------------------------
|
||||
#eval "$(batman --export-env)"
|
||||
# export LESS_TERMCAP_mb="[35m" # magenta
|
||||
# export LESS_TERMCAP_md="[33m" # yellow
|
||||
# export LESS_TERMCAP_me=""
|
||||
# export LESS_TERMCAP_se=""
|
||||
# export LESS_TERMCAP_so="[34m" # blue
|
||||
# export LESS_TERMCAP_ue=""
|
||||
# export LESS_TERMCAP_so="[4m" # underline
|
||||
# export LESSHISTFILE="-"
|
||||
|
||||
#------------------------------ path ------------------------------
|
||||
|
||||
# Helper function to prepend to the $PATH
|
||||
@@ -63,16 +52,21 @@ path_prepend \
|
||||
"$GOROOT/bin" \
|
||||
"$GOPATH/bin" \
|
||||
"$XDG_DATA_HOME/bin" \
|
||||
"$XDG_DATA_HOME/npm/bin" \
|
||||
"$HOME/.local/bin" \
|
||||
"$SCRIPTS" \
|
||||
"$SCRIPTS/hypr" \
|
||||
"$SCRIPTS/mail" \
|
||||
"$HOME/.local/pnpm" \
|
||||
"$CARGO_HOME/bin" \
|
||||
"$HOME/.local/bin"
|
||||
"$HOME/.local/bin" \
|
||||
"$XDG_DATA_HOME/bob/nvim-bin"
|
||||
|
||||
# last arg will be first in $FPATH
|
||||
fpath_prepend \
|
||||
"$ZDOTDIR/completions" \
|
||||
"$HOME/.local/share/zsh/completions" \
|
||||
"$HOME/.zsh/completions" \
|
||||
"$ZDOTDIR/functions"
|
||||
|
||||
autoload -Uz $fpath[1]/*(.:t)
|
||||
@@ -92,8 +86,6 @@ export HISTFILESIZE=5000
|
||||
export SAVEHIST=5000
|
||||
export HISTFILE="$XDG_CONFIG_HOME/zsh/history"
|
||||
|
||||
#set -o vi
|
||||
|
||||
#------------------------------ cdpath ------------------------------
|
||||
setopt autocd
|
||||
|
||||
@@ -127,7 +119,7 @@ zsh_add_plugin "Aloxaf/fzf-tab"
|
||||
|
||||
#------------------------------ completions ------------------------------
|
||||
# case insensitive path-completion
|
||||
zstyle ':completion:*' matcher-list 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]} l:|=* r:|=*' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]} l:|=* r:|=*' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]} l:|=* r:|=*'
|
||||
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
|
||||
|
||||
# partial completion suggestions
|
||||
zstyle ':completion:*' list-suffixes
|
||||
@@ -148,10 +140,8 @@ _source_if "$ZDOTDIR/plugins/fzf-tab/fzf-tab.plugin.zsh"
|
||||
|
||||
#------------------------------ prompt ------------------------------
|
||||
|
||||
# Prompt / managed by brew. (`brew install starship`)
|
||||
autoload -Uz promptinit; promptinit
|
||||
eval "$(starship init zsh)"
|
||||
#prompt pure
|
||||
|
||||
#------------------------------ aliases ------------------------------
|
||||
|
||||
@@ -164,6 +154,7 @@ alias d='docker' # run docker commands quickly
|
||||
alias dc='docker compose' # run docker-compose commands quickly
|
||||
alias dv='dirs -v' # list directory info
|
||||
alias essh='edit-ssh-config' # edit ssh config quickly
|
||||
alias email='tmux-sessionator --email' # Open email tmux session.
|
||||
alias fl='find-latest' # Find the last modified file in a directory.
|
||||
alias g='git' # access git commands quickly
|
||||
alias ga='git add' # add files to git quickly
|
||||
@@ -175,17 +166,19 @@ alias gs='git status' # git status quickly
|
||||
alias hn='hugo new' # generate a hugo site
|
||||
alias hnc='hugo new content' # generate new hugo site content quickly
|
||||
alias j='just' # run justfile's quickly.
|
||||
alias kb='kanatactl' # Keyboard / kanata commands.
|
||||
alias l='eza --long --git --group --links --icons --all' # better ls command.
|
||||
alias lfs='ls -lahH --color=auto "$ZDOTDIR/functions"' # List functions.
|
||||
alias ls='eza --long --git --group --links --icons --all'
|
||||
alias lt='eza --long --git --group --links --icons --tree'
|
||||
alias pass='gopass'
|
||||
alias p='gopass' # run the pass command quickly.
|
||||
alias pass='PASSWORD_STORE_DIR=/home/michael/.local/share/gopass/stores/root gopass'
|
||||
alias pc='gopass show --clip' # get an attribute of a password file and copy to the clipboard.
|
||||
alias reload='exec zsh -l' # reload the shell, useful when making changes.
|
||||
alias s='swift' # shorthand to access swift commands
|
||||
alias st='swift test' # swift test
|
||||
alias st='swift test' # swift test
|
||||
alias ste='swift test --enable-code-coverage' # swift test with code coverage enabled.
|
||||
alias sb='swift build' # swift build
|
||||
alias syu='yay -Syu' # Update packages.
|
||||
alias t='tmux' # access tmux quickly
|
||||
alias tka='tmux kill-server' # kill tmux server and all sessions.
|
||||
alias ts='$SCRIPTS/tmux-sessionator' # create new tmux session, fuzzy finding common locations.
|
||||
@@ -195,11 +188,7 @@ alias tks='tmux kill-session -t' # kill tmux session
|
||||
alias temp='cd $(mktemp -d)' # create a temporary directory and move into it.
|
||||
alias vi='nvim' # set vi to open neovim
|
||||
alias newf='"$SCRIPTS"/newx --function' # generate a new shell function
|
||||
alias nlnv='nvim "$LOCAL_ENV"' # open local environment overrides file in neovime
|
||||
alias nvim='unset VIMINIT && unset MYVIMRC && nvim' # alias nvim to unset vimrc, useful when using both vim & neovim
|
||||
alias nvim-mhoush='NVIM_APPNAME=m-housh && nvim' # set neovim to use my config.
|
||||
alias nvim-kickstart='NVIM_APPNAME=kickstart nvim' # set neovim to use kickstart config.
|
||||
alias nvim-lazy='NVIM_APPNAME=lazy nvim' # set neovim to use lazy config.
|
||||
alias n='nvim'
|
||||
alias wget="wget --hsts-file=$XDG_DATA_HOME/wget-hsts" # set wget history location.
|
||||
# GPG Yubikey restart relearn when switching keys and stubbed.
|
||||
alias yubikeyrestart='gpg-connect-agent killagent /bye && gpg-connect-agent "scd serialno" "learn --force" /bye && gpg --card-status'
|
||||
@@ -218,6 +207,8 @@ source <(fzf --zsh)
|
||||
# I tried sourcing them in the the `.zshenv` files, but did not work.
|
||||
_source_if "$ZDOTDIR/.zshrc-local"
|
||||
_source_if "$LOCAL_ENV"
|
||||
_source_if "$SCRIPTS/catppuccin-colors"
|
||||
_source_if "$XDG_DATA_HOME/swiftly/env.sh"
|
||||
|
||||
# pnpm
|
||||
export PNPM_HOME="$XDG_DATA_HOME/pnpm"
|
||||
@@ -228,12 +219,9 @@ esac
|
||||
# pnpm end
|
||||
|
||||
# The following lines have been added by Docker Desktop to enable Docker CLI completions.
|
||||
fpath=(/Users/michael/.docker/completions $fpath)
|
||||
autoload -Uz compinit
|
||||
compinit
|
||||
|
||||
#eval "$(ssh-agent -s)" 1>/dev/null
|
||||
|
||||
########################################
|
||||
# Set things up for using gpg-agent
|
||||
|
||||
|
||||
10
env/.config/zsh/functions/dp
vendored
10
env/.config/zsh/functions/dp
vendored
@@ -1,12 +1,12 @@
|
||||
#!/bin/zsh
|
||||
|
||||
function dp() {
|
||||
[ -z "$1" ] && echo "Must supply temperature" && return 1
|
||||
[ -z "$2" ] && echo "Must supply relative humidity" && return 1
|
||||
[ -z "$1" ] && echo "Must supply temperature" && return 1
|
||||
[ -z "$2" ] && echo "Must supply relative humidity" && return 1
|
||||
|
||||
local temperature=$1
|
||||
local humidity=$2
|
||||
local temperature=$1
|
||||
local humidity=$2
|
||||
|
||||
/opt/homebrew/bin/psychrometrics dew-point --dry-bulb "$temperature" --relative-humidity "$humidity"
|
||||
psychrometrics dew-point --dry-bulb "$temperature" --relative-humidity "$humidity"
|
||||
|
||||
}
|
||||
|
||||
25
env/.config/zsh/functions/n
vendored
25
env/.config/zsh/functions/n
vendored
@@ -1,25 +0,0 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
# Open's neovim.
|
||||
#
|
||||
# If the argument passed in is a directory or not supplied, then
|
||||
# open neovim with telescope find files opened. Otherwise open the
|
||||
# file that is supplied.
|
||||
#
|
||||
|
||||
function n() {
|
||||
# if [ -z "$1" ]; then
|
||||
# local gitdir=$(git rev-parse --show-toplevel 2> /dev/null)
|
||||
#
|
||||
# [ -n "$gitdir" ] \
|
||||
# && nvim -c ":Telescope git_files" \
|
||||
# && return 0
|
||||
#
|
||||
# [ -d "$1" ] \
|
||||
# && nvim -c ":Telescope find_files" \
|
||||
# && return 0
|
||||
# fi
|
||||
|
||||
nvim "$@"
|
||||
}
|
||||
|
||||
10
env/.gnupg/gpg-agent.conf
vendored
10
env/.gnupg/gpg-agent.conf
vendored
@@ -2,13 +2,5 @@
|
||||
# https://www.gnupg.org/documentation/manuals/gnupg/Agent-Options.html
|
||||
enable-ssh-support
|
||||
ttyname $GPG_TTY
|
||||
default-cache-ttl 60
|
||||
default-cache-ttl 120
|
||||
max-cache-ttl 120
|
||||
#pinentry-program /usr/bin/pinentry-curses
|
||||
#pinentry-program /usr/bin/pinentry-gnome3
|
||||
#pinentry-program /bin/pinentry-tty
|
||||
#pinentry-program /usr/bin/pinentry-x11
|
||||
#pinentry-program /usr/local/bin/pinentry-curses
|
||||
#pinentry-program /bin/pinentry-dmenu
|
||||
|
||||
#pinentry-program /opt/homebrew/bin/pinentry-mac
|
||||
|
||||
47
env/.local/scripts/aap
vendored
Executable file
47
env/.local/scripts/aap
vendored
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
# A wrapper script to run swift-hpa in a docker container and
|
||||
# mount the correct volumes, etc.
|
||||
#
|
||||
# Make sure to run 'hpa-init' first on this machine to setup
|
||||
# dependencies, if you have not done so already.
|
||||
#
|
||||
# To attach to a shell inside the container run:
|
||||
# `hpa bash`
|
||||
#
|
||||
# To run ansible vault commands inside the container run:
|
||||
# `hpa ansible-vault ...`
|
||||
#
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
. "$SCRIPTS/utils/hpa/hpa.env"
|
||||
|
||||
############################## MAIN ##############################
|
||||
|
||||
# Don't pull images if they're prefixed with 'localhost'.
|
||||
if echo "$HPA_DOCKER_IMAGE" | grep -vq "localhost"; then
|
||||
|
||||
# Check if we should pull the image prior to running.
|
||||
last_pull="0"
|
||||
if [[ -f "$HPA_AIRFLOW_CONFIG_DIR/.lastpull" ]]; then
|
||||
last_pull=$(cat "$HPA_AIRFLOW_CONFIG_DIR/.lastpull")
|
||||
fi
|
||||
curr=$(date +%s)
|
||||
diff=$((curr - last_pull))
|
||||
|
||||
if [[ $HPA_AUTO_PULL == "1" ]] && [[ $diff -gt "$HPA_AUTO_PULL_INTERVAL" ]]; then
|
||||
. "$SCRIPTS/hpa-pull" "$HPA_AUTO_PULL_OPTS"
|
||||
fi
|
||||
fi
|
||||
|
||||
podman run --rm --interactive --tty \
|
||||
--volume "$HPA_AIRFLOW_CONFIG_DIR":/root/.config/hpa:ro \
|
||||
--volume "$HPA_DATA_DIR":/root/.local/share/hpa:ro \
|
||||
--volume "$HPA_CONSULTS_DIR":/consults \
|
||||
--volume "$PWD":/root/project \
|
||||
--secret "$HPA_VAULT_SECRET_KEY" \
|
||||
"$HPA_DOCKER_IMAGE:$HPA_DOCKER_TAG" "$@"
|
||||
68
env/.local/scripts/backup-logger
vendored
Executable file
68
env/.local/scripts/backup-logger
vendored
Executable file
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
||||
LOG_DIR="/tmp/logs"
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Utility for logging backup runs.
|
||||
|
||||
USAGE:
|
||||
$ $THIS <flags> <msg...>
|
||||
|
||||
FLAGS:
|
||||
-h | --help: Show this help page.
|
||||
-s | --show: Show the log messages.
|
||||
--rm: Remove the log file
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
show() {
|
||||
[[ ! -f "$LOG_DIR/$LOG_FILE" ]] &&
|
||||
log --warning "Empty log file." &&
|
||||
exit 0
|
||||
|
||||
bat "$LOG_DIR/$LOG_FILE"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
declare -a msg
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
||||
usage && exit 0
|
||||
elif [[ $1 == "-s" ]] || [[ $1 == "--show" ]]; then
|
||||
show && exit 0
|
||||
elif [[ $1 == "--rm" ]]; then
|
||||
rm "$LOG_DIR/$LOG_FILE" && exit 0
|
||||
else
|
||||
msg+=("$1")
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
[[ -z "${msg[*]}" ]] && log --error "No message passed to log." && exit 1
|
||||
|
||||
log "${msg[@]}"
|
||||
34
env/.local/scripts/catppuccin-colors
vendored
Executable file
34
env/.local/scripts/catppuccin-colors
vendored
Executable file
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Catppuccin-mocha colors https://catppuccin.com/palette/
|
||||
#
|
||||
# This allows this file to be sourced and colors available in other scripts.
|
||||
|
||||
export ROSEWATER="#f5e0dc"
|
||||
export FLAMINGO="#f2cdcd"
|
||||
export PINK="#f5c2e7"
|
||||
export MAUVE="#cba6f7"
|
||||
export RED="#f38ba8"
|
||||
export MAROON="#eba0ac"
|
||||
export PEACH="#fab387"
|
||||
export YELLOW="#f9e2af"
|
||||
export GREEN="#a6e3a1"
|
||||
export TEAL="#94e2d5"
|
||||
export SKY="#89dceb"
|
||||
export SAPPHIRE="#74c7ec"
|
||||
export BLUE="#89b4fa"
|
||||
export LAVENDER="#b4befe"
|
||||
export TEXT="#cdd6f4"
|
||||
export SUBTEXT1="#bac2de"
|
||||
export SUBTEXT0="#a6adc8"
|
||||
export OVERLAY2="#9399b2"
|
||||
export OVERLAY1="#7f849c"
|
||||
export OVERLAY0="#6c7086"
|
||||
export SURFACE2="#585b70"
|
||||
export SURFACE1="#45475a"
|
||||
export SURFACE0="#313244"
|
||||
export BASE="#1e1e2e"
|
||||
export MANTLE="#181825"
|
||||
export CRUST="#11111b"
|
||||
|
||||
export FZF_DEFAULT_OPTS="--color=header:$MAROON:bold,footer:$MAROON:bold,pointer:$MAUVE,prompt:$MAUVE,fg+:$MAUVE,border:$LAVENDER,info:$LAVENDER,fg:$TEXT,hl:$TEXT:bold,hl+:$TEXT:bold,bg:$BASE,bg+:$SURFACE0,preview-label:$TEAL:bold"
|
||||
8
env/.local/scripts/clear-clipboard-history
vendored
8
env/.local/scripts/clear-clipboard-history
vendored
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
#wl-copy --clear >/dev/null 2>&1 && \
|
||||
if [ -n "$WAYLAND_DISPLAY" ]; then
|
||||
wl-copy --clear
|
||||
fi
|
||||
|
||||
rm ~/.local/share/clipse/clipboard_history.json >/dev/null 2>&1
|
||||
49
env/.local/scripts/hpa
vendored
Executable file
49
env/.local/scripts/hpa
vendored
Executable file
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
# A wrapper script to run swift-hpa in a docker container and
|
||||
# mount the correct volumes, etc.
|
||||
#
|
||||
# Make sure to run 'hpa-init' first on this machine to setup
|
||||
# dependencies, if you have not done so already.
|
||||
#
|
||||
# To attach to a shell inside the container run:
|
||||
# `hpa bash`
|
||||
#
|
||||
# To run ansible vault commands inside the container run:
|
||||
# `hpa ansible-vault ...`
|
||||
#
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
. "$SCRIPTS/utils/hpa/hpa.env"
|
||||
|
||||
############################## MAIN ##############################
|
||||
|
||||
# Don't pull images if they're prefixed with 'localhost'.
|
||||
if echo "$HPA_DOCKER_IMAGE" | grep -vq "localhost"; then
|
||||
|
||||
# Check if we should pull the image prior to running.
|
||||
last_pull="0"
|
||||
if [[ -f "$HPA_CONFIG_DIR/.lastpull" ]]; then
|
||||
last_pull=$(cat "$HPA_CONFIG_DIR/.lastpull")
|
||||
fi
|
||||
curr=$(date +%s)
|
||||
diff=$((curr - last_pull))
|
||||
|
||||
if [[ $HPA_AUTO_PULL == "1" ]] && [[ $diff -gt "$HPA_AUTO_PULL_INTERVAL" ]]; then
|
||||
. "$SCRIPTS/hpa-pull" "$HPA_AUTO_PULL_OPTS"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "ARGS: $@"
|
||||
|
||||
podman run --rm --interactive --tty \
|
||||
--volume "$HPA_CONFIG_DIR":/root/.config/hpa:ro \
|
||||
--volume "$HPA_DATA_DIR":/root/.local/share/hpa:ro \
|
||||
--volume "$HPA_CONSULTS_DIR":/consults \
|
||||
--volume "$PWD":/root/project \
|
||||
--secret "$HPA_VAULT_SECRET_KEY" \
|
||||
"$HPA_DOCKER_IMAGE:$HPA_DOCKER_TAG" "$@"
|
||||
11
env/.local/scripts/hpa-create
vendored
Executable file
11
env/.local/scripts/hpa-create
vendored
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
title="Creating project..."
|
||||
script="${SCRIPTS:-$HOME/.local/scripts}/utils/hpa/hpa-create"
|
||||
first_arg=${1:-""}
|
||||
if [[ $first_arg == "-h" ]] || [[ $first_arg == "--help" ]]; then
|
||||
. "$script" $*
|
||||
else
|
||||
# bash -c "$script $*" | tr -d '\r' | head -1
|
||||
gum spin --show-output --title "$title" -- bash -c "$script $*" | tr -d '\r' | head -1
|
||||
fi
|
||||
98
env/.local/scripts/hpa-init
vendored
Executable file
98
env/.local/scripts/hpa-init
vendored
Executable file
@@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
||||
|
||||
# Load environment / shared variables.
|
||||
. "$SCRIPTS/utils/hpa/hpa.env"
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Setup dependencies for running hpa script in docker. This only needs to be
|
||||
ran once on a new machine.
|
||||
|
||||
USAGE:
|
||||
$ $THIS <flags> <shell> <completion-file>
|
||||
|
||||
FLAGS:
|
||||
-h | --help: Show this help page.
|
||||
|
||||
DEFAULTS:
|
||||
shell: Default is 'zsh', accepts 'zsh' | 'bash' | 'fish'
|
||||
completion-file: Default is '~/.zsh/completions/_hpa'
|
||||
|
||||
ENVIRONMENT:
|
||||
CONSULTS_DIR: Set the directory where consults / projects are stored.
|
||||
(default: '~/work/consults')
|
||||
|
||||
HPA_DOCKER_TAG: Set the docker image tag to use for the hpa docker image
|
||||
(default: 'latest')
|
||||
|
||||
HPA_VAULT_SECRET_KEY: Set the key used for the ansible-vault secret.
|
||||
(default: 'vault-pass')
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
generate-completion() {
|
||||
local output_dir output type
|
||||
type=${1:-"zsh"}
|
||||
output=${2:-$HOME/.zsh/completions/_hpa}
|
||||
output_dir=$(dirname "$output")
|
||||
|
||||
log "Generating completion: type: '$type', to: $output"
|
||||
|
||||
[[ ! -d "$output_dir" ]] && mkdir -p "$output_dir"
|
||||
(
|
||||
podman run --rm -it "$HPA_DOCKER_IMAGE:$HPA_DOCKER_TAG" \
|
||||
--generate-completion-script "$type" |
|
||||
tr -d '\r'
|
||||
) >"$output"
|
||||
}
|
||||
|
||||
generate-secret() {
|
||||
log "Generating vault secret for key: '$HPA_VAULT_SECRET_KEY'"
|
||||
local secret
|
||||
secret="$(pass -c ansible/vault-pass)"
|
||||
printf "%s" "$secret" | podman secret create "$HPA_VAULT_SECRET_KEY" -
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
first_arg=${1:-""}
|
||||
if [[ $first_arg == "-h" ]] || [[ $first_arg == "--help" ]]; then
|
||||
usage && exit 0
|
||||
else
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
log "Starting init..."
|
||||
|
||||
generate-completion "$@"
|
||||
generate-secret
|
||||
|
||||
log "Generating directories, if they don't exist."
|
||||
mkdir -p "$HPA_CONSULTS_DIR" &>/dev/null
|
||||
mkdir "$HPA_DATA_DIR" &>/dev/null
|
||||
|
||||
log "Cloning required template and playbook, if they don't exist"
|
||||
[[ ! -d "$HPA_PLAYBOOK_DIR" ]] && git clone "$HPA_PLAYBOOK_URL" "$HPA_PLAYBOOK_DIR"
|
||||
[[ ! -d "$HPA_CONSULT_TEMPLATE_DIR" ]] && git clone "$HPA_CONSULT_TEMPLATE_URL" "$HPA_CONSULT_TEMPLATE_DIR"
|
||||
[[ ! -d "$HPA_AIRFLOW_TEMPLATE_DIR" ]] && git clone "$HPA_AIRFLOW_TEMPLATE_URL" "$HPA_AIRFLOW_TEMPLATE_DIR"
|
||||
fi
|
||||
112
env/.local/scripts/hpa-pull
vendored
Executable file
112
env/.local/scripts/hpa-pull
vendored
Executable file
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
||||
# Load environment / shared variables.
|
||||
. "$SCRIPTS/utils/hpa/hpa.env"
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Pulls / updates template, playbook, docker image, etc.
|
||||
|
||||
USAGE:
|
||||
$ $THIS <flags>
|
||||
|
||||
FLAGS:
|
||||
-a | --all: Pull everything (default).
|
||||
-d | --docker: Pull docker image.
|
||||
-p | --playbook: Pull ansible-hpa-playbook.
|
||||
-t | --template: Pull consult template.
|
||||
-h | --help: Show this help page.
|
||||
|
||||
If no flags are passed in then we will pull everything.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
pull-repo() {
|
||||
local dir=${1:-""}
|
||||
[[ -z "$dir" ]] &&
|
||||
log --error "Directory not supplied to pull git repo." &&
|
||||
exit 1
|
||||
|
||||
pushd "$dir" &>/dev/null || exit 1
|
||||
(
|
||||
git pull
|
||||
)
|
||||
popd &>/dev/null
|
||||
}
|
||||
|
||||
pull-docker() {
|
||||
log --echo "Pulling docker image: '$HPA_DOCKER_IMAGE:$HPA_DOCKER_TAG'"
|
||||
podman pull "$HPA_DOCKER_IMAGE:$HPA_DOCKER_TAG"
|
||||
}
|
||||
|
||||
pull-playbook() {
|
||||
log --echo "Pulling playbook: '$HPA_PLAYBOOK_DIR'"
|
||||
pull-repo "$HPA_PLAYBOOK_DIR"
|
||||
}
|
||||
|
||||
pull-template() {
|
||||
log --echo "Pulling template: '$HPA_CONSULT_TEMPLATE_DIR'"
|
||||
pull-repo "$HPA_CONSULT_TEMPLATE_DIR"
|
||||
|
||||
log --echo "Pulling airflow assessment template: '$HPA_AIRFLOW_TEMPLATE_DIR'"
|
||||
pull-repo "$HPA_AIRFLOW_TEMPLATE_DIR"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
all_flag="1"
|
||||
docker_flag="0"
|
||||
playbook_flag="0"
|
||||
template_flag="0"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "-a" ]] || [[ $1 == "--all" ]]; then
|
||||
all_flag="1"
|
||||
break
|
||||
elif [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
||||
usage && exit 0
|
||||
elif [[ $1 == "-d" ]] || [[ $1 == "--docker" ]]; then
|
||||
all_flag="0"
|
||||
docker_flag="1"
|
||||
elif [[ $1 == "-p" ]] || [[ $1 == "--playbook" ]]; then
|
||||
all_flag="0"
|
||||
playbook_flag="1"
|
||||
elif [[ $1 == "-t" ]] || [[ $1 == "--template" ]]; then
|
||||
all_flag="0"
|
||||
template_flag="1"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if [[ $all_flag == "1" ]]; then
|
||||
docker_flag="1"
|
||||
playbook_flag="1"
|
||||
template_flag="1"
|
||||
fi
|
||||
|
||||
[[ $docker_flag == "1" ]] && pull-docker
|
||||
[[ $playbook_flag == "1" ]] && pull-playbook
|
||||
[[ $template_flag == "1" ]] && pull-template
|
||||
date +%s >"$HPA_CONFIG_DIR/.lastpull"
|
||||
date +%s >"$HPA_AIRFLOW_CONFIG_DIR/.lastpull"
|
||||
21
env/.local/scripts/hypr/clear-clipboard-history
vendored
Executable file
21
env/.local/scripts/hypr/clear-clipboard-history
vendored
Executable file
@@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
|
||||
notify_flag="0"
|
||||
XDG_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "-n" ]] || [[ $1 == "--notify-complete" ]]; then
|
||||
notify_flag="1"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if [[ -n "$WAYLAND_DISPLAY" ]]; then
|
||||
wl-copy --clear
|
||||
fi
|
||||
|
||||
rm $XDG_DATA_HOME/clipse/clipboard_history.json >/dev/null 2>&1
|
||||
|
||||
if [[ $notify_flag == "1" ]] && [[ -n "$WAYLAND_DISPLAY" ]]; then
|
||||
notify-send --urgency=low --expire-time=3000 --app-name="Clipboard History" "✅ Cleared clipboard history"
|
||||
fi
|
||||
194
env/.local/scripts/hypr/launch
vendored
Executable file
194
env/.local/scripts/hypr/launch
vendored
Executable file
@@ -0,0 +1,194 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=$(basename "$THIS_FILE")
|
||||
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Launch or focus / close a window based on pattern contained within the window
|
||||
class name. (Default is to focus the window).
|
||||
|
||||
This is used in keybinds and by other scripts as a general entrypoint for managing applications.
|
||||
|
||||
USAGE:
|
||||
|
||||
$ $THIS [OPTIONS] PATTERN [LAUNCH_CMD...]
|
||||
|
||||
OPTIONS:
|
||||
|
||||
-f | --or-focus: Focus the window matching the pattern, if it exists.
|
||||
-c | --or-close: Close the window matching the pattern, if it exists.
|
||||
-o | --focus-active-only: Focus only if window is on active workspace, otherwise launch a new
|
||||
instance.
|
||||
-x | --close-active-only: Close only windows on active workspace matching the pattern.
|
||||
-s | --special <name>: Launch or toggle a special workspace.
|
||||
-n | --new: Launch a new instance of an application.
|
||||
-h | --help: Show this help page.
|
||||
|
||||
NOTES:
|
||||
|
||||
In general only one flag should be passed to determine the action mode.
|
||||
|
||||
Passing both any of the close or focus flags together will result in an error if a window is found matching
|
||||
the pattern, if no window is found then one will still be launched without any errors.
|
||||
|
||||
If the special option is passed then we will not attempt to close a window. If the script is
|
||||
invoked with the special option set, we check if there is a window matching the pattern, if there
|
||||
is and the currently active window is on the same workspace passed in to the special option, then
|
||||
we toggle the workspace closed. This allows the same keybind to be used to launch an application
|
||||
in a special workspace as well as toggle the workspace closed.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
action="focuswindow"
|
||||
close_flag="0"
|
||||
close_active_only_flag="0"
|
||||
focus_flag="0"
|
||||
focus_active_only_flag="0"
|
||||
new_instance_flag="0"
|
||||
launch_cmd=()
|
||||
pattern=""
|
||||
special_flag="0"
|
||||
special=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "-c" ]] || [[ $1 == "--or-close" ]]; then
|
||||
close_flag="1"
|
||||
action="closewindow"
|
||||
elif [[ $1 == "-f" ]] || [[ $1 == "--or-focus" ]]; then
|
||||
focus_flag="1"
|
||||
action="focuswindow"
|
||||
elif [[ $1 == "-s" ]] || [[ $1 == "--special" ]]; then
|
||||
shift
|
||||
special_flag="1"
|
||||
special=$1
|
||||
elif [[ $1 == "-o" ]] || [[ $1 == "--focus-active-only" ]]; then
|
||||
focus_flag="1"
|
||||
focus_active_only_flag="1"
|
||||
action="focuswindow"
|
||||
elif [[ $1 == "-x" ]] || [[ $1 == "--close-active-only" ]]; then
|
||||
close_flag="1"
|
||||
close_active_only_flag="1"
|
||||
action="closewindow"
|
||||
elif [[ $1 == "-n" ]] || [[ $1 == "--new" ]]; then
|
||||
new_instance_flag="1"
|
||||
elif [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
||||
usage && exit 0
|
||||
elif [[ -z $pattern ]]; then
|
||||
pattern=$1
|
||||
else
|
||||
launch_cmd+=("$1")
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
# Redirects all output of hyprctl dispatch commands.
|
||||
hypr_dispatch() {
|
||||
hyprctl dispatch "$@" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
toggle_special() {
|
||||
if [[ -z $special ]]; then
|
||||
log --error " No name supplied for special workspace."
|
||||
exit 1
|
||||
fi
|
||||
hypr_dispatch togglespecialworkspace $special
|
||||
}
|
||||
|
||||
launch_application() {
|
||||
log "Launching..."
|
||||
log "'${launch_cmd[*]}'"
|
||||
eval exec "${launch_cmd[*]}"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
if [[ -z $pattern ]]; then
|
||||
log --error "Must supply a pattern to match the window class."
|
||||
usage && exit 1
|
||||
elif [[ -z $launch_cmd ]]; then
|
||||
log --error "Must supply a launch command to match the window class."
|
||||
usage && exit 1
|
||||
fi
|
||||
|
||||
log "Pattern: $pattern"
|
||||
addresses=$(hyprctl clients -j | jq ".[] | select(.class | contains(\"$pattern\")) | .address")
|
||||
|
||||
# If no addresses, then launch the application.
|
||||
if [[ -z $addresses ]] || [[ $new_instance_flag == "1" ]]; then
|
||||
log "No addresses found or new instance flag set."
|
||||
# Toggle special workspace if applicable.
|
||||
if [[ $special_flag == "1" ]]; then
|
||||
log "Toggling special workspace."
|
||||
toggle_special
|
||||
fi
|
||||
launch_application && exit 0
|
||||
fi
|
||||
|
||||
active_window_workspace=$(hyprctl activewindow -j | jq -r '.workspace.name')
|
||||
|
||||
# Check if we have special flag and active window is on the special workspace. If so
|
||||
# we just toggle the special workspace. This keeps "special" apps alive, but closes and / opens
|
||||
# the special workspace when invoked.
|
||||
if [[ $special_flag == "1" ]] && [[ $active_window_workspace =~ $special ]]; then
|
||||
toggle_special && exit 0
|
||||
fi
|
||||
|
||||
# Check if both close and focus flags were passed, so we don't do the
|
||||
# wrong thing.
|
||||
if [[ $focus_flag == "1" ]] && [[ $close_flag == "1" ]]; then
|
||||
log --error "Both focus and close flag were passed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for address in ${addresses[@]}; do
|
||||
# Clean the address of quotes.
|
||||
address=${address//\"/}
|
||||
log "Handling address: '$address'"
|
||||
|
||||
if [[ $focus_active_only_flag == "1" ]] || [[ $close_active_only_flag == "1" ]]; then
|
||||
# get the workspace name for the address.
|
||||
workspace=$(hyprctl clients -j | jq -r ".[] | select(.address == \"$address\") | .workspace.name")
|
||||
|
||||
# check that the window is on the active workspace.
|
||||
if [[ $active_window_workspace == $workspace ]]; then
|
||||
log "Performing action: '$action', on window: '$address'"
|
||||
hypr_dispatch $action "address:$address"
|
||||
# early out if focusing a window.
|
||||
[[ $focus_active_only_flag ]] && exit 0
|
||||
else
|
||||
# the window is not on the active workspace, so skip it.
|
||||
log "Skipping window: $address"
|
||||
fi
|
||||
else
|
||||
# We don't have the focus_active_only_flag or close_active_only_flag set, so we perform
|
||||
# the action on the window.
|
||||
log "Performing action: '$action', on window: '$address'"
|
||||
hypr_dispatch $action "address:$address"
|
||||
fi
|
||||
done
|
||||
|
||||
# If we made it here and focus_active_only_flag was set, then we did not
|
||||
# find a window on the active workspace, so we launch a new window.
|
||||
if [[ $focus_active_only_flag == "1" ]]; then
|
||||
launch_application
|
||||
fi
|
||||
193
env/.local/scripts/hypr/logging
vendored
Executable file
193
env/.local/scripts/hypr/logging
vendored
Executable file
@@ -0,0 +1,193 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Basic logging utility functions that can be used by scripts to log
|
||||
# to files. This helps keep console clean for TUI's. Will log
|
||||
# messages to all registered files, which allows each script to
|
||||
# declare their own logging file, but also print logs into parent
|
||||
# processes files, for ease of discovery.
|
||||
#
|
||||
# Supports warning and error flags.
|
||||
#
|
||||
# Errors and warnings get logged to the file and to the console.
|
||||
#
|
||||
#
|
||||
# EXAMPLE SETUP:
|
||||
#
|
||||
# source $SCRIPTS/hypr/logging
|
||||
# THIS=$(basename ${BASH_SOURCE[0]})
|
||||
#
|
||||
# # Setup logging file and label.
|
||||
# setup-logging "/tmp/$THIS.log" $THIS
|
||||
#
|
||||
# function log() {
|
||||
# logging log --source ${BASH_SOURCE[0]} "$@"
|
||||
# }
|
||||
#
|
||||
# log "My log message."
|
||||
# log --warning "My warning message."
|
||||
# log --error "My error message."
|
||||
#
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
LOG_DIR=${LOG_DIR:-/tmp/logs}
|
||||
LOG_INVOCATION_ID=${LOG_INVOCATION_ID:-""}
|
||||
LOG_LABEL=${LOG_LABEL:-""}
|
||||
# Run in dry run mode, which just prints to the console and does
|
||||
# not log to the files.
|
||||
LOG_ENABLE_DRY_RUN=${LOG_ENABLE_DRY_RUN:-"0"}
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
|
||||
warn_flag="0"
|
||||
error_flag="0"
|
||||
|
||||
__msg() {
|
||||
if [[ -z "$*" ]]; then
|
||||
echo -e "\e[31m[ERROR]:\e[0m No logs were supplied."
|
||||
exit 1
|
||||
fi
|
||||
if [[ $warn_flag == "1" ]]; then
|
||||
echo -e "\e[33m[WARN]:\e[0m $*"
|
||||
elif [[ $error_flag == "1" ]]; then
|
||||
echo -e "\e[31m[ERROR]:\e[0m $*"
|
||||
else
|
||||
echo "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
__ensure_setup() {
|
||||
if [[ -z $LOG_FILE ]] || [[ -z $LOG_INVOCATION_ID ]] || [[ -z $LOG_LABEL ]] || [[ -z $LOG_DIR ]]; then
|
||||
echo -e "\e[31m[ERROR]:\e[0m Logging is not properly setup."
|
||||
echo "Perhaps you didn't call 'setup-logging' first."
|
||||
print_logger_env && exit 1
|
||||
fi
|
||||
if [[ ! -d $LOG_DIR ]]; then
|
||||
mkdir -p "$LOG_DIR"
|
||||
fi
|
||||
}
|
||||
|
||||
logging() {
|
||||
__ensure_setup
|
||||
|
||||
# Reset flags
|
||||
log_flag="0"
|
||||
echo_flag="0"
|
||||
warn_flag="0"
|
||||
error_flag="0"
|
||||
source_file=""
|
||||
args=()
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "-w" ]] || [[ $1 == "--warn" ]] || [[ $1 == "--warning" ]]; then
|
||||
warn_flag="1"
|
||||
elif [[ $1 == "-e" ]] || [[ $1 =~ ^--error ]]; then
|
||||
error_flag="1"
|
||||
elif [[ $1 =~ ^--echo ]]; then
|
||||
echo_flag="1"
|
||||
elif [[ $1 == "-s" ]] || [[ $1 =~ ^--source ]]; then
|
||||
shift
|
||||
source_file="$1"
|
||||
elif [[ $1 == "log" ]]; then
|
||||
log_flag="1"
|
||||
else
|
||||
args+=("$1")
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if [[ -z $source_file ]]; then
|
||||
echo -e "\e[31m[ERROR]:\e[0m Must supply the source file the logs originate from."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${args[*]}" ]]; then
|
||||
echo -e "\e[31m[ERROR]:\e[0m No log message supplied."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
msg="$(__msg "${args[@]}")"
|
||||
|
||||
if [[ $LOG_ENABLE_DRY_RUN == "0" ]] && [[ $log_flag == "1" ]]; then
|
||||
# Loop over log files logging message to each file.
|
||||
for i in "${!LOG_FILE[@]}"; do
|
||||
local file=${LOG_DIR}/${LOG_FILE[i]}
|
||||
local id=$LOG_INVOCATION_ID
|
||||
local label=${LOG_LABEL[i]:-"$LOG_LABEL"}
|
||||
local time
|
||||
time=$(date '+%D %H:%M:%S')
|
||||
|
||||
if [[ -z $file ]] || [[ -z $id ]] || [[ -z $label ]]; then
|
||||
echo "Logging not properly setup."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local prefix="[id: $id][time: $time][source: \e[32m$source_file\e[0m][\e[34m$label\e[0m] :"
|
||||
local m="$prefix $msg"
|
||||
echo -e "$m" >>"$file"
|
||||
done
|
||||
|
||||
# Also log errors and warning messages to the console.
|
||||
if [[ $error_flag == "1" ]] || [[ $warn_flag == "1" ]]; then
|
||||
echo -e "[id: $id]$msg"
|
||||
elif [[ $warn_flag == "1" ]]; then
|
||||
echo -e "[id: $id]$msg"
|
||||
elif [[ $echo_flag == "1" ]]; then
|
||||
echo -e "$msg"
|
||||
fi
|
||||
else
|
||||
# Dry run mode, so just log to the console
|
||||
echo -e "\e[34m[DRY RUN]:\e[0m $msg"
|
||||
fi
|
||||
}
|
||||
|
||||
setup-logging() {
|
||||
label=""
|
||||
file=""
|
||||
|
||||
if [[ "${#@}" == "1" ]]; then
|
||||
file="/tmp/$1.log"
|
||||
label="$1"
|
||||
else
|
||||
file="$1"
|
||||
label="$2"
|
||||
fi
|
||||
|
||||
if [[ -z "$file" ]]; then
|
||||
echo -e "\e[31m[ERROR]:\e[0m Must supply a log file."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$label" ]]; then
|
||||
echo -e "\e[31m[ERROR]:\e[0m Must supply a logger label."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Only add files that aren't already in the LOG_FILE.
|
||||
if [[ ! $LOG_FILE =~ $file ]]; then
|
||||
LOG_FILE+=("$file")
|
||||
fi
|
||||
|
||||
LOG_INVOCATION_ID=${LOG_INVOCATION_ID:-$RANDOM}
|
||||
|
||||
if [[ -n $LOG_LABEL ]] && [[ ! $LOG_LABEL =~ $label ]]; then
|
||||
LOG_LABEL+=("${LOG_LABEL[@]}=>$label")
|
||||
elif [[ ! ${LOG_LABEL[*]} =~ $label ]]; then
|
||||
LOG_LABEL+=("$label")
|
||||
fi
|
||||
|
||||
export LOG_DIR
|
||||
export LOG_FILE
|
||||
export LOG_LABEL
|
||||
export LOG_INVOCATION_ID
|
||||
}
|
||||
|
||||
print_logger_env() {
|
||||
echo "LOG_FILE: ${LOG_FILE[*]}"
|
||||
echo "LOG_INVOCATION_ID: $LOG_INVOCATION_ID"
|
||||
echo "LOG_LABEL: ${LOG_LABEL[*]}"
|
||||
}
|
||||
|
||||
export -f setup-logging
|
||||
export -f logging
|
||||
export -f print_logger_env
|
||||
111
env/.local/scripts/hypr/monitorctl
vendored
Executable file
111
env/.local/scripts/hypr/monitorctl
vendored
Executable file
@@ -0,0 +1,111 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
||||
|
||||
window_class="com.ghostty.$THIS"
|
||||
window_padding_x="10"
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Utility for monitor controls.
|
||||
|
||||
USAGE:
|
||||
|
||||
$ $THIS <command> <flags>
|
||||
|
||||
FLAGS:
|
||||
-h | --help: Show this help page.
|
||||
|
||||
COMMANDS:
|
||||
launch: Launch in a new terminal window.
|
||||
picker: Shows information about the monitor(s).
|
||||
toggle: Enable/disable a connected monitor.
|
||||
|
||||
|
||||
Run "$THIS <command> --help" for more information about a command.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
launch_usage() {
|
||||
cat <<EOF
|
||||
|
||||
Launches a new terminal window that runs the given '$THIS' command. If no command
|
||||
is supplied, then it will launch the picker command.
|
||||
|
||||
USAGE:
|
||||
|
||||
$ $THIS launch <command> <flags>
|
||||
|
||||
FLAGS:
|
||||
-h | --help: Show this help page.
|
||||
|
||||
Run "$THIS --help" to show available commands that can ba launched in the new window.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
launch() {
|
||||
|
||||
if [[ $@ =~ ^-h ]] || [[ $@ =~ ^--help ]]; then
|
||||
launch_usage && exit 0
|
||||
fi
|
||||
|
||||
log "Launching terminal..."
|
||||
|
||||
ghostty --class=$window_class --window-padding-x=$window_padding_x \
|
||||
--keybind="ctrl+c=quit" \
|
||||
-e $THIS_FILE "$@"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
log "Starting args: '$@'"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "launch" ]]; then
|
||||
shift
|
||||
if [[ -z "$@" ]]; then
|
||||
launch picker && exit $?
|
||||
else
|
||||
launch "$@" && exit $?
|
||||
fi
|
||||
elif [[ $1 == "picker" ]]; then
|
||||
shift
|
||||
log "Showing picker..."
|
||||
THIS="$THIS picker" "$SCRIPTS/hypr/utils/monitors/monitor-picker" "$@"
|
||||
exit $?
|
||||
elif [[ $1 == "toggle" ]]; then
|
||||
shift
|
||||
THIS="$THIS picker" "$SCRIPTS/hypr/utils/monitors/monitor-toggle" "$@"
|
||||
exit $?
|
||||
elif [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
||||
usage && exit 0
|
||||
else
|
||||
log --error "Unhandle command: $1" && exit 1
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
# If we've reached here then no commands were passed / handled.
|
||||
usage && exit 1
|
||||
@@ -1,10 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Uninstalls '.desktop' applications, including their icon.
|
||||
#
|
||||
# This is primarily used for uninstalling web app's, if a
|
||||
# desktop app was installed via the package manager, then the
|
||||
# package manager should be used to uninstall the application.
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
THIS=$(basename "$THIS_FILE")
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
@@ -15,11 +12,12 @@ package manager, then it should be used to uninstall the application.
|
||||
|
||||
Usage:
|
||||
|
||||
uninstall-desktop-app [OPTIONS] [FILE...]
|
||||
$ $THIS [OPTIONS] [FILE...]
|
||||
|
||||
OPTIONS:
|
||||
--dry-run: Perform but don't actually remove anything.
|
||||
-h | --help: Show the help page.
|
||||
OPTIONS:
|
||||
|
||||
--dry-run: Perform but don't actually remove anything.
|
||||
-h | --help: Show the help page.
|
||||
|
||||
If no files are supplied, then an interactive session will be
|
||||
started that allows you to choose the applications to remove.
|
||||
@@ -32,27 +30,31 @@ interactive_mode="0"
|
||||
dry_run="0"
|
||||
help_flag="0"
|
||||
XDG_DATA_HOME=${XDG_DATA_HOME}
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 =~ ^--dry ]]; then
|
||||
dry_run="1"
|
||||
elif [[ $1 =~ ^-h ]] || [[ $1 =~ ^--h ]]; then
|
||||
help_flag="1"
|
||||
usage && exit 0
|
||||
else
|
||||
files+=("$1")
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
# Early out for help option.
|
||||
if [[ $help_flag == "1" ]]; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
############################## MAIN ##############################
|
||||
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$THIS.log" "$THIS"
|
||||
|
||||
if [[ -z $XDG_DATA_HOME ]]; then
|
||||
echo "xdg data home is not set"
|
||||
echo "using: ~/.local/share"
|
||||
log "xdg data home is not set"
|
||||
log "using: ~/.local/share"
|
||||
XDG_DATA_HOME=$HOME/.local/share
|
||||
fi
|
||||
|
||||
@@ -65,16 +67,6 @@ if [[ ${#files} == 0 ]]; then
|
||||
)
|
||||
fi
|
||||
|
||||
log() {
|
||||
if [[ $dry_run == "1" ]]; then
|
||||
echo "[DRY RUN]: $1"
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
############################## MAIN ##############################
|
||||
|
||||
for f in ${files[@]}; do
|
||||
|
||||
icon=""
|
||||
138
env/.local/scripts/hypr/utils-launcher
vendored
Executable file
138
env/.local/scripts/hypr/utils-launcher
vendored
Executable file
@@ -0,0 +1,138 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
FZF_DEFAULT_OPTS=${FZF_DEFAULT_OPTS:-""}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename $THIS_FILE)
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-$LOG_LABEL.log}
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
XDG_CONFIG_HOME=${XDG_CONFIG_HOME}
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
A fuzzy finder to launch utility applications / scripts from a single menu.
|
||||
|
||||
USAGE:
|
||||
|
||||
$ $THIS [OPTIONS]
|
||||
|
||||
OPTIONS:
|
||||
|
||||
-c | --config <file>: Set the location of the configuration file (default: XDG_CONFIG_HOME/utils-launcher/config.json)
|
||||
-l | --launch: Launches in a new terminal window.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
window_class="com.ghostty.$THIS"
|
||||
window_padding_x="2"
|
||||
|
||||
config_file=""
|
||||
launch_flag="0"
|
||||
|
||||
rows=()
|
||||
invocation_id=${RANDOM}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "-c" ]] || [[ $1 == "--config" ]]; then
|
||||
shift
|
||||
config_file="$1"
|
||||
elif [[ $1 == "-l" ]] || [[ $1 == "--launch" ]]; then
|
||||
launch_flag="1"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
launch() {
|
||||
ghostty --class=$window_class --window-padding-x=$window_padding_x \
|
||||
--keybind="ctrl+c=quit" \
|
||||
-e ${BASH_SOURCE[0]} --config $config_file
|
||||
}
|
||||
|
||||
footer() {
|
||||
cat <<'EOF'
|
||||
__ ______________ _____
|
||||
/ / / /_ __/ _/ / / ___/
|
||||
/ / / / / / / // / \__ \
|
||||
/ /_/ / / / _/ // /______/ /
|
||||
\____/ /_/ /___/_____/____/
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
generate_rows() {
|
||||
readarray -t names <<<"$(echo "$1" | jq -r '.[] | .name')"
|
||||
readarray -t execs <<<"$(echo "$1" | jq -r '.[] | .exec')"
|
||||
|
||||
for i in "${!names[@]}"; do
|
||||
rows+=("${execs[i]}|${names[i]}")
|
||||
done
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
if [[ -z $XDG_CONFIG_HOME ]]; then
|
||||
log "XDG_CONFIG_HOME not set"
|
||||
log "using ~/.config"
|
||||
XDG_CONFIG_HOME=$HOME/.config
|
||||
fi
|
||||
|
||||
if [[ -z $config_file ]]; then
|
||||
log "No config file set."
|
||||
log "Using ~/.config/utils-launcher/config.json"
|
||||
config_file="$XDG_CONFIG_HOME/utils-launcher/config.json"
|
||||
fi
|
||||
|
||||
if [[ $launch_flag == "1" ]]; then
|
||||
launch && exit 0
|
||||
fi
|
||||
|
||||
if [[ ! -f $config_file ]]; then
|
||||
log "[ERROR]: no config file set" && exit 1
|
||||
fi
|
||||
|
||||
file_data=$(cat $config_file)
|
||||
|
||||
# Setup colors before calling fzf.
|
||||
[[ -z $FZF_DEFAULT_OPTS ]] &&
|
||||
[[ -f $SCRIPTS/catppuccin-colors ]] &&
|
||||
source $SCRIPTS/catppuccin-colors
|
||||
|
||||
generate_rows "$file_data"
|
||||
sel=$(
|
||||
printf "%s\n" "${rows[@]}" |
|
||||
fzf --style=full --footer="$(footer)" --with-nth=2 --delimiter='|' \
|
||||
--preview-label='[ Command ]' \
|
||||
--preview="$SCRIPTS/hypr/utils/fzf/preview-stats utils {2} $config_file" \
|
||||
--preview-window='down,30%'
|
||||
)
|
||||
|
||||
log "Selection: $sel"
|
||||
|
||||
if [[ -n "$sel" ]]; then
|
||||
# Parse the exec command for the selection.
|
||||
exec_cmd=${sel%%|*}
|
||||
|
||||
log "Exec: '$exec_cmd'"
|
||||
if [[ -z $exec_cmd ]]; then
|
||||
log "[ERROR]: Command is empty." && exit 1
|
||||
fi
|
||||
eval exec uwsm app -- "$exec_cmd"
|
||||
else
|
||||
log "No selection."
|
||||
fi
|
||||
95
env/.local/scripts/hypr/utils/fzf/preview-stats
vendored
Executable file
95
env/.local/scripts/hypr/utils/fzf/preview-stats
vendored
Executable file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename $THIS_FILE)
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-$LOG_LABEL.log}
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Utility for getting fzf preview data.
|
||||
|
||||
USAGE:
|
||||
|
||||
$ $THIS [COMMAND] [ARG...]
|
||||
|
||||
COMMAND:
|
||||
|
||||
monitor <id> <keys>: Get monitor data, optionally providing keys to return.
|
||||
window <address> <keys>: Get window data, optionally providing keys to return.
|
||||
workspace <id> <keys>: Get workspace data, optionally providing keys to return.
|
||||
utlis <name> <config>: Get utils-launcher data.
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
Here's an example of getting window data, but only returning "title", "workspace", and "address".
|
||||
|
||||
$ $THIS window "0xaaaaea92a7e0" "{title, workspace, address}"
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
call_jq() {
|
||||
hypr_path=$1
|
||||
select_str=$2
|
||||
optional_keys=$3
|
||||
|
||||
if [[ -n $optional_keys ]]; then
|
||||
hyprctl $hypr_path -j | jq -C ".[] | $select_str | $optional_keys"
|
||||
else
|
||||
hyprctl $hypr_path -j | jq -C ".[] | $select_str"
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
# Early out check for help flag
|
||||
if [[ $@ =~ -h ]] || [[ $@ =~ --help ]]; then
|
||||
usage && exit 0
|
||||
# Check for expected argument count or error.
|
||||
elif [[ ! $# -ge 2 ]] || [[ $# -gt 3 ]]; then
|
||||
log --error "Unexpected argument count, expected 2 or 3 but got '$#'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mode=${1:-""}
|
||||
arg=${2:-""}
|
||||
arg2=${3:-""} # either optional keys or utils config.
|
||||
|
||||
if [[ $mode == "monitor" ]]; then
|
||||
call_jq monitors "select(.id == $arg)" "$arg2"
|
||||
elif [[ $mode == "window" ]]; then
|
||||
call_jq clients "select(.address == \"$arg\")" "$arg2"
|
||||
elif [[ $mode == "workspace" ]]; then
|
||||
call_jq workspaces "select(.id == $arg)" "$arg2"
|
||||
elif [[ $mode == "utils" ]]; then
|
||||
config="${arg2//\'/}"
|
||||
if [[ ! -f $config ]]; then
|
||||
log --error "No utility-launcher config found: $config"
|
||||
exit 1
|
||||
fi
|
||||
desc=$(jq -C ".[] | select(.name == \"$arg\") | .description" $config)
|
||||
exec=$(jq -C ".[] | select(.name == \"$arg\") | .exec" $config)
|
||||
echo -e "\n${desc[@]}\n\n" | fmt -w ${FZF_PREVIEW_COLUMNS:-80}
|
||||
echo -e "\e[31mEXEC:\e[0m $exec\n"
|
||||
else
|
||||
log --error "Unexpected mode: $mode"
|
||||
usage && exit 1
|
||||
fi
|
||||
61
env/.local/scripts/hypr/utils/logs/logs-picker
vendored
Executable file
61
env/.local/scripts/hypr/utils/logs/logs-picker
vendored
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_DIR=${LOG_DIR:=""}
|
||||
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
||||
FZF_DEFAULT_OPTS=${FZF_DEFAULT_OPTS:-""}
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
footer() {
|
||||
cat <<'EOF'
|
||||
__
|
||||
/ / ___ ___ ____
|
||||
/ /__/ _ \/ _ `(_-<
|
||||
/____/\___/\_, /___/
|
||||
/___/
|
||||
EOF
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
if [[ -z $LOG_DIR ]]; then
|
||||
echo "Log directory not setup properly!" && exit 1
|
||||
fi
|
||||
|
||||
# Setup colors before calling fzf.
|
||||
[[ -z $FZF_DEFAULT_OPTS ]] &&
|
||||
[[ -f $SCRIPTS/catppuccin-colors ]] &&
|
||||
source $SCRIPTS/catppuccin-colors
|
||||
|
||||
sel=$(
|
||||
/bin/ls $LOG_DIR/*.log |
|
||||
sed 's#.*/##; s/\..*$//' | # cleans to only show file name, excluding the path and '.log'
|
||||
fzf --style=full \
|
||||
--footer="$(footer)" \
|
||||
--preview-label='[ Logs ]' \
|
||||
--preview='echo ""; bat $LOG_DIR/{}.log' \
|
||||
--preview-window="down"
|
||||
)
|
||||
|
||||
if [[ -z $sel ]]; then
|
||||
log --error "No selection" && exit 1
|
||||
fi
|
||||
|
||||
bat $sel.log
|
||||
108
env/.local/scripts/hypr/utils/monitors/monitor-picker
vendored
Executable file
108
env/.local/scripts/hypr/utils/monitors/monitor-picker
vendored
Executable file
@@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
||||
FZF_DEFAULT_OPTS=${FZF_DEFAULT_OPTS:-""}
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Displays a monitor picker and stats preview. This script will accept any fzf options that you'd
|
||||
like to pass. The id of the monitor is returned from this script upon selection.
|
||||
|
||||
USAGE:
|
||||
|
||||
$ $THIS [flags] [FZF_OPTIONS...]
|
||||
|
||||
FLAGS:
|
||||
--no-default-footer: Disable the 'Monitors' footer (supplying your own footer disables default as well).
|
||||
--no-preview: Disables the monitor stats preview window.
|
||||
-h | --help: Show this help page.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
uses_supplied_footer="0"
|
||||
no_preview_flag="0"
|
||||
|
||||
fzf_opts=("--style=full" "--delimiter=|" "--with-nth=2" "--preview-label=[ Monitor Stats ]")
|
||||
rows=()
|
||||
monitor_data=$(hyprctl monitors -j | jq 'sort_by(.id)')
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 =~ ^--footer ]]; then
|
||||
uses_supplied_footer="1"
|
||||
fzf_opts+=("$1")
|
||||
elif [[ $1 == "--no-preview" ]]; then
|
||||
no_preview_flag="1"
|
||||
elif [[ $1 == "--no-default-footer" ]]; then
|
||||
uses_supplied_footer="1"
|
||||
elif [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
||||
usage && exit 0
|
||||
else
|
||||
fzf_opts+=("$1")
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
footer() {
|
||||
cat <<'EOF'
|
||||
__ ___ _ __
|
||||
/ |/ /__ ___ (_) /____ _______
|
||||
/ /|_/ / _ \/ _ \/ / __/ _ \/ __(_-<
|
||||
/_/ /_/\___/_//_/_/\__/\___/_/ /___/
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
generate_rows() {
|
||||
readarray -t ids <<<"$(echo "$monitor_data" | jq -r '.[] | .id')"
|
||||
readarray -t names <<<"$(echo "$monitor_data" | jq -r '.[] | .name')"
|
||||
|
||||
# Zip into rows.
|
||||
for i in "${!ids[@]}"; do
|
||||
rows+=("${ids[i]}|${names[i]}")
|
||||
done
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
[[ -z ${FZF_DEFAULT_OPTS} ]] &&
|
||||
[[ -f $SCRIPTS/catppuccin-colors ]] &&
|
||||
source $SCRIPTS/catppuccin-colors
|
||||
|
||||
if [[ $uses_supplied_footer == "0" ]]; then
|
||||
fzf_opts+=("--footer=$(footer)")
|
||||
fi
|
||||
|
||||
generate_rows
|
||||
sel=""
|
||||
|
||||
# For some reason can't get the preview to work when setting in the fzf_opts array.
|
||||
if [[ $no_preview_flag == "0" ]]; then
|
||||
sel=$(printf '%s\n' "${rows[@]}" | fzf "${fzf_opts[@]}" --preview="$SCRIPTS/hypr/utils/fzf/preview-stats monitor {1}")
|
||||
else
|
||||
sel=$(printf '%s\n' "${rows[@]}" | fzf "${fzf_opts[@]}")
|
||||
fi
|
||||
|
||||
# revove everything but the id portion.
|
||||
sel=${sel%%|*}
|
||||
echo "$sel"
|
||||
76
env/.local/scripts/hypr/utils/monitors/monitor-toggle
vendored
Executable file
76
env/.local/scripts/hypr/utils/monitors/monitor-toggle
vendored
Executable file
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Toggles the state of the internal laptop monitor, which is useful
|
||||
# when I'm connected to an external monitor / docks.
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
set -e
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Toggles the state (enable/disable) of a monitor.
|
||||
|
||||
USAGE:
|
||||
|
||||
$ $THIS <flags> <id>
|
||||
|
||||
FLAGS:
|
||||
-i | --internal: Toggle the internal monitor.
|
||||
-h | --help: Show this help page.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
toggle() {
|
||||
|
||||
local monitor="${1:-""}"
|
||||
|
||||
if [[ -z $monitor ]]; then
|
||||
log --error "No monitor supplied." && exit 1
|
||||
fi
|
||||
|
||||
if hyprctl monitors | grep -q "$monitor"; then
|
||||
hyprctl keyword monitor "$monitor,disable" 1>/dev/null
|
||||
else
|
||||
hyprctl keyword monitor "$monitor,enable" 1>/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
monitor=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
||||
usage && exit 0
|
||||
elif [[ $1 == "-i" ]] || [[ $1 == "--internal" ]]; then
|
||||
monitor="eDP-1"
|
||||
else
|
||||
log --error "Unhandled option: $1" && exit 1
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if [[ -z $monitor ]]; then
|
||||
read -p "Monitor id: " monitor
|
||||
fi
|
||||
|
||||
toggle $monitor
|
||||
304
env/.local/scripts/hypr/utils/webapp/install
vendored
Executable file
304
env/.local/scripts/hypr/utils/webapp/install
vendored
Executable file
@@ -0,0 +1,304 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Adapted from https://github.com/basecamp/omarchy/tree/master?tab=readme-ov-file
|
||||
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
THIS=${THIS:-$(basename "$THIS_FILE")}
|
||||
LOG_FILE=${LOG_FILE:-"$THIS.log"}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
|
||||
function usage() {
|
||||
cat <<EOF
|
||||
Generates a '.desktop' file for a web application, so that it can act as a stand alone application and
|
||||
be launched from an application launcher.
|
||||
|
||||
USAGE: $THIS [OPTIONS]
|
||||
|
||||
OPTIONS:
|
||||
-n | --name <name>: The name of the application.
|
||||
|
||||
-u | --url <url>: The url used to launch the application.
|
||||
|
||||
-i | --icon <icon>: The icon for the application.
|
||||
|
||||
-e | --exec <cmd>: Custom execution command (optional).
|
||||
|
||||
-m | --mime-types <types>: MIME-types for the application (optional).
|
||||
|
||||
-f | --file <file>: Install from a spec in a json file.
|
||||
|
||||
-l | --launch: Launches in a new terminal window in interactive mode.
|
||||
|
||||
--no-interactive: Don't proceed to interactive mode. If required properties aren't set,
|
||||
then error. This is useful if using '--file' and there are parsing errors
|
||||
or missing properties.
|
||||
|
||||
--dry-run: Run in dry-run mode, which doesn't generate files or download icons.
|
||||
|
||||
-h | --help: Show usage information.
|
||||
|
||||
EXAMPLES:
|
||||
|
||||
If no options or arguments are supplied, then it will start an interactive session that prompts for the
|
||||
values.
|
||||
|
||||
$ $THIS
|
||||
|
||||
Calling the app with named arguments:
|
||||
|
||||
$ $THIS \\
|
||||
--name "My Awesome App" \\
|
||||
--url "https://awesome.com" \\
|
||||
--icon "https://awesome.com/assets/icon.png"
|
||||
|
||||
Using a json file as input:
|
||||
|
||||
$ $THIS --file myapp.json
|
||||
|
||||
NOTES:
|
||||
|
||||
The icon option can either be a url where we will download a png from or a local file. Local files
|
||||
can either be the full path to the file or a file name of an icon located in '~/.local/share/applications/icons/'.
|
||||
|
||||
Interactive sessions do not give the option to use a custom execution command or supply the
|
||||
MIME types, which are less frequently used options.
|
||||
|
||||
If using a json spec file, all keys are the same as their option name, except for mime-types use 'mime_types' as the
|
||||
key in the json object. Although the 'exec' and 'mime_types' are not required in the spec file. A common json spec
|
||||
file example would look like:
|
||||
|
||||
{
|
||||
"name": "My Awesome App",
|
||||
"url": "https://awesome.com",
|
||||
"icon: "https://awesome.com/assets/icon.png"
|
||||
}
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
window_class="com.ghostty.install-webapp"
|
||||
window_padding_x="2"
|
||||
|
||||
app_name=""
|
||||
app_url=""
|
||||
exec_cmd=""
|
||||
dry_run="0"
|
||||
file_mode_flag="0"
|
||||
icon_ref=""
|
||||
json_file=""
|
||||
mime_types=""
|
||||
launch_flag="0"
|
||||
interactive_flag="0" # This is an internal flag, to not log some things when launch is used.
|
||||
interactive_mode=false
|
||||
no_interactive_flag="0"
|
||||
SCRIPTS="${SCRIPTS:-$HOME/.local/scripts}"
|
||||
XDG_DATA_HOME=${XDG_DATA_HOME}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
||||
usage && exit 0
|
||||
elif [[ $1 == "-n" ]] || [[ $1 == "--name" ]]; then
|
||||
shift
|
||||
app_name=$1
|
||||
elif [[ $1 == "-u" ]] || [[ $1 == "--url" ]]; then
|
||||
shift
|
||||
app_url=$1
|
||||
elif [[ $1 == "-i" ]] || [[ $1 == "--icon" ]]; then
|
||||
shift
|
||||
icon_ref=$1
|
||||
elif [[ $1 == "-e" ]] || [[ $1 == "--exec" ]]; then
|
||||
shift
|
||||
exec_cmd=$1
|
||||
elif [[ $1 == "-m" ]] || [[ $1 == "--mime-types" ]]; then
|
||||
shift
|
||||
mime_types=$1
|
||||
elif [[ $1 == "-f" ]] || [[ $1 == "--file" ]]; then
|
||||
file_mode_flag="1"
|
||||
shift
|
||||
json_file=$1
|
||||
elif [[ $1 == "-l" ]] || [[ $1 == "--launch" ]]; then
|
||||
launch_flag="1"
|
||||
elif [[ $1 == "--interactive" ]]; then
|
||||
interactive_flag="1"
|
||||
elif [[ $1 == "--no-interactive" ]]; then
|
||||
no_interactive_flag="1"
|
||||
elif [[ $1 =~ ^--dry ]]; then
|
||||
dry_run="1"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
launch() {
|
||||
ghostty --class=$window_class --window-padding-x=$window_padding_x \
|
||||
--keybind="ctrl+c=quit" \
|
||||
-e "${BASH_SOURCE[0]}" --interactive
|
||||
}
|
||||
|
||||
check_properties() {
|
||||
if [[ -z $app_name ]] || [[ -z $app_url ]] || [[ -z $icon_ref ]]; then
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
load_from_file() {
|
||||
if [[ ! -f $1 ]]; then
|
||||
log --error "File '$1' is not found or readable." && exit 1
|
||||
fi
|
||||
file=$(cat $1)
|
||||
app_name=$(echo $file | jq -r '.name // ""')
|
||||
app_url=$(echo $file | jq -r '.url // ""')
|
||||
icon_ref=$(echo $file | jq -r '.icon // ""')
|
||||
exec_cmd=$(echo $file | jq -r '.exec // ""')
|
||||
mime_types=$(echo $file | jq -r '.mime_types // ""')
|
||||
}
|
||||
|
||||
print_properties() {
|
||||
log "\e[33mAPP NAME:\e[0m $app_name"
|
||||
log "\e[33mURL:\e[0m $app_url"
|
||||
log "\e[33mICON:\e[0m $icon_ref"
|
||||
log "\e[33mEXEC:\e[0m $exec_cmd"
|
||||
log "\e[33mMIME:\e[0m $mime_types"
|
||||
}
|
||||
|
||||
prompt_for_properties() {
|
||||
log "\e[32mLet's create a new web app you can start with the app launcher.\n\e[0m"
|
||||
|
||||
if [[ -z $app_name ]]; then
|
||||
app_name=$(gum input --prompt "Name> " --placeholder "My favorite web app")
|
||||
fi
|
||||
|
||||
if [[ -z $app_url ]]; then
|
||||
app_url=$(gum input --prompt "URL> " --placeholder "https://example.com")
|
||||
fi
|
||||
|
||||
if [[ -z $icon_ref ]]; then
|
||||
icon_ref=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG!)")
|
||||
fi
|
||||
}
|
||||
|
||||
set_icon_ref() {
|
||||
# Refer to local icon or fetch remotely from URL
|
||||
local icon_dir="$XDG_DATA_HOME/applications/icons"
|
||||
local icon_path=""
|
||||
|
||||
# Ensure the icon directory exists (useful if it's the first run.)
|
||||
[ ! -d $icon_dir ] && mkdir -p $icon_dir
|
||||
|
||||
if [[ $icon_ref == https://* ]]; then
|
||||
icon_path="$icon_dir/$app_name.png"
|
||||
log "Downloading icon: $icon_ref"
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
if curl -sL -o "$icon_path" "$icon_ref"; then
|
||||
icon_path="$icon_dir/$app_name.png"
|
||||
else
|
||||
log --error "Failed to download icon." && exit 1
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# Check if the icon path is a file.
|
||||
if [ -f $icon_ref ]; then
|
||||
icon_path=$icon_ref
|
||||
else
|
||||
icon_path="$icon_dir/$icon_ref"
|
||||
fi
|
||||
fi
|
||||
|
||||
icon_ref=$icon_path
|
||||
}
|
||||
|
||||
generate_file() {
|
||||
|
||||
cat >"$1" <<EOF
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=$app_name
|
||||
Comment=$app_name
|
||||
Exec=$exec_cmd
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=$icon_ref
|
||||
StartupNotify=true
|
||||
EOF
|
||||
|
||||
# Add mime types if provided
|
||||
if [[ -n $mime_types ]]; then
|
||||
echo "MimeType=$mime_types" >>"$1"
|
||||
fi
|
||||
|
||||
chmod +x "$1"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
export LOG_ENABLE_DRY_RUN="$dry_run"
|
||||
|
||||
if [[ -z "$XDG_DATA_HOME" ]]; then
|
||||
log "XDG_DATA_HOME not set"
|
||||
log "using ~/.local/share"
|
||||
XDG_DATA_HOME=$HOME/.local/share
|
||||
fi
|
||||
|
||||
if [[ $launch_flag == "1" ]]; then
|
||||
launch && exit 0
|
||||
fi
|
||||
|
||||
if [[ $file_mode_flag == "1" ]]; then
|
||||
load_from_file $json_file
|
||||
fi
|
||||
|
||||
# Check that all properties are set, prompt for missing values if not.
|
||||
check_properties
|
||||
if [[ "$?" == "1" ]]; then
|
||||
|
||||
# Check if the '--no-interactive' flag was passed and exit with error.
|
||||
[[ $no_interactive_flag == "1" ]] &&
|
||||
log --error "Required properties not set and '--no-interactive' flag was passed." &&
|
||||
exit 1
|
||||
|
||||
# Only log this if not in interactive mode.
|
||||
[[ $interactive_mode == "0" ]] &&
|
||||
log "All required properties not set, prompting for missing properties."
|
||||
|
||||
prompt_for_properties
|
||||
|
||||
# Check properties again after prompting in interactive mode.
|
||||
check_properties
|
||||
if [[ "$?" == "1" ]]; then
|
||||
# Exit if they were not set during interactive mode.
|
||||
log --error "You must set app name, app URL, and icon URL!" && exit 1
|
||||
fi
|
||||
|
||||
# Set flag that we are in interactive mode.
|
||||
interactive_mode=true
|
||||
fi
|
||||
|
||||
desktop_file="$XDG_DATA_HOME/applications/$app_name.desktop"
|
||||
|
||||
# Parse the icon ref and download icon, if applicable.
|
||||
set_icon_ref
|
||||
|
||||
# Check that an exec command is set, or default to the 'launch-webapp' script.
|
||||
if [[ -z $exec_cmd ]]; then
|
||||
exec_cmd="$SCRIPTS/hypr/webapp launch $app_url"
|
||||
fi
|
||||
|
||||
log "\e[032mCreating web app:\e[0m $desktop_file"
|
||||
print_properties
|
||||
|
||||
if [[ $dry_run == "0" ]]; then
|
||||
generate_file "$desktop_file"
|
||||
fi
|
||||
|
||||
if [[ $interactive_mode == true ]] && [[ $dry_run == "0" ]]; then
|
||||
log "You can now find $app_name using the app launcher (SUPER + SPACE)\n"
|
||||
fi
|
||||
102
env/.local/scripts/hypr/utils/webapp/launch
vendored
Executable file
102
env/.local/scripts/hypr/utils/webapp/launch
vendored
Executable file
@@ -0,0 +1,102 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Adapted from https://github.com/basecamp/omarchy/tree/master?tab=readme-ov-file
|
||||
SCRIPTS="${SCRIPTS:-$HOME/.local/scripts}"
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=${THIS:-$(basename "$THIS_FILE")}
|
||||
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Launches a url as a web application. This script relys on the 'launch' script. This
|
||||
essentially just generates the pattern and launch command to pass into that script.
|
||||
|
||||
USAGE:
|
||||
|
||||
$ $THIS [OPTIONS] <url> [ARGS...]
|
||||
|
||||
OPTIONS:
|
||||
|
||||
-f | --or-focus: If a window exists matching the url's domain, focus it
|
||||
instead of launching new window.
|
||||
-s | --special <name>: Launch in the special workspace name, or toggle the special
|
||||
workspace.
|
||||
-h | --help: Show this help page.
|
||||
|
||||
NOTES:
|
||||
|
||||
Any extra arguments after '--' get passed directly to the browser invocation.
|
||||
|
||||
$ $THIS https://example.com -- --some-random-flag-for-browser=1
|
||||
|
||||
Any options passed in prior to the '--' get sent to the 'launch' script, so you can pass
|
||||
options that are not specifically shown here, but the ones shown would be the most commonly
|
||||
used, so they are documented here.
|
||||
|
||||
Using the '--special' flag is useful for apps that you want to have a "summoning" like behavior.
|
||||
Upon first launch the application will be opened and the special workspace will be shown.
|
||||
Calling it again will keep the application open in the special workspace but hide the workspace.
|
||||
Further calls will not open another instance of the application, but will toggle the visiblity
|
||||
of the special workspace.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
browser="brave-browser.desktop"
|
||||
url=""
|
||||
launch_args=()
|
||||
app_args=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 =~ ^--special ]] || [[ $1 =~ ^-s ]]; then
|
||||
launch_args+=("$1")
|
||||
launch_args+=("$2")
|
||||
shift # Second shift get's handled below
|
||||
elif [[ $1 =~ ^--help ]] || [[ $1 =~ ^-h ]]; then
|
||||
usage && exit 0
|
||||
elif [[ -z $url ]] && [[ ! $1 =~ ^- ]]; then
|
||||
url=$1
|
||||
elif [[ $1 == "--" ]]; then
|
||||
shift
|
||||
break
|
||||
else
|
||||
launch_args+=("$1")
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
# Strips url down to just the domain, so that we can match window classes.
|
||||
pattern() {
|
||||
pattern=${url/#https:\/\//}
|
||||
pattern=${pattern/#http:\/\//}
|
||||
pattern=${pattern%%/*}
|
||||
echo $pattern
|
||||
}
|
||||
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
##################################################
|
||||
# MAIN
|
||||
##################################################
|
||||
|
||||
# setup logging file and label
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
if [[ -z $url ]]; then
|
||||
log --error "Must supply a url." && usage && exit 1
|
||||
fi
|
||||
|
||||
# Any left over args after "--"
|
||||
app_args="$@"
|
||||
|
||||
log "Launching URL: $url"
|
||||
log " Launch args: ${launch_args[@]}"
|
||||
log " App args: ${app_args}"
|
||||
|
||||
$SCRIPTS/hypr/launch "${launch_args[@]}" "$(pattern)" \
|
||||
setsid uwsm app -- $(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$browser 2>/dev/null | head -1) --app="$url" "$app_args"
|
||||
@@ -1,12 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
# Allows script name to be set when called from a parent script or defaults to filename.
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-$LOG_LABEL.log}
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Close window(s) by address or pattern mode.
|
||||
|
||||
USAGE:
|
||||
$ $(basename ${BASH_SOURCE[0]}) [OPTIONS] [MODE] [ARG...]
|
||||
$ $THIS [OPTIONS] [MODE] [ARG...]
|
||||
|
||||
MODE:
|
||||
--all: Close all windows in all workspaces, any arguments are ignored.
|
||||
@@ -41,6 +51,7 @@ dry_run_flag="0"
|
||||
special_flag="0"
|
||||
args=()
|
||||
addresses=()
|
||||
SCRIPTS="${SCRIPTS:-$HOME/.local/scripts}"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 =~ ^-a ]] || [[ $1 =~ ^--active-workspace ]]; then
|
||||
@@ -62,11 +73,7 @@ while [[ $# -gt 0 ]]; do
|
||||
done
|
||||
|
||||
log() {
|
||||
if [[ $dry_run_flag == "1" ]]; then
|
||||
echo "[DRY RUN]: $1"
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
_select_addresses() {
|
||||
@@ -92,10 +99,19 @@ get_special_addresses() {
|
||||
close() {
|
||||
log "Closing window address: $1"
|
||||
if [[ $dry_run_flag == "0" ]]; then
|
||||
hyprctl dispatch closewindow "address:$1"
|
||||
hyprctl dispatch closewindow "address:$1" >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
export LOG_ENABLE_DRY_RUN="$dry_run_flag"
|
||||
|
||||
if [[ $active_workspace_flag == "1" ]]; then
|
||||
# Set addresses to active workspace windows.
|
||||
id=$(hyprctl activeworkspace -j | jq -r '.id')
|
||||
@@ -123,7 +139,7 @@ else
|
||||
fi
|
||||
|
||||
if [[ ${#addresses} == 0 ]]; then
|
||||
log "No windows found."
|
||||
log --warning "No windows found."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
84
env/.local/scripts/hypr/utils/windows/focus-window
vendored
Executable file
84
env/.local/scripts/hypr/utils/windows/focus-window
vendored
Executable file
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Focuses a window, properly handling windows in special workspaces. If no address is supplied,
|
||||
then we will read address from stdin.
|
||||
|
||||
USAGE:
|
||||
|
||||
$ $THIS <flags> <address>
|
||||
|
||||
FLAGS:
|
||||
-h | --help: Show this help page.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
# Prevent hyprctl dispatch calls from printing to the console.
|
||||
hypr_dispatch() {
|
||||
hyprctl dispatch "$@" >/dev/null 2>&1
|
||||
return $?
|
||||
}
|
||||
|
||||
focus_window() {
|
||||
local address=$1
|
||||
log "Focusing window, selection: $address"
|
||||
local name=$(hyprctl clients -j | jq -r ".[] | select(.address == \"$address\") | .workspace.name")
|
||||
local active_workspace=$(hyprctl activewindow -j | jq -r ".workspace.name")
|
||||
|
||||
log "Window workspace: '$name', active workspace: '$active_workspace'"
|
||||
if [[ $name =~ ^special ]] && [[ ! $active_workspace == $name ]]; then
|
||||
log "Toggling special workspace prior to focusing window."
|
||||
name="${name#special:*}"
|
||||
hypr_dispatch togglespecialworkspace $name
|
||||
fi
|
||||
hypr_dispatch focuswindow "address:$address"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
address=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
||||
usage && exit 0
|
||||
else
|
||||
address=$1
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if [[ -z $address ]]; then
|
||||
log "Reading address from stdin."
|
||||
# If an address not supplied then read from stdin, which allows us to pipe the address into
|
||||
# this command.
|
||||
read -p "Window address: " address
|
||||
fi
|
||||
|
||||
if [[ -z $address ]]; then
|
||||
log --error "No address supplied." && exit 1
|
||||
fi
|
||||
|
||||
focus_window $address && exit $?
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user