Compare commits
253 Commits
b5e558a058
...
wip
Author | SHA1 | Date | |
---|---|---|---|
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 | |||
0abe06adc2 | |||
4b45ae4d75 | |||
f320686648 | |||
c197687f97 | |||
c785d3927c | |||
cbf8c1cd3d | |||
b9f9311e8c | |||
3d6a0c7d06 | |||
c4505f031d | |||
1e8a99ff6d | |||
5e95c6fedd | |||
e4ee8729de | |||
fef317a18a | |||
e44c73f1c7 | |||
db53671f68 | |||
104fd83815 | |||
39b6738c66 | |||
ebc3249391 | |||
375a316ac1 | |||
c858ebbce3 | |||
70482d0f1a | |||
591bfb2939 | |||
5a64840389 | |||
45d9be425b | |||
6caecdb766 | |||
b36184e40b | |||
2c0a70ee04 | |||
09ca990061 | |||
eda6ab8f4f | |||
0f7a325f0b | |||
7b95888dfa | |||
4a6436123e | |||
f724b9c29c | |||
f2bd8915a3 |
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,8 +1,11 @@
|
|||||||
bspwm/.config/bspwm/themes/theme.sh
|
bspwm/.config/bspwm/themes/theme.sh
|
||||||
shell/.config/zsh/plugins/zsh-autosuggestions
|
shell/.config/zsh/plugins/zsh-autosuggestions
|
||||||
shell/.config/zsh/plugins/zsh-syntax-highlighting
|
shell/.config/zsh/plugins/zsh-syntax-highlighting
|
||||||
|
shell/.config/zsh/plugins/zsh-vi-mode
|
||||||
qtile/.config/qtile/theme.txt
|
qtile/.config/qtile/theme.txt
|
||||||
lupan-clock/lupan-clock
|
lupan-clock/lupan-clock
|
||||||
lupan-wm/target
|
lupan-wm/target
|
||||||
*~
|
*~
|
||||||
__pycache__
|
__pycache__
|
||||||
|
/dwm
|
||||||
|
/st
|
||||||
|
45
Makefile
Normal file
45
Makefile
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
all:
|
||||||
|
@echo "run: make clone build install"
|
||||||
|
|
||||||
|
clone: ~/.local/share/zap dwm st
|
||||||
|
|
||||||
|
build: build-dwm build-st build-lupan-clock
|
||||||
|
|
||||||
|
install: install-dwm install-st install-lupan-clock install-other
|
||||||
|
|
||||||
|
~/.local/share/zap:
|
||||||
|
mkdir -p ~/.local/share
|
||||||
|
cd ~/.local/share && \
|
||||||
|
git clone https://github.com/zap-zsh/zap.git --branch=release-v1
|
||||||
|
|
||||||
|
dwm:
|
||||||
|
git clone https://git.suckless.org/dwm
|
||||||
|
cp -i patches/dwm/config.h dwm/
|
||||||
|
|
||||||
|
build-dwm:
|
||||||
|
make -C dwm
|
||||||
|
|
||||||
|
install-dwm:
|
||||||
|
make -C dwm install PREFIX="${HOME}/.local"
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
build-st:
|
||||||
|
make -C st
|
||||||
|
|
||||||
|
install-st:
|
||||||
|
make -C st install PREFIX="${HOME}/.local"
|
||||||
|
|
||||||
|
build-lupan-clock:
|
||||||
|
make -C lupan-clock
|
||||||
|
|
||||||
|
install-lupan-clock:
|
||||||
|
make -C lupan-clock install PREFIX="${HOME}/.local"
|
||||||
|
|
||||||
|
install-other:
|
||||||
|
stow -Rv shell tmux xsession nvim
|
63
README.md
63
README.md
@ -1,54 +1,55 @@
|
|||||||
Lupan's config files
|
Lupan's config files
|
||||||
====================
|
====================
|
||||||
|
|
||||||
Screenshots
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Short answer: [screenshots here](https://lupan.pl/lupan-themes/).
|
|
||||||
|
|
||||||
My configuration allows to switch between my 6 themes using a shell
|
|
||||||
script bound to a key stroke (`super + F6` for switching themes in a
|
|
||||||
cycle and `super + shift + F6` for selecting one with `dmenu`). The
|
|
||||||
theme is applied to *bspwm*, *Polybar*, *Alacritty*, *Emacs*, and
|
|
||||||
*Gtk3* (with support for reloading themes in active *Gtk3*
|
|
||||||
applications, but I currently use only two *Gtk3* themes: one dark and
|
|
||||||
one light).
|
|
||||||
|
|
||||||
You can see the screenshots of my whole workspace with each of the
|
|
||||||
themes applied on the page describing [my Emacs
|
|
||||||
themes](https://lupan.pl/lupan-themes/). For the Emacs theme
|
|
||||||
reloading I use simple helper Emacs function `my-select-theme`
|
|
||||||
available from [Toggle between dark and light themes with a
|
|
||||||
key](https://lupan.pl/dotemacs/#toggle-between-dark-and-light-themes-with-a-key)
|
|
||||||
section of my Emacs config (also available in corresponding [GitHub
|
|
||||||
repo](https://github.com/lukpank/.emacs.d).
|
|
||||||
|
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
Install Hyprland
|
||||||
|
----------------
|
||||||
|
|
||||||
To reproduce my environment clone this repo into `~/dotfiles` and check
|
To reproduce my environment clone this repo into `~/dotfiles` and check
|
||||||
that you have required programs in your `PATH` with
|
that you have required programs in your `PATH` with
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sh check_dependencies.sh
|
$ sh check_dependencies.sh hypr
|
||||||
```
|
```
|
||||||
|
|
||||||
For [qtile](http://www.qtile.org/) configuration run
|
Install font `ttf-firacode-nerd` (https://github.com/ryanoasis/nerd-fonts/releases/download/v3.0.2/FiraCode.zip).
|
||||||
|
|
||||||
|
Install proper configurations with
|
||||||
|
|
||||||
```
|
```
|
||||||
$ stow -v alacritty xsession qtile music shell tmux
|
$ stow shell hyprland alacritty xsession nvim yazi
|
||||||
```
|
```
|
||||||
|
|
||||||
For [bspwm](https://github.com/baskerville/bspwm) configuration run
|
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
|
||||||
|
|
||||||
```
|
```
|
||||||
$ stow -v alacritty xsession bspwm music shell tmux
|
$ chsh -s /usr/bin/zsh
|
||||||
```
|
```
|
||||||
|
|
||||||
but if you want [i3](https://i3wm.org/) config (left as a fallback)
|
Install DWM (old)
|
||||||
instead of *qtile* or *bspwm* then *also* run
|
-----------------
|
||||||
|
|
||||||
|
To reproduce my environment clone this repo into `~/dotfiles` and check
|
||||||
|
that you have required programs in your `PATH` with
|
||||||
|
|
||||||
```
|
```
|
||||||
$ stow -v i3
|
$ sh check_dependencies.sh dwm
|
||||||
|
```
|
||||||
|
|
||||||
|
Install font `ttf-firacode-nerd` (https://github.com/ryanoasis/nerd-fonts/releases/download/v3.0.2/FiraCode.zip).
|
||||||
|
|
||||||
|
Install `st`, `dwm`, `lupan-clock`, and config files with
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make clone build install
|
||||||
|
```
|
||||||
|
|
||||||
|
Change to `zsh` as your login shell with
|
||||||
|
|
||||||
|
```
|
||||||
|
$ chsh -s /usr/bin/zsh
|
||||||
```
|
```
|
||||||
|
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,200 +0,0 @@
|
|||||||
# See: /usr/share/doc/alacritty/example/alacritty.yml
|
|
||||||
|
|
||||||
env:
|
|
||||||
TERM: xterm-256color
|
|
||||||
|
|
||||||
schemas:
|
|
||||||
lupan_dark: &lupan-dark
|
|
||||||
primary:
|
|
||||||
background: '#1a3a34'
|
|
||||||
foreground: '#c8cfce'
|
|
||||||
normal:
|
|
||||||
black: '#000000'
|
|
||||||
red: '#c59f9f'
|
|
||||||
green: '#9fc59f'
|
|
||||||
yellow: '#c5c59f'
|
|
||||||
blue: '#9f9fc5'
|
|
||||||
magenta: '#c59fc5'
|
|
||||||
cyan: '#9fc5c5'
|
|
||||||
white: '#c8cfce'
|
|
||||||
bright: &bright-colors
|
|
||||||
black: '#a0a0a0'
|
|
||||||
red: '#e5b2b2'
|
|
||||||
green: '#b4e5b2'
|
|
||||||
yellow: '#e4e5b2'
|
|
||||||
blue: '#b2cde5'
|
|
||||||
magenta: '#e4b2e5'
|
|
||||||
cyan: '#b2e5e5'
|
|
||||||
white: '#ffffff'
|
|
||||||
lupan_dark_blue: &lupan-dark-blue
|
|
||||||
primary:
|
|
||||||
background: '#092e50'
|
|
||||||
foreground: '#c8cccf'
|
|
||||||
normal: &dark-normal-colors
|
|
||||||
black: '#000000'
|
|
||||||
red: '#c59f9f'
|
|
||||||
green: '#9fc59f'
|
|
||||||
yellow: '#c5c59f'
|
|
||||||
blue: '#9f9fc5'
|
|
||||||
magenta: '#c59fc5'
|
|
||||||
cyan: '#9fc5c5'
|
|
||||||
white: '#c8cccf'
|
|
||||||
bright: *bright-colors
|
|
||||||
lupan_dark_gray: &lupan-dark-gray
|
|
||||||
primary:
|
|
||||||
background: '#474c51'
|
|
||||||
foreground: '#c8cccf'
|
|
||||||
normal: *dark-normal-colors
|
|
||||||
bright: *bright-colors
|
|
||||||
dark: &dark
|
|
||||||
primary:
|
|
||||||
background: '#1E293B'
|
|
||||||
foreground: '#839496'
|
|
||||||
normal:
|
|
||||||
black: '#3f3f3f'
|
|
||||||
red: '#ac7373'
|
|
||||||
green: '#7f9f7f'
|
|
||||||
yellow: '#dfaf8f'
|
|
||||||
blue: '#7cb8bb'
|
|
||||||
magenta: '#dc8cc3'
|
|
||||||
cyan: '#93e0e3'
|
|
||||||
white: '#dcdccc'
|
|
||||||
bright: *bright-colors
|
|
||||||
lupan_material_dark: &lupan-material-dark
|
|
||||||
primary:
|
|
||||||
background: '#263238'
|
|
||||||
foreground: '#eeeeee'
|
|
||||||
normal: &material-dark-normal
|
|
||||||
black: '#212121'
|
|
||||||
red: '#ef9a9a'
|
|
||||||
green: '#a5d6a7'
|
|
||||||
yellow: '#fff59d'
|
|
||||||
blue: '#90caf9'
|
|
||||||
magenta: '#ce93d8'
|
|
||||||
cyan: '#80deea'
|
|
||||||
white: '#fafafa'
|
|
||||||
bright: *bright-colors
|
|
||||||
lupan_light: &lupan-light
|
|
||||||
primary:
|
|
||||||
background: '#f2f6e1'
|
|
||||||
foreground: '#1a3a34'
|
|
||||||
normal: &lupan-light-normal
|
|
||||||
black: '#000000'
|
|
||||||
red: '#a65959'
|
|
||||||
green: '#5ba659'
|
|
||||||
yellow: '#a4a659'
|
|
||||||
blue: '#5981a6'
|
|
||||||
magenta: '#a459a6'
|
|
||||||
cyan: '#59a6a6'
|
|
||||||
white: '#f2f6e1'
|
|
||||||
bright: *material-dark-normal
|
|
||||||
lupan_material_light: &lupan-material-light
|
|
||||||
primary:
|
|
||||||
background: '#fafafa'
|
|
||||||
foreground: '#424242'
|
|
||||||
normal:
|
|
||||||
black: '#212121'
|
|
||||||
red: '#e53935'
|
|
||||||
green: '#43a047'
|
|
||||||
yellow: '#f9a825'
|
|
||||||
blue: '#1e88e5'
|
|
||||||
magenta: '#8e24aa'
|
|
||||||
cyan: '#00acc1'
|
|
||||||
white: '#fafafa'
|
|
||||||
bright: *bright-colors
|
|
||||||
light: &light
|
|
||||||
primary:
|
|
||||||
background: '#FAFAFA'
|
|
||||||
foreground: '#546E7A'
|
|
||||||
normal:
|
|
||||||
black: '#546e7a'
|
|
||||||
red: '#d50000'
|
|
||||||
green: '#66bb6a'
|
|
||||||
yellow: '#f57f17'
|
|
||||||
blue: '#42a5f5'
|
|
||||||
magenta: '#7e57c2'
|
|
||||||
cyan: '#0097a7'
|
|
||||||
white: '#fafafa'
|
|
||||||
bright: *bright-colors
|
|
||||||
faff: &faff
|
|
||||||
primary:
|
|
||||||
background: '#cdc8b1'
|
|
||||||
foreground: '#000000'
|
|
||||||
normal:
|
|
||||||
black: '#000000'
|
|
||||||
red: '#cd0000'
|
|
||||||
green: '#008b00'
|
|
||||||
yellow: '#ffff00'
|
|
||||||
blue: '#0000ee'
|
|
||||||
magenta: '#8b008b'
|
|
||||||
cyan: '#008b8b'
|
|
||||||
white: '#ffffff'
|
|
||||||
bright:
|
|
||||||
black: '#666666'
|
|
||||||
red: '#ec6261'
|
|
||||||
green: '#008b00'
|
|
||||||
yellow: '#f0c649'
|
|
||||||
blue: '#63b4f6'
|
|
||||||
magenta: '#cb77f9'
|
|
||||||
cyan: '#86d7db'
|
|
||||||
white: '#d3d2d1'
|
|
||||||
|
|
||||||
gogh-tin: &gogh-tin
|
|
||||||
primary:
|
|
||||||
background: '#2e2e35'
|
|
||||||
foreground: '#839496'
|
|
||||||
normal:
|
|
||||||
black: '#000000'
|
|
||||||
red: '#8d534e'
|
|
||||||
green: '#4e8d53'
|
|
||||||
yellow: '#888d4e'
|
|
||||||
blue: '#534e8d'
|
|
||||||
magenta: '#8d4e88'
|
|
||||||
cyan: '#4e888d'
|
|
||||||
white: '#ffffff'
|
|
||||||
bright:
|
|
||||||
black: '#000000'
|
|
||||||
red: '#b57d78'
|
|
||||||
green: '#78b57d'
|
|
||||||
yellow: '#b0b578'
|
|
||||||
blue: '#7d78b5'
|
|
||||||
magenta: '#b578b0'
|
|
||||||
cyan: '#78b0b5'
|
|
||||||
white: '#ffffff'
|
|
||||||
|
|
||||||
gogh-nord-light: &gogh-nord-light
|
|
||||||
primary:
|
|
||||||
background: '#ebeaf2'
|
|
||||||
foreground: '#657b83'
|
|
||||||
normal:
|
|
||||||
black: '#003b4e'
|
|
||||||
red: '#e64569'
|
|
||||||
green: '#069f5f'
|
|
||||||
yellow: '#dab752'
|
|
||||||
blue: '#439ecf'
|
|
||||||
magenta: '#d961dc'
|
|
||||||
cyan: '#00b1be'
|
|
||||||
white: '#b3b3b3'
|
|
||||||
bright:
|
|
||||||
black: '#3e89a1'
|
|
||||||
red: '#e4859a'
|
|
||||||
green: '#a2cca1'
|
|
||||||
yellow: '#e1e387'
|
|
||||||
blue: '#6fbbe2'
|
|
||||||
magenta: '#e586e7'
|
|
||||||
cyan: '#96dcda'
|
|
||||||
white: '#dedede'
|
|
||||||
|
|
||||||
colors: *gogh-tin
|
|
||||||
|
|
||||||
font:
|
|
||||||
size: 12
|
|
||||||
normal:
|
|
||||||
family: Iosevka ss01
|
|
||||||
bold:
|
|
||||||
family: Iosevka ss01 extrabold
|
|
||||||
|
|
||||||
key_bindings:
|
|
||||||
- key: F6
|
|
||||||
mods: Control|Shift
|
|
||||||
command: { program: "/bin/sh", args: ["-c", "~/.config/alacritty/set_theme.sh --next"] }
|
|
45
alacritty/.config/alacritty/dark.toml
Normal file
45
alacritty/.config/alacritty/dark.toml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Kanagawa Paper Ink
|
||||||
|
# Upstream: https://github.com/thesimonho/kanagawa-paper.nvim/master/extras/alacritty/kanagawa-paper-ink.toml
|
||||||
|
# URL: https://github.com/alacritty/alacritty
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
[colors.primary]
|
||||||
|
background = '#1F1F28'
|
||||||
|
foreground = '#DCD7BA'
|
||||||
|
|
||||||
|
[colors.cursor]
|
||||||
|
cursor = '#c4b28a'
|
||||||
|
text = '#1F1F28'
|
||||||
|
|
||||||
|
[colors.selection]
|
||||||
|
background = '#363646'
|
||||||
|
foreground = '#9e9b93'
|
||||||
|
|
||||||
|
[colors.normal]
|
||||||
|
black = '#393836'
|
||||||
|
red = '#c4746e'
|
||||||
|
green = '#699469'
|
||||||
|
yellow = '#c4b28a'
|
||||||
|
blue = '#435965'
|
||||||
|
magenta = '#a292a3'
|
||||||
|
cyan = '#8ea49e'
|
||||||
|
white = '#C8C093'
|
||||||
|
|
||||||
|
[colors.bright]
|
||||||
|
black = '#aca9a4'
|
||||||
|
red = '#cc928e'
|
||||||
|
green = '#72a072'
|
||||||
|
yellow = '#d4c196'
|
||||||
|
blue = '#698a9b'
|
||||||
|
magenta = '#b4a7b5'
|
||||||
|
cyan = '#96ada7'
|
||||||
|
white = '#d5cd9d'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 16
|
||||||
|
color = '#b6927b'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 17
|
||||||
|
color = '#c4746e'
|
45
alacritty/.config/alacritty/light.toml
Normal file
45
alacritty/.config/alacritty/light.toml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Kanagawa Paper Canvas
|
||||||
|
# Upstream: https://github.com/thesimonho/kanagawa-paper.nvim/master/extras/alacritty/kanagawa-paper-canvas.toml
|
||||||
|
# URL: https://github.com/alacritty/alacritty
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
[colors.primary]
|
||||||
|
background = '#e1e1de'
|
||||||
|
foreground = '#595b62'
|
||||||
|
|
||||||
|
[colors.cursor]
|
||||||
|
cursor = '#618bb6'
|
||||||
|
text = '#e1e1de'
|
||||||
|
|
||||||
|
[colors.selection]
|
||||||
|
background = '#c4cbdc'
|
||||||
|
foreground = '#858479'
|
||||||
|
|
||||||
|
[colors.normal]
|
||||||
|
black = '#4c4c65'
|
||||||
|
red = '#b35560'
|
||||||
|
green = '#57786c'
|
||||||
|
yellow = '#a67337'
|
||||||
|
blue = '#719ac2'
|
||||||
|
magenta = '#ac7085'
|
||||||
|
cyan = '#526c79'
|
||||||
|
white = '#858479'
|
||||||
|
|
||||||
|
[colors.bright]
|
||||||
|
black = '#5c5c75'
|
||||||
|
red = '#c75f6b'
|
||||||
|
green = '#618679'
|
||||||
|
yellow = '#b67e3d'
|
||||||
|
blue = '#86aed7'
|
||||||
|
magenta = '#b57e91'
|
||||||
|
cyan = '#5d7a89'
|
||||||
|
white = '#919084'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 16
|
||||||
|
color = '#b8805e'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 17
|
||||||
|
color = '#b35560'
|
@ -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
|
|
544
awesome/.config/awesome/rc.lua
Normal file
544
awesome/.config/awesome/rc.lua
Normal file
@ -0,0 +1,544 @@
|
|||||||
|
-- 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 = "alacritty"
|
||||||
|
|
||||||
|
-- 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()
|
||||||
|
|
||||||
|
-- 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
|
||||||
|
|
||||||
|
-- {{{ 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)
|
||||||
|
c.maximized = not c.maximized
|
||||||
|
c:raise()
|
||||||
|
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" })
|
||||||
|
)
|
||||||
|
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
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- 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
|
||||||
|
-- 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
|
||||||
|
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)
|
||||||
|
|
||||||
|
client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
|
||||||
|
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
|
||||||
|
-- }}}
|
56
awesome/.config/awesome/theme_dark.lua
Normal file
56
awesome/.config/awesome/theme_dark.lua
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
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 = "#293d38" -- hsl(165deg 20% 20%)
|
||||||
|
theme.bg_focus = "#478575" -- hsl(165deg 30% 40%)
|
||||||
|
theme.bg_urgent = "#5c3d45" -- hsl(345deg 20% 30%)
|
||||||
|
theme.bg_minimize = "#363e49" -- hsl(215deg 15% 25%)
|
||||||
|
theme.bg_systray = theme.bg_normal
|
||||||
|
theme.tasklist_bg_focus = "#3d5c54" -- hsl(165deg 20% 30%)
|
||||||
|
|
||||||
|
theme.fg_normal = "#a9d6ca" -- hsl(165deg 35% 75%)"
|
||||||
|
theme.fg_focus = "#b1babd"
|
||||||
|
theme.fg_urgent = theme.bg_focus
|
||||||
|
theme.fg_minimize = "#8a9294"
|
||||||
|
theme.taglist_fg_empty = "#62847b" -- hsl(165deg 15% 45%)"
|
||||||
|
|
||||||
|
theme.useless_gap = dpi(1)
|
||||||
|
theme.border_width = dpi(2)
|
||||||
|
theme.border_normal = "#708090"
|
||||||
|
theme.border_focus = "#a0522d"
|
||||||
|
theme.border_marked = "#91231c"
|
||||||
|
|
||||||
|
theme.bg_wallpaper = "#424a4c"
|
||||||
|
|
||||||
|
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
|
56
awesome/.config/awesome/theme_light.lua
Normal file
56
awesome/.config/awesome/theme_light.lua
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
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 = "#293d38" -- hsl(165deg 20% 20%)
|
||||||
|
theme.bg_focus = "#a9d6ca" -- hsl(165deg 35% 75%)
|
||||||
|
theme.bg_urgent = "#bc8f9b" -- hsl(345deg 25% 65%)
|
||||||
|
theme.bg_minimize = "#62847b" -- hsl(165deg 15% 45%)
|
||||||
|
theme.bg_systray = theme.bg_normal
|
||||||
|
theme.tasklist_bg_focus = "#8fbcb1" -- hsl(165deg 25% 65%)
|
||||||
|
|
||||||
|
theme.fg_normal = "#a9d6ca" -- hsl(165deg 35% 75%)"
|
||||||
|
theme.fg_focus = "#363d3e"
|
||||||
|
theme.fg_urgent = "#e9f2f5"
|
||||||
|
theme.fg_minimize = "#4b5456"
|
||||||
|
theme.taglist_fg_empty = "#62847b" -- hsl(165deg 15% 45%)"
|
||||||
|
|
||||||
|
theme.useless_gap = dpi(1)
|
||||||
|
theme.border_width = dpi(2)
|
||||||
|
theme.border_normal = "#bebebe"
|
||||||
|
theme.border_focus = "#ff7f50"
|
||||||
|
theme.border_marked = "#91231c"
|
||||||
|
|
||||||
|
theme.bg_wallpaper = "#b0bec2"
|
||||||
|
|
||||||
|
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,36 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
|
|
||||||
xdo kill $(xdo id -N Polybar)
|
|
||||||
i=0
|
|
||||||
monitors=$(bspc query -M --names)
|
|
||||||
for monitor in $monitors; do
|
|
||||||
MONITOR="$monitor" polybar panel &
|
|
||||||
i=$((i + 1))
|
|
||||||
done
|
|
||||||
if [ $i -eq 1 ]; then
|
|
||||||
bspc monitor -d 1 2 3 4 5 6 7 8 9 0
|
|
||||||
else
|
|
||||||
monitor1=$(echo $monitors | cut -d ' ' -f 1)
|
|
||||||
monitor2=$(echo $monitors | cut -d ' ' -f 2)
|
|
||||||
bspc monitor "$monitor2" -d 1 2 3 4 5 6 7 8 9
|
|
||||||
bspc monitor "$monitor1" -d 0
|
|
||||||
bspc monitor "$monitor1" -s "$monitor2"
|
|
||||||
bspc monitor "$monitor2" -f
|
|
||||||
fi
|
|
||||||
|
|
||||||
bspc config border_width 4
|
|
||||||
bspc config window_gap 12
|
|
||||||
|
|
||||||
sh ~/.config/bspwm/commands.sh theme --set
|
|
||||||
|
|
||||||
bspc config split_ratio 0.50
|
|
||||||
bspc config single_monocle false
|
|
||||||
bspc config borderless_monocle true
|
|
||||||
bspc config gapless_monocle true
|
|
||||||
|
|
||||||
bspc config pointer_follows_focus true
|
|
||||||
bspc config pointer_follows_monitor true
|
|
||||||
bspc config focus_follows_pointer true
|
|
||||||
|
|
||||||
bspc rule -a Gimp desktop='^8' state=floating follow=on
|
|
||||||
bspc rule -a jetbrains-studio:sun-awt-X11-XWindowPeer manage=off
|
|
@ -1,94 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
THEMES_PATH=~/.config/bspwm/themes
|
|
||||||
CURRENT_THEME_PATH="${THEMES_PATH}/theme.sh"
|
|
||||||
DEFAULT_THEME=lupan-dark
|
|
||||||
|
|
||||||
FONT='Iosevka Slab Light-12'
|
|
||||||
BAR_FONT="${FONT};5"
|
|
||||||
|
|
||||||
CMD="$1"
|
|
||||||
shift
|
|
||||||
|
|
||||||
# Determine current theme
|
|
||||||
THEME=
|
|
||||||
if [ -e "${CURRENT_THEME_PATH}" ]; then
|
|
||||||
. "${CURRENT_THEME_PATH}"
|
|
||||||
fi
|
|
||||||
THEME="${THEME:-$DEFAULT_THEME}"
|
|
||||||
|
|
||||||
list_themes() {
|
|
||||||
( cd "$THEMES_PATH" && ls *-theme.sh | sed 's/-theme.sh$//' | sort )
|
|
||||||
}
|
|
||||||
|
|
||||||
# Select next or named theme
|
|
||||||
if [ "$CMD" = theme -a "$1" = --next ]; then
|
|
||||||
NEXT=$(list_themes | grep -A 1 "^${THEME}\$" | tail -1)
|
|
||||||
if [ "$NEXT" = "$THEME" ]; then
|
|
||||||
THEME=$(list_themes | head -1)
|
|
||||||
elif [ "$THEME" = "" ]; then
|
|
||||||
THEME="${DEFAULT_THEME}"
|
|
||||||
else
|
|
||||||
THEME="$NEXT"
|
|
||||||
fi
|
|
||||||
elif [ "$CMD" = theme -a "$1" != --set ]; then
|
|
||||||
if [ "$1" = "" ]; then
|
|
||||||
exit
|
|
||||||
elif [ -e "${THEMES_PATH}/$1-theme.sh" ]; then
|
|
||||||
THEME="$1"
|
|
||||||
else
|
|
||||||
THEME="${DEFAULT_THEME}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Load theme
|
|
||||||
THEME_PATH="${THEMES_PATH}/${THEME}-theme.sh"
|
|
||||||
if [ -e "${THEME_PATH}" ]; then
|
|
||||||
. "${THEME_PATH}"
|
|
||||||
else
|
|
||||||
. "${THEMES_PATH}/${DEFAULT_THEME}-theme.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dmenu() {
|
|
||||||
command dmenu -nb ${BAR_BG} -nf ${BAR_FG} -sb ${BAR_ACTIVE} -sf ${BAR_FG} -fn "${FONT}" $@
|
|
||||||
}
|
|
||||||
|
|
||||||
dmenu_run() {
|
|
||||||
command dmenu_run -nb ${BAR_BG} -nf ${BAR_FG} -sb ${BAR_ACTIVE} -sf ${BAR_FG} -fn "${FONT}" $@
|
|
||||||
}
|
|
||||||
|
|
||||||
set_theme() {
|
|
||||||
echo "THEME=${THEME}" > "${CURRENT_THEME_PATH}"
|
|
||||||
xrdb -merge <<EOF
|
|
||||||
polybar.background: ${BAR_BG}
|
|
||||||
polybar.foreground: ${BAR_FG}
|
|
||||||
polybar.active: ${BAR_ACTIVE}
|
|
||||||
polybar.urgent: ${BAR_URGENT}
|
|
||||||
polybar.empty: ${BAR_EMPTY}
|
|
||||||
polybar.font: ${BAR_FONT}
|
|
||||||
EOF
|
|
||||||
polybar-msg cmd restart
|
|
||||||
xsetroot -solid "${ROOT_BG}"
|
|
||||||
bspc config normal_border_color "${NORMAL_BORDER}"
|
|
||||||
bspc config focused_border_color "${FOCUS_BORDER}"
|
|
||||||
bspc config presel_feedback_color "${FOCUS_BORDER}"
|
|
||||||
sed -i "s/^colors: [*].*/colors: *$THEME/" ~/.config/alacritty/alacritty.yml
|
|
||||||
sed -i -E "s#(Net/ThemeName) .*#\1 \"${GTK_THEME}\"#" ~/.config/xsettingsd/xsettingsd.conf
|
|
||||||
pkill -HUP -x xsettingsd
|
|
||||||
emacsclient --eval "(my-select-theme '${EMACS_THEME})"
|
|
||||||
}
|
|
||||||
|
|
||||||
case "$CMD" in
|
|
||||||
theme)
|
|
||||||
set_theme
|
|
||||||
;;
|
|
||||||
dmenu|dmenu_run)
|
|
||||||
"$CMD" "$@"
|
|
||||||
;;
|
|
||||||
dmenu_window)
|
|
||||||
bspc node -f $(xtitle -f '%u %s\n' $(bspc query -N -n .window) \
|
|
||||||
| dmenu -l 20 -i -p Window: "$@" | cut -f 1 -d ' ')
|
|
||||||
;;
|
|
||||||
dmenu_theme)
|
|
||||||
sh "$0" theme $(list_themes | dmenu -p Theme: "$@")
|
|
||||||
esac
|
|
@ -1,11 +0,0 @@
|
|||||||
ROOT_BG=#4c4c4c
|
|
||||||
BAR_BG=#394d5f
|
|
||||||
BAR_FG=#9fb3c5
|
|
||||||
BAR_ACTIVE=#4c677f
|
|
||||||
BAR_URGENT=#7f4c4c
|
|
||||||
BAR_EMPTY=#767f88
|
|
||||||
NORMAL_BORDER=#767f88
|
|
||||||
FOCUS_BORDER=#9fb3c5
|
|
||||||
ALACRITTY_THEME=lupan-dark-blue
|
|
||||||
EMACS_THEME=lupan-dark-blue
|
|
||||||
GTK_THEME=Materia-dark
|
|
@ -1,11 +0,0 @@
|
|||||||
ROOT_BG=#4c4c4c
|
|
||||||
BAR_BG=#394c5f
|
|
||||||
BAR_FG=#9fb2c5
|
|
||||||
BAR_ACTIVE=#4c657f
|
|
||||||
BAR_URGENT=#7f4c4c
|
|
||||||
BAR_EMPTY=#767f88
|
|
||||||
NORMAL_BORDER=#767f88
|
|
||||||
FOCUS_BORDER=#4c657f
|
|
||||||
ALACRITTY_THEME=lupan-dark-gray
|
|
||||||
EMACS_THEME=lupan-dark-gray
|
|
||||||
GTK_THEME=Materia-dark
|
|
@ -1,11 +0,0 @@
|
|||||||
ROOT_BG=#4c4c4c
|
|
||||||
BAR_BG=#395f58
|
|
||||||
BAR_FG=#9fc5be
|
|
||||||
BAR_ACTIVE=#4c7f75
|
|
||||||
BAR_URGENT=#7f4c4c
|
|
||||||
BAR_EMPTY=#768885
|
|
||||||
NORMAL_BORDER=#768885
|
|
||||||
FOCUS_BORDER=#9fc5be
|
|
||||||
ALACRITTY_THEME=lupan-dark
|
|
||||||
EMACS_THEME=lupan-dark
|
|
||||||
GTK_THEME=Materia-dark
|
|
@ -1,11 +0,0 @@
|
|||||||
ROOT_BG=#e5e5e5
|
|
||||||
BAR_BG=#d8e0b7
|
|
||||||
BAR_FG=#5a6335
|
|
||||||
BAR_ACTIVE=#ebefdb
|
|
||||||
BAR_URGENT=#e0b7b7
|
|
||||||
BAR_EMPTY=#b0b0b0
|
|
||||||
NORMAL_BORDER=#b0b0b0
|
|
||||||
FOCUS_BORDER=#97a559
|
|
||||||
ALACRITTY_THEME=lupan-light
|
|
||||||
EMACS_THEME=lupan-light
|
|
||||||
GTK_THEME=Materia-light
|
|
@ -1,11 +0,0 @@
|
|||||||
ROOT_BG=#212121
|
|
||||||
BAR_BG=#455a64
|
|
||||||
BAR_FG=#f2f6e1
|
|
||||||
BAR_ACTIVE=#78909c
|
|
||||||
BAR_URGENT=#ef5350
|
|
||||||
BAR_EMPTY=#757575
|
|
||||||
NORMAL_BORDER=#757575
|
|
||||||
FOCUS_BORDER=#78909c
|
|
||||||
ALACRITTY_THEME=lupan-material-dark
|
|
||||||
EMACS_THEME=lupan-material-dark
|
|
||||||
GTK_THEME=Materia-dark
|
|
@ -1,11 +0,0 @@
|
|||||||
ROOT_BG=#fafafa
|
|
||||||
BAR_BG=#cfd8dc
|
|
||||||
BAR_FG=#424242
|
|
||||||
BAR_ACTIVE=#eceff1
|
|
||||||
BAR_URGENT=#ef5350
|
|
||||||
BAR_EMPTY=#bdbdbd
|
|
||||||
NORMAL_BORDER=#bdbdbd
|
|
||||||
FOCUS_BORDER=#b0bec5
|
|
||||||
ALACRITTY_THEME=lupan-material-light
|
|
||||||
EMACS_THEME=lupan-material-light
|
|
||||||
GTK_THEME=Materia-light
|
|
@ -1,65 +0,0 @@
|
|||||||
[colors]
|
|
||||||
background = ${xrdb:polybar.background:#1a343a}
|
|
||||||
foreground = ${xrdb:polybar.foreground:#f2f6e1}
|
|
||||||
active = ${xrdb:polybar.active:#3585ce}
|
|
||||||
urgent = ${xrdb:polybar.urgent:#9b0640}
|
|
||||||
empty = ${xrdb:polybar.empty:#808080}
|
|
||||||
|
|
||||||
[bar/panel]
|
|
||||||
monitor = ${env:MONITOR:}
|
|
||||||
dpi = ${xrdb:Xft.dpi:160}
|
|
||||||
modules-left = bspwm xwindow
|
|
||||||
modules-right = mpd battery date
|
|
||||||
wm-restack = bspwm
|
|
||||||
enable-ipc = true
|
|
||||||
font-0 = ${xrdb:polybar.font:Iosevka-13.5;5}
|
|
||||||
height = ${xrdb:polybar.height:35}
|
|
||||||
background = ${colors.background}
|
|
||||||
foreground = ${colors.foreground}
|
|
||||||
padding-left = 2
|
|
||||||
padding-right = 2
|
|
||||||
module-margin-left = 1
|
|
||||||
module-margin-right = 1
|
|
||||||
line-size = 0
|
|
||||||
|
|
||||||
[module/bspwm]
|
|
||||||
type = internal/bspwm
|
|
||||||
label-focused = %name%
|
|
||||||
label-occupied = %name%
|
|
||||||
label-urgent = %name%
|
|
||||||
label-empty = %name%
|
|
||||||
label-focused-padding = 1
|
|
||||||
label-occupied-padding = 1
|
|
||||||
label-urgent-padding = 1
|
|
||||||
label-empty-padding = 1
|
|
||||||
label-focused-background = ${colors.active}
|
|
||||||
label-urgent-background = ${colors.urgent}
|
|
||||||
label-empty-foreground = ${colors.empty}
|
|
||||||
format = <label-state> <label-mode>
|
|
||||||
label-locked = l
|
|
||||||
label-marked = m
|
|
||||||
label-private = p
|
|
||||||
label-sticky = s
|
|
||||||
|
|
||||||
[module/xwindow]
|
|
||||||
type = internal/xwindow
|
|
||||||
label = %title%
|
|
||||||
|
|
||||||
[module/mpd]
|
|
||||||
type = internal/mpd
|
|
||||||
format-online = <label-song>
|
|
||||||
label-song-maxlen = 70
|
|
||||||
label-song-ellipsis = true
|
|
||||||
|
|
||||||
[module/battery]
|
|
||||||
type = internal/battery
|
|
||||||
battery = BAT1
|
|
||||||
adapter = ACAD
|
|
||||||
full-at = 98
|
|
||||||
format-charging-foreground = ${colors.empty}
|
|
||||||
format-full-foreground = ${colors.empty}
|
|
||||||
|
|
||||||
[module/date]
|
|
||||||
type = internal/date
|
|
||||||
time = %H:%M
|
|
||||||
label = %time%
|
|
@ -1,169 +0,0 @@
|
|||||||
#
|
|
||||||
# wm independent hotkeys
|
|
||||||
#
|
|
||||||
|
|
||||||
# terminal emulator
|
|
||||||
super + Return
|
|
||||||
alacritty
|
|
||||||
|
|
||||||
# program launcher
|
|
||||||
super + @space
|
|
||||||
sh ~/.config/bspwm/commands.sh dmenu_run
|
|
||||||
|
|
||||||
# make sxhkd reload its configuration files:
|
|
||||||
super + Escape
|
|
||||||
pkill -USR1 -x sxhkd
|
|
||||||
|
|
||||||
super + e
|
|
||||||
emacsclient -n -c
|
|
||||||
|
|
||||||
super + semicolon ; {e,f,t}
|
|
||||||
{emacsclient -n -c,firefox,thunderbird}
|
|
||||||
|
|
||||||
super + semicolon ; shift + {h,l,s}
|
|
||||||
{systemctl hibernate,slock,systemctl suspend}
|
|
||||||
|
|
||||||
super + {_,shift + }F6
|
|
||||||
sh ~/.config/bspwm/commands.sh {theme --next,dmenu_theme}
|
|
||||||
|
|
||||||
XF86AudioPlay
|
|
||||||
mpc toggle
|
|
||||||
|
|
||||||
XF86Audio{Lower,Raise}Volume
|
|
||||||
pamixer -{d,i} 5
|
|
||||||
|
|
||||||
XF86AudioMute
|
|
||||||
pamixer -t
|
|
||||||
|
|
||||||
XF86MonBrightness{Down,Up}
|
|
||||||
xbacklight -{dec,inc} 3
|
|
||||||
|
|
||||||
#
|
|
||||||
# bspwm hotkeys
|
|
||||||
#
|
|
||||||
|
|
||||||
# quit/restart bspwm
|
|
||||||
super + alt + {q,r}
|
|
||||||
bspc {quit,wm -r}
|
|
||||||
|
|
||||||
# close and kill
|
|
||||||
super + {_,shift + }w
|
|
||||||
bspc node -{c,k}
|
|
||||||
|
|
||||||
# alternate between the tiled and monocle layout
|
|
||||||
super + m
|
|
||||||
bspc desktop -l next
|
|
||||||
|
|
||||||
# send the newest marked node to the newest preselected node
|
|
||||||
super + y
|
|
||||||
bspc node newest.marked.local -n newest.!automatic.local
|
|
||||||
|
|
||||||
# swap the current node and the biggest node on the same desktop
|
|
||||||
super + g
|
|
||||||
bspc node -s biggest.tiled.local
|
|
||||||
|
|
||||||
#
|
|
||||||
# state/flags
|
|
||||||
#
|
|
||||||
|
|
||||||
# set the window state
|
|
||||||
super + {t,shift + t,s,f}
|
|
||||||
bspc node -t {tiled,pseudo_tiled,floating,'~fullscreen'}
|
|
||||||
|
|
||||||
# set the node flags
|
|
||||||
super + ctrl + {m,x,y,z}
|
|
||||||
bspc node -g {marked,locked,sticky,private}
|
|
||||||
|
|
||||||
#
|
|
||||||
# focus/swap
|
|
||||||
#
|
|
||||||
|
|
||||||
# focus the node in the given direction
|
|
||||||
super + {_,shift + }{h,j,k,l}
|
|
||||||
bspc node -{f,s} {west,south,north,east}
|
|
||||||
|
|
||||||
# focus the node for the given path jump
|
|
||||||
super + {p,b,comma,period}
|
|
||||||
bspc node -f @{parent,brother,first,second}
|
|
||||||
|
|
||||||
# focus the next/previous node in the current desktop
|
|
||||||
super + {_,shift + }c
|
|
||||||
bspc node -f {next,prev}.local
|
|
||||||
|
|
||||||
# focus the next/previous desktop in the current monitor
|
|
||||||
super + bracket{left,right}
|
|
||||||
bspc desktop -f {prev,next}.local
|
|
||||||
|
|
||||||
# focus the last node/desktop
|
|
||||||
super + {grave,Tab}
|
|
||||||
bspc {node,desktop} -f last
|
|
||||||
|
|
||||||
# focus the older or newer node in the focus history
|
|
||||||
super + {o,i}
|
|
||||||
bspc wm -h off; \
|
|
||||||
bspc node {older,newer} -f; \
|
|
||||||
bspc wm -h on
|
|
||||||
|
|
||||||
# focus or send to the given desktop
|
|
||||||
super + {_,shift + }{1-9,0}
|
|
||||||
bspc {desktop -f,node -d} '^{1-9,10}'
|
|
||||||
|
|
||||||
# focus window by title
|
|
||||||
super + shift + @space
|
|
||||||
sh ~/.config/bspwm/commands.sh dmenu_window
|
|
||||||
|
|
||||||
#
|
|
||||||
# preselect
|
|
||||||
#
|
|
||||||
|
|
||||||
# preselect the direction
|
|
||||||
super + ctrl + {h,j,k,l}
|
|
||||||
bspc node -p {west,south,north,east}
|
|
||||||
|
|
||||||
# preselect the ratio
|
|
||||||
super + ctrl + {1-9}
|
|
||||||
bspc node -o 0.{1-9}
|
|
||||||
|
|
||||||
# cancel the preselection for the focused node
|
|
||||||
super + ctrl + space
|
|
||||||
bspc node -p cancel
|
|
||||||
|
|
||||||
# cancel the preselection for the focused desktop
|
|
||||||
super + ctrl + shift + space
|
|
||||||
bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
|
|
||||||
|
|
||||||
#
|
|
||||||
# move/resize
|
|
||||||
#
|
|
||||||
|
|
||||||
# expand a window by moving one of its side outward
|
|
||||||
super + alt + {h,j,k,l}
|
|
||||||
bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
|
|
||||||
|
|
||||||
# contract a window by moving one of its side inward
|
|
||||||
super + alt + shift + {h,j,k,l}
|
|
||||||
bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}
|
|
||||||
|
|
||||||
# move a floating window
|
|
||||||
super + {Left,Down,Up,Right}
|
|
||||||
bspc node -v {-20 0,0 20,0 -20,20 0}
|
|
||||||
|
|
||||||
#
|
|
||||||
# balance, equlize, rotate, and splitting ratio
|
|
||||||
#
|
|
||||||
|
|
||||||
# balance whole desktop or selected subtree
|
|
||||||
super + shift + b
|
|
||||||
if bspc query -N -n 'focused.leaf'; then bspc node @/ -B; else bspc node -B; fi
|
|
||||||
|
|
||||||
# equlize whole desktop or selected subtree
|
|
||||||
super + shift + e
|
|
||||||
if bspc query -N -n 'focused.leaf'; then bspc node @/ -E; else bspc node -E; fi
|
|
||||||
|
|
||||||
# rotate whole desktop or selected subtree
|
|
||||||
super + {_, ctrl + , shift + }r
|
|
||||||
A={90,180,270}; if bspc query -N -n 'focused.leaf'; then bspc node @/ -R $A; else bspc node -R $A; fi
|
|
||||||
|
|
||||||
# splitting ratio
|
|
||||||
super + alt + {1-9}
|
|
||||||
R={1-9}; if bspc query -N -n 'focused.leaf'; then bspc node @/ -r 0.$R; else bspc node -r 0.$R; fi
|
|
@ -1,63 +1,53 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
echo '# qtile:'
|
REQUIRED="$1"
|
||||||
for CMD in \
|
|
||||||
alacritty \
|
|
||||||
qtile \
|
|
||||||
emacsclient \
|
|
||||||
setxkbmap \
|
|
||||||
slock \
|
|
||||||
systemctl \
|
|
||||||
xmodmap \
|
|
||||||
xrandr \
|
|
||||||
xrdb \
|
|
||||||
xsetroot \
|
|
||||||
xsettingsd \
|
|
||||||
rofi; do
|
|
||||||
which "$CMD"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo -e '\n# bspwm:'
|
check_dependency() {
|
||||||
for CMD in \
|
local CMD="$1"
|
||||||
alacritty \
|
shift
|
||||||
bspc \
|
for REQ in "$@"; do
|
||||||
bspwm \
|
if [ "$REQ" = "$REQUIRED" ]; then
|
||||||
dmenu \
|
which "$CMD"
|
||||||
dmenu_run \
|
break
|
||||||
emacsclient \
|
fi
|
||||||
pkill \
|
done
|
||||||
polybar \
|
}
|
||||||
polybar-msg \
|
|
||||||
sed \
|
|
||||||
setxkbmap \
|
|
||||||
slock \
|
|
||||||
sxhkd \
|
|
||||||
systemctl \
|
|
||||||
xargs \
|
|
||||||
xdo \
|
|
||||||
xmodmap \
|
|
||||||
xrandr \
|
|
||||||
xrdb \
|
|
||||||
xsetroot \
|
|
||||||
xsettingsd \
|
|
||||||
xtitle \
|
|
||||||
xss-lock; do
|
|
||||||
which "$CMD"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo -e '\n# bspwm (optional):'
|
echo '# required:'
|
||||||
for CMD in \
|
|
||||||
firefox \
|
|
||||||
mpc \
|
|
||||||
mpd \
|
|
||||||
pamixer \
|
|
||||||
sx \
|
|
||||||
thunderbird \
|
|
||||||
xbacklight; do
|
|
||||||
which "$CMD"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo -e '\n# shell:'
|
check_dependency zsh dwm hypr
|
||||||
for CMD in emacsclient zsh; do
|
check_dependency git dwm hypr
|
||||||
which "$CMD"
|
check_dependency cc dwm
|
||||||
done
|
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:'
|
||||||
|
|
||||||
|
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
|
||||||
|
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;
|
||||||
|
}
|
@ -1,189 +0,0 @@
|
|||||||
# i3 config file (v4)
|
|
||||||
#
|
|
||||||
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
|
|
||||||
|
|
||||||
set $mod Mod4
|
|
||||||
|
|
||||||
# Font for window titles. Will also be used by the bar unless a different font
|
|
||||||
# is used in the bar {} block below.
|
|
||||||
font pango:Iosevka 30px
|
|
||||||
set $dmenu_font "Iosevka:pixelsize=30"
|
|
||||||
set $dmenu_colors -nb '#1a343a' -nf '#a0a0a0' -sb '#3585ce' -sf '#e0e0e0'
|
|
||||||
|
|
||||||
# Use pactl to adjust volume in PulseAudio.
|
|
||||||
set $refresh_i3status killall -SIGUSR1 i3status
|
|
||||||
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
|
|
||||||
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
|
||||||
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
|
||||||
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
|
|
||||||
bindsym XF86MonBrightnessDown exec --no-startup-id xbacklight -dec 3
|
|
||||||
bindsym XF86MonBrightnessUp exec --no-startup-id xbacklight -inc 3
|
|
||||||
|
|
||||||
# Use Mouse+$mod to drag floating windows to their wanted position
|
|
||||||
floating_modifier $mod
|
|
||||||
|
|
||||||
# start a terminal
|
|
||||||
bindsym $mod+Shift+Return exec alacritty
|
|
||||||
|
|
||||||
# start new Emacs frame
|
|
||||||
bindsym $mod+e exec "emacsclient -n -c"
|
|
||||||
|
|
||||||
# kill focused window
|
|
||||||
bindsym $mod+Shift+q kill
|
|
||||||
|
|
||||||
# start dmenu (a program launcher)
|
|
||||||
bindsym $mod+p exec dmenu_run -fn $dmenu_font $dmenu_colors
|
|
||||||
|
|
||||||
# change focus
|
|
||||||
bindsym $mod+h focus left
|
|
||||||
bindsym $mod+j focus down
|
|
||||||
bindsym $mod+k focus up
|
|
||||||
bindsym $mod+l focus right
|
|
||||||
|
|
||||||
# alternatively, you can use the cursor keys:
|
|
||||||
bindsym $mod+Left focus left
|
|
||||||
bindsym $mod+Down focus down
|
|
||||||
bindsym $mod+Up focus up
|
|
||||||
bindsym $mod+Right focus right
|
|
||||||
|
|
||||||
# move focused window
|
|
||||||
bindsym $mod+Shift+h move left
|
|
||||||
bindsym $mod+Shift+j move down
|
|
||||||
bindsym $mod+Shift+k move up
|
|
||||||
bindsym $mod+Shift+l move right
|
|
||||||
|
|
||||||
# alternatively, you can use the cursor keys:
|
|
||||||
bindsym $mod+Shift+Left move left
|
|
||||||
bindsym $mod+Shift+Down move down
|
|
||||||
bindsym $mod+Shift+Up move up
|
|
||||||
bindsym $mod+Shift+Right move right
|
|
||||||
|
|
||||||
# split in horizontal orientation
|
|
||||||
bindsym $mod+Ctrl+h split h
|
|
||||||
|
|
||||||
# split in vertical orientation
|
|
||||||
bindsym $mod+Ctrl+v split v
|
|
||||||
|
|
||||||
# enter fullscreen mode for the focused container
|
|
||||||
bindsym $mod+f fullscreen toggle
|
|
||||||
|
|
||||||
# change container layout (stacked, tabbed, toggle split)
|
|
||||||
bindsym $mod+Ctrl+s layout stacking
|
|
||||||
bindsym $mod+Ctrl+w layout tabbed
|
|
||||||
bindsym $mod+Ctrl+e layout toggle split
|
|
||||||
|
|
||||||
# toggle tiling / floating
|
|
||||||
bindsym $mod+Shift+space floating toggle
|
|
||||||
|
|
||||||
# change focus between tiling / floating windows
|
|
||||||
bindsym $mod+space focus mode_toggle
|
|
||||||
|
|
||||||
# focus the parent container
|
|
||||||
bindsym $mod+Ctrl+a focus parent
|
|
||||||
|
|
||||||
# focus the child container
|
|
||||||
bindsym $mod+Ctrl+d focus child
|
|
||||||
|
|
||||||
# Define names for default workspaces for which we configure key bindings later on.
|
|
||||||
# We use variables to avoid repeating the names in multiple places.
|
|
||||||
set $ws1 "1"
|
|
||||||
set $ws2 "2"
|
|
||||||
set $ws3 "3"
|
|
||||||
set $ws4 "4"
|
|
||||||
set $ws5 "5"
|
|
||||||
set $ws6 "6"
|
|
||||||
set $ws7 "7"
|
|
||||||
set $ws8 "8"
|
|
||||||
set $ws9 "9"
|
|
||||||
set $ws10 "10"
|
|
||||||
|
|
||||||
# switch to workspace
|
|
||||||
bindsym $mod+1 workspace number $ws1
|
|
||||||
bindsym $mod+2 workspace number $ws2
|
|
||||||
bindsym $mod+3 workspace number $ws3
|
|
||||||
bindsym $mod+4 workspace number $ws4
|
|
||||||
bindsym $mod+5 workspace number $ws5
|
|
||||||
bindsym $mod+6 workspace number $ws6
|
|
||||||
bindsym $mod+7 workspace number $ws7
|
|
||||||
bindsym $mod+8 workspace number $ws8
|
|
||||||
bindsym $mod+9 workspace number $ws9
|
|
||||||
bindsym $mod+0 workspace number $ws10
|
|
||||||
bindsym $mod+Tab workspace back_and_forth
|
|
||||||
|
|
||||||
# move focused container to workspace
|
|
||||||
bindsym $mod+Shift+1 move container to workspace number $ws1
|
|
||||||
bindsym $mod+Shift+2 move container to workspace number $ws2
|
|
||||||
bindsym $mod+Shift+3 move container to workspace number $ws3
|
|
||||||
bindsym $mod+Shift+4 move container to workspace number $ws4
|
|
||||||
bindsym $mod+Shift+5 move container to workspace number $ws5
|
|
||||||
bindsym $mod+Shift+6 move container to workspace number $ws6
|
|
||||||
bindsym $mod+Shift+7 move container to workspace number $ws7
|
|
||||||
bindsym $mod+Shift+8 move container to workspace number $ws8
|
|
||||||
bindsym $mod+Shift+9 move container to workspace number $ws9
|
|
||||||
bindsym $mod+Shift+0 move container to workspace number $ws10
|
|
||||||
bindsym $mod+Shift+Tab move container to workspace back_and_forth
|
|
||||||
|
|
||||||
# reload the configuration file
|
|
||||||
bindsym $mod+Ctrl+c reload
|
|
||||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
|
||||||
bindsym $mod+Ctrl+r restart
|
|
||||||
# exit i3 (logs you out of your X session)
|
|
||||||
bindsym $mod+Ctrl+End exec "i3-nagbar -t warning -m 'Exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
|
|
||||||
|
|
||||||
# resize window (you can also use the mouse for that)
|
|
||||||
mode "resize" {
|
|
||||||
# These bindings trigger as soon as you enter the resize mode
|
|
||||||
|
|
||||||
# Pressing left will shrink the window’s width.
|
|
||||||
# Pressing right will grow the window’s width.
|
|
||||||
# Pressing up will shrink the window’s height.
|
|
||||||
# Pressing down will grow the window’s height.
|
|
||||||
bindsym h resize shrink width 10 px or 2 ppt
|
|
||||||
bindsym j resize grow height 10 px or 2 ppt
|
|
||||||
bindsym k resize shrink height 10 px or 2 ppt
|
|
||||||
bindsym l resize grow width 10 px or 2 ppt
|
|
||||||
|
|
||||||
# same bindings, but for the arrow keys
|
|
||||||
bindsym Left resize shrink width 10 px or 2 ppt
|
|
||||||
bindsym Down resize grow height 10 px or 2 ppt
|
|
||||||
bindsym Up resize shrink height 10 px or 2 ppt
|
|
||||||
bindsym Right resize grow width 10 px or 2 ppt
|
|
||||||
|
|
||||||
# back to normal: Enter or Escape or $mod+r
|
|
||||||
bindsym Return mode "default"
|
|
||||||
bindsym Escape mode "default"
|
|
||||||
bindsym Ctrl+g mode "default"
|
|
||||||
bindsym $mod+r mode "default"
|
|
||||||
}
|
|
||||||
|
|
||||||
bindsym $mod+r mode "resize"
|
|
||||||
|
|
||||||
set $mode_cmd [c st] [F firefox] [s-h hibernate] [s-l lock] [s-s suspend]
|
|
||||||
|
|
||||||
mode "$mode_cmd" {
|
|
||||||
bindsym c exec st; mode "default"
|
|
||||||
bindsym Shift+f exec "firefox"; mode "default"
|
|
||||||
bindsym --release $mod+h exec "systemctl hibernate"; mode "default"
|
|
||||||
bindsym --release $mod+l exec "slock"; mode "default"
|
|
||||||
bindsym --release $mod+s exec "systemctl suspend"; mode "default"
|
|
||||||
bindsym Escape mode "default"
|
|
||||||
bindsym Ctrl+g mode "default"
|
|
||||||
}
|
|
||||||
|
|
||||||
bindsym $mod+semicolon mode "$mode_cmd"
|
|
||||||
|
|
||||||
client.focused #29a6da #3585ce #e0e0e0 #6c6aef #3585ce
|
|
||||||
client.focused_inactive #333333 #5f676a #e0e0e0 #484e50 #5f676a
|
|
||||||
client.unfocused #333333 #2a5465 #a0a0a0 #292d2e #1a343a
|
|
||||||
|
|
||||||
# Start i3bar to display a workspace bar (plus the system information i3status
|
|
||||||
# finds out, if available)
|
|
||||||
bar {
|
|
||||||
position top
|
|
||||||
status_command i3status
|
|
||||||
colors {
|
|
||||||
background #1a343a
|
|
||||||
inactive_workspace #505050 #1a343a #808080
|
|
||||||
focused_workspace #29a6da #3585ce #e0e0e0
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
general {
|
|
||||||
output_format = "i3bar"
|
|
||||||
}
|
|
||||||
|
|
||||||
order += "volume master"
|
|
||||||
order += "tztime local"
|
|
||||||
|
|
||||||
volume master {
|
|
||||||
format = " ♪: %volume "
|
|
||||||
format_muted = " ♪: muted (%volume) "
|
|
||||||
device = "pulse:0"
|
|
||||||
}
|
|
||||||
|
|
||||||
tztime local {
|
|
||||||
format = " %H:%M "
|
|
||||||
}
|
|
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
|
@ -1,2 +1,8 @@
|
|||||||
|
PREFIX = /usr/local
|
||||||
|
|
||||||
lupan-clock: lupan-clock.c
|
lupan-clock: lupan-clock.c
|
||||||
${CC} -o $@ $< -lX11 -Wall
|
${CC} -o $@ $< -lX11 -Wall
|
||||||
|
|
||||||
|
install:
|
||||||
|
mkdir -p ${DESTDIR}${PREFIX}/bin
|
||||||
|
cp -f lupan-clock ${DESTDIR}${PREFIX}/bin
|
||||||
|
794
lupan-wm/Cargo.lock
generated
794
lupan-wm/Cargo.lock
generated
@ -1,794 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 3
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "anyhow"
|
|
||||||
version = "1.0.52"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "84450d0b4a8bd1ba4144ce8ce718fbc5d071358b1e5384bace6536b3d1f2d5b3"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "atty"
|
|
||||||
version = "0.2.14"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
|
||||||
dependencies = [
|
|
||||||
"hermit-abi",
|
|
||||||
"libc",
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "autocfg"
|
|
||||||
version = "1.0.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bitflags"
|
|
||||||
version = "1.3.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cairo-rs"
|
|
||||||
version = "0.9.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c5c0f2e047e8ca53d0ff249c54ae047931d7a6ebe05d00af73e0ffeb6e34bdb8"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
"cairo-sys-rs",
|
|
||||||
"glib",
|
|
||||||
"glib-sys",
|
|
||||||
"gobject-sys",
|
|
||||||
"libc",
|
|
||||||
"thiserror",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cairo-sys-rs"
|
|
||||||
version = "0.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2ed2639b9ad5f1d6efa76de95558e11339e7318426d84ac4890b86c03e828ca7"
|
|
||||||
dependencies = [
|
|
||||||
"glib-sys",
|
|
||||||
"libc",
|
|
||||||
"system-deps",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cc"
|
|
||||||
version = "1.0.72"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cfg-if"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "chrono"
|
|
||||||
version = "0.4.19"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"num-integer",
|
|
||||||
"num-traits",
|
|
||||||
"time",
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap"
|
|
||||||
version = "3.0.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f6f34b09b9ee8c7c7b400fe2f8df39cafc9538b03d6ba7f4ae13e4cb90bfbb7d"
|
|
||||||
dependencies = [
|
|
||||||
"atty",
|
|
||||||
"bitflags",
|
|
||||||
"clap_derive",
|
|
||||||
"indexmap",
|
|
||||||
"lazy_static",
|
|
||||||
"os_str_bytes",
|
|
||||||
"strsim",
|
|
||||||
"termcolor",
|
|
||||||
"textwrap",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap_derive"
|
|
||||||
version = "3.0.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "41a0645a430ec9136d2d701e54a95d557de12649a9dd7109ced3187e648ac824"
|
|
||||||
dependencies = [
|
|
||||||
"heck 0.4.0",
|
|
||||||
"proc-macro-error",
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "either"
|
|
||||||
version = "1.6.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "futures-channel"
|
|
||||||
version = "0.3.19"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b"
|
|
||||||
dependencies = [
|
|
||||||
"futures-core",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "futures-core"
|
|
||||||
version = "0.3.19"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "futures-executor"
|
|
||||||
version = "0.3.19"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "29d6d2ff5bb10fb95c85b8ce46538a2e5f5e7fdc755623a7d4529ab8a4ed9d2a"
|
|
||||||
dependencies = [
|
|
||||||
"futures-core",
|
|
||||||
"futures-task",
|
|
||||||
"futures-util",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "futures-macro"
|
|
||||||
version = "0.3.19"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "futures-task"
|
|
||||||
version = "0.3.19"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "futures-util"
|
|
||||||
version = "0.3.19"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164"
|
|
||||||
dependencies = [
|
|
||||||
"futures-core",
|
|
||||||
"futures-macro",
|
|
||||||
"futures-task",
|
|
||||||
"pin-project-lite",
|
|
||||||
"pin-utils",
|
|
||||||
"slab",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "glib"
|
|
||||||
version = "0.10.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0c685013b7515e668f1b57a165b009d4d28cb139a8a989bbd699c10dad29d0c5"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
"futures-channel",
|
|
||||||
"futures-core",
|
|
||||||
"futures-executor",
|
|
||||||
"futures-task",
|
|
||||||
"futures-util",
|
|
||||||
"glib-macros",
|
|
||||||
"glib-sys",
|
|
||||||
"gobject-sys",
|
|
||||||
"libc",
|
|
||||||
"once_cell",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "glib-macros"
|
|
||||||
version = "0.10.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "41486a26d1366a8032b160b59065a59fb528530a46a49f627e7048fb8c064039"
|
|
||||||
dependencies = [
|
|
||||||
"anyhow",
|
|
||||||
"heck 0.3.3",
|
|
||||||
"itertools",
|
|
||||||
"proc-macro-crate",
|
|
||||||
"proc-macro-error",
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "glib-sys"
|
|
||||||
version = "0.10.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c7e9b997a66e9a23d073f2b1abb4dbfc3925e0b8952f67efd8d9b6e168e4cdc1"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"system-deps",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "gobject-sys"
|
|
||||||
version = "0.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "952133b60c318a62bf82ee75b93acc7e84028a093e06b9e27981c2b6fe68218c"
|
|
||||||
dependencies = [
|
|
||||||
"glib-sys",
|
|
||||||
"libc",
|
|
||||||
"system-deps",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hashbrown"
|
|
||||||
version = "0.11.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "heck"
|
|
||||||
version = "0.3.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
|
|
||||||
dependencies = [
|
|
||||||
"unicode-segmentation",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "heck"
|
|
||||||
version = "0.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hermit-abi"
|
|
||||||
version = "0.1.19"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "indexmap"
|
|
||||||
version = "1.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
"hashbrown",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "itertools"
|
|
||||||
version = "0.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
|
|
||||||
dependencies = [
|
|
||||||
"either",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lazy_static"
|
|
||||||
version = "1.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libc"
|
|
||||||
version = "0.2.112"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "log"
|
|
||||||
version = "0.4.14"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lupan-wm"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"clap",
|
|
||||||
"penrose",
|
|
||||||
"simplelog",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "memchr"
|
|
||||||
version = "2.4.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "nix"
|
|
||||||
version = "0.20.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
"cc",
|
|
||||||
"cfg-if",
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num-integer"
|
|
||||||
version = "0.1.44"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
"num-traits",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num-traits"
|
|
||||||
version = "0.2.14"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "once_cell"
|
|
||||||
version = "1.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "os_str_bytes"
|
|
||||||
version = "6.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
|
|
||||||
dependencies = [
|
|
||||||
"memchr",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pango"
|
|
||||||
version = "0.9.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9937068580bebd8ced19975938573803273ccbcbd598c58d4906efd4ac87c438"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
"glib",
|
|
||||||
"glib-sys",
|
|
||||||
"gobject-sys",
|
|
||||||
"libc",
|
|
||||||
"once_cell",
|
|
||||||
"pango-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pango-sys"
|
|
||||||
version = "0.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "24d2650c8b62d116c020abd0cea26a4ed96526afda89b1c4ea567131fdefc890"
|
|
||||||
dependencies = [
|
|
||||||
"glib-sys",
|
|
||||||
"gobject-sys",
|
|
||||||
"libc",
|
|
||||||
"system-deps",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pangocairo"
|
|
||||||
version = "0.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "00f5ae67a05a5e023f09f64e9a71c845274d4b82dedee237b70425811885e883"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
"cairo-rs",
|
|
||||||
"cairo-sys-rs",
|
|
||||||
"glib",
|
|
||||||
"glib-sys",
|
|
||||||
"gobject-sys",
|
|
||||||
"libc",
|
|
||||||
"pango",
|
|
||||||
"pango-sys",
|
|
||||||
"pangocairo-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pangocairo-sys"
|
|
||||||
version = "0.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "94ccc97f698c2f0233b84e5ca676893a1e676785b60eec700b9c0e6dcd0feb98"
|
|
||||||
dependencies = [
|
|
||||||
"cairo-sys-rs",
|
|
||||||
"glib-sys",
|
|
||||||
"libc",
|
|
||||||
"pango-sys",
|
|
||||||
"system-deps",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "penrose"
|
|
||||||
version = "0.2.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c99eba539000844e97310340f43654453286c81da95639436d9a41f738fdab06"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
"cairo-rs",
|
|
||||||
"cairo-sys-rs",
|
|
||||||
"nix",
|
|
||||||
"pango",
|
|
||||||
"pangocairo",
|
|
||||||
"penrose_keysyms",
|
|
||||||
"penrose_proc",
|
|
||||||
"strum 0.20.0",
|
|
||||||
"strum_macros 0.20.1",
|
|
||||||
"thiserror",
|
|
||||||
"tracing",
|
|
||||||
"xcb",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "penrose_keysyms"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7a574df0fe3d7e0bb1fd297dd722d8aea8ea33a734d862451509814062bec2d6"
|
|
||||||
dependencies = [
|
|
||||||
"strum 0.20.0",
|
|
||||||
"strum_macros 0.20.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "penrose_proc"
|
|
||||||
version = "0.1.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4a4e9438e0d3ed63bbd08fd0838bb35d94ef298f6705144b27608a5a22f1ebb9"
|
|
||||||
dependencies = [
|
|
||||||
"penrose_keysyms",
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"rustversion",
|
|
||||||
"strum 0.20.0",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pin-project-lite"
|
|
||||||
version = "0.2.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pin-utils"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pkg-config"
|
|
||||||
version = "0.3.24"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "proc-macro-crate"
|
|
||||||
version = "0.1.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
|
|
||||||
dependencies = [
|
|
||||||
"toml",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "proc-macro-error"
|
|
||||||
version = "1.0.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro-error-attr",
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
"version_check",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "proc-macro-error-attr"
|
|
||||||
version = "1.0.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"version_check",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "proc-macro2"
|
|
||||||
version = "1.0.35"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "392a54546fda6b7cc663379d0e6ce8b324cf88aecc5a499838e1be9781bdce2e"
|
|
||||||
dependencies = [
|
|
||||||
"unicode-xid",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "quote"
|
|
||||||
version = "1.0.10"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rustversion"
|
|
||||||
version = "1.0.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serde"
|
|
||||||
version = "1.0.132"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8b9875c23cf305cd1fd7eb77234cbb705f21ea6a72c637a5c6db5fe4b8e7f008"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "simplelog"
|
|
||||||
version = "0.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2b2736f58087298a448859961d3f4a0850b832e72619d75adc69da7993c2cd3c"
|
|
||||||
dependencies = [
|
|
||||||
"chrono",
|
|
||||||
"log",
|
|
||||||
"termcolor",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "slab"
|
|
||||||
version = "0.4.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "strsim"
|
|
||||||
version = "0.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "strum"
|
|
||||||
version = "0.18.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "strum"
|
|
||||||
version = "0.20.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7318c509b5ba57f18533982607f24070a55d353e90d4cae30c467cdb2ad5ac5c"
|
|
||||||
dependencies = [
|
|
||||||
"strum_macros 0.20.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "strum_macros"
|
|
||||||
version = "0.18.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c"
|
|
||||||
dependencies = [
|
|
||||||
"heck 0.3.3",
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "strum_macros"
|
|
||||||
version = "0.20.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149"
|
|
||||||
dependencies = [
|
|
||||||
"heck 0.3.3",
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "syn"
|
|
||||||
version = "1.0.84"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ecb2e6da8ee5eb9a61068762a32fa9619cc591ceb055b3687f4cd4051ec2e06b"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"unicode-xid",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "system-deps"
|
|
||||||
version = "1.3.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0f3ecc17269a19353b3558b313bba738b25d82993e30d62a18406a24aba4649b"
|
|
||||||
dependencies = [
|
|
||||||
"heck 0.3.3",
|
|
||||||
"pkg-config",
|
|
||||||
"strum 0.18.0",
|
|
||||||
"strum_macros 0.18.0",
|
|
||||||
"thiserror",
|
|
||||||
"toml",
|
|
||||||
"version-compare",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "termcolor"
|
|
||||||
version = "1.1.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
|
|
||||||
dependencies = [
|
|
||||||
"winapi-util",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "textwrap"
|
|
||||||
version = "0.14.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "thiserror"
|
|
||||||
version = "1.0.30"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
|
|
||||||
dependencies = [
|
|
||||||
"thiserror-impl",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "thiserror-impl"
|
|
||||||
version = "1.0.30"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "time"
|
|
||||||
version = "0.1.44"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"wasi",
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "toml"
|
|
||||||
version = "0.5.8"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
|
|
||||||
dependencies = [
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tracing"
|
|
||||||
version = "0.1.29"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"log",
|
|
||||||
"pin-project-lite",
|
|
||||||
"tracing-attributes",
|
|
||||||
"tracing-core",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tracing-attributes"
|
|
||||||
version = "0.1.18"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tracing-core"
|
|
||||||
version = "0.1.21"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4"
|
|
||||||
dependencies = [
|
|
||||||
"lazy_static",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "unicode-segmentation"
|
|
||||||
version = "1.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "unicode-xid"
|
|
||||||
version = "0.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "version-compare"
|
|
||||||
version = "0.0.10"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "version_check"
|
|
||||||
version = "0.9.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasi"
|
|
||||||
version = "0.10.0+wasi-snapshot-preview1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winapi"
|
|
||||||
version = "0.3.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
|
||||||
dependencies = [
|
|
||||||
"winapi-i686-pc-windows-gnu",
|
|
||||||
"winapi-x86_64-pc-windows-gnu",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winapi-i686-pc-windows-gnu"
|
|
||||||
version = "0.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winapi-util"
|
|
||||||
version = "0.1.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
|
|
||||||
dependencies = [
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winapi-x86_64-pc-windows-gnu"
|
|
||||||
version = "0.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "xcb"
|
|
||||||
version = "0.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "62056f63138b39116f82a540c983cc11f1c90cd70b3d492a70c25eaa50bd22a6"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"log",
|
|
||||||
]
|
|
@ -1,9 +0,0 @@
|
|||||||
[package]
|
|
||||||
name = "lupan-wm"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2018"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
clap = { version = "3.0.5", features = ["derive"] }
|
|
||||||
penrose = "0.2.1"
|
|
||||||
simplelog = "0.8"
|
|
@ -1,172 +0,0 @@
|
|||||||
#[macro_use]
|
|
||||||
extern crate penrose;
|
|
||||||
|
|
||||||
use clap::Parser;
|
|
||||||
|
|
||||||
use penrose::{
|
|
||||||
contrib::{hooks::ManageExistingClients},
|
|
||||||
core::{
|
|
||||||
bindings::{KeyEventHandler, MouseEvent}, config::Config, helpers::index_selectors, manager::WindowManager,
|
|
||||||
hooks::Hooks,
|
|
||||||
layout::{bottom_stack, side_stack, Layout, LayoutConf},
|
|
||||||
},
|
|
||||||
draw::{bar::dwm_bar, Color, TextStyle},
|
|
||||||
logging_error_handler,
|
|
||||||
xcb::{new_xcb_backed_window_manager, XcbDraw, XcbConnection},
|
|
||||||
Backward, Forward, Less, More, Result, Selector
|
|
||||||
};
|
|
||||||
|
|
||||||
use std::convert::{TryFrom, TryInto};
|
|
||||||
|
|
||||||
pub type Conn = XcbConnection;
|
|
||||||
|
|
||||||
const TERMINAL: &str = "st tmux";
|
|
||||||
const TERMINAL2: &str = "st";
|
|
||||||
const EDITOR: &str = "emacsclient -c -n";
|
|
||||||
const MIXER: &str = "pavucontrol";
|
|
||||||
const SUSPEND: &str = "systemctl suspend";
|
|
||||||
const LOCK: &str = "slock";
|
|
||||||
const SET_THEME: &str = "lupan-set-theme";
|
|
||||||
|
|
||||||
const FONT: &str = "Iosevka Slab Light";
|
|
||||||
const FONT_SIZE: i32 = 20;
|
|
||||||
const BAR_BG: &str = "#0c4a6e";
|
|
||||||
const BAR_FG: &str = "#7dd3fc";
|
|
||||||
const BAR_HIGHLIGHT: &str = "#0369a1";
|
|
||||||
const BAR_EMPTY: &str = "#94a3b8";
|
|
||||||
const FOCUSED_BORDER: &str = "#d97706";
|
|
||||||
const UNFOCUSED_BORDER: &str = "#64748b";
|
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
|
||||||
#[clap(about, version, author)]
|
|
||||||
struct Args {
|
|
||||||
/// Font name
|
|
||||||
#[clap(short, long, default_value_t = FONT.to_string())]
|
|
||||||
font: String,
|
|
||||||
|
|
||||||
/// Font size
|
|
||||||
#[clap(short = 's', long, default_value_t = FONT_SIZE)]
|
|
||||||
font_size: i32,
|
|
||||||
}
|
|
||||||
|
|
||||||
macro_rules! rofi {
|
|
||||||
($theme_str:tt, $show:tt) => {
|
|
||||||
Box::new(move |_: &mut WindowManager<_>| {
|
|
||||||
spawn!("rofi", "-theme", "Pop-Dark", "-theme-str", $theme_str,
|
|
||||||
"-kb-row-select", "Tab", "-kb-row-tab", "Alt-Tab", "-show", $show)
|
|
||||||
}) as KeyEventHandler<_>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(unused_parens)]
|
|
||||||
fn main() -> Result<()> {
|
|
||||||
let n_main = 1;
|
|
||||||
let ratio = 0.6;
|
|
||||||
let args = Args::parse();
|
|
||||||
let rofi_theme_str = format!("* {{ text-color: {}; background-color: {}; blue: {}; font: \"{} {}\"; }}",
|
|
||||||
BAR_FG, BAR_BG, BAR_HIGHLIGHT, args.font, args.font_size);
|
|
||||||
let mut theme = "dark";
|
|
||||||
let config = Config::default()
|
|
||||||
.builder()
|
|
||||||
.workspaces(vec!["1", "2", "3", "4", "5", "6", "7", "8", "9"])
|
|
||||||
.bar_height((2 * args.font_size).try_into().unwrap())
|
|
||||||
.border_px(4)
|
|
||||||
.focused_border(FOCUSED_BORDER)?
|
|
||||||
.unfocused_border(UNFOCUSED_BORDER)?
|
|
||||||
.layouts(vec![
|
|
||||||
Layout::new("[side]", LayoutConf::default(), side_stack, n_main, ratio),
|
|
||||||
Layout::new("[botm]", LayoutConf::default(), bottom_stack, n_main, ratio),
|
|
||||||
])
|
|
||||||
.build()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let key_bindings = gen_keybindings! {
|
|
||||||
// Program launchers
|
|
||||||
"M-Return" => run_external!(TERMINAL);
|
|
||||||
"M-S-Return" => run_external!(TERMINAL2);
|
|
||||||
"M-space" => { let s = rofi_theme_str.clone(); rofi!((&s), "run") };
|
|
||||||
"M-S-space" => { let s = rofi_theme_str.clone(); rofi!((&s), "window") };
|
|
||||||
"M-C-space" => { let s = rofi_theme_str.clone(); rofi!((&s), "ssh") };
|
|
||||||
"M-e" => run_external!(EDITOR);
|
|
||||||
"M-p" => run_external!(MIXER);
|
|
||||||
"M-S-s" => run_external!(SUSPEND);
|
|
||||||
"M-C-s" => run_external!(LOCK);
|
|
||||||
|
|
||||||
// Switch theme
|
|
||||||
"M-S-F6" => Box::new(move |_: &mut WindowManager<_>| {
|
|
||||||
theme = if theme == "dark" { "light" } else { "dark" };
|
|
||||||
spawn!(SET_THEME, theme)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Exit Penrose (important to remember this one!)
|
|
||||||
"M-A-C-Escape" => run_internal!(exit);
|
|
||||||
|
|
||||||
// Client management
|
|
||||||
"M-j" => run_internal!(cycle_client, Forward);
|
|
||||||
"M-k" => run_internal!(cycle_client, Backward);
|
|
||||||
"M-S-j" => run_internal!(drag_client, Forward);
|
|
||||||
"M-A-j" => run_internal!(rotate_clients, Forward);
|
|
||||||
"M-A-k" => run_internal!(rotate_clients, Backward);
|
|
||||||
"M-S-k" => run_internal!(drag_client, Backward);
|
|
||||||
"M-S-f" => run_internal!(toggle_client_fullscreen, &Selector::Focused);
|
|
||||||
"M-S-q" => run_internal!(kill_client);
|
|
||||||
|
|
||||||
// Workspace management
|
|
||||||
"M-Tab" => run_internal!(toggle_workspace);
|
|
||||||
"M-period" => run_internal!(cycle_screen, Forward);
|
|
||||||
"M-comma" => run_internal!(cycle_screen, Backward);
|
|
||||||
"M-S-period" => run_internal!(drag_workspace, Forward);
|
|
||||||
"M-S-comma" => run_internal!(drag_workspace, Backward);
|
|
||||||
"M-A-period" => run_internal!(cycle_workspace, Forward);
|
|
||||||
"M-A-comma" => run_internal!(cycle_workspace, Backward);
|
|
||||||
|
|
||||||
// Layout management
|
|
||||||
"M-m" => run_internal!(cycle_layout, Forward);
|
|
||||||
"M-S-m" => run_internal!(cycle_layout, Backward);
|
|
||||||
"M-A-Up" => run_internal!(update_max_main, More);
|
|
||||||
"M-A-Down" => run_internal!(update_max_main, Less);
|
|
||||||
"M-A-Right" => run_internal!(update_main_ratio, More);
|
|
||||||
"M-A-Left" => run_internal!(update_main_ratio, Less);
|
|
||||||
"M-S-h" => run_internal!(update_max_main, More);
|
|
||||||
"M-S-l" => run_internal!(update_max_main, Less);
|
|
||||||
"M-l" => run_internal!(update_main_ratio, More);
|
|
||||||
"M-h" => run_internal!(update_main_ratio, Less);
|
|
||||||
|
|
||||||
map: { "1", "2", "3", "4", "5", "6", "7", "8", "9" } to index_selectors(9) => {
|
|
||||||
"M-{}" => focus_workspace (REF);
|
|
||||||
"M-S-{}" => client_to_workspace (REF);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
let mouse_bindings = gen_mousebindings! {
|
|
||||||
Press Right + [Meta] => |wm: &mut WindowManager<_>, _: &MouseEvent| wm.cycle_workspace(Forward),
|
|
||||||
Press Left + [Meta] => |wm: &mut WindowManager<_>, _: &MouseEvent| wm.cycle_workspace(Backward),
|
|
||||||
Press Middle + [Meta] => |wm: &mut WindowManager<_>, _: &MouseEvent| wm.toggle_workspace(),
|
|
||||||
Press Left + [Alt] => |_wm: &mut WindowManager<_>, _: &MouseEvent| penrose::core::helpers::spawn(TERMINAL)
|
|
||||||
};
|
|
||||||
|
|
||||||
let bar = dwm_bar(
|
|
||||||
XcbDraw::new()?,
|
|
||||||
(2 * args.font_size).try_into().unwrap(),
|
|
||||||
&TextStyle {
|
|
||||||
font: args.font,
|
|
||||||
point_size: args.font_size,
|
|
||||||
fg: Color::try_from(BAR_FG)?,
|
|
||||||
bg: Some(Color::try_from(BAR_BG)?),
|
|
||||||
padding: (12.0, 12.0),
|
|
||||||
},
|
|
||||||
Color::try_from(BAR_HIGHLIGHT)?, // highlight
|
|
||||||
Color::try_from(BAR_EMPTY)?, // empty_ws
|
|
||||||
config.workspaces().clone(),
|
|
||||||
)?;
|
|
||||||
|
|
||||||
let hooks: Hooks<Conn> = vec![
|
|
||||||
ManageExistingClients::new(),
|
|
||||||
Box::new(bar),
|
|
||||||
];
|
|
||||||
|
|
||||||
let mut wm = new_xcb_backed_window_manager(config, hooks, logging_error_handler())?;
|
|
||||||
wm.grab_keys_and_run(key_bindings, mouse_bindings)?;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
1
nvim/.config/nvim/init.lua
Normal file
1
nvim/.config/nvim/init.lua
Normal file
@ -0,0 +1 @@
|
|||||||
|
require("lupan")
|
75
nvim/.config/nvim/lazy-lock.json
Normal file
75
nvim/.config/nvim/lazy-lock.json
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
{
|
||||||
|
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
||||||
|
"LuaSnip": { "branch": "master", "commit": "faf3c94a44508cec1b961406d36cc65113ff3b98" },
|
||||||
|
"arrow.nvim": { "branch": "master", "commit": "6e0f726f55f99332dd726a53effd6813786b6d49" },
|
||||||
|
"blame.nvim": { "branch": "main", "commit": "b87b8c820e4cec06fbbd2f946b7b35c45906ee0c" },
|
||||||
|
"ccc.nvim": { "branch": "main", "commit": "9d1a256e006decc574789dfc7d628ca11644d4c2" },
|
||||||
|
"cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" },
|
||||||
|
"cmp-path": { "branch": "main", "commit": "c6635aae33a50d6010bf1aa756ac2398a2d54c32" },
|
||||||
|
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
||||||
|
"conform.nvim": { "branch": "master", "commit": "f643d1b51d1d3d14c8641a46ce44f6bce73c2697" },
|
||||||
|
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
|
||||||
|
"fidget.nvim": { "branch": "main", "commit": "d9ba6b7bfe29b3119a610892af67602641da778e" },
|
||||||
|
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
|
||||||
|
"gitsigns.nvim": { "branch": "main", "commit": "d0f90ef51d4be86b824b012ec52ed715b5622e51" },
|
||||||
|
"global-note.nvim": { "branch": "main", "commit": "1e0d4bba425d971ed3ce40d182c574a25507115c" },
|
||||||
|
"go.nvim": { "branch": "master", "commit": "a3455f48cff718a86275115523dcc735535a13aa" },
|
||||||
|
"godoc.nvim": { "branch": "main", "commit": "356f79853dbb3b3e200064367603751895153c29" },
|
||||||
|
"guihua.lua": { "branch": "master", "commit": "87bea7b98429405caf2a0ce4d029b027bb017c70" },
|
||||||
|
"hererocks": { "branch": "master", "commit": "344c46ed54df9a4dbc2d2bf510dcd9a9d90497bf" },
|
||||||
|
"hlsearch.nvim": { "branch": "main", "commit": "fdeb60b890d15d9194e8600042e5232ef8c29b0e" },
|
||||||
|
"incline.nvim": { "branch": "main", "commit": "27040695b3bbfcd3257669037bd008d1a892831d" },
|
||||||
|
"iswap.nvim": { "branch": "master", "commit": "e02cc91f2a8feb5c5a595767d208c54b6e3258ec" },
|
||||||
|
"kanagawa-paper.nvim": { "branch": "master", "commit": "b0df20cca3b7087c06f241983b488190cc8e23af" },
|
||||||
|
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
|
||||||
|
"lazyjj.nvim": { "branch": "main", "commit": "bba66a1351ff1f1bd078c8a1b00b8d12b3ed0017" },
|
||||||
|
"leap.nvim": { "branch": "main", "commit": "08ca7ec9e859856251d56c22ea107f82f563ff3c" },
|
||||||
|
"lsp_signature.nvim": { "branch": "master", "commit": "d50e40b3bf9324128e71b0b7e589765ce89466d2" },
|
||||||
|
"lspsaga.nvim": { "branch": "main", "commit": "920b1253e1a26732e53fac78412f6da7f674671d" },
|
||||||
|
"marks.nvim": { "branch": "master", "commit": "f353e8c08c50f39e99a9ed474172df7eddd89b72" },
|
||||||
|
"mason-lspconfig.nvim": { "branch": "main", "commit": "c2682b0d9732bf52cbc34862056f143e71dc4a6d" },
|
||||||
|
"mason-tool-installer.nvim": { "branch": "main", "commit": "93a9ff9b34c91c0cb0f7de8d5f7e4abce51d8903" },
|
||||||
|
"mason.nvim": { "branch": "main", "commit": "8024d64e1330b86044fed4c8494ef3dcd483a67c" },
|
||||||
|
"namu.nvim": { "branch": "main", "commit": "a3a3d81d12b61a38f131253bcd3ce5e2c6599850" },
|
||||||
|
"neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" },
|
||||||
|
"neogit": { "branch": "master", "commit": "7fe60f9aa6eacf2eb730c4e9b83d06a36d028161" },
|
||||||
|
"nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" },
|
||||||
|
"nvim-lspconfig": { "branch": "master", "commit": "3ea99227e316c5028f57a4d86a1a7fd01dd876d0" },
|
||||||
|
"nvim-surround": { "branch": "main", "commit": "8dd9150ca7eae5683660ea20cec86edcd5ca4046" },
|
||||||
|
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
||||||
|
"nvim-treesitter-textobjects": { "branch": "master", "commit": "0f051e9813a36481f48ca1f833897210dbcfffde" },
|
||||||
|
"nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" },
|
||||||
|
"oil.nvim": { "branch": "master", "commit": "5b6068aad7d2057dd399fac73b7fb2cdf23ccd6e" },
|
||||||
|
"orgmode": { "branch": "master", "commit": "32ef9e95f43a6e951fb931b438372546a4f0c524" },
|
||||||
|
"persisted.nvim": { "branch": "main", "commit": "d35a3ed973e17defd8800acd46a0c893498a2671" },
|
||||||
|
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
|
||||||
|
"quicker.nvim": { "branch": "master", "commit": "51d3926f183c2d98fbc237cc237ae0926839af3a" },
|
||||||
|
"rest.nvim": { "branch": "main", "commit": "2ded89dbda1fd3c1430685ffadf2df8beb28336d" },
|
||||||
|
"slimline.nvim": { "branch": "main", "commit": "10dd807685997d1b72b950dfb4ec1a01cb259101" },
|
||||||
|
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
|
||||||
|
"snipe.nvim": { "branch": "main", "commit": "2a1b738dfae8502e6162eddfc774da65ed404142" },
|
||||||
|
"sqlite.lua": { "branch": "master", "commit": "50092d60feb242602d7578398c6eb53b4a8ffe7b" },
|
||||||
|
"tardis.nvim": { "branch": "main", "commit": "a6ee00a217529490e79d349b1f1a9cf5831180d3" },
|
||||||
|
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
|
||||||
|
"telescope-git-grep.nvim": { "branch": "main", "commit": "d2e1322934e334ee9eb8e838c30f3afb3e7a730e" },
|
||||||
|
"telescope-tabs": { "branch": "master", "commit": "9ca0800d4e9c2610d5cac4d121cde0d9fbd89a64" },
|
||||||
|
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
|
||||||
|
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
|
||||||
|
"tmux.nvim": { "branch": "main", "commit": "2c1c3be0ef287073cef963f2aefa31a15c8b9cd8" },
|
||||||
|
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
|
||||||
|
"tree-sitter-nu": { "branch": "main", "commit": "100d06e29d13a8ebfc3f29173c07a5c4f2050586" },
|
||||||
|
"tree-sitter-templ": { "branch": "master", "commit": "de35706f89beed5087670a9c4421b7794ef02411" },
|
||||||
|
"treesj": { "branch": "main", "commit": "3b4a2bc42738a63de17e7485d4cc5e49970ddbcc" },
|
||||||
|
"treewalker.nvim": { "branch": "main", "commit": "86ae3cf9896b43f3cfa35b962428f32fed8b5ee8" },
|
||||||
|
"trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" },
|
||||||
|
"undotree": { "branch": "master", "commit": "b951b87b46c34356d44aa71886aecf9dd7f5788a" },
|
||||||
|
"vim-ReplaceWithRegister": { "branch": "master", "commit": "a487af6efd1be3fc6fac8da47d00efc9d1f6f724" },
|
||||||
|
"vim-dadbod": { "branch": "master", "commit": "e95afed23712f969f83b4857a24cf9d59114c2e6" },
|
||||||
|
"vim-dadbod-completion": { "branch": "master", "commit": "a8dac0b3cf6132c80dc9b18bef36d4cf7a9e1fe6" },
|
||||||
|
"vim-dadbod-ui": { "branch": "master", "commit": "2900a1617b3df1a48683d872eadbe1101146a49a" },
|
||||||
|
"vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" },
|
||||||
|
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
|
||||||
|
"whaler": { "branch": "main", "commit": "b3a4257f6225a9a6c42f33b56ca316325e395f22" },
|
||||||
|
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" },
|
||||||
|
"yankbank-nvim": { "branch": "main", "commit": "ded8f01bd6a7887310e14d463c8aa55eb79ec281" }
|
||||||
|
}
|
18
nvim/.config/nvim/lua/lupan/autocmd.lua
Normal file
18
nvim/.config/nvim/lua/lupan/autocmd.lua
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
-- [[ Highlight on yank ]]
|
||||||
|
-- See `:help vim.highlight.on_yank()`
|
||||||
|
vim.api.nvim_create_autocmd('TextYankPost', {
|
||||||
|
desc = 'Highlight when yanking (copying) text',
|
||||||
|
group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }),
|
||||||
|
callback = function()
|
||||||
|
vim.highlight.on_yank()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd('BufWritePre', {
|
||||||
|
desc = 'Format on saving buffer',
|
||||||
|
callback = function()
|
||||||
|
vim.lsp.buf.format()
|
||||||
|
end,
|
||||||
|
group = vim.api.nvim_create_augroup('BufWriteFormat', { clear = true }),
|
||||||
|
pattern = { '*.go', '*.lua', '*.rs' },
|
||||||
|
})
|
5
nvim/.config/nvim/lua/lupan/init.lua
Normal file
5
nvim/.config/nvim/lua/lupan/init.lua
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
require("lupan.remap")
|
||||||
|
require("lupan.lazy")
|
||||||
|
require("lupan.options")
|
||||||
|
require("lupan.autocmd")
|
||||||
|
require('lazy').setup('plugins')
|
13
nvim/.config/nvim/lua/lupan/lazy.lua
Normal file
13
nvim/.config/nvim/lua/lupan/lazy.lua
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
-- 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)
|
56
nvim/.config/nvim/lua/lupan/options.lua
Normal file
56
nvim/.config/nvim/lua/lupan/options.lua
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
-- See `:help vim.o`
|
||||||
|
|
||||||
|
-- Disable intro message
|
||||||
|
vim.opt.shortmess = vim.opt.shortmess + 'I'
|
||||||
|
|
||||||
|
vim.opt.showmode = false
|
||||||
|
|
||||||
|
-- Set highlight on search
|
||||||
|
vim.o.hlsearch = true -- false
|
||||||
|
vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
|
||||||
|
|
||||||
|
-- Make line numbers default
|
||||||
|
vim.wo.number = true
|
||||||
|
vim.wo.relativenumber = true
|
||||||
|
|
||||||
|
-- Enable mouse mode
|
||||||
|
vim.o.mouse = 'a'
|
||||||
|
|
||||||
|
-- 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.timeout = false
|
||||||
|
|
||||||
|
-- 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
|
||||||
|
|
||||||
|
vim.o.tabstop = 8
|
||||||
|
vim.o.softtabstop = 4
|
||||||
|
vim.o.shiftwidth = 4
|
||||||
|
vim.o.expandtab = true
|
||||||
|
vim.o.expandtab = true
|
||||||
|
|
||||||
|
vim.g.lightspeed_no_default_keymaps = true
|
||||||
|
|
||||||
|
vim.o.cursorline = true
|
||||||
|
|
||||||
|
vim.opt.foldcolumn = '1'
|
||||||
|
|
||||||
|
vim.opt.laststatus = 3
|
117
nvim/.config/nvim/lua/lupan/remap.lua
Normal file
117
nvim/.config/nvim/lua/lupan/remap.lua
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
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>ut", "<cmd>UndotreeToggle<CR>", { desc = "[U]undotree [t]oggle" })
|
||||||
|
|
||||||
|
-- tabs
|
||||||
|
|
||||||
|
key('n', '<leader>td', function()
|
||||||
|
require('lupan.ui').tab_change_dir()
|
||||||
|
end, { desc = '[T]ab change [d]irectory' })
|
||||||
|
|
||||||
|
key('n', '<leader>tD', function()
|
||||||
|
require('lupan.ui').tab_change_dir_newtab()
|
||||||
|
end, { desc = '[T]ab change [D]irectory (new tab)' })
|
||||||
|
|
||||||
|
key('n', '<leader>tm', function()
|
||||||
|
require('telescope-tabs').list_tabs(require 'telescope.themes'.get_dropdown())
|
||||||
|
end, { desc = '[T]ab change [D]irectory (new tab)' })
|
||||||
|
|
||||||
|
key('n', '<leader>tt', function()
|
||||||
|
require('telescope-tabs').go_to_previous()
|
||||||
|
end, { desc = '[T]ab [t]oggle previous' })
|
||||||
|
|
||||||
|
for i = 1, 9, 1 do
|
||||||
|
key('n', '<leader>t' .. i, '<cmd>' .. i .. 'tabnext<CR>', { desc = '[T]ab nr [' .. i .. ']' })
|
||||||
|
end
|
||||||
|
|
||||||
|
-- translations
|
||||||
|
|
||||||
|
key('n', '<leader>tr', function()
|
||||||
|
require('lupan.ui').find_translation_key()
|
||||||
|
end, { desc = '[T][r]anlation key find' })
|
||||||
|
|
||||||
|
-- Diagnostic keymaps
|
||||||
|
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous [D]iagnostic message' })
|
||||||
|
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next [D]iagnostic message' })
|
||||||
|
vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float, { desc = 'Show diagnostic [E]rror messages' })
|
||||||
|
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
|
||||||
|
|
||||||
|
key('n', '<leader>N', '<cmd>bn<CR>', { desc = '[N]ext buffer' })
|
||||||
|
key('n', '<leader>P', '<cmd>bp<CR>', { desc = '[P]revious buffer' })
|
||||||
|
|
||||||
|
key('n', '<leader>tc', '<cmd>tabnew<CR>', { desc = '[T]ab [c]reate' })
|
||||||
|
key('n', '<leader>tx', '<cmd>tabclose<CR>', { desc = '[T]ab close' })
|
||||||
|
key('n', '<leader>tS', '<cmd>tab split<CR>', { desc = '[T]ab [s]plit' })
|
||||||
|
key('n', '<leader>tn', '<cmd>tabnext<CR>', { desc = '[T]ab [n]ext' })
|
||||||
|
key('n', '<leader>tp', '<cmd>tabprevious<CR>', { desc = '[T]ab [p]revious' })
|
||||||
|
key('n', '<leader>tf', '<cmd>tabfirst<CR>', { desc = '[T]ab [f]irst' })
|
||||||
|
key('n', '<leader>tl', '<cmd>tablast<CR>', { desc = '[T]tab [l]ast' })
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
-- LightSpeed
|
||||||
|
key('n', 'g/', '<Plug>Lightspeed_s', { desc = "Lightspeed forward search" })
|
||||||
|
key('n', 'g?', '<Plug>Lightspeed_S', { desc = "Lightspeed backward search" })
|
||||||
|
|
||||||
|
-- Clipboard and quickfix
|
||||||
|
key({ 'n', 'v' }, '<leader>y', '"+y', { desc = "Yank to clipboard" })
|
||||||
|
key('n', '<leader>j', '<cmd>cn<CR>', { desc = "Quickfix next" })
|
||||||
|
key('n', '<leader>k', '<cmd>cp<CR>', { desc = "Quickfix previous" })
|
||||||
|
key('n', '<leader>co', '<cmd>copen<CR>', { desc = "Quickfix [O]pen" })
|
||||||
|
key('n', '<leader>cc', '<cmd>cclose<CR>', { desc = "Quickfix [C]lose" })
|
||||||
|
|
||||||
|
key('n', '<leader>s;', '<cmd>SessionSelect<CR>', { desc = '[S]ession Select' })
|
||||||
|
|
||||||
|
-- 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" })
|
||||||
|
|
||||||
|
-- colors
|
||||||
|
|
||||||
|
key('n', '<F6>', function() require('lupan.utils').toggle_color_scheme() end, { desc = 'Toggle background' })
|
69
nvim/.config/nvim/lua/lupan/ui.lua
Normal file
69
nvim/.config/nvim/lua/lupan/ui.lua
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
local actions = require "telescope.actions"
|
||||||
|
local action_state = require "telescope.actions.state"
|
||||||
|
local finders = require "telescope.finders"
|
||||||
|
local pickers = require "telescope.pickers"
|
||||||
|
local sorters = require "telescope.sorters"
|
||||||
|
local themes = require "telescope.themes"
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
local function enter(prompt_bufnr, action)
|
||||||
|
local selected = action_state.get_selected_entry()
|
||||||
|
actions.close(prompt_bufnr)
|
||||||
|
action(selected[1])
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.tab_change_dir(opts)
|
||||||
|
opts = opts or {}
|
||||||
|
local action = opts.action or vim.cmd.tc
|
||||||
|
local prompt_title = opts.prompt_title or "Tab change directory"
|
||||||
|
local cmd = { 'find', os.getenv('HOME'), '-maxdepth', '5', '-type', 'd', '-not', '-path', '*/.git*' }
|
||||||
|
local dropdown = themes.get_dropdown();
|
||||||
|
local picker_opts = {
|
||||||
|
prompt_title = prompt_title,
|
||||||
|
finder = finders.new_oneshot_job(cmd, {}),
|
||||||
|
sorter = sorters.get_fuzzy_file({}),
|
||||||
|
attach_mappings = function(_, map)
|
||||||
|
map({ "i", "n" }, "<CR>", function(prompt_bufnr) enter(prompt_bufnr, action) end)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
}
|
||||||
|
local change_dir = pickers.new(dropdown, picker_opts)
|
||||||
|
change_dir:find()
|
||||||
|
end
|
||||||
|
|
||||||
|
local function tabnew_tcd(dir)
|
||||||
|
vim.cmd.tabnew(dir)
|
||||||
|
vim.cmd.tc(dir)
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.tab_change_dir_newtab()
|
||||||
|
M.tab_change_dir({ action = tabnew_tcd, prompt_title = "Tab change directory (new tab)" })
|
||||||
|
end
|
||||||
|
|
||||||
|
local function append_text(text)
|
||||||
|
text = string.gsub(text, "^ + %w+%.([%w%p]+) +.*", "%1")
|
||||||
|
local row, col = unpack(vim.api.nvim_win_get_cursor(0))
|
||||||
|
vim.api.nvim_buf_set_text(0, row - 1, col, row - 1, col, { text })
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.find_translation_key(opts)
|
||||||
|
opts = opts or {}
|
||||||
|
local action = opts.action or append_text
|
||||||
|
local prompt_title = opts.prompt_title or "Get translation key"
|
||||||
|
local cmd = { 'list-translation-keys' }
|
||||||
|
local dropdown = themes.get_dropdown();
|
||||||
|
local picker_opts = {
|
||||||
|
prompt_title = prompt_title,
|
||||||
|
finder = finders.new_oneshot_job(cmd, {}),
|
||||||
|
sorter = sorters.get_fuzzy_file({}),
|
||||||
|
attach_mappings = function(_, map)
|
||||||
|
map({ "i", "n" }, "<CR>", function(prompt_bufnr) enter(prompt_bufnr, action) end)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
}
|
||||||
|
local find_translation_key = pickers.new(dropdown, picker_opts)
|
||||||
|
find_translation_key:find()
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
53
nvim/.config/nvim/lua/lupan/utils.lua
Normal file
53
nvim/.config/nvim/lua/lupan/utils.lua
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
local filename = os.getenv('HOME') .. '/.config/alacritty/alacritty.toml'
|
||||||
|
|
||||||
|
local colorschemes = nil
|
||||||
|
|
||||||
|
function M.set_color_schemes(dark, light)
|
||||||
|
colorschemes = { dark = dark, light = light }
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.terminalbg()
|
||||||
|
local ok, lines = pcall(io.lines, filename)
|
||||||
|
if ok then
|
||||||
|
for line in lines do
|
||||||
|
if string.find(line, 'light.toml') then
|
||||||
|
return "light"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return "dark"
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.update_color_scheme()
|
||||||
|
vim.o.background = M.terminalbg()
|
||||||
|
if colorschemes then
|
||||||
|
vim.cmd.colorscheme(colorschemes[vim.o.background])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.toggle_color_scheme()
|
||||||
|
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(filename, {}, vim.schedule_wrap(function(...)
|
||||||
|
M.update_color_scheme()
|
||||||
|
w:stop()
|
||||||
|
watch(fname)
|
||||||
|
end))
|
||||||
|
end
|
||||||
|
|
||||||
|
watch(filename)
|
||||||
|
|
||||||
|
return M
|
20
nvim/.config/nvim/lua/plugins/appearance.lua
Normal file
20
nvim/.config/nvim/lua/plugins/appearance.lua
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
'thesimonho/kanagawa-paper.nvim',
|
||||||
|
config = function()
|
||||||
|
vim.cmd.colorscheme('kanagawa-paper')
|
||||||
|
end
|
||||||
|
},
|
||||||
|
{
|
||||||
|
--- Create Color Code
|
||||||
|
'uga-rosa/ccc.nvim',
|
||||||
|
config = function(_, opts)
|
||||||
|
require('ccc').setup(opts)
|
||||||
|
end,
|
||||||
|
cmd = { 'CccPick', 'CccHighlighterToggle' },
|
||||||
|
keys = {
|
||||||
|
{ "<leader>ct", "<cmd>CccHighlighterToggle<cr>", desc = "[C]olorizer [T]oggle" },
|
||||||
|
{ "<leader>cp", "<cmd>CccPick<cr>", desc = "[C]olor [P]ick" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
81
nvim/.config/nvim/lua/plugins/autocompletion.lua
Normal file
81
nvim/.config/nvim/lua/plugins/autocompletion.lua
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
return {
|
||||||
|
'hrsh7th/nvim-cmp',
|
||||||
|
event = 'InsertEnter',
|
||||||
|
dependencies = {
|
||||||
|
-- Snippet Engine & its associated nvim-cmp source
|
||||||
|
{
|
||||||
|
'L3MON4D3/LuaSnip',
|
||||||
|
build = (function()
|
||||||
|
if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return 'make install_jsregexp'
|
||||||
|
end)(),
|
||||||
|
},
|
||||||
|
'saadparwaiz1/cmp_luasnip',
|
||||||
|
|
||||||
|
-- Adds LSP completion capabilities
|
||||||
|
'hrsh7th/cmp-nvim-lsp',
|
||||||
|
'hrsh7th/cmp-path',
|
||||||
|
|
||||||
|
-- Adds a number of user-friendly snippets
|
||||||
|
'rafamadriz/friendly-snippets',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
-- See `:help cmp`
|
||||||
|
local cmp = require 'cmp'
|
||||||
|
local luasnip = require 'luasnip'
|
||||||
|
require('luasnip.loaders.from_vscode').lazy_load()
|
||||||
|
require('luasnip.loaders.from_lua').lazy_load({ paths = '~/.config/nvim/snippets' })
|
||||||
|
luasnip.config.setup {}
|
||||||
|
luasnip.filetype_extend('templ', { "html" })
|
||||||
|
|
||||||
|
cmp.setup {
|
||||||
|
snippet = {
|
||||||
|
expand = function(args)
|
||||||
|
luasnip.lsp_expand(args.body)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
-- completion = { autocomplete = false },
|
||||||
|
completion = { completeopt = 'menu,menuone,noinsert' },
|
||||||
|
|
||||||
|
-- See `:help ins-completion`
|
||||||
|
mapping = cmp.mapping.preset.insert {
|
||||||
|
-- ['<C-l>'] = cmp.mapping.confirm({ select = true }),
|
||||||
|
['<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-y>'] = cmp.mapping.confirm { select = true },
|
||||||
|
['<C-Space>'] = cmp.mapping.complete {},
|
||||||
|
|
||||||
|
-- <c-l> will move you to the right of each of the expansion locations.
|
||||||
|
-- <c-h> is similar, except moving you backwards.
|
||||||
|
['<C-l>'] = cmp.mapping(function()
|
||||||
|
if luasnip.expand_or_locally_jumpable() then
|
||||||
|
luasnip.expand_or_jump()
|
||||||
|
end
|
||||||
|
end, { 'i', 's' }),
|
||||||
|
['<C-h>'] = cmp.mapping(function()
|
||||||
|
if luasnip.locally_jumpable(-1) then
|
||||||
|
luasnip.jump(-1)
|
||||||
|
end
|
||||||
|
end, { 'i', 's' }),
|
||||||
|
},
|
||||||
|
sources = {
|
||||||
|
{ name = 'nvim_lsp' },
|
||||||
|
{ name = 'luasnip' },
|
||||||
|
{ name = 'path' },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
cmp.setup.filetype('sql', {
|
||||||
|
sources = {
|
||||||
|
{ name = 'vim-dadbod-completion' },
|
||||||
|
{ name = 'buffer' },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
cmp.setup.filetype('lisp', {
|
||||||
|
sources = cmp.config.sources({ { name = 'nvlime' } })
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
}
|
56
nvim/.config/nvim/lua/plugins/bookmarks.lua
Normal file
56
nvim/.config/nvim/lua/plugins/bookmarks.lua
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"otavioschwanck/arrow.nvim",
|
||||||
|
dependencies = {
|
||||||
|
{ "nvim-tree/nvim-web-devicons" },
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
show_icons = true,
|
||||||
|
leader_key = '-', -- Recommended to be a single key
|
||||||
|
buffer_leader_key = '+', -- Per Buffer Mappings
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"leath-dub/snipe.nvim",
|
||||||
|
keys = {
|
||||||
|
{ "_", function() require("snipe").open_buffer_menu() end, desc = "Open Snipe buffer menu" }
|
||||||
|
},
|
||||||
|
opts = {}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"chentoast/marks.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
|
config = true,
|
||||||
|
keys = {
|
||||||
|
{ '<leader>ma', '<cmd>MarksListAll<CR>' },
|
||||||
|
{ '<leader>mb', '<cmd>MarksListBuf<CR>' },
|
||||||
|
{ '<leader>mg', '<cmd>MarksListGlobal<CR>' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"bassamsdata/namu.nvim",
|
||||||
|
config = function()
|
||||||
|
require("namu").setup({
|
||||||
|
-- Enable the modules you want
|
||||||
|
namu_symbols = {
|
||||||
|
enable = true,
|
||||||
|
options = {}, -- here you can configure namu
|
||||||
|
},
|
||||||
|
-- Optional: Enable other modules if needed
|
||||||
|
ui_select = { enable = false }, -- vim.ui.select() wrapper
|
||||||
|
})
|
||||||
|
-- === Suggested Keymaps: ===
|
||||||
|
vim.keymap.set("n", "<leader>;", ":Namu symbols<cr>", {
|
||||||
|
desc = "Jump to LSP symbol",
|
||||||
|
silent = true,
|
||||||
|
})
|
||||||
|
vim.keymap.set("n", "<leader>.", ":Namu workspace<cr>", {
|
||||||
|
desc = "LSP Symbols - Workspace",
|
||||||
|
silent = true,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
}
|
23
nvim/.config/nvim/lua/plugins/convenience.lua
Normal file
23
nvim/.config/nvim/lua/plugins/convenience.lua
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
'folke/which-key.nvim',
|
||||||
|
event = 'VimEnter',
|
||||||
|
opts = {
|
||||||
|
preset = 'helix',
|
||||||
|
delay = 1000,
|
||||||
|
},
|
||||||
|
config = function(_, opts)
|
||||||
|
require('which-key').setup(opts)
|
||||||
|
|
||||||
|
-- Document existing key chains
|
||||||
|
require('which-key').add {
|
||||||
|
{ "<leader>c", group = "[C]ode/Color" },
|
||||||
|
{ "<leader>d", group = "[D]ocument" },
|
||||||
|
{ "<leader>g", group = "[G]it" },
|
||||||
|
{ "<leader>r", group = "[R]ename" },
|
||||||
|
{ "<leader>s", group = "[S]earch" },
|
||||||
|
{ "<leader>w", group = "[W]orkspace" },
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
87
nvim/.config/nvim/lua/plugins/editing.lua
Normal file
87
nvim/.config/nvim/lua/plugins/editing.lua
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
return {
|
||||||
|
-- "gc" to comment visual regions/lines
|
||||||
|
{
|
||||||
|
'numToStr/Comment.nvim',
|
||||||
|
opts = {}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Undo browsing
|
||||||
|
'mbbill/undotree',
|
||||||
|
|
||||||
|
-- Tabstops autodetected
|
||||||
|
'tpope/vim-sleuth',
|
||||||
|
|
||||||
|
{
|
||||||
|
"kylechui/nvim-surround",
|
||||||
|
version = "^3.0.0", -- Use for stability; omit to use `main` branch for the latest features
|
||||||
|
event = "VeryLazy",
|
||||||
|
config = true,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
'inkarkat/vim-ReplaceWithRegister',
|
||||||
|
keys = {
|
||||||
|
{ '<leader>rp', '<Plug>ReplaceWithRegisterOperator' },
|
||||||
|
{ '<leader>rpp', '<Plug>ReplaceWithRegisterLine' },
|
||||||
|
{ '<leader>rp', '<Plug>ReplaceWithRegisterVisual', mode = 'x' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
'ggandor/leap.nvim',
|
||||||
|
opts = {
|
||||||
|
safe_labels = {},
|
||||||
|
},
|
||||||
|
dependencies = {
|
||||||
|
"tpope/vim-repeat",
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{ '\\', '<Plug>(leap)', mode = { 'n', 'x', 'o' } },
|
||||||
|
{ 'gs', '<Plug>(leap-from-window)', mode = { 'n', 'x', 'o' } },
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
'Wansmer/treesj',
|
||||||
|
dependencies = { 'nvim-treesitter/nvim-treesitter' },
|
||||||
|
opts = {
|
||||||
|
use_default_keymaps = false,
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{ '<leader>tg', function() require('treesj').toggle() end, desc = "[T]ree to[g]gle one-line" },
|
||||||
|
{ '<leader>tj', function() require('treesj').join() end, desc = "[T]ree [J]oin one-line" },
|
||||||
|
{ '<leader>ts', function() require('treesj').split() end, desc = "[T]ree [S]plit one-line" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
-- rehighlight search on n or N
|
||||||
|
{
|
||||||
|
'nvimdev/hlsearch.nvim',
|
||||||
|
event = 'BufRead',
|
||||||
|
config = true,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
'mizlan/iswap.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
keys = {
|
||||||
|
{ '<leader>cs', '<cmd>ISwapWith<CR>', desc = 'I[S]wap' },
|
||||||
|
{ '<leader>cS', '<cmd>ISwap<CR>', desc = 'I[S]wapWith' },
|
||||||
|
{ '<leader>cn', '<cmd>ISwapNodeWith<CR>', desc = 'ISwap[N]ode' },
|
||||||
|
{ '<leader>cN', '<cmd>ISwapNode<CR>', desc = 'ISwap[N]ode' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
'aaronik/treewalker.nvim',
|
||||||
|
keys = {
|
||||||
|
{ '<leader>ch', '<cmd>Treewalker Left<CR>', desc = 'Tree Left' },
|
||||||
|
{ '<leader>cj', '<cmd>Treewalker Down<CR>', desc = 'Tree Down' },
|
||||||
|
{ '<leader>ck', '<cmd>Treewalker Up<CR>', desc = 'Tree Up' },
|
||||||
|
{ '<leader>cl', '<cmd>Treewalker Right<CR>', desc = 'Tree Right' },
|
||||||
|
{ '<leader>cJ', '<cmd>Treewalker SwapDown<CR>', desc = 'Tree Swap Down' },
|
||||||
|
{ '<leader>cK', '<cmd>Treewalker SwapUp<CR>', desc = 'Tree Swap Up' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
13
nvim/.config/nvim/lua/plugins/file-explorer.lua
Normal file
13
nvim/.config/nvim/lua/plugins/file-explorer.lua
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
'stevearc/oil.nvim',
|
||||||
|
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||||
|
opts = {
|
||||||
|
default_file_explorer = true,
|
||||||
|
delete_to_trash = true,
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{ "<leader>-", "<cmd>Oil<CR>", desc = "Open parent directory" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
74
nvim/.config/nvim/lua/plugins/git.lua
Normal file
74
nvim/.config/nvim/lua/plugins/git.lua
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
return {
|
||||||
|
-- Git
|
||||||
|
{
|
||||||
|
'NeogitOrg/neogit',
|
||||||
|
dependencies = {
|
||||||
|
'nvim-lua/plenary.nvim',
|
||||||
|
'sindrets/diffview.nvim',
|
||||||
|
'nvim-telescope/telescope.nvim',
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
graph_style = 'unicode',
|
||||||
|
use_per_project_settings = false,
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
'<leader>go',
|
||||||
|
function() require('neogit').open() end,
|
||||||
|
desc = 'Neo[g]it [O]pen'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'<leader>g.',
|
||||||
|
function() require('neogit').open({ cwd = '%:p:h' }) end,
|
||||||
|
desc = 'Neo[g]it open in current file repository'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'<leader>gh',
|
||||||
|
function() require('diffview').file_history() end,
|
||||||
|
desc = '[G]it [H]istory',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'<leader>g%',
|
||||||
|
function() require('diffview').file_history(nil, { '%' }) end,
|
||||||
|
desc = '[G]it history for [%] current file'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
'FabijanZulj/blame.nvim',
|
||||||
|
config = true,
|
||||||
|
cmd = 'BlameToggle',
|
||||||
|
keys = {
|
||||||
|
{ '<leader>gb', '<cmd>BlameToggle<cr>', desc = '[G]it [B]lame toggle' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
-- 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)
|
||||||
|
local gs = require('gitsigns')
|
||||||
|
vim.keymap.set('n', '<leader>gp', gs.prev_hunk,
|
||||||
|
{ buffer = bufnr, desc = '[G]o to [P]revious Hunk' })
|
||||||
|
vim.keymap.set('n', '<leader>gn', gs.next_hunk,
|
||||||
|
{ buffer = bufnr, desc = '[G]o to [N]ext Hunk' })
|
||||||
|
vim.keymap.set('n', '<leader>ph', gs.preview_hunk,
|
||||||
|
{ buffer = bufnr, desc = '[P]review [H]unk' })
|
||||||
|
vim.keymap.set('n', '<leader>sA', gs.stage_hunk,
|
||||||
|
{ buffer = bufnr, desc = '[S]tage Hunk' })
|
||||||
|
vim.keymap.set('n', '<leader>HD', function() gs.diffthis('~') end,
|
||||||
|
{ buffer = bufnr, desc = '[H]unk [D]iff' })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
12
nvim/.config/nvim/lua/plugins/global-note.lua
Normal file
12
nvim/.config/nvim/lua/plugins/global-note.lua
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
return {
|
||||||
|
'backdround/global-note.nvim',
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>tn",
|
||||||
|
function()
|
||||||
|
require('global-note').toggle_note()
|
||||||
|
end,
|
||||||
|
desc = '[T]oggle global [N]ote',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
13
nvim/.config/nvim/lua/plugins/go.lua
Normal file
13
nvim/.config/nvim/lua/plugins/go.lua
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
return {
|
||||||
|
"ray-x/go.nvim",
|
||||||
|
dependencies = {
|
||||||
|
"ray-x/guihua.lua",
|
||||||
|
"neovim/nvim-lspconfig",
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
},
|
||||||
|
config = function(_, opts)
|
||||||
|
require("go").setup(opts)
|
||||||
|
end,
|
||||||
|
event = { "CmdlineEnter" },
|
||||||
|
ft = { "go", 'gomod' },
|
||||||
|
}
|
24
nvim/.config/nvim/lua/plugins/godoc.lua
Normal file
24
nvim/.config/nvim/lua/plugins/godoc.lua
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
'fredrikaverpil/godoc.nvim',
|
||||||
|
version = '*',
|
||||||
|
dependencies = {
|
||||||
|
{ 'nvim-telescope/telescope.nvim' },
|
||||||
|
{
|
||||||
|
'nvim-treesitter/nvim-treesitter',
|
||||||
|
opts = {
|
||||||
|
ensure_installed = { 'go' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
event = 'VeryLazy',
|
||||||
|
cmd = 'GoDoc',
|
||||||
|
keys = {
|
||||||
|
{ '<leader>gd', '<cmd>GoDoc<CR>', desc = '[G]o[D]oc' },
|
||||||
|
},
|
||||||
|
build = 'go install github.com/lotusirous/gostdsym/stdsym@latest',
|
||||||
|
opts = {
|
||||||
|
picker = { type = 'telescope' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
16
nvim/.config/nvim/lua/plugins/http.lua
Normal file
16
nvim/.config/nvim/lua/plugins/http.lua
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"rest-nvim/rest.nvim",
|
||||||
|
dependencies = {
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
opts = function(_, opts)
|
||||||
|
opts.ensure_installed = opts.ensure_installed or {}
|
||||||
|
table.insert(opts.ensure_installed, "http")
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
ft = 'http',
|
||||||
|
keys = {
|
||||||
|
{ '<leader>S', '<cmd>Rest run<CR>', ft = 'http' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
9
nvim/.config/nvim/lua/plugins/jj.lua
Normal file
9
nvim/.config/nvim/lua/plugins/jj.lua
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
'swaits/lazyjj.nvim',
|
||||||
|
dependencies = 'nvim-lua/plenary.nvim',
|
||||||
|
opts = {
|
||||||
|
mapping = '<leader>gj'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
25
nvim/.config/nvim/lua/plugins/line.lua
Normal file
25
nvim/.config/nvim/lua/plugins/line.lua
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
vim.opt.fillchars = {
|
||||||
|
stl = "─",
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"sschleemilch/slimline.nvim",
|
||||||
|
opts = {
|
||||||
|
spaces = {
|
||||||
|
components = "─",
|
||||||
|
left = "─",
|
||||||
|
right = "─",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
'b0o/incline.nvim',
|
||||||
|
config = function()
|
||||||
|
require('incline').setup()
|
||||||
|
end,
|
||||||
|
-- Optional: Lazy load Incline
|
||||||
|
event = 'VeryLazy',
|
||||||
|
},
|
||||||
|
}
|
167
nvim/.config/nvim/lua/plugins/lsp.lua
Normal file
167
nvim/.config/nvim/lua/plugins/lsp.lua
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
'neovim/nvim-lspconfig',
|
||||||
|
version = '*',
|
||||||
|
dependencies = {
|
||||||
|
-- Automatically install LSPs and related tools to stdpath for neovim
|
||||||
|
'williamboman/mason.nvim',
|
||||||
|
'williamboman/mason-lspconfig.nvim',
|
||||||
|
'WhoIsSethDaniel/mason-tool-installer.nvim',
|
||||||
|
'folke/neodev.nvim',
|
||||||
|
|
||||||
|
-- Useful status updates for LSP.
|
||||||
|
{ 'j-hui/fidget.nvim', opts = {} },
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
vim.api.nvim_create_autocmd('LspAttach', {
|
||||||
|
group = vim.api.nvim_create_augroup('my-lsp-attach', { clear = true }),
|
||||||
|
callback = function(event)
|
||||||
|
local map = function(keys, func, desc)
|
||||||
|
vim.keymap.set('n', keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
|
||||||
|
end
|
||||||
|
|
||||||
|
map('<leader>rn', '<cmd>Lspsaga rename<CR>', '[R]e[n]ame')
|
||||||
|
map('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
|
||||||
|
map('K', '<cmd>Lspsaga hover_doc<CR>', 'Hover Documentation')
|
||||||
|
map('<leader>K', vim.lsp.buf.signature_help, 'Signature Documentation')
|
||||||
|
|
||||||
|
-- Highlight references under cursor (clear highlight when cursor moves).
|
||||||
|
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||||
|
if client and client.server_capabilities.documentHighlightProvider then
|
||||||
|
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
|
||||||
|
buffer = event.buf,
|
||||||
|
callback = function()
|
||||||
|
local clients = vim.lsp.get_clients({ bufnr = event.buf })
|
||||||
|
for _, cl in ipairs(clients) do
|
||||||
|
if cl.name == 'unocss' then
|
||||||
|
return -- skip highlight if unocss is attached (workaround)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
vim.lsp.buf.document_highlight()
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
|
||||||
|
buffer = event.buf,
|
||||||
|
callback = vim.lsp.buf.clear_references,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())
|
||||||
|
|
||||||
|
local servers = {
|
||||||
|
clangd = {},
|
||||||
|
gopls = {},
|
||||||
|
-- pyright = {},
|
||||||
|
rust_analyzer = {},
|
||||||
|
ts_ls = {},
|
||||||
|
|
||||||
|
lua_ls = {
|
||||||
|
settings = {
|
||||||
|
Lua = {
|
||||||
|
runtime = { version = 'LuaJIT' },
|
||||||
|
workspace = { checkThirdParty = false },
|
||||||
|
telemetry = { enable = false },
|
||||||
|
completion = {
|
||||||
|
callSnippet = 'Replace',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
html = {},
|
||||||
|
htmx = {},
|
||||||
|
unocss = {},
|
||||||
|
}
|
||||||
|
|
||||||
|
require 'lspconfig'.html.setup {
|
||||||
|
filetypes = { "html", "templ" },
|
||||||
|
}
|
||||||
|
|
||||||
|
require 'lspconfig'.htmx.setup {
|
||||||
|
filetypes = { "html", "templ" },
|
||||||
|
}
|
||||||
|
|
||||||
|
require 'lspconfig'.unocss.setup {
|
||||||
|
filetypes = { "html", "templ" },
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Setup neovim lua configuration
|
||||||
|
require('neodev').setup()
|
||||||
|
|
||||||
|
require('mason').setup()
|
||||||
|
|
||||||
|
local ensure_installed = vim.tbl_keys(servers or {})
|
||||||
|
vim.list_extend(ensure_installed, {
|
||||||
|
'stylua', -- Used to format lua code
|
||||||
|
})
|
||||||
|
require('mason-tool-installer').setup { ensure_installed = ensure_installed }
|
||||||
|
|
||||||
|
require('mason-lspconfig').setup {
|
||||||
|
handlers = {
|
||||||
|
function(server_name)
|
||||||
|
local server = servers[server_name] or {}
|
||||||
|
-- This handles overriding only values explicitly passed
|
||||||
|
-- by the server configuration above. Useful when disabling
|
||||||
|
-- certain features of an LSP (for example, turning off formatting for tsserver)
|
||||||
|
server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
|
||||||
|
require('lspconfig')[server_name].setup(server)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
'nvimdev/lspsaga.nvim',
|
||||||
|
dependencies = {
|
||||||
|
'nvim-treesitter/nvim-treesitter',
|
||||||
|
'nvim-tree/nvim-web-devicons',
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
lightbulb = { enable = false }
|
||||||
|
},
|
||||||
|
config = function(_, opts)
|
||||||
|
require('lspsaga').setup(opts)
|
||||||
|
vim.keymap.set('n', '<leader>la', '<cmd>Lspsaga code_action<CR>', { desc = "[L]spsaga code [A]ction" })
|
||||||
|
vim.keymap.set('n', '<leader>lb', '<cmd>Lspsaga show_buf_diagnostics<CR>',
|
||||||
|
{ desc = "[L]spsaga [B]uffer diagnostics" })
|
||||||
|
vim.keymap.set('n', '<leader>lc', '<cmd>Lspsaga show_cursor_diagnostics<CR>',
|
||||||
|
{ desc = "[L]spsaga [C]ursor diagnostics" })
|
||||||
|
vim.keymap.set('n', '<leader>ld', '<cmd>Lspsaga goto_definition<CR>', { desc = "[L]spsaga goto [D]efinition" })
|
||||||
|
vim.keymap.set('n', '<leader>lD', '<cmd>Lspsaga goto_type_definition<CR>',
|
||||||
|
{ desc = "[L]spsaga goto type [D]efinition" })
|
||||||
|
vim.keymap.set('n', '<leader>lf', '<cmd>Lspsaga finder<CR>', { desc = "[L]spsaga [F]inder" })
|
||||||
|
vim.keymap.set('n', '<leader>lI', '<cmd>Lspsaga finder imp<CR>', { desc = "[L]spsaga finder [I]mplementations" })
|
||||||
|
vim.keymap.set('n', '<leader>li', '<cmd>Lspsaga incoming_calls<CR>', { desc = "[L]spsaga [I]ncomping calls" })
|
||||||
|
vim.keymap.set('n', '<leader>ll', '<cmd>Lspsaga show_line_diagnostics<CR>',
|
||||||
|
{ desc = "[L]spsaga [L]ine diagnostics" })
|
||||||
|
vim.keymap.set('n', '<leader>lo', '<cmd>Lspsaga outgoing_calls<CR>', { desc = "[L]spsaga [O]utgoing calls" })
|
||||||
|
vim.keymap.set('n', '<leader>lO', '<cmd>Lspsaga outline<CR>', { desc = "[L]spsaga [O]utline" })
|
||||||
|
vim.keymap.set('n', '<leader>lp', '<cmd>Lspsaga peek_definition<CR>', { desc = "[L]spsaga [P]eek definition" })
|
||||||
|
vim.keymap.set('n', '<leader>lP', '<cmd>Lspsaga peek_type_definition<CR>',
|
||||||
|
{ desc = "[L]spsaga [P]eek type definition" })
|
||||||
|
vim.keymap.set('n', '<leader>lw', '<cmd>Lspsaga show_workspace_diagnostics<CR>',
|
||||||
|
{ desc = "[L]spsaga [W]orkspace diagnostics" })
|
||||||
|
vim.keymap.set({ 'n', 't' }, '<C-_>', '<cmd>Lspsaga term_toggle<CR>', { desc = "[L]spsaga [T]erm toggle" })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"folke/trouble.nvim",
|
||||||
|
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||||
|
opts = {},
|
||||||
|
cmd = 'Trouble'
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"ray-x/lsp_signature.nvim",
|
||||||
|
event = "InsertEnter",
|
||||||
|
opts = {
|
||||||
|
-- cfg options
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
49
nvim/.config/nvim/lua/plugins/odin.lua
Normal file
49
nvim/.config/nvim/lua/plugins/odin.lua
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
require 'lspconfig'.ols.setup {}
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command("FormatDisable", function(args)
|
||||||
|
if args.bang then
|
||||||
|
-- FormatDisable! will disable formatting just for this buffer
|
||||||
|
vim.b.disable_autoformat = true
|
||||||
|
else
|
||||||
|
vim.g.disable_autoformat = true
|
||||||
|
end
|
||||||
|
end, {
|
||||||
|
desc = "Disable autoformat-on-save",
|
||||||
|
bang = true,
|
||||||
|
})
|
||||||
|
vim.api.nvim_create_user_command("FormatEnable", function()
|
||||||
|
vim.b.disable_autoformat = false
|
||||||
|
vim.g.disable_autoformat = false
|
||||||
|
end, {
|
||||||
|
desc = "Re-enable autoformat-on-save",
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"stevearc/conform.nvim",
|
||||||
|
opts = {
|
||||||
|
-- notify_on_error = false,
|
||||||
|
-- Odinfmt gets its configuration from odinfmt.json. It defaults
|
||||||
|
-- writing to stdout but needs to be told to read from stdin.
|
||||||
|
formatters = {
|
||||||
|
odinfmt = {
|
||||||
|
-- Change where to find the command if it isn't in your path.
|
||||||
|
command = "odinfmt",
|
||||||
|
args = { "-stdin" },
|
||||||
|
stdin = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- and instruct conform to use odinfmt.
|
||||||
|
formatters_by_ft = {
|
||||||
|
odin = { "odinfmt" },
|
||||||
|
},
|
||||||
|
format_on_save = function(bufnr)
|
||||||
|
-- Disable with a global or buffer-local variable
|
||||||
|
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return { timeout_ms = 500, lsp_format = "fallback" }
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
14
nvim/.config/nvim/lua/plugins/persisted.lua
Normal file
14
nvim/.config/nvim/lua/plugins/persisted.lua
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
return {
|
||||||
|
"olimorris/persisted.nvim",
|
||||||
|
lazy = false, -- make sure the plugin is always loaded at startup
|
||||||
|
opts = {
|
||||||
|
autoload = true,
|
||||||
|
ignored_dirs = {
|
||||||
|
"~/.config",
|
||||||
|
"~/tmp",
|
||||||
|
"/tmp",
|
||||||
|
{ "~", exact = true },
|
||||||
|
{ "/", exact = true },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
7
nvim/.config/nvim/lua/plugins/quicker.lua
Normal file
7
nvim/.config/nvim/lua/plugins/quicker.lua
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
return {
|
||||||
|
'stevearc/quicker.nvim',
|
||||||
|
event = "FileType qf",
|
||||||
|
---@module "quicker"
|
||||||
|
---@type quicker.SetupOptions
|
||||||
|
opts = {},
|
||||||
|
}
|
171
nvim/.config/nvim/lua/plugins/snacks.lua
Normal file
171
nvim/.config/nvim/lua/plugins/snacks.lua
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"folke/snacks.nvim",
|
||||||
|
priority = 1000,
|
||||||
|
lazy = false,
|
||||||
|
---@type snacks.Config
|
||||||
|
opts = {
|
||||||
|
bigfile = { enabled = true },
|
||||||
|
dashboard = { enabled = false },
|
||||||
|
explorer = { enabled = true },
|
||||||
|
indent = { enabled = true },
|
||||||
|
input = { enabled = true },
|
||||||
|
notifier = {
|
||||||
|
enabled = true,
|
||||||
|
timeout = 3000,
|
||||||
|
},
|
||||||
|
picker = { enabled = true },
|
||||||
|
quickfile = { enabled = true },
|
||||||
|
scope = { enabled = true },
|
||||||
|
scroll = { enabled = false },
|
||||||
|
statuscolumn = { enabled = true },
|
||||||
|
words = { enabled = true },
|
||||||
|
styles = {
|
||||||
|
notification = {
|
||||||
|
-- wo = { wrap = true } -- Wrap notifications
|
||||||
|
}
|
||||||
|
},
|
||||||
|
zen = {
|
||||||
|
win = { width = 180, backdrop = { transparent = false } },
|
||||||
|
on_open = function()
|
||||||
|
vim.opt.laststatus = 1
|
||||||
|
require('incline').disable()
|
||||||
|
vim.system({ 'hyprctl', 'dispatch', 'fullscreen' })
|
||||||
|
vim.system({ 'awesome-client', 'client.focus.fullscreen = true' })
|
||||||
|
end,
|
||||||
|
on_close = function()
|
||||||
|
vim.opt.laststatus = 3
|
||||||
|
require('incline').enable()
|
||||||
|
vim.system({ 'hyprctl', 'dispatch', 'fullscreen' })
|
||||||
|
vim.system({ 'awesome-client', 'client.focus.fullscreen = false' })
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
-- Top Pickr & Explorer
|
||||||
|
{ "<leader><space>", function() Snacks.picker.smart() end, desc = "Smart Find Files" },
|
||||||
|
{ "<leader>,", function() Snacks.picker.buffers() end, desc = "Buffers" },
|
||||||
|
{ "<leader>/", function() Snacks.picker.grep() end, desc = "Grep" },
|
||||||
|
{ "<leader>:", function() Snacks.picker.command_history() end, desc = "Command History" },
|
||||||
|
{ "<leader>n", function() Snacks.picker.notifications() end, desc = "Notification History" },
|
||||||
|
{ "<leader>e", function() Snacks.explorer() end, desc = "File Explorer" },
|
||||||
|
-- find
|
||||||
|
{ "<leader>fb", function() Snacks.picker.buffers() end, desc = "Buffers" },
|
||||||
|
{ "<leader>fc", function() Snacks.picker.files({ cwd = vim.fn.stdpath("config") }) end, desc = "Find Config File" },
|
||||||
|
{ "<leader>ff", function() Snacks.picker.files() end, desc = "Find Files" },
|
||||||
|
{ "<leader>fg", function() Snacks.picker.git_files() end, desc = "Find Git Files" },
|
||||||
|
{ "<leader>fp", function() Snacks.picker.projects() end, desc = "Projects" },
|
||||||
|
{ "<leader>fr", function() Snacks.picker.recent() end, desc = "Recent" },
|
||||||
|
-- git
|
||||||
|
{ "<leader>gb", function() Snacks.picker.git_branches() end, desc = "Git Branches" },
|
||||||
|
{ "<leader>gl", function() Snacks.picker.git_log() end, desc = "Git Log" },
|
||||||
|
{ "<leader>gL", function() Snacks.picker.git_log_line() end, desc = "Git Log Line" },
|
||||||
|
{ "<leader>gs", function() Snacks.picker.git_status() end, desc = "Git Status" },
|
||||||
|
{ "<leader>gS", function() Snacks.picker.git_stash() end, desc = "Git Stash" },
|
||||||
|
{ "<leader>gd", function() Snacks.picker.git_diff() end, desc = "Git Diff (Hunks)" },
|
||||||
|
{ "<leader>gf", function() Snacks.picker.git_log_file() end, desc = "Git Log File" },
|
||||||
|
{ "<leader>gg", function() Snacks.picker.git_grep() end, desc = "Git Grep" },
|
||||||
|
-- Grep
|
||||||
|
{ "<leader>sb", function() Snacks.picker.lines() end, desc = "Buffer Lines" },
|
||||||
|
{ "<leader>sB", function() Snacks.picker.grep_buffers() end, desc = "Grep Open Buffers" },
|
||||||
|
{ "<leader>sg", function() Snacks.picker.grep() end, desc = "Grep" },
|
||||||
|
{ "<leader>sw", function() Snacks.picker.grep_word() end, desc = "Visual selection or word", mode = { "n", "x" } },
|
||||||
|
{ "<leader>so", function() Snacks.picker.grep({ cwd = "/usr/lib/odin" }) end, desc = "Grep" },
|
||||||
|
{ "<leader>sO", function() Snacks.picker.files({ cwd = "/usr/lib/odin" }) end, desc = "Grep" },
|
||||||
|
{ "<leader>sX", function() Snacks.picker.grep({ cwd = "/usr/include/xcb" }) end, desc = "Grep" },
|
||||||
|
-- search
|
||||||
|
{ '<leader>s"', function() Snacks.picker.registers() end, desc = "Registers" },
|
||||||
|
{ '<leader>s/', function() Snacks.picker.search_history() end, desc = "Search History" },
|
||||||
|
{ "<leader>sa", function() Snacks.picker.autocmds() end, desc = "Autocmds" },
|
||||||
|
{ "<leader>sb", function() Snacks.picker.lines() end, desc = "Buffer Lines" },
|
||||||
|
{ "<leader>sc", function() Snacks.picker.command_history() end, desc = "Command History" },
|
||||||
|
{ "<leader>sC", function() Snacks.picker.commands() end, desc = "Commands" },
|
||||||
|
{ "<leader>sd", function() Snacks.picker.diagnostics() end, desc = "Diagnostics" },
|
||||||
|
{ "<leader>sD", function() Snacks.picker.diagnostics_buffer() end, desc = "Buffer Diagnostics" },
|
||||||
|
{ "<leader>sh", function() Snacks.picker.help() end, desc = "Help Pages" },
|
||||||
|
{ "<leader>sH", function() Snacks.picker.highlights() end, desc = "Highlights" },
|
||||||
|
{ "<leader>si", function() Snacks.picker.icons() end, desc = "Icons" },
|
||||||
|
{ "<leader>sj", function() Snacks.picker.jumps() end, desc = "Jumps" },
|
||||||
|
{ "<leader>sk", function() Snacks.picker.keymaps() end, desc = "Keymaps" },
|
||||||
|
{ "<leader>sl", function() Snacks.picker.loclist() end, desc = "Location List" },
|
||||||
|
{ "<leader>sm", function() Snacks.picker.marks() end, desc = "Marks" },
|
||||||
|
{ "<leader>sM", function() Snacks.picker.man() end, desc = "Man Pages" },
|
||||||
|
{ "<leader>sp", function() Snacks.picker.lazy() end, desc = "Search for Plugin Spec" },
|
||||||
|
{ "<leader>sq", function() Snacks.picker.qflist() end, desc = "Quickfix List" },
|
||||||
|
{ "<leader>sR", function() Snacks.picker.resume() end, desc = "Resume" },
|
||||||
|
{ "<leader>su", function() Snacks.picker.undo() end, desc = "Undo History" },
|
||||||
|
{ "<leader>uC", function() Snacks.picker.colorschemes() end, desc = "Colorschemes" },
|
||||||
|
-- LSP
|
||||||
|
{ "gd", function() Snacks.picker.lsp_definitions() end, desc = "Goto Definition" },
|
||||||
|
{ "gD", function() Snacks.picker.lsp_declarations() end, desc = "Goto Declaration" },
|
||||||
|
{ "gr", function() Snacks.picker.lsp_references() end, nowait = true, desc = "References" },
|
||||||
|
{ "gI", function() Snacks.picker.lsp_implementations() end, desc = "Goto Implementation" },
|
||||||
|
{ "gy", function() Snacks.picker.lsp_type_definitions() end, desc = "Goto T[y]pe Definition" },
|
||||||
|
{ "<leader>ss", function() Snacks.picker.lsp_symbols() end, desc = "LSP Symbols" },
|
||||||
|
{ "<leader>sS", function() Snacks.picker.lsp_workspace_symbols() end, desc = "LSP Workspace Symbols" },
|
||||||
|
-- Other
|
||||||
|
{ "<leader>z", function() Snacks.zen() end, desc = "Toggle Zen Mode" },
|
||||||
|
{ "<leader>Z", function() Snacks.zen.zoom() end, desc = "Toggle Zoom" },
|
||||||
|
{ "<leader>'", function() Snacks.scratch() end, desc = "Toggle Scratch Buffer" },
|
||||||
|
{ "<leader>S", function() Snacks.scratch.select() end, desc = "Select Scratch Buffer" },
|
||||||
|
{ "<leader>n", function() Snacks.notifier.show_history() end, desc = "Notification History" },
|
||||||
|
{ "<leader>bd", function() Snacks.bufdelete() end, desc = "Delete Buffer" },
|
||||||
|
{ "<leader>cR", function() Snacks.rename.rename_file() end, desc = "Rename File" },
|
||||||
|
{ "<leader>gB", function() Snacks.gitbrowse() end, desc = "Git Browse", mode = { "n", "v" } },
|
||||||
|
{ "<leader>gG", function() Snacks.lazygit() end, desc = "Lazygit" },
|
||||||
|
{ "<leader>un", function() Snacks.notifier.hide() end, desc = "Dismiss All Notifications" },
|
||||||
|
{ "<leader>bl", function() Snacks.git.blame_line() end, desc = "Git Blame Line" },
|
||||||
|
{ "<c-/>", function() Snacks.terminal() end, desc = "Toggle Terminal" },
|
||||||
|
{ "<c-_>", function() Snacks.terminal() end, desc = "which_key_ignore" },
|
||||||
|
{ "]]", function() Snacks.words.jump(vim.v.count1) end, desc = "Next Reference", mode = { "n", "t" } },
|
||||||
|
{ "[[", function() Snacks.words.jump(-vim.v.count1) end, desc = "Prev Reference", mode = { "n", "t" } },
|
||||||
|
{
|
||||||
|
"<leader>N",
|
||||||
|
desc = "Neovim News",
|
||||||
|
function()
|
||||||
|
Snacks.win({
|
||||||
|
file = vim.api.nvim_get_runtime_file("doc/news.txt", false)[1],
|
||||||
|
width = 0.6,
|
||||||
|
height = 0.6,
|
||||||
|
wo = {
|
||||||
|
spell = false,
|
||||||
|
wrap = false,
|
||||||
|
signcolumn = "yes",
|
||||||
|
statuscolumn = " ",
|
||||||
|
conceallevel = 3,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
init = function()
|
||||||
|
vim.api.nvim_create_autocmd("User", {
|
||||||
|
pattern = "VeryLazy",
|
||||||
|
callback = function()
|
||||||
|
-- Setup some globals for debugging (lazy-loaded)
|
||||||
|
_G.dd = function(...)
|
||||||
|
Snacks.debug.inspect(...)
|
||||||
|
end
|
||||||
|
_G.bt = function()
|
||||||
|
Snacks.debug.backtrace()
|
||||||
|
end
|
||||||
|
vim.print = _G.dd -- Override print to use snacks for `:=` command
|
||||||
|
|
||||||
|
-- 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,
|
||||||
|
}
|
||||||
|
}
|
17
nvim/.config/nvim/lua/plugins/sql.lua
Normal file
17
nvim/.config/nvim/lua/plugins/sql.lua
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
return {
|
||||||
|
'kristijanhusak/vim-dadbod-ui',
|
||||||
|
dependencies = {
|
||||||
|
{ 'tpope/vim-dadbod', lazy = true },
|
||||||
|
{ 'kristijanhusak/vim-dadbod-completion', ft = { 'sql', 'mysql', 'plsql' }, lazy = true },
|
||||||
|
},
|
||||||
|
cmd = {
|
||||||
|
'DBUI',
|
||||||
|
'DBUIToggle',
|
||||||
|
'DBUIAddConnection',
|
||||||
|
'DBUIFindBuffer',
|
||||||
|
},
|
||||||
|
init = function()
|
||||||
|
-- Your DBUI configuration
|
||||||
|
vim.g.db_ui_use_nerd_fonts = 1
|
||||||
|
end,
|
||||||
|
}
|
5
nvim/.config/nvim/lua/plugins/tardis.lua
Normal file
5
nvim/.config/nvim/lua/plugins/tardis.lua
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
return {
|
||||||
|
'fredeeb/tardis.nvim',
|
||||||
|
dependencies = { 'nvim-lua/plenary.nvim' },
|
||||||
|
config = true,
|
||||||
|
}
|
28
nvim/.config/nvim/lua/plugins/telescope-tabs.lua
Normal file
28
nvim/.config/nvim/lua/plugins/telescope-tabs.lua
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
local function get_tab_idx(tab_id)
|
||||||
|
for i, tabnr in ipairs(vim.api.nvim_list_tabpages()) do
|
||||||
|
if tabnr == tab_id then
|
||||||
|
return i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return -1
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
'LukasPietzschmann/telescope-tabs',
|
||||||
|
dependencies = { 'nvim-telescope/telescope.nvim' },
|
||||||
|
lazy = true,
|
||||||
|
config = function()
|
||||||
|
require 'telescope-tabs'.setup {
|
||||||
|
entry_formatter = function(tab_id, buffer_ids, file_names, file_paths, is_current)
|
||||||
|
local cwd = vim.fn.getcwd(-1, get_tab_idx(tab_id))
|
||||||
|
local entry_string = table.concat(file_names, ', ')
|
||||||
|
return string.format('%d: %s %s%s', tab_id, cwd, entry_string, is_current and ' <' or '')
|
||||||
|
end,
|
||||||
|
entry_ordinal = function(tab_id, buffer_ids, file_names, file_paths, is_current)
|
||||||
|
local cwd = vim.fn.getcwd(-1, get_tab_idx(tab_id))
|
||||||
|
local entry_string = table.concat(file_names, ', ')
|
||||||
|
return string.format('%s %s', cwd, entry_string)
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
}
|
71
nvim/.config/nvim/lua/plugins/telescope.lua
Normal file
71
nvim/.config/nvim/lua/plugins/telescope.lua
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
return {
|
||||||
|
{ -- Fuzzy Finder (files, lsp, etc)
|
||||||
|
'nvim-telescope/telescope.nvim',
|
||||||
|
event = 'VimEnter',
|
||||||
|
branch = '0.1.x',
|
||||||
|
dependencies = {
|
||||||
|
'nvim-lua/plenary.nvim',
|
||||||
|
{ -- If encountering errors, see telescope-fzf-native README for install instructions
|
||||||
|
'nvim-telescope/telescope-fzf-native.nvim',
|
||||||
|
build = 'make',
|
||||||
|
cond = function()
|
||||||
|
return vim.fn.executable 'make' == 1
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{ 'nvim-telescope/telescope-ui-select.nvim' },
|
||||||
|
|
||||||
|
|
||||||
|
-- change directory with telescope from a list of directories
|
||||||
|
{
|
||||||
|
"SalOrak/whaler",
|
||||||
|
opts = {
|
||||||
|
directories = { "/home/lupan/src" },
|
||||||
|
oneoff_directories = { "/home/lupan/dotfiles" },
|
||||||
|
auto_file_explorer = false,
|
||||||
|
auto_cwd = true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Icons, requires Nerd font.
|
||||||
|
{ 'nvim-tree/nvim-web-devicons' },
|
||||||
|
|
||||||
|
'davvid/telescope-git-grep.nvim',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
local telescope = require 'telescope'
|
||||||
|
-- To list available key bindings inside given telescope picker:
|
||||||
|
-- - Insert mode: <c-/>
|
||||||
|
-- - Normal mode: ?
|
||||||
|
telescope.setup {
|
||||||
|
extensions = {
|
||||||
|
['ui-select'] = {
|
||||||
|
require('telescope.themes').get_dropdown(),
|
||||||
|
},
|
||||||
|
whaler = {
|
||||||
|
directories = { "/home/lupan/src" },
|
||||||
|
oneoff_directories = { "/home/lupan/dotfiles" },
|
||||||
|
auto_file_explorer = false,
|
||||||
|
auto_cwd = true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
pcall(telescope.load_extension, 'fzf')
|
||||||
|
pcall(telescope.load_extension, 'ui-select')
|
||||||
|
pcall(telescope.load_extension, 'whaler')
|
||||||
|
pcall(telescope.load_extension, 'git_grep')
|
||||||
|
|
||||||
|
-- See `:help telescope.builtin`
|
||||||
|
local builtin = require 'telescope.builtin'
|
||||||
|
vim.keymap.set('n', '<leader>sT', builtin.builtin, { desc = '[S]earch [S]elect Telescope' })
|
||||||
|
vim.keymap.set('n', '<leader>sr', builtin.resume, { desc = '[S]earch [R]esume' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>s.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
|
||||||
|
vim.keymap.set('n', '<leader>sL', function() telescope.extensions.whaler.whaler() end,
|
||||||
|
{ desc = '[S]earch with wha[L]er' })
|
||||||
|
vim.keymap.set('n', '<leader>gw', function() telescope.extensions.git_grep.grep() end,
|
||||||
|
{ desc = '[G]it grep current [W]ord' })
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
25
nvim/.config/nvim/lua/plugins/tmux.lua
Normal file
25
nvim/.config/nvim/lua/plugins/tmux.lua
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
'aserowy/tmux.nvim',
|
||||||
|
opts = {
|
||||||
|
navigation = {
|
||||||
|
enable_default_keybindings = false,
|
||||||
|
},
|
||||||
|
resize = {
|
||||||
|
enable_default_keybindings = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{ '<M-h>', [[<cmd>lua require("tmux").move_left()<cr>]] },
|
||||||
|
{ '<M-j>', [[<cmd>lua require("tmux").move_bottom()<cr>]] },
|
||||||
|
{ '<M-k>', [[<cmd>lua require("tmux").move_top()<cr>]] },
|
||||||
|
{ '<M-l>', [[<cmd>lua require("tmux").move_right()<cr>]] },
|
||||||
|
{ '<M-n>', [[<cmd>lua require("tmux").next_window()<cr>]] },
|
||||||
|
{ '<M-p>', [[<cmd>lua require("tmux").previous_window()<cr>]] },
|
||||||
|
{ '<M-H>', [[<cmd>lua require("tmux").resize_left()<cr>]] },
|
||||||
|
{ '<M-J>', [[<cmd>lua require("tmux").resize_bottom()<cr>]] },
|
||||||
|
{ '<M-K>', [[<cmd>lua require("tmux").resize_top()<cr>]] },
|
||||||
|
{ '<M-L>', [[<cmd>lua require("tmux").resize_right()<cr>]] },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
9
nvim/.config/nvim/lua/plugins/toggleterm.lua
Normal file
9
nvim/.config/nvim/lua/plugins/toggleterm.lua
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
return {
|
||||||
|
'akinsho/toggleterm.nvim',
|
||||||
|
version = '*',
|
||||||
|
config = true,
|
||||||
|
keys = {
|
||||||
|
{ '<F2>', '<cmd>ToggleTerm size=25<CR>', mode = { 'n', 'i', 't', }, },
|
||||||
|
{ '<C-w>', [[<C-\><C-n><C-w>]], mode = 't' },
|
||||||
|
}
|
||||||
|
}
|
95
nvim/.config/nvim/lua/plugins/treesitter.lua
Normal file
95
nvim/.config/nvim/lua/plugins/treesitter.lua
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
return {
|
||||||
|
|
||||||
|
{ -- Highlight, edit, and navigate code
|
||||||
|
'nvim-treesitter/nvim-treesitter',
|
||||||
|
dependencies = {
|
||||||
|
'nvim-treesitter/nvim-treesitter-textobjects',
|
||||||
|
'nvim-orgmode/orgmode', -- as configured together
|
||||||
|
'vrischmann/tree-sitter-templ',
|
||||||
|
"nushell/tree-sitter-nu", -- additional parser
|
||||||
|
},
|
||||||
|
build = ':TSUpdate',
|
||||||
|
config = function()
|
||||||
|
-- See `:help nvim-treesitter`
|
||||||
|
local org = require('orgmode')
|
||||||
|
|
||||||
|
---@diagnostic disable-next-line: missing-fields
|
||||||
|
require('nvim-treesitter.configs').setup {
|
||||||
|
ensure_installed = { 'c', 'commonlisp', 'cpp', 'go', 'haskell', 'lua', 'python', 'rust', 'tsx', 'templ', 'typescript', 'vimdoc', 'vim' },
|
||||||
|
auto_install = false,
|
||||||
|
highlight = {
|
||||||
|
enable = true,
|
||||||
|
additional_vim_regex_highlighting = { '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',
|
||||||
|
['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>a'] = '@parameter.inner',
|
||||||
|
},
|
||||||
|
swap_previous = {
|
||||||
|
['<leader>A'] = '@parameter.inner',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
org.setup({
|
||||||
|
org_agenda_files = { '~/org/*.org' },
|
||||||
|
org_default_notes_file = '~/org/capture.org',
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
}
|
12
nvim/.config/nvim/lua/plugins/yankbank.lua
Normal file
12
nvim/.config/nvim/lua/plugins/yankbank.lua
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
return {
|
||||||
|
"ptdewey/yankbank-nvim",
|
||||||
|
dependencies = "kkharji/sqlite.lua",
|
||||||
|
config = function()
|
||||||
|
require('yankbank').setup({
|
||||||
|
persist_type = "sqlite",
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
keys = {
|
||||||
|
{ "<leader>yb", "<cmd>YankBank<CR>", desc = "Yank[B]ank" },
|
||||||
|
},
|
||||||
|
}
|
3
nvim/.config/nvim/snippets/go/snippets.lua
Normal file
3
nvim/.config/nvim/snippets/go/snippets.lua
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
return {
|
||||||
|
s("tr", { t "i18n.T(ctx, \"", i(1), t "\")" })
|
||||||
|
}
|
3
nvim/.config/nvim/snippets/lua/snippets.lua
Normal file
3
nvim/.config/nvim/snippets/lua/snippets.lua
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
return {
|
||||||
|
s("ct", t "-- TODO: ")
|
||||||
|
}
|
123
patches/dwm/config.h
Normal file
123
patches/dwm/config.h
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
|
||||||
|
/* appearance */
|
||||||
|
static const unsigned int borderpx = 2; /* border pixel of windows */
|
||||||
|
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 col_gray1[] = "#222222";
|
||||||
|
static const char col_gray2[] = "#444444";
|
||||||
|
static const char col_gray3[] = "#bbbbbb";
|
||||||
|
static const char col_gray4[] = "#eeeeee";
|
||||||
|
static const char col_blue[] = "#414868";
|
||||||
|
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 },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* tagging */
|
||||||
|
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
|
||||||
|
|
||||||
|
static const Rule rules[] = {
|
||||||
|
/* xprop(1):
|
||||||
|
* WM_CLASS(STRING) = instance, class
|
||||||
|
* WM_NAME(STRING) = title
|
||||||
|
*/
|
||||||
|
/* class instance title tags mask isfloating monitor */
|
||||||
|
{ "Gimp", NULL, NULL, 0, 1, -1 },
|
||||||
|
{ "Firefox", NULL, NULL, 1 << 8, 0, -1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* layout(s) */
|
||||||
|
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
|
||||||
|
static const int nmaster = 1; /* number of clients in master area */
|
||||||
|
static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
|
||||||
|
static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
|
||||||
|
|
||||||
|
static const Layout layouts[] = {
|
||||||
|
/* symbol arrange function */
|
||||||
|
{ "[]=", tile }, /* first entry is default */
|
||||||
|
{ "><>", NULL }, /* no layout function means floating behavior */
|
||||||
|
{ "[M]", monocle },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* key definitions */
|
||||||
|
#define MODKEY Mod4Mask
|
||||||
|
#define TAGKEYS(KEY,TAG) \
|
||||||
|
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
|
||||||
|
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
|
||||||
|
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
|
||||||
|
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
|
||||||
|
|
||||||
|
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
|
||||||
|
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
|
||||||
|
|
||||||
|
/* 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 *suspendcmd[] = { "systemctl", "suspend", NULL };
|
||||||
|
static const char *toggletheme[] = { "lupan-set-theme", "toggle", NULL };
|
||||||
|
|
||||||
|
static const Key keys[] = {
|
||||||
|
/* modifier key function argument */
|
||||||
|
{ 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, 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|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 } },
|
||||||
|
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
|
||||||
|
{ MODKEY, XK_comma, focusmon, {.i = -1 } },
|
||||||
|
{ MODKEY, XK_period, focusmon, {.i = +1 } },
|
||||||
|
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
|
||||||
|
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
|
||||||
|
TAGKEYS( XK_1, 0)
|
||||||
|
TAGKEYS( XK_2, 1)
|
||||||
|
TAGKEYS( XK_3, 2)
|
||||||
|
TAGKEYS( XK_4, 3)
|
||||||
|
TAGKEYS( XK_5, 4)
|
||||||
|
TAGKEYS( XK_6, 5)
|
||||||
|
TAGKEYS( XK_7, 6)
|
||||||
|
TAGKEYS( XK_8, 7)
|
||||||
|
TAGKEYS( XK_9, 8)
|
||||||
|
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* button definitions */
|
||||||
|
/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
|
||||||
|
static const Button buttons[] = {
|
||||||
|
/* click event mask button function argument */
|
||||||
|
{ ClkLtSymbol, 0, Button1, setlayout, {0} },
|
||||||
|
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
|
||||||
|
{ ClkWinTitle, 0, Button2, zoom, {0} },
|
||||||
|
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
|
||||||
|
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
|
||||||
|
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
|
||||||
|
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
|
||||||
|
{ ClkTagBar, 0, Button1, view, {0} },
|
||||||
|
{ ClkTagBar, 0, Button3, toggleview, {0} },
|
||||||
|
{ ClkTagBar, MODKEY, Button1, tag, {0} },
|
||||||
|
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
|
||||||
|
};
|
||||||
|
|
@ -1,231 +0,0 @@
|
|||||||
diff --git a/config.def.h b/config.def.h
|
|
||||||
index 91ab8ca..5bbc088 100644
|
|
||||||
--- a/config.def.h
|
|
||||||
+++ b/config.def.h
|
|
||||||
@@ -5,7 +5,7 @@
|
|
||||||
*
|
|
||||||
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
|
|
||||||
*/
|
|
||||||
-static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
|
|
||||||
+static char *font = "Iosevka Slab Light:size=12:antialias=true:autohint=true";
|
|
||||||
static int borderpx = 2;
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -95,35 +95,61 @@ unsigned int tabspaces = 8;
|
|
||||||
|
|
||||||
/* Terminal colors (16 first used in escape sequence) */
|
|
||||||
static const char *colorname[] = {
|
|
||||||
- /* 8 normal colors */
|
|
||||||
- "black",
|
|
||||||
- "red3",
|
|
||||||
- "green3",
|
|
||||||
- "yellow3",
|
|
||||||
- "blue2",
|
|
||||||
- "magenta3",
|
|
||||||
- "cyan3",
|
|
||||||
- "gray90",
|
|
||||||
-
|
|
||||||
- /* 8 bright colors */
|
|
||||||
- "gray50",
|
|
||||||
- "red",
|
|
||||||
- "green",
|
|
||||||
- "yellow",
|
|
||||||
- "#5c5cff",
|
|
||||||
- "magenta",
|
|
||||||
- "cyan",
|
|
||||||
- "white",
|
|
||||||
+ /* windi dark */
|
|
||||||
+ "#1f1f1f", /* 0: black */
|
|
||||||
+ "#ef4444", /* 1: red */
|
|
||||||
+ "#22c55e", /* 2: green */
|
|
||||||
+ "#eab308", /* 3: yellow */
|
|
||||||
+ "#3b82f6", /* 4: blue */
|
|
||||||
+ "#d946ef", /* 5: magenta */
|
|
||||||
+ "#06b6d4", /* 6: cyan */
|
|
||||||
+ "#f2f2f2", /* 7: white */
|
|
||||||
+ "#737373", /* 8: brblack */
|
|
||||||
+ "#fecaca", /* 9: brred */
|
|
||||||
+ "#bbf7d0", /* 10: brgreen */
|
|
||||||
+ "#fef08a", /* 11: bryellow */
|
|
||||||
+ "#bfdbfe", /* 12: brblue */
|
|
||||||
+ "#f5d0fe", /* 13: brmagenta*/
|
|
||||||
+ "#a5f3fc", /* 14: brcyan */
|
|
||||||
+ "#fafafa", /* 15: brwhite */
|
|
||||||
|
|
||||||
[255] = 0,
|
|
||||||
|
|
||||||
/* more colors can be added after 255 to use with DefaultXX */
|
|
||||||
- "#cccccc",
|
|
||||||
- "#555555",
|
|
||||||
- "gray90", /* default foreground colour */
|
|
||||||
- "black", /* default background colour */
|
|
||||||
+ "white",
|
|
||||||
+ "black",
|
|
||||||
+ "#E7E7E7", /* default foreground colour */
|
|
||||||
+ "#2C444D",
|
|
||||||
};
|
|
||||||
|
|
||||||
+/* Terminal colors for alternate (light) palette */
|
|
||||||
+static const char *altcolorname[] = {
|
|
||||||
+ /* windi light */
|
|
||||||
+ "#1b1b1b", /* 0: black */
|
|
||||||
+ "#b91c1c", /* 1: red */
|
|
||||||
+ "#15803d", /* 2: green */
|
|
||||||
+ "#a16207", /* 3: yellow */
|
|
||||||
+ "#1d4ed8", /* 4: blue */
|
|
||||||
+ "#a21caf", /* 5: magenta*/
|
|
||||||
+ "#0e7490", /* 6: cyan */
|
|
||||||
+ "#e9ecef", /* 7: white */
|
|
||||||
+ "#404040", /* 8: brblack */
|
|
||||||
+ "#ef4444", /* 9: brred */
|
|
||||||
+ "#22c55e", /* 10: brgreen */
|
|
||||||
+ "#eab308", /* 11: bryellow */
|
|
||||||
+ "#3b82f6", /* 12: brblue */
|
|
||||||
+ "#d946ef", /* 13: brmagenta */
|
|
||||||
+ "#06b6d4", /* 14: brcyan */
|
|
||||||
+ "#f2f2f2", /* 15: brwhite */
|
|
||||||
+
|
|
||||||
+ [255] = 0,
|
|
||||||
+
|
|
||||||
+ /* more colors can be added after 255 to use with DefaultXX */
|
|
||||||
+ "#00638a",
|
|
||||||
+ "#f2f2f2",
|
|
||||||
+ "#454545", /* default foreground colour */
|
|
||||||
+ "#f2f2f2",
|
|
||||||
+};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Default colors (colorname index)
|
|
||||||
@@ -201,6 +227,7 @@ static Shortcut shortcuts[] = {
|
|
||||||
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
|
|
||||||
{ ShiftMask, XK_Insert, selpaste, {.i = 0} },
|
|
||||||
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
|
|
||||||
+ { XK_ANY_MOD, XK_F6, swapcolors, {.i = 0} },
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
diff --git a/st.h b/st.h
|
|
||||||
index 519b9bd..c25b693 100644
|
|
||||||
--- a/st.h
|
|
||||||
+++ b/st.h
|
|
||||||
@@ -122,6 +122,7 @@ extern wchar_t *worddelimiters;
|
|
||||||
extern int allowaltscreen;
|
|
||||||
extern int allowwindowops;
|
|
||||||
extern char *termname;
|
|
||||||
+extern int usealtcolors;
|
|
||||||
extern unsigned int tabspaces;
|
|
||||||
extern unsigned int defaultfg;
|
|
||||||
extern unsigned int defaultbg;
|
|
||||||
diff --git a/x.c b/x.c
|
|
||||||
index 8a16faa..4b569df 100644
|
|
||||||
--- a/x.c
|
|
||||||
+++ b/x.c
|
|
||||||
@@ -55,6 +55,7 @@ static void clipcopy(const Arg *);
|
|
||||||
static void clippaste(const Arg *);
|
|
||||||
static void numlock(const Arg *);
|
|
||||||
static void selpaste(const Arg *);
|
|
||||||
+static void swapcolors(const Arg *);
|
|
||||||
static void zoom(const Arg *);
|
|
||||||
static void zoomabs(const Arg *);
|
|
||||||
static void zoomreset(const Arg *);
|
|
||||||
@@ -254,6 +255,8 @@ static char *opt_title = NULL;
|
|
||||||
|
|
||||||
static int oldbutton = 3; /* button event on startup: 3 = release */
|
|
||||||
|
|
||||||
+int usealtcolors = 0; /* 1 to use alternate palette */
|
|
||||||
+
|
|
||||||
void
|
|
||||||
clipcopy(const Arg *dummy)
|
|
||||||
{
|
|
||||||
@@ -292,6 +295,18 @@ numlock(const Arg *dummy)
|
|
||||||
win.mode ^= MODE_NUMLOCK;
|
|
||||||
}
|
|
||||||
|
|
||||||
+void
|
|
||||||
+swapcolors(const Arg *arg)
|
|
||||||
+{
|
|
||||||
+ int next = (arg->i == 'D') ? 0 : (arg->i == 'L') ? 1 : !usealtcolors;
|
|
||||||
+
|
|
||||||
+ if (next != usealtcolors) {
|
|
||||||
+ usealtcolors = next;
|
|
||||||
+ xloadcols();
|
|
||||||
+ redraw();
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void
|
|
||||||
zoom(const Arg *arg)
|
|
||||||
{
|
|
||||||
@@ -750,6 +765,11 @@ sixd_to_16bit(int x)
|
|
||||||
return x == 0 ? 0 : 0x3737 + 0x2828 * x;
|
|
||||||
}
|
|
||||||
|
|
||||||
+const char* getcolorname(int i)
|
|
||||||
+{
|
|
||||||
+ return (usealtcolors) ? altcolorname[i] : colorname[i];
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int
|
|
||||||
xloadcolor(int i, const char *name, Color *ncolor)
|
|
||||||
{
|
|
||||||
@@ -768,7 +788,7 @@ xloadcolor(int i, const char *name, Color *ncolor)
|
|
||||||
return XftColorAllocValue(xw.dpy, xw.vis,
|
|
||||||
xw.cmap, &color, ncolor);
|
|
||||||
} else
|
|
||||||
- name = colorname[i];
|
|
||||||
+ name = getcolorname(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return XftColorAllocName(xw.dpy, xw.vis, xw.cmap, name, ncolor);
|
|
||||||
@@ -791,8 +811,8 @@ xloadcols(void)
|
|
||||||
|
|
||||||
for (i = 0; i < dc.collen; i++)
|
|
||||||
if (!xloadcolor(i, NULL, &dc.col[i])) {
|
|
||||||
- if (colorname[i])
|
|
||||||
- die("could not allocate color '%s'\n", colorname[i]);
|
|
||||||
+ if (getcolorname(i))
|
|
||||||
+ die("could not allocate color '%s'\n", getcolorname(i));
|
|
||||||
else
|
|
||||||
die("could not allocate color %d\n", i);
|
|
||||||
}
|
|
||||||
@@ -1184,13 +1204,13 @@ xinit(int cols, int rows)
|
|
||||||
cursor = XCreateFontCursor(xw.dpy, mouseshape);
|
|
||||||
XDefineCursor(xw.dpy, xw.win, cursor);
|
|
||||||
|
|
||||||
- if (XParseColor(xw.dpy, xw.cmap, colorname[mousefg], &xmousefg) == 0) {
|
|
||||||
+ if (XParseColor(xw.dpy, xw.cmap, getcolorname(mousefg), &xmousefg) == 0) {
|
|
||||||
xmousefg.red = 0xffff;
|
|
||||||
xmousefg.green = 0xffff;
|
|
||||||
xmousefg.blue = 0xffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (XParseColor(xw.dpy, xw.cmap, colorname[mousebg], &xmousebg) == 0) {
|
|
||||||
+ if (XParseColor(xw.dpy, xw.cmap, getcolorname(mousebg), &xmousebg) == 0) {
|
|
||||||
xmousebg.red = 0x0000;
|
|
||||||
xmousebg.green = 0x0000;
|
|
||||||
xmousebg.blue = 0x0000;
|
|
||||||
@@ -2008,6 +2028,15 @@ usage(void)
|
|
||||||
" [stty_args ...]\n", argv0, argv0);
|
|
||||||
}
|
|
||||||
|
|
||||||
+void
|
|
||||||
+sig_usr_handler(int num)
|
|
||||||
+{
|
|
||||||
+ Arg a = { .i = (num == 10) ? 'D' : 'L' };
|
|
||||||
+ signal(num, sig_usr_handler);
|
|
||||||
+ swapcolors(&a);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
int
|
|
||||||
main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
@@ -2066,6 +2095,8 @@ run:
|
|
||||||
if (!opt_title)
|
|
||||||
opt_title = (opt_line || !opt_cmd) ? "st" : opt_cmd[0];
|
|
||||||
|
|
||||||
+ signal(SIGUSR1, sig_usr_handler);
|
|
||||||
+ signal(SIGUSR2, sig_usr_handler);
|
|
||||||
setlocale(LC_CTYPE, "");
|
|
||||||
XSetLocaleModifiers("");
|
|
||||||
cols = MAX(cols, 1);
|
|
@ -1,40 +0,0 @@
|
|||||||
# Selected colors from https://windicss.org/utilities/colors.html
|
|
||||||
|
|
||||||
colors = {
|
|
||||||
"sky": {
|
|
||||||
50: "#f0f9ff",
|
|
||||||
100: "#e0f2fe",
|
|
||||||
200: "#bae6fd",
|
|
||||||
300: "#7dd3fc",
|
|
||||||
400: "#38bdf8",
|
|
||||||
500: "#0ea5e9",
|
|
||||||
600: "#0284c7",
|
|
||||||
700: "#0369a1",
|
|
||||||
800: "#075985",
|
|
||||||
900: "#0c4a6e",
|
|
||||||
},
|
|
||||||
"indigo": {
|
|
||||||
50: "#eef2ff",
|
|
||||||
100: "#e0e7ff",
|
|
||||||
200: "#c7d2fe",
|
|
||||||
300: "#a5b4fc",
|
|
||||||
400: "#818cf8",
|
|
||||||
500: "#6366f1",
|
|
||||||
600: "#4f46e5",
|
|
||||||
700: "#4338ca",
|
|
||||||
800: "#3730a3",
|
|
||||||
900: "#312e81",
|
|
||||||
},
|
|
||||||
"blue-gray": {
|
|
||||||
50: "#f8fafc",
|
|
||||||
100: "#f1f5f9",
|
|
||||||
200: "#e2e8f0",
|
|
||||||
300: "#cbd5e1",
|
|
||||||
400: "#94a3b8",
|
|
||||||
500: "#64748b",
|
|
||||||
600: "#475569",
|
|
||||||
700: "#334155",
|
|
||||||
800: "#1e293b",
|
|
||||||
900: "#0f172a",
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,170 +0,0 @@
|
|||||||
from libqtile import bar, layout, qtile, widget
|
|
||||||
from libqtile.config import DropDown, Group, Key, KeyChord, ScratchPad, Screen
|
|
||||||
from libqtile.lazy import lazy
|
|
||||||
|
|
||||||
from monitors import list_monitors
|
|
||||||
from themes import apply_theme, subtheme, theme, toggle_theme
|
|
||||||
|
|
||||||
mod = "mod4"
|
|
||||||
terminal = "alacritty"
|
|
||||||
|
|
||||||
hdpi_sizes = dict(size=46, fontsize=26)
|
|
||||||
hd_sizes = dict(size=32, fontsize=18)
|
|
||||||
|
|
||||||
def sizes(monitor):
|
|
||||||
hdpi = monitor is None or max(monitor.width, monitor.height) > 2000
|
|
||||||
return hdpi_sizes if hdpi else hd_sizes
|
|
||||||
|
|
||||||
widget_defaults = dict(
|
|
||||||
font="Iosevka Slab Light",
|
|
||||||
fontsize=hdpi_sizes["fontsize"],
|
|
||||||
padding=5,
|
|
||||||
foreground=theme["foreground"],
|
|
||||||
)
|
|
||||||
|
|
||||||
keys = []
|
|
||||||
|
|
||||||
group_names = "1234567890"
|
|
||||||
groups = [Group(name) for name in group_names]
|
|
||||||
keys.extend([Key([mod], name, lazy.group[name].toscreen(toggle=False), desc=f"Switch to group {name}") for name in group_names])
|
|
||||||
keys.extend([Key([mod, "shift"], name, lazy.window.togroup(name), desc=f"Move window to group {name}") for name in group_names])
|
|
||||||
|
|
||||||
groups.append(
|
|
||||||
ScratchPad("scratchpad", [
|
|
||||||
DropDown("term", terminal),
|
|
||||||
DropDown("thunar", "thunar", on_focus_lost_hide=False),
|
|
||||||
DropDown("qtile shell", [terminal, '-e', 'qtile', 'shell']),
|
|
||||||
])
|
|
||||||
)
|
|
||||||
|
|
||||||
keys.extend([
|
|
||||||
Key([mod], "F1", lazy.group["scratchpad"].dropdown_toggle("term")),
|
|
||||||
Key([mod], "F2", lazy.group["scratchpad"].dropdown_toggle("thunar")),
|
|
||||||
Key([mod], "F3", lazy.group["scratchpad"].dropdown_toggle("qtile shell")),
|
|
||||||
])
|
|
||||||
|
|
||||||
floating_layout = layout.Floating(float_rules=[*layout.Floating.default_float_rules],
|
|
||||||
**subtheme("border_width", "margin", "border_focus", "border_normal"))
|
|
||||||
|
|
||||||
layouts = [
|
|
||||||
layout.Max(),
|
|
||||||
layout.Columns(**subtheme("border_width", "margin", "border_focus", "border_normal")),
|
|
||||||
layout.MonadTall(**subtheme("border_width", "margin", "border_focus", "border_normal")),
|
|
||||||
layout.MonadWide(**subtheme("border_width", "margin", "border_focus", "border_normal")),
|
|
||||||
layout.Matrix(**subtheme("border_width", "margin", "border_focus", "border_normal")),
|
|
||||||
layout.Zoomy(columnwidth=200, **subtheme("border_width", "margin", "border_focus", "border_normal")),
|
|
||||||
]
|
|
||||||
|
|
||||||
monitors = {i: m for i, m in enumerate(list_monitors())}
|
|
||||||
|
|
||||||
def createBar(monitor=None):
|
|
||||||
s = sizes(monitor)
|
|
||||||
return bar.Bar([
|
|
||||||
widget.Spacer(10),
|
|
||||||
widget.CurrentLayout(fmt="[{:3.3}]", fontsize=s["fontsize"]),
|
|
||||||
widget.Spacer(10),
|
|
||||||
widget.GroupBox(highlight_method='block',
|
|
||||||
fontsize=s["fontsize"],
|
|
||||||
padding_y=10,
|
|
||||||
active=theme["foreground"],
|
|
||||||
**subtheme("inactive", "this_current_screen_border", "this_screen_border",
|
|
||||||
"other_current_screen_border", "other_screen_border")),
|
|
||||||
widget.Spacer(5),
|
|
||||||
widget.WindowCount(text_format="({num})", foreground=theme["inactive"]),
|
|
||||||
widget.Spacer(10),
|
|
||||||
widget.WindowName(fontsize=s["fontsize"]),
|
|
||||||
widget.Spacer(),
|
|
||||||
widget.WidgetBox(
|
|
||||||
text_open="▶",
|
|
||||||
text_closed="◀",
|
|
||||||
widgets=[
|
|
||||||
widget.Spacer(10),
|
|
||||||
widget.NetGraph(border_color=theme["inactive"], graph_color=theme["foreground"]),
|
|
||||||
widget.Spacer(10),
|
|
||||||
widget.HDDBusyGraph(border_color=theme["inactive"], graph_color=theme["foreground"]),
|
|
||||||
widget.Spacer(10),
|
|
||||||
widget.CPUGraph(border_color=theme["inactive"], graph_color=theme["foreground"]),
|
|
||||||
widget.Spacer(10),
|
|
||||||
widget.ThermalSensor(fontsize=s["fontsize"]),
|
|
||||||
]),
|
|
||||||
widget.Spacer(10),
|
|
||||||
widget.PulseVolume(fontsize=s["fontsize"]),
|
|
||||||
widget.Spacer(10),
|
|
||||||
widget.Clock(fontsize=s["fontsize"]),
|
|
||||||
widget.Spacer(10),
|
|
||||||
], s["size"], background=theme["background"])
|
|
||||||
|
|
||||||
screens = [Screen(top=createBar(monitors.get(i))) for i in range(4)]
|
|
||||||
|
|
||||||
#fake_screens = [Screen(top=createBar(), x=x, y=y, width=1920, height=1080) for x, y in [(0, 0), (1920, 0), (0, 1080), (1920, 1080)]]
|
|
||||||
|
|
||||||
keys.extend([
|
|
||||||
Key([mod, "shift"], "Return", lazy.spawn(terminal), desc="Run terminal "),
|
|
||||||
Key([mod, "control"], "n", lazy.spawn("emacsclient -n -c"), desc="Open new Emacs frame"),
|
|
||||||
Key([mod], "p", lazy.spawn(["rofi", "-theme", theme["rofi_theme"], "-kb-row-tab", "", "-show", "run"]),
|
|
||||||
desc="Run command"),
|
|
||||||
Key([mod, "shift"], "p", lazy.spawn(["rofi", "-theme", theme["rofi_theme"], "-kb-row-tab", "", "-show", "combi"]),
|
|
||||||
desc="Run rofi combi"),
|
|
||||||
|
|
||||||
Key([mod], "Tab", lazy.next_layout(), desc="Next layout"),
|
|
||||||
Key([mod, "shift"], "m", lazy.to_layout_index(0), desc="Switch to Max layout"),
|
|
||||||
Key([mod, "shift"], "c", lazy.to_layout_index(1), desc="Switch to Columns layout"),
|
|
||||||
Key([mod, "shift"], "t", lazy.to_layout_index(2), desc="Switch to MonadTall layout"),
|
|
||||||
Key([mod, "shift"], "w", lazy.to_layout_index(3), desc="Switch to MonadWide layout"),
|
|
||||||
Key([mod, "shift"], "r", lazy.to_layout_index(4), desc="Switch to Matrix layout"),
|
|
||||||
Key([mod, "shift"], "z", lazy.to_layout_index(5), desc="Switch to Zoomy layout"),
|
|
||||||
|
|
||||||
Key([mod], "a", lazy.screen.toggle_group(), desc="Toggle between current and previous group"),
|
|
||||||
Key([mod], "h", lazy.layout.left(), desc="Focus window on the left of current one"),
|
|
||||||
Key([mod], "j", lazy.layout.down(), desc="Focus window below of current one"),
|
|
||||||
Key([mod], "k", lazy.layout.up(), desc="Focus window above of current one"),
|
|
||||||
Key([mod], "l", lazy.layout.right(), desc="Focus window on the right of current one"),
|
|
||||||
Key([mod, "shift"], "h", lazy.layout.shuffle_left(), desc="Shuffle current window with the one on the left"),
|
|
||||||
Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Shuffle current window with the one below"),
|
|
||||||
Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Shuffle current window with the one above"),
|
|
||||||
Key([mod, "shift"], "l", lazy.layout.shuffle_right(), desc="Shuffle current window with the one on the right"),
|
|
||||||
Key([mod, "control"], "h", lazy.layout.grow_left(), desc="Grow current window on its left"),
|
|
||||||
Key([mod, "control"], "j", lazy.layout.grow_down(), desc="Grow current window on its bottom"),
|
|
||||||
Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow current window on its top"),
|
|
||||||
Key([mod, "control"], "l", lazy.layout.grow_right(), desc="Grow current window on its right"),
|
|
||||||
Key([mod], "Return", lazy.layout.toggle_split(), desc="Toggle split"),
|
|
||||||
Key([mod, "shift", "control"], "h", lazy.layout.swap_column_left(), desc="Swap column left"),
|
|
||||||
Key([mod, "shift", "control"], "l", lazy.layout.swap_column_right(), desc="Swap column right"),
|
|
||||||
|
|
||||||
Key([mod], "g", lazy.layout.grow(), desc="Grow focused window in monad mode"),
|
|
||||||
Key([mod], "s", lazy.layout.shrink(), desc="Shrink focused window in monad mode"),
|
|
||||||
Key([mod], "r", lazy.layout.reset(), desc="Reset main area size"),
|
|
||||||
Key([mod], "u", lazy.layout.flip(), desc="Flip side of secondary windows"),
|
|
||||||
Key([mod], "m", lazy.layout.maximize(), desc="Maximize/minimize focused window in monad mode"),
|
|
||||||
|
|
||||||
Key([mod], "i", lazy.screen.prev_group(), desc="Switch to prev group"),
|
|
||||||
Key([mod], "o", lazy.screen.next_group(), desc="Switch to next group"),
|
|
||||||
Key([mod, "control"], "i", lazy.prev_screen(), desc="Switch to prev screen"),
|
|
||||||
Key([mod, "control"], "o", lazy.next_screen(), desc="Switch to next screen"),
|
|
||||||
|
|
||||||
Key([mod], "x", lazy.window.kill(), desc="Kill focused window"),
|
|
||||||
Key([mod], "t", lazy.window.toggle_floating(), desc="Toggle window floating"),
|
|
||||||
Key([mod], "e", lazy.window.toggle_maximize(), desc="Toggle window maximize"),
|
|
||||||
Key([mod], "n", lazy.layout.normalize(), desc="Normalize layout"),
|
|
||||||
Key([mod], "f", lazy.window.toggle_fullscreen(), desc="Toggle window fullscreen"),
|
|
||||||
Key([mod], "y", lazy.window.toggle_minimize(), desc="Minimize focused window in monad mode"),
|
|
||||||
Key([mod, "shift"], "F6", toggle_theme, desc="Kill focused window"),
|
|
||||||
|
|
||||||
KeyChord([mod], "semicolon", [
|
|
||||||
Key([], "f", lazy.spawn("firefox"), desc="Open Firefox"),
|
|
||||||
Key([], "n", lazy.spawn("emacsclient -n -c"), desc="Open new Emacs frame"),
|
|
||||||
Key([], "t", lazy.spawn("thunderbird"), desc="Open Thunderbird"),
|
|
||||||
Key(["shift"], "h", lazy.spawn("systemctl hibernate")),
|
|
||||||
Key(["shift"], "l", lazy.spawn("slock")),
|
|
||||||
Key(["shift"], "s", lazy.spawn("systemctl suspend")),
|
|
||||||
]),
|
|
||||||
|
|
||||||
Key([mod, "shift"], "q", lazy.shutdown(), desc="Quit qtile"),
|
|
||||||
Key([mod], "q", lazy.reload_config(), desc="Reload qtile config"),
|
|
||||||
])
|
|
||||||
|
|
||||||
keys.extend([Key([mod, "control"], str(i + 1), lazy.to_screen(i), desc=f"Switch to screen {i}") for i in range(len(screens))])
|
|
||||||
|
|
||||||
cursor_warp = True
|
|
||||||
|
|
||||||
apply_theme(qtile)
|
|
@ -1,13 +0,0 @@
|
|||||||
import re
|
|
||||||
import subprocess
|
|
||||||
from collections import namedtuple
|
|
||||||
|
|
||||||
Monitor = namedtuple('Monitor', ["name", "width", "height"])
|
|
||||||
|
|
||||||
monitor_line = re.compile(r"^ *[0-9]+: +[+*]*([-A-Za-z0-9]+) +([0-9]+)/([0-9]+)x([0-9]+)/([0-9]+)\+([0-9]+)\+([0-9]+) +([-A-Za-z0-9]+)")
|
|
||||||
|
|
||||||
def list_monitors():
|
|
||||||
p = subprocess.run(["xrandr", "--listmonitors"], capture_output=True, encoding='UTF-8')
|
|
||||||
return [Monitor(name=m.group(1), width=int(m.group(2)), height=int(m.group(4)))
|
|
||||||
for m in map(monitor_line.match, p.stdout.split('\n'))
|
|
||||||
if m is not None]
|
|
@ -1,68 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
from colors import colors
|
|
||||||
|
|
||||||
from libqtile.lazy import lazy
|
|
||||||
|
|
||||||
theme_file = os.path.join(os.path.dirname(__file__), "theme.txt")
|
|
||||||
|
|
||||||
def write_theme(name):
|
|
||||||
with open(theme_file, "w") as f:
|
|
||||||
f.write(name)
|
|
||||||
|
|
||||||
def read_theme(file_name):
|
|
||||||
try:
|
|
||||||
with open(file_name) as f:
|
|
||||||
return f.read().strip()
|
|
||||||
except FileNotFoundError:
|
|
||||||
return "dark"
|
|
||||||
|
|
||||||
is_dark = read_theme(theme_file) == "dark"
|
|
||||||
|
|
||||||
def light_dark(light, dark):
|
|
||||||
return dark if is_dark else light
|
|
||||||
|
|
||||||
@lazy.function
|
|
||||||
def toggle_theme(qtile):
|
|
||||||
global is_dark, theme
|
|
||||||
name = light_dark("dark", "light")
|
|
||||||
write_theme(name)
|
|
||||||
is_dark = name == "dark"
|
|
||||||
theme = get_theme()
|
|
||||||
apply_theme(qtile)
|
|
||||||
|
|
||||||
background = [colors["sky"][800], colors["sky"][900]]
|
|
||||||
|
|
||||||
def get_theme():
|
|
||||||
return dict(
|
|
||||||
border_width=4,
|
|
||||||
margin=4,
|
|
||||||
root_background=light_dark(colors["blue-gray"][300], colors["blue-gray"][700]),
|
|
||||||
background=background,
|
|
||||||
foreground=colors["blue-gray"][300],
|
|
||||||
inactive=colors["blue-gray"][400],
|
|
||||||
this_current_screen_border=colors["sky"][700],
|
|
||||||
this_screen_border=colors["blue-gray"][600],
|
|
||||||
other_current_screen_border=background,
|
|
||||||
other_screen_border=background,
|
|
||||||
border_focus=colors["indigo"][500],
|
|
||||||
border_normal=colors["blue-gray"][800],
|
|
||||||
alacritty_theme=light_dark("gogh-nord-light", "gogh-tin"),
|
|
||||||
emacs_theme=light_dark("solarized-light", "solarized-dark"),
|
|
||||||
gtk_theme=light_dark("Materia-light", "Materia-dark"),
|
|
||||||
rofi_theme=light_dark("Arc", "Arc-Dark"),
|
|
||||||
)
|
|
||||||
|
|
||||||
theme = get_theme()
|
|
||||||
|
|
||||||
def subtheme(*names):
|
|
||||||
return {name: theme[name] for name in names}
|
|
||||||
|
|
||||||
def apply_theme(qtile):
|
|
||||||
qtile.cmd_spawn(["xsetroot", "-solid", theme["root_background"]])
|
|
||||||
qtile.cmd_spawn(["sed", "-i", f"s/^colors: [*].*/colors: *{theme['alacritty_theme']}/",
|
|
||||||
os.path.expanduser("~/.config/alacritty/alacritty.yml")])
|
|
||||||
qtile.cmd_spawn(["emacsclient", "--eval", f"(my-select-theme '{theme['emacs_theme']})"])
|
|
||||||
qtile.cmd_spawn(["sed", "-i", "-E", f"s#(Net/ThemeName) .*#\\1 \"{theme['gtk_theme']}\"#",
|
|
||||||
os.path.expanduser("~/.config/xsettingsd/xsettingsd.conf")])
|
|
||||||
qtile.cmd_spawn(["pkill", "-HUP", "-x", "xsettingsd"])
|
|
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')
|
||||||
|
|
16
shell/.config/shellconfig/aliases.sh
Normal file
16
shell/.config/shellconfig/aliases.sh
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
alias v=nvim
|
||||||
|
alias ll='ls -l'
|
||||||
|
alias ta='tmux attach -t'
|
||||||
|
alias tl='tmux list-sessions'
|
||||||
|
alias tn='tmux new -s'
|
||||||
|
alias fv='fzf --preview="bat --color=always --theme=Nord {}" --bind="enter:become(nvim {})"'
|
||||||
|
alias rgh='rg -.'
|
||||||
|
alias fdh='fd -H'
|
||||||
|
|
||||||
|
if 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'
|
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
|
@ -1,6 +0,0 @@
|
|||||||
Directory for plugins. Checkout here
|
|
||||||
|
|
||||||
1. zsh-autosuggestions (https://github.com/zsh-users/zsh-autosuggestions)
|
|
||||||
2. zsh-syntax-highlighting (https://github.com/zsh-users/zsh-syntax-highlighting)
|
|
||||||
|
|
||||||
or install then with package manager in /usr/share/zsh/plugins/ and symlink.
|
|
1
shell/.haskeline
Normal file
1
shell/.haskeline
Normal file
@ -0,0 +1 @@
|
|||||||
|
editMode: Vi
|
11
shell/.inputrc
Normal file
11
shell/.inputrc
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
set editing-mode vi
|
||||||
|
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,8 @@
|
|||||||
# for ssh logins, install and configure the libpam-umask package.
|
# for ssh logins, install and configure the libpam-umask package.
|
||||||
#umask 022
|
#umask 022
|
||||||
|
|
||||||
export EDITOR=emacsclient
|
export EDITOR=nvim
|
||||||
export VISUAL=emacsclient
|
export VISUAL=nvim
|
||||||
|
|
||||||
# if running bash
|
# if running bash
|
||||||
if [ -n "$BASH_VERSION" ]; then
|
if [ -n "$BASH_VERSION" ]; then
|
||||||
@ -27,5 +27,13 @@ done
|
|||||||
|
|
||||||
export PATH
|
export PATH
|
||||||
|
|
||||||
# start X at login
|
# start X or Hyprland at login
|
||||||
[[ -z "$DISPLAY" && "$XDG_VTNR" -eq 1 ]] && which /bin/sx > /dev/null && exec sx ~/.xsession
|
if [[ -z "$DISPLAY" && -z "$WAYLAND_DISPLAY" && "$XDG_VTNR" -eq 1 ]]; then
|
||||||
|
if which Hyprland > /dev/null && [ -d ~/.config/hypr ]; then
|
||||||
|
exec Hyprland
|
||||||
|
elif which river > /dev/null && [ -d ~/.config/river ]; then
|
||||||
|
exec river
|
||||||
|
elif which /usr/bin/sx > /dev/null; then
|
||||||
|
exec /usr/bin/sx ~/.xsession
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
@ -1,6 +1 @@
|
|||||||
# start X at login on first console or otherwise source ~/.profile
|
source ~/.profile
|
||||||
if [[ -z "$DISPLAY" && "$XDG_VTNR" -eq 1 ]] && which /bin/sx > /dev/null; then
|
|
||||||
exec sx ~/.xsession
|
|
||||||
else
|
|
||||||
source ~/.profile
|
|
||||||
fi
|
|
||||||
|
145
shell/.zshrc
145
shell/.zshrc
@ -1,3 +1,59 @@
|
|||||||
|
# Install zap:
|
||||||
|
# % cd ~/.local/share
|
||||||
|
# % git clone https://github.com/zap-zsh/zap.git --branch=release-v1
|
||||||
|
|
||||||
|
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 "jeffreytse/zsh-vi-mode"
|
||||||
|
|
||||||
|
autoload -Uz compinit
|
||||||
|
compinit
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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.
|
# History.
|
||||||
|
|
||||||
HISTFILE=${ZDOTDIR:-~}/.zsh_history
|
HISTFILE=${ZDOTDIR:-~}/.zsh_history
|
||||||
@ -13,95 +69,14 @@ setopt hist_reduce_blanks
|
|||||||
setopt inc_append_history
|
setopt inc_append_history
|
||||||
setopt share_history
|
setopt share_history
|
||||||
|
|
||||||
# Prompt.
|
# Convenience.
|
||||||
|
|
||||||
autoload -Uz vcs_info
|
bindkey -M vicmd '^[h' run-help
|
||||||
precmd () { vcs_info }
|
bindkey -M viins '^[h' run-help
|
||||||
setopt prompt_subst
|
|
||||||
zstyle ':vcs_info:git:*' formats '%F{magenta}(%b)%r%f '
|
|
||||||
zstyle ':vcs_info:*' enable git
|
|
||||||
PS1='%B%F{blue}%n@%m%f %F{green}%~%f%b ${vcs_info_msg_0_}%B%#%f%b '
|
|
||||||
RPROMPT='%(?..%B%F{red}%?%f%b)'
|
|
||||||
|
|
||||||
# Completion.
|
|
||||||
|
|
||||||
autoload -Uz compinit
|
|
||||||
compinit
|
|
||||||
zstyle ':completion:*' menu select
|
|
||||||
|
|
||||||
# Options.
|
|
||||||
|
|
||||||
setopt auto_cd
|
|
||||||
setopt extended_glob
|
|
||||||
setopt glob_complete
|
setopt glob_complete
|
||||||
setopt interactive_comments
|
setopt interactive_comments
|
||||||
setopt no_flow_control
|
|
||||||
WORDCHARS=
|
|
||||||
|
|
||||||
# Terminal title.
|
|
||||||
|
|
||||||
autoload -Uz add-zsh-hook
|
|
||||||
|
|
||||||
function xterm_title_precmd () {
|
|
||||||
print -Pn -- '\e]2;%n@%m %~\a'
|
|
||||||
}
|
|
||||||
|
|
||||||
function xterm_title_preexec () {
|
|
||||||
print -Pn -- '\e]2;%n@%m %~ %# ' && print -n -- "${(q)1}\a"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ "$TERM" == (alacritty*|gnome*|konsole*|putty*|rxvt*|screen*|tmux*|xterm*) ]]; then
|
|
||||||
add-zsh-hook -Uz precmd xterm_title_precmd
|
|
||||||
add-zsh-hook -Uz preexec xterm_title_preexec
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Vterm directory.
|
|
||||||
|
|
||||||
function vterm_printf () {
|
|
||||||
if [ -n "$TMUX" ] && ([ "${TERM%%-*}" = "tmux" ] || [ "${TERM%%-*}" = "screen" ] ); then
|
|
||||||
# Tell tmux to pass the escape sequences through
|
|
||||||
printf "\ePtmux;\e\e]%s\007\e\\" "$1"
|
|
||||||
elif [ "${TERM%%-*}" = "screen" ]; then
|
|
||||||
# GNU screen (screen, screen-256color, screen-256color-bce)
|
|
||||||
printf "\eP\e]%s\007\e\\" "$1"
|
|
||||||
else
|
|
||||||
printf "\e]%s\e\\" "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function vterm_prompt_end () {
|
|
||||||
vterm_printf "51;A$(pwd)";
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ "$INSIDE_EMACS" = 'vterm' ]]; then
|
|
||||||
add-zsh-hook -Uz chpwd vterm_prompt_end
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Plugins.
|
|
||||||
|
|
||||||
source_if_exists() {
|
|
||||||
[ -e "$1" ] && source "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=5,underline"
|
|
||||||
source_if_exists ~/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh
|
|
||||||
|
|
||||||
if source_if_exists ~/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh; then
|
|
||||||
ZSH_HIGHLIGHT_STYLES[comment]=fg=cyan,bold
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Directory stack and ls colors.
|
|
||||||
|
|
||||||
DIRSTACKSIZE=10
|
|
||||||
setopt auto_pushd pushd_minus pushd_silent pushd_to_home pushd_ignore_dups
|
|
||||||
|
|
||||||
eval $(dircolors)
|
|
||||||
|
|
||||||
# Aliases.
|
# Aliases.
|
||||||
|
|
||||||
alias dh='dirs -v'
|
for f in ~/.config/shellconfig/*.sh(N) ~/.config/shellconfig/*.zsh(N); do source "$f"; done
|
||||||
alias e='emacsclient -n'
|
|
||||||
alias history='history -i'
|
|
||||||
alias ls='ls --color=tty'
|
|
||||||
|
@ -1,79 +0,0 @@
|
|||||||
# Workspace
|
|
||||||
|
|
||||||
warp_pointer = 1
|
|
||||||
workspace_limit = 22
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
|
|
||||||
border_width = 3
|
|
||||||
color_focus = rgb:0e/74/90
|
|
||||||
#rgb:26/8b/d2
|
|
||||||
# rgb:6b/a8/a2
|
|
||||||
# rgb:2a/a1/98
|
|
||||||
#
|
|
||||||
color_unfocus = rgb:00/46/4a
|
|
||||||
#64/74/8b
|
|
||||||
tile_gap = 3
|
|
||||||
|
|
||||||
# Bar
|
|
||||||
|
|
||||||
bar_border[1] = rgb:4a/4a/4a
|
|
||||||
# rgb:0e/74/90
|
|
||||||
bar_color[1] = rgb:0c/4a/6e
|
|
||||||
#rgb:07/36/42
|
|
||||||
bar_font = Iosevka Slab Light:style=Regular:size=12:antialias=true
|
|
||||||
bar_font_color[1] = rgb:83/94/96
|
|
||||||
bar_font_color_selected[1] = black
|
|
||||||
bar_format = +< +N:+I +S +< %a %R +< +W
|
|
||||||
|
|
||||||
bar_border_width = 7
|
|
||||||
|
|
||||||
|
|
||||||
# Launch at start
|
|
||||||
|
|
||||||
autorun = ws[9]:firefox
|
|
||||||
|
|
||||||
# Programs
|
|
||||||
|
|
||||||
program[brightness_dec] = brightnessctl set 5%-
|
|
||||||
program[brightness_inc] = brightnessctl set 5%+
|
|
||||||
program[emacs] = emacs
|
|
||||||
program[emacsclient] = emacsclient -n -c
|
|
||||||
program[lock] = slock
|
|
||||||
program[mixer] = pavucontrol
|
|
||||||
program[suspend] = systemctl suspend
|
|
||||||
program[term] = alacritty
|
|
||||||
program[term2] = st
|
|
||||||
program[theme_dark] = lupan-set-theme dark
|
|
||||||
program[theme_faff] = lupan-set-theme faff
|
|
||||||
program[theme_light] = lupan-set-theme light
|
|
||||||
program[volume_dec] = pactl set-sink-volume @DEFAULT_SINK@ -10%
|
|
||||||
program[volume_inc] = pactl set-sink-volume @DEFAULT_SINK@ +10%
|
|
||||||
program[volume_mute] = pactl set-sink-mute @DEFAULT_SINK@ toggle
|
|
||||||
|
|
||||||
# Key bindings
|
|
||||||
|
|
||||||
modkey = Mod4
|
|
||||||
|
|
||||||
bind[brightness_dec] = XF86MonBrightnessDown
|
|
||||||
bind[brightness_inc] = XF86MonBrightnessUp
|
|
||||||
bind[emacs] = MOD+Shift+n
|
|
||||||
bind[emacsclient] = MOD+n
|
|
||||||
bind[mixer] = MOD+Control+p
|
|
||||||
bind[suspend] = MOD+Control+s
|
|
||||||
bind[term2] = MOD+Control+Return
|
|
||||||
bind[theme_dark] = MOD+Control+d
|
|
||||||
bind[theme_faff] = MOD+Control+f
|
|
||||||
bind[theme_light] = MOD+Control+l
|
|
||||||
bind[volume_dec] = XF86AudioLowerVolume
|
|
||||||
bind[volume_inc] = XF86AudioRaiseVolume
|
|
||||||
bind[volume_mute] = XF86AudioMute
|
|
||||||
|
|
||||||
bind[ws_prev] = MOD+i
|
|
||||||
bind[ws_next] = MOD+o
|
|
||||||
|
|
||||||
bind[mvrg_prev] = MOD+Shift+i
|
|
||||||
bind[mvrg_next] = MOD+Shift+o
|
|
||||||
|
|
||||||
bind[rg_prev] = MOD+Control+i
|
|
||||||
bind[rg_next] = MOD+Control+o
|
|
@ -1,13 +1,87 @@
|
|||||||
set -g status-bg colour246
|
set -g status-bg colour0
|
||||||
set -g status-fg colour235
|
set -g status-fg colour7
|
||||||
|
|
||||||
|
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 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 -g default-terminal "screen-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 on
|
||||||
set -g set-titles-string "[#S] #P:#W #T"
|
set -g set-titles-string "#H [#S]"
|
||||||
|
|
||||||
|
set -g status-justify centre
|
||||||
|
set -g status-left " #[fg=green]#[bg=green]#[fg=black] #H #[bg=default]#[fg=green]#[fg=default] #S"
|
||||||
|
set -g status-left-length 50
|
||||||
|
set -g status-right "#[fg=green]#[bg=green]#[fg=black] %H:%M #[bg=default]#[fg=green] "
|
||||||
|
set-window-option -g window-status-current-format '#[fg=green]#[bg=green]#[fg=black] #I:#W#F #[fg=green]#[bg=black]'
|
||||||
|
|
||||||
|
is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?\.?(view|n?vim?x?)(-wrapped)?(diff)?$'"
|
||||||
|
|
||||||
|
bind-key -n 'M-h' if-shell "$is_vim" 'send-keys M-h' 'select-pane -L'
|
||||||
|
bind-key -n 'M-j' if-shell "$is_vim" 'send-keys M-j' 'select-pane -D'
|
||||||
|
bind-key -n 'M-k' if-shell "$is_vim" 'send-keys M-k' 'select-pane -U'
|
||||||
|
bind-key -n 'M-l' if-shell "$is_vim" 'send-keys M-l' 'select-pane -R'
|
||||||
|
bind-key -n 'M-n' if-shell "$is_vim" 'send-keys M-n' 'select-window -n'
|
||||||
|
bind-key -n 'M-p' if-shell "$is_vim" 'send-keys M-p' 'select-window -p'
|
||||||
|
|
||||||
|
bind-key -T copy-mode-vi 'M-h' select-pane -L
|
||||||
|
bind-key -T copy-mode-vi 'M-j' select-pane -D
|
||||||
|
bind-key -T copy-mode-vi 'M-k' select-pane -U
|
||||||
|
bind-key -T copy-mode-vi 'M-l' select-pane -R
|
||||||
|
bind-key -T copy-mode-vi 'M-n' select-window -n
|
||||||
|
bind-key -T copy-mode-vi 'M-p' select-window -p
|
||||||
|
|
||||||
|
bind -n 'M-H' if-shell "$is_vim" 'send-keys M-H' 'resize-pane -L 1'
|
||||||
|
bind -n 'M-J' if-shell "$is_vim" 'send-keys M-J' 'resize-pane -D 1'
|
||||||
|
bind -n 'M-K' if-shell "$is_vim" 'send-keys M-K' 'resize-pane -U 1'
|
||||||
|
bind -n 'M-L' if-shell "$is_vim" 'send-keys M-L' 'resize-pane -R 1'
|
||||||
|
|
||||||
|
bind-key -T copy-mode-vi M-H resize-pane -L 1
|
||||||
|
bind-key -T copy-mode-vi M-J resize-pane -D 1
|
||||||
|
bind-key -T copy-mode-vi M-K resize-pane -U 1
|
||||||
|
bind-key -T copy-mode-vi M-L resize-pane -R 1
|
||||||
|
|
||||||
|
bind -n 'C-M-h' if-shell "$is_vim" 'send-keys C-M-h' 'swap-pane -s "{left-of}"'
|
||||||
|
bind -n 'C-M-j' if-shell "$is_vim" 'send-keys C-M-j' 'swap-pane -s "{down-of}"'
|
||||||
|
bind -n 'C-M-k' if-shell "$is_vim" 'send-keys C-M-k' 'swap-pane -s "{up-of}"'
|
||||||
|
bind -n 'C-M-l' if-shell "$is_vim" 'send-keys C-M-l' 'swap-pane -s "{right-of}"'
|
||||||
|
|
||||||
|
bind-key -T copy-mode-vi C-M-h swap-pane -s "{left-of}"
|
||||||
|
bind-key -T copy-mode-vi C-M-j swap-pane -s "{down-of}"
|
||||||
|
bind-key -T copy-mode-vi C-M-k swap-pane -s "{up-of}"
|
||||||
|
bind-key -T copy-mode-vi C-M-l swap-pane -s "{right-of}"
|
||||||
|
|
||||||
|
bind-key -n M-0 run-shell tmux-session-menu
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user