Compare commits
287 Commits
67a7110a5e
...
wip
| Author | SHA1 | Date | |
|---|---|---|---|
| 4a698f6e1f | |||
| 195176678c | |||
| 71b7e78112 | |||
| 11e8870aed | |||
| 19a7dd6dee | |||
| e734764630 | |||
| a09a464f0c | |||
| 5018c78956 | |||
| ce19fa1371 | |||
| 95fdacdd31 | |||
| cef92f13c9 | |||
| 876aa0ac1c | |||
| 7c05d57053 | |||
| bce8fbc87c | |||
| 58fa05c6f8 | |||
| 77108587b2 | |||
| 297d2959fa | |||
| bcd7480efc | |||
| e149e46b81 | |||
| e54be984ac | |||
| 9130eb1a37 | |||
| fb9eece5ce | |||
| 3f2951a1ea | |||
| b04611b199 | |||
| aeb8a78721 | |||
| 836267b80e | |||
| 4866eb3f9c | |||
| 18e93a89db | |||
| 869482ba91 | |||
| 73d76e8cee | |||
| e0f22f25cf | |||
| f76cac70eb | |||
| 270338f6d3 | |||
| 9edf260607 | |||
| 512599d8d7 | |||
| 7f28c1c13f | |||
| e1869dcbc3 | |||
| f5ea4d4c13 | |||
| c3580ea62a | |||
| edb02ef94b | |||
| 53b29759e8 | |||
| a95d62b7e8 | |||
| bf90b5fbe9 | |||
| 9edbed2349 | |||
| 95fc836b55 | |||
| 51457299a9 | |||
| ad532f260f | |||
| 5ffcbbffcc | |||
| 0794c045fb | |||
| 7fcc30a7c7 | |||
| 8a4b46d38d | |||
| 1c36fc4f5d | |||
| ff8b03f04d | |||
| ec87546913 | |||
| a1f90c79d6 | |||
| 399fae9c2b | |||
| 9538406245 | |||
| 90e7cbe7c6 | |||
| fd727586f9 | |||
| 1c42f46fbc | |||
| 86027c1564 | |||
| 78d758b8fb | |||
| 6757fc6aec | |||
| 28fbb75b47 | |||
| 829804f2ed | |||
| ebec63e48c | |||
| b600226065 | |||
| 4398125c7b | |||
| 9064a389e9 | |||
| e507e258e3 | |||
| d138f4c1da | |||
| fa085ae00c | |||
| d8a21e78c4 | |||
| 213a93acd9 | |||
| bdde8238c9 | |||
| d21fdc925c | |||
| dba234077e | |||
| 867e3d6991 | |||
| ecb466f230 | |||
| f5302fc646 | |||
| 3eaba86825 | |||
| 1b0d0597b0 | |||
| 63860cd661 | |||
| d122f56ab6 | |||
| a5c491d1ce | |||
| d6ba2a78b9 | |||
| 29608ff8c4 | |||
| 1513d23ec4 | |||
| 28de145180 | |||
| 17997c0550 | |||
| d47467e161 | |||
| 8033f2e2a9 | |||
| 3fa1a018ee | |||
| dd9de18aa7 | |||
| 6d8e00fabf | |||
| b54ece050d | |||
| 437ca39309 | |||
| 1835f61e49 | |||
| 7caf112500 | |||
| 6b84ae6f3a | |||
| d3b8e76787 | |||
| 24d031c214 | |||
| bfa2c6313f | |||
| cfb882fdc9 | |||
| b6bc1de7af | |||
| 48664abc41 | |||
| 3fc6280267 | |||
| ef95853433 | |||
| 3146aeee3e | |||
| f685ebee2c | |||
| 5a40a5b3ab | |||
| c06364cd27 | |||
| f2f29762a4 | |||
| 7f850d115f | |||
| fc88cb9801 | |||
| 75c39a5613 | |||
| e90c2c7e4a | |||
| 24966cfc69 | |||
| 78ab1671ab | |||
| d38ae42668 | |||
| 240d466e3d | |||
| 9e8f036f62 | |||
| 8a6ecfe7b9 | |||
| 8714b847a7 | |||
| 2c672e497c | |||
| 6d22ed0187 | |||
| f5397295d3 | |||
| 2a14edd39c | |||
| 00a77bf58a | |||
| 9e9ccd0fde | |||
| d72a4540b9 | |||
| b0385dc277 | |||
| f3f859d9a1 | |||
| 5b421c7999 | |||
| cf729da8ef | |||
| 341499f9a7 | |||
| 10ba42cb1d | |||
| 154b1a11be | |||
| ec9c92ab9f | |||
| c321000834 | |||
| 06218e16d4 | |||
| a7c29799b8 | |||
| 3035ab9acb | |||
| e6216fb3cd | |||
| 24d4f9e638 | |||
| ab1a7df7f4 | |||
| 4a666b8d21 | |||
| 3324aae2d6 | |||
| 10e03987be | |||
| 728b00c2ca | |||
| 30793b5a46 | |||
| 8fb8e43f59 | |||
| 1f040c70ab | |||
| e03d46c3ab | |||
| d9f7f0961f | |||
| b73ebaf338 | |||
| da18d28504 | |||
| e50284111b | |||
| faaf5807d5 | |||
| 7d4b8f4f7a | |||
| 98e69defac | |||
| 9062aeb17a | |||
| e1610e3874 | |||
| 8c303ca0d1 | |||
| b032608fd9 | |||
| 1dfb8e7e7b | |||
| 4d7bd1a487 | |||
| ad79dc5bbf | |||
| d522104407 | |||
| 01f6327e9e | |||
| ad9aacbbcb | |||
| 7373c7b653 | |||
| a1736b33e0 | |||
| f10efa6808 | |||
| 3810c83e14 | |||
| e08245989a | |||
| 492adae580 | |||
| 09ffb3b2d9 | |||
| a8bf055a0b | |||
| a22b7125a5 | |||
| 72f2a053c0 | |||
| 7111817d6f | |||
| 0c0a1a9f9c | |||
| e1ba513fa6 | |||
| 1ce7cac540 | |||
| ec7153193b | |||
| a2a13c901a | |||
| afc7829f1f | |||
| bfe74b7499 | |||
| fa84b139af | |||
| 557bb04d71 | |||
| 55e747eec2 | |||
| d3b783cb55 | |||
| f6e3c9acb4 | |||
| c68109aa92 | |||
| f87bdec4eb | |||
| 1d77cf6c1e | |||
| 85e31b13c1 | |||
| ac26cef63a | |||
| f72f18f5c7 | |||
| ccf3dcc500 | |||
| a987843e95 | |||
| fef6cbc6bb | |||
| 118211652b | |||
| c9ccef2f8a | |||
| 3c34d8942e | |||
| 7dbe42b087 | |||
| 60cd08c395 | |||
| c47799a7e1 | |||
| 73bfbcc3a3 | |||
| 7dbf926206 | |||
| 4995ac177b | |||
| 56abd08940 | |||
| d86e4ec4a3 | |||
| b774bb44d9 | |||
| b8cd095b8b | |||
| 021226fc80 | |||
| a84dac1b3d | |||
| 7110966df9 | |||
| 9c1613f567 | |||
| f3b5b49899 | |||
| 8068766afc | |||
| d6a8dc4d1e | |||
| b264e9d805 | |||
| 6181681134 | |||
| 7a4e0e7e61 | |||
| 4930040bef | |||
| b1cfffafc7 | |||
| 3f1609b384 | |||
| f410f907ef | |||
| 054068a205 | |||
| cfec54cc6c | |||
| 253baf505e | |||
| 75c21332b8 | |||
| 113c96ede4 | |||
| 81a729d005 | |||
| b18031ffc4 | |||
| df7e4085a9 | |||
| 9a7ab0608e | |||
| 71355aa027 | |||
| 2cb9042040 | |||
| 48d8b50b5a | |||
| 0401ab01bf | |||
| 6a049c283f | |||
| a667c5a237 | |||
| ff6bb86881 | |||
| 38fe2f7481 | |||
| 7582ed78c3 | |||
| e566a44c56 | |||
| a46fd42e1e | |||
| af53c0ce53 | |||
| f1244ddfde | |||
| fa925a6a3d | |||
| dd671ecb4a | |||
| de8dc9fa41 | |||
| 72771b0ea8 | |||
| ddcbced9ff | |||
| 744e838901 | |||
| 4bb111c3bb | |||
| 6d55a0f4b5 | |||
| e0b0aa1dc5 | |||
| 89e648a623 | |||
| 8ce9da4e25 | |||
| cbc71f5371 | |||
| 3c37cc460a | |||
| 843d683a1d | |||
| 78a59b9334 | |||
| e86fa41784 | |||
| c9feefd91f | |||
| 3070322f7d | |||
| fee1f12743 | |||
| d46929c1f3 | |||
| 8b998df350 | |||
| c1f0146d3e | |||
| 252544af19 | |||
| 8a33f3bc02 | |||
| 7e184f9245 | |||
| 7e98522f97 | |||
| 3cd77b2bde | |||
| 24ae44560a | |||
| 094420a2c6 | |||
| c43275442a | |||
| 92546755eb | |||
| fc8d940856 | |||
| 5b1dbd6b18 | |||
| 5eee614863 | |||
| 7f85740946 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -9,3 +9,5 @@ lupan-wm/target
|
||||
__pycache__
|
||||
/dwm
|
||||
/st
|
||||
/vis/.config/vis/plugins/
|
||||
/tools/.local/bin/
|
||||
|
||||
20
Makefile
20
Makefile
@@ -1,7 +1,7 @@
|
||||
all:
|
||||
@echo "run: make clone build install"
|
||||
|
||||
clone: ~/.local/share/zap dwm st
|
||||
clone: dwm st
|
||||
|
||||
build: build-dwm build-st build-lupan-clock
|
||||
|
||||
@@ -14,32 +14,38 @@ install: install-dwm install-st install-lupan-clock install-other
|
||||
|
||||
dwm:
|
||||
git clone https://git.suckless.org/dwm
|
||||
cp -i patches/dwm/config.h dwm/
|
||||
cd dwm && \
|
||||
git remote add lupan.pl https://gitea.lupan.pl/lupan/dwm.git && \
|
||||
git fetch lupan.pl && \
|
||||
git checkout -b wip --track lupan.pl/wip
|
||||
|
||||
build-dwm:
|
||||
make -C dwm
|
||||
|
||||
install-dwm:
|
||||
make -C dwm install PREFIX="${HOME}/.local"
|
||||
make -C dwm install PREFIX="${HOME}/.local/stow/dwm"
|
||||
stow -d ~/.local/stow dwm
|
||||
|
||||
st:
|
||||
git clone https://git.suckless.org/st
|
||||
cd st && \
|
||||
git remote add lupan.pl https://gitea.lupan.pl/lupan/st.git && \
|
||||
git fetch lupan.pl && \
|
||||
git checkout -b patched --track lupan.pl/patched
|
||||
git checkout -b patched-4 --track lupan.pl/patched-4
|
||||
|
||||
build-st:
|
||||
make -C st
|
||||
|
||||
install-st:
|
||||
make -C st install PREFIX="${HOME}/.local"
|
||||
make -C st install PREFIX="${HOME}/.local/stow/st"
|
||||
stow -d ~/.local/stow st
|
||||
|
||||
build-lupan-clock:
|
||||
make -C lupan-clock
|
||||
|
||||
install-lupan-clock:
|
||||
make -C lupan-clock install PREFIX="${HOME}/.local"
|
||||
make -C lupan-clock install PREFIX="${HOME}/.local/stow/lupan-clock"
|
||||
stow -d ~/.local/stow lupan-clock
|
||||
|
||||
install-other:
|
||||
stow -Rv shell tmux xsession nvim
|
||||
stow -Rv lazygit shell tmux nvim vis xsession
|
||||
|
||||
31
README.md
31
README.md
@@ -4,11 +4,40 @@ Lupan's config files
|
||||
Installation
|
||||
------------
|
||||
|
||||
Install Hyprland
|
||||
----------------
|
||||
|
||||
To reproduce my environment clone this repo into `~/dotfiles` and check
|
||||
that you have required programs in your `PATH` with
|
||||
|
||||
```
|
||||
$ sh check_dependencies.sh
|
||||
$ sh check_dependencies.sh hypr
|
||||
```
|
||||
|
||||
Install font `ttf-firacode-nerd` (https://github.com/ryanoasis/nerd-fonts/releases/download/v3.0.2/FiraCode.zip).
|
||||
|
||||
Install proper configurations with
|
||||
|
||||
```
|
||||
$ stow shell hyprland alacritty xsession nvim yazi
|
||||
```
|
||||
|
||||
Where `xsession` is just to install `lupan-set-theme` script, `nvim` and `yazi` may be skipped if you do not use them.
|
||||
|
||||
Change to `zsh` as your login shell with
|
||||
|
||||
```
|
||||
$ chsh -s /usr/bin/zsh
|
||||
```
|
||||
|
||||
Install DWM (old)
|
||||
-----------------
|
||||
|
||||
To reproduce my environment clone this repo into `~/dotfiles` and check
|
||||
that you have required programs in your `PATH` with
|
||||
|
||||
```
|
||||
$ sh check_dependencies.sh dwm
|
||||
```
|
||||
|
||||
Install font `ttf-firacode-nerd` (https://github.com/ryanoasis/nerd-fonts/releases/download/v3.0.2/FiraCode.zip).
|
||||
|
||||
17
alacritty/.config/alacritty/alacritty.toml
Normal file
17
alacritty/.config/alacritty/alacritty.toml
Normal file
@@ -0,0 +1,17 @@
|
||||
[colors]
|
||||
draw_bold_text_with_bright_colors = false
|
||||
|
||||
[env]
|
||||
TERM = "xterm-256color"
|
||||
|
||||
[font]
|
||||
size = 10
|
||||
|
||||
[font.bold]
|
||||
family = "Fira Code Nerd Font"
|
||||
|
||||
[font.normal]
|
||||
family = "Fira Code Nerd Font"
|
||||
|
||||
[general]
|
||||
import = ["~/.config/alacritty/dark.toml"]
|
||||
@@ -1,126 +0,0 @@
|
||||
# See: /usr/share/doc/alacritty/example/alacritty.yml
|
||||
|
||||
env:
|
||||
TERM: xterm-256color
|
||||
|
||||
# (format t "~A" (cl-base16:apply-scheme (merge-pathnames "schemes/mexico-light/mexico-light.yaml" cl-base16:*source-dir*) "alacritty" "default"))
|
||||
# (format t "~A" (cl-base16:apply-scheme (merge-pathnames "schemes/mexico-light/mexico-light.yaml" cl-base16:*source-dir*) "alacritty" "default"))
|
||||
|
||||
# Base16 Espresso - alacritty color config
|
||||
# Unknown. Maintained by Alex Mirrington (https://github.com/alexmirrington)
|
||||
colors-dark: &dark
|
||||
# Default colors
|
||||
primary:
|
||||
background: '0x2d2d2d'
|
||||
foreground: '0xcccccc'
|
||||
|
||||
# Colors the cursor will use if `custom_cursor_colors` is true
|
||||
cursor:
|
||||
text: '0x2d2d2d'
|
||||
cursor: '0xcccccc'
|
||||
|
||||
# Normal colors
|
||||
normal:
|
||||
black: '0x2d2d2d'
|
||||
red: '0xd25252'
|
||||
green: '0xa5c261'
|
||||
yellow: '0xffc66d'
|
||||
blue: '0x6c99bb'
|
||||
magenta: '0xd197d9'
|
||||
cyan: '0xbed6ff'
|
||||
white: '0xcccccc'
|
||||
|
||||
# Bright colors
|
||||
bright:
|
||||
black: '0x777777'
|
||||
red: '0xf9a959'
|
||||
green: '0x393939'
|
||||
yellow: '0x515151'
|
||||
blue: '0xb4b7b4'
|
||||
magenta: '0xe0e0e0'
|
||||
cyan: '0xf97394'
|
||||
white: '0xffffff'
|
||||
|
||||
colors1:
|
||||
# Default colors
|
||||
primary:
|
||||
background: '0x3C4C55'
|
||||
foreground: '0xC5D4DD'
|
||||
|
||||
# Colors the cursor will use if `custom_cursor_colors` is true
|
||||
cursor:
|
||||
text: '0x3C4C55'
|
||||
cursor: '0xC5D4DD'
|
||||
|
||||
# Normal colors
|
||||
normal:
|
||||
black: '0x3C4C55'
|
||||
red: '0x83AFE5'
|
||||
green: '0x7FC1CA'
|
||||
yellow: '0xA8CE93'
|
||||
blue: '0x83AFE5'
|
||||
magenta: '0x9A93E1'
|
||||
cyan: '0xF2C38F'
|
||||
white: '0xC5D4DD'
|
||||
|
||||
# Bright colors
|
||||
bright:
|
||||
black: '0x899BA6'
|
||||
red: '0x7FC1CA'
|
||||
green: '0x556873'
|
||||
yellow: '0x6A7D89'
|
||||
blue: '0x899BA6'
|
||||
magenta: '0x899BA6'
|
||||
cyan: '0xF2C38F'
|
||||
white: '0x556873'
|
||||
|
||||
# Base16 Mexico Light - alacritty color config
|
||||
# Sheldon Johnson
|
||||
colors-light: &light
|
||||
# Default colors
|
||||
primary:
|
||||
background: '0xf8f8f8'
|
||||
foreground: '0x383838'
|
||||
|
||||
# Colors the cursor will use if `custom_cursor_colors` is true
|
||||
cursor:
|
||||
text: '0xf8f8f8'
|
||||
cursor: '0x383838'
|
||||
|
||||
# Normal colors
|
||||
normal:
|
||||
black: '0xf8f8f8'
|
||||
red: '0xab4642'
|
||||
green: '0x538947'
|
||||
yellow: '0xf79a0e'
|
||||
blue: '0x7cafc2'
|
||||
magenta: '0x96609e'
|
||||
cyan: '0x4b8093'
|
||||
white: '0x383838'
|
||||
|
||||
# Bright colors
|
||||
bright:
|
||||
black: '0xb8b8b8'
|
||||
red: '0xdc9656'
|
||||
green: '0xe8e8e8'
|
||||
yellow: '0xd8d8d8'
|
||||
blue: '0x585858'
|
||||
magenta: '0x282828'
|
||||
cyan: '0xa16946'
|
||||
white: '0x181818'
|
||||
|
||||
draw_bold_text_with_bright_colors: false
|
||||
|
||||
colors: *dark
|
||||
|
||||
font:
|
||||
size: 12
|
||||
normal:
|
||||
family: Iosevka Fixed Slab
|
||||
bold:
|
||||
family: Iosevka Fixed Slab heavy
|
||||
|
||||
key_bindings:
|
||||
- key: F6
|
||||
mods: Control|Shift
|
||||
command: { program: "/bin/sh", args: ["-c", "~/.config/alacritty/set_theme.sh --next"] }
|
||||
31
alacritty/.config/alacritty/dark.toml
Normal file
31
alacritty/.config/alacritty/dark.toml
Normal file
@@ -0,0 +1,31 @@
|
||||
# https://github.com/alacritty/alacritty-theme/blob/master/themes/nordic.toml
|
||||
|
||||
# Colors (Nordic)
|
||||
|
||||
[colors.primary]
|
||||
background = '#242933'
|
||||
foreground = '#BBBDAF'
|
||||
|
||||
[colors.normal]
|
||||
black = '#191C1D'
|
||||
red = '#BD6062'
|
||||
green = '#A3D6A9'
|
||||
yellow = '#F0DFAF'
|
||||
blue = '#8FB4D8'
|
||||
magenta = '#C7A9D9'
|
||||
cyan = '#B6D7A8'
|
||||
white = '#BDC5BD'
|
||||
|
||||
[colors.bright]
|
||||
black = '#727C7C'
|
||||
red = '#D18FAF'
|
||||
green = '#B7CEB0'
|
||||
yellow = '#BCBCBC'
|
||||
blue = '#E0CF9F'
|
||||
magenta = '#C7A9D9'
|
||||
cyan = '#BBDA97'
|
||||
white = '#BDC5BD'
|
||||
|
||||
[colors.selection]
|
||||
text = '#000000'
|
||||
background = '#F0DFAF'
|
||||
35
alacritty/.config/alacritty/light.toml
Normal file
35
alacritty/.config/alacritty/light.toml
Normal file
@@ -0,0 +1,35 @@
|
||||
# https://github.com/alacritty/alacritty-theme/blob/master/themes/night_owlish_light.toml
|
||||
|
||||
# Colors (Night Owlish Light)
|
||||
|
||||
[colors.primary]
|
||||
background = '#ffffff'
|
||||
foreground = '#403f53'
|
||||
|
||||
[colors.normal]
|
||||
black = '#011627'
|
||||
red = '#d3423e'
|
||||
green = '#2aa298'
|
||||
yellow = '#daaa01'
|
||||
blue = '#4876d6'
|
||||
magenta = '#403f53'
|
||||
cyan = '#08916a'
|
||||
white = '#7a8181'
|
||||
|
||||
[colors.bright]
|
||||
black = '#7a8181'
|
||||
red = '#f76e6e'
|
||||
green = '#49d0c5'
|
||||
yellow = '#dac26b'
|
||||
blue = '#5ca7e4'
|
||||
magenta = '#697098'
|
||||
cyan = '#00c990'
|
||||
white = '#989fb1'
|
||||
|
||||
[colors.cursor]
|
||||
cursor = '#403f53'
|
||||
text = '#fbfbfb'
|
||||
|
||||
[colors.selection]
|
||||
background = '#f2f2f2'
|
||||
text = '#403f53'
|
||||
@@ -1,30 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
case "$1" in
|
||||
lupan-dark|lupan-dark-blue|lupan-dark-gray|lupan-light|lupan-material-dark|lupan-material-light)
|
||||
sed -i "s/^colors: [*].*/colors: *$1/" ~/.config/alacritty/alacritty.yml
|
||||
;;
|
||||
--next)
|
||||
case $(grep colors: ~/.config/alacritty/alacritty.yml) in
|
||||
'colors: *lupan-dark')
|
||||
THEME=lupan-dark-blue
|
||||
;;
|
||||
'colors: *lupan-dark-blue')
|
||||
THEME=lupan-dark-gray
|
||||
;;
|
||||
'colors: *lupan-dark-gray')
|
||||
THEME=lupan-light
|
||||
;;
|
||||
'colors: *lupan-light')
|
||||
THEME=lupan-material-dark
|
||||
;;
|
||||
'colors: *lupan-material-dark')
|
||||
THEME=lupan-material-light
|
||||
;;
|
||||
*)
|
||||
THEME=lupan-dark
|
||||
;;
|
||||
esac
|
||||
sed -i "s/^colors: [*].*/colors: *$THEME/" ~/.config/alacritty/alacritty.yml
|
||||
;;
|
||||
esac
|
||||
592
awesome/.config/awesome/rc.lua
Normal file
592
awesome/.config/awesome/rc.lua
Normal file
@@ -0,0 +1,592 @@
|
||||
-- If LuaRocks is installed, make sure that packages installed through it are
|
||||
-- found (e.g. lgi). If LuaRocks is not installed, do nothing.
|
||||
pcall(require, "luarocks.loader")
|
||||
|
||||
-- Standard awesome library
|
||||
local gears = require("gears")
|
||||
local awful = require("awful")
|
||||
require("awful.autofocus")
|
||||
-- Widget and layout library
|
||||
local wibox = require("wibox")
|
||||
-- Theme handling library
|
||||
local beautiful = require("beautiful")
|
||||
-- Notification library
|
||||
local naughty = require("naughty")
|
||||
local menubar = require("menubar")
|
||||
local hotkeys_popup = require("awful.hotkeys_popup")
|
||||
-- Enable hotkeys help widget for VIM and other apps
|
||||
-- when client with a matching name is opened:
|
||||
require("awful.hotkeys_popup.keys")
|
||||
|
||||
---@diagnostic disable: undefined-global
|
||||
|
||||
-- {{{ Error handling
|
||||
-- Check if awesome encountered an error during startup and fell back to
|
||||
-- another config (This code will only ever execute for the fallback config)
|
||||
if awesome.startup_errors then
|
||||
naughty.notify({
|
||||
preset = naughty.config.presets.critical,
|
||||
title = "Oops, there were errors during startup!",
|
||||
text = awesome.startup_errors
|
||||
})
|
||||
end
|
||||
|
||||
-- Handle runtime errors after startup
|
||||
do
|
||||
local in_error = false
|
||||
awesome.connect_signal("debug::error", function(err)
|
||||
-- Make sure we don't go into an endless error loop
|
||||
if in_error then return end
|
||||
in_error = true
|
||||
|
||||
naughty.notify({
|
||||
preset = naughty.config.presets.critical,
|
||||
title = "Oops, an error happened!",
|
||||
text = tostring(err)
|
||||
})
|
||||
in_error = false
|
||||
end)
|
||||
end
|
||||
-- }}}
|
||||
|
||||
-- {{{ Variable definitions
|
||||
-- Themes define colours, icons, font and wallpapers.
|
||||
|
||||
local function read_theme()
|
||||
local theme = "theme_dark.lua"
|
||||
local f = io.open(os.getenv('HOME') .. '/.config/alacritty/alacritty.toml')
|
||||
if f then
|
||||
if string.find(f:read('*all'), 'light') then
|
||||
theme = 'theme_light.lua'
|
||||
end
|
||||
f:close()
|
||||
return theme
|
||||
end
|
||||
end
|
||||
|
||||
local theme = read_theme()
|
||||
beautiful.init(gears.filesystem.get_configuration_dir() .. theme)
|
||||
|
||||
local function set_wallpaper(s)
|
||||
gears.wallpaper.set(beautiful.bg_wallpaper)
|
||||
end
|
||||
|
||||
local function switch_theme()
|
||||
if theme == "theme_dark.lua" then
|
||||
theme = "theme_light.lua"
|
||||
awful.spawn("lupan-set-theme light")
|
||||
else
|
||||
theme = "theme_dark.lua"
|
||||
awful.spawn("lupan-set-theme dark")
|
||||
end
|
||||
beautiful.init(gears.filesystem.get_configuration_dir() .. theme)
|
||||
set_wallpaper()
|
||||
for s in screen do
|
||||
awful.tag.viewtoggle(s.tags[1])
|
||||
awful.tag.viewtoggle(s.tags[1])
|
||||
end
|
||||
end
|
||||
|
||||
-- This is used later as the default terminal and editor to run.
|
||||
local terminal = "st"
|
||||
|
||||
-- Default modkey.
|
||||
local modkey = "Mod4"
|
||||
|
||||
-- Table of layouts to cover with awful.layout.inc, order matters.
|
||||
awful.layout.layouts = {
|
||||
awful.layout.suit.tile,
|
||||
awful.layout.suit.tile.left,
|
||||
awful.layout.suit.tile.bottom,
|
||||
awful.layout.suit.tile.top,
|
||||
awful.layout.suit.fair,
|
||||
awful.layout.suit.fair.horizontal,
|
||||
awful.layout.suit.spiral.dwindle,
|
||||
awful.layout.suit.max,
|
||||
awful.layout.suit.max.fullscreen,
|
||||
awful.layout.suit.magnifier,
|
||||
awful.layout.suit.corner.nw,
|
||||
awful.layout.suit.floating,
|
||||
-- awful.layout.suit.corner.ne,
|
||||
-- awful.layout.suit.corner.sw,
|
||||
-- awful.layout.suit.corner.se,
|
||||
}
|
||||
-- }}}
|
||||
|
||||
-- {{{ Menu
|
||||
-- Menubar configuration
|
||||
menubar.utils.terminal = terminal -- Set the terminal for applications that require it
|
||||
-- }}}
|
||||
|
||||
-- Keyboard map indicator and switcher
|
||||
local mykeyboardlayout = awful.widget.keyboardlayout()
|
||||
|
||||
-- {{{ Wibar
|
||||
-- Create a textclock widget
|
||||
local mytextclock = wibox.widget.textclock('%H:%M ')
|
||||
|
||||
-- Create a wibox for each screen and add it
|
||||
local taglist_buttons = gears.table.join(
|
||||
awful.button({}, 1, function(t) t:view_only() end),
|
||||
awful.button({ modkey }, 1, function(t)
|
||||
if client.focus then
|
||||
client.focus:move_to_tag(t)
|
||||
end
|
||||
end),
|
||||
awful.button({}, 3, awful.tag.viewtoggle),
|
||||
awful.button({ modkey }, 3, function(t)
|
||||
if client.focus then
|
||||
client.focus:toggle_tag(t)
|
||||
end
|
||||
end),
|
||||
awful.button({}, 4, function(t) awful.tag.viewnext(t.screen) end),
|
||||
awful.button({}, 5, function(t) awful.tag.viewprev(t.screen) end)
|
||||
)
|
||||
|
||||
local tasklist_buttons = gears.table.join(
|
||||
awful.button({}, 1, function(c)
|
||||
if c == client.focus then
|
||||
c.minimized = true
|
||||
else
|
||||
c:emit_signal(
|
||||
"request::activate",
|
||||
"tasklist",
|
||||
{ raise = true }
|
||||
)
|
||||
end
|
||||
end),
|
||||
awful.button({}, 3, function()
|
||||
awful.menu.client_list({ theme = { width = 250 } })
|
||||
end),
|
||||
awful.button({}, 4, function()
|
||||
awful.client.focus.byidx(1)
|
||||
end),
|
||||
awful.button({}, 5, function()
|
||||
awful.client.focus.byidx(-1)
|
||||
end))
|
||||
|
||||
-- Re-set wallpaper when a screen's geometry changes (e.g. different resolution)
|
||||
screen.connect_signal("property::geometry", set_wallpaper)
|
||||
|
||||
awful.screen.connect_for_each_screen(function(s)
|
||||
-- Wallpaper
|
||||
set_wallpaper(s)
|
||||
|
||||
-- Each screen has its own tag table.
|
||||
awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[1])
|
||||
|
||||
-- Create a promptbox for each screen
|
||||
s.mypromptbox = awful.widget.prompt()
|
||||
-- Create an imagebox widget which will contain an icon indicating which layout we're using.
|
||||
-- We need one layoutbox per screen.
|
||||
s.mylayoutbox = awful.widget.layoutbox(s)
|
||||
s.mylayoutbox:buttons(gears.table.join(
|
||||
awful.button({}, 1, function() awful.layout.inc(1) end),
|
||||
awful.button({}, 3, function() awful.layout.inc(-1) end),
|
||||
awful.button({}, 4, function() awful.layout.inc(1) end),
|
||||
awful.button({}, 5, function() awful.layout.inc(-1) end)))
|
||||
-- Create a taglist widget
|
||||
s.mytaglist = awful.widget.taglist {
|
||||
screen = s,
|
||||
filter = awful.widget.taglist.filter.all,
|
||||
buttons = taglist_buttons
|
||||
}
|
||||
|
||||
-- Create a tasklist widget
|
||||
s.mytasklist = awful.widget.tasklist {
|
||||
screen = s,
|
||||
filter = awful.widget.tasklist.filter.currenttags,
|
||||
buttons = tasklist_buttons
|
||||
}
|
||||
|
||||
-- Create the wibox
|
||||
s.mywibox = awful.wibar({ position = "top", screen = s })
|
||||
|
||||
-- Add widgets to the wibox
|
||||
s.mywibox:setup {
|
||||
layout = wibox.layout.align.horizontal,
|
||||
{ -- Left widgets
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
s.mytaglist,
|
||||
s.mypromptbox,
|
||||
},
|
||||
s.mytasklist, -- Middle widget
|
||||
{ -- Right widgets
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
mykeyboardlayout,
|
||||
wibox.widget.systray(),
|
||||
mytextclock,
|
||||
s.mylayoutbox,
|
||||
},
|
||||
}
|
||||
end)
|
||||
-- }}}
|
||||
|
||||
local function layout_menu()
|
||||
local layouts = {}
|
||||
for i, layout in pairs(awful.layout.layouts) do
|
||||
layouts[i] =
|
||||
{ layout.name,
|
||||
function()
|
||||
awful.layout.set(layout)
|
||||
end,
|
||||
beautiful["layout_" .. layout.name],
|
||||
}
|
||||
end
|
||||
awful.menu(layouts):show()
|
||||
end
|
||||
|
||||
local function focus_nth_window (n)
|
||||
local cc = {}
|
||||
for _, c in ipairs(client.get()) do
|
||||
if awful.widget.tasklist.filter.currenttags(c, mouse.screen) then cc[#cc + 1] = c end
|
||||
end
|
||||
local new_focused = cc[n]
|
||||
if new_focused then client.focus = new_focused; new_focused:raise() end
|
||||
end
|
||||
|
||||
-- {{{ Key bindings
|
||||
local globalkeys = gears.table.join(
|
||||
awful.key({ modkey, }, "s", hotkeys_popup.show_help,
|
||||
{ description = "show help", group = "awesome" }),
|
||||
awful.key({ modkey, }, "Left", awful.tag.viewprev,
|
||||
{ description = "view previous", group = "tag" }),
|
||||
awful.key({ modkey, }, "Right", awful.tag.viewnext,
|
||||
{ description = "view next", group = "tag" }),
|
||||
awful.key({ modkey, }, "Tab", awful.tag.history.restore,
|
||||
{ description = "go back", group = "tag" }),
|
||||
|
||||
awful.key({ modkey, }, "j",
|
||||
function()
|
||||
awful.client.focus.byidx(1)
|
||||
end,
|
||||
{ description = "focus next by index", group = "client" }
|
||||
),
|
||||
awful.key({ modkey, }, "k",
|
||||
function()
|
||||
awful.client.focus.byidx(-1)
|
||||
end,
|
||||
{ description = "focus previous by index", group = "client" }
|
||||
),
|
||||
|
||||
-- Layout manipulation
|
||||
awful.key({ modkey, "Shift" }, "j", function() awful.client.swap.byidx(1) end,
|
||||
{ description = "swap with next client by index", group = "client" }),
|
||||
awful.key({ modkey, "Shift" }, "k", function() awful.client.swap.byidx(-1) end,
|
||||
{ description = "swap with previous client by index", group = "client" }),
|
||||
awful.key({ modkey, }, ".", function() awful.screen.focus_relative(1) end,
|
||||
{ description = "focus the next screen", group = "screen" }),
|
||||
awful.key({ modkey, }, ",", function() awful.screen.focus_relative(-1) end,
|
||||
{ description = "focus the previous screen", group = "screen" }),
|
||||
awful.key({ modkey, }, "u", awful.client.urgent.jumpto,
|
||||
{ description = "jump to urgent client", group = "client" }),
|
||||
awful.key({ modkey, }, "a",
|
||||
function()
|
||||
awful.client.focus.history.previous()
|
||||
if client.focus then
|
||||
client.focus:raise()
|
||||
end
|
||||
end,
|
||||
{ description = "go back", group = "client" }),
|
||||
|
||||
-- Standard program
|
||||
awful.key({ modkey, "Shift" }, "Return", function() awful.spawn(terminal) end,
|
||||
{ description = "open a terminal", group = "launcher" }),
|
||||
awful.key({ modkey, "Control", "Shift" }, "l", function() awful.spawn("slock") end,
|
||||
{ description = "open a terminal", group = "launcher" }),
|
||||
awful.key({ modkey, "Control", "Shift" }, "s", function() awful.spawn("systemctl suspend") end,
|
||||
{ description = "open a terminal", group = "launcher" }),
|
||||
awful.key({ modkey, "Shift" }, "F6", switch_theme,
|
||||
{ description = "switch theme", group = "launcher" }),
|
||||
awful.key({ modkey, }, "q", awesome.restart,
|
||||
{ description = "reload awesome", group = "awesome" }),
|
||||
awful.key({ modkey, "Control", "Shift" }, "q", awesome.quit,
|
||||
{ description = "quit awesome", group = "awesome" }),
|
||||
awful.key({ modkey, }, "l", function() awful.tag.incmwfact(0.05) end,
|
||||
{ description = "increase master width factor", group = "layout" }),
|
||||
awful.key({ modkey, }, "h", function() awful.tag.incmwfact(-0.05) end,
|
||||
{ description = "decrease master width factor", group = "layout" }),
|
||||
awful.key({ modkey, "Shift" }, "h", function() awful.tag.incnmaster(1, nil, true) end,
|
||||
{ description = "increase the number of master clients", group = "layout" }),
|
||||
awful.key({ modkey, "Shift" }, "l", function() awful.tag.incnmaster(-1, nil, true) end,
|
||||
{ description = "decrease the number of master clients", group = "layout" }),
|
||||
awful.key({ modkey, }, "i", function() awful.tag.incncol(1, nil, true) end,
|
||||
{ description = "increase the number of columns", group = "layout" }),
|
||||
awful.key({ modkey, }, "d", function() awful.tag.incncol(-1, nil, true) end,
|
||||
{ description = "decrease the number of columns", group = "layout" }),
|
||||
awful.key({ modkey, }, "space", function() awful.layout.inc(1) end,
|
||||
{ description = "select next", group = "layout" }),
|
||||
awful.key({ modkey, "Shift" }, "space", function() awful.layout.inc(-1) end,
|
||||
{ description = "select previous", group = "layout" }),
|
||||
awful.key({ modkey, "Control", "Shift", }, "space", layout_menu,
|
||||
{ description = "select layout from menu", group = "layout" }),
|
||||
awful.key({ modkey, "Control" }, "n",
|
||||
function()
|
||||
local c = awful.client.restore()
|
||||
-- Focus restored client
|
||||
if c then
|
||||
c:emit_signal(
|
||||
"request::activate", "key.unminimize", { raise = true }
|
||||
)
|
||||
end
|
||||
end,
|
||||
{ description = "restore minimized", group = "client" }),
|
||||
|
||||
-- Prompt
|
||||
awful.key({ modkey, }, "r", function() awful.screen.focused().mypromptbox:run() end,
|
||||
{ description = "run prompt", group = "launcher" }),
|
||||
|
||||
awful.key({ modkey, }, "x",
|
||||
function()
|
||||
awful.prompt.run {
|
||||
prompt = "Run Lua code: ",
|
||||
textbox = awful.screen.focused().mypromptbox.widget,
|
||||
exe_callback = awful.util.eval,
|
||||
history_path = awful.util.get_cache_dir() .. "/history_eval"
|
||||
}
|
||||
end,
|
||||
{ description = "lua execute prompt", group = "awesome" }),
|
||||
-- Menubar
|
||||
awful.key({ modkey }, "p", function() awful.spawn("dmenu_run -fn 'FiraCode Nerd Font Ret:size=10'") end,
|
||||
{ description = "run command", group = "launcher" })
|
||||
)
|
||||
|
||||
local clientkeys = gears.table.join(
|
||||
awful.key({ modkey, }, "f",
|
||||
function(c)
|
||||
c.fullscreen = not c.fullscreen
|
||||
c:raise()
|
||||
end,
|
||||
{ description = "toggle fullscreen", group = "client" }),
|
||||
awful.key({ modkey, "Shift" }, "c", function(c) c:kill() end,
|
||||
{ description = "close", group = "client" }),
|
||||
awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle,
|
||||
{ description = "toggle floating", group = "client" }),
|
||||
awful.key({ modkey, }, "Return", function(c) c:swap(awful.client.getmaster()) end,
|
||||
{ description = "move to master", group = "client" }),
|
||||
awful.key({ modkey, "Shift" }, ".", function(c) c:move_to_screen() end,
|
||||
{ description = "move to screen", group = "client" }),
|
||||
awful.key({ modkey, }, "t", function(c) c.ontop = not c.ontop end,
|
||||
{ description = "toggle keep on top", group = "client" }),
|
||||
awful.key({ modkey, }, "n",
|
||||
function(c)
|
||||
-- The client currently has the input focus, so it cannot be
|
||||
-- minimized, since minimized clients can't have the focus.
|
||||
c.minimized = true
|
||||
end,
|
||||
{ description = "minimize", group = "client" }),
|
||||
awful.key({ modkey, }, "m",
|
||||
function(c)
|
||||
if awful.layout.getname() == "max" then
|
||||
awful.layout.set(awful.layout.suit.tile)
|
||||
else
|
||||
awful.layout.set(awful.layout.suit.max)
|
||||
end
|
||||
end,
|
||||
{ description = "(un)maximize", group = "client" }),
|
||||
awful.key({ modkey, }, "v",
|
||||
function(c)
|
||||
c.maximized_vertical = not c.maximized_vertical
|
||||
c:raise()
|
||||
end,
|
||||
{ description = "(un)maximize vertically", group = "client" }),
|
||||
awful.key({ modkey, }, "b",
|
||||
function(c)
|
||||
c.maximized_horizontal = not c.maximized_horizontal
|
||||
c:raise()
|
||||
end,
|
||||
{ description = "(un)maximize horizontally", group = "client" })
|
||||
)
|
||||
|
||||
-- Bind all key numbers to tags.
|
||||
-- Be careful: we use keycodes to make it work on any keyboard layout.
|
||||
-- This should map on the top row of your keyboard, usually 1 to 9.
|
||||
for i = 1, 9 do
|
||||
globalkeys = gears.table.join(globalkeys,
|
||||
-- View tag only.
|
||||
awful.key({ modkey }, "#" .. i + 9,
|
||||
function()
|
||||
local screen = awful.screen.focused()
|
||||
local tag = screen.tags[i]
|
||||
if tag then
|
||||
tag:view_only()
|
||||
end
|
||||
end,
|
||||
{ description = "view tag #" .. i, group = "tag" }),
|
||||
-- Toggle tag display.
|
||||
awful.key({ modkey, "Control" }, "#" .. i + 9,
|
||||
function()
|
||||
local screen = awful.screen.focused()
|
||||
local tag = screen.tags[i]
|
||||
if tag then
|
||||
awful.tag.viewtoggle(tag)
|
||||
end
|
||||
end,
|
||||
{ description = "toggle tag #" .. i, group = "tag" }),
|
||||
-- Move client to tag.
|
||||
awful.key({ modkey, "Shift" }, "#" .. i + 9,
|
||||
function()
|
||||
if client.focus then
|
||||
local tag = client.focus.screen.tags[i]
|
||||
if tag then
|
||||
client.focus:move_to_tag(tag)
|
||||
end
|
||||
end
|
||||
end,
|
||||
{ description = "move focused client to tag #" .. i, group = "tag" }),
|
||||
-- Toggle tag on focused client.
|
||||
awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
|
||||
function()
|
||||
if client.focus then
|
||||
local tag = client.focus.screen.tags[i]
|
||||
if tag then
|
||||
client.focus:toggle_tag(tag)
|
||||
end
|
||||
end
|
||||
end,
|
||||
{ description = "toggle focused client on tag #" .. i, group = "tag" }),
|
||||
--- Focus nth window
|
||||
awful.key({ "Control" }, "#" .. i + 9,
|
||||
function() focus_nth_window(i) end,
|
||||
{ description = "focus window index #" .. i, group = "client" })
|
||||
)
|
||||
end
|
||||
|
||||
local clientbuttons = gears.table.join(
|
||||
awful.button({}, 1, function(c)
|
||||
c:emit_signal("request::activate", "mouse_click", { raise = true })
|
||||
end),
|
||||
awful.button({ modkey }, 1, function(c)
|
||||
c:emit_signal("request::activate", "mouse_click", { raise = true })
|
||||
awful.mouse.client.move(c)
|
||||
end),
|
||||
awful.button({ modkey }, 3, function(c)
|
||||
c:emit_signal("request::activate", "mouse_click", { raise = true })
|
||||
awful.mouse.client.resize(c)
|
||||
end)
|
||||
)
|
||||
|
||||
-- Set keys
|
||||
root.keys(globalkeys)
|
||||
-- }}}
|
||||
|
||||
-- {{{ Rules
|
||||
-- Rules to apply to new clients (through the "manage" signal).
|
||||
awful.rules.rules = {
|
||||
-- All clients will match this rule.
|
||||
{
|
||||
rule = {},
|
||||
properties = {
|
||||
border_width = beautiful.border_width,
|
||||
border_color = beautiful.border_normal,
|
||||
focus = awful.client.focus.filter,
|
||||
raise = true,
|
||||
keys = clientkeys,
|
||||
buttons = clientbuttons,
|
||||
screen = awful.screen.preferred,
|
||||
placement = awful.placement.no_overlap + awful.placement.no_offscreen,
|
||||
size_hints_honor = false,
|
||||
}
|
||||
},
|
||||
|
||||
-- Floating clients.
|
||||
{
|
||||
rule_any = {
|
||||
instance = {
|
||||
"DTA", -- Firefox addon DownThemAll.
|
||||
"copyq", -- Includes session name in class.
|
||||
"pinentry",
|
||||
},
|
||||
class = {
|
||||
"Arandr",
|
||||
"Blueman-manager",
|
||||
"Gpick",
|
||||
"Kruler",
|
||||
"MessageWin", -- kalarm.
|
||||
"Sxiv",
|
||||
"Tor Browser", -- Needs a fixed window size to avoid fingerprinting by screen size.
|
||||
"Wpa_gui",
|
||||
"veromix",
|
||||
"xtightvncviewer" },
|
||||
|
||||
-- Note that the name property shown in xprop might be set slightly after creation of the client
|
||||
-- and the name shown there might not match defined rules here.
|
||||
name = {
|
||||
"Event Tester", -- xev.
|
||||
},
|
||||
role = {
|
||||
"AlarmWindow", -- Thunderbird's calendar.
|
||||
"ConfigManager", -- Thunderbird's about:config.
|
||||
"pop-up", -- e.g. Google Chrome's (detached) Developer Tools.
|
||||
}
|
||||
},
|
||||
properties = { floating = true }
|
||||
},
|
||||
|
||||
-- Add titlebars to normal clients and dialogs
|
||||
{
|
||||
rule_any = { type = { "normal", "dialog" }
|
||||
},
|
||||
properties = { titlebars_enabled = true }
|
||||
},
|
||||
|
||||
-- Set Firefox to always map on the tag named "2" on screen 1.
|
||||
-- { rule = { class = "Firefox" },
|
||||
-- properties = { screen = 1, tag = "2" } },
|
||||
}
|
||||
-- }}}
|
||||
|
||||
-- {{{ Signals
|
||||
|
||||
local function set_border_width(c)
|
||||
local t = awful.screen.focused().selected_tag
|
||||
if #t:clients() == 1 or t.layout.name == 'max' then
|
||||
c = c or client.focus
|
||||
c.border_width = 0
|
||||
else
|
||||
for _, cl in ipairs(t:clients()) do
|
||||
cl.border_width = beautiful.border_width
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Signal function to execute when a new client appears.
|
||||
client.connect_signal("manage", function(c)
|
||||
-- Set the windows at the slave,
|
||||
-- i.e. put it at the end of others instead of setting it master.
|
||||
-- if not awesome.startup then awful.client.setslave(c) end
|
||||
|
||||
if awesome.startup
|
||||
and not c.size_hints.user_position
|
||||
and not c.size_hints.program_position then
|
||||
-- Prevent clients from being unreachable after screen count changes.
|
||||
awful.placement.no_offscreen(c)
|
||||
end
|
||||
set_border_width(c)
|
||||
end)
|
||||
|
||||
-- Enable sloppy focus, so that focus follows mouse.
|
||||
client.connect_signal("mouse::enter", function(c)
|
||||
c:emit_signal("request::activate", "mouse_enter", { raise = false })
|
||||
end)
|
||||
|
||||
-- local function set_border(c)
|
||||
-- local s = awful.screen.focused()
|
||||
-- if c.maximized
|
||||
-- or (#s.tiled_clients == 1 and not c.floating)
|
||||
-- or (s.selected_tag and s.selected_tag.layout.name == 'max')
|
||||
-- then
|
||||
-- c.border_width = 0
|
||||
-- else
|
||||
-- c.border_width = beautiful.border_width
|
||||
-- end
|
||||
-- end
|
||||
|
||||
client.connect_signal("focus", function(c)
|
||||
c.border_color = beautiful.border_focus
|
||||
set_border_width(c)
|
||||
end)
|
||||
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal; end)
|
||||
tag.connect_signal("property::layout", function() set_border_width(nil) end)
|
||||
|
||||
-- }}}
|
||||
57
awesome/.config/awesome/theme_dark.lua
Normal file
57
awesome/.config/awesome/theme_dark.lua
Normal file
@@ -0,0 +1,57 @@
|
||||
local themes_path = require("gears.filesystem").get_themes_dir()
|
||||
|
||||
local xresources = require("beautiful.xresources")
|
||||
local dpi = xresources.apply_dpi
|
||||
|
||||
local theme = {}
|
||||
|
||||
theme.font = "Fira Code Nerd Font 10"
|
||||
theme.tasklist_disable_icon = true
|
||||
theme.wibar_height = 30
|
||||
|
||||
theme.bg_normal = "#111c22" -- hsl(200 35% 10%)
|
||||
theme.bg_focus = "#316781" -- hsl(200 45% 35%)
|
||||
theme.bg_urgent = "#814c31" -- hsl(20 45% 35%)
|
||||
theme.bg_minimize = "#454f54" -- hsl(200 10% 30%)
|
||||
theme.bg_systray = theme.bg_normal
|
||||
theme.tasklist_bg_focus = "#1c3b4a" -- hsl(200 45% 20%)
|
||||
|
||||
theme.fg_normal = "#8f9ca3" -- hsl(200 10% 60%)
|
||||
theme.fg_focus = "#abb5ba" -- hsl(200 10% 70%)
|
||||
theme.fg_urgent = theme.bg_focus
|
||||
theme.fg_minimize = theme.fg_normal
|
||||
theme.taglist_fg_empty = "#454f54" -- hsl(200 10% 30%)
|
||||
|
||||
theme.gap_single_client = false
|
||||
theme.useless_gap = dpi(1)
|
||||
theme.border_width = dpi(2)
|
||||
theme.border_normal = "#73848c" -- hsl(200 10% 50%)
|
||||
theme.border_focus = "#b25e34" -- hsl(20 55% 45%)
|
||||
theme.border_marked = "#3488b2" -- hsl(200 55% 45%)
|
||||
|
||||
theme.bg_wallpaper = "#454f54" -- hsl(200 10% 30%)
|
||||
|
||||
theme.hotkeys_font = theme.font
|
||||
theme.hotkeys_description_font = theme.font
|
||||
theme.hotkeys_bg = theme.bg_minimize
|
||||
theme.hotkeys_modifiers_fg = theme.border_focus
|
||||
|
||||
-- You can use your own layout icons like this:
|
||||
theme.layout_fairh = themes_path .. "default/layouts/fairhw.png"
|
||||
theme.layout_fairv = themes_path .. "default/layouts/fairvw.png"
|
||||
theme.layout_floating = themes_path .. "default/layouts/floatingw.png"
|
||||
theme.layout_magnifier = themes_path .. "default/layouts/magnifierw.png"
|
||||
theme.layout_max = themes_path .. "default/layouts/maxw.png"
|
||||
theme.layout_fullscreen = themes_path .. "default/layouts/fullscreenw.png"
|
||||
theme.layout_tilebottom = themes_path .. "default/layouts/tilebottomw.png"
|
||||
theme.layout_tileleft = themes_path .. "default/layouts/tileleftw.png"
|
||||
theme.layout_tile = themes_path .. "default/layouts/tilew.png"
|
||||
theme.layout_tiletop = themes_path .. "default/layouts/tiletopw.png"
|
||||
theme.layout_spiral = themes_path .. "default/layouts/spiralw.png"
|
||||
theme.layout_dwindle = themes_path .. "default/layouts/dwindlew.png"
|
||||
theme.layout_cornernw = themes_path .. "default/layouts/cornernww.png"
|
||||
theme.layout_cornerne = themes_path .. "default/layouts/cornernew.png"
|
||||
theme.layout_cornersw = themes_path .. "default/layouts/cornersww.png"
|
||||
theme.layout_cornerse = themes_path .. "default/layouts/cornersew.png"
|
||||
|
||||
return theme
|
||||
57
awesome/.config/awesome/theme_light.lua
Normal file
57
awesome/.config/awesome/theme_light.lua
Normal file
@@ -0,0 +1,57 @@
|
||||
local themes_path = require("gears.filesystem").get_themes_dir()
|
||||
|
||||
local xresources = require("beautiful.xresources")
|
||||
local dpi = xresources.apply_dpi
|
||||
|
||||
local theme = {}
|
||||
|
||||
theme.font = "Fira Code Nerd Font 10"
|
||||
theme.tasklist_disable_icon = true
|
||||
theme.wibar_height = 30
|
||||
|
||||
theme.bg_normal = "#111c22" -- hsl(200 35% 10%)
|
||||
theme.bg_focus = "#d0e3fb" -- hsl(214 85% 90%)
|
||||
theme.bg_urgent = "#f2d1a6" -- hsl(34 75% 80%)
|
||||
theme.bg_minimize = "#8596ad" -- hsl(214 20% 60%)
|
||||
theme.bg_systray = theme.bg_normal
|
||||
theme.tasklist_bg_focus = "#a6c7f2" -- hsl(214 75% 80%)
|
||||
|
||||
theme.fg_normal = "#8f9ca3" -- hsl(200 10% 60%)
|
||||
theme.fg_focus = "#454b54" -- hsl(214 10% 30%)
|
||||
theme.fg_urgent = "#70675c" -- hsl(34 10% 40%)
|
||||
theme.fg_minimize = "#70675c" -- hsl(34 10% 40%)
|
||||
theme.taglist_fg_empty = theme.fg_minimize
|
||||
|
||||
theme.gap_single_client = false
|
||||
theme.useless_gap = dpi(1)
|
||||
theme.border_width = dpi(2)
|
||||
theme.border_normal = theme.bg_minimize
|
||||
theme.border_focus = "#df8c20" -- hsl(34 75% 50%)
|
||||
theme.border_marked = "#2073df" -- hsl(214 75% 50%)
|
||||
|
||||
theme.bg_wallpaper = theme.fg_normal
|
||||
|
||||
theme.hotkeys_font = theme.font
|
||||
theme.hotkeys_description_font = theme.font
|
||||
theme.hotkeys_bg = theme.border_normal
|
||||
theme.hotkeys_modifiers_fg = theme.bg_focus
|
||||
|
||||
-- You can use your own layout icons like this:
|
||||
theme.layout_fairh = themes_path .. "default/layouts/fairhw.png"
|
||||
theme.layout_fairv = themes_path .. "default/layouts/fairvw.png"
|
||||
theme.layout_floating = themes_path .. "default/layouts/floatingw.png"
|
||||
theme.layout_magnifier = themes_path .. "default/layouts/magnifierw.png"
|
||||
theme.layout_max = themes_path .. "default/layouts/maxw.png"
|
||||
theme.layout_fullscreen = themes_path .. "default/layouts/fullscreenw.png"
|
||||
theme.layout_tilebottom = themes_path .. "default/layouts/tilebottomw.png"
|
||||
theme.layout_tileleft = themes_path .. "default/layouts/tileleftw.png"
|
||||
theme.layout_tile = themes_path .. "default/layouts/tilew.png"
|
||||
theme.layout_tiletop = themes_path .. "default/layouts/tiletopw.png"
|
||||
theme.layout_spiral = themes_path .. "default/layouts/spiralw.png"
|
||||
theme.layout_dwindle = themes_path .. "default/layouts/dwindlew.png"
|
||||
theme.layout_cornernw = themes_path .. "default/layouts/cornernww.png"
|
||||
theme.layout_cornerne = themes_path .. "default/layouts/cornernew.png"
|
||||
theme.layout_cornersw = themes_path .. "default/layouts/cornersww.png"
|
||||
theme.layout_cornerse = themes_path .. "default/layouts/cornersew.png"
|
||||
|
||||
return theme
|
||||
@@ -1,37 +1,53 @@
|
||||
#!/bin/sh
|
||||
|
||||
REQUIRED="$1"
|
||||
|
||||
check_dependency() {
|
||||
local CMD="$1"
|
||||
shift
|
||||
for REQ in "$@"; do
|
||||
if [ "$REQ" = "$REQUIRED" ]; then
|
||||
which "$CMD"
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
echo '# required:'
|
||||
for CMD in \
|
||||
zsh \
|
||||
git \
|
||||
cc \
|
||||
make \
|
||||
setxkbmap \
|
||||
slock \
|
||||
systemctl \
|
||||
xmodmap \
|
||||
xrandr \
|
||||
xrdb \
|
||||
xset \
|
||||
xsetroot \
|
||||
hsetroot \
|
||||
xsettingsd \
|
||||
sed \
|
||||
pkill \
|
||||
dmenu \
|
||||
dmenu_run \
|
||||
xss-lock \
|
||||
exa \
|
||||
fzf \
|
||||
; do
|
||||
which "$CMD"
|
||||
done
|
||||
|
||||
check_dependency zsh dwm hypr
|
||||
check_dependency git dwm hypr
|
||||
check_dependency cc dwm
|
||||
check_dependency make dwm
|
||||
check_dependency setxkbmap dwm
|
||||
check_dependency slock dwm
|
||||
check_dependency systemctl dwm hypr
|
||||
check_dependency xmodmap dwm
|
||||
check_dependency xrandr dwm
|
||||
check_dependency xrdb dwm
|
||||
check_dependency xset dwm
|
||||
check_dependency xsetroot dwm
|
||||
check_dependency hsetroot dwm
|
||||
check_dependency xsettingsd dwm
|
||||
check_dependency sed dwm hypr
|
||||
check_dependency pkill dwm
|
||||
check_dependency dmenu dwm
|
||||
check_dependency dmenu_run dwm
|
||||
check_dependency xss-lock dwm
|
||||
check_dependency exa dwm hypr
|
||||
check_dependency fzf dwm hypr
|
||||
check_dependency Hyprland hypr
|
||||
check_dependency hyprctl hypr
|
||||
check_dependency alacritty hypr
|
||||
check_dependency swaylock hypr
|
||||
check_dependency waybar hypr
|
||||
check_dependency wofi hypr
|
||||
|
||||
echo -e '\n# optional:'
|
||||
for CMD in \
|
||||
sx \
|
||||
picom \
|
||||
compton \
|
||||
xbacklight; do
|
||||
which "$CMD"
|
||||
done
|
||||
|
||||
check_dependency sx dwm
|
||||
check_dependency picom dwm
|
||||
check_dependency compton dwm
|
||||
check_dependency xbacklight dwm
|
||||
check_dependency wl-copy hypr
|
||||
check_dependency wl-paste hypr
|
||||
|
||||
43
compile_tools.sh
Executable file
43
compile_tools.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
|
||||
mkdir -p tools/.local/bin
|
||||
|
||||
uid=$(id -u):$(id -g)
|
||||
|
||||
go-install() {
|
||||
echo "build $1"
|
||||
docker exec -u "$uid" dotfiles-go go install -ldflags="-s -w" "$@"
|
||||
}
|
||||
|
||||
cargo-install() {
|
||||
B="$1"
|
||||
shift
|
||||
echo "build $B"
|
||||
docker exec -u "$uid" dotfiles-rust cargo install --quiet "$@"
|
||||
docker exec -u "$uid" dotfiles-rust cp "/usr/local/cargo/bin/$B" /rust/bin
|
||||
strip "tools/.local/bin/$B"
|
||||
}
|
||||
|
||||
docker kill dotfiles-go && sleep 3 || :
|
||||
docker run --rm -d --name dotfiles-go -e HOME=/go -v ./tools/.local/bin:/go/bin golang:1.25.1-alpine3.22 tail -f /dev/null
|
||||
docker exec dotfiles-go chown "$uid" /go
|
||||
|
||||
go-install github.com/junegunn/fzf@latest
|
||||
go-install github.com/gokcehan/lf@latest
|
||||
go-install github.com/rs/curlie@latest
|
||||
|
||||
docker kill dotfiles-go
|
||||
|
||||
docker kill dotfiles-rust && sleep 3 || :
|
||||
docker run --rm -d --name dotfiles-rust -v ./tools/.local/bin:/rust/bin rust:1.90-bullseye tail -f /dev/null
|
||||
|
||||
cargo-install zoxide zoxide --locked
|
||||
cargo-install rg ripgrep
|
||||
cargo-install fd fd-find
|
||||
cargo-install bat bat --locked
|
||||
cargo-install eza eza
|
||||
cargo-install delta git-delta
|
||||
cargo-install jj --bin jj jj-cli --locked
|
||||
cargo-install lazyjj lazyjj --locked
|
||||
|
||||
docker kill dotfiles-rust
|
||||
175
dk/.config/dk/dkrc
Executable file
175
dk/.config/dk/dkrc
Executable file
@@ -0,0 +1,175 @@
|
||||
#!/bin/sh
|
||||
|
||||
# determine where to place the log file
|
||||
logfile="$HOME/.dkrc.log"
|
||||
[ -d "$HOME/.local/share/xorg" ] && logfile="$HOME/.local/share/xorg/dkrc.log"
|
||||
: > "$logfile"
|
||||
|
||||
# load sxhkd for keybinds
|
||||
pgrep sxhkd || sxhkd -c "$HOME/.config/dk/sxhkdrc" &
|
||||
|
||||
# spawn a scratchpad terminal if not already (see sxhkdrc and rules for binds/setup)
|
||||
# pgrep -f "st -c scratchpad" || st -c scratchpad &
|
||||
|
||||
# adjust border widths based on the DPI of the monitor
|
||||
px=$(xrandr | grep ' connected' | tail -n1 | grep -o '[0-9]\+x[0-9]\+' | cut -d'x' -f2)
|
||||
mm=$(xrandr | grep ' connected' | tail -n1 | grep -o '[0-9]\+mm' | tail -n1 | sed 's/mm//')
|
||||
dpi=$(( (px / mm) * 25 ))
|
||||
|
||||
if [ $dpi -ge 140 ]; then
|
||||
border_width=5
|
||||
border_outer_width=3
|
||||
elif [ $dpi -ge 120 ]; then
|
||||
border_width=4
|
||||
border_outer_width=2
|
||||
else
|
||||
border_width=2
|
||||
border_outer_width=1
|
||||
fi
|
||||
|
||||
{ # compound command to redirect all output
|
||||
|
||||
# workspace settings
|
||||
# ------------------------
|
||||
|
||||
# initialize 6 workspaces (1-6) (default: 1/monitor)
|
||||
dkcmd set numws=10
|
||||
|
||||
# default workspace '_' values used when allocating new workspaces
|
||||
# can be applied to all existing workspaces when passed 'apply' after ws=_
|
||||
dkcmd set ws=_ apply layout=tile master=1 stack=3 gap=0 msplit=0.5 ssplit=0.5
|
||||
|
||||
# use grid layout, padding, and gaps on last workspace
|
||||
#dkcmd set ws=6 layout=grid pad left=200 right=200 top=100 bottom=100 gap=50
|
||||
|
||||
# change workspace names (default: number == name -> 1:1, 2:2, 3:3....)
|
||||
# dkcmd set \
|
||||
# ws=1 name="edit" \
|
||||
# ws=2 name="web" \
|
||||
# ws=3 name="😀" \
|
||||
# ws=4 name="😠" \
|
||||
# ws=5 name="5" \
|
||||
# ws=6 name="6" \
|
||||
|
||||
# enable static workspaces assigned to monitors (relevant for multiple monitors)
|
||||
monitors=$(polybar -m | sed 's/+/:/g' | awk -F: '{print $3, $1}' | sort -n | cut -d' ' -f2 | xargs)
|
||||
mon1=$(echo $monitors | cut -d' ' -f1)
|
||||
mon2=$(echo $monitors | cut -d' ' -f2)
|
||||
mon3=$(echo $monitors | cut -d' ' -f3)
|
||||
if [ -z "$mon2" ]; then
|
||||
mon2="$mon1"
|
||||
mon3="$mon1"
|
||||
elif [ -z "$mon3" ]; then
|
||||
mon3="$mon1"
|
||||
fi
|
||||
dkcmd set static_ws=true \
|
||||
ws=1 mon=$mon2 \
|
||||
ws=2 mon=$mon2 \
|
||||
ws=3 mon=$mon2 \
|
||||
ws=4 mon=$mon2 \
|
||||
ws=5 mon=$mon2 \
|
||||
ws=6 mon=$mon2 \
|
||||
ws=7 mon=$mon2 \
|
||||
ws=8 mon=$mon2 \
|
||||
ws=9 mon=$mon1 \
|
||||
ws=10 mon=$mon3
|
||||
|
||||
# global settings
|
||||
# ---------------------
|
||||
|
||||
# focus windows when receiving activation and enable focus-follows-mouse
|
||||
dkcmd set focus_open=true focus_urgent=true focus_mouse=true
|
||||
|
||||
# place clients at the tail and ignore size hints on tiled windows
|
||||
dkcmd set tile_tohead=0 tile_hints=false
|
||||
|
||||
# minimum width/height for resizing, and minimum allowed on-screen when moving
|
||||
dkcmd set win_minwh=50 win_minxy=10
|
||||
|
||||
# disable gaps and borders in single window layouts
|
||||
dkcmd set smart_gap=true smart_border=true
|
||||
|
||||
# define mouse mod and move/resize buttons
|
||||
dkcmd set mouse mod=mod4 move=button1 resize=button3
|
||||
|
||||
# obey motif border hints on windows that draw their own (steam, easyeffects, etc.)
|
||||
dkcmd set obey_motif=true
|
||||
|
||||
|
||||
# borders
|
||||
# ---------
|
||||
|
||||
# traditional
|
||||
# set border width and colour for each window state
|
||||
# dkcmd set border width=$border_width colour focus='#6699cc' unfocus='#000000' urgent='#ee5555'
|
||||
|
||||
# alternative
|
||||
# enable split borders and colours, width is overall width, outer_width consumes some of width.
|
||||
# outer_width must be less than width, outer_width of 0 will be single borders
|
||||
dkcmd set border width=$border_width outer_width=$border_outer_width \
|
||||
colour \
|
||||
focus='#6699cc' \
|
||||
unfocus='#444444' \
|
||||
urgent='#ee5555' \
|
||||
outer_focus='#222222' \
|
||||
outer_unfocus='#222222' \
|
||||
outer_urgent='#222222'
|
||||
|
||||
|
||||
# window rules
|
||||
# --------------
|
||||
|
||||
# rule class, instance, and title regex are *always* case INSENSITIVE
|
||||
|
||||
# open window(s) on a specific workspace (assigned monitor)
|
||||
# dkcmd rule class="^gimp$" ws=2
|
||||
|
||||
# open window(s) on a monitor by number or name (active workspace on monitor)
|
||||
# dkcmd rule class="^chromium$" mon="HDMI-A-0"
|
||||
|
||||
# open window(s) and use a callback function (user defined in config.h)
|
||||
# we also ignore_cfg=true to stop the window from being resized on it's own from events
|
||||
# eg. mpv --x11-name=albumart /path/to/media
|
||||
# dkcmd rule class="^mpv$" instance="^albumart$" float=true ignore_cfg=true callback=albumart bw=0
|
||||
|
||||
# open window(s) in a floating state
|
||||
dkcmd rule class="^(pavucontrol|transmission-gtk|steam|lxappearance)$" float=true
|
||||
|
||||
# open window(s) with a specific geometry and coordinates (floating only!)
|
||||
# dkcmd rule class="^google-chrome$" title="^open files$" float=true w=1280 h=720
|
||||
|
||||
# open window(s) with ignore_msg=true to avoid focus being grabbed and changing workspace
|
||||
# dkcmd rule class="^TelegramDesktop$" ignore_msg=true
|
||||
|
||||
# define some terminals and allow them to be absorbed by spawned windows
|
||||
dkcmd rule class="^(st|st-256color|urxvt|kitty|alacritty|xterm|xterm-256color)$" terminal=true
|
||||
|
||||
# set a window to never absorb other windows, like the xev event tester
|
||||
dkcmd rule title="^Event Tester$" no_absorb=true
|
||||
|
||||
# send a window to the scratchpad
|
||||
dkcmd rule class="^scratchpad$" scratch=true
|
||||
|
||||
# focus window and workspace on opening
|
||||
# dkcmd rule class="^firefox$" ws=1 focus=true
|
||||
|
||||
# update or remove an existing rule with the same match patterns
|
||||
# dkcmd rule class="^firefox$" mon="HDMI-A-0"
|
||||
# dkcmd rule remove class="^firefox$"
|
||||
|
||||
# apply current rule set to all existing windows (used mainly for WM restart)
|
||||
dkcmd rule apply '*'
|
||||
|
||||
# delete all rules
|
||||
# dkcmd rule remove '*'
|
||||
|
||||
} >> "$logfile" 2>&1 # append responses
|
||||
|
||||
# inform of any errors in a notification
|
||||
if grep -q 'error:' "$logfile"; then
|
||||
hash notify-send && notify-send -t 0 -u critical "dkrc has errors" \
|
||||
"$(awk '/error:/ {sub(/^error: /, ""); gsub(/</, "\<"); print}' "$logfile")"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exit 0
|
||||
117
dk/.config/dk/sxhkdrc
Normal file
117
dk/.config/dk/sxhkdrc
Normal file
@@ -0,0 +1,117 @@
|
||||
# sxhkdrc for use with dk
|
||||
#########################################################
|
||||
|
||||
# launcher
|
||||
mod4 + p
|
||||
dmenu_run -fn 'Fira Code Nerd Font Ret:size=13'
|
||||
|
||||
# terminal
|
||||
mod4 + shift + Return
|
||||
st
|
||||
|
||||
mod4 + ctrl + shift + Return
|
||||
st-abduco-tabbed
|
||||
|
||||
# screenshot and selection capture
|
||||
{_,mod4 + }@Print
|
||||
scrot {_,-s}
|
||||
|
||||
# dedicated volume keys
|
||||
{XF86AudioRaiseVolume,XF86AudioLowerVolume}
|
||||
pamixer {-i,-d} 2
|
||||
|
||||
# dedicated backlight keys
|
||||
{XF86MonBrightnessUp,XF86MonBrightnessDown}
|
||||
xbacklight {+10,-10}
|
||||
|
||||
# alt volume keys
|
||||
mod4 + {Insert,Delete}
|
||||
pamixer {-i,-d} 2
|
||||
|
||||
# reload sxhkd
|
||||
mod4 + shift + x
|
||||
pkill -USR1 -x sxhkd
|
||||
|
||||
|
||||
|
||||
# quit dk
|
||||
mod4 + shift + q
|
||||
dkcmd exit
|
||||
|
||||
# reload dkrc
|
||||
mod4 + shift + r
|
||||
$HOME/.config/dk/dkrc
|
||||
|
||||
# restart dk
|
||||
mod4 + ctrl + shift + r
|
||||
dkcmd restart
|
||||
|
||||
# focus next or previous window
|
||||
mod4 + {j,k}
|
||||
dkcmd win focus {next,prev}
|
||||
|
||||
# close window, swap tiled window in/out of master, cycle tiled windows in place
|
||||
mod4 + {q,space,Tab}
|
||||
dkcmd win {kill,swap,cycle}
|
||||
|
||||
# toggle fullscreen and fake fullscreen (enable manipulating fullscreen window)
|
||||
{_,mod4 + }F11
|
||||
dkcmd win {full,fakefull}
|
||||
|
||||
# toggle floating, sticky, or scratchpad
|
||||
mod4 + shift + {space,s,u}
|
||||
dkcmd win {float,stick,scratch}
|
||||
# alternatively to scratch a window by class "scratchpad"
|
||||
#dkcmd win {float,stick,scratchpad scratch}
|
||||
|
||||
# move window, signed (+/-) for relative changes, for tiled windows
|
||||
# y coord changes will move the window up/down the stack
|
||||
mod4 + shift + {h,j,k,l}
|
||||
dkcmd win resize {x=-20,y=+20,y=-20,x=+20}
|
||||
|
||||
# resize window, signed (+/-) for relative changes
|
||||
mod4 + ctrl + {h,j,k,l}
|
||||
dkcmd win resize {w=-20,h=+20,h=-20,w=+20}
|
||||
|
||||
# view, send, or follow to a workspace (by number)
|
||||
mod4 + {_,shift + ,ctrl + }{1-9,0}
|
||||
dkcmd ws {view,send,follow} {1-9,10}
|
||||
|
||||
# view, send, or follow to the next, previous, last active,
|
||||
# next non-empty, or prev non-empty workspace
|
||||
mod4 + {_,shift + ,ctrl + }{bracketleft,bracketright,BackSpace,Left,Right}
|
||||
dkcmd ws {view,send,follow} {prev,next,last,prevne,nextne}
|
||||
|
||||
# view, send, or follow to the next, previous, or last active monitor
|
||||
mod4 + {_,shift + ,ctrl + }{comma,period,backslash}
|
||||
dkcmd mon {view,send,follow} {prev,next,last}
|
||||
|
||||
# change active workspace layout or cycle between them
|
||||
mod4 + {t,r,m,g,s,w,f,u,c}
|
||||
dkcmd set layout {tile,rtile,mono,grid,spiral,dwindle,none,tstack,cycle}
|
||||
|
||||
# change number of windows in master or first stack
|
||||
mod4 + {_,shift + }{i,d}
|
||||
dkcmd set {master,stack} {+1,-1}
|
||||
|
||||
# change gap width
|
||||
mod4 + {equal,minus}
|
||||
dkcmd set gap {+5,-5}
|
||||
|
||||
# change border widths
|
||||
mod4 + ctrl + {_,shift + }{equal,minus}
|
||||
dkcmd set border {width,outer_width} {+1,-1}
|
||||
|
||||
# lock screen
|
||||
mod4 + ctrl + shift + l
|
||||
slock
|
||||
|
||||
# suspend
|
||||
mod4 + ctrl + shift + s
|
||||
systemctl suspend
|
||||
|
||||
# toggle light/dark theme
|
||||
mod4 + F6
|
||||
lupan-set-theme toggle
|
||||
|
||||
# vim:ft=sxhkdrc
|
||||
4
foot/.config/foot/foot.ini
Normal file
4
foot/.config/foot/foot.ini
Normal file
@@ -0,0 +1,4 @@
|
||||
[main]
|
||||
font = Fira Code Nerd Font:size=11
|
||||
|
||||
include = /usr/share/foot/themes/nord
|
||||
4
hyprland/.config/hypr/five-rotated.conf
Normal file
4
hyprland/.config/hypr/five-rotated.conf
Normal file
@@ -0,0 +1,4 @@
|
||||
monitor=DP-1,highres,0x0,2,transform,1
|
||||
monitor=HDMI-A-2,highres,1080x0,2
|
||||
|
||||
# vim: ft=hyprlang
|
||||
4
hyprland/.config/hypr/five.conf
Normal file
4
hyprland/.config/hypr/five.conf
Normal file
@@ -0,0 +1,4 @@
|
||||
monitor=DP-1,highres,0x0,2
|
||||
monitor=HDMI-A-2,highres,1920x0,2
|
||||
|
||||
# vim: ft=hyprlang
|
||||
151
hyprland/.config/hypr/hyprland.conf
Normal file
151
hyprland/.config/hypr/hyprland.conf
Normal file
@@ -0,0 +1,151 @@
|
||||
source = ~/.config/hypr/white.conf
|
||||
|
||||
input {
|
||||
kb_layout = pl
|
||||
kb_options = ctrl:nocaps
|
||||
}
|
||||
|
||||
general {
|
||||
gaps_in = 3
|
||||
gaps_out = 4
|
||||
layout = master
|
||||
border_size = 3
|
||||
col.inactive_border = 0xff5387ac
|
||||
col.active_border = 0xffac7853
|
||||
}
|
||||
|
||||
dwindle {
|
||||
preserve_split = true
|
||||
}
|
||||
|
||||
decoration {
|
||||
rounding = 4
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
misc {
|
||||
disable_hyprland_logo = true
|
||||
disable_splash_rendering = true
|
||||
disable_autoreload = true
|
||||
background_color = 0xff808080
|
||||
}
|
||||
|
||||
binds {
|
||||
workspace_back_and_forth = true
|
||||
}
|
||||
|
||||
$menu = wofi -S run
|
||||
$terminal = alacritty || kitty
|
||||
|
||||
$mainMod = SUPER
|
||||
|
||||
bind = $mainMod, P, exec, $menu
|
||||
bind = $mainMod SHIFT, Return, exec, $terminal
|
||||
bind = $mainMod ALT, Return, exec, $terminal
|
||||
bind = $mainMod, Return, layoutmsg,swapwithmaster master
|
||||
bind = $mainMod CONTROL SHIFT, Q, exit
|
||||
bind = $mainMod, Q, exec, hyprctl reload
|
||||
bind = $mainMod CONTROL SHIFT, C, killactive
|
||||
bind = $mainMod CONTROL SHIFT, L, exec, swaylock -c 263c59
|
||||
bind = $mainMod ALT, O, exec, swaylock -c 263c59
|
||||
bind = $mainMod CONTROL SHIFT, S, exec, swaylock -c 263c59
|
||||
bind = $mainMod CONTROL SHIFT, S, exec, systemctl suspend
|
||||
bind = $mainMod ALT, S, exec, swaylock -c 263c59
|
||||
bind = $mainMod ALT, S, exec, systemctl suspend
|
||||
bind = $mainMod CONTROL, Space, togglefloating
|
||||
bind = $mainMod, D, exec, hyprctl keyword general:layout "dwindle"
|
||||
bind = $mainMod, M, exec, hyprctl keyword general:layout "master"
|
||||
bind = $mainMod, F, fullscreen, 0
|
||||
bind = $mainMod SHIFT, F, fullscreen, 1
|
||||
bind = $mainMod ALT, F, fullscreen, 1
|
||||
bind = $mainMod, U, layoutmsg, togglesplit
|
||||
bind = $mainMod, I, layoutmsg, cycleprev
|
||||
bind = $mainMod, O, layoutmsg, cyclenext
|
||||
bind = $mainMod, A, focuscurrentorlast
|
||||
bind = $mainMod SHIFT, I, layoutmsg, swapprev
|
||||
bind = $mainMod SHIFT, O, layoutmsg, swapnext
|
||||
bind = $mainMod CONTROL, I, layoutmsg, removemaster
|
||||
bind = $mainMod CONTROL, O, layoutmsg, addmaster
|
||||
bind = $mainMod SHIFT, F6, exec, ~/bin/lupan-set-theme toggle
|
||||
bind = $mainMod ALT, T, exec, ~/bin/lupan-set-theme toggle
|
||||
|
||||
bind = $mainMod, h, movefocus, l
|
||||
bind = $mainMod, j, movefocus, d
|
||||
bind = $mainMod, k, movefocus, u
|
||||
bind = $mainMod, l, movefocus, r
|
||||
|
||||
bind = $mainMod SHIFT, h, swapwindow, l
|
||||
bind = $mainMod SHIFT, j, swapwindow, d
|
||||
bind = $mainMod SHIFT, k, swapwindow, u
|
||||
bind = $mainMod SHIFT, l, swapwindow, r
|
||||
|
||||
bind = $mainMod ALT, h, swapwindow, l
|
||||
bind = $mainMod ALT, j, swapwindow, d
|
||||
bind = $mainMod ALT, k, swapwindow, u
|
||||
bind = $mainMod ALT, l, swapwindow, r
|
||||
|
||||
bind = $mainMod CONTROL, h, layoutmsg, orientationleft
|
||||
bind = $mainMod CONTROL, j, layoutmsg, orientationbottom
|
||||
bind = $mainMod CONTROL, k, layoutmsg, orientationtop
|
||||
bind = $mainMod CONTROL, l, layoutmsg, orientationright
|
||||
|
||||
# Switch workspaces with mainMod + [0-9]
|
||||
bind = $mainMod, 1, workspace, 1
|
||||
bind = $mainMod, 2, workspace, 2
|
||||
bind = $mainMod, 3, workspace, 3
|
||||
bind = $mainMod, 4, workspace, 4
|
||||
bind = $mainMod, 5, workspace, 5
|
||||
bind = $mainMod, 6, workspace, 6
|
||||
bind = $mainMod, 7, workspace, 7
|
||||
bind = $mainMod, 8, workspace, 8
|
||||
bind = $mainMod, 9, workspace, 9
|
||||
bind = $mainMod, 0, workspace, 10
|
||||
|
||||
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||
|
||||
bind = $mainMod ALT, 1, movetoworkspace, 1
|
||||
bind = $mainMod ALT, 2, movetoworkspace, 2
|
||||
bind = $mainMod ALT, 3, movetoworkspace, 3
|
||||
bind = $mainMod ALT, 4, movetoworkspace, 4
|
||||
bind = $mainMod ALT, 5, movetoworkspace, 5
|
||||
bind = $mainMod ALT, 6, movetoworkspace, 6
|
||||
bind = $mainMod ALT, 7, movetoworkspace, 7
|
||||
bind = $mainMod ALT, 8, movetoworkspace, 8
|
||||
bind = $mainMod ALT, 9, movetoworkspace, 9
|
||||
bind = $mainMod ALT, 0, movetoworkspace, 10
|
||||
|
||||
bind = $mainMod, right, workspace, m+1
|
||||
bind = $mainMod, left, workspace, m-1
|
||||
|
||||
# Switch workspaces on current monitor with mainMod + Control + [0-9]
|
||||
bind = $mainMod CONTROL, 1, focusworkspaceoncurrentmonitor, 1
|
||||
bind = $mainMod CONTROL, 2, focusworkspaceoncurrentmonitor, 2
|
||||
bind = $mainMod CONTROL, 3, focusworkspaceoncurrentmonitor, 3
|
||||
bind = $mainMod CONTROL, 4, focusworkspaceoncurrentmonitor, 4
|
||||
bind = $mainMod CONTROL, 5, focusworkspaceoncurrentmonitor, 5
|
||||
bind = $mainMod CONTROL, 6, focusworkspaceoncurrentmonitor, 6
|
||||
bind = $mainMod CONTROL, 7, focusworkspaceoncurrentmonitor, 7
|
||||
bind = $mainMod CONTROL, 8, focusworkspaceoncurrentmonitor, 8
|
||||
bind = $mainMod CONTROL, 9, focusworkspaceoncurrentmonitor, 9
|
||||
bind = $mainMod CONTROL, 0, focusworkspaceoncurrentmonitor, 10
|
||||
|
||||
bindm = $mainMod,mouse:272,movewindow
|
||||
bindm = $mainMod,mouse:273,resizewindow
|
||||
|
||||
exec-once = waybar
|
||||
exec-once = swayidle -w timeout 300 'swaylock -f -c 263c59' before-sleep 'swaylock -f -c 263c59'
|
||||
|
||||
# vim: ft=hyprlang
|
||||
5
hyprland/.config/hypr/seven.conf
Normal file
5
hyprland/.config/hypr/seven.conf
Normal file
@@ -0,0 +1,5 @@
|
||||
monitor=eDP-1,prefered,0x0,1.5
|
||||
monitor=DP-1,highres,1280x0,2
|
||||
monitor=HDMI-A-1,highres,3200x0,2
|
||||
|
||||
# vim: ft=hyprlang
|
||||
10
hyprland/.config/hypr/white.conf
Normal file
10
hyprland/.config/hypr/white.conf
Normal file
@@ -0,0 +1,10 @@
|
||||
env = LIBVA_DRIVER_NAME,nvidia
|
||||
env = XDG_SESSION_TYPE,wayland
|
||||
env = GBM_BACKEND,nvidia-drm
|
||||
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
||||
env = WLR_NO_HARDWARE_CURSORS,1
|
||||
|
||||
monitor=DP-1,highres,0x0,2
|
||||
monitor=DP-2,highres,1920x0,2
|
||||
|
||||
# vim: ft=hyprlang
|
||||
13
hyprland/.config/waybar/config
Normal file
13
hyprland/.config/waybar/config
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"layer": "top",
|
||||
"position": "top",
|
||||
"modules-left": [
|
||||
"hyprland/workspaces",
|
||||
"hyprland/window"
|
||||
],
|
||||
"modules-right": [
|
||||
"tray",
|
||||
"clock"
|
||||
],
|
||||
"reload_style_on_change": true,
|
||||
}
|
||||
12
hyprland/.config/waybar/dark.css
Normal file
12
hyprland/.config/waybar/dark.css
Normal file
@@ -0,0 +1,12 @@
|
||||
* {
|
||||
background-color: #3f4947;
|
||||
color: #9bafac;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
border-bottom: 3px solid #9bafac;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
border-bottom: 3px solid #a65959;
|
||||
}
|
||||
13
hyprland/.config/waybar/light.css
Normal file
13
hyprland/.config/waybar/light.css
Normal file
@@ -0,0 +1,13 @@
|
||||
* {
|
||||
background-color: #dde4e3;
|
||||
color: #2c3131;
|
||||
}
|
||||
|
||||
|
||||
#workspaces button.active {
|
||||
border-bottom: 3px solid #2c3131;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
border-bottom: 3px solid #9e412e;
|
||||
}
|
||||
25
hyprland/.config/waybar/style.css
Normal file
25
hyprland/.config/waybar/style.css
Normal file
@@ -0,0 +1,25 @@
|
||||
@import url("file:///home/lupan/.config/waybar/dark.css");
|
||||
|
||||
* {
|
||||
font-family: Fira Code Nerd Font;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
#workspaces {
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0 3px;
|
||||
border-radius: 0;
|
||||
border-bottom: 3px solid transparent;
|
||||
}
|
||||
|
||||
#window {
|
||||
border-bottom: 3px solid transparent;
|
||||
}
|
||||
|
||||
#clock {
|
||||
padding: 0 0.5rem;
|
||||
border-bottom: 3px solid transparent;
|
||||
}
|
||||
32
kitty/.config/kitty/kitty.conf
Normal file
32
kitty/.config/kitty/kitty.conf
Normal file
@@ -0,0 +1,32 @@
|
||||
font_family FiraCode Nerd
|
||||
font_size 11
|
||||
|
||||
cursor_blink_interval 0
|
||||
|
||||
tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title} {index}"
|
||||
|
||||
action_alias launch_tab launch --type=tab --cwd=current
|
||||
|
||||
map ctrl+shift+n launch_tab tmux
|
||||
map ctrl+shift+t launch_tab tmux attach
|
||||
map ctrl+shift+s launch_tab zsh
|
||||
map ctrl+shift+6 no_op
|
||||
|
||||
map ctrl+shift+h previous_tab
|
||||
map ctrl+shift+l next_tab
|
||||
map ctrl+shift+p goto_tab -1
|
||||
map ctrl+alt+1 goto_tab 1
|
||||
map ctrl+alt+2 goto_tab 2
|
||||
map ctrl+alt+3 goto_tab 3
|
||||
map ctrl+alt+4 goto_tab 4
|
||||
map ctrl+alt+5 goto_tab 5
|
||||
map ctrl+alt+6 goto_tab 6
|
||||
map ctrl+alt+7 goto_tab 7
|
||||
map ctrl+alt+8 goto_tab 8
|
||||
map ctrl+alt+9 goto_tab 9
|
||||
map ctrl+alt+0 goto_tab 10
|
||||
|
||||
# BEGIN_KITTY_THEME
|
||||
# Afterglow
|
||||
include current-theme.conf
|
||||
# END_KITTY_THEME
|
||||
9
lazygit/.config/lazygit/config.yml
Normal file
9
lazygit/.config/lazygit/config.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
os:
|
||||
edit: 'nvim {{filename}}'
|
||||
editAtLine: 'nvim +{{line}} {{filename}}'
|
||||
editAtLineAndWait: 'nvim +{{line}} {{filename}}'
|
||||
editInTerminal: true
|
||||
openDirInEditor: 'nvim {{dir}}'
|
||||
|
||||
gui:
|
||||
nerdFontsVersion: "3"
|
||||
@@ -1,122 +0,0 @@
|
||||
-- [[ Configure LSP ]]
|
||||
-- This function gets run when an LSP connects to a particular buffer.
|
||||
local on_attach = function(_, bufnr)
|
||||
local nmap = function(keys, func, desc)
|
||||
if desc then
|
||||
desc = 'LSP: ' .. desc
|
||||
end
|
||||
|
||||
vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc })
|
||||
end
|
||||
|
||||
nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
|
||||
nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
|
||||
|
||||
nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition')
|
||||
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
|
||||
nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation')
|
||||
nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition')
|
||||
nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
|
||||
nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
|
||||
|
||||
-- See `:help K` for why this keymap
|
||||
nmap('K', vim.lsp.buf.hover, 'Hover Documentation')
|
||||
nmap('<leader>k', vim.lsp.buf.signature_help, 'Signature Documentation')
|
||||
|
||||
-- Lesser used LSP functionality
|
||||
nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
|
||||
nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder')
|
||||
nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder')
|
||||
nmap('<leader>wl', function()
|
||||
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
||||
end, '[W]orkspace [L]ist Folders')
|
||||
|
||||
-- Create a command `:Format` local to the LSP buffer
|
||||
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_)
|
||||
vim.lsp.buf.format()
|
||||
end, { desc = 'Format current buffer with LSP' })
|
||||
end
|
||||
|
||||
-- Enable the following language servers. They will automatically be installed.
|
||||
local servers = {
|
||||
clangd = {},
|
||||
gopls = {},
|
||||
-- pyright = {},
|
||||
rust_analyzer = {},
|
||||
tsserver = {},
|
||||
|
||||
lua_ls = {
|
||||
Lua = {
|
||||
workspace = { checkThirdParty = false },
|
||||
telemetry = { enable = false },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
-- Setup neovim lua configuration
|
||||
require('neodev').setup()
|
||||
|
||||
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers
|
||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
|
||||
|
||||
-- Ensure the servers above are installed
|
||||
local mason_lspconfig = require 'mason-lspconfig'
|
||||
|
||||
mason_lspconfig.setup {
|
||||
ensure_installed = vim.tbl_keys(servers),
|
||||
}
|
||||
|
||||
mason_lspconfig.setup_handlers {
|
||||
function(server_name)
|
||||
require('lspconfig')[server_name].setup {
|
||||
capabilities = capabilities,
|
||||
on_attach = on_attach,
|
||||
settings = servers[server_name],
|
||||
}
|
||||
end,
|
||||
}
|
||||
|
||||
-- [[ Configure nvim-cmp ]]
|
||||
-- See `:help cmp`
|
||||
local cmp = require 'cmp'
|
||||
local luasnip = require 'luasnip'
|
||||
require('luasnip.loaders.from_vscode').lazy_load()
|
||||
luasnip.config.setup {}
|
||||
|
||||
cmp.setup {
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
luasnip.lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert {
|
||||
['<C-n>'] = cmp.mapping.select_next_item(),
|
||||
['<C-p>'] = cmp.mapping.select_prev_item(),
|
||||
['<C-d>'] = cmp.mapping.scroll_docs(-4),
|
||||
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
||||
['<C-Space>'] = cmp.mapping.complete {},
|
||||
['<Tab>'] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
elseif luasnip.expand_or_locally_jumpable() then
|
||||
luasnip.expand_or_jump()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { 'i', 's' }),
|
||||
['<S-Tab>'] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
elseif luasnip.locally_jumpable(-1) then
|
||||
luasnip.jump(-1)
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { 'i', 's' }),
|
||||
},
|
||||
sources = {
|
||||
{ name = 'nvim_lsp' },
|
||||
{ name = 'luasnip' },
|
||||
},
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
local ls = require "luasnip"
|
||||
|
||||
ls.config.set_config {
|
||||
history = true,
|
||||
updateevents = "TextChanged,TextChangedI",
|
||||
}
|
||||
|
||||
require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/snippets" })
|
||||
@@ -1,20 +0,0 @@
|
||||
pcall(require('telescope').load_extension, 'fzf')
|
||||
|
||||
local builtin = require('telescope.builtin')
|
||||
vim.keymap.set('n', '<leader><space>', builtin.buffers, { desc = '[ ] Find existing buffers' })
|
||||
vim.keymap.set('n', '<leader>?', builtin.oldfiles, { desc = '[?] Find recently opened buffers' })
|
||||
vim.keymap.set('n', '<leader>/', function()
|
||||
builtin.current_buffer_fuzzy_find(require("telescope.themes").get_dropdown { previewer = false })
|
||||
end, { desc = '[?] Find recently opened buffers' })
|
||||
|
||||
vim.keymap.set('n', '<leader>gf', builtin.git_files, { desc = '[G]it [f]iles' })
|
||||
vim.keymap.set('n', '<leader>gs', builtin.git_status, { desc = '[G]it [s]tatus' })
|
||||
vim.keymap.set('n', '<leader>ff', builtin.find_files, { desc = '[F]ind [f]iles' })
|
||||
vim.keymap.set('n', '<leader>fg', builtin.live_grep, { desc = '[F]ind [g]rep' })
|
||||
vim.keymap.set('n', '<leader>fw', builtin.grep_string, { desc = '[F]ind [w]ord' })
|
||||
vim.keymap.set('n', '<leader>fh', builtin.help_tags, { desc = '[F]ind [h]elp (tags)' })
|
||||
vim.keymap.set('n', '<leader>fd', builtin.diagnostics, { desc = '[F]ind [d]iagnostics' })
|
||||
|
||||
vim.keymap.set('n', '<leader>fF', function()
|
||||
builtin.find_files { hidden = true }
|
||||
end, { desc = '[F]find [F]iles (with hidden)' })
|
||||
@@ -1,30 +0,0 @@
|
||||
|
||||
print('lsp')
|
||||
|
||||
local lsp = require('lsp-zero').preset({})
|
||||
|
||||
lsp.on_attach(function(client, bufnr)
|
||||
-- see :help lsp-zero-keybindings
|
||||
-- to learn the available actions
|
||||
lsp.default_keymaps({buffer = bufnr})
|
||||
end)
|
||||
|
||||
lsp.setup()
|
||||
|
||||
-- You need to setup `cmp` after lsp-zero
|
||||
local cmp = require('cmp')
|
||||
local cmp_action = require('lsp-zero').cmp_action()
|
||||
|
||||
cmp.setup({
|
||||
mapping = {
|
||||
-- `Enter` key to confirm completion
|
||||
-- ['<CR>'] = cmp.mapping.confirm({select = false}),
|
||||
|
||||
-- Ctrl+Space to trigger completion menu
|
||||
['<C-Space>'] = cmp.mapping.complete(),
|
||||
|
||||
-- Navigate between snippet placeholder
|
||||
['<C-f>'] = cmp_action.luasnip_jump_forward(),
|
||||
['<C-b>'] = cmp_action.luasnip_jump_backward(),
|
||||
}
|
||||
})
|
||||
@@ -1,70 +0,0 @@
|
||||
local org = require('orgmode')
|
||||
org.setup_ts_grammar()
|
||||
|
||||
require('nvim-treesitter.configs').setup {
|
||||
ensure_installed = { 'c', 'cpp', 'go', 'haskell', 'lua', 'python', 'rust', 'tsx', 'typescript', 'vimdoc', 'vim' },
|
||||
auto_install = false,
|
||||
highlight = {
|
||||
enable = true,
|
||||
additional_vim_regex_highlighting = { 'org' },
|
||||
},
|
||||
ensure_installed = { 'org' }, -- Or run :TSUpdate org
|
||||
indent = { enable = true },
|
||||
incremental_selection = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
init_selection = '<c-space>',
|
||||
node_incremental = '<c-space>',
|
||||
scope_incremental = '<c-s>',
|
||||
node_decremental = '<C-p>',
|
||||
},
|
||||
},
|
||||
textobjects = {
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true,
|
||||
keymaps = {
|
||||
['aa'] = '@parameter.outer',
|
||||
['ia'] = '@parameter.inner',
|
||||
['af'] = '@function.outer',
|
||||
['if'] = '@function.inner',
|
||||
['ac'] = '@class.outer',
|
||||
['ic'] = '@class.inner',
|
||||
},
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
set_jumps = true,
|
||||
goto_next_start = {
|
||||
[']m'] = '@function.outer',
|
||||
[']]'] = '@class.outer',
|
||||
},
|
||||
goto_next_end = {
|
||||
[']M'] = '@function.outer',
|
||||
[']['] = '@class.outer',
|
||||
},
|
||||
goto_previous_start = {
|
||||
['[m'] = '@function.outer',
|
||||
['[['] = '@class.outer',
|
||||
},
|
||||
goto_previous_end = {
|
||||
['[M'] = '@function.outer',
|
||||
['[]'] = '@class.outer',
|
||||
},
|
||||
},
|
||||
swap = {
|
||||
enable = true,
|
||||
swap_next = {
|
||||
['<leader>a'] = '@parameter.inner',
|
||||
},
|
||||
swap_previous = {
|
||||
['<leader>A'] = '@parameter.inner',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
org.setup({
|
||||
org_agenda_files = { '~/org/*.org' },
|
||||
org_default_notes_file = '~/org/capture.org',
|
||||
})
|
||||
@@ -1 +0,0 @@
|
||||
vim.keymap.set('n', '<leader>gg', ':Git grep ')
|
||||
@@ -1 +1,57 @@
|
||||
require("lupan")
|
||||
require("config.options")
|
||||
require("config.remap")
|
||||
require("config.lsp")
|
||||
|
||||
local ok, paq = pcall(require, "paq")
|
||||
if ok then
|
||||
paq({
|
||||
"EdenEast/nightfox.nvim",
|
||||
"stevearc/conform.nvim",
|
||||
"otavioschwanck/arrow.nvim",
|
||||
"folke/flash.nvim",
|
||||
"folke/snacks.nvim",
|
||||
"stevearc/oil.nvim",
|
||||
{
|
||||
"jake-stewart/multicursor.nvim",
|
||||
branch = "1.0",
|
||||
},
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||
branch = "master",
|
||||
},
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
branch = "master",
|
||||
build = ":TSUpdate",
|
||||
},
|
||||
})
|
||||
else
|
||||
print("plugin paq missing")
|
||||
end
|
||||
|
||||
local function load_plugin(name, setup)
|
||||
local cfg = require(setup)
|
||||
name = cfg.main or name
|
||||
local ok, plugin = pcall(require, name)
|
||||
if ok then
|
||||
if cfg.config then
|
||||
cfg.config(cfg.opts)
|
||||
else
|
||||
plugin.setup(cfg.opts)
|
||||
end
|
||||
if cfg.init then
|
||||
cfg.init(plugin)
|
||||
end
|
||||
else
|
||||
print("plugin " .. name .. " missing")
|
||||
end
|
||||
end
|
||||
|
||||
load_plugin("arrow", "plugins.arrow")
|
||||
load_plugin("nightfox", "plugins.colorscheme")
|
||||
load_plugin("conform", "plugins.conform")
|
||||
load_plugin("flash", "plugins.flash")
|
||||
load_plugin("multicursor-nvim", "plugins.multicursor")
|
||||
load_plugin("oil", "plugins.oil")
|
||||
load_plugin("snacks", "plugins.snacks")
|
||||
load_plugin("treesitter", "plugins.treesitter")
|
||||
|
||||
12
nvim/.config/nvim/lazy-lock.json
Normal file
12
nvim/.config/nvim/lazy-lock.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"arrow.nvim": { "branch": "master", "commit": "6e0f726f55f99332dd726a53effd6813786b6d49" },
|
||||
"conform.nvim": { "branch": "master", "commit": "1bf8b5b9caee51507aa51eaed3da5b0f2595c6b9" },
|
||||
"flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
|
||||
"multicursor.nvim": { "branch": "1.0", "commit": "a6cf4e7daaf10a6b14bb7838caf779f0de5070cd" },
|
||||
"nightfox.nvim": { "branch": "main", "commit": "ba47d4b4c5ec308718641ba7402c143836f35aa9" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef" },
|
||||
"oil.nvim": { "branch": "master", "commit": "7e1cd7703ff2924d7038476dcbc04b950203b902" },
|
||||
"snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" }
|
||||
}
|
||||
5
nvim/.config/nvim/lsp/clangd.lua
Normal file
5
nvim/.config/nvim/lsp/clangd.lua
Normal file
@@ -0,0 +1,5 @@
|
||||
return {
|
||||
cmd = { "clangd" },
|
||||
filetypes = { "c", "cpp" },
|
||||
root_markers = { ".git" },
|
||||
}
|
||||
5
nvim/.config/nvim/lsp/gopls.lua
Normal file
5
nvim/.config/nvim/lsp/gopls.lua
Normal file
@@ -0,0 +1,5 @@
|
||||
return {
|
||||
cmd = { "gopls" },
|
||||
filetypes = { "go", "gomod", "gowork", "gosum", "gotmpl" },
|
||||
root_markers = { "go.mod", "go.work", ".git" },
|
||||
}
|
||||
5
nvim/.config/nvim/lsp/lua_ls.lua
Normal file
5
nvim/.config/nvim/lsp/lua_ls.lua
Normal file
@@ -0,0 +1,5 @@
|
||||
return {
|
||||
cmd = 'lua-language-server',
|
||||
filetypes = { 'lua' },
|
||||
rootmarkers = { '.git' },
|
||||
}
|
||||
5
nvim/.config/nvim/lsp/ols.lua
Normal file
5
nvim/.config/nvim/lsp/ols.lua
Normal file
@@ -0,0 +1,5 @@
|
||||
return {
|
||||
cmd = { "ols" },
|
||||
filetypes = { "odin" },
|
||||
root_markers = { ".git" },
|
||||
}
|
||||
5
nvim/.config/nvim/lsp/typescript-language-server.lua
Normal file
5
nvim/.config/nvim/lsp/typescript-language-server.lua
Normal file
@@ -0,0 +1,5 @@
|
||||
return {
|
||||
cmd = { "typescript-language-server", "--stdio" },
|
||||
filetypes = { "javascript", "typescript", "javascriptreact", "typescriptreact" },
|
||||
root_markers = { "package.json", "tsconfig.json", ".git" },
|
||||
}
|
||||
57
nvim/.config/nvim/lua/config/colorscheme.lua
Normal file
57
nvim/.config/nvim/lua/config/colorscheme.lua
Normal file
@@ -0,0 +1,57 @@
|
||||
local M = {}
|
||||
|
||||
local home = os.getenv("HOME")
|
||||
local filename = home .. "/.lightmode"
|
||||
|
||||
local colorschemes = nil
|
||||
|
||||
function M.set_colorschemes(dark, light)
|
||||
colorschemes = { dark = dark, light = light }
|
||||
end
|
||||
|
||||
function M.terminalbg()
|
||||
if vim.uv.fs_stat(filename) then
|
||||
return "light"
|
||||
else
|
||||
return "dark"
|
||||
end
|
||||
end
|
||||
|
||||
function M.update_colorscheme(only_if_changed)
|
||||
local next = M.terminalbg()
|
||||
if not only_if_changed or next ~= vim.o.background then
|
||||
vim.o.background = next
|
||||
if colorschemes then
|
||||
vim.cmd.colorscheme(colorschemes[next])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.toggle_colorscheme()
|
||||
if vim.o.background == "dark" then
|
||||
vim.o.background = "light"
|
||||
else
|
||||
vim.o.background = "dark"
|
||||
end
|
||||
if colorschemes then
|
||||
vim.cmd.colorscheme(colorschemes[vim.o.background])
|
||||
end
|
||||
end
|
||||
|
||||
local w = vim.uv.new_fs_event()
|
||||
|
||||
local function watch(fname)
|
||||
w:start(
|
||||
fname,
|
||||
{},
|
||||
vim.schedule_wrap(function(...)
|
||||
M.update_colorscheme(true)
|
||||
w:stop()
|
||||
watch(fname)
|
||||
end)
|
||||
)
|
||||
end
|
||||
|
||||
watch(home)
|
||||
|
||||
return M
|
||||
17
nvim/.config/nvim/lua/config/lazy.lua
Normal file
17
nvim/.config/nvim/lua/config/lazy.lua
Normal file
@@ -0,0 +1,17 @@
|
||||
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({ { import = "plugins" } })
|
||||
26
nvim/.config/nvim/lua/config/lsp.lua
Normal file
26
nvim/.config/nvim/lua/config/lsp.lua
Normal file
@@ -0,0 +1,26 @@
|
||||
vim.lsp.enable({
|
||||
"clangd",
|
||||
"gopls",
|
||||
"lua_ls",
|
||||
"ols",
|
||||
"typescript-language-server",
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
group = vim.api.nvim_create_augroup("lsp-keys-complete", { clear = true }),
|
||||
callback = function(event)
|
||||
vim.lsp.completion.enable(true, event.data.client_id, event.data.bufnr, {
|
||||
convert = function(item)
|
||||
return { abbr = item.label:gsub("%b()", "") }
|
||||
end,
|
||||
})
|
||||
vim.keymap.set("n", "<leader>A", vim.lsp.buf.code_action)
|
||||
vim.keymap.set("i", "<C-space>", vim.lsp.completion.get)
|
||||
vim.keymap.set("n", "<leader>k", function()
|
||||
vim.diagnostic.jump({ float = true, count = -1 })
|
||||
end)
|
||||
vim.keymap.set("n", "<leader>j", function()
|
||||
vim.diagnostic.jump({ float = true, count = 1 })
|
||||
end)
|
||||
end,
|
||||
})
|
||||
10
nvim/.config/nvim/lua/config/options.lua
Normal file
10
nvim/.config/nvim/lua/config/options.lua
Normal file
@@ -0,0 +1,10 @@
|
||||
vim.opt.shortmess = vim.opt.shortmess + "I"
|
||||
|
||||
vim.g.mapleader = " "
|
||||
vim.g.maplocalleader = " \\"
|
||||
|
||||
vim.opt.number = true
|
||||
vim.opt.relativenumber = true
|
||||
vim.opt.signcolumn = "yes"
|
||||
|
||||
vim.opt.timeout = false
|
||||
6
nvim/.config/nvim/lua/config/remap.lua
Normal file
6
nvim/.config/nvim/lua/config/remap.lua
Normal file
@@ -0,0 +1,6 @@
|
||||
vim.keymap.set("n", "<M-h>", "<C-w>h")
|
||||
vim.keymap.set("n", "<M-k>", "<C-w>k")
|
||||
vim.keymap.set("n", "<M-j>", "<C-w>j")
|
||||
vim.keymap.set("n", "<M-l>", "<C-w>l")
|
||||
|
||||
vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<cr>")
|
||||
@@ -1,13 +0,0 @@
|
||||
-- [[ Highlight on yank ]]
|
||||
-- See `:help vim.highlight.on_yank()`
|
||||
local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true })
|
||||
vim.api.nvim_create_autocmd('TextYankPost', {
|
||||
callback = function()
|
||||
vim.highlight.on_yank()
|
||||
end,
|
||||
group = highlight_group,
|
||||
pattern = '*',
|
||||
})
|
||||
|
||||
vim.cmd('autocmd BufWritePre *.go :Format')
|
||||
vim.cmd('autocmd BufWritePre *.lua :Format')
|
||||
@@ -1,5 +0,0 @@
|
||||
require("lupan.remap")
|
||||
require("lupan.lazy")
|
||||
require("lupan.options")
|
||||
require("lupan.autocmd")
|
||||
require("lupan.plugins")
|
||||
@@ -1,13 +0,0 @@
|
||||
-- Install package manager (`:help lazy.nvim.txt`)
|
||||
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
|
||||
if not vim.loop.fs_stat(lazypath) then
|
||||
vim.fn.system {
|
||||
'git',
|
||||
'clone',
|
||||
'--filter=blob:none',
|
||||
'https://github.com/folke/lazy.nvim.git',
|
||||
'--branch=stable',
|
||||
lazypath,
|
||||
}
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
@@ -1,41 +0,0 @@
|
||||
-- See `:help vim.o`
|
||||
|
||||
-- Set highlight on search
|
||||
vim.o.hlsearch = false
|
||||
|
||||
-- Make line numbers default
|
||||
vim.wo.number = true
|
||||
vim.wo.relativenumber = true
|
||||
|
||||
-- Enable mouse mode
|
||||
vim.o.mouse = 'a'
|
||||
|
||||
-- Sync clipboard between OS and Neovim.
|
||||
-- Remove this option if you want your OS clipboard to remain independent.
|
||||
-- See `:help 'clipboard'`
|
||||
vim.o.clipboard = 'unnamedplus'
|
||||
|
||||
-- Enable break indent
|
||||
vim.o.breakindent = true
|
||||
|
||||
-- Save undo history
|
||||
vim.o.undofile = true
|
||||
|
||||
-- Case-insensitive searching UNLESS \C or capital in search
|
||||
vim.o.ignorecase = true
|
||||
vim.o.smartcase = true
|
||||
|
||||
-- Keep signcolumn on by default
|
||||
vim.wo.signcolumn = 'yes'
|
||||
|
||||
-- Decrease update time
|
||||
vim.o.updatetime = 250
|
||||
vim.o.timeoutlen = 300
|
||||
|
||||
-- Set completeopt to have a better completion experience
|
||||
vim.o.completeopt = 'menuone,noselect'
|
||||
|
||||
-- NOTE: You should make sure your terminal supports this
|
||||
vim.o.termguicolors = true
|
||||
|
||||
vim.o.scrolloff = 8
|
||||
@@ -1,150 +0,0 @@
|
||||
require('lazy').setup({
|
||||
-- Fuzzy finder
|
||||
{
|
||||
'nvim-telescope/telescope.nvim',
|
||||
branch = '0.1.x',
|
||||
dependencies = {
|
||||
'nvim-lua/plenary.nvim' }
|
||||
},
|
||||
|
||||
-- Colorscheme
|
||||
{
|
||||
'neanias/everforest-nvim',
|
||||
priority = 1000,
|
||||
lazy = false,
|
||||
config = function()
|
||||
require("everforest").setup({
|
||||
background = 'hard',
|
||||
})
|
||||
vim.cmd.colorscheme 'everforest'
|
||||
end
|
||||
},
|
||||
|
||||
{
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter-textobjects',
|
||||
'nvim-orgmode/orgmode', -- as configured together
|
||||
},
|
||||
build =
|
||||
':TSUpdate'
|
||||
},
|
||||
|
||||
{
|
||||
-- Statusline (see `:help lualine.txt`)
|
||||
'nvim-lualine/lualine.nvim',
|
||||
opts = {
|
||||
options = {
|
||||
icons_enabled = false,
|
||||
theme = 'everforest',
|
||||
component_separators = '|',
|
||||
section_separators = '',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
-- Indentation guides (see `:help indent_blankline.txt`)
|
||||
'lukas-reineke/indent-blankline.nvim',
|
||||
opts = {
|
||||
char = '┊',
|
||||
show_trailing_blankline_indent = false,
|
||||
},
|
||||
},
|
||||
|
||||
-- "gc" to comment visual regions/lines
|
||||
{ 'numToStr/Comment.nvim', opts = {} },
|
||||
|
||||
'norcalli/nvim-colorizer.lua',
|
||||
|
||||
-- Undo browsing
|
||||
'mbbill/undotree',
|
||||
|
||||
-- Git
|
||||
'tpope/vim-fugitive',
|
||||
|
||||
-- Tabstops autodetected
|
||||
'tpope/vim-sleuth',
|
||||
|
||||
{
|
||||
-- LSP Configuration & Plugins
|
||||
'neovim/nvim-lspconfig',
|
||||
dependencies = {
|
||||
-- Automatically install LSPs to stdpath for neovim
|
||||
{ 'williamboman/mason.nvim', config = true },
|
||||
'williamboman/mason-lspconfig.nvim',
|
||||
|
||||
-- Useful status updates for LSP
|
||||
{ 'j-hui/fidget.nvim', tag = 'legacy', opts = {} },
|
||||
|
||||
-- Additional lua configuration, makes nvim stuff amazing!
|
||||
'folke/neodev.nvim',
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
-- Autocompletion
|
||||
'hrsh7th/nvim-cmp',
|
||||
dependencies = {
|
||||
-- Snippet Engine & its associated nvim-cmp source
|
||||
'L3MON4D3/LuaSnip',
|
||||
'saadparwaiz1/cmp_luasnip',
|
||||
|
||||
-- Adds LSP completion capabilities
|
||||
'hrsh7th/cmp-nvim-lsp',
|
||||
|
||||
-- Adds a number of user-friendly snippets
|
||||
'rafamadriz/friendly-snippets',
|
||||
},
|
||||
},
|
||||
|
||||
-- Show pending keybinds
|
||||
{ 'folke/which-key.nvim', opts = {} },
|
||||
|
||||
{
|
||||
-- Adds git releated signs to the gutter, as well as utilities for managing changes
|
||||
'lewis6991/gitsigns.nvim',
|
||||
opts = {
|
||||
-- See `:help gitsigns.txt`
|
||||
signs = {
|
||||
add = { text = '+' },
|
||||
change = { text = '~' },
|
||||
delete = { text = '_' },
|
||||
topdelete = { text = '‾' },
|
||||
changedelete = { text = '~' },
|
||||
},
|
||||
on_attach = function(bufnr)
|
||||
vim.keymap.set('n', '<leader>gp', require('gitsigns').prev_hunk,
|
||||
{ buffer = bufnr, desc = '[G]o to [P]revious Hunk' })
|
||||
vim.keymap.set('n', '<leader>gn', require('gitsigns').next_hunk, { buffer = bufnr, desc = '[G]o to [N]ext Hunk' })
|
||||
vim.keymap.set('n', '<leader>ph', require('gitsigns').preview_hunk, { buffer = bufnr, desc = '[P]review [H]unk' })
|
||||
vim.keymap.set('n', '<leader>sh', require('gitsigns').stage_hunk, { buffer = bufnr, desc = '[S]tage [H]unk' })
|
||||
end,
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
"kylechui/nvim-surround",
|
||||
version = "*", -- Use for stability; omit to use `main` branch for the latest features
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("nvim-surround").setup({})
|
||||
end
|
||||
},
|
||||
|
||||
{
|
||||
'akinsho/toggleterm.nvim',
|
||||
version = "*",
|
||||
opts = {
|
||||
direction = "float",
|
||||
open_mapping = [[<C-_>]],
|
||||
}
|
||||
},
|
||||
|
||||
'ggandor/lightspeed.nvim',
|
||||
|
||||
{
|
||||
'ThePrimeagen/harpoon',
|
||||
dependencies = { 'nvim-lua/plenary.nvim' },
|
||||
}
|
||||
})
|
||||
@@ -1,108 +0,0 @@
|
||||
vim.g.mapleader = ' '
|
||||
vim.g.maplocalleader = ' '
|
||||
|
||||
local key = vim.keymap.set
|
||||
local opts = { silent = true, noremap = true }
|
||||
|
||||
key('v', '<Space>', '<Nop>', { silent = true })
|
||||
|
||||
-- Remap for dealing with word wrap
|
||||
key('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
|
||||
key('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
|
||||
|
||||
key("n", "<leader>dd", ":Explore<cr>", { desc = "[D]isplay [d]irectory" })
|
||||
key("n", "<leader>dv", ":Vexplore<cr>", { desc = "[D]isplay directory ([v]ertical split)" })
|
||||
key("n", "<leader>dh", ":Sexplore<cr>", { desc = "[D]isplay [d]irectory ([h]orizontal split)" })
|
||||
key("n", "<leader>dt", ":Lexplore 30<cr>", { desc = "[D]isplay directory [t]oggle" })
|
||||
key("n", "<leader>ct", ":ColorizerToggle<cr>", { desc = "[C]olorizer [t]oggle" })
|
||||
key("n", "<leader>ut", ":UndotreeToggle<cr>", { desc = "[U]undotree [t]oggle" })
|
||||
|
||||
-- Diagnostic keymaps
|
||||
key('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' })
|
||||
key('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' })
|
||||
key('n', '<leader>e', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' })
|
||||
key('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' })
|
||||
|
||||
key('n', '<leader>N', ':bn<cr>', { desc = '[N]ext buffer' })
|
||||
key('n', '<leader>P', ':bp<cr>', { desc = '[P]revious buffer' })
|
||||
|
||||
key('n', '<leader>tc', ':tabnew<cr>', { desc = '[T]ab [c]reate' })
|
||||
key('n', '<leader>ts', ':tab split<cr>', { desc = '[T]ab [s]plit' })
|
||||
key('n', '<leader>tn', ':tabnext<cr>', { desc = '[T]ab [n]ext' })
|
||||
key('n', '<leader>tp', ':tabprevious<cr>', { desc = '[T]ab [p]revious' })
|
||||
|
||||
key('v', 'J', ":m '>+1<cr>gv=gv", { desc = "Move lines down" })
|
||||
key('v', 'K', ":m '<-2<cr>gv=gv", { desc = "Move lines up" })
|
||||
|
||||
-- Change window
|
||||
key('n', '<C-j>', '<C-w>j', opts)
|
||||
key('n', '<C-k>', '<C-w>k', opts)
|
||||
key('n', '<C-h>', '<C-w>h', opts)
|
||||
key('n', '<C-l>', '<C-w>l', opts)
|
||||
|
||||
-- Stay in key mode
|
||||
key('v', '<', '<gv', opts)
|
||||
key('v', '>', '>gv', opts)
|
||||
|
||||
-- Keep old value of register
|
||||
key('v', 'P', '"_dP', opts)
|
||||
|
||||
-- luasnip
|
||||
|
||||
vim.keymap.set({ 'i', 's' }, "<c-k>", function()
|
||||
local ls = require "luasnip"
|
||||
if ls.expand_or_jumpable() then
|
||||
ls.expand_or_jump()
|
||||
end
|
||||
end, { silent = true })
|
||||
|
||||
vim.keymap.set({ 'i', 's' }, "<c-j>", function()
|
||||
local ls = require "luasnip"
|
||||
if ls.jumpable(-1) then
|
||||
ls.jump(-1)
|
||||
end
|
||||
end, { silent = true })
|
||||
|
||||
vim.keymap.set({ 'i', 's' }, "<c-l>", function()
|
||||
local ls = require "luasnip"
|
||||
if ls.choice_active() then
|
||||
ls.change_choice(1)
|
||||
end
|
||||
end, { silent = true })
|
||||
|
||||
vim.keymap.set("n", "<leader>ss", "<cmd>source ~/.config/nvim/after/plugin/luasnip.lua<CR>",
|
||||
{ desc = "[S]nippets [s]ource" })
|
||||
|
||||
-- terminal
|
||||
|
||||
key('t', '<C-_>', '<C-\\><C-n>')
|
||||
|
||||
-- harpoon
|
||||
|
||||
key('n', '<leader>ha', function()
|
||||
require("harpoon.mark").add_file()
|
||||
end, { desc = '[H]arpoon [a]dd' })
|
||||
|
||||
key('n', '<leader>hm', function()
|
||||
require("harpoon.ui").toggle_quick_menu()
|
||||
end, { desc = '[H]arpoon toggle quick [m]enu' })
|
||||
|
||||
key('n', '<leader>hj', function()
|
||||
require("harpoon.ui").nav_next()
|
||||
end, { desc = '[H]arpoon next (j)' })
|
||||
|
||||
key('n', '<leader>hk', function()
|
||||
require("harpoon.ui").nav_prev()
|
||||
end, { desc = '[H]arpoon prev (k)' })
|
||||
|
||||
for i = 1, 9, 1 do
|
||||
key('n', '<leader>h' .. i, function()
|
||||
require("harpoon.ui").nav_file(i)
|
||||
end, { desc = '[H]arpoon nav_file [' .. i .. ']' })
|
||||
end
|
||||
|
||||
for i = 1, 9, 1 do
|
||||
key('n', '<leader>t' .. i, function()
|
||||
require("harpoon.term").gotoTerminal(i)
|
||||
end, { desc = '[H]arpoon nav_file [' .. i .. ']' })
|
||||
end
|
||||
7
nvim/.config/nvim/lua/plugins/arrow.lua
Normal file
7
nvim/.config/nvim/lua/plugins/arrow.lua
Normal file
@@ -0,0 +1,7 @@
|
||||
return {
|
||||
opts = {
|
||||
show_icons = false,
|
||||
leader_key = "_",
|
||||
buffer_leader_key = " m",
|
||||
},
|
||||
}
|
||||
16
nvim/.config/nvim/lua/plugins/colorscheme.lua
Normal file
16
nvim/.config/nvim/lua/plugins/colorscheme.lua
Normal file
@@ -0,0 +1,16 @@
|
||||
return {
|
||||
opts = {
|
||||
specs = {
|
||||
all = {
|
||||
syntax = {
|
||||
operator = "#bf8040",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
init = function()
|
||||
local cs = require("config.colorscheme")
|
||||
cs.set_colorschemes("nightfox", "dayfox")
|
||||
cs.update_colorscheme()
|
||||
end,
|
||||
}
|
||||
11
nvim/.config/nvim/lua/plugins/conform.lua
Normal file
11
nvim/.config/nvim/lua/plugins/conform.lua
Normal file
@@ -0,0 +1,11 @@
|
||||
return {
|
||||
opts = {
|
||||
formatters_by_ft = {
|
||||
lua = { "stylua" },
|
||||
},
|
||||
format_on_save = {
|
||||
timeout_ms = 500,
|
||||
lsp_format = "fallback",
|
||||
},
|
||||
},
|
||||
}
|
||||
24
nvim/.config/nvim/lua/plugins/flash.lua
Normal file
24
nvim/.config/nvim/lua/plugins/flash.lua
Normal file
@@ -0,0 +1,24 @@
|
||||
return {
|
||||
opts = {
|
||||
modes = {
|
||||
char = {
|
||||
enabled = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
init = function()
|
||||
local set = vim.keymap.set
|
||||
set({ "n", "x", "o" }, "\\", function()
|
||||
require("flash").jump()
|
||||
end, { desc = "Flash" })
|
||||
set({ "n", "x", "o" }, "=", function()
|
||||
require("flash").treesitter()
|
||||
end, { desc = "Flash Treesitter" })
|
||||
set({ "o" }, "r", function()
|
||||
require("flash").remote()
|
||||
end, { desc = "Remote Flash" })
|
||||
set({ "n", "x", "o" }, " t", function()
|
||||
require("flash").treesitter_search()
|
||||
end, { desc = "Treesitter Search" })
|
||||
end,
|
||||
}
|
||||
71
nvim/.config/nvim/lua/plugins/multicursor.lua
Normal file
71
nvim/.config/nvim/lua/plugins/multicursor.lua
Normal file
@@ -0,0 +1,71 @@
|
||||
return {
|
||||
init = function(mc)
|
||||
local set = vim.keymap.set
|
||||
|
||||
-- Add or skip cursor above/below the main cursor.
|
||||
set({ "n", "x" }, "<c-k>", function()
|
||||
mc.lineAddCursor(-1)
|
||||
end)
|
||||
set({ "n", "x" }, "<c-j>", function()
|
||||
mc.lineAddCursor(1)
|
||||
end)
|
||||
set({ "n", "x" }, "<leader><c-k>", function()
|
||||
mc.lineSkipCursor(-1)
|
||||
end)
|
||||
set({ "n", "x" }, "<leader><c-j>", function()
|
||||
mc.lineSkipCursor(1)
|
||||
end)
|
||||
|
||||
-- Add or skip adding a new cursor by matching word/selection
|
||||
set({ "n", "x" }, "<c-n>", function()
|
||||
mc.matchAddCursor(1)
|
||||
end)
|
||||
set({ "n", "x" }, "<leader><c-n>", function()
|
||||
mc.matchSkipCursor(1)
|
||||
end)
|
||||
set({ "n", "x" }, "<c-p>", function()
|
||||
mc.matchAddCursor(-1)
|
||||
end)
|
||||
set({ "n", "x" }, "<leader><c-p>", function()
|
||||
mc.matchSkipCursor(-1)
|
||||
end)
|
||||
|
||||
-- Add and remove cursors with control + left click.
|
||||
set("n", "<c-leftmouse>", mc.handleMouse)
|
||||
set("n", "<c-leftdrag>", mc.handleMouseDrag)
|
||||
set("n", "<c-leftrelease>", mc.handleMouseRelease)
|
||||
|
||||
-- Disable and enable cursors.
|
||||
set({ "n", "x" }, "<leader><c-q>", mc.toggleCursor)
|
||||
|
||||
-- Mappings defined in a keymap layer only apply when there are
|
||||
-- multiple cursors. This lets you have overlapping mappings.
|
||||
mc.addKeymapLayer(function(layerSet)
|
||||
-- Select a different cursor as the main one.
|
||||
layerSet({ "n", "x" }, "<left>", mc.prevCursor)
|
||||
layerSet({ "n", "x" }, "<right>", mc.nextCursor)
|
||||
|
||||
-- Delete the main cursor.
|
||||
layerSet({ "n", "x" }, "<leader>x", mc.deleteCursor)
|
||||
|
||||
-- Enable and clear cursors using escape.
|
||||
layerSet("n", "<esc>", function()
|
||||
if not mc.cursorsEnabled() then
|
||||
mc.enableCursors()
|
||||
else
|
||||
mc.clearCursors()
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
-- Customize how cursors look.
|
||||
local hl = vim.api.nvim_set_hl
|
||||
hl(0, "MultiCursorCursor", { reverse = true })
|
||||
hl(0, "MultiCursorVisual", { link = "Visual" })
|
||||
hl(0, "MultiCursorSign", { link = "SignColumn" })
|
||||
hl(0, "MultiCursorMatchPreview", { link = "Search" })
|
||||
hl(0, "MultiCursorDisabledCursor", { reverse = true })
|
||||
hl(0, "MultiCursorDisabledVisual", { link = "Visual" })
|
||||
hl(0, "MultiCursorDisabledSign", { link = "SignColumn" })
|
||||
end,
|
||||
}
|
||||
5
nvim/.config/nvim/lua/plugins/oil.lua
Normal file
5
nvim/.config/nvim/lua/plugins/oil.lua
Normal file
@@ -0,0 +1,5 @@
|
||||
return {
|
||||
init = function()
|
||||
vim.keymap.set("n", "<leader>-", "<cmd>Oil<cr>", { desc = "Oil file manager" })
|
||||
end,
|
||||
}
|
||||
177
nvim/.config/nvim/lua/plugins/snacks.lua
Normal file
177
nvim/.config/nvim/lua/plugins/snacks.lua
Normal file
@@ -0,0 +1,177 @@
|
||||
return {
|
||||
init = function()
|
||||
local set = vim.keymap.set
|
||||
|
||||
set("n", "<leader><space>", function()
|
||||
Snacks.picker.smart()
|
||||
end, { desc = "Smart Find Files" })
|
||||
|
||||
set("n", "<leader><space>", function()
|
||||
Snacks.picker.smart()
|
||||
end, { desc = "Smart Find Files" })
|
||||
|
||||
set("n", "<leader>a", function()
|
||||
Snacks.picker.buffers()
|
||||
end, { desc = "Buffers" })
|
||||
|
||||
set("n", "<leader>r", function()
|
||||
Snacks.picker.recent()
|
||||
end, { desc = "Recent files" })
|
||||
|
||||
set("n", "<leader>R", function()
|
||||
Snacks.picker.resume()
|
||||
end, { desc = "Resume" })
|
||||
|
||||
set("n", "<leader>b", function()
|
||||
Snacks.picker.lines()
|
||||
end, { desc = "Buffer lines" })
|
||||
|
||||
set("n", "<leader>B", function()
|
||||
Snacks.picker.grep_buffers()
|
||||
end, { desc = "Grep Open Buffers" })
|
||||
|
||||
set("n", "<leader>f", function()
|
||||
Snacks.picker.files()
|
||||
end, { desc = "Find Files" })
|
||||
|
||||
set("n", "<leader>s", function()
|
||||
Snacks.picker.grep()
|
||||
end, { desc = "Grep" })
|
||||
|
||||
set("n", "<leader>S", function()
|
||||
Snacks.picker.git_status()
|
||||
end, { desc = "Git Status" })
|
||||
|
||||
set("n", "<leader>g", function()
|
||||
Snacks.picker.git_files()
|
||||
end, { desc = "Find Git Files" })
|
||||
|
||||
set("n", "<leader>G", function()
|
||||
Snacks.picker.git_grep()
|
||||
end, { desc = "Git Grep" })
|
||||
|
||||
set("n", "<leader>l", function()
|
||||
Snacks.lazygit()
|
||||
end, { desc = "Lazygit" })
|
||||
|
||||
set("n", "<leader>L", function()
|
||||
Snacks.lazygit.log_file()
|
||||
end, { desc = "Lazygit log file" })
|
||||
|
||||
set("n", "<leader>n", function()
|
||||
Snacks.notifier.show_history()
|
||||
end, { desc = "Notification History" })
|
||||
|
||||
set("n", "<leader>N", function()
|
||||
Snacks.picker.notifications()
|
||||
end, { desc = "Notifications" })
|
||||
|
||||
set("n", "<leader>C", function()
|
||||
Snacks.picker.commands()
|
||||
end, { desc = "Commands" })
|
||||
|
||||
set("n", "<leader>h", function()
|
||||
Snacks.picker.keymaps()
|
||||
end, { desc = "Keymaps" })
|
||||
|
||||
set("n", "<leader>:", function()
|
||||
Snacks.picker.command_history()
|
||||
end, { desc = "Command History" })
|
||||
|
||||
set("n", '<leader>"', function()
|
||||
Snacks.picker.registers()
|
||||
end, { desc = "Registers" })
|
||||
|
||||
set("n", "<leader>$", function()
|
||||
Snacks.rename.rename_file()
|
||||
end, { desc = "Rename File" })
|
||||
|
||||
set("n", "<leader>z", function()
|
||||
Snacks.zen.zoom()
|
||||
end, { desc = "Toggle Zoom" })
|
||||
-- LSP
|
||||
|
||||
set("n", "gd", function()
|
||||
Snacks.picker.lsp_definitions()
|
||||
end, { desc = "Goto Definition" })
|
||||
|
||||
set("n", "gD", function()
|
||||
Snacks.picker.lsp_declarations()
|
||||
end, { desc = "Goto Declaration" })
|
||||
|
||||
set("n", "gr", function()
|
||||
Snacks.picker.lsp_references()
|
||||
end, { desc = "References" })
|
||||
|
||||
set("n", "gI", function()
|
||||
Snacks.picker.lsp_implementations()
|
||||
end, { desc = "Goto Implementation" })
|
||||
|
||||
set("n", "gy", function()
|
||||
Snacks.picker.lsp_type_definitions()
|
||||
end, { desc = "Goto T[y]pe Definition" })
|
||||
|
||||
set("n", "<leader>w", function()
|
||||
Snacks.picker.lsp_symbols()
|
||||
end, { desc = "LSP Symbols" })
|
||||
|
||||
set("n", "<leader>d", function()
|
||||
Snacks.picker.diagnostics_buffer()
|
||||
end, { desc = "Buffer Diagnostics" })
|
||||
|
||||
set("n", "<leader>D", function()
|
||||
Snacks.picker.diagnostics()
|
||||
end, { desc = "Diagnostics" })
|
||||
|
||||
set("n", "<leader>W", function()
|
||||
Snacks.picker.lsp_workspace_symbols()
|
||||
end, { desc = "LSP Workspace Symbols" })
|
||||
-- Terminal
|
||||
|
||||
set({ "n", "t" }, "<c-/>", function()
|
||||
Snacks.terminal()
|
||||
end, { desc = "Toggle Terminal" })
|
||||
|
||||
set({ "n", "t" }, "<c-_>", function()
|
||||
Snacks.terminal()
|
||||
end, { desc = "which_key_ignore" })
|
||||
|
||||
vim.api.nvim_create_autocmd("VimEnter", {
|
||||
callback = function()
|
||||
-- Setup some globals for debugging (lazy-loaded)
|
||||
_G.dd = function(...)
|
||||
Snacks.debug.inspect(...)
|
||||
end
|
||||
_G.bt = function()
|
||||
Snacks.debug.backtrace()
|
||||
end
|
||||
|
||||
-- Override print to use snacks for `:=` command
|
||||
if vim.fn.has("nvim-0.11") == 1 then
|
||||
vim._print = function(_, ...)
|
||||
dd(...)
|
||||
end
|
||||
else
|
||||
vim.print = _G.dd
|
||||
end
|
||||
|
||||
-- Create some toggle mappings
|
||||
Snacks.toggle.option("spell", { name = "Spelling" }):map("<leader>us")
|
||||
Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw")
|
||||
Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("<leader>uL")
|
||||
Snacks.toggle.diagnostics():map("<leader>ud")
|
||||
Snacks.toggle.line_number():map("<leader>ul")
|
||||
Snacks.toggle
|
||||
.option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 })
|
||||
:map("<leader>uc")
|
||||
Snacks.toggle.treesitter():map("<leader>uT")
|
||||
Snacks.toggle
|
||||
.option("background", { off = "light", on = "dark", name = "Dark Background" })
|
||||
:map("<leader>ub")
|
||||
Snacks.toggle.inlay_hints():map("<leader>uh")
|
||||
Snacks.toggle.indent():map("<leader>ug")
|
||||
Snacks.toggle.dim():map("<leader>uD")
|
||||
end,
|
||||
})
|
||||
end,
|
||||
}
|
||||
62
nvim/.config/nvim/lua/plugins/treesitter.lua
Normal file
62
nvim/.config/nvim/lua/plugins/treesitter.lua
Normal file
@@ -0,0 +1,62 @@
|
||||
return {
|
||||
main = "nvim-treesitter.configs",
|
||||
opts = {
|
||||
highlight = {
|
||||
enable = true,
|
||||
},
|
||||
textobjects = {
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true,
|
||||
keymaps = {
|
||||
["aa"] = "@parameter.outer",
|
||||
["ia"] = "@parameter.inner",
|
||||
["af"] = "@function.outer",
|
||||
["if"] = "@function.inner",
|
||||
["ac"] = "@class.outer",
|
||||
["ic"] = "@class.inner",
|
||||
["al"] = "@call.outer",
|
||||
["il"] = "@call.inner",
|
||||
["ao"] = "@loop.outer",
|
||||
["io"] = "@loop.inner",
|
||||
["ad"] = "@conditional.outer",
|
||||
["id"] = "@conditional.inner",
|
||||
["ar"] = "@return.outer",
|
||||
["ir"] = "@return.inner",
|
||||
["as"] = "@statement.outer",
|
||||
["ag"] = "@assignment.outer",
|
||||
["ig"] = "@assignment.inner",
|
||||
},
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
set_jumps = true,
|
||||
goto_next_start = {
|
||||
["]m"] = "@function.outer",
|
||||
["]]"] = "@class.outer",
|
||||
},
|
||||
goto_next_end = {
|
||||
["]M"] = "@function.outer",
|
||||
["]["] = "@class.outer",
|
||||
},
|
||||
goto_previous_start = {
|
||||
["[m"] = "@function.outer",
|
||||
["[["] = "@class.outer",
|
||||
},
|
||||
goto_previous_end = {
|
||||
["[M"] = "@function.outer",
|
||||
["[]"] = "@class.outer",
|
||||
},
|
||||
},
|
||||
swap = {
|
||||
enable = true,
|
||||
swap_next = {
|
||||
["<leader>p"] = "@parameter.inner",
|
||||
},
|
||||
swap_previous = {
|
||||
["<leader>P"] = "@parameter.inner",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
return {
|
||||
s("ct", t "-- TODO: ")
|
||||
}
|
||||
@@ -6,7 +6,7 @@ static const unsigned int snap = 32; /* snap pixel */
|
||||
static const int showbar = 1; /* 0 means no bar */
|
||||
static const int topbar = 1; /* 0 means bottom bar */
|
||||
static const char *fonts[] = { "FiraCode Nerd Font Ret:size=10" };
|
||||
static const char dmenufont[] = "FiraCode Nerd Font Ret:size=10";
|
||||
static const char dmenufont[] = "FiraCode Nerd Font Ret:size=10";
|
||||
static const char col_gray1[] = "#222222";
|
||||
static const char col_gray2[] = "#444444";
|
||||
static const char col_gray3[] = "#bbbbbb";
|
||||
@@ -16,7 +16,7 @@ static const char col_cyan[] = "#7dcfff";
|
||||
static const char *colors[][3] = {
|
||||
/* fg bg border */
|
||||
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
|
||||
[SchemeSel] = { col_gray4, col_blue, col_cyan },
|
||||
[SchemeSel] = { col_gray4, col_blue, col_cyan },
|
||||
};
|
||||
|
||||
/* tagging */
|
||||
@@ -46,7 +46,7 @@ static const Layout layouts[] = {
|
||||
};
|
||||
|
||||
/* key definitions */
|
||||
#define MODKEY Mod1Mask
|
||||
#define MODKEY Mod4Mask
|
||||
#define TAGKEYS(KEY,TAG) \
|
||||
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
|
||||
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
|
||||
@@ -58,32 +58,32 @@ static const Layout layouts[] = {
|
||||
|
||||
/* commands */
|
||||
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
|
||||
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_blue, "-sf", col_gray4, NULL };
|
||||
static const char *termcmd[] = { "st", NULL };
|
||||
static const char *lockcmd[] = { "slock", NULL };
|
||||
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_blue, "-sf", col_gray4, NULL };
|
||||
static const char *termcmd[] = { "st", NULL };
|
||||
static const char *lockcmd[] = { "slock", NULL };
|
||||
static const char *suspendcmd[] = { "systemctl", "suspend", NULL };
|
||||
static const char *toggletheme[] = { "lupan-set-theme", "toggle", NULL };
|
||||
|
||||
static const Key keys[] = {
|
||||
/* modifier key function argument */
|
||||
{ MODKEY|ControlMask, XK_p, spawn, {.v = dmenucmd } },
|
||||
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
||||
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
|
||||
{ MODKEY|ControlMask|ShiftMask, XK_l, spawn, {.v = lockcmd } },
|
||||
{ MODKEY|ControlMask|ShiftMask, XK_s, spawn, {.v = suspendcmd } },
|
||||
{ MODKEY|ShiftMask, XK_F6, spawn, {.v = toggletheme } },
|
||||
{ MODKEY|ControlMask, XK_b, togglebar, {0} },
|
||||
{ MODKEY|ControlMask, XK_j, focusstack, {.i = +1 } },
|
||||
{ MODKEY|ControlMask, XK_k, focusstack, {.i = -1 } },
|
||||
{ MODKEY|ControlMask, XK_i, incnmaster, {.i = +1 } },
|
||||
{ MODKEY|ControlMask, XK_d, incnmaster, {.i = -1 } },
|
||||
{ MODKEY|ControlMask, XK_h, setmfact, {.f = -0.05} },
|
||||
{ MODKEY|ControlMask, XK_l, setmfact, {.f = +0.05} },
|
||||
{ MODKEY, XK_b, togglebar, {0} },
|
||||
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
||||
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
||||
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
|
||||
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
|
||||
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
|
||||
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
|
||||
{ MODKEY, XK_Return, zoom, {0} },
|
||||
{ MODKEY, XK_Tab, view, {0} },
|
||||
{ MODKEY|ControlMask|ShiftMask, XK_c, killclient, {0} },
|
||||
{ MODKEY|ControlMask, XK_t, setlayout, {.v = &layouts[0]} },
|
||||
{ MODKEY|ControlMask, XK_f, setlayout, {.v = &layouts[1]} },
|
||||
{ MODKEY|ControlMask, XK_m, setlayout, {.v = &layouts[2]} },
|
||||
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
|
||||
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
||||
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
||||
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
||||
{ MODKEY, XK_space, setlayout, {0} },
|
||||
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
||||
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
||||
@@ -101,7 +101,7 @@ static const Key keys[] = {
|
||||
TAGKEYS( XK_7, 6)
|
||||
TAGKEYS( XK_8, 7)
|
||||
TAGKEYS( XK_9, 8)
|
||||
{ MODKEY|ControlMask|ShiftMask, XK_q, quit, {0} },
|
||||
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
||||
};
|
||||
|
||||
/* button definitions */
|
||||
|
||||
197
polybar/.config/polybar/config.ini
Normal file
197
polybar/.config/polybar/config.ini
Normal file
@@ -0,0 +1,197 @@
|
||||
;==========================================================
|
||||
;
|
||||
;
|
||||
; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
|
||||
; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
|
||||
; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
|
||||
; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
|
||||
; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
|
||||
; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
|
||||
;
|
||||
;
|
||||
; To learn more about how to configure Polybar
|
||||
; go to https://github.com/polybar/polybar
|
||||
;
|
||||
; The README contains a lot of information
|
||||
;
|
||||
;==========================================================
|
||||
|
||||
[common]
|
||||
priv = false
|
||||
|
||||
[colors]
|
||||
background = #282A2E
|
||||
background-alt = #373B41
|
||||
foreground = #C5C8C6
|
||||
primary = #F0C674
|
||||
secondary = #8ABEB7
|
||||
alert = #A54242
|
||||
disabled = #707880
|
||||
|
||||
[bar/bar]
|
||||
monitor = ${env:MONITOR:}
|
||||
width = 100%
|
||||
height = 24pt
|
||||
radius = 6
|
||||
|
||||
; dpi = 96
|
||||
|
||||
background = ${colors.background}
|
||||
foreground = ${colors.foreground}
|
||||
|
||||
line-size = 3pt
|
||||
|
||||
border-size = 4pt
|
||||
border-color = #00000000
|
||||
|
||||
padding-left = 0
|
||||
padding-right = 1
|
||||
|
||||
module-margin = 1
|
||||
|
||||
separator = |
|
||||
separator-foreground = ${colors.disabled}
|
||||
|
||||
font-0 = Fira Code Nerd Font:size=18;4
|
||||
|
||||
modules-left = xworkspaces xwindow
|
||||
modules-right = filesystem pulseaudio xkeyboard memory cpu wlan eth date
|
||||
|
||||
cursor-click = pointer
|
||||
cursor-scroll = ns-resize
|
||||
|
||||
enable-ipc = true
|
||||
|
||||
; wm-restack = generic
|
||||
; wm-restack = bspwm
|
||||
; wm-restack = i3
|
||||
|
||||
; override-redirect = true
|
||||
|
||||
; This module is not active by default (to enable it, add it to one of the
|
||||
; modules-* list above).
|
||||
; Please note that only a single tray can exist at any time. If you launch
|
||||
; multiple bars with this module, only a single one will show it, the others
|
||||
; will produce a warning. Which bar gets the module is timing dependent and can
|
||||
; be quite random.
|
||||
; For more information, see the documentation page for this module:
|
||||
; https://polybar.readthedocs.io/en/stable/user/modules/tray.html
|
||||
[module/systray]
|
||||
type = internal/tray
|
||||
|
||||
format-margin = 8pt
|
||||
tray-spacing = 16pt
|
||||
|
||||
[module/xworkspaces]
|
||||
type = internal/xworkspaces
|
||||
|
||||
group-by-monitor = false
|
||||
|
||||
label-active = %name%
|
||||
label-active-background = ${colors.background-alt}
|
||||
label-active-underline= ${colors.primary}
|
||||
label-active-padding = 1
|
||||
|
||||
label-occupied = %name%
|
||||
label-occupied-padding = 1
|
||||
|
||||
label-urgent = %name%
|
||||
label-urgent-background = ${colors.alert}
|
||||
label-urgent-padding = 1
|
||||
|
||||
label-empty = %name%
|
||||
label-empty-foreground = ${colors.disabled}
|
||||
label-empty-padding = 1
|
||||
|
||||
[module/xwindow]
|
||||
type = internal/xwindow
|
||||
label = %title:0:60:...%
|
||||
|
||||
[module/filesystem]
|
||||
type = internal/fs
|
||||
interval = 25
|
||||
|
||||
mount-0 = /
|
||||
|
||||
label-mounted = %{F#F0C674}%mountpoint%%{F-} %percentage_used%%
|
||||
|
||||
label-unmounted = %mountpoint% not mounted
|
||||
label-unmounted-foreground = ${colors.disabled}
|
||||
|
||||
[module/pulseaudio]
|
||||
type = internal/pulseaudio
|
||||
|
||||
format-volume-prefix = "VOL "
|
||||
format-volume-prefix-foreground = ${colors.primary}
|
||||
format-volume = <label-volume>
|
||||
|
||||
label-volume = %percentage%%
|
||||
|
||||
label-muted = muted
|
||||
label-muted-foreground = ${colors.disabled}
|
||||
|
||||
click-middle = "polybar-msg action eth module_toggle; polybar-msg action wlan module_toggle"
|
||||
click-right = pavucontrol
|
||||
|
||||
[module/xkeyboard]
|
||||
type = internal/xkeyboard
|
||||
blacklist-0 = num lock
|
||||
|
||||
label-layout = %layout%
|
||||
label-layout-foreground = ${colors.primary}
|
||||
|
||||
label-indicator-padding = 2
|
||||
label-indicator-margin = 1
|
||||
label-indicator-foreground = ${colors.background}
|
||||
label-indicator-background = ${colors.secondary}
|
||||
|
||||
[module/memory]
|
||||
type = internal/memory
|
||||
interval = 2
|
||||
format-prefix = "RAM "
|
||||
format-prefix-foreground = ${colors.primary}
|
||||
label = %percentage_used:2%%
|
||||
|
||||
[module/cpu]
|
||||
type = internal/cpu
|
||||
interval = 2
|
||||
format-prefix = "CPU "
|
||||
format-prefix-foreground = ${colors.primary}
|
||||
label = %percentage:2%%
|
||||
|
||||
[module/temperature]
|
||||
type = internal/temperature
|
||||
|
||||
[network-base]
|
||||
type = internal/network
|
||||
interval = 5
|
||||
format-connected = <label-connected>
|
||||
format-disconnected = <label-disconnected>
|
||||
label-disconnected = %{F#F0C674}%ifname%%{F#707880} disconnected
|
||||
hidden = ${common.priv}
|
||||
|
||||
[module/wlan]
|
||||
inherit = network-base
|
||||
interface-type = wireless
|
||||
label-connected = %{F#F0C674}%ifname%%{F-} %essid% %local_ip%
|
||||
|
||||
[module/eth]
|
||||
inherit = network-base
|
||||
interface-type = wired
|
||||
label-connected = %{F#F0C674}%ifname%%{F-} %local_ip%
|
||||
|
||||
[module/date]
|
||||
type = internal/date
|
||||
interval = 1
|
||||
|
||||
date = %H:%M
|
||||
date-alt = %Y-%m-%d %H:%M:%S
|
||||
|
||||
label = %date%
|
||||
label-foreground = ${colors.primary}
|
||||
|
||||
[settings]
|
||||
screenchange-reload = true
|
||||
pseudo-transparency = true
|
||||
|
||||
; vim:ft=dosini
|
||||
33
river/.config/river/bar
Executable file
33
river/.config/river/bar
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
FIFO="$XDG_RUNTIME_DIR/sandbar"
|
||||
|
||||
run() {
|
||||
echo run
|
||||
[ -e "$FIFO" ] && rm -f "$FIFO"
|
||||
mkfifo "$FIFO"
|
||||
|
||||
"$HOME/.config/river/status" &
|
||||
|
||||
while cat "$FIFO"; do :; done | sandbar \
|
||||
-font "FiraCode Nerd Font Ret:size=10" \
|
||||
-active-fg-color "#000000" \
|
||||
-active-bg-color "#e8c47d" \
|
||||
-inactive-fg-color "#e8c47d" \
|
||||
-inactive-bg-color "#000000" \
|
||||
-urgent-fg-color "#000000" \
|
||||
-urgent-bg-color "#cc241d" \
|
||||
-title-fg-color "#000000" \
|
||||
-title-bg-color "#e8c47d"
|
||||
}
|
||||
|
||||
while true; do
|
||||
run
|
||||
CODE=$?
|
||||
if [ $CODE -ne 139 && $CODE -ne 134 ]; then
|
||||
echo exit because $CODE
|
||||
exit
|
||||
fi
|
||||
echo sleep and continue
|
||||
sleep 1
|
||||
done
|
||||
20
river/.config/river/init
Executable file
20
river/.config/river/init
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/sh
|
||||
|
||||
LOCK_COMMAND='swaylock -f -c 1f7693'
|
||||
RANDR_COMMAND='${HOME}/.config/river/randr --on'
|
||||
RANDR_OFF_COMMAND='${HOME}/.config/river/randr --off'
|
||||
|
||||
riverctl spawn "${RANDR_COMMAND}"
|
||||
|
||||
"${HOME}/.config/river/keymap"
|
||||
|
||||
# Set the default layout generator to be rivertile and start it.
|
||||
# River will send the process group of the init executable SIGTERM on exit.
|
||||
riverctl default-layout rivertile
|
||||
rivertile -view-padding 1 -outer-padding 0 &
|
||||
|
||||
riverctl spawn "${HOME}/.config/river/bar"
|
||||
|
||||
riverctl spawn "swayidle -w timeout 300 '${LOCK_COMMAND}' \
|
||||
timeout 330 '${RANDR_OFF_COMMAND}' resume '${RANDR_COMMAND}' \
|
||||
before-sleep '${LOCK_COMMAND}' after-resume '${RANDR_COMMAND}'"
|
||||
164
river/.config/river/keymap
Executable file
164
river/.config/river/keymap
Executable file
@@ -0,0 +1,164 @@
|
||||
#!/bin/sh
|
||||
|
||||
LOCK_COMMAND='swaylock -f -c 1f7693'
|
||||
|
||||
# Note: the "Super" modifier is also known as Logo, GUI, Windows, Mod4, etc.
|
||||
|
||||
# Super+Shift+Return to start an instance of foot (https://codeberg.org/dnkl/foot)
|
||||
riverctl map normal Super+Shift Return spawn alacritty
|
||||
riverctl map normal Super+Alt Return spawn alacritty
|
||||
|
||||
riverctl map normal Super P spawn "wofi -S run"
|
||||
|
||||
# Super+Q to close the focused view
|
||||
riverctl map normal Super Q close
|
||||
|
||||
# Super+Shift+E to exit river
|
||||
riverctl map normal Super+Shift E exit
|
||||
|
||||
# Super+J and Super+K to focus the next/previous view in the layout stack
|
||||
riverctl map normal Super J focus-view next
|
||||
riverctl map normal Super K focus-view previous
|
||||
|
||||
# Super+Shift+J and Super+Shift+K to swap the focused view with the next/previous
|
||||
# view in the layout stack
|
||||
riverctl map normal Super+Shift J swap next
|
||||
riverctl map normal Super+Shift K swap previous
|
||||
|
||||
# Super+Period and Super+Comma to focus the next/previous output
|
||||
riverctl map normal Super Period focus-output next
|
||||
riverctl map normal Super Comma focus-output previous
|
||||
|
||||
# Super+Shift+{Period,Comma} to send the focused view to the next/previous output
|
||||
riverctl map normal Super+Shift Period send-to-output next
|
||||
riverctl map normal Super+Shift Comma send-to-output previous
|
||||
|
||||
# Super+Return to bump the focused view to the top of the layout stack
|
||||
riverctl map normal Super Return zoom
|
||||
|
||||
# Super+H and Super+L to decrease/increase the main ratio of rivertile(1)
|
||||
riverctl map normal Super H send-layout-cmd rivertile "main-ratio -0.05"
|
||||
riverctl map normal Super L send-layout-cmd rivertile "main-ratio +0.05"
|
||||
|
||||
# Super+Shift+H and Super+Shift+L to increment/decrement the main count of rivertile(1)
|
||||
riverctl map normal Super+Shift H send-layout-cmd rivertile "main-count +1"
|
||||
riverctl map normal Super+Shift L send-layout-cmd rivertile "main-count -1"
|
||||
|
||||
# Super+Alt+{H,J,K,L} to move views
|
||||
riverctl map normal Super+Alt H move left 100
|
||||
riverctl map normal Super+Alt J move down 100
|
||||
riverctl map normal Super+Alt K move up 100
|
||||
riverctl map normal Super+Alt L move right 100
|
||||
|
||||
# Super+Alt+Control+{H,J,K,L} to snap views to screen edges
|
||||
riverctl map normal Super+Alt+Control H snap left
|
||||
riverctl map normal Super+Alt+Control J snap down
|
||||
riverctl map normal Super+Alt+Control K snap up
|
||||
riverctl map normal Super+Alt+Control L snap right
|
||||
|
||||
# Super+Alt+Shift+{H,J,K,L} to resize views
|
||||
riverctl map normal Super+Alt+Shift H resize horizontal -100
|
||||
riverctl map normal Super+Alt+Shift J resize vertical 100
|
||||
riverctl map normal Super+Alt+Shift K resize vertical -100
|
||||
riverctl map normal Super+Alt+Shift L resize horizontal 100
|
||||
|
||||
# Super + Left Mouse Button to move views
|
||||
riverctl map-pointer normal Super BTN_LEFT move-view
|
||||
|
||||
# Super + Right Mouse Button to resize views
|
||||
riverctl map-pointer normal Super BTN_RIGHT resize-view
|
||||
|
||||
# Super + Middle Mouse Button to toggle float
|
||||
riverctl map-pointer normal Super BTN_MIDDLE toggle-float
|
||||
|
||||
for i in $(seq 1 9)
|
||||
do
|
||||
tags=$((1 << ($i - 1)))
|
||||
|
||||
# Super+[1-9] to focus tag [0-8]
|
||||
riverctl map normal Super $i set-focused-tags $tags
|
||||
|
||||
# Super+Shift+[1-9] to tag focused view with tag [0-8]
|
||||
riverctl map normal Super+Shift $i set-view-tags $tags
|
||||
|
||||
# Super+Control+[1-9] to toggle focus of tag [0-8]
|
||||
riverctl map normal Super+Control $i toggle-focused-tags $tags
|
||||
|
||||
# Super+Shift+Control+[1-9] to toggle tag [0-8] of focused view
|
||||
riverctl map normal Super+Shift+Control $i toggle-view-tags $tags
|
||||
done
|
||||
|
||||
# Super+0 to focus all tags
|
||||
# Super+Shift+0 to tag focused view with all tags
|
||||
all_tags=$(((1 << 32) - 1))
|
||||
riverctl map normal Super 0 set-focused-tags $all_tags
|
||||
riverctl map normal Super+Shift 0 set-view-tags $all_tags
|
||||
|
||||
# Super+Space to toggle float
|
||||
riverctl map normal Super Space toggle-float
|
||||
|
||||
# Super+F to toggle fullscreen
|
||||
riverctl map normal Super F toggle-fullscreen
|
||||
|
||||
# Super+{Up,Right,Down,Left} to change layout orientation
|
||||
riverctl map normal Super Up send-layout-cmd rivertile "main-location top"
|
||||
riverctl map normal Super Right send-layout-cmd rivertile "main-location right"
|
||||
riverctl map normal Super Down send-layout-cmd rivertile "main-location bottom"
|
||||
riverctl map normal Super Left send-layout-cmd rivertile "main-location left"
|
||||
|
||||
# Declare a passthrough mode. This mode has only a single mapping to return to
|
||||
# normal mode. This makes it useful for testing a nested wayland compositor
|
||||
riverctl declare-mode passthrough
|
||||
|
||||
# Super+F11 to enter passthrough mode
|
||||
riverctl map normal Super F11 enter-mode passthrough
|
||||
|
||||
# Super+F11 to return to normal mode
|
||||
riverctl map passthrough Super F11 enter-mode normal
|
||||
|
||||
# Various media key mapping examples for both normal and locked mode which do
|
||||
# not have a modifier
|
||||
for mode in normal locked
|
||||
do
|
||||
# Eject the optical drive (well if you still have one that is)
|
||||
riverctl map $mode None XF86Eject spawn 'eject -T'
|
||||
|
||||
# Control pulse audio volume with pamixer (https://github.com/cdemoulins/pamixer)
|
||||
riverctl map $mode None XF86AudioRaiseVolume spawn 'pamixer -i 5'
|
||||
riverctl map $mode None XF86AudioLowerVolume spawn 'pamixer -d 5'
|
||||
riverctl map $mode None XF86AudioMute spawn 'pamixer --toggle-mute'
|
||||
|
||||
# Control MPRIS aware media players with playerctl (https://github.com/altdesktop/playerctl)
|
||||
riverctl map $mode None XF86AudioMedia spawn 'playerctl play-pause'
|
||||
riverctl map $mode None XF86AudioPlay spawn 'playerctl play-pause'
|
||||
riverctl map $mode None XF86AudioPrev spawn 'playerctl previous'
|
||||
riverctl map $mode None XF86AudioNext spawn 'playerctl next'
|
||||
|
||||
# Control screen backlight brightness with brightnessctl (https://github.com/Hummer12007/brightnessctl)
|
||||
riverctl map $mode None XF86MonBrightnessUp spawn 'brightnessctl set +5%'
|
||||
riverctl map $mode None XF86MonBrightnessDown spawn 'brightnessctl set 5%-'
|
||||
done
|
||||
|
||||
riverctl map normal Super A focus-previous-tags
|
||||
riverctl map normal Super+Control+Shift L spawn "${LOCK_COMMAND}"
|
||||
riverctl map normal Super+Control+Shift S spawn "systemctl suspend"
|
||||
|
||||
riverctl map normal Super+Alt O spawn "${LOCK_COMMAND}"
|
||||
riverctl map normal Super+Alt S spawn "systemctl suspend"
|
||||
|
||||
riverctl map normal Super+Alt T spawn "${HOME}/bin/lupan-set-theme toggle"
|
||||
|
||||
# Set background and border color
|
||||
riverctl background-color 0x002b36
|
||||
riverctl border-color-focused 0xac7853
|
||||
riverctl border-color-unfocused 0x5387ac
|
||||
|
||||
riverctl keyboard-layout -options ctrl:nocaps pl
|
||||
# Set keyboard repeat rate
|
||||
riverctl set-repeat 50 300
|
||||
|
||||
# Make all views with an app-id that starts with "float" and title "foo" start floating.
|
||||
riverctl rule-add -app-id 'float*' -title 'foo' float
|
||||
|
||||
# Make all views with app-id "bar" and any title use client-side decorations
|
||||
riverctl rule-add -app-id "bar" csd
|
||||
21
river/.config/river/randr
Executable file
21
river/.config/river/randr
Executable file
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
repeat() {
|
||||
for x in {0..10}; do
|
||||
echo "$@"
|
||||
"$@"
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
--on)
|
||||
repeat wlr-randr --output DP-1 --on --scale 2 --pos 0,0 &
|
||||
repeat wlr-randr --output DP-2 --on --scale 2 --pos 1920,0 &
|
||||
sleep 10
|
||||
;;
|
||||
--off)
|
||||
wlr-randr --output DP-1 --off
|
||||
wlr-randr --output DP-2 --off
|
||||
;;
|
||||
esac
|
||||
52
river/.config/river/status
Executable file
52
river/.config/river/status
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/bin/env sh
|
||||
|
||||
cpu() {
|
||||
cpu="$(grep -o "^[^ ]*" /proc/loadavg)"
|
||||
}
|
||||
|
||||
memory() {
|
||||
memory="$(free -h | sed -n "2s/\([^ ]* *\)\{2\}\([^ ]*\).*/\2/p")"
|
||||
}
|
||||
|
||||
disk() {
|
||||
disk="$(df -h | awk 'NR==2{print $4}')"
|
||||
}
|
||||
|
||||
datetime() {
|
||||
datetime="$(date "+%F %H:%M")"
|
||||
}
|
||||
|
||||
bat() {
|
||||
read -r bat_status </sys/class/power_supply/BAT0/status
|
||||
read -r bat_capacity </sys/class/power_supply/BAT0/capacity
|
||||
bat="$bat_status $bat_capacity%"
|
||||
}
|
||||
|
||||
vol() {
|
||||
vol="$([ "$(pamixer --get-mute)" = "false" ] && printf "%s%%" "$(pamixer --get-volume)" || printf '-')"
|
||||
}
|
||||
|
||||
display() {
|
||||
echo "all status [$memory $cpu $disk] [$bat] [$vol] [$datetime]" >"$FIFO"
|
||||
}
|
||||
|
||||
printf "%s" "$$" > "$XDG_RUNTIME_DIR/status_pid"
|
||||
FIFO="$XDG_RUNTIME_DIR/sandbar"
|
||||
[ -e "$FIFO" ] || mkfifo "$FIFO"
|
||||
sec=0
|
||||
|
||||
while true; do
|
||||
sleep 1 &
|
||||
wait && {
|
||||
[ $((sec % 15)) -eq 0 ] && memory
|
||||
[ $((sec % 15)) -eq 0 ] && cpu
|
||||
[ $((sec % 15)) -eq 0 ] && disk
|
||||
[ $((sec % 60)) -eq 0 ] && bat
|
||||
[ $((sec % 5)) -eq 0 ] && vol
|
||||
[ $((sec % 5)) -eq 0 ] && datetime
|
||||
|
||||
[ $((sec % 5)) -eq 0 ] && display
|
||||
|
||||
sec=$((sec + 1))
|
||||
}
|
||||
done
|
||||
16
shell/.bashrc
Normal file
16
shell/.bashrc
Normal file
@@ -0,0 +1,16 @@
|
||||
#
|
||||
# ~/.bashrc
|
||||
#
|
||||
|
||||
# If not running interactively, don't do anything
|
||||
[[ $- != *i* ]] && return
|
||||
|
||||
alias ls='ls --color=auto'
|
||||
PS1='\e[34m\u@\h\e[0m \e[32m\W\e[0m \$ '
|
||||
|
||||
function before_command() { echo -ne '\e[2 q'; }
|
||||
trap before_command DEBUG
|
||||
|
||||
if [[ -f /usr/share/bash-completion/bash_completion ]]; then
|
||||
. /usr/share/bash-completion/bash_completion
|
||||
fi
|
||||
831
shell/.config/nushell/config.nu
Normal file
831
shell/.config/nushell/config.nu
Normal file
@@ -0,0 +1,831 @@
|
||||
# Nushell Config File
|
||||
#
|
||||
# version = "0.89.0"
|
||||
|
||||
# For more information on defining custom themes, see
|
||||
# https://www.nushell.sh/book/coloring_and_theming.html
|
||||
# And here is the theme collection
|
||||
# https://github.com/nushell/nu_scripts/tree/main/themes
|
||||
let dark_theme = {
|
||||
# color for nushell primitives
|
||||
separator: white
|
||||
leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
|
||||
header: green_bold
|
||||
empty: blue
|
||||
# Closures can be used to choose colors for specific values.
|
||||
# The value (in this case, a bool) is piped into the closure.
|
||||
# eg) {|| if $in { 'light_cyan' } else { 'light_gray' } }
|
||||
bool: light_cyan
|
||||
int: white
|
||||
filesize: cyan
|
||||
duration: white
|
||||
date: purple
|
||||
range: white
|
||||
float: white
|
||||
string: white
|
||||
nothing: white
|
||||
binary: white
|
||||
cell-path: white
|
||||
row_index: green_bold
|
||||
record: white
|
||||
list: white
|
||||
block: white
|
||||
hints: dark_gray
|
||||
search_result: {bg: red fg: white}
|
||||
shape_and: purple_bold
|
||||
shape_binary: purple_bold
|
||||
shape_block: blue_bold
|
||||
shape_bool: light_cyan
|
||||
shape_closure: green_bold
|
||||
shape_custom: green
|
||||
shape_datetime: cyan_bold
|
||||
shape_directory: cyan
|
||||
shape_external: cyan
|
||||
shape_externalarg: green_bold
|
||||
shape_external_resolved: light_yellow_bold
|
||||
shape_filepath: cyan
|
||||
shape_flag: blue_bold
|
||||
shape_float: purple_bold
|
||||
# shapes are used to change the cli syntax highlighting
|
||||
shape_garbage: { fg: white bg: red attr: b}
|
||||
shape_globpattern: cyan_bold
|
||||
shape_int: purple_bold
|
||||
shape_internalcall: cyan_bold
|
||||
shape_keyword: cyan_bold
|
||||
shape_list: cyan_bold
|
||||
shape_literal: blue
|
||||
shape_match_pattern: green
|
||||
shape_matching_brackets: { attr: u }
|
||||
shape_nothing: light_cyan
|
||||
shape_operator: yellow
|
||||
shape_or: purple_bold
|
||||
shape_pipe: purple_bold
|
||||
shape_range: yellow_bold
|
||||
shape_record: cyan_bold
|
||||
shape_redirection: purple_bold
|
||||
shape_signature: green_bold
|
||||
shape_string: green
|
||||
shape_string_interpolation: cyan_bold
|
||||
shape_table: blue_bold
|
||||
shape_variable: purple
|
||||
shape_vardecl: purple
|
||||
}
|
||||
|
||||
let light_theme = {
|
||||
# color for nushell primitives
|
||||
separator: dark_gray
|
||||
leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
|
||||
header: green_bold
|
||||
empty: blue
|
||||
# Closures can be used to choose colors for specific values.
|
||||
# The value (in this case, a bool) is piped into the closure.
|
||||
# eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } }
|
||||
bool: dark_cyan
|
||||
int: dark_gray
|
||||
filesize: cyan_bold
|
||||
duration: dark_gray
|
||||
date: purple
|
||||
range: dark_gray
|
||||
float: dark_gray
|
||||
string: dark_gray
|
||||
nothing: dark_gray
|
||||
binary: dark_gray
|
||||
cell-path: dark_gray
|
||||
row_index: green_bold
|
||||
record: dark_gray
|
||||
list: dark_gray
|
||||
block: dark_gray
|
||||
hints: dark_gray
|
||||
search_result: {fg: white bg: red}
|
||||
shape_and: purple_bold
|
||||
shape_binary: purple_bold
|
||||
shape_block: blue_bold
|
||||
shape_bool: light_cyan
|
||||
shape_closure: green_bold
|
||||
shape_custom: green
|
||||
shape_datetime: cyan_bold
|
||||
shape_directory: cyan
|
||||
shape_external: cyan
|
||||
shape_externalarg: green_bold
|
||||
shape_external_resolved: light_purple_bold
|
||||
shape_filepath: cyan
|
||||
shape_flag: blue_bold
|
||||
shape_float: purple_bold
|
||||
# shapes are used to change the cli syntax highlighting
|
||||
shape_garbage: { fg: white bg: red attr: b}
|
||||
shape_globpattern: cyan_bold
|
||||
shape_int: purple_bold
|
||||
shape_internalcall: cyan_bold
|
||||
shape_keyword: cyan_bold
|
||||
shape_list: cyan_bold
|
||||
shape_literal: blue
|
||||
shape_match_pattern: green
|
||||
shape_matching_brackets: { attr: u }
|
||||
shape_nothing: light_cyan
|
||||
shape_operator: yellow
|
||||
shape_or: purple_bold
|
||||
shape_pipe: purple_bold
|
||||
shape_range: yellow_bold
|
||||
shape_record: cyan_bold
|
||||
shape_redirection: purple_bold
|
||||
shape_signature: green_bold
|
||||
shape_string: green
|
||||
shape_string_interpolation: cyan_bold
|
||||
shape_table: blue_bold
|
||||
shape_variable: purple
|
||||
shape_vardecl: purple
|
||||
}
|
||||
|
||||
# External completer example
|
||||
let carapace_completer = if (which carapace | is-empty) {
|
||||
null
|
||||
} else {
|
||||
{|spans| carapace $spans.0 nushell ...$spans | from json}
|
||||
}
|
||||
|
||||
# The default config record. This is where much of your global configuration is setup.
|
||||
$env.config = {
|
||||
show_banner: false # true or false to enable or disable the welcome banner at startup
|
||||
|
||||
ls: {
|
||||
use_ls_colors: true # use the LS_COLORS environment variable to colorize output
|
||||
clickable_links: true # enable or disable clickable links. Your terminal has to support links.
|
||||
}
|
||||
|
||||
rm: {
|
||||
always_trash: false # always act as if -t was given. Can be overridden with -p
|
||||
}
|
||||
|
||||
table: {
|
||||
mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other
|
||||
index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column
|
||||
show_empty: true # show 'empty list' and 'empty record' placeholders for command output
|
||||
padding: { left: 1, right: 1 } # a left right padding of each column in a table
|
||||
trim: {
|
||||
methodology: wrapping # wrapping or truncating
|
||||
wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology
|
||||
truncating_suffix: "..." # A suffix used by the 'truncating' methodology
|
||||
}
|
||||
header_on_separator: false # show header text on separator/border line
|
||||
# abbreviated_row_count: 10 # limit data rows from top and bottom after reaching a set point
|
||||
}
|
||||
|
||||
error_style: "fancy" # "fancy" or "plain" for screen reader-friendly error messages
|
||||
|
||||
# datetime_format determines what a datetime rendered in the shell would look like.
|
||||
# Behavior without this configuration point will be to "humanize" the datetime display,
|
||||
# showing something like "a day ago."
|
||||
datetime_format: {
|
||||
# normal: '%a, %d %b %Y %H:%M:%S %z' # shows up in displays of variables or other datetime's outside of tables
|
||||
# table: '%m/%d/%y %I:%M:%S%p' # generally shows up in tabular outputs such as ls. commenting this out will change it to the default human readable datetime format
|
||||
}
|
||||
|
||||
explore: {
|
||||
status_bar_background: {fg: "#1D1F21", bg: "#C4C9C6"},
|
||||
command_bar_text: {fg: "#C4C9C6"},
|
||||
highlight: {fg: "black", bg: "yellow"},
|
||||
status: {
|
||||
error: {fg: "white", bg: "red"},
|
||||
warn: {}
|
||||
info: {}
|
||||
},
|
||||
table: {
|
||||
split_line: {fg: "#404040"},
|
||||
selected_cell: {bg: light_blue},
|
||||
selected_row: {},
|
||||
selected_column: {},
|
||||
},
|
||||
}
|
||||
|
||||
history: {
|
||||
max_size: 100_000 # Session has to be reloaded for this to take effect
|
||||
sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file
|
||||
file_format: "plaintext" # "sqlite" or "plaintext"
|
||||
isolation: false # only available with sqlite file_format. true enables history isolation, false disables it. true will allow the history to be isolated to the current session using up/down arrows. false will allow the history to be shared across all sessions.
|
||||
}
|
||||
|
||||
completions: {
|
||||
case_sensitive: false # set to true to enable case-sensitive completions
|
||||
quick: true # set this to false to prevent auto-selecting completions when only one remains
|
||||
partial: true # set this to false to prevent partial filling of the prompt
|
||||
algorithm: "prefix" # prefix or fuzzy
|
||||
external: {
|
||||
enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow
|
||||
max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options
|
||||
completer: $carapace_completer
|
||||
}
|
||||
}
|
||||
|
||||
filesize: {
|
||||
metric: false # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard)
|
||||
format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, auto
|
||||
}
|
||||
|
||||
cursor_shape: {
|
||||
emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (line is the default)
|
||||
vi_insert: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (block is the default)
|
||||
vi_normal: block # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (underscore is the default)
|
||||
}
|
||||
|
||||
color_config: $dark_theme # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record
|
||||
use_grid_icons: true
|
||||
footer_mode: "25" # always, never, number_of_rows, auto
|
||||
float_precision: 2 # the precision for displaying floats in tables
|
||||
buffer_editor: "" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL
|
||||
use_ansi_coloring: true
|
||||
bracketed_paste: true # enable bracketed paste, currently useless on windows
|
||||
edit_mode: vi # emacs, vi
|
||||
shell_integration: false # enables terminal shell integration. Off by default, as some terminals have issues with this.
|
||||
render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt.
|
||||
use_kitty_protocol: false # enables keyboard enhancement protocol implemented by kitty console, only if your terminal support this.
|
||||
highlight_resolved_externals: false # true enables highlighting of external commands in the repl resolved by which.
|
||||
|
||||
hooks: {
|
||||
pre_prompt: [{ null }] # run before the prompt is shown
|
||||
pre_execution: [{ null }] # run before the repl input is run
|
||||
env_change: {
|
||||
PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input
|
||||
}
|
||||
display_output: "if (term size).columns >= 100 { table -e } else { table }" # run to display the output of a pipeline
|
||||
command_not_found: { null } # return an error message when a command is not found
|
||||
}
|
||||
|
||||
menus: [
|
||||
# Configuration for default nushell menus
|
||||
# Note the lack of source parameter
|
||||
{
|
||||
name: completion_menu
|
||||
only_buffer_difference: false
|
||||
marker: "| "
|
||||
type: {
|
||||
layout: columnar
|
||||
columns: 4
|
||||
col_width: 20 # Optional value. If missing all the screen width is used to calculate column width
|
||||
col_padding: 2
|
||||
}
|
||||
style: {
|
||||
text: green
|
||||
selected_text: green_reverse
|
||||
description_text: yellow
|
||||
}
|
||||
}
|
||||
{
|
||||
name: history_menu
|
||||
only_buffer_difference: true
|
||||
marker: "? "
|
||||
type: {
|
||||
layout: list
|
||||
page_size: 10
|
||||
}
|
||||
style: {
|
||||
text: green
|
||||
selected_text: green_reverse
|
||||
description_text: yellow
|
||||
}
|
||||
}
|
||||
{
|
||||
name: help_menu
|
||||
only_buffer_difference: true
|
||||
marker: "? "
|
||||
type: {
|
||||
layout: description
|
||||
columns: 4
|
||||
col_width: 20 # Optional value. If missing all the screen width is used to calculate column width
|
||||
col_padding: 2
|
||||
selection_rows: 4
|
||||
description_rows: 10
|
||||
}
|
||||
style: {
|
||||
text: green
|
||||
selected_text: green_reverse
|
||||
description_text: yellow
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
keybindings: [
|
||||
{
|
||||
name: completion_menu
|
||||
modifier: none
|
||||
keycode: tab
|
||||
mode: [emacs vi_normal vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{ send: menu name: completion_menu }
|
||||
{ send: menunext }
|
||||
{ edit: complete }
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: history_menu
|
||||
modifier: control
|
||||
keycode: char_r
|
||||
mode: [emacs, vi_insert, vi_normal]
|
||||
event: { send: menu name: history_menu }
|
||||
}
|
||||
{
|
||||
name: help_menu
|
||||
modifier: none
|
||||
keycode: f1
|
||||
mode: [emacs, vi_insert, vi_normal]
|
||||
event: { send: menu name: help_menu }
|
||||
}
|
||||
{
|
||||
name: completion_previous_menu
|
||||
modifier: shift
|
||||
keycode: backtab
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: { send: menuprevious }
|
||||
}
|
||||
{
|
||||
name: next_page_menu
|
||||
modifier: control
|
||||
keycode: char_x
|
||||
mode: emacs
|
||||
event: { send: menupagenext }
|
||||
}
|
||||
{
|
||||
name: undo_or_previous_page_menu
|
||||
modifier: control
|
||||
keycode: char_z
|
||||
mode: emacs
|
||||
event: {
|
||||
until: [
|
||||
{ send: menupageprevious }
|
||||
{ edit: undo }
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: escape
|
||||
modifier: none
|
||||
keycode: escape
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: { send: esc } # NOTE: does not appear to work
|
||||
}
|
||||
{
|
||||
name: cancel_command
|
||||
modifier: control
|
||||
keycode: char_c
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: { send: ctrlc }
|
||||
}
|
||||
{
|
||||
name: quit_shell
|
||||
modifier: control
|
||||
keycode: char_d
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: { send: ctrld }
|
||||
}
|
||||
{
|
||||
name: clear_screen
|
||||
modifier: control
|
||||
keycode: char_l
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: { send: clearscreen }
|
||||
}
|
||||
{
|
||||
name: search_history
|
||||
modifier: control
|
||||
keycode: char_q
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: { send: searchhistory }
|
||||
}
|
||||
{
|
||||
name: open_command_editor
|
||||
modifier: control
|
||||
keycode: char_o
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: { send: openeditor }
|
||||
}
|
||||
{
|
||||
name: move_up
|
||||
modifier: none
|
||||
keycode: up
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: menuup}
|
||||
{send: up}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_down
|
||||
modifier: none
|
||||
keycode: down
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: menudown}
|
||||
{send: down}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_left
|
||||
modifier: none
|
||||
keycode: left
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: menuleft}
|
||||
{send: left}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_right_or_take_history_hint
|
||||
modifier: none
|
||||
keycode: right
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: historyhintcomplete}
|
||||
{send: menuright}
|
||||
{send: right}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_one_word_left
|
||||
modifier: control
|
||||
keycode: left
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {edit: movewordleft}
|
||||
}
|
||||
{
|
||||
name: move_one_word_right_or_take_history_hint
|
||||
modifier: control
|
||||
keycode: right
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: historyhintwordcomplete}
|
||||
{edit: movewordright}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_to_line_start
|
||||
modifier: none
|
||||
keycode: home
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {edit: movetolinestart}
|
||||
}
|
||||
{
|
||||
name: move_to_line_start
|
||||
modifier: control
|
||||
keycode: char_a
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {edit: movetolinestart}
|
||||
}
|
||||
{
|
||||
name: move_to_line_end_or_take_history_hint
|
||||
modifier: none
|
||||
keycode: end
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: historyhintcomplete}
|
||||
{edit: movetolineend}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_to_line_end_or_take_history_hint
|
||||
modifier: control
|
||||
keycode: char_e
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: historyhintcomplete}
|
||||
{edit: movetolineend}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_to_line_start
|
||||
modifier: control
|
||||
keycode: home
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {edit: movetolinestart}
|
||||
}
|
||||
{
|
||||
name: move_to_line_end
|
||||
modifier: control
|
||||
keycode: end
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {edit: movetolineend}
|
||||
}
|
||||
{
|
||||
name: move_up
|
||||
modifier: control
|
||||
keycode: char_p
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: menuup}
|
||||
{send: up}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_down
|
||||
modifier: control
|
||||
keycode: char_t
|
||||
mode: [emacs, vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: menudown}
|
||||
{send: down}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: delete_one_character_backward
|
||||
modifier: none
|
||||
keycode: backspace
|
||||
mode: [emacs, vi_insert]
|
||||
event: {edit: backspace}
|
||||
}
|
||||
{
|
||||
name: delete_one_word_backward
|
||||
modifier: control
|
||||
keycode: backspace
|
||||
mode: [emacs, vi_insert]
|
||||
event: {edit: backspaceword}
|
||||
}
|
||||
{
|
||||
name: delete_one_character_forward
|
||||
modifier: none
|
||||
keycode: delete
|
||||
mode: [emacs, vi_insert]
|
||||
event: {edit: delete}
|
||||
}
|
||||
{
|
||||
name: delete_one_character_forward
|
||||
modifier: control
|
||||
keycode: delete
|
||||
mode: [emacs, vi_insert]
|
||||
event: {edit: delete}
|
||||
}
|
||||
{
|
||||
name: delete_one_character_forward
|
||||
modifier: control
|
||||
keycode: char_h
|
||||
mode: [emacs, vi_insert]
|
||||
event: {edit: backspace}
|
||||
}
|
||||
{
|
||||
name: delete_one_word_backward
|
||||
modifier: control
|
||||
keycode: char_w
|
||||
mode: [emacs, vi_insert]
|
||||
event: {edit: backspaceword}
|
||||
}
|
||||
{
|
||||
name: move_left
|
||||
modifier: none
|
||||
keycode: backspace
|
||||
mode: vi_normal
|
||||
event: {edit: moveleft}
|
||||
}
|
||||
{
|
||||
name: newline_or_run_command
|
||||
modifier: none
|
||||
keycode: enter
|
||||
mode: emacs
|
||||
event: {send: enter}
|
||||
}
|
||||
{
|
||||
name: move_left
|
||||
modifier: control
|
||||
keycode: char_b
|
||||
mode: emacs
|
||||
event: {
|
||||
until: [
|
||||
{send: menuleft}
|
||||
{send: left}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_right_or_take_history_hint
|
||||
modifier: control
|
||||
keycode: char_f
|
||||
mode: emacs
|
||||
event: {
|
||||
until: [
|
||||
{send: historyhintcomplete}
|
||||
{send: menuright}
|
||||
{send: right}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: redo_change
|
||||
modifier: control
|
||||
keycode: char_g
|
||||
mode: emacs
|
||||
event: {edit: redo}
|
||||
}
|
||||
{
|
||||
name: undo_change
|
||||
modifier: control
|
||||
keycode: char_z
|
||||
mode: emacs
|
||||
event: {edit: undo}
|
||||
}
|
||||
{
|
||||
name: paste_before
|
||||
modifier: control
|
||||
keycode: char_y
|
||||
mode: emacs
|
||||
event: {edit: pastecutbufferbefore}
|
||||
}
|
||||
{
|
||||
name: cut_word_left
|
||||
modifier: control
|
||||
keycode: char_w
|
||||
mode: emacs
|
||||
event: {edit: cutwordleft}
|
||||
}
|
||||
{
|
||||
name: cut_line_to_end
|
||||
modifier: control
|
||||
keycode: char_k
|
||||
mode: emacs
|
||||
event: {edit: cuttoend}
|
||||
}
|
||||
{
|
||||
name: cut_line_from_start
|
||||
modifier: control
|
||||
keycode: char_u
|
||||
mode: [emacs vi_insert]
|
||||
event: {edit: cutfromstart}
|
||||
}
|
||||
{
|
||||
name: swap_graphemes
|
||||
modifier: control
|
||||
keycode: char_t
|
||||
mode: emacs
|
||||
event: {edit: swapgraphemes}
|
||||
}
|
||||
{
|
||||
name: move_one_word_left
|
||||
modifier: alt
|
||||
keycode: left
|
||||
mode: emacs
|
||||
event: {edit: movewordleft}
|
||||
}
|
||||
{
|
||||
name: move_one_word_right_or_take_history_hint
|
||||
modifier: alt
|
||||
keycode: right
|
||||
mode: emacs
|
||||
event: {
|
||||
until: [
|
||||
{send: historyhintwordcomplete}
|
||||
{edit: movewordright}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_one_word_left
|
||||
modifier: alt
|
||||
keycode: char_b
|
||||
mode: emacs
|
||||
event: {edit: movewordleft}
|
||||
}
|
||||
{
|
||||
name: move_one_word_right_or_take_history_hint
|
||||
modifier: alt
|
||||
keycode: char_f
|
||||
mode: emacs
|
||||
event: {
|
||||
until: [
|
||||
{send: historyhintwordcomplete}
|
||||
{edit: movewordright}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: delete_one_word_forward
|
||||
modifier: alt
|
||||
keycode: delete
|
||||
mode: emacs
|
||||
event: {edit: deleteword}
|
||||
}
|
||||
{
|
||||
name: delete_one_word_backward
|
||||
modifier: alt
|
||||
keycode: backspace
|
||||
mode: emacs
|
||||
event: {edit: backspaceword}
|
||||
}
|
||||
{
|
||||
name: delete_one_word_backward
|
||||
modifier: alt
|
||||
keycode: char_m
|
||||
mode: emacs
|
||||
event: {edit: backspaceword}
|
||||
}
|
||||
{
|
||||
name: cut_word_to_right
|
||||
modifier: alt
|
||||
keycode: char_d
|
||||
mode: emacs
|
||||
event: {edit: cutwordright}
|
||||
}
|
||||
{
|
||||
name: upper_case_word
|
||||
modifier: alt
|
||||
keycode: char_u
|
||||
mode: emacs
|
||||
event: {edit: uppercaseword}
|
||||
}
|
||||
{
|
||||
name: lower_case_word
|
||||
modifier: alt
|
||||
keycode: char_l
|
||||
mode: emacs
|
||||
event: {edit: lowercaseword}
|
||||
}
|
||||
{
|
||||
name: capitalize_char
|
||||
modifier: alt
|
||||
keycode: char_c
|
||||
mode: emacs
|
||||
event: {edit: capitalizechar}
|
||||
}
|
||||
{
|
||||
name: move_up
|
||||
modifier: control
|
||||
keycode: char_k
|
||||
mode: [vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: menuup}
|
||||
{send: up}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_down
|
||||
modifier: control
|
||||
keycode: char_j
|
||||
mode: [vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: menudown}
|
||||
{send: down}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_left
|
||||
modifier: control
|
||||
keycode: char_h
|
||||
mode: [vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: menuleft}
|
||||
{send: left}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
name: move_right_or_take_history_hint
|
||||
modifier: control
|
||||
keycode: char_l
|
||||
mode: [vi_normal, vi_insert]
|
||||
event: {
|
||||
until: [
|
||||
{send: historyhintcomplete}
|
||||
{send: menuright}
|
||||
{send: right}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
alias v = nvim
|
||||
alias tl = tmux list-sessions
|
||||
alias tn = tmux new -s
|
||||
alias ta = tmux attach -t
|
||||
alias nocaps = setxkbmap pl -option ctrl:nocaps
|
||||
|
||||
def gst [] {
|
||||
git status -s | detect columns -n | rename status file
|
||||
}
|
||||
|
||||
def glog [] {
|
||||
git log --pretty=%h»¦«%aN»¦«%s»¦«%aD | lines | split column "»¦«" sha1 committer desc merged_at
|
||||
}
|
||||
|
||||
def l [pattern? = '.'] {
|
||||
ls $pattern | grid -c
|
||||
}
|
||||
109
shell/.config/nushell/env.nu
Normal file
109
shell/.config/nushell/env.nu
Normal file
@@ -0,0 +1,109 @@
|
||||
# Nushell Environment Config File
|
||||
#
|
||||
# version = "0.89.0"
|
||||
|
||||
def create_left_prompt [] {
|
||||
let home = $nu.home-path
|
||||
|
||||
# Perform tilde substitution on dir
|
||||
# To determine if the prefix of the path matches the home dir, we split the current path into
|
||||
# segments, and compare those with the segments of the home dir. In cases where the current dir
|
||||
# is a parent of the home dir (e.g. `/home`, homedir is `/home/user`), this comparison will
|
||||
# also evaluate to true. Inside the condition, we attempt to str replace `$home` with `~`.
|
||||
# Inside the condition, either:
|
||||
# 1. The home prefix will be replaced
|
||||
# 2. The current dir is a parent of the home dir, so it will be uneffected by the str replace
|
||||
let dir = (
|
||||
if ($env.PWD | path split | zip ($home | path split) | all { $in.0 == $in.1 }) {
|
||||
($env.PWD | str replace $home "~")
|
||||
} else {
|
||||
$env.PWD
|
||||
}
|
||||
)
|
||||
|
||||
let path_color = (if (is-admin) { ansi red_bold } else { ansi green_bold })
|
||||
let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi light_green_bold })
|
||||
let path_segment = $"($path_color)($dir)"
|
||||
|
||||
let userhost = $'(ansi blue_bold)(id -un)@(hostname)(ansi reset)'
|
||||
let base = $path_segment | str replace --all (char path_sep) $"($separator_color)(char path_sep)($path_color)"
|
||||
let branch = do { git rev-parse --abbrev-ref HEAD } | complete
|
||||
if $branch.exit_code == 0 {
|
||||
$"($userhost) ($base) ($separator_color)\((ansi magenta)($branch.stdout | str trim)($separator_color)) "
|
||||
} else {
|
||||
$'($userhost) ($base) '
|
||||
}
|
||||
}
|
||||
|
||||
def create_right_prompt [] {
|
||||
# create a right prompt in magenta with green separators and am/pm underlined
|
||||
let time_segment = ([
|
||||
(ansi reset)
|
||||
(ansi magenta)
|
||||
(date now | format date '%x %X %p') # try to respect user's locale
|
||||
] | str join | str replace --regex --all "([/:])" $"(ansi green)${1}(ansi magenta)" |
|
||||
str replace --regex --all "([AP]M)" $"(ansi magenta_underline)${1}")
|
||||
|
||||
let last_exit_code = if ($env.LAST_EXIT_CODE != 0) {([
|
||||
(ansi rb)
|
||||
($env.LAST_EXIT_CODE)
|
||||
] | str join)
|
||||
} else { "" }
|
||||
|
||||
([$last_exit_code, (char space), $time_segment] | str join)
|
||||
}
|
||||
|
||||
# Use nushell functions to define your right and left prompt
|
||||
$env.PROMPT_COMMAND = {|| create_left_prompt }
|
||||
# FIXME: This default is not implemented in rust code as of 2023-09-08.
|
||||
$env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt }
|
||||
|
||||
# The prompt indicators are environmental variables that represent
|
||||
# the state of the prompt
|
||||
$env.PROMPT_INDICATOR = {|| "> " }
|
||||
$env.PROMPT_INDICATOR_VI_INSERT = {|| ": " }
|
||||
$env.PROMPT_INDICATOR_VI_NORMAL = {|| "> " }
|
||||
$env.PROMPT_MULTILINE_INDICATOR = {|| "::: " }
|
||||
|
||||
# If you want previously entered commands to have a different prompt from the usual one,
|
||||
# you can uncomment one or more of the following lines.
|
||||
# This can be useful if you have a 2-line prompt and it's taking up a lot of space
|
||||
# because every command entered takes up 2 lines instead of 1. You can then uncomment
|
||||
# the line below so that previously entered commands show with a single `🚀`.
|
||||
# $env.TRANSIENT_PROMPT_COMMAND = {|| "🚀 " }
|
||||
# $env.TRANSIENT_PROMPT_INDICATOR = {|| "" }
|
||||
# $env.TRANSIENT_PROMPT_INDICATOR_VI_INSERT = {|| "" }
|
||||
# $env.TRANSIENT_PROMPT_INDICATOR_VI_NORMAL = {|| "" }
|
||||
# $env.TRANSIENT_PROMPT_MULTILINE_INDICATOR = {|| "" }
|
||||
# $env.TRANSIENT_PROMPT_COMMAND_RIGHT = {|| "" }
|
||||
|
||||
# Specifies how environment variables are:
|
||||
# - converted from a string to a value on Nushell startup (from_string)
|
||||
# - converted from a value back to a string when running external commands (to_string)
|
||||
# Note: The conversions happen *after* config.nu is loaded
|
||||
$env.ENV_CONVERSIONS = {
|
||||
"PATH": {
|
||||
from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
|
||||
to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
|
||||
}
|
||||
"Path": {
|
||||
from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
|
||||
to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
|
||||
}
|
||||
}
|
||||
|
||||
# Directories to search for scripts when calling source or use
|
||||
# The default for this is $nu.default-config-dir/scripts
|
||||
$env.NU_LIB_DIRS = [
|
||||
($nu.default-config-dir | path join 'scripts') # add <nushell-config-dir>/scripts
|
||||
]
|
||||
|
||||
# Directories to search for plugin binaries when calling register
|
||||
# The default for this is $nu.default-config-dir/plugins
|
||||
$env.NU_PLUGIN_DIRS = [
|
||||
($nu.default-config-dir | path join 'plugins') # add <nushell-config-dir>/plugins
|
||||
]
|
||||
|
||||
# To add entries to PATH (on Windows you might use Path), you can use the following pattern:
|
||||
# $env.PATH = ($env.PATH | split row (char esep) | prepend '/some/path')
|
||||
|
||||
64
shell/.config/shellconfig/aliases.sh
Normal file
64
shell/.config/shellconfig/aliases.sh
Normal file
@@ -0,0 +1,64 @@
|
||||
alias v=nvim
|
||||
alias ll='ls -l'
|
||||
alias tl='tmux list-sessions'
|
||||
alias rgh='rg -.'
|
||||
alias fdh='fd -H'
|
||||
alias lg=lazygit
|
||||
|
||||
if alias st > /dev/null; then
|
||||
alias gst='_vcs status'
|
||||
unalias st
|
||||
fi
|
||||
if alias r > /dev/null; then
|
||||
unalias r
|
||||
fi
|
||||
|
||||
if which eza > /dev/null; then
|
||||
alias ls='eza --icons'
|
||||
alias tree='eza --tree --icons'
|
||||
elif which exa > /dev/null; then
|
||||
alias ls='exa --icons'
|
||||
alias tree='exa --tree --icons'
|
||||
fi
|
||||
|
||||
alias nocaps='setxkbmap pl -option ctrl:nocaps'
|
||||
alias fixdp='xrandr --output DP-0 --right-of DP-2'
|
||||
|
||||
tn() {
|
||||
if [ $# -eq 0 ]; then
|
||||
tmux new
|
||||
else
|
||||
tmux new -A -s "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
tni() {
|
||||
local Q="${@:-}"
|
||||
local DIR=$(zoxide query -l | vis-menu -p 'Dir:' -l 10 "$Q")
|
||||
if [ -n "$DIR" ]; then
|
||||
local NAME=$(echo | vis-menu -p 'Session name:' $(basename $DIR))
|
||||
if [ -n "$DIR" ]; then
|
||||
tmux new -A -s "$NAME" -c "$DIR"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
ta() {
|
||||
if [ $# -eq 0 ]; then
|
||||
tmux attach
|
||||
else
|
||||
tmux attach -t "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
tai() {
|
||||
local Q="${@:-}"
|
||||
local NAME=$(tmux ls | vis-menu -p 'Session:' -l 10 "$Q" | cut -d: -f1)
|
||||
if [ -n "$NAME" ]; then
|
||||
tmux attach -t "$NAME"
|
||||
fi
|
||||
}
|
||||
|
||||
vf() {
|
||||
nvim $(fzf --multi)
|
||||
}
|
||||
4
shell/.config/shellconfig/aliases.zsh
Normal file
4
shell/.config/shellconfig/aliases.zsh
Normal file
@@ -0,0 +1,4 @@
|
||||
alias hs='history -$HISTSIZE | rg'
|
||||
|
||||
alias -s pdf=zathura
|
||||
alias -s {jpg,jpeg,png}=sxiv
|
||||
3
shell/.config/yash/profile
Normal file
3
shell/.config/yash/profile
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ -e ~/.profile ] && . ~/.profile
|
||||
17
shell/.config/yash/rc
Normal file
17
shell/.config/yash/rc
Normal file
@@ -0,0 +1,17 @@
|
||||
# Firstly, load the common customization script.
|
||||
. --autoload --no-alias initialization/common
|
||||
|
||||
LANG=pl_PL.UTF-8
|
||||
|
||||
set -o vi
|
||||
|
||||
[ -e ~/.config/shellconfig/aliases.sh ] && . ~/.config/shellconfig/aliases.sh
|
||||
|
||||
# Clear the screen with Ctrl-L.
|
||||
bindkey --emacs '\^L' clear-and-redraw-all
|
||||
bindkey --vi-insert '\^L' clear-and-redraw-all
|
||||
bindkey --vi-command '\^L' clear-and-redraw-all
|
||||
|
||||
# And add your own customization below.
|
||||
|
||||
eval "$(zoxide init posix --hook prompt)"
|
||||
@@ -3,3 +3,9 @@ set show-mode-in-prompt on
|
||||
set vi-ins-mode-string \1\e[6 q\2
|
||||
set vi-cmd-mode-string \1\e[2 q\2
|
||||
|
||||
set keymap vi-command
|
||||
"k": history-substring-search-backward
|
||||
"j": history-substring-search-forward
|
||||
|
||||
set keymap vi-insert
|
||||
"\C-l": clear-screen
|
||||
|
||||
@@ -8,8 +8,10 @@
|
||||
# for ssh logins, install and configure the libpam-umask package.
|
||||
#umask 022
|
||||
|
||||
export EDITOR=nvim
|
||||
export VISUAL=nvim
|
||||
export LANG=pl_PL.UTF-8
|
||||
|
||||
export EDITOR=vis
|
||||
export VISUAL=vis
|
||||
|
||||
# if running bash
|
||||
if [ -n "$BASH_VERSION" ]; then
|
||||
@@ -27,5 +29,15 @@ done
|
||||
|
||||
export PATH
|
||||
|
||||
# start X at login
|
||||
[[ -z "$DISPLAY" && "$XDG_VTNR" -eq 1 ]] && which /bin/sx > /dev/null && exec sx ~/.xsession
|
||||
# start X or Hyprland at login
|
||||
if [ -z "$DISPLAY" -a -z "$WAYLAND_DISPLAY" -a "$(tty)" = /dev/tty1 ]; then
|
||||
if which /usr/bin/sx > /dev/null; then
|
||||
exec /usr/bin/sx ~/.xsession
|
||||
elif which /usr/bin/startx > /dev/null; then
|
||||
exec /usr/bin/startx ~/.xsession
|
||||
elif which Hyprland > /dev/null && [ -d ~/.config/hypr ]; then
|
||||
exec Hyprland
|
||||
elif which river > /dev/null && [ -d ~/.config/river ]; then
|
||||
exec river
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -1,6 +1 @@
|
||||
# start X at login on first console or otherwise source ~/.profile
|
||||
if [[ -z "$DISPLAY" && "$XDG_VTNR" -eq 1 ]] && which /bin/sx > /dev/null; then
|
||||
exec sx ~/.xsession
|
||||
else
|
||||
source ~/.profile
|
||||
fi
|
||||
source ~/.profile
|
||||
|
||||
78
shell/.zshrc
78
shell/.zshrc
@@ -2,13 +2,13 @@
|
||||
# % cd ~/.local/share
|
||||
# % git clone https://github.com/zap-zsh/zap.git --branch=release-v1
|
||||
|
||||
export FZF_DEFAULT_OPTS='--color=bw,hl:green,hl+:green'
|
||||
export FZF_DEFAULT_OPTS='--color=bg+:#808080'
|
||||
zstyle ':fzf-tab:*' fzf-flags $FZF_DEFAULT_OPTS
|
||||
|
||||
export BAT_THEME=ansi
|
||||
|
||||
[ -f "${XDG_DATA_HOME:-$HOME/.local/share}/zap/zap.zsh" ] && source "${XDG_DATA_HOME:-$HOME/.local/share}/zap/zap.zsh"
|
||||
plug "zap-zsh/supercharge"
|
||||
plug "zap-zsh/exa"
|
||||
plug "zap-zsh/vim"
|
||||
plug "jeffreytse/zsh-vi-mode"
|
||||
|
||||
autoload -Uz compinit
|
||||
compinit
|
||||
@@ -17,16 +17,66 @@ plug "Aloxaf/fzf-tab"
|
||||
plug "zap-zsh/fzf"
|
||||
plug "zsh-users/zsh-autosuggestions"
|
||||
plug "zsh-users/zsh-syntax-highlighting"
|
||||
plug "MichaelAquilina/zsh-you-should-use"
|
||||
plug "zsh-users/zsh-history-substring-search"
|
||||
|
||||
if which zoxide > /dev/null; then
|
||||
eval "$(zoxide init zsh)"
|
||||
else
|
||||
plug "agkozak/zsh-z"
|
||||
ZSHZ_ECHO=1
|
||||
setopt autocd
|
||||
fi
|
||||
|
||||
ZSH_HIGHLIGHT_STYLES[comment]=fg=blue
|
||||
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND=bg=magenta,fg=black,bold
|
||||
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND=bg=red,fg=black,bold
|
||||
|
||||
bindkey '^[[A' history-substring-search-up
|
||||
bindkey '^[[B' history-substring-search-down
|
||||
bindkey -M vicmd 'k' history-substring-search-up
|
||||
bindkey -M vicmd 'j' history-substring-search-down
|
||||
|
||||
# Prompt.
|
||||
|
||||
autoload -Uz vcs_info
|
||||
precmd () { vcs_info }
|
||||
setopt prompt_subst
|
||||
zstyle ':vcs_info:git:*' check-for-changes true
|
||||
zstyle ':vcs_info:git:*' formats '%F{green}%r%f/%F{yellow}%S%f %F{magenta}(%b)%u%c%f '
|
||||
zstyle ':vcs_info:git:*' actionformats '%F{green}%r%f/%F{yellow}%S%f %F{magenta}(%b|%a)%u%c%f '
|
||||
zstyle ':vcs_info:*' nvcsformats '%F{green}%~%f%b '
|
||||
zstyle ':vcs_info:*' enable git
|
||||
PS1='%B%F{blue}%n@%m%f ${vcs_info_msg_0_}%B%#%f%b '
|
||||
RPROMPT='%(?..%B%F{red}%?%f%b)'
|
||||
if which starship > /dev/null; then
|
||||
eval "$(starship init zsh)"
|
||||
else
|
||||
autoload -Uz vcs_info
|
||||
precmd () { vcs_info }
|
||||
setopt prompt_subst
|
||||
zstyle ':vcs_info:git:*' check-for-changes true
|
||||
zstyle ':vcs_info:git:*' formats '%F{green}%r%f/%F{yellow}%S%f %F{magenta}(%b)%u%c%f '
|
||||
zstyle ':vcs_info:git:*' actionformats '%F{green}%r%f/%F{yellow}%S%f %F{magenta}(%b|%a)%u%c%f '
|
||||
zstyle ':vcs_info:*' nvcsformats '%F{green}%~%f%b '
|
||||
zstyle ':vcs_info:*' enable git
|
||||
PS1='%B%F{blue}%n@%m%f ${vcs_info_msg_0_}%B%#%f%b '
|
||||
RPROMPT='%(?..%B%F{red}%?%f%b)'
|
||||
fi
|
||||
|
||||
# History.
|
||||
|
||||
HISTFILE=${ZDOTDIR:-~}/.zsh_history
|
||||
HISTSIZE=10000
|
||||
SAVEHIST=10000
|
||||
setopt append_history
|
||||
setopt extended_history
|
||||
setopt hist_expire_dups_first
|
||||
setopt hist_find_no_dups
|
||||
setopt hist_ignore_all_dups
|
||||
setopt hist_ignore_space
|
||||
setopt hist_reduce_blanks
|
||||
setopt inc_append_history
|
||||
setopt share_history
|
||||
|
||||
# Convenience.
|
||||
|
||||
bindkey -M vicmd '^[h' run-help
|
||||
bindkey -M viins '^[h' run-help
|
||||
|
||||
setopt glob_complete
|
||||
setopt interactive_comments
|
||||
|
||||
# Aliases.
|
||||
|
||||
for f in ~/.config/shellconfig/*.sh(N) ~/.config/shellconfig/*.zsh(N); do source "$f"; done
|
||||
|
||||
@@ -1,13 +1,55 @@
|
||||
set -g status-bg colour0
|
||||
set -g status-fg colour7
|
||||
|
||||
set -g prefix C-t
|
||||
bind-key C-t send-prefix
|
||||
bind-key C-j select-pane -D
|
||||
bind-key C-k select-pane -U
|
||||
bind-key C-h select-pane -L
|
||||
bind-key C-l select-pane -R
|
||||
set -g default-terminal "screen-256color"
|
||||
set -sg escape-time 0
|
||||
|
||||
bind-key -n M-1 select-window -t 1
|
||||
bind-key -n M-2 select-window -t 2
|
||||
bind-key -n M-3 select-window -t 3
|
||||
bind-key -n M-4 select-window -t 4
|
||||
bind-key -n M-5 select-window -t 5
|
||||
bind-key -n M-6 select-window -t 6
|
||||
bind-key -n M-7 select-window -t 7
|
||||
bind-key -n M-8 select-window -t 8
|
||||
bind-key -n M-9 select-window -t 9
|
||||
#bind-key -n M-0 select-window -t 10
|
||||
|
||||
bind-key -n M-! swap-window -t 1
|
||||
bind-key -n M-@ swap-window -t 2
|
||||
bind-key -n M-# swap-window -t 3
|
||||
bind-key -n M-$ swap-window -t 4
|
||||
bind-key -n M-% swap-window -t 5
|
||||
bind-key -n M-^ swap-window -t 6
|
||||
bind-key -n M-& swap-window -t 7
|
||||
bind-key -n M-* swap-window -t 8
|
||||
bind-key -n M-( swap-window -t 9
|
||||
bind-key -n M-) swap-window -t 10
|
||||
|
||||
bind-key S new-session
|
||||
bind-key T switch-client -l
|
||||
|
||||
bind-key Right resize-pane -R 8
|
||||
bind-key Left resize-pane -L 8
|
||||
bind-key Up resize-pane -U 4
|
||||
bind-key Down resize-pane -D 4
|
||||
|
||||
set -g default-terminal "xterm-256color"
|
||||
set -as terminal-features ",*:RGB"
|
||||
|
||||
set -g base-index 1
|
||||
setw -g base-index 1
|
||||
|
||||
set -g set-titles on
|
||||
set -g set-titles-string "[#S] #P:#W #T"
|
||||
set -g set-titles-string "#H [#S] #W"
|
||||
|
||||
set -g status-justify centre
|
||||
set -g status-left " #[fg=#316781]#[bg=#316781]#[fg=#abb5ba] #H #[bg=default]#[fg=#316781]#[fg=default] #S"
|
||||
set -g status-left-length 50
|
||||
set -g status-right "#[fg=#316781]#[bg=#316781]#[fg=#abb5ba] %H:%M #[bg=default]#[fg=#316781] "
|
||||
set-window-option -g window-status-current-format '#[fg=#316781]#[bg=#316781]#[fg=#abb5ba] #I:#W#F #[fg=#316781]#[bg=black]'
|
||||
|
||||
bind-key -n M-0 run-shell tmux-session-menu
|
||||
|
||||
bind -T copy-mode-vi v send -X begin-selection
|
||||
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel
|
||||
bind P paste-buffer
|
||||
|
||||
5
tmux/bin/tmux-session-menu
Executable file
5
tmux/bin/tmux-session-menu
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
tmux list-sessions -F '#S' \
|
||||
| awk 'BEGIN {ORS=" "; print "toggle t \"switch-client -l\""} {print $1, NR, "\"switch-client -t", $1 "\""}' \
|
||||
| xargs tmux display-menu -T "Switch session"
|
||||
185
vis/.config/vis/fast-jump.lua
Normal file
185
vis/.config/vis/fast-jump.lua
Normal file
@@ -0,0 +1,185 @@
|
||||
require('vis')
|
||||
|
||||
local lpeg = vis.lpeg
|
||||
|
||||
local P = lpeg.P
|
||||
local Cp = lpeg.Cp
|
||||
local Ct = lpeg.Ct
|
||||
|
||||
local function search(p)
|
||||
return Ct(((1 - p)^0 * Cp() * p)^0)
|
||||
end
|
||||
|
||||
local up_keys = {
|
||||
'a', 's', 'd', 'f' ,
|
||||
'q', 'w', 'e', 'r', 't', 'g',
|
||||
'z', 'x', 'c', 'v', 'b',
|
||||
'1', '2', '3', '4', '5',
|
||||
'A', 'S', 'D', 'F' ,
|
||||
'Q', 'W', 'E', 'R', 'T', 'G',
|
||||
'Z', 'X', 'C', 'V', 'B',
|
||||
'!', '@', '#', '$', '%',
|
||||
'`', '~',
|
||||
}
|
||||
|
||||
local down_keys = {
|
||||
'j', 'k', 'l', ';',
|
||||
'y', 'u', 'i', 'o', 'p',
|
||||
'n', 'm', ',', '.', '/',
|
||||
'6', '7', '8', '9', '0',
|
||||
'J', 'K', 'L', ':',
|
||||
'Y', 'U', 'I', 'O', 'P',
|
||||
'N', 'M', '<', '>', '?',
|
||||
'^', '&', '*', '(', ')',
|
||||
"'", '"', '\\', '|',
|
||||
}
|
||||
|
||||
local function merge(a, b)
|
||||
local c = {}
|
||||
for i = 1, #a do
|
||||
c[i] = a[i]
|
||||
end
|
||||
for i = 1, #b do
|
||||
c[#a + i] = b[i]
|
||||
end
|
||||
return c
|
||||
end
|
||||
|
||||
local function layout()
|
||||
local l, r, t, n = 0, 0, 0, 0
|
||||
local opt = vis.win.options
|
||||
if opt.numbers or opt.relativenumbers then
|
||||
n = #tostring(vis.win.viewport.lines.finish)
|
||||
end
|
||||
if vis.ui.layout == vis.ui.layouts.HORIZONTAL then
|
||||
for win in vis:windows() do
|
||||
if win == vis.win then
|
||||
break
|
||||
end
|
||||
t = t + win.height
|
||||
end
|
||||
elseif vis.ui.layout == vis.ui.layouts.VERTICAL then
|
||||
local left = true
|
||||
for win in vis:windows() do
|
||||
if win == vis.win then
|
||||
left = false
|
||||
if opt.wrapcolumn ~= 0 then
|
||||
r = r + win.width - n - opt.wrapcolumn
|
||||
end
|
||||
elseif left then
|
||||
l = l + win.width + 1
|
||||
else
|
||||
r = r + win.width
|
||||
end
|
||||
end
|
||||
end
|
||||
return '--wrap --padding=' .. t .. ',' .. r .. ',0,' .. (l + n) .. ' --tabstop=' .. opt.tabwidth
|
||||
end
|
||||
|
||||
local mu = #up_keys
|
||||
local md = #down_keys
|
||||
local up = merge(up_keys, down_keys)
|
||||
local down = merge(down_keys, up_keys)
|
||||
|
||||
local jumps = {}
|
||||
|
||||
local function jump(keys)
|
||||
local _, esc = keys:find('<Escape>')
|
||||
if esc then
|
||||
return esc
|
||||
end
|
||||
local ret = #keys
|
||||
keys = keys:gsub('<Enter>', '\n')
|
||||
if #keys < 2 then
|
||||
return -1
|
||||
end
|
||||
if #keys > 2 then
|
||||
vis:info('not found')
|
||||
return ret
|
||||
end
|
||||
local v = vis.win.viewport.bytes
|
||||
local data = vis.win.file:content(v)
|
||||
|
||||
local p = search(P(keys))
|
||||
local lst = p:match(data)
|
||||
if not lst or #lst == 0 then
|
||||
vis:info('not found')
|
||||
return ret
|
||||
end
|
||||
if #lst == 1 then
|
||||
vis.win.selection.pos = v.start + lst[1] - 1
|
||||
return ret
|
||||
end
|
||||
local pos = vis.win.selection.pos - v.start
|
||||
local prev = 0
|
||||
local next = #lst + 1
|
||||
local t = {}
|
||||
jumps = {}
|
||||
for i = 1, #lst do
|
||||
local a = lst[i]
|
||||
if a < pos then
|
||||
prev = i
|
||||
end
|
||||
if a > pos then
|
||||
next = i
|
||||
break
|
||||
end
|
||||
end
|
||||
local nu = prev
|
||||
local nd = #lst - next
|
||||
local j = 1
|
||||
for i = prev, 1, -1 do
|
||||
if j == mu + 1 then
|
||||
j = j + nd
|
||||
end
|
||||
if not up[j] then
|
||||
break
|
||||
end
|
||||
t[i] = up[j]
|
||||
jumps[t[i]] = v.start + lst[i] - 1
|
||||
j = j + 1
|
||||
end
|
||||
j = 1
|
||||
for i = next, #lst do
|
||||
if j == md + 1 then
|
||||
j = j + nu
|
||||
end
|
||||
if not down[j] then
|
||||
break
|
||||
end
|
||||
t[i] = down[j]
|
||||
jumps[t[i]] = v.start + lst[i] - 1
|
||||
j = j + 1
|
||||
end
|
||||
local input = ''
|
||||
local k = 1
|
||||
for i = 1, #lst do
|
||||
input = input .. data:sub(k, lst[i] - 1)
|
||||
if t[i] then
|
||||
input = input .. '\x1b[1;37;44m' .. keys .. '\x1b[42m' .. t[i] .. '\x1b[0m'
|
||||
k = lst[i] + 3
|
||||
if data:sub(k - 1, k - 1) == '\n' then
|
||||
k = k - 1
|
||||
end
|
||||
else
|
||||
input = input .. '\x1b[1;37;44m' .. keys .. '\x1b[0m'
|
||||
k = lst[i] + 2
|
||||
end
|
||||
end
|
||||
input = input .. data:sub(k)
|
||||
|
||||
local code, out, err = vis:pipe(input, 'fzf --ansi --layout=reverse-list --no-info --no-separator --color gutter:-1,bg+:-1 --marker="" ' .. layout() .. ' --print-query --bind change:accept')
|
||||
if code ~= 0 then
|
||||
vis:info(err or ('fzf exit code ' .. code))
|
||||
else
|
||||
local p = jumps[out:sub(1, 1)]
|
||||
if p then
|
||||
vis.win.selection.pos = p
|
||||
else
|
||||
vis:info('not found')
|
||||
end
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
vis:map(vis.modes.NORMAL, '\\', jump)
|
||||
291
vis/.config/vis/fzf.sh
Executable file
291
vis/.config/vis/fzf.sh
Executable file
@@ -0,0 +1,291 @@
|
||||
#!/bin/sh
|
||||
|
||||
prompt=${FZF_PROMPT%> }
|
||||
cmd=${prompt%+*}
|
||||
hidden=${prompt#$cmd}
|
||||
|
||||
ripgrep='rg --column --line-number --color=always --smart-case'
|
||||
|
||||
if [ "$1" = list ]; then
|
||||
case "$FZF_HEADER_LABEL" in
|
||||
:?*)
|
||||
dir=${FZF_HEADER_LABEL#?}
|
||||
;;
|
||||
*)
|
||||
dir=
|
||||
;;
|
||||
esac
|
||||
case "$prompt" in
|
||||
dir:*)
|
||||
dir=${FZF_HEADER_LABEL#?}
|
||||
fd -t d '' ~/src ~/dotfiles 2 -H -E '\.git' -E node_modules
|
||||
zoxide query -l
|
||||
echo $dir
|
||||
exit
|
||||
;;
|
||||
files)
|
||||
exec fd --type f '' $dir
|
||||
;;
|
||||
files+hidden)
|
||||
exec fd --type f -H '' $dir
|
||||
;;
|
||||
find-files*)
|
||||
exec find $dir -type f
|
||||
;;
|
||||
search)
|
||||
exec $ripgrep "$FZF_QUERY" $dir
|
||||
;;
|
||||
search+hidden)
|
||||
exec $ripgrep -. "$FZF_QUERY" $dir
|
||||
;;
|
||||
git-files*)
|
||||
if [ -z "$dir" ]; then
|
||||
exec git ls-files
|
||||
else
|
||||
exec git -C $dir ls-files --format "$dir/%(path)"
|
||||
fi
|
||||
;;
|
||||
git-search*)
|
||||
if [ -z "$dir" ]; then
|
||||
exec git grep --column --line-number --color=always "$FZF_QUERY"
|
||||
else
|
||||
exec git -C $dir grep --column --line-number --color=always "$FZF_QUERY" | sed "s:^:$dir/:"
|
||||
fi
|
||||
;;
|
||||
jj-files*)
|
||||
if [ -z "$dir" ]; then
|
||||
exec jj file list --ignore-working-copy
|
||||
else
|
||||
jj=$(cd $dir && jj root --ignore-working-copy 2> /dev/null)
|
||||
exec jj -R $jj file list --ignore-working-copy $dir
|
||||
fi
|
||||
;;
|
||||
jj-search*)
|
||||
if [ -z "$dir" ]; then
|
||||
exec $ripgrep "$FZF_QUERY" $(jj file list --ignore-working-copy)
|
||||
else
|
||||
jj=$(cd $dir && jj root --ignore-working-copy 2> /dev/null)
|
||||
exec $ripgrep "$FZF_QUERY" $(jj -R $jj file list --ignore-working-copy $dir)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$1" = preview ]; then
|
||||
if [ -n "$3" ]; then
|
||||
start=$(( $3 - $FZF_PREVIEW_LINES / 2 ))
|
||||
if [ $start -lt 1 ]; then
|
||||
start=1
|
||||
fi
|
||||
end=$(( $start + $FZF_PREVIEW_LINES ))
|
||||
exec bat --style=numbers --color=always --highlight-line $3 --line-range $start:$end $2
|
||||
else
|
||||
exec bat --style=numbers --color=always $2
|
||||
fi
|
||||
fi
|
||||
|
||||
reload="reload(sh $0 list || true)"
|
||||
no_search="rebind(change)+disable-search"
|
||||
search="unbind(change)+enable-search"
|
||||
|
||||
if [ "$1" = key ]; then
|
||||
case "$FZF_KEY" in
|
||||
alt-a)
|
||||
prompt=${FZF_PROMPT#dir:}
|
||||
if [ $prompt = $FZF_PROMPT ]; then
|
||||
echo "change-prompt(dir:$FZF_PROMPT)+$search+$reload"
|
||||
else
|
||||
case "$cmd" in
|
||||
*files)
|
||||
infix="$search"
|
||||
;;
|
||||
*)
|
||||
infix="$no_search"
|
||||
;;
|
||||
esac
|
||||
echo "change-prompt($prompt)+$infix+$reload"
|
||||
fi
|
||||
;;
|
||||
alt-d)
|
||||
dir=${FZF_HEADER_LABEL#?}
|
||||
case "$FZF_HEADER_LABEL" in
|
||||
.?*)
|
||||
echo "change-header(path: $dir)+change-header-label(:$dir)+$reload"
|
||||
;;
|
||||
*)
|
||||
echo "change-header()+change-header-label(.$dir)+$reload"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
alt-f)
|
||||
case "$cmd" in
|
||||
files)
|
||||
prompt="find-files$hidden"
|
||||
;;
|
||||
*files|search)
|
||||
prompt="files$hidden"
|
||||
;;
|
||||
*search)
|
||||
prompt="${cmd%-*}-files$hidden"
|
||||
;;
|
||||
esac
|
||||
echo "change-prompt($prompt> )+$search+$reload"
|
||||
;;
|
||||
alt-g)
|
||||
case "$cmd" in
|
||||
*files)
|
||||
prompt="git-files$hidden"
|
||||
echo "change-prompt($prompt> )+$search+$reload"
|
||||
;;
|
||||
*search)
|
||||
prompt="git-search$hidden"
|
||||
echo "change-prompt($prompt> )+$no_search+$reload"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
alt-h)
|
||||
if [ -z "$hidden" ]; then
|
||||
prompt="$cmd+hidden"
|
||||
else
|
||||
prompt="$cmd"
|
||||
fi
|
||||
echo "change-prompt($prompt> )+$reload"
|
||||
;;
|
||||
alt-j)
|
||||
case "$cmd" in
|
||||
*files)
|
||||
prompt="jj-files$hidden"
|
||||
echo "change-prompt($prompt> )+$search+$reload"
|
||||
;;
|
||||
*search)
|
||||
prompt="jj-search$hidden"
|
||||
echo "change-prompt($prompt> )+$no_search+$reload"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
alt-s)
|
||||
case "$cmd" in
|
||||
*search|files)
|
||||
prompt="search$hidden"
|
||||
;;
|
||||
*files)
|
||||
prompt="${cmd%-*}-search$hidden"
|
||||
;;
|
||||
esac
|
||||
echo "change-prompt($prompt> )+$no_search+$reload"
|
||||
;;
|
||||
esac
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$1" = chdir ]; then
|
||||
dir="$2"
|
||||
prompt=${FZF_PROMPT#dir:}
|
||||
case "$cmd" in
|
||||
*files)
|
||||
infix="$search"
|
||||
;;
|
||||
*)
|
||||
infix="$no_search"
|
||||
;;
|
||||
esac
|
||||
echo "change-header(path: $dir)+change-header-label(:$dir)+change-prompt($prompt)+$infix+$reload"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -n "$2" ]; then
|
||||
label=".$2"
|
||||
else
|
||||
label=".."
|
||||
fi
|
||||
|
||||
case ${1%+hidden} in
|
||||
auto-files)
|
||||
git=$(git rev-parse --show-toplevel 2> /dev/null)
|
||||
jj=$(jj root --ignore-working-copy 2> /dev/null)
|
||||
if [ -n "$jj" ] && [ "${git#$jj}" = "$git" -o "$git" = "$jj" ]; then
|
||||
cmd="jj-files$hidden"
|
||||
elif [ -n "$git" ] && [ "${jj#$git}" = "$jj" ]; then
|
||||
cmd="git-files$hidden"
|
||||
else
|
||||
cmd="files"
|
||||
fi
|
||||
action="$search"
|
||||
prompt="$cmd> "
|
||||
;;
|
||||
auto-search)
|
||||
git=$(git rev-parse --show-toplevel 2> /dev/null)
|
||||
jj=$(jj root --ignore-working-copy 2> /dev/null)
|
||||
if [ -n "$jj" ] && [ "${git#$jj}" = "$git" -o "$git" = "$jj" ]; then
|
||||
cmd="jj-search$hidden"
|
||||
elif [ -n "$git" ] && [ "${jj#$git}" = "$jj" ]; then
|
||||
cmd="git-search$hidden"
|
||||
else
|
||||
cmd="search"
|
||||
fi
|
||||
action="$no_search"
|
||||
prompt="$cmd> "
|
||||
;;
|
||||
files|git-files|jj-files|find-files)
|
||||
cmd="$1"
|
||||
action="$search"
|
||||
prompt="$1> "
|
||||
;;
|
||||
search|git-search|jj-search)
|
||||
cmd="$1"
|
||||
action="$no_search"
|
||||
prompt="$1> "
|
||||
;;
|
||||
*)
|
||||
cmd="files"
|
||||
action="$search"
|
||||
prompt="files> "
|
||||
;;
|
||||
esac
|
||||
key="transform(sh $0 key)"
|
||||
|
||||
HELP='Keys:
|
||||
|
||||
alt-? help
|
||||
alt-a select alternative directory
|
||||
alt-d toggle alternative directory
|
||||
alt-f switch to files (twice for plain files)
|
||||
alt-g switch to git
|
||||
alt-j switch to jj
|
||||
alt-h toggle hidden
|
||||
alt-p toggle preview (also to turn off help)
|
||||
alt-s switch to search (twice for plain search)
|
||||
alt-u toggle preview window position (right or up)
|
||||
'
|
||||
|
||||
accept="
|
||||
if [ \${FZF_PROMPT#dir:} = \$FZF_PROMPT ]; then
|
||||
echo accept
|
||||
else
|
||||
sh $0 chdir {1}
|
||||
fi
|
||||
"
|
||||
|
||||
exec fzf --query "$3" \
|
||||
--prompt "$prompt" \
|
||||
--header-label "$label" \
|
||||
--multi \
|
||||
--ansi \
|
||||
--scheme path \
|
||||
--delimiter : \
|
||||
--ghost ' (Use alt-? for help)' \
|
||||
--bind "enter:transform($accept)" \
|
||||
--bind "change:$reload" \
|
||||
--bind "start:$reload+$action" \
|
||||
--bind "alt-a:$key" \
|
||||
--bind "alt-d:$key" \
|
||||
--bind "alt-f:$key" \
|
||||
--bind "alt-g:$key" \
|
||||
--bind "alt-j:$key" \
|
||||
--bind "alt-h:$key" \
|
||||
--bind "alt-s:$key" \
|
||||
--bind "alt-p:change-preview(sh $0 preview {1} {2})+toggle-preview" \
|
||||
--bind "alt-u:change-preview-window(up|right)" \
|
||||
--bind "alt-?:change-preview(echo '$HELP')+show-preview" \
|
||||
--bind "alt-enter:unbind(change,alt-enter)+enable-search+clear-query"
|
||||
31
vis/.config/vis/lexers/go_ext.lua
Normal file
31
vis/.config/vis/lexers/go_ext.lua
Normal file
@@ -0,0 +1,31 @@
|
||||
-- Copyright 2006-2025 Mitchell. See LICENSE.
|
||||
-- go with SQL LPeg lexer.
|
||||
|
||||
local lexer = lexer
|
||||
local starts_line = lexer.starts_line
|
||||
local B, P, S = lpeg.B, lpeg.P, lpeg.S
|
||||
|
||||
local lex = lexer.new(..., {inherit = lexer.load('go')})
|
||||
|
||||
local open_brace = lex:tag(lexer.OPERATOR, P('{'))
|
||||
local close_brace = lex:tag(lexer.OPERATOR, P('}'))
|
||||
local backtick = lex:tag(lexer.CODE, P('`'))
|
||||
local ws = lex:get_rule('whitespace')
|
||||
|
||||
local tpl = lexer.new("template")
|
||||
tpl:add_rule('keyword', lex:tag(lexer.KEYWORD, lexer.word_match('if else end with range break define continue template block')))
|
||||
tpl:add_rule('constant', lex:get_rule('constant'))
|
||||
tpl:add_rule('operator', lex:get_rule('operator') + lex:tag(lexer.OPERATOR, S('$')))
|
||||
local func = lexer.after_set(' \t\n{|', lexer.word)
|
||||
tpl:add_rule('function', lex:tag(lexer.FUNCTION, func))
|
||||
tpl:add_rule('identifier', lex:get_rule('identifier'))
|
||||
tpl:add_rule('string', lex:get_rule('string'))
|
||||
tpl:add_rule('number', lex:get_rule('number'))
|
||||
|
||||
local sql = lexer.load('sql')
|
||||
local sql_kwd = lexer.word_match('ALTER CREATE DELETE DROP GRANT INSERT SELECT UPDATE WITH')
|
||||
sql:embed(tpl, open_brace * open_brace, close_brace * close_brace)
|
||||
|
||||
lex:embed(sql, backtick * #(ws^0 * sql_kwd), backtick)
|
||||
|
||||
return lex
|
||||
87
vis/.config/vis/lexers/odin.lua
Normal file
87
vis/.config/vis/lexers/odin.lua
Normal file
@@ -0,0 +1,87 @@
|
||||
-- Copyright 2006-2024 Mitchell. See LICENSE.
|
||||
-- Odin LPeg lexer.
|
||||
|
||||
local lexer = lexer
|
||||
local P, S = lpeg.P, lpeg.S
|
||||
|
||||
local lex = lexer.new(...)
|
||||
|
||||
-- Keywords.
|
||||
lex:add_rule('keyword', lex:tag(lexer.KEYWORD, lex:word_match(lexer.KEYWORD)))
|
||||
|
||||
-- Constants.
|
||||
lex:add_rule('constant', lex:tag(lexer.CONSTANT_BUILTIN, lex:word_match(lexer.CONSTANT_BUILTIN)))
|
||||
|
||||
-- Types.
|
||||
lex:add_rule('type', lex:tag(lexer.TYPE, lex:word_match(lexer.TYPE)))
|
||||
|
||||
-- Functions.
|
||||
local builtin_proc = -lpeg.B('.') *
|
||||
lex:tag(lexer.FUNCTION_BUILTIN, lex:word_match(lexer.FUNCTION_BUILTIN))
|
||||
local proc = lex:tag(lexer.FUNCTION, lexer.word)
|
||||
lex:add_rule('function', (builtin_proc + proc) * #(lexer.space^0 * '(') +
|
||||
proc * #(lexer.space^0 * '::' * lexer.space^0 * "proc"))
|
||||
|
||||
-- Identifiers.
|
||||
lex:add_rule('identifier', lex:tag(lexer.IDENTIFIER, lexer.word))
|
||||
|
||||
-- Strings.
|
||||
local sq_str = lexer.range("'", true)
|
||||
local dq_str = lexer.range('"', true)
|
||||
local raw_str = lexer.range('`', false, false)
|
||||
lex:add_rule('string', lex:tag(lexer.STRING, sq_str + dq_str + raw_str))
|
||||
|
||||
-- Comments.
|
||||
local line_comment = lexer.to_eol('//')
|
||||
local block_comment = lexer.range('/*', '*/')
|
||||
lex:add_rule('comment', lex:tag(lexer.COMMENT, line_comment + block_comment))
|
||||
|
||||
-- Numbers.
|
||||
lex:add_rule('number', lex:tag(lexer.NUMBER, lexer.number * P('i')^-1))
|
||||
|
||||
-- Operators.
|
||||
lex:add_rule('operator', lex:tag(lexer.OPERATOR,
|
||||
P('%%=') + P('&~=') + P('<<=') + P('>>=') + P('&&=') + P('||=') + P('---') + P('..=') +
|
||||
P('..<') + P('%%') + P('&~') + P('<<') + P('>>') + P('&&') + P('||') + P('+=') + P('-=') +
|
||||
P('*=') + P('/=') + P('%=') + P('&=') + P('|=') + P('~=') + P('++') + P('--') + P('->') +
|
||||
P('==') + P('!=') + P('<=') + P('>=') + P('..') + S('=!#@$^?+-*/%&|~<>()[]{}:;.,')))
|
||||
|
||||
-- Fold points.
|
||||
lex:add_fold_point(lexer.OPERATOR, '{', '}')
|
||||
lex:add_fold_point(lexer.COMMENT, '/*', '*/')
|
||||
|
||||
-- Word lists.
|
||||
lex:set_word_list(lexer.KEYWORD, {
|
||||
'import', 'foreign', 'package', 'typeid', 'when', 'where', 'if', 'else', 'for', 'switch', 'in',
|
||||
'not_in', 'do', 'case', 'break', 'continue', 'fallthrough', 'defer', 'return', 'proc', 'struct',
|
||||
'union', 'enum', 'bit_set', 'bit_field', 'map', 'dynamic', 'auto_cast', 'cast', 'transmute',
|
||||
'distinct', 'using', 'context', 'or_else', 'or_return', 'or_break', 'or_continue', 'asm', 'matrix'
|
||||
})
|
||||
|
||||
lex:set_word_list(lexer.CONSTANT_BUILTIN, {
|
||||
'ODIN_ARCH', 'ODIN_BUILD_MODE', 'ODIN_COMPILE_TIMESTAMP', 'ODIN_DEBUG',
|
||||
'ODIN_DEFAULT_TO_NIL_ALLOCATOR', 'ODIN_DEFAULT_TO_PANIC_ALLOCATOR', 'ODIN_DISABLE_ASSERT',
|
||||
'ODIN_ENDIAN', 'ODIN_ERROR_POS_STYLE', 'ODIN_NO_CRT', 'ODIN_NO_ENTRY_POINT', 'ODIN_NO_RTTI',
|
||||
'ODIN_OS', 'ODIN_PLATFORM_SUBTARGET', 'ODIN_ROOT', 'ODIN_VENDOR', 'ODIN_VERSION',
|
||||
'ODIN_WINDOWS_SUBSYSTEM', 'false', 'nil', 'true'
|
||||
})
|
||||
|
||||
lex:set_word_list(lexer.TYPE, {
|
||||
'b16', 'b32', 'b64', 'b8', 'bool', 'byte', 'complex128', 'complex32', 'complex64', 'cstring',
|
||||
'cstring16', 'f16', 'f16be', 'f16le', 'f32', 'f32be', 'f32le', 'f64', 'f64be', 'f64le', 'i128',
|
||||
'i128be', 'i128le', 'i16', 'i16be', 'i16le', 'i32', 'i32be', 'i32le', 'i64', 'i64be', 'i64le',
|
||||
'i8', 'int', 'quaternion128', 'quaternion256', 'quaternion64', 'rawptr', 'rune', 'string',
|
||||
'string16', 'typeid', 'u128', 'u128be', 'u128le', 'u16', 'u16be', 'u16le', 'u32', 'u32be',
|
||||
'u32le', 'u64', 'u64be', 'u64le', 'u8', 'uint', 'uintptr', 'Maybe', 'Objc_Block'
|
||||
})
|
||||
|
||||
lex:set_word_list(lexer.FUNCTION_BUILTIN, {
|
||||
'abs', 'align_of', 'cap', 'clamp', 'complex', 'compress_values', 'conj', 'expand_values', 'imag',
|
||||
'jmag', 'kmag', 'len', 'max', 'min', 'offset_of', 'offset_of_by_string', 'offset_of_member',
|
||||
'offset_of_selector', 'quaternion', 'raw_data', 'real', 'size_of', 'soa_unzip', 'soa_zip',
|
||||
'swizzle', 'type_info_of', 'type_of', 'typeid_of'
|
||||
})
|
||||
|
||||
lexer.property['scintillua.comment'] = '//'
|
||||
|
||||
return lex
|
||||
65
vis/.config/vis/lexers/templ.lua
Normal file
65
vis/.config/vis/lexers/templ.lua
Normal file
@@ -0,0 +1,65 @@
|
||||
-- Copyright 2006-2025 Mitchell. See LICENSE.
|
||||
-- templ LPeg lexer.
|
||||
|
||||
local lexer = lexer
|
||||
local starts_line = lexer.starts_line
|
||||
local P, S = lpeg.P, lpeg.S
|
||||
|
||||
local lex = lexer.new(..., {inherit = lexer.load('go')})
|
||||
|
||||
local close_paren = lex:tag(lexer.OPERATOR, P(')'))
|
||||
local open_brace = lex:tag(lexer.OPERATOR, P('{'))
|
||||
local close_brace = lex:tag(lexer.OPERATOR, P('}'))
|
||||
local colon = lex:tag(lexer.OPERATOR, P(':'))
|
||||
local at = lex:tag(lexer.OPERATOR, P('@'))
|
||||
local ws = lex:get_rule('whitespace')
|
||||
local ident = lex:get_rule('identifier')
|
||||
|
||||
local html = lexer.load('html')
|
||||
local go_expr = lexer.load('go', 'go.expr')
|
||||
local go_stmt1 = lexer.load('go', 'go.stmt1')
|
||||
local go_stmt2 = lexer.load('go', 'go.stmt2')
|
||||
local go_stmt3 = lexer.load('go', 'go.stmt3')
|
||||
local for_ = lex:tag(lexer.KEYWORD, lexer.word_match('for if switch'))
|
||||
local else_ = close_brace * ws^0 * lex:tag(lexer.KEYWORD, P('else'))
|
||||
local case_ = lex:tag(lexer.KEYWORD, lexer.word_match('case default'))
|
||||
html:embed(go_expr, open_brace, close_brace * close_brace^-1)
|
||||
html:embed(go_stmt1, starts_line(for_ + else_, true), open_brace * #lexer.newline)
|
||||
html:embed(go_stmt2, starts_line(case_, true), colon * #lexer.newline)
|
||||
html:embed(go_stmt3, starts_line(at, true), (ident + open_brace + close_paren) * #lexer.newline)
|
||||
|
||||
local func_block_start = close_paren * ws^0 * open_brace
|
||||
|
||||
lex:set_word_list(lexer.KEYWORD, 'templ css script', true)
|
||||
|
||||
local function starts_with(keyword)
|
||||
local prefix = '\n' .. keyword .. '%s'
|
||||
return function(input, index)
|
||||
local i = index - 1024
|
||||
if i < 1 then
|
||||
i = 1
|
||||
end
|
||||
local s = input:sub(i, index)
|
||||
local k = 0
|
||||
repeat
|
||||
i = s:find('\n%w', i)
|
||||
if i then
|
||||
k = i
|
||||
i = i + 2
|
||||
end
|
||||
until not i
|
||||
return k > 0 and s:find(prefix, k) and true
|
||||
end
|
||||
end
|
||||
|
||||
lex:embed(html, func_block_start * P(starts_with("templ")), starts_line(close_brace))
|
||||
|
||||
local css = lexer.load('css')
|
||||
local css_go_expr = lexer.load('go', 'go.expr2')
|
||||
css:embed(css_go_expr, open_brace, close_brace)
|
||||
lex:embed(css, func_block_start * P(starts_with("css")), starts_line(close_brace))
|
||||
|
||||
local js = lexer.load('javascript')
|
||||
lex:embed(js, func_block_start * P(starts_with("script")), starts_line(close_brace))
|
||||
|
||||
return lex
|
||||
64
vis/.config/vis/plugins.sh
Executable file
64
vis/.config/vis/plugins.sh
Executable file
@@ -0,0 +1,64 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo 'error: argument required (action), one of: clone, fetch, merge' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ACTION="$1"
|
||||
PLUGINS_DIR=$(dirname $(realpath "$0"))/plugins
|
||||
|
||||
cd "$PLUGINS_DIR"
|
||||
|
||||
action() {
|
||||
case "$1" in
|
||||
*:*)
|
||||
P="$1"
|
||||
|
||||
;;
|
||||
*)
|
||||
P="https://github.com/$1"
|
||||
;;
|
||||
esac
|
||||
B=$(basename "$1")
|
||||
B="${B%.git}"
|
||||
case "$ACTION" in
|
||||
clone)
|
||||
if [ ! -e "$B" ]; then
|
||||
echo "$ACTION $B"
|
||||
git clone "$P"
|
||||
fi
|
||||
;;
|
||||
fetch)
|
||||
if [ -e "$B" ]; then
|
||||
echo "$ACTION $B"
|
||||
git -C "$B" fetch
|
||||
fi
|
||||
;;
|
||||
merge)
|
||||
if [ -e "$B" ]; then
|
||||
echo "$ACTION $B"
|
||||
git -C "$B" merge
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "error: unsupported action: $ACTION" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
for plugin in \
|
||||
'https://gitlab.com/muhq/vis-lspc' \
|
||||
'lutobler/vis-commentary' \
|
||||
'https://repo.or.cz/vis-surround.git' \
|
||||
'peaceant/vis-fzf-mru' \
|
||||
'https://gitlab.com/muhq/vis-build' \
|
||||
'erf/vis-cursors' \
|
||||
'thimc/vis-colorizer' \
|
||||
'https://repo.or.cz/vis-quickfix.git' \
|
||||
'https://repo.or.cz/vis-pairs.git' \
|
||||
'https://gitea.lupan.pl/lupan/vis-pin-files.git'; \
|
||||
do
|
||||
action "$plugin"
|
||||
done
|
||||
158
vis/.config/vis/themes/lupan-dark.lua
Normal file
158
vis/.config/vis/themes/lupan-dark.lua
Normal file
@@ -0,0 +1,158 @@
|
||||
-- Eight-color scheme
|
||||
local lexers = vis.lexers
|
||||
lexers.STYLE_DEFAULT ='back:#1f212e,fore:#9da0af'
|
||||
lexers.STYLE_NOTHING = ''
|
||||
lexers.STYLE_ATTRIBUTE = 'fore:#a1a3aa,bold'
|
||||
lexers.STYLE_CLASS = 'fore:yellow,bold'
|
||||
lexers.STYLE_COMMENT = 'fore:#334d40,bold'
|
||||
lexers.STYLE_CONSTANT = 'fore:cyan,bold'
|
||||
lexers.STYLE_DEFINITION = 'fore:blue,bold'
|
||||
lexers.STYLE_ERROR = 'fore:red,italics'
|
||||
lexers.STYLE_FUNCTION = 'fore:#6b8ac7,bold'
|
||||
lexers.STYLE_HEADING = 'fore:#d1d147'
|
||||
lexers.STYLE_KEYWORD = 'fore:#bf8040,bold'
|
||||
lexers.STYLE_LABEL = 'fore:green,bold'
|
||||
lexers.STYLE_NUMBER = 'fore:#acac53,bold'
|
||||
lexers.STYLE_OPERATOR = 'fore:#93806c,bold'
|
||||
lexers.STYLE_REGEX = 'fore:#59862d,bold'
|
||||
lexers.STYLE_STRING = 'fore:#3d8f66,bold'
|
||||
lexers.STYLE_PREPROCESSOR = 'fore:#cc66cc,bold'
|
||||
lexers.STYLE_TAG = 'fore:#705943,bold'
|
||||
lexers.STYLE_TYPE = 'fore:#7461d1,bold'
|
||||
lexers.STYLE_VARIABLE = 'fore:#8c5eba,bold'
|
||||
lexers.STYLE_WHITESPACE = ''
|
||||
lexers.STYLE_EMBEDDED = 'back:#2d3353,bold'
|
||||
lexers.STYLE_IDENTIFIER = ''
|
||||
|
||||
lexers.STYLE_LINENUMBER = ''
|
||||
lexers.STYLE_LINENUMBER_CURSOR = 'fore:#bf8040'
|
||||
lexers.STYLE_CURSOR = 'back:#bf8040,fore:#1f212e'
|
||||
lexers.STYLE_CURSOR_PRIMARY = lexers.STYLE_CURSOR..',fore:#e6fefe'
|
||||
lexers.STYLE_CURSOR_LINE = 'underlined'
|
||||
lexers.STYLE_COLOR_COLUMN = 'back:red'
|
||||
lexers.STYLE_SELECTION = 'back:#4d5580,bold'
|
||||
lexers.STYLE_STATUS = 'back:#1c3b4a,fore:#73848c'
|
||||
lexers.STYLE_STATUS_FOCUSED = 'back:#1c3b4a,fore:#abb5ba,bold'
|
||||
lexers.STYLE_SEPARATOR = lexers.STYLE_DEFAULT
|
||||
lexers.STYLE_INFO = 'bold'
|
||||
lexers.STYLE_EOF = ''
|
||||
|
||||
-- lexer specific styles
|
||||
|
||||
-- Diff
|
||||
lexers.STYLE_ADDITION = 'fore:#3a783a'
|
||||
lexers.STYLE_DELETION = 'fore:#862d2d'
|
||||
lexers.STYLE_CHANGE = 'fore:#2d3353'
|
||||
|
||||
-- CSS
|
||||
lexers.STYLE_PROPERTY = lexers.STYLE_ATTRIBUTE
|
||||
lexers.STYLE_PSEUDOCLASS = ''
|
||||
lexers.STYLE_PSEUDOELEMENT = ''
|
||||
|
||||
-- HTML
|
||||
lexers.STYLE_TAG_UNKNOWN = lexers.STYLE_TAG .. ',italics'
|
||||
lexers.STYLE_TAG_SINGLE = lexers.STYLE_TAG
|
||||
lexers.STYLE_TAG_DOCTYPE = lexers.STYLE_TAG .. ',bold'
|
||||
lexers.STYLE_ATTRIBUTE_UNKNOWN = lexers.STYLE_ATTRIBUTE .. ',italics'
|
||||
|
||||
-- Latex, TeX, and Texinfo
|
||||
lexers.STYLE_COMMAND = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_COMMAND_SECTION = lexers.STYLE_CLASS
|
||||
lexers.STYLE_ENVIRONMENT = lexers.STYLE_TYPE
|
||||
lexers.STYLE_ENVIRONMENT_MATH = lexers.STYLE_NUMBER
|
||||
|
||||
-- Makefile
|
||||
lexers.STYLE_TARGET = ''
|
||||
|
||||
-- Markdown
|
||||
lexers.STYLE_HR = ''
|
||||
for i = 1,6 do lexers['STYLE_HEADING_H'..i] = lexers.STYLE_HEADING end
|
||||
lexers.STYLE_BOLD = 'bold'
|
||||
lexers.STYLE_ITALIC = 'italics'
|
||||
lexers.STYLE_LIST = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_LINK = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_REFERENCE = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_CODE = lexers.STYLE_EMBEDDED
|
||||
|
||||
-- Output
|
||||
lexers.STYE_FILENAME = ''
|
||||
lexers.STYLE_LINE = ''
|
||||
lexers.STYLE_COLUMN = ''
|
||||
lexers.STYLE_MESSAGE = ''
|
||||
|
||||
-- Python
|
||||
lexers.STYLE_KEYWORD_SOFT = ''
|
||||
|
||||
-- Taskpaper
|
||||
lexers.STYLE_NOTE = ''
|
||||
lexers.STYLE_TAG_EXTENDED = ''
|
||||
lexers.STYLE_TAG_DAY = 'fore:yellow'
|
||||
lexers.STYLE_TAG_OVERDUE = 'fore:red'
|
||||
lexers.STYLE_TAG_PLAIN = ''
|
||||
|
||||
-- XML
|
||||
lexers.STYLE_CDATA = ''
|
||||
|
||||
-- YAML
|
||||
lexers.STYLE_ERROR_INDENT = 'back:red'
|
||||
|
||||
-- The following are temporary styles until their legacy lexers are migrated.
|
||||
|
||||
-- Antlr
|
||||
lexers.STYLE_ACTION = ''
|
||||
|
||||
-- Clojure
|
||||
lexers.STYLE_CLOJURE_KEYWORD = lexers.STYLE_TYPE
|
||||
lexers.STYLE_CLOJURE_SYMBOL = lexers.STYLE_TYPE .. ',bold'
|
||||
|
||||
-- Crystal
|
||||
--lexers.STYLE_SYMBOL = lexers.STYLE_STRING
|
||||
|
||||
-- Gleam
|
||||
lexers.STYLE_MODULE = lexers.STYLE_CONSTANT
|
||||
lexers.STYLE_DISCARD = lexers.STYLE_COMMENT
|
||||
|
||||
-- Icon
|
||||
lexers.STYLE_SPECIAL_KEYWORD = lexers.STYLE_TYPE
|
||||
|
||||
-- jq
|
||||
lexers.STYLE_FORMAT = lexers.STYLE_CONSTANT
|
||||
lexers.STYLE_SYSVAR = lexers.STYLE_CONSTANT .. ',bold'
|
||||
|
||||
-- Julia
|
||||
-- lexers.STYLE_SYMBOL = lexers.STYLE_STRING
|
||||
lexers.STYLE_CHARACTER = lexers.STYLE_CONSTANT
|
||||
|
||||
-- Mediawiki
|
||||
lexers.STYLE_BEHAVIOR_SWITCH = lexers.STYLE_KEYWORD
|
||||
|
||||
-- Moonscript
|
||||
lexers.STYLE_TBL_KEY = lexers.STYLE_REGEX
|
||||
lexers.STYLE_SELF_REF = lexers.STYLE_LABEL
|
||||
lexers.STYLE_PROPER_IDENT = lexers.STYLE_CLASS
|
||||
lexers.STYLE_FNDEF = lexers.STYLE_PREPROCESSOR
|
||||
-- lexers.STYLE_SYMBOL = lexers.STYLE_EMBEDDED
|
||||
|
||||
-- reST
|
||||
lexers.STYLE_LITERAL_BLOCK = lexers.STYLE_EMBEDDED
|
||||
lexers.STYLE_FOOTNOTE_BLOCK = lexers.STYLE_LABEL
|
||||
lexers.STYLE_CITATION_BLOCK = lexers.STYLE_LABEL
|
||||
lexers.STYLE_LINK_BLOCK = lexers.STYLE_LABEL
|
||||
lexers.STYLE_CODE_BLOCK = lexers.STYLE_CODE
|
||||
lexers.STYLE_DIRECTIVE = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_SPHINX_DIRECTIVE = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_UNKNOWN_DIRECTIVE = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_SUBSTITUTION = lexers.STYLE_VARIABLE
|
||||
lexers.STYLE_INLINE_LITERAL = lexers.STYLE_EMBEDDED
|
||||
lexers.STYLE_ROLE = lexers.STYLE_CLASS
|
||||
lexers.STYLE_INTERPRETED = lexers.STYLE_STRING
|
||||
|
||||
-- txt2tags
|
||||
lexers.STYLE_LINE = 'bold'
|
||||
for i = 1,5 do lexers['STYLE_H'..i] = lexers.STYLE_HEADING end
|
||||
lexers.STYLE_IMAGE = 'fore:green'
|
||||
lexers.STYLE_STRIKE = 'italics'
|
||||
lexers.STYLE_TAGGED = lexers.STYLE_EMBEDDED
|
||||
lexers.STYLE_TAGGED_AREA = lexers.STYLE_EMBEDDED
|
||||
lexers.STYLE_TABLE_SEP = 'fore:green'
|
||||
lexers.STYLE_HEADER_CELL_CONTENT = 'fore:green'
|
||||
158
vis/.config/vis/themes/lupan-light.lua
Normal file
158
vis/.config/vis/themes/lupan-light.lua
Normal file
@@ -0,0 +1,158 @@
|
||||
-- Eight-color scheme
|
||||
local lexers = vis.lexers
|
||||
lexers.STYLE_DEFAULT ='back:#f2f2f3,#e0e5eb,fore:#1f212e'
|
||||
lexers.STYLE_NOTHING = ''
|
||||
lexers.STYLE_ATTRIBUTE = 'fore:#a1a3aa,bold'
|
||||
lexers.STYLE_CLASS = 'fore:yellow,bold'
|
||||
lexers.STYLE_COMMENT = 'fore:#334d40,bold'
|
||||
lexers.STYLE_CONSTANT = 'fore:cyan,bold'
|
||||
lexers.STYLE_DEFINITION = 'fore:blue,bold'
|
||||
lexers.STYLE_ERROR = 'fore:red,italics'
|
||||
lexers.STYLE_FUNCTION = 'fore:#6b8ac7,bold'
|
||||
lexers.STYLE_HEADING = 'fore:#d1d147'
|
||||
lexers.STYLE_KEYWORD = 'fore:#bf8040,bold'
|
||||
lexers.STYLE_LABEL = 'fore:green,bold'
|
||||
lexers.STYLE_NUMBER = 'fore:#acac53,bold'
|
||||
lexers.STYLE_OPERATOR = 'fore:#93806c,bold'
|
||||
lexers.STYLE_REGEX = 'fore:#59862d,bold'
|
||||
lexers.STYLE_STRING = 'fore:#3d8f66,bold'
|
||||
lexers.STYLE_PREPROCESSOR = 'fore:#cc66cc,bold'
|
||||
lexers.STYLE_TAG = 'fore:#705943,bold'
|
||||
lexers.STYLE_TYPE = 'fore:#7461d1,bold'
|
||||
lexers.STYLE_VARIABLE = 'fore:#8c5eba,bold'
|
||||
lexers.STYLE_WHITESPACE = ''
|
||||
lexers.STYLE_EMBEDDED = 'back:#e0e5eb,bold'
|
||||
lexers.STYLE_IDENTIFIER = ''
|
||||
|
||||
lexers.STYLE_LINENUMBER = ''
|
||||
lexers.STYLE_LINENUMBER_CURSOR = 'fore:#bf8040'
|
||||
lexers.STYLE_CURSOR = 'back:#bf8040,fore:#1f212e'
|
||||
lexers.STYLE_CURSOR_PRIMARY = lexers.STYLE_CURSOR..',fore:#e6fefe'
|
||||
lexers.STYLE_CURSOR_LINE = 'underlined'
|
||||
lexers.STYLE_COLOR_COLUMN = 'back:red'
|
||||
lexers.STYLE_SELECTION = 'back:#a6c7f2,bold'
|
||||
lexers.STYLE_STATUS = 'reverse'
|
||||
lexers.STYLE_STATUS_FOCUSED = 'reverse,bold'
|
||||
lexers.STYLE_SEPARATOR = lexers.STYLE_DEFAULT
|
||||
lexers.STYLE_INFO = 'bold'
|
||||
lexers.STYLE_EOF = ''
|
||||
|
||||
-- lexer specific styles
|
||||
|
||||
-- Diff
|
||||
lexers.STYLE_ADDITION = 'fore:#3a783a'
|
||||
lexers.STYLE_DELETION = 'fore:#862d2d'
|
||||
lexers.STYLE_CHANGE = 'fore:#2d3353'
|
||||
|
||||
-- CSS
|
||||
lexers.STYLE_PROPERTY = lexers.STYLE_ATTRIBUTE
|
||||
lexers.STYLE_PSEUDOCLASS = ''
|
||||
lexers.STYLE_PSEUDOELEMENT = ''
|
||||
|
||||
-- HTML
|
||||
lexers.STYLE_TAG_UNKNOWN = lexers.STYLE_TAG .. ',italics'
|
||||
lexers.STYLE_TAG_SINGLE = lexers.STYLE_TAG
|
||||
lexers.STYLE_TAG_DOCTYPE = lexers.STYLE_TAG .. ',bold'
|
||||
lexers.STYLE_ATTRIBUTE_UNKNOWN = lexers.STYLE_ATTRIBUTE .. ',italics'
|
||||
|
||||
-- Latex, TeX, and Texinfo
|
||||
lexers.STYLE_COMMAND = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_COMMAND_SECTION = lexers.STYLE_CLASS
|
||||
lexers.STYLE_ENVIRONMENT = lexers.STYLE_TYPE
|
||||
lexers.STYLE_ENVIRONMENT_MATH = lexers.STYLE_NUMBER
|
||||
|
||||
-- Makefile
|
||||
lexers.STYLE_TARGET = ''
|
||||
|
||||
-- Markdown
|
||||
lexers.STYLE_HR = ''
|
||||
for i = 1,6 do lexers['STYLE_HEADING_H'..i] = lexers.STYLE_HEADING end
|
||||
lexers.STYLE_BOLD = 'bold'
|
||||
lexers.STYLE_ITALIC = 'italics'
|
||||
lexers.STYLE_LIST = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_LINK = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_REFERENCE = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_CODE = lexers.STYLE_EMBEDDED
|
||||
|
||||
-- Output
|
||||
lexers.STYE_FILENAME = ''
|
||||
lexers.STYLE_LINE = ''
|
||||
lexers.STYLE_COLUMN = ''
|
||||
lexers.STYLE_MESSAGE = ''
|
||||
|
||||
-- Python
|
||||
lexers.STYLE_KEYWORD_SOFT = ''
|
||||
|
||||
-- Taskpaper
|
||||
lexers.STYLE_NOTE = ''
|
||||
lexers.STYLE_TAG_EXTENDED = ''
|
||||
lexers.STYLE_TAG_DAY = 'fore:yellow'
|
||||
lexers.STYLE_TAG_OVERDUE = 'fore:red'
|
||||
lexers.STYLE_TAG_PLAIN = ''
|
||||
|
||||
-- XML
|
||||
lexers.STYLE_CDATA = ''
|
||||
|
||||
-- YAML
|
||||
lexers.STYLE_ERROR_INDENT = 'back:red'
|
||||
|
||||
-- The following are temporary styles until their legacy lexers are migrated.
|
||||
|
||||
-- Antlr
|
||||
lexers.STYLE_ACTION = ''
|
||||
|
||||
-- Clojure
|
||||
lexers.STYLE_CLOJURE_KEYWORD = lexers.STYLE_TYPE
|
||||
lexers.STYLE_CLOJURE_SYMBOL = lexers.STYLE_TYPE .. ',bold'
|
||||
|
||||
-- Crystal
|
||||
--lexers.STYLE_SYMBOL = lexers.STYLE_STRING
|
||||
|
||||
-- Gleam
|
||||
lexers.STYLE_MODULE = lexers.STYLE_CONSTANT
|
||||
lexers.STYLE_DISCARD = lexers.STYLE_COMMENT
|
||||
|
||||
-- Icon
|
||||
lexers.STYLE_SPECIAL_KEYWORD = lexers.STYLE_TYPE
|
||||
|
||||
-- jq
|
||||
lexers.STYLE_FORMAT = lexers.STYLE_CONSTANT
|
||||
lexers.STYLE_SYSVAR = lexers.STYLE_CONSTANT .. ',bold'
|
||||
|
||||
-- Julia
|
||||
-- lexers.STYLE_SYMBOL = lexers.STYLE_STRING
|
||||
lexers.STYLE_CHARACTER = lexers.STYLE_CONSTANT
|
||||
|
||||
-- Mediawiki
|
||||
lexers.STYLE_BEHAVIOR_SWITCH = lexers.STYLE_KEYWORD
|
||||
|
||||
-- Moonscript
|
||||
lexers.STYLE_TBL_KEY = lexers.STYLE_REGEX
|
||||
lexers.STYLE_SELF_REF = lexers.STYLE_LABEL
|
||||
lexers.STYLE_PROPER_IDENT = lexers.STYLE_CLASS
|
||||
lexers.STYLE_FNDEF = lexers.STYLE_PREPROCESSOR
|
||||
-- lexers.STYLE_SYMBOL = lexers.STYLE_EMBEDDED
|
||||
|
||||
-- reST
|
||||
lexers.STYLE_LITERAL_BLOCK = lexers.STYLE_EMBEDDED
|
||||
lexers.STYLE_FOOTNOTE_BLOCK = lexers.STYLE_LABEL
|
||||
lexers.STYLE_CITATION_BLOCK = lexers.STYLE_LABEL
|
||||
lexers.STYLE_LINK_BLOCK = lexers.STYLE_LABEL
|
||||
lexers.STYLE_CODE_BLOCK = lexers.STYLE_CODE
|
||||
lexers.STYLE_DIRECTIVE = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_SPHINX_DIRECTIVE = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_UNKNOWN_DIRECTIVE = lexers.STYLE_KEYWORD
|
||||
lexers.STYLE_SUBSTITUTION = lexers.STYLE_VARIABLE
|
||||
lexers.STYLE_INLINE_LITERAL = lexers.STYLE_EMBEDDED
|
||||
lexers.STYLE_ROLE = lexers.STYLE_CLASS
|
||||
lexers.STYLE_INTERPRETED = lexers.STYLE_STRING
|
||||
|
||||
-- txt2tags
|
||||
lexers.STYLE_LINE = 'bold'
|
||||
for i = 1,5 do lexers['STYLE_H'..i] = lexers.STYLE_HEADING end
|
||||
lexers.STYLE_IMAGE = 'fore:green'
|
||||
lexers.STYLE_STRIKE = 'italics'
|
||||
lexers.STYLE_TAGGED = lexers.STYLE_EMBEDDED
|
||||
lexers.STYLE_TAGGED_AREA = lexers.STYLE_EMBEDDED
|
||||
lexers.STYLE_TABLE_SEP = 'fore:green'
|
||||
lexers.STYLE_HEADER_CELL_CONTENT = 'fore:green'
|
||||
370
vis/.config/vis/visrc.lua
Normal file
370
vis/.config/vis/visrc.lua
Normal file
@@ -0,0 +1,370 @@
|
||||
require('vis')
|
||||
require('fast-jump')
|
||||
|
||||
local lspc = require('plugins/vis-lspc')
|
||||
require('plugins/vis-commentary')
|
||||
require('plugins/vis-surround')
|
||||
local fzfmru = require('plugins/vis-fzf-mru/fzf-mru')
|
||||
require('plugins/vis-build')
|
||||
require('plugins/vis-cursors')
|
||||
require('plugins/vis-colorizer')
|
||||
local qf = require('plugins/vis-quickfix')
|
||||
local pairs = require('plugins/vis-pairs')
|
||||
|
||||
require('plugins/vis-pin-files')
|
||||
|
||||
pairs.autopairs = false
|
||||
|
||||
vis.ftdetect.filetypes.go_ext = vis.ftdetect.filetypes.go
|
||||
vis.ftdetect.filetypes.go = nil
|
||||
lspc.ls_map.go_ext = lspc.ls_map.go
|
||||
|
||||
vis.ftdetect.filetypes.templ = {
|
||||
ext = { "%.templ$" },
|
||||
}
|
||||
|
||||
vis.ftdetect.filetypes.odin = {
|
||||
ext = { "%.odin$" },
|
||||
}
|
||||
|
||||
lspc.message_level = 2
|
||||
|
||||
lspc.ls_map.templ = {
|
||||
name = 'templ-lsp',
|
||||
cmd = 'templ lsp',
|
||||
}
|
||||
|
||||
lspc.ls_map.odin = {
|
||||
name = 'ols',
|
||||
cmd = 'ols',
|
||||
}
|
||||
|
||||
fzfmru.fzfmru_history = 60
|
||||
|
||||
local function open_file(file, cmd)
|
||||
vis:command((cmd or 'o') .. ' ' .. file)
|
||||
end
|
||||
|
||||
local function nil_or_tonumber(s)
|
||||
return s and tonumber(s)
|
||||
end
|
||||
|
||||
local function open_file_pos(line, open_cmd)
|
||||
local iter = line:gmatch('[^:]+')
|
||||
local file = iter()
|
||||
local ln = iter()
|
||||
local col = nil_or_tonumber(iter()) or 1
|
||||
local i = ln and ln:find(' ')
|
||||
if i then
|
||||
ln = ln:sub(0, i)
|
||||
col = 1
|
||||
end
|
||||
local line_num = nil_or_tonumber(ln)
|
||||
if open_cmd ~= 'e' or vis.win.file ~= file then
|
||||
open_file(file, open_cmd)
|
||||
end
|
||||
if line_num ~= nil then
|
||||
vis.win.selection:to(line_num, col)
|
||||
end
|
||||
end
|
||||
|
||||
local function open_file_current_line(open_cmd, keys)
|
||||
local line = vis.win.file.lines[vis.win.selection.line]
|
||||
vis:info(line)
|
||||
if keys then
|
||||
vis:feedkeys(keys)
|
||||
end
|
||||
open_file_pos(line, open_cmd)
|
||||
end
|
||||
|
||||
local function escape_and_quoted(s)
|
||||
return "'" .. s:gsub("'", [['"'"']]) .. "'"
|
||||
end
|
||||
|
||||
local function cmd_action(cmd, action)
|
||||
local code, out, err = vis:pipe(cmd, true)
|
||||
if code == 0 then
|
||||
action(out)
|
||||
elseif err ~= nil then
|
||||
vis:info(err)
|
||||
elseif code ~= 0 then
|
||||
vis:info('Program exit code ' .. code)
|
||||
end
|
||||
end
|
||||
|
||||
local function fzf_sh(arg, query)
|
||||
action = function(out)
|
||||
if (out:find('\n') or #out) == #out then
|
||||
open_file_pos(out, vis.win.file.modified and 'o' or 'e')
|
||||
else
|
||||
vis:message(out)
|
||||
end
|
||||
end
|
||||
local home = os.getenv('HOME')
|
||||
local path = vis.win.file.path or ''
|
||||
local dir = path:match('^.*/') or ''
|
||||
if not query and vis.register ~= '"' then
|
||||
query = string.gsub(vis.registers[vis.register][1], '%z', '')
|
||||
end
|
||||
local cmd = home ..
|
||||
'/.config/vis/fzf.sh ' ..
|
||||
escape_and_quoted(arg) .. ' ' .. escape_and_quoted(dir) .. ' ' .. escape_and_quoted(query or '')
|
||||
cmd_action(cmd, action)
|
||||
end
|
||||
|
||||
vis:command_register('fzf-files', function(argv, force, win, selection, range)
|
||||
fzf_sh(argv[1] or 'auto-files', argv[2])
|
||||
end)
|
||||
|
||||
local function search(cmd, action)
|
||||
if action == nil then
|
||||
action = function(out)
|
||||
if (out:find('\n') or #out) == #out then
|
||||
open_file_pos(out, 'e')
|
||||
else
|
||||
vis:message(out)
|
||||
end
|
||||
end
|
||||
end
|
||||
if cmd:match('^fzf ') and vis.register ~= '"' then
|
||||
local reg = string.gsub(vis.registers[vis.register][1], '%z', '')
|
||||
if reg ~= '' then
|
||||
cmd = cmd .. ' --query=' .. escape_and_quoted(reg)
|
||||
end
|
||||
end
|
||||
cmd_action(cmd, action)
|
||||
end
|
||||
|
||||
local function fzf_reload(cmd)
|
||||
local prompt = escape_and_quoted('1. ' .. cmd:match('^%w*') .. '> ')
|
||||
if not cmd:match('{q}') then
|
||||
cmd = cmd .. ' {q}'
|
||||
end
|
||||
return 'fzf --ansi --bind "start:reload:' .. cmd .. '" --bind "change:reload:' .. cmd .. ' || true"' ..
|
||||
' --prompt ' .. prompt ..
|
||||
' --bind "alt-enter:unbind(change,alt-enter)+change-prompt(2. fzf> )+enable-search+clear-query"'
|
||||
end
|
||||
|
||||
local function add_global_mark()
|
||||
local file = vis.win.file.path
|
||||
if file ~= nil then
|
||||
local code, out, err = vis:pipe('vis-menu -p "global mark comment:"', true)
|
||||
if code == 0 then
|
||||
local prefix = file .. ':' .. vis.win.selection.line .. ':' .. vis.win.selection.col .. ': '
|
||||
local line = vis.win.file.lines[vis.win.selection.line]
|
||||
out = out:gsub('\n$', '')
|
||||
if out ~= '' then
|
||||
prefix = prefix .. '(' .. out .. '): '
|
||||
end
|
||||
out = io.open(os.getenv('HOME') .. '/.config/vis/global-marks.txt', 'a')
|
||||
out:write(prefix .. line .. '\n')
|
||||
out:close()
|
||||
elseif err ~= nil then
|
||||
vis:info(err)
|
||||
elseif code ~= 0 then
|
||||
vis:info('Program exit code ' .. code)
|
||||
end
|
||||
else
|
||||
vis:info('Save file first')
|
||||
end
|
||||
end
|
||||
|
||||
local function set_current_theme()
|
||||
local path = os.getenv('HOME') .. '/.lightmode'
|
||||
local theme = 'lupan-dark'
|
||||
local f = io.open(path)
|
||||
if f then
|
||||
f:close()
|
||||
theme = 'lupan-light'
|
||||
end
|
||||
vis:command('set theme ' .. theme)
|
||||
end
|
||||
|
||||
local ripgrep = 'rg --column --line-number --color=always --smart-case'
|
||||
|
||||
local function close_prev_win()
|
||||
vis:feedkeys('<vis-window-prev>')
|
||||
if vis.win == win then
|
||||
vis:info('Last window')
|
||||
elseif not vis.win:close() then
|
||||
if vis.win.file.modified then
|
||||
vis:info('No write since last change')
|
||||
else
|
||||
vis:command('q')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function close_next_win()
|
||||
vis:feedkeys('<vis-window-next>')
|
||||
if vis.win == win then
|
||||
vis:info('Last window')
|
||||
elseif not vis.win:close() then
|
||||
if vis.win.file.modified then
|
||||
vis:info('No write since last change')
|
||||
else
|
||||
vis:command('q')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function ensure_last_line_empty()
|
||||
local size = vis.win.file.size
|
||||
if size > 0 then
|
||||
if vis.win.file:content(size - 1, size) ~= '\n' then
|
||||
vis.win.file:insert(size, '\n')
|
||||
end
|
||||
local lines = vis.win.file.lines
|
||||
if string.find(lines[#lines], '%S') then
|
||||
lines[#lines + 1] = ''
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function add_note()
|
||||
local path = vis.win.file.path
|
||||
local line = path and path .. ':' .. vis.win.selection.line .. ':' .. vis.win.selection.col .. ': ' .. vis.win.file.lines[vis.win.selection.line]
|
||||
vis:command('o ~/notes/notes.md')
|
||||
ensure_last_line_empty()
|
||||
local lines = vis.win.file.lines
|
||||
lines[#lines + 1] = '## '
|
||||
local pos = vis.win.file.size - 1
|
||||
lines[#lines + 1] = '* time: ' .. os.date('%Y-%m-%d %X')
|
||||
if line then
|
||||
lines[#lines + 1] = '* line: ' .. line
|
||||
end
|
||||
vis.win.selection.pos = pos
|
||||
end
|
||||
|
||||
vis.events.subscribe(vis.events.INIT, function()
|
||||
vis:command('set autoindent')
|
||||
|
||||
vis:command_register('search', function(argv, force, win, selection, range)
|
||||
search(argv[1])
|
||||
end)
|
||||
|
||||
vis:map(vis.modes.NORMAL, '<M-k>', '<vis-window-prev>')
|
||||
vis:map(vis.modes.NORMAL, '<M-j>', '<vis-window-next>')
|
||||
vis:map(vis.modes.NORMAL, '<M-n>', '<vis-prompt-show>open<Enter>')
|
||||
vis:map(vis.modes.NORMAL, ' K', close_prev_win)
|
||||
vis:map(vis.modes.NORMAL, ' J', close_next_win)
|
||||
vis:map(vis.modes.NORMAL, ' k', qf.action.cp)
|
||||
vis:map(vis.modes.NORMAL, ' j', qf.action.cn)
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' [', '<vis-prompt-show>lspc-prev-diagnostic<Enter>')
|
||||
vis:map(vis.modes.NORMAL, ' ]', '<vis-prompt-show>lspc-next-diagnostic<Enter>')
|
||||
vis:map(vis.modes.NORMAL, ' =', '<vis-prompt-show>lspc-format<Enter>')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' s', '<vis-prompt-show>fzf-files auto-search<Enter>', 'fzf: search')
|
||||
vis:map(vis.modes.NORMAL, ' f', '<vis-prompt-show>fzf-files auto-files<Enter>', 'fzf: files')
|
||||
vis:map(vis.modes.NORMAL, ' S', '<vis-prompt-show>fzf-files search<Enter>', 'fzf: search with rg')
|
||||
vis:map(vis.modes.NORMAL, ' F', '<vis-prompt-show>fzf-files files<Enter>', 'fzf: files with fd')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' /', function()
|
||||
search(fzf_reload(ripgrep .. ' --with-filename {q} ' .. escape_and_quoted(vis.win.file.path)))
|
||||
end, 'fzf: rg current file')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' d', function()
|
||||
local shell = os.getenv('SHELL')
|
||||
vis:command('!' .. shell)
|
||||
end, 'run shell')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' D', function()
|
||||
local shell = os.getenv('SHELL')
|
||||
local path = vis.win.file.path
|
||||
if path then
|
||||
local dir = path:match('^.*/')
|
||||
local arg = escape_and_quoted(dir)
|
||||
vis:command('!cd ' .. arg .. ' && ' .. shell)
|
||||
else
|
||||
vis:command('!' .. shell)
|
||||
end
|
||||
end, 'run shell in file directory')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' gl', function()
|
||||
vis:command('!lazygit')
|
||||
end, 'lazygit')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' gj', function()
|
||||
vis:command('!lazyjj')
|
||||
end, 'lazyjj')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' ', function()
|
||||
vis:command('fzfmru')
|
||||
end, 'fzf recent')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' w', function()
|
||||
open_file_current_line('e')
|
||||
end, 'open file from current line in current window (with optional line and col)')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' o', function()
|
||||
open_file_current_line('o')
|
||||
end, 'open file from current line in new window (with optional line and col)')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' zk', function()
|
||||
open_file_current_line('e', '<vis-window-prev>')
|
||||
end, 'open file from current line in above window (with optional line and col)')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' zj', function()
|
||||
open_file_current_line('e', '<vis-window-next>')
|
||||
end, 'open file from current line in below window (with optional line and col)')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' c', function()
|
||||
search('( fd -t d "" ~/src ~/dotfiles -H -E "\\.git" -E node_modules ; zoxide query -l ) | fzf --scheme path', function(path)
|
||||
vis:command('cd ' .. path)
|
||||
end)
|
||||
end, 'fzf change directory')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' l', '<vis-prompt-show>!lf<Enter>', 'lf file manager')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' L', function()
|
||||
local path = vis.win.file.path
|
||||
if path then
|
||||
vis:command('!lf ' .. escape_and_quoted(path:match('^.*/')))
|
||||
else
|
||||
vis:command('!lf')
|
||||
end
|
||||
end, 'lf file manager in current file directory')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' m', add_global_mark, 'global marks: add')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' M', function()
|
||||
search('cat ~/.config/vis/global-marks.txt | fzf --tac')
|
||||
end, 'global marks: jump')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' zm', function()
|
||||
vis:command('o ~/.config/vis/global-marks.txt')
|
||||
end, 'global marks: edit')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' n', add_note)
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' N', function()
|
||||
search(fzf_reload(ripgrep .. ' --with-filename {q} ~/notes'))
|
||||
end, 'search notes')
|
||||
|
||||
vis:map(vis.modes.NORMAL, ' td', function()
|
||||
vis:command('set theme lupan-dark')
|
||||
end, 'change to dark theme')
|
||||
vis:map(vis.modes.NORMAL, ' tl', function()
|
||||
vis:command('set theme lupan-light')
|
||||
end, 'change to light theme')
|
||||
|
||||
vis:map(vis.modes.NORMAL, '<C-l>', function()
|
||||
vis:feedkeys('<vis-selections-remove-column-except>')
|
||||
set_current_theme()
|
||||
end, 'Remove all but the count selection column and update theme if needed')
|
||||
|
||||
set_current_theme()
|
||||
end)
|
||||
|
||||
vis.events.subscribe(vis.events.WIN_OPEN, function(win)
|
||||
vis:command('set relativenumber')
|
||||
end)
|
||||
|
||||
vis.events.subscribe(vis.events.FILE_SAVE_PRE, function(file, path)
|
||||
if path:find('[.]go$') then
|
||||
-- formatting is async, so when reformated you should write file again
|
||||
vis:command('lspc-format')
|
||||
end
|
||||
return true
|
||||
end)
|
||||
@@ -1,3 +1,5 @@
|
||||
#define THEME_DARK
|
||||
|
||||
#if HEIGHT >= 2160
|
||||
Xft.dpi: 160
|
||||
Xcursor.size: 48
|
||||
@@ -53,3 +55,51 @@ XTerm.vt100.color14: #8FBCBB
|
||||
! white
|
||||
XTerm.vt100.color7: #E5E9F0
|
||||
XTerm.vt100.color15: #ECEFF4
|
||||
|
||||
st.font: FiraCode Nerd Font:size=10
|
||||
|
||||
#ifdef THEME_DARK
|
||||
st.lightmode: 0
|
||||
st.background: #1f212e
|
||||
st.foreground: #9da0af
|
||||
st.cursorColor: #bf8040
|
||||
st.reverse-cursor: #1f212e
|
||||
st.color0: #1f212e
|
||||
st.color1: #862d2d
|
||||
st.color2: #3a783a
|
||||
st.color3: #707010
|
||||
st.color4: #345eb2
|
||||
st.color5: #cc66cc
|
||||
st.color6: #3a7878
|
||||
st.color7: #a1a3aa
|
||||
st.color8: #4d4d4d
|
||||
st.color9: #c27070
|
||||
st.color10: #40bf40
|
||||
st.color11: #acac53
|
||||
st.color12: #6b8ac7
|
||||
st.color13: #8f248f
|
||||
st.color14: #509595
|
||||
st.color15: #dbdff0
|
||||
#else
|
||||
st.lightmode: 1
|
||||
st.background: #f2f2f3
|
||||
st.foreground: #1f212e
|
||||
st.cursorColor: #bf8040
|
||||
st.reverse-cursor: #1f212e
|
||||
st.color0: #1f212e
|
||||
st.color1: #862d2d
|
||||
st.color2: #3a783a
|
||||
st.color3: #707010
|
||||
st.color4: #345eb2
|
||||
st.color5: #cc66cc
|
||||
st.color6: #3a7878
|
||||
st.color7: #a1a3aa
|
||||
st.color8: #73778c
|
||||
st.color9: #c27070
|
||||
st.color10: #40bf40
|
||||
st.color11: #acac53
|
||||
st.color12: #6b8ac7
|
||||
st.color13: #8f248f
|
||||
st.color14: #509595
|
||||
st.color15: #dae4f1
|
||||
#endif
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
! make right windows key and menu key a hyper key
|
||||
remove mod4 = Super_R
|
||||
keycode 133 = Escape NoSymbol Escape
|
||||
keycode 134 = Hyper_R NoSymbol Hyper_R
|
||||
keycode 135 = Hyper_R NoSymbol Hyper_R
|
||||
add mod3 = Hyper_R
|
||||
@@ -6,10 +6,10 @@ fi
|
||||
|
||||
xset b off
|
||||
xrandr --auto
|
||||
xrandr --output HDMI1 --right-of DP1
|
||||
xrandr --output DP-0 --left-of DP-2 --primary
|
||||
xrandr --output HDMI-0 --left-of DP-0
|
||||
xrdb -merge ~/.Xresources
|
||||
setxkbmap pl -option ctrl:nocaps
|
||||
xmodmap ~/.xmodmaprc
|
||||
|
||||
if [ -x ~/.fehbg ]; then
|
||||
~/.fehbg &
|
||||
@@ -35,6 +35,18 @@ if which dwm > /dev/null; then
|
||||
exec dwm
|
||||
fi
|
||||
|
||||
if which awesome > /dev/null; then
|
||||
exec awesome
|
||||
fi
|
||||
|
||||
if which dk > /dev/null; then
|
||||
for m in $(polybar --list-monitors | cut -d: -f1); do
|
||||
MONITOR=$m polybar --reload bar &
|
||||
done
|
||||
fi
|
||||
exec dk
|
||||
fi
|
||||
|
||||
if which xmonad > /dev/null && test -f ~/.config/xmonad/xmonad.hs; then
|
||||
exec xmonad
|
||||
fi
|
||||
|
||||
@@ -3,41 +3,63 @@
|
||||
THEME="$1"
|
||||
|
||||
if [ "$THEME" = "toggle" ]; then
|
||||
if grep Materia-dark ~/.config/xsettingsd/xsettingsd.conf > /dev/null; then
|
||||
THEME=light
|
||||
else
|
||||
if [ -e ~/.lightmode ]; then
|
||||
THEME=dark
|
||||
else
|
||||
THEME=light
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$THEME" = dark ]; then
|
||||
BGCOLOR=#4a4a4a
|
||||
GTK_THEME=Materia-dark
|
||||
rm -f ~/.lightmode
|
||||
elif [ "$THEME" = light ]; then
|
||||
BGCOLOR=#cacaca
|
||||
GTK_THEME=Materia-light
|
||||
touch ~/.lightmode
|
||||
else
|
||||
echo "error: unknown theme: should be either dark, light or toggle" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Background color
|
||||
if [ ! -x ~/.fehbg ]; then
|
||||
hsetroot -solid "$BGCOLOR"
|
||||
pkill -USR1 '^dwm$'
|
||||
|
||||
XRES=$(readlink -e ~/.Xresources)
|
||||
if [ -n "$XRES" ]; then
|
||||
if [ "$THEME" = dark ]; then
|
||||
sed -i 's/^#undef THEME_DARK/#define THEME_DARK/' "$XRES"
|
||||
elif [ "$THEME" = light ]; then
|
||||
sed -i 's/^#define THEME_DARK/#undef THEME_DARK/' "$XRES"
|
||||
fi
|
||||
xrdb -merge "$XRES"
|
||||
pkill -USR1 '^st$'
|
||||
fi
|
||||
|
||||
# Alacritty
|
||||
if [ -f ~/.config/alacritty/alacritty.yml ]; then
|
||||
sed -i "s/^colors: [*].*/colors: *$THEME/" ~/.config/alacritty/alacritty.yml
|
||||
AYML=$(readlink -e ~/.config/alacritty/alacritty.yml)
|
||||
if [ -n "$AYML" ]; then
|
||||
sed -i "s/^colors: [*].*/colors: *$THEME/" "$AYML"
|
||||
fi
|
||||
ATOML=$(readlink -e ~/.config/alacritty/alacritty.toml)
|
||||
if [ -f "$ATOML" ]; then
|
||||
sed -i "s#^import =.*#import = [\"~/.config/alacritty/$THEME.toml\"]#" "$ATOML"
|
||||
fi
|
||||
|
||||
XSET=$(readlink -e ~/.config/xsettingsd/xsettingsd.conf)
|
||||
if [ "$THEME" = dark ]; then
|
||||
kitten themes --reload-in=all Afterglow
|
||||
elif [ "$THEME" = light ]; then
|
||||
kitten themes --reload-in=all One Half Light
|
||||
fi
|
||||
|
||||
# GTK
|
||||
if [ -f ~/.config/xsettingsd/xsettingsd.conf ]; then
|
||||
sed -i -E "s#(Net/ThemeName) .*#\\1 \"${GTK_THEME}\"#" ~/.config/xsettingsd/xsettingsd.conf
|
||||
if [ -n "$XSET" ]; then
|
||||
sed -i -E "s#(Net/ThemeName) .*#\\1 \"${GTK_THEME}\"#" "$XSET"
|
||||
pkill -HUP -x xsettingsd
|
||||
gsettings set org.gnome.desktop.interface gtk-theme "${GTK_THEME}"
|
||||
fi
|
||||
|
||||
# Emacs
|
||||
if which emacsclient > /dev/null; then
|
||||
emacsclient --eval "(my-select-theme '$THEME)"
|
||||
# waybar
|
||||
WCSS=$(readlink -e ~/.config/waybar/style.css)
|
||||
if [ -f "$WCSS" ]; then
|
||||
sed -i -E "s#file:///.*/(light|dark)[.]css#file://$HOME/.config/waybar/$THEME.css#" "$WCSS"
|
||||
fi
|
||||
|
||||
15
xsession/bin/st-abduco-tabbed
Executable file
15
xsession/bin/st-abduco-tabbed
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
exec tabbed "$0" -w
|
||||
fi
|
||||
|
||||
if [ "$1" = "-w" ] && [ -n "$2" ]; then
|
||||
name=$(abduco | tail +2 | awk -F'\t' '{ print $NF }' | dmenu -p session: -l 10)
|
||||
if [ -n "$name" ]; then
|
||||
exec st -w "$2" -t "$name" -e abduco -A "$name" "$SHELL"
|
||||
fi
|
||||
else
|
||||
echo error: requires either no arguments or single option -w with and argument >&2
|
||||
exit 1
|
||||
fi
|
||||
17
yazi/.config/yazi/yazi.toml
Normal file
17
yazi/.config/yazi/yazi.toml
Normal file
@@ -0,0 +1,17 @@
|
||||
[opener]
|
||||
imv = [
|
||||
{ run = 'imv "$@"', orphan = true },
|
||||
]
|
||||
zathura = [
|
||||
{ run = 'zathura "$@"', orphan = true },
|
||||
]
|
||||
fzf_vis = [
|
||||
{ run = 'cd "$@" && fd --type f | fzf --bind "enter:become(vis {})"', block = true }
|
||||
]
|
||||
|
||||
[open]
|
||||
prepend_rules = [
|
||||
{ mime = "image/*", use = "imv" },
|
||||
{ mime = "application/pdf", use = "zathura" },
|
||||
{ mime = "inode/directory", use = "fzf_vis" }
|
||||
]
|
||||
Reference in New Issue
Block a user