Compare commits
26 Commits
4866eb3f9c
...
wip
| Author | SHA1 | Date | |
|---|---|---|---|
| 4a698f6e1f | |||
| 195176678c | |||
| 71b7e78112 | |||
| 11e8870aed | |||
| 19a7dd6dee | |||
| e734764630 | |||
| a09a464f0c | |||
| 5018c78956 | |||
| ce19fa1371 | |||
| 95fdacdd31 | |||
| cef92f13c9 | |||
| 876aa0ac1c | |||
| 7c05d57053 | |||
| bce8fbc87c | |||
| 58fa05c6f8 | |||
| 77108587b2 | |||
| 297d2959fa | |||
| bcd7480efc | |||
| e149e46b81 | |||
| e54be984ac | |||
| 9130eb1a37 | |||
| fb9eece5ce | |||
| 3f2951a1ea | |||
| b04611b199 | |||
| aeb8a78721 | |||
| 836267b80e |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -10,3 +10,4 @@ __pycache__
|
|||||||
/dwm
|
/dwm
|
||||||
/st
|
/st
|
||||||
/vis/.config/vis/plugins/
|
/vis/.config/vis/plugins/
|
||||||
|
/tools/.local/bin/
|
||||||
|
|||||||
20
Makefile
20
Makefile
@@ -1,7 +1,7 @@
|
|||||||
all:
|
all:
|
||||||
@echo "run: make clone build install"
|
@echo "run: make clone build install"
|
||||||
|
|
||||||
clone: ~/.local/share/zap dwm st
|
clone: dwm st
|
||||||
|
|
||||||
build: build-dwm build-st build-lupan-clock
|
build: build-dwm build-st build-lupan-clock
|
||||||
|
|
||||||
@@ -14,32 +14,38 @@ install: install-dwm install-st install-lupan-clock install-other
|
|||||||
|
|
||||||
dwm:
|
dwm:
|
||||||
git clone https://git.suckless.org/dwm
|
git clone https://git.suckless.org/dwm
|
||||||
cp -i patches/dwm/config.h dwm/
|
cd dwm && \
|
||||||
|
git remote add lupan.pl https://gitea.lupan.pl/lupan/dwm.git && \
|
||||||
|
git fetch lupan.pl && \
|
||||||
|
git checkout -b wip --track lupan.pl/wip
|
||||||
|
|
||||||
build-dwm:
|
build-dwm:
|
||||||
make -C dwm
|
make -C dwm
|
||||||
|
|
||||||
install-dwm:
|
install-dwm:
|
||||||
make -C dwm install PREFIX="${HOME}/.local"
|
make -C dwm install PREFIX="${HOME}/.local/stow/dwm"
|
||||||
|
stow -d ~/.local/stow dwm
|
||||||
|
|
||||||
st:
|
st:
|
||||||
git clone https://git.suckless.org/st
|
git clone https://git.suckless.org/st
|
||||||
cd st && \
|
cd st && \
|
||||||
git remote add lupan.pl https://gitea.lupan.pl/lupan/st.git && \
|
git remote add lupan.pl https://gitea.lupan.pl/lupan/st.git && \
|
||||||
git fetch lupan.pl && \
|
git fetch lupan.pl && \
|
||||||
git checkout -b patched --track lupan.pl/patched
|
git checkout -b patched-4 --track lupan.pl/patched-4
|
||||||
|
|
||||||
build-st:
|
build-st:
|
||||||
make -C st
|
make -C st
|
||||||
|
|
||||||
install-st:
|
install-st:
|
||||||
make -C st install PREFIX="${HOME}/.local"
|
make -C st install PREFIX="${HOME}/.local/stow/st"
|
||||||
|
stow -d ~/.local/stow st
|
||||||
|
|
||||||
build-lupan-clock:
|
build-lupan-clock:
|
||||||
make -C lupan-clock
|
make -C lupan-clock
|
||||||
|
|
||||||
install-lupan-clock:
|
install-lupan-clock:
|
||||||
make -C lupan-clock install PREFIX="${HOME}/.local"
|
make -C lupan-clock install PREFIX="${HOME}/.local/stow/lupan-clock"
|
||||||
|
stow -d ~/.local/stow lupan-clock
|
||||||
|
|
||||||
install-other:
|
install-other:
|
||||||
stow -Rv shell tmux xsession nvim
|
stow -Rv lazygit shell tmux nvim vis xsession
|
||||||
|
|||||||
43
compile_tools.sh
Executable file
43
compile_tools.sh
Executable file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
mkdir -p tools/.local/bin
|
||||||
|
|
||||||
|
uid=$(id -u):$(id -g)
|
||||||
|
|
||||||
|
go-install() {
|
||||||
|
echo "build $1"
|
||||||
|
docker exec -u "$uid" dotfiles-go go install -ldflags="-s -w" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
cargo-install() {
|
||||||
|
B="$1"
|
||||||
|
shift
|
||||||
|
echo "build $B"
|
||||||
|
docker exec -u "$uid" dotfiles-rust cargo install --quiet "$@"
|
||||||
|
docker exec -u "$uid" dotfiles-rust cp "/usr/local/cargo/bin/$B" /rust/bin
|
||||||
|
strip "tools/.local/bin/$B"
|
||||||
|
}
|
||||||
|
|
||||||
|
docker kill dotfiles-go && sleep 3 || :
|
||||||
|
docker run --rm -d --name dotfiles-go -e HOME=/go -v ./tools/.local/bin:/go/bin golang:1.25.1-alpine3.22 tail -f /dev/null
|
||||||
|
docker exec dotfiles-go chown "$uid" /go
|
||||||
|
|
||||||
|
go-install github.com/junegunn/fzf@latest
|
||||||
|
go-install github.com/gokcehan/lf@latest
|
||||||
|
go-install github.com/rs/curlie@latest
|
||||||
|
|
||||||
|
docker kill dotfiles-go
|
||||||
|
|
||||||
|
docker kill dotfiles-rust && sleep 3 || :
|
||||||
|
docker run --rm -d --name dotfiles-rust -v ./tools/.local/bin:/rust/bin rust:1.90-bullseye tail -f /dev/null
|
||||||
|
|
||||||
|
cargo-install zoxide zoxide --locked
|
||||||
|
cargo-install rg ripgrep
|
||||||
|
cargo-install fd fd-find
|
||||||
|
cargo-install bat bat --locked
|
||||||
|
cargo-install eza eza
|
||||||
|
cargo-install delta git-delta
|
||||||
|
cargo-install jj --bin jj jj-cli --locked
|
||||||
|
cargo-install lazyjj lazyjj --locked
|
||||||
|
|
||||||
|
docker kill dotfiles-rust
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
os:
|
os:
|
||||||
edit: 'vis {{filename}}'
|
edit: 'nvim {{filename}}'
|
||||||
editAtLine: 'vis +:{{line}} {{filename}}'
|
editAtLine: 'nvim +{{line}} {{filename}}'
|
||||||
editAtLineAndWait: 'vis +:{{line}} {{filename}}'
|
editAtLineAndWait: 'nvim +{{line}} {{filename}}'
|
||||||
editInTerminal: true
|
editInTerminal: true
|
||||||
openDirInEditor: 'vis {{dir}}'
|
openDirInEditor: 'nvim {{dir}}'
|
||||||
|
|
||||||
gui:
|
gui:
|
||||||
nerdFontsVersion: "3"
|
nerdFontsVersion: "3"
|
||||||
|
|||||||
@@ -1 +1,57 @@
|
|||||||
require("lupan")
|
require("config.options")
|
||||||
|
require("config.remap")
|
||||||
|
require("config.lsp")
|
||||||
|
|
||||||
|
local ok, paq = pcall(require, "paq")
|
||||||
|
if ok then
|
||||||
|
paq({
|
||||||
|
"EdenEast/nightfox.nvim",
|
||||||
|
"stevearc/conform.nvim",
|
||||||
|
"otavioschwanck/arrow.nvim",
|
||||||
|
"folke/flash.nvim",
|
||||||
|
"folke/snacks.nvim",
|
||||||
|
"stevearc/oil.nvim",
|
||||||
|
{
|
||||||
|
"jake-stewart/multicursor.nvim",
|
||||||
|
branch = "1.0",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||||
|
branch = "master",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
branch = "master",
|
||||||
|
build = ":TSUpdate",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
else
|
||||||
|
print("plugin paq missing")
|
||||||
|
end
|
||||||
|
|
||||||
|
local function load_plugin(name, setup)
|
||||||
|
local cfg = require(setup)
|
||||||
|
name = cfg.main or name
|
||||||
|
local ok, plugin = pcall(require, name)
|
||||||
|
if ok then
|
||||||
|
if cfg.config then
|
||||||
|
cfg.config(cfg.opts)
|
||||||
|
else
|
||||||
|
plugin.setup(cfg.opts)
|
||||||
|
end
|
||||||
|
if cfg.init then
|
||||||
|
cfg.init(plugin)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
print("plugin " .. name .. " missing")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
load_plugin("arrow", "plugins.arrow")
|
||||||
|
load_plugin("nightfox", "plugins.colorscheme")
|
||||||
|
load_plugin("conform", "plugins.conform")
|
||||||
|
load_plugin("flash", "plugins.flash")
|
||||||
|
load_plugin("multicursor-nvim", "plugins.multicursor")
|
||||||
|
load_plugin("oil", "plugins.oil")
|
||||||
|
load_plugin("snacks", "plugins.snacks")
|
||||||
|
load_plugin("treesitter", "plugins.treesitter")
|
||||||
|
|||||||
@@ -1,75 +1,12 @@
|
|||||||
{
|
{
|
||||||
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
|
||||||
"LuaSnip": { "branch": "master", "commit": "faf3c94a44508cec1b961406d36cc65113ff3b98" },
|
|
||||||
"arrow.nvim": { "branch": "master", "commit": "6e0f726f55f99332dd726a53effd6813786b6d49" },
|
"arrow.nvim": { "branch": "master", "commit": "6e0f726f55f99332dd726a53effd6813786b6d49" },
|
||||||
"blame.nvim": { "branch": "main", "commit": "b87b8c820e4cec06fbbd2f946b7b35c45906ee0c" },
|
"conform.nvim": { "branch": "master", "commit": "1bf8b5b9caee51507aa51eaed3da5b0f2595c6b9" },
|
||||||
"ccc.nvim": { "branch": "main", "commit": "9d1a256e006decc574789dfc7d628ca11644d4c2" },
|
"flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" },
|
||||||
"cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" },
|
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
|
||||||
"cmp-path": { "branch": "main", "commit": "c6635aae33a50d6010bf1aa756ac2398a2d54c32" },
|
"multicursor.nvim": { "branch": "1.0", "commit": "a6cf4e7daaf10a6b14bb7838caf779f0de5070cd" },
|
||||||
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
"nightfox.nvim": { "branch": "main", "commit": "ba47d4b4c5ec308718641ba7402c143836f35aa9" },
|
||||||
"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": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
||||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "0f051e9813a36481f48ca1f833897210dbcfffde" },
|
"nvim-treesitter-textobjects": { "branch": "master", "commit": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef" },
|
||||||
"nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" },
|
"oil.nvim": { "branch": "master", "commit": "7e1cd7703ff2924d7038476dcbc04b950203b902" },
|
||||||
"oil.nvim": { "branch": "master", "commit": "5b6068aad7d2057dd399fac73b7fb2cdf23ccd6e" },
|
"snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" }
|
||||||
"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" }
|
|
||||||
}
|
}
|
||||||
|
|||||||
5
nvim/.config/nvim/lsp/clangd.lua
Normal file
5
nvim/.config/nvim/lsp/clangd.lua
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
return {
|
||||||
|
cmd = { "clangd" },
|
||||||
|
filetypes = { "c", "cpp" },
|
||||||
|
root_markers = { ".git" },
|
||||||
|
}
|
||||||
5
nvim/.config/nvim/lsp/gopls.lua
Normal file
5
nvim/.config/nvim/lsp/gopls.lua
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
return {
|
||||||
|
cmd = { "gopls" },
|
||||||
|
filetypes = { "go", "gomod", "gowork", "gosum", "gotmpl" },
|
||||||
|
root_markers = { "go.mod", "go.work", ".git" },
|
||||||
|
}
|
||||||
5
nvim/.config/nvim/lsp/lua_ls.lua
Normal file
5
nvim/.config/nvim/lsp/lua_ls.lua
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
return {
|
||||||
|
cmd = 'lua-language-server',
|
||||||
|
filetypes = { 'lua' },
|
||||||
|
rootmarkers = { '.git' },
|
||||||
|
}
|
||||||
5
nvim/.config/nvim/lsp/ols.lua
Normal file
5
nvim/.config/nvim/lsp/ols.lua
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
return {
|
||||||
|
cmd = { "ols" },
|
||||||
|
filetypes = { "odin" },
|
||||||
|
root_markers = { ".git" },
|
||||||
|
}
|
||||||
5
nvim/.config/nvim/lsp/typescript-language-server.lua
Normal file
5
nvim/.config/nvim/lsp/typescript-language-server.lua
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
return {
|
||||||
|
cmd = { "typescript-language-server", "--stdio" },
|
||||||
|
filetypes = { "javascript", "typescript", "javascriptreact", "typescriptreact" },
|
||||||
|
root_markers = { "package.json", "tsconfig.json", ".git" },
|
||||||
|
}
|
||||||
57
nvim/.config/nvim/lua/config/colorscheme.lua
Normal file
57
nvim/.config/nvim/lua/config/colorscheme.lua
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
local home = os.getenv("HOME")
|
||||||
|
local filename = home .. "/.lightmode"
|
||||||
|
|
||||||
|
local colorschemes = nil
|
||||||
|
|
||||||
|
function M.set_colorschemes(dark, light)
|
||||||
|
colorschemes = { dark = dark, light = light }
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.terminalbg()
|
||||||
|
if vim.uv.fs_stat(filename) then
|
||||||
|
return "light"
|
||||||
|
else
|
||||||
|
return "dark"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.update_colorscheme(only_if_changed)
|
||||||
|
local next = M.terminalbg()
|
||||||
|
if not only_if_changed or next ~= vim.o.background then
|
||||||
|
vim.o.background = next
|
||||||
|
if colorschemes then
|
||||||
|
vim.cmd.colorscheme(colorschemes[next])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.toggle_colorscheme()
|
||||||
|
if vim.o.background == "dark" then
|
||||||
|
vim.o.background = "light"
|
||||||
|
else
|
||||||
|
vim.o.background = "dark"
|
||||||
|
end
|
||||||
|
if colorschemes then
|
||||||
|
vim.cmd.colorscheme(colorschemes[vim.o.background])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local w = vim.uv.new_fs_event()
|
||||||
|
|
||||||
|
local function watch(fname)
|
||||||
|
w:start(
|
||||||
|
fname,
|
||||||
|
{},
|
||||||
|
vim.schedule_wrap(function(...)
|
||||||
|
M.update_colorscheme(true)
|
||||||
|
w:stop()
|
||||||
|
watch(fname)
|
||||||
|
end)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
watch(home)
|
||||||
|
|
||||||
|
return M
|
||||||
17
nvim/.config/nvim/lua/config/lazy.lua
Normal file
17
nvim/.config/nvim/lua/config/lazy.lua
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||||
|
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||||
|
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
|
||||||
|
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
|
||||||
|
if vim.v.shell_error ~= 0 then
|
||||||
|
vim.api.nvim_echo({
|
||||||
|
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
|
||||||
|
{ out, "WarningMsg" },
|
||||||
|
{ "\nPress any key to exit..." },
|
||||||
|
}, true, {})
|
||||||
|
vim.fn.getchar()
|
||||||
|
os.exit(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
vim.opt.rtp:prepend(lazypath)
|
||||||
|
|
||||||
|
require("lazy").setup({ { import = "plugins" } })
|
||||||
26
nvim/.config/nvim/lua/config/lsp.lua
Normal file
26
nvim/.config/nvim/lua/config/lsp.lua
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
vim.lsp.enable({
|
||||||
|
"clangd",
|
||||||
|
"gopls",
|
||||||
|
"lua_ls",
|
||||||
|
"ols",
|
||||||
|
"typescript-language-server",
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("LspAttach", {
|
||||||
|
group = vim.api.nvim_create_augroup("lsp-keys-complete", { clear = true }),
|
||||||
|
callback = function(event)
|
||||||
|
vim.lsp.completion.enable(true, event.data.client_id, event.data.bufnr, {
|
||||||
|
convert = function(item)
|
||||||
|
return { abbr = item.label:gsub("%b()", "") }
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
vim.keymap.set("n", "<leader>A", vim.lsp.buf.code_action)
|
||||||
|
vim.keymap.set("i", "<C-space>", vim.lsp.completion.get)
|
||||||
|
vim.keymap.set("n", "<leader>k", function()
|
||||||
|
vim.diagnostic.jump({ float = true, count = -1 })
|
||||||
|
end)
|
||||||
|
vim.keymap.set("n", "<leader>j", function()
|
||||||
|
vim.diagnostic.jump({ float = true, count = 1 })
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
})
|
||||||
10
nvim/.config/nvim/lua/config/options.lua
Normal file
10
nvim/.config/nvim/lua/config/options.lua
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
vim.opt.shortmess = vim.opt.shortmess + "I"
|
||||||
|
|
||||||
|
vim.g.mapleader = " "
|
||||||
|
vim.g.maplocalleader = " \\"
|
||||||
|
|
||||||
|
vim.opt.number = true
|
||||||
|
vim.opt.relativenumber = true
|
||||||
|
vim.opt.signcolumn = "yes"
|
||||||
|
|
||||||
|
vim.opt.timeout = false
|
||||||
6
nvim/.config/nvim/lua/config/remap.lua
Normal file
6
nvim/.config/nvim/lua/config/remap.lua
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
vim.keymap.set("n", "<M-h>", "<C-w>h")
|
||||||
|
vim.keymap.set("n", "<M-k>", "<C-w>k")
|
||||||
|
vim.keymap.set("n", "<M-j>", "<C-w>j")
|
||||||
|
vim.keymap.set("n", "<M-l>", "<C-w>l")
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<cr>")
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
-- [[ 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' },
|
|
||||||
})
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
require("lupan.remap")
|
|
||||||
require("lupan.lazy")
|
|
||||||
require("lupan.options")
|
|
||||||
require("lupan.autocmd")
|
|
||||||
require('lazy').setup('plugins')
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
-- Install package manager (`:help lazy.nvim.txt`)
|
|
||||||
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
|
|
||||||
if not vim.loop.fs_stat(lazypath) then
|
|
||||||
vim.fn.system {
|
|
||||||
'git',
|
|
||||||
'clone',
|
|
||||||
'--filter=blob:none',
|
|
||||||
'https://github.com/folke/lazy.nvim.git',
|
|
||||||
'--branch=stable',
|
|
||||||
lazypath,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
vim.opt.rtp:prepend(lazypath)
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
-- 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
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
vim.g.mapleader = ' '
|
|
||||||
vim.g.maplocalleader = ' \\'
|
|
||||||
|
|
||||||
local key = vim.keymap.set
|
|
||||||
local opts = { silent = true, noremap = true }
|
|
||||||
|
|
||||||
key('v', '<Space>', '<Nop>', { silent = true })
|
|
||||||
|
|
||||||
-- Remap for dealing with word wrap
|
|
||||||
key('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
|
|
||||||
key('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
|
|
||||||
|
|
||||||
key("n", "<leader>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' })
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
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" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
7
nvim/.config/nvim/lua/plugins/arrow.lua
Normal file
7
nvim/.config/nvim/lua/plugins/arrow.lua
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
return {
|
||||||
|
opts = {
|
||||||
|
show_icons = false,
|
||||||
|
leader_key = "_",
|
||||||
|
buffer_leader_key = " m",
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
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,
|
|
||||||
}
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
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
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{ "<leader>1", function() require("arrow.persist").go_to(1) end, desc = "Arrow go to 1" },
|
|
||||||
{ "<leader>2", function() require("arrow.persist").go_to(2) end, desc = "Arrow go to 2" },
|
|
||||||
{ "<leader>3", function() require("arrow.persist").go_to(3) end, desc = "Arrow go to 3" },
|
|
||||||
{ "<leader>4", function() require("arrow.persist").go_to(4) end, desc = "Arrow go to 4" },
|
|
||||||
{ "<leader>5", function() require("arrow.persist").go_to(5) end, desc = "Arrow go to 5" },
|
|
||||||
{ "<leader>6", function() require("arrow.persist").go_to(6) end, desc = "Arrow go to 6" },
|
|
||||||
{ "<leader>7", function() require("arrow.persist").go_to(7) end, desc = "Arrow go to 7" },
|
|
||||||
{ "<leader>8", function() require("arrow.persist").go_to(8) end, desc = "Arrow go to 8" },
|
|
||||||
{ "<leader>9", function() require("arrow.persist").go_to(9) end, desc = "Arrow go to 9" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"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,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
16
nvim/.config/nvim/lua/plugins/colorscheme.lua
Normal file
16
nvim/.config/nvim/lua/plugins/colorscheme.lua
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
return {
|
||||||
|
opts = {
|
||||||
|
specs = {
|
||||||
|
all = {
|
||||||
|
syntax = {
|
||||||
|
operator = "#bf8040",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
init = function()
|
||||||
|
local cs = require("config.colorscheme")
|
||||||
|
cs.set_colorschemes("nightfox", "dayfox")
|
||||||
|
cs.update_colorscheme()
|
||||||
|
end,
|
||||||
|
}
|
||||||
11
nvim/.config/nvim/lua/plugins/conform.lua
Normal file
11
nvim/.config/nvim/lua/plugins/conform.lua
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
return {
|
||||||
|
opts = {
|
||||||
|
formatters_by_ft = {
|
||||||
|
lua = { "stylua" },
|
||||||
|
},
|
||||||
|
format_on_save = {
|
||||||
|
timeout_ms = 500,
|
||||||
|
lsp_format = "fallback",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
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,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
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' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
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" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
24
nvim/.config/nvim/lua/plugins/flash.lua
Normal file
24
nvim/.config/nvim/lua/plugins/flash.lua
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
return {
|
||||||
|
opts = {
|
||||||
|
modes = {
|
||||||
|
char = {
|
||||||
|
enabled = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
init = function()
|
||||||
|
local set = vim.keymap.set
|
||||||
|
set({ "n", "x", "o" }, "\\", function()
|
||||||
|
require("flash").jump()
|
||||||
|
end, { desc = "Flash" })
|
||||||
|
set({ "n", "x", "o" }, "=", function()
|
||||||
|
require("flash").treesitter()
|
||||||
|
end, { desc = "Flash Treesitter" })
|
||||||
|
set({ "o" }, "r", function()
|
||||||
|
require("flash").remote()
|
||||||
|
end, { desc = "Remote Flash" })
|
||||||
|
set({ "n", "x", "o" }, " t", function()
|
||||||
|
require("flash").treesitter_search()
|
||||||
|
end, { desc = "Treesitter Search" })
|
||||||
|
end,
|
||||||
|
}
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
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>bt', '<cmd>BlameToggle<cr>', desc = 'Git [B]lame [T]oggle' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
-- 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,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
return {
|
|
||||||
'backdround/global-note.nvim',
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
"<leader>tn",
|
|
||||||
function()
|
|
||||||
require('global-note').toggle_note()
|
|
||||||
end,
|
|
||||||
desc = '[T]oggle global [N]ote',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
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' },
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
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' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
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' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
return {
|
|
||||||
{
|
|
||||||
'swaits/lazyjj.nvim',
|
|
||||||
dependencies = 'nvim-lua/plenary.nvim',
|
|
||||||
opts = {
|
|
||||||
mapping = '<leader>gj'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
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',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,167 +0,0 @@
|
|||||||
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
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
71
nvim/.config/nvim/lua/plugins/multicursor.lua
Normal file
71
nvim/.config/nvim/lua/plugins/multicursor.lua
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
return {
|
||||||
|
init = function(mc)
|
||||||
|
local set = vim.keymap.set
|
||||||
|
|
||||||
|
-- Add or skip cursor above/below the main cursor.
|
||||||
|
set({ "n", "x" }, "<c-k>", function()
|
||||||
|
mc.lineAddCursor(-1)
|
||||||
|
end)
|
||||||
|
set({ "n", "x" }, "<c-j>", function()
|
||||||
|
mc.lineAddCursor(1)
|
||||||
|
end)
|
||||||
|
set({ "n", "x" }, "<leader><c-k>", function()
|
||||||
|
mc.lineSkipCursor(-1)
|
||||||
|
end)
|
||||||
|
set({ "n", "x" }, "<leader><c-j>", function()
|
||||||
|
mc.lineSkipCursor(1)
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Add or skip adding a new cursor by matching word/selection
|
||||||
|
set({ "n", "x" }, "<c-n>", function()
|
||||||
|
mc.matchAddCursor(1)
|
||||||
|
end)
|
||||||
|
set({ "n", "x" }, "<leader><c-n>", function()
|
||||||
|
mc.matchSkipCursor(1)
|
||||||
|
end)
|
||||||
|
set({ "n", "x" }, "<c-p>", function()
|
||||||
|
mc.matchAddCursor(-1)
|
||||||
|
end)
|
||||||
|
set({ "n", "x" }, "<leader><c-p>", function()
|
||||||
|
mc.matchSkipCursor(-1)
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Add and remove cursors with control + left click.
|
||||||
|
set("n", "<c-leftmouse>", mc.handleMouse)
|
||||||
|
set("n", "<c-leftdrag>", mc.handleMouseDrag)
|
||||||
|
set("n", "<c-leftrelease>", mc.handleMouseRelease)
|
||||||
|
|
||||||
|
-- Disable and enable cursors.
|
||||||
|
set({ "n", "x" }, "<leader><c-q>", mc.toggleCursor)
|
||||||
|
|
||||||
|
-- Mappings defined in a keymap layer only apply when there are
|
||||||
|
-- multiple cursors. This lets you have overlapping mappings.
|
||||||
|
mc.addKeymapLayer(function(layerSet)
|
||||||
|
-- Select a different cursor as the main one.
|
||||||
|
layerSet({ "n", "x" }, "<left>", mc.prevCursor)
|
||||||
|
layerSet({ "n", "x" }, "<right>", mc.nextCursor)
|
||||||
|
|
||||||
|
-- Delete the main cursor.
|
||||||
|
layerSet({ "n", "x" }, "<leader>x", mc.deleteCursor)
|
||||||
|
|
||||||
|
-- Enable and clear cursors using escape.
|
||||||
|
layerSet("n", "<esc>", function()
|
||||||
|
if not mc.cursorsEnabled() then
|
||||||
|
mc.enableCursors()
|
||||||
|
else
|
||||||
|
mc.clearCursors()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Customize how cursors look.
|
||||||
|
local hl = vim.api.nvim_set_hl
|
||||||
|
hl(0, "MultiCursorCursor", { reverse = true })
|
||||||
|
hl(0, "MultiCursorVisual", { link = "Visual" })
|
||||||
|
hl(0, "MultiCursorSign", { link = "SignColumn" })
|
||||||
|
hl(0, "MultiCursorMatchPreview", { link = "Search" })
|
||||||
|
hl(0, "MultiCursorDisabledCursor", { reverse = true })
|
||||||
|
hl(0, "MultiCursorDisabledVisual", { link = "Visual" })
|
||||||
|
hl(0, "MultiCursorDisabledSign", { link = "SignColumn" })
|
||||||
|
end,
|
||||||
|
}
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
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,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
5
nvim/.config/nvim/lua/plugins/oil.lua
Normal file
5
nvim/.config/nvim/lua/plugins/oil.lua
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
return {
|
||||||
|
init = function()
|
||||||
|
vim.keymap.set("n", "<leader>-", "<cmd>Oil<cr>", { desc = "Oil file manager" })
|
||||||
|
end,
|
||||||
|
}
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
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 },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
return {
|
|
||||||
'stevearc/quicker.nvim',
|
|
||||||
event = "FileType qf",
|
|
||||||
---@module "quicker"
|
|
||||||
---@type quicker.SetupOptions
|
|
||||||
opts = {},
|
|
||||||
}
|
|
||||||
@@ -1,171 +1,177 @@
|
|||||||
return {
|
return {
|
||||||
{
|
init = function()
|
||||||
"folke/snacks.nvim",
|
local set = vim.keymap.set
|
||||||
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
|
set("n", "<leader><space>", function()
|
||||||
Snacks.toggle.option("spell", { name = "Spelling" }):map("<leader>us")
|
Snacks.picker.smart()
|
||||||
Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw")
|
end, { desc = "Smart Find Files" })
|
||||||
Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("<leader>uL")
|
|
||||||
Snacks.toggle.diagnostics():map("<leader>ud")
|
set("n", "<leader><space>", function()
|
||||||
Snacks.toggle.line_number():map("<leader>ul")
|
Snacks.picker.smart()
|
||||||
Snacks.toggle.option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 }):map(
|
end, { desc = "Smart Find Files" })
|
||||||
"<leader>uc")
|
|
||||||
Snacks.toggle.treesitter():map("<leader>uT")
|
set("n", "<leader>a", function()
|
||||||
Snacks.toggle.option("background", { off = "light", on = "dark", name = "Dark Background" }):map("<leader>ub")
|
Snacks.picker.buffers()
|
||||||
Snacks.toggle.inlay_hints():map("<leader>uh")
|
end, { desc = "Buffers" })
|
||||||
Snacks.toggle.indent():map("<leader>ug")
|
|
||||||
Snacks.toggle.dim():map("<leader>uD")
|
set("n", "<leader>r", function()
|
||||||
end,
|
Snacks.picker.recent()
|
||||||
})
|
end, { desc = "Recent files" })
|
||||||
end,
|
|
||||||
}
|
set("n", "<leader>R", function()
|
||||||
|
Snacks.picker.resume()
|
||||||
|
end, { desc = "Resume" })
|
||||||
|
|
||||||
|
set("n", "<leader>b", function()
|
||||||
|
Snacks.picker.lines()
|
||||||
|
end, { desc = "Buffer lines" })
|
||||||
|
|
||||||
|
set("n", "<leader>B", function()
|
||||||
|
Snacks.picker.grep_buffers()
|
||||||
|
end, { desc = "Grep Open Buffers" })
|
||||||
|
|
||||||
|
set("n", "<leader>f", function()
|
||||||
|
Snacks.picker.files()
|
||||||
|
end, { desc = "Find Files" })
|
||||||
|
|
||||||
|
set("n", "<leader>s", function()
|
||||||
|
Snacks.picker.grep()
|
||||||
|
end, { desc = "Grep" })
|
||||||
|
|
||||||
|
set("n", "<leader>S", function()
|
||||||
|
Snacks.picker.git_status()
|
||||||
|
end, { desc = "Git Status" })
|
||||||
|
|
||||||
|
set("n", "<leader>g", function()
|
||||||
|
Snacks.picker.git_files()
|
||||||
|
end, { desc = "Find Git Files" })
|
||||||
|
|
||||||
|
set("n", "<leader>G", function()
|
||||||
|
Snacks.picker.git_grep()
|
||||||
|
end, { desc = "Git Grep" })
|
||||||
|
|
||||||
|
set("n", "<leader>l", function()
|
||||||
|
Snacks.lazygit()
|
||||||
|
end, { desc = "Lazygit" })
|
||||||
|
|
||||||
|
set("n", "<leader>L", function()
|
||||||
|
Snacks.lazygit.log_file()
|
||||||
|
end, { desc = "Lazygit log file" })
|
||||||
|
|
||||||
|
set("n", "<leader>n", function()
|
||||||
|
Snacks.notifier.show_history()
|
||||||
|
end, { desc = "Notification History" })
|
||||||
|
|
||||||
|
set("n", "<leader>N", function()
|
||||||
|
Snacks.picker.notifications()
|
||||||
|
end, { desc = "Notifications" })
|
||||||
|
|
||||||
|
set("n", "<leader>C", function()
|
||||||
|
Snacks.picker.commands()
|
||||||
|
end, { desc = "Commands" })
|
||||||
|
|
||||||
|
set("n", "<leader>h", function()
|
||||||
|
Snacks.picker.keymaps()
|
||||||
|
end, { desc = "Keymaps" })
|
||||||
|
|
||||||
|
set("n", "<leader>:", function()
|
||||||
|
Snacks.picker.command_history()
|
||||||
|
end, { desc = "Command History" })
|
||||||
|
|
||||||
|
set("n", '<leader>"', function()
|
||||||
|
Snacks.picker.registers()
|
||||||
|
end, { desc = "Registers" })
|
||||||
|
|
||||||
|
set("n", "<leader>$", function()
|
||||||
|
Snacks.rename.rename_file()
|
||||||
|
end, { desc = "Rename File" })
|
||||||
|
|
||||||
|
set("n", "<leader>z", function()
|
||||||
|
Snacks.zen.zoom()
|
||||||
|
end, { desc = "Toggle Zoom" })
|
||||||
|
-- LSP
|
||||||
|
|
||||||
|
set("n", "gd", function()
|
||||||
|
Snacks.picker.lsp_definitions()
|
||||||
|
end, { desc = "Goto Definition" })
|
||||||
|
|
||||||
|
set("n", "gD", function()
|
||||||
|
Snacks.picker.lsp_declarations()
|
||||||
|
end, { desc = "Goto Declaration" })
|
||||||
|
|
||||||
|
set("n", "gr", function()
|
||||||
|
Snacks.picker.lsp_references()
|
||||||
|
end, { desc = "References" })
|
||||||
|
|
||||||
|
set("n", "gI", function()
|
||||||
|
Snacks.picker.lsp_implementations()
|
||||||
|
end, { desc = "Goto Implementation" })
|
||||||
|
|
||||||
|
set("n", "gy", function()
|
||||||
|
Snacks.picker.lsp_type_definitions()
|
||||||
|
end, { desc = "Goto T[y]pe Definition" })
|
||||||
|
|
||||||
|
set("n", "<leader>w", function()
|
||||||
|
Snacks.picker.lsp_symbols()
|
||||||
|
end, { desc = "LSP Symbols" })
|
||||||
|
|
||||||
|
set("n", "<leader>d", function()
|
||||||
|
Snacks.picker.diagnostics_buffer()
|
||||||
|
end, { desc = "Buffer Diagnostics" })
|
||||||
|
|
||||||
|
set("n", "<leader>D", function()
|
||||||
|
Snacks.picker.diagnostics()
|
||||||
|
end, { desc = "Diagnostics" })
|
||||||
|
|
||||||
|
set("n", "<leader>W", function()
|
||||||
|
Snacks.picker.lsp_workspace_symbols()
|
||||||
|
end, { desc = "LSP Workspace Symbols" })
|
||||||
|
-- Terminal
|
||||||
|
|
||||||
|
set({ "n", "t" }, "<c-/>", function()
|
||||||
|
Snacks.terminal()
|
||||||
|
end, { desc = "Toggle Terminal" })
|
||||||
|
|
||||||
|
set({ "n", "t" }, "<c-_>", function()
|
||||||
|
Snacks.terminal()
|
||||||
|
end, { desc = "which_key_ignore" })
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("VimEnter", {
|
||||||
|
callback = function()
|
||||||
|
-- Setup some globals for debugging (lazy-loaded)
|
||||||
|
_G.dd = function(...)
|
||||||
|
Snacks.debug.inspect(...)
|
||||||
|
end
|
||||||
|
_G.bt = function()
|
||||||
|
Snacks.debug.backtrace()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Override print to use snacks for `:=` command
|
||||||
|
if vim.fn.has("nvim-0.11") == 1 then
|
||||||
|
vim._print = function(_, ...)
|
||||||
|
dd(...)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
vim.print = _G.dd
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Create some toggle mappings
|
||||||
|
Snacks.toggle.option("spell", { name = "Spelling" }):map("<leader>us")
|
||||||
|
Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw")
|
||||||
|
Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("<leader>uL")
|
||||||
|
Snacks.toggle.diagnostics():map("<leader>ud")
|
||||||
|
Snacks.toggle.line_number():map("<leader>ul")
|
||||||
|
Snacks.toggle
|
||||||
|
.option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 })
|
||||||
|
:map("<leader>uc")
|
||||||
|
Snacks.toggle.treesitter():map("<leader>uT")
|
||||||
|
Snacks.toggle
|
||||||
|
.option("background", { off = "light", on = "dark", name = "Dark Background" })
|
||||||
|
:map("<leader>ub")
|
||||||
|
Snacks.toggle.inlay_hints():map("<leader>uh")
|
||||||
|
Snacks.toggle.indent():map("<leader>ug")
|
||||||
|
Snacks.toggle.dim():map("<leader>uD")
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
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,
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
return {
|
|
||||||
'fredeeb/tardis.nvim',
|
|
||||||
dependencies = { 'nvim-lua/plenary.nvim' },
|
|
||||||
config = true,
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
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
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
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,
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
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>]] },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
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' },
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,95 +1,62 @@
|
|||||||
return {
|
return {
|
||||||
|
main = "nvim-treesitter.configs",
|
||||||
{ -- Highlight, edit, and navigate code
|
opts = {
|
||||||
'nvim-treesitter/nvim-treesitter',
|
highlight = {
|
||||||
dependencies = {
|
enable = true,
|
||||||
'nvim-treesitter/nvim-treesitter-textobjects',
|
},
|
||||||
'nvim-orgmode/orgmode', -- as configured together
|
textobjects = {
|
||||||
'vrischmann/tree-sitter-templ',
|
select = {
|
||||||
"nushell/tree-sitter-nu", -- additional parser
|
enable = true,
|
||||||
},
|
lookahead = true,
|
||||||
build = ':TSUpdate',
|
keymaps = {
|
||||||
config = function()
|
["aa"] = "@parameter.outer",
|
||||||
-- See `:help nvim-treesitter`
|
["ia"] = "@parameter.inner",
|
||||||
local org = require('orgmode')
|
["af"] = "@function.outer",
|
||||||
|
["if"] = "@function.inner",
|
||||||
---@diagnostic disable-next-line: missing-fields
|
["ac"] = "@class.outer",
|
||||||
require('nvim-treesitter.configs').setup {
|
["ic"] = "@class.inner",
|
||||||
ensure_installed = { 'c', 'commonlisp', 'cpp', 'go', 'haskell', 'lua', 'python', 'rust', 'tsx', 'templ', 'typescript', 'vimdoc', 'vim' },
|
["al"] = "@call.outer",
|
||||||
auto_install = false,
|
["il"] = "@call.inner",
|
||||||
highlight = {
|
["ao"] = "@loop.outer",
|
||||||
enable = true,
|
["io"] = "@loop.inner",
|
||||||
additional_vim_regex_highlighting = { 'org' },
|
["ad"] = "@conditional.outer",
|
||||||
},
|
["id"] = "@conditional.inner",
|
||||||
indent = { enable = true },
|
["ar"] = "@return.outer",
|
||||||
incremental_selection = {
|
["ir"] = "@return.inner",
|
||||||
enable = true,
|
["as"] = "@statement.outer",
|
||||||
keymaps = {
|
["ag"] = "@assignment.outer",
|
||||||
init_selection = '<c-space>',
|
["ig"] = "@assignment.inner",
|
||||||
node_incremental = '<c-space>',
|
},
|
||||||
scope_incremental = '<c-s>',
|
},
|
||||||
node_decremental = '<C-p>',
|
move = {
|
||||||
},
|
enable = true,
|
||||||
},
|
set_jumps = true,
|
||||||
textobjects = {
|
goto_next_start = {
|
||||||
select = {
|
["]m"] = "@function.outer",
|
||||||
enable = true,
|
["]]"] = "@class.outer",
|
||||||
lookahead = true,
|
},
|
||||||
keymaps = {
|
goto_next_end = {
|
||||||
['aa'] = '@parameter.outer',
|
["]M"] = "@function.outer",
|
||||||
['ia'] = '@parameter.inner',
|
["]["] = "@class.outer",
|
||||||
['af'] = '@function.outer',
|
},
|
||||||
['if'] = '@function.inner',
|
goto_previous_start = {
|
||||||
['ac'] = '@class.outer',
|
["[m"] = "@function.outer",
|
||||||
['ic'] = '@class.inner',
|
["[["] = "@class.outer",
|
||||||
['al'] = '@call.outer',
|
},
|
||||||
['il'] = '@call.inner',
|
goto_previous_end = {
|
||||||
['ao'] = '@loop.outer',
|
["[M"] = "@function.outer",
|
||||||
['io'] = '@loop.inner',
|
["[]"] = "@class.outer",
|
||||||
['ad'] = '@conditional.outer',
|
},
|
||||||
['id'] = '@conditional.inner',
|
},
|
||||||
['ar'] = '@return.outer',
|
swap = {
|
||||||
['ir'] = '@return.inner',
|
enable = true,
|
||||||
['as'] = '@statement.outer',
|
swap_next = {
|
||||||
['ag'] = '@assignment.outer',
|
["<leader>p"] = "@parameter.inner",
|
||||||
['ig'] = '@assignment.inner',
|
},
|
||||||
},
|
swap_previous = {
|
||||||
},
|
["<leader>P"] = "@parameter.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,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
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" },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
return {
|
|
||||||
s("tr", { t "i18n.T(ctx, \"", i(1), t "\")" })
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
return {
|
|
||||||
s("ct", t "-- TODO: ")
|
|
||||||
}
|
|
||||||
@@ -1,10 +1,22 @@
|
|||||||
alias v=vis
|
alias v=nvim
|
||||||
alias ll='ls -l'
|
alias ll='ls -l'
|
||||||
alias tl='tmux list-sessions'
|
alias tl='tmux list-sessions'
|
||||||
alias rgh='rg -.'
|
alias rgh='rg -.'
|
||||||
alias fdh='fd -H'
|
alias fdh='fd -H'
|
||||||
|
alias lg=lazygit
|
||||||
|
|
||||||
if which exa > /dev/null; then
|
if alias st > /dev/null; then
|
||||||
|
alias gst='_vcs status'
|
||||||
|
unalias st
|
||||||
|
fi
|
||||||
|
if alias r > /dev/null; then
|
||||||
|
unalias r
|
||||||
|
fi
|
||||||
|
|
||||||
|
if which eza > /dev/null; then
|
||||||
|
alias ls='eza --icons'
|
||||||
|
alias tree='eza --tree --icons'
|
||||||
|
elif which exa > /dev/null; then
|
||||||
alias ls='exa --icons'
|
alias ls='exa --icons'
|
||||||
alias tree='exa --tree --icons'
|
alias tree='exa --tree --icons'
|
||||||
fi
|
fi
|
||||||
@@ -21,9 +33,10 @@ tn() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tni() {
|
tni() {
|
||||||
DIR=$(zoxide query -l | vis-menu -p 'Dir:' -l 10)
|
local Q="${@:-}"
|
||||||
|
local DIR=$(zoxide query -l | vis-menu -p 'Dir:' -l 10 "$Q")
|
||||||
if [ -n "$DIR" ]; then
|
if [ -n "$DIR" ]; then
|
||||||
NAME=$(echo | vis-menu -p 'Session name:' $(basename $DIR))
|
local NAME=$(echo | vis-menu -p 'Session name:' $(basename $DIR))
|
||||||
if [ -n "$DIR" ]; then
|
if [ -n "$DIR" ]; then
|
||||||
tmux new -A -s "$NAME" -c "$DIR"
|
tmux new -A -s "$NAME" -c "$DIR"
|
||||||
fi
|
fi
|
||||||
@@ -39,12 +52,13 @@ ta() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tai() {
|
tai() {
|
||||||
NAME=$(tmux ls | vis-menu -p 'Session:' -l 10 | cut -d: -f1)
|
local Q="${@:-}"
|
||||||
|
local NAME=$(tmux ls | vis-menu -p 'Session:' -l 10 "$Q" | cut -d: -f1)
|
||||||
if [ -n "$NAME" ]; then
|
if [ -n "$NAME" ]; then
|
||||||
tmux attach -t "$NAME"
|
tmux attach -t "$NAME"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
vf() {
|
vf() {
|
||||||
vis "+fzf-files auto-files '$1'"
|
nvim $(fzf --multi)
|
||||||
}
|
}
|
||||||
|
|||||||
3
shell/.config/yash/profile
Normal file
3
shell/.config/yash/profile
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
[ -e ~/.profile ] && . ~/.profile
|
||||||
17
shell/.config/yash/rc
Normal file
17
shell/.config/yash/rc
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Firstly, load the common customization script.
|
||||||
|
. --autoload --no-alias initialization/common
|
||||||
|
|
||||||
|
LANG=pl_PL.UTF-8
|
||||||
|
|
||||||
|
set -o vi
|
||||||
|
|
||||||
|
[ -e ~/.config/shellconfig/aliases.sh ] && . ~/.config/shellconfig/aliases.sh
|
||||||
|
|
||||||
|
# Clear the screen with Ctrl-L.
|
||||||
|
bindkey --emacs '\^L' clear-and-redraw-all
|
||||||
|
bindkey --vi-insert '\^L' clear-and-redraw-all
|
||||||
|
bindkey --vi-command '\^L' clear-and-redraw-all
|
||||||
|
|
||||||
|
# And add your own customization below.
|
||||||
|
|
||||||
|
eval "$(zoxide init posix --hook prompt)"
|
||||||
@@ -8,6 +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 LANG=pl_PL.UTF-8
|
||||||
|
|
||||||
export EDITOR=vis
|
export EDITOR=vis
|
||||||
export VISUAL=vis
|
export VISUAL=vis
|
||||||
|
|
||||||
@@ -28,14 +30,14 @@ done
|
|||||||
export PATH
|
export PATH
|
||||||
|
|
||||||
# start X or Hyprland at login
|
# start X or Hyprland at login
|
||||||
if [[ -z "$DISPLAY" && -z "$WAYLAND_DISPLAY" && "$XDG_VTNR" -eq 1 ]]; then
|
if [ -z "$DISPLAY" -a -z "$WAYLAND_DISPLAY" -a "$(tty)" = /dev/tty1 ]; then
|
||||||
if which Hyprland > /dev/null && [ -d ~/.config/hypr ]; then
|
if which /usr/bin/sx > /dev/null; then
|
||||||
|
exec /usr/bin/sx ~/.xsession
|
||||||
|
elif which /usr/bin/startx > /dev/null; then
|
||||||
|
exec /usr/bin/startx ~/.xsession
|
||||||
|
elif which Hyprland > /dev/null && [ -d ~/.config/hypr ]; then
|
||||||
exec Hyprland
|
exec Hyprland
|
||||||
elif which river > /dev/null && [ -d ~/.config/river ]; then
|
elif which river > /dev/null && [ -d ~/.config/river ]; then
|
||||||
exec river
|
exec river
|
||||||
elif which /usr/bin/sx > /dev/null; then
|
|
||||||
exec /usr/bin/sx ~/.xsession
|
|
||||||
elif which /usr/bin/startx > /dev/null; then
|
|
||||||
exec /usr/bin/startx
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ local function search(p)
|
|||||||
return Ct(((1 - p)^0 * Cp() * p)^0)
|
return Ct(((1 - p)^0 * Cp() * p)^0)
|
||||||
end
|
end
|
||||||
|
|
||||||
local up = {
|
local up_keys = {
|
||||||
'a', 's', 'd', 'f' ,
|
'a', 's', 'd', 'f' ,
|
||||||
'q', 'w', 'e', 'r', 't', 'g',
|
'q', 'w', 'e', 'r', 't', 'g',
|
||||||
'z', 'x', 'c', 'v', 'b',
|
'z', 'x', 'c', 'v', 'b',
|
||||||
@@ -22,7 +22,7 @@ local up = {
|
|||||||
'`', '~',
|
'`', '~',
|
||||||
}
|
}
|
||||||
|
|
||||||
local down = {
|
local down_keys = {
|
||||||
'j', 'k', 'l', ';',
|
'j', 'k', 'l', ';',
|
||||||
'y', 'u', 'i', 'o', 'p',
|
'y', 'u', 'i', 'o', 'p',
|
||||||
'n', 'm', ',', '.', '/',
|
'n', 'm', ',', '.', '/',
|
||||||
@@ -34,6 +34,53 @@ local down = {
|
|||||||
"'", '"', '\\', '|',
|
"'", '"', '\\', '|',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local function merge(a, b)
|
||||||
|
local c = {}
|
||||||
|
for i = 1, #a do
|
||||||
|
c[i] = a[i]
|
||||||
|
end
|
||||||
|
for i = 1, #b do
|
||||||
|
c[#a + i] = b[i]
|
||||||
|
end
|
||||||
|
return c
|
||||||
|
end
|
||||||
|
|
||||||
|
local function layout()
|
||||||
|
local l, r, t, n = 0, 0, 0, 0
|
||||||
|
local opt = vis.win.options
|
||||||
|
if opt.numbers or opt.relativenumbers then
|
||||||
|
n = #tostring(vis.win.viewport.lines.finish)
|
||||||
|
end
|
||||||
|
if vis.ui.layout == vis.ui.layouts.HORIZONTAL then
|
||||||
|
for win in vis:windows() do
|
||||||
|
if win == vis.win then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
t = t + win.height
|
||||||
|
end
|
||||||
|
elseif vis.ui.layout == vis.ui.layouts.VERTICAL then
|
||||||
|
local left = true
|
||||||
|
for win in vis:windows() do
|
||||||
|
if win == vis.win then
|
||||||
|
left = false
|
||||||
|
if opt.wrapcolumn ~= 0 then
|
||||||
|
r = r + win.width - n - opt.wrapcolumn
|
||||||
|
end
|
||||||
|
elseif left then
|
||||||
|
l = l + win.width + 1
|
||||||
|
else
|
||||||
|
r = r + win.width
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return '--wrap --padding=' .. t .. ',' .. r .. ',0,' .. (l + n) .. ' --tabstop=' .. opt.tabwidth
|
||||||
|
end
|
||||||
|
|
||||||
|
local mu = #up_keys
|
||||||
|
local md = #down_keys
|
||||||
|
local up = merge(up_keys, down_keys)
|
||||||
|
local down = merge(down_keys, up_keys)
|
||||||
|
|
||||||
local jumps = {}
|
local jumps = {}
|
||||||
|
|
||||||
local function jump(keys)
|
local function jump(keys)
|
||||||
@@ -78,8 +125,13 @@ local function jump(keys)
|
|||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
local nu = prev
|
||||||
|
local nd = #lst - next
|
||||||
local j = 1
|
local j = 1
|
||||||
for i = prev, 1, -1 do
|
for i = prev, 1, -1 do
|
||||||
|
if j == mu + 1 then
|
||||||
|
j = j + nd
|
||||||
|
end
|
||||||
if not up[j] then
|
if not up[j] then
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
@@ -89,6 +141,9 @@ local function jump(keys)
|
|||||||
end
|
end
|
||||||
j = 1
|
j = 1
|
||||||
for i = next, #lst do
|
for i = next, #lst do
|
||||||
|
if j == md + 1 then
|
||||||
|
j = j + nu
|
||||||
|
end
|
||||||
if not down[j] then
|
if not down[j] then
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
@@ -113,7 +168,7 @@ local function jump(keys)
|
|||||||
end
|
end
|
||||||
input = input .. data:sub(k)
|
input = input .. data:sub(k)
|
||||||
|
|
||||||
local code, out, err = vis:pipe(input, 'fzf --ansi --layout=reverse-list --no-info --no-separator --color gutter:-1 --marker="" --padding 0,0,0,3 --print-query --bind change:accept')
|
local code, out, err = vis:pipe(input, 'fzf --ansi --layout=reverse-list --no-info --no-separator --color gutter:-1,bg+:-1 --marker="" ' .. layout() .. ' --print-query --bind change:accept')
|
||||||
if code ~= 0 then
|
if code ~= 0 then
|
||||||
vis:info(err or ('fzf exit code ' .. code))
|
vis:info(err or ('fzf exit code ' .. code))
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ if [ "$1" = list ]; then
|
|||||||
case "$prompt" in
|
case "$prompt" in
|
||||||
dir:*)
|
dir:*)
|
||||||
dir=${FZF_HEADER_LABEL#?}
|
dir=${FZF_HEADER_LABEL#?}
|
||||||
|
fd -t d '' ~/src ~/dotfiles 2 -H -E '\.git' -E node_modules
|
||||||
zoxide query -l
|
zoxide query -l
|
||||||
echo $dir
|
echo $dir
|
||||||
exit
|
exit
|
||||||
@@ -28,6 +29,9 @@ if [ "$1" = list ]; then
|
|||||||
files+hidden)
|
files+hidden)
|
||||||
exec fd --type f -H '' $dir
|
exec fd --type f -H '' $dir
|
||||||
;;
|
;;
|
||||||
|
find-files*)
|
||||||
|
exec find $dir -type f
|
||||||
|
;;
|
||||||
search)
|
search)
|
||||||
exec $ripgrep "$FZF_QUERY" $dir
|
exec $ripgrep "$FZF_QUERY" $dir
|
||||||
;;
|
;;
|
||||||
@@ -116,6 +120,9 @@ if [ "$1" = key ]; then
|
|||||||
;;
|
;;
|
||||||
alt-f)
|
alt-f)
|
||||||
case "$cmd" in
|
case "$cmd" in
|
||||||
|
files)
|
||||||
|
prompt="find-files$hidden"
|
||||||
|
;;
|
||||||
*files|search)
|
*files|search)
|
||||||
prompt="files$hidden"
|
prompt="files$hidden"
|
||||||
;;
|
;;
|
||||||
@@ -220,7 +227,7 @@ auto-search)
|
|||||||
action="$no_search"
|
action="$no_search"
|
||||||
prompt="$cmd> "
|
prompt="$cmd> "
|
||||||
;;
|
;;
|
||||||
files|git-files|jj-files)
|
files|git-files|jj-files|find-files)
|
||||||
cmd="$1"
|
cmd="$1"
|
||||||
action="$search"
|
action="$search"
|
||||||
prompt="$1> "
|
prompt="$1> "
|
||||||
@@ -265,6 +272,7 @@ exec fzf --query "$3" \
|
|||||||
--header-label "$label" \
|
--header-label "$label" \
|
||||||
--multi \
|
--multi \
|
||||||
--ansi \
|
--ansi \
|
||||||
|
--scheme path \
|
||||||
--delimiter : \
|
--delimiter : \
|
||||||
--ghost ' (Use alt-? for help)' \
|
--ghost ' (Use alt-? for help)' \
|
||||||
--bind "enter:transform($accept)" \
|
--bind "enter:transform($accept)" \
|
||||||
@@ -279,4 +287,5 @@ exec fzf --query "$3" \
|
|||||||
--bind "alt-s:$key" \
|
--bind "alt-s:$key" \
|
||||||
--bind "alt-p:change-preview(sh $0 preview {1} {2})+toggle-preview" \
|
--bind "alt-p:change-preview(sh $0 preview {1} {2})+toggle-preview" \
|
||||||
--bind "alt-u:change-preview-window(up|right)" \
|
--bind "alt-u:change-preview-window(up|right)" \
|
||||||
--bind "alt-?:change-preview(echo '$HELP')+show-preview"
|
--bind "alt-?:change-preview(echo '$HELP')+show-preview" \
|
||||||
|
--bind "alt-enter:unbind(change,alt-enter)+enable-search+clear-query"
|
||||||
|
|||||||
87
vis/.config/vis/lexers/odin.lua
Normal file
87
vis/.config/vis/lexers/odin.lua
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
-- Copyright 2006-2024 Mitchell. See LICENSE.
|
||||||
|
-- Odin LPeg lexer.
|
||||||
|
|
||||||
|
local lexer = lexer
|
||||||
|
local P, S = lpeg.P, lpeg.S
|
||||||
|
|
||||||
|
local lex = lexer.new(...)
|
||||||
|
|
||||||
|
-- Keywords.
|
||||||
|
lex:add_rule('keyword', lex:tag(lexer.KEYWORD, lex:word_match(lexer.KEYWORD)))
|
||||||
|
|
||||||
|
-- Constants.
|
||||||
|
lex:add_rule('constant', lex:tag(lexer.CONSTANT_BUILTIN, lex:word_match(lexer.CONSTANT_BUILTIN)))
|
||||||
|
|
||||||
|
-- Types.
|
||||||
|
lex:add_rule('type', lex:tag(lexer.TYPE, lex:word_match(lexer.TYPE)))
|
||||||
|
|
||||||
|
-- Functions.
|
||||||
|
local builtin_proc = -lpeg.B('.') *
|
||||||
|
lex:tag(lexer.FUNCTION_BUILTIN, lex:word_match(lexer.FUNCTION_BUILTIN))
|
||||||
|
local proc = lex:tag(lexer.FUNCTION, lexer.word)
|
||||||
|
lex:add_rule('function', (builtin_proc + proc) * #(lexer.space^0 * '(') +
|
||||||
|
proc * #(lexer.space^0 * '::' * lexer.space^0 * "proc"))
|
||||||
|
|
||||||
|
-- Identifiers.
|
||||||
|
lex:add_rule('identifier', lex:tag(lexer.IDENTIFIER, lexer.word))
|
||||||
|
|
||||||
|
-- Strings.
|
||||||
|
local sq_str = lexer.range("'", true)
|
||||||
|
local dq_str = lexer.range('"', true)
|
||||||
|
local raw_str = lexer.range('`', false, false)
|
||||||
|
lex:add_rule('string', lex:tag(lexer.STRING, sq_str + dq_str + raw_str))
|
||||||
|
|
||||||
|
-- Comments.
|
||||||
|
local line_comment = lexer.to_eol('//')
|
||||||
|
local block_comment = lexer.range('/*', '*/')
|
||||||
|
lex:add_rule('comment', lex:tag(lexer.COMMENT, line_comment + block_comment))
|
||||||
|
|
||||||
|
-- Numbers.
|
||||||
|
lex:add_rule('number', lex:tag(lexer.NUMBER, lexer.number * P('i')^-1))
|
||||||
|
|
||||||
|
-- Operators.
|
||||||
|
lex:add_rule('operator', lex:tag(lexer.OPERATOR,
|
||||||
|
P('%%=') + P('&~=') + P('<<=') + P('>>=') + P('&&=') + P('||=') + P('---') + P('..=') +
|
||||||
|
P('..<') + P('%%') + P('&~') + P('<<') + P('>>') + P('&&') + P('||') + P('+=') + P('-=') +
|
||||||
|
P('*=') + P('/=') + P('%=') + P('&=') + P('|=') + P('~=') + P('++') + P('--') + P('->') +
|
||||||
|
P('==') + P('!=') + P('<=') + P('>=') + P('..') + S('=!#@$^?+-*/%&|~<>()[]{}:;.,')))
|
||||||
|
|
||||||
|
-- Fold points.
|
||||||
|
lex:add_fold_point(lexer.OPERATOR, '{', '}')
|
||||||
|
lex:add_fold_point(lexer.COMMENT, '/*', '*/')
|
||||||
|
|
||||||
|
-- Word lists.
|
||||||
|
lex:set_word_list(lexer.KEYWORD, {
|
||||||
|
'import', 'foreign', 'package', 'typeid', 'when', 'where', 'if', 'else', 'for', 'switch', 'in',
|
||||||
|
'not_in', 'do', 'case', 'break', 'continue', 'fallthrough', 'defer', 'return', 'proc', 'struct',
|
||||||
|
'union', 'enum', 'bit_set', 'bit_field', 'map', 'dynamic', 'auto_cast', 'cast', 'transmute',
|
||||||
|
'distinct', 'using', 'context', 'or_else', 'or_return', 'or_break', 'or_continue', 'asm', 'matrix'
|
||||||
|
})
|
||||||
|
|
||||||
|
lex:set_word_list(lexer.CONSTANT_BUILTIN, {
|
||||||
|
'ODIN_ARCH', 'ODIN_BUILD_MODE', 'ODIN_COMPILE_TIMESTAMP', 'ODIN_DEBUG',
|
||||||
|
'ODIN_DEFAULT_TO_NIL_ALLOCATOR', 'ODIN_DEFAULT_TO_PANIC_ALLOCATOR', 'ODIN_DISABLE_ASSERT',
|
||||||
|
'ODIN_ENDIAN', 'ODIN_ERROR_POS_STYLE', 'ODIN_NO_CRT', 'ODIN_NO_ENTRY_POINT', 'ODIN_NO_RTTI',
|
||||||
|
'ODIN_OS', 'ODIN_PLATFORM_SUBTARGET', 'ODIN_ROOT', 'ODIN_VENDOR', 'ODIN_VERSION',
|
||||||
|
'ODIN_WINDOWS_SUBSYSTEM', 'false', 'nil', 'true'
|
||||||
|
})
|
||||||
|
|
||||||
|
lex:set_word_list(lexer.TYPE, {
|
||||||
|
'b16', 'b32', 'b64', 'b8', 'bool', 'byte', 'complex128', 'complex32', 'complex64', 'cstring',
|
||||||
|
'cstring16', 'f16', 'f16be', 'f16le', 'f32', 'f32be', 'f32le', 'f64', 'f64be', 'f64le', 'i128',
|
||||||
|
'i128be', 'i128le', 'i16', 'i16be', 'i16le', 'i32', 'i32be', 'i32le', 'i64', 'i64be', 'i64le',
|
||||||
|
'i8', 'int', 'quaternion128', 'quaternion256', 'quaternion64', 'rawptr', 'rune', 'string',
|
||||||
|
'string16', 'typeid', 'u128', 'u128be', 'u128le', 'u16', 'u16be', 'u16le', 'u32', 'u32be',
|
||||||
|
'u32le', 'u64', 'u64be', 'u64le', 'u8', 'uint', 'uintptr', 'Maybe', 'Objc_Block'
|
||||||
|
})
|
||||||
|
|
||||||
|
lex:set_word_list(lexer.FUNCTION_BUILTIN, {
|
||||||
|
'abs', 'align_of', 'cap', 'clamp', 'complex', 'compress_values', 'conj', 'expand_values', 'imag',
|
||||||
|
'jmag', 'kmag', 'len', 'max', 'min', 'offset_of', 'offset_of_by_string', 'offset_of_member',
|
||||||
|
'offset_of_selector', 'quaternion', 'raw_data', 'real', 'size_of', 'soa_unzip', 'soa_zip',
|
||||||
|
'swizzle', 'type_info_of', 'type_of', 'typeid_of'
|
||||||
|
})
|
||||||
|
|
||||||
|
lexer.property['scintillua.comment'] = '//'
|
||||||
|
|
||||||
|
return lex
|
||||||
64
vis/.config/vis/plugins.sh
Executable file
64
vis/.config/vis/plugins.sh
Executable file
@@ -0,0 +1,64 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo 'error: argument required (action), one of: clone, fetch, merge' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
ACTION="$1"
|
||||||
|
PLUGINS_DIR=$(dirname $(realpath "$0"))/plugins
|
||||||
|
|
||||||
|
cd "$PLUGINS_DIR"
|
||||||
|
|
||||||
|
action() {
|
||||||
|
case "$1" in
|
||||||
|
*:*)
|
||||||
|
P="$1"
|
||||||
|
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
P="https://github.com/$1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
B=$(basename "$1")
|
||||||
|
B="${B%.git}"
|
||||||
|
case "$ACTION" in
|
||||||
|
clone)
|
||||||
|
if [ ! -e "$B" ]; then
|
||||||
|
echo "$ACTION $B"
|
||||||
|
git clone "$P"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
fetch)
|
||||||
|
if [ -e "$B" ]; then
|
||||||
|
echo "$ACTION $B"
|
||||||
|
git -C "$B" fetch
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
merge)
|
||||||
|
if [ -e "$B" ]; then
|
||||||
|
echo "$ACTION $B"
|
||||||
|
git -C "$B" merge
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "error: unsupported action: $ACTION" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
for plugin in \
|
||||||
|
'https://gitlab.com/muhq/vis-lspc' \
|
||||||
|
'lutobler/vis-commentary' \
|
||||||
|
'https://repo.or.cz/vis-surround.git' \
|
||||||
|
'peaceant/vis-fzf-mru' \
|
||||||
|
'https://gitlab.com/muhq/vis-build' \
|
||||||
|
'erf/vis-cursors' \
|
||||||
|
'thimc/vis-colorizer' \
|
||||||
|
'https://repo.or.cz/vis-quickfix.git' \
|
||||||
|
'https://repo.or.cz/vis-pairs.git' \
|
||||||
|
'https://gitea.lupan.pl/lupan/vis-pin-files.git'; \
|
||||||
|
do
|
||||||
|
action "$plugin"
|
||||||
|
done
|
||||||
@@ -1,44 +1,45 @@
|
|||||||
require('vis')
|
require('vis')
|
||||||
require('fast-jump')
|
require('fast-jump')
|
||||||
|
|
||||||
local plug = (function()
|
local lspc = require('plugins/vis-lspc')
|
||||||
if not pcall(require, 'plugins/vis-plug') then
|
require('plugins/vis-commentary')
|
||||||
os.execute('git clone --quiet https://github.com/erf/vis-plug ' ..
|
require('plugins/vis-surround')
|
||||||
(os.getenv('XDG_CONFIG_HOME') or os.getenv('HOME') .. '/.config')
|
local fzfmru = require('plugins/vis-fzf-mru/fzf-mru')
|
||||||
.. '/vis/plugins/vis-plug')
|
require('plugins/vis-build')
|
||||||
end
|
require('plugins/vis-cursors')
|
||||||
return require('plugins/vis-plug')
|
require('plugins/vis-colorizer')
|
||||||
end)()
|
local qf = require('plugins/vis-quickfix')
|
||||||
|
local pairs = require('plugins/vis-pairs')
|
||||||
|
|
||||||
plug = require('plugins/vis-plug')
|
require('plugins/vis-pin-files')
|
||||||
|
|
||||||
local plugins = {
|
pairs.autopairs = false
|
||||||
{ 'https://gitlab.com/muhq/vis-lspc', alias = 'lspc' },
|
|
||||||
{ 'lutobler/vis-commentary' },
|
|
||||||
{ 'https://repo.or.cz/vis-surround.git' },
|
|
||||||
{ 'peaceant/vis-fzf-mru', file = 'fzf-mru', alias = 'fzfmru' },
|
|
||||||
{ 'https://gitlab.com/muhq/vis-build' },
|
|
||||||
{ 'erf/vis-cursors' },
|
|
||||||
}
|
|
||||||
|
|
||||||
plug.init(plugins, true)
|
|
||||||
|
|
||||||
vis.ftdetect.filetypes.go_ext = vis.ftdetect.filetypes.go
|
vis.ftdetect.filetypes.go_ext = vis.ftdetect.filetypes.go
|
||||||
vis.ftdetect.filetypes.go = nil
|
vis.ftdetect.filetypes.go = nil
|
||||||
plug.plugins.lspc.ls_map.go_ext = plug.plugins.lspc.ls_map.go
|
lspc.ls_map.go_ext = lspc.ls_map.go
|
||||||
|
|
||||||
vis.ftdetect.filetypes.templ = {
|
vis.ftdetect.filetypes.templ = {
|
||||||
ext = { "%.templ$" },
|
ext = { "%.templ$" },
|
||||||
}
|
}
|
||||||
|
|
||||||
plug.plugins.lspc.message_level = 2
|
vis.ftdetect.filetypes.odin = {
|
||||||
|
ext = { "%.odin$" },
|
||||||
|
}
|
||||||
|
|
||||||
plug.plugins.lspc.ls_map.templ = {
|
lspc.message_level = 2
|
||||||
|
|
||||||
|
lspc.ls_map.templ = {
|
||||||
name = 'templ-lsp',
|
name = 'templ-lsp',
|
||||||
cmd = 'templ lsp',
|
cmd = 'templ lsp',
|
||||||
}
|
}
|
||||||
|
|
||||||
plug.plugins.fzfmru.fzfmru_history = 60
|
lspc.ls_map.odin = {
|
||||||
|
name = 'ols',
|
||||||
|
cmd = 'ols',
|
||||||
|
}
|
||||||
|
|
||||||
|
fzfmru.fzfmru_history = 60
|
||||||
|
|
||||||
local function open_file(file, cmd)
|
local function open_file(file, cmd)
|
||||||
vis:command((cmd or 'o') .. ' ' .. file)
|
vis:command((cmd or 'o') .. ' ' .. file)
|
||||||
@@ -134,30 +135,6 @@ local function search(cmd, action)
|
|||||||
cmd_action(cmd, action)
|
cmd_action(cmd, action)
|
||||||
end
|
end
|
||||||
|
|
||||||
local file_slots = {}
|
|
||||||
|
|
||||||
local function set_file_slot(num)
|
|
||||||
local file = vis.win.file.path
|
|
||||||
if file ~= nil then
|
|
||||||
file_slots[num] = file
|
|
||||||
vis:info('File slot [' .. num .. '] updated')
|
|
||||||
else
|
|
||||||
vis:info('Window has no file')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function open_file_slot(num, open_cmd)
|
|
||||||
local file = file_slots[num]
|
|
||||||
if file == nil then
|
|
||||||
vis:info('File slot [' .. num .. '] empty')
|
|
||||||
elseif file == vis.win.file.path then
|
|
||||||
vis:info('File slot [' .. num .. '] is the same file, no file change')
|
|
||||||
else
|
|
||||||
vis:info('File slot [' .. num .. '] open')
|
|
||||||
open_file(file, open_cmd)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function fzf_reload(cmd)
|
local function fzf_reload(cmd)
|
||||||
local prompt = escape_and_quoted('1. ' .. cmd:match('^%w*') .. '> ')
|
local prompt = escape_and_quoted('1. ' .. cmd:match('^%w*') .. '> ')
|
||||||
if not cmd:match('{q}') then
|
if not cmd:match('{q}') then
|
||||||
@@ -192,25 +169,15 @@ local function add_global_mark()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local last_theme = 'default'
|
|
||||||
|
|
||||||
local function set_current_theme()
|
local function set_current_theme()
|
||||||
local path = os.getenv('HOME') .. '/.config/xsettingsd/xsettingsd.conf'
|
local path = os.getenv('HOME') .. '/.lightmode'
|
||||||
|
local theme = 'lupan-dark'
|
||||||
local f = io.open(path)
|
local f = io.open(path)
|
||||||
if f then
|
if f then
|
||||||
local s = f:read('*all')
|
|
||||||
f:close()
|
f:close()
|
||||||
local theme = s:match('light') and 'light' or 'dark'
|
theme = 'lupan-light'
|
||||||
if theme == last_theme then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
last_theme = theme
|
|
||||||
if theme == 'light' then
|
|
||||||
vis:command('set theme lupan-light')
|
|
||||||
else
|
|
||||||
vis:command('set theme lupan-dark')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
vis:command('set theme ' .. theme)
|
||||||
end
|
end
|
||||||
|
|
||||||
local ripgrep = 'rg --column --line-number --color=always --smart-case'
|
local ripgrep = 'rg --column --line-number --color=always --smart-case'
|
||||||
@@ -278,21 +245,16 @@ vis.events.subscribe(vis.events.INIT, function()
|
|||||||
|
|
||||||
vis:map(vis.modes.NORMAL, '<M-k>', '<vis-window-prev>')
|
vis:map(vis.modes.NORMAL, '<M-k>', '<vis-window-prev>')
|
||||||
vis:map(vis.modes.NORMAL, '<M-j>', '<vis-window-next>')
|
vis:map(vis.modes.NORMAL, '<M-j>', '<vis-window-next>')
|
||||||
|
vis:map(vis.modes.NORMAL, '<M-n>', '<vis-prompt-show>open<Enter>')
|
||||||
vis:map(vis.modes.NORMAL, ' K', close_prev_win)
|
vis:map(vis.modes.NORMAL, ' K', close_prev_win)
|
||||||
vis:map(vis.modes.NORMAL, ' J', close_next_win)
|
vis:map(vis.modes.NORMAL, ' J', close_next_win)
|
||||||
|
vis:map(vis.modes.NORMAL, ' k', qf.action.cp)
|
||||||
|
vis:map(vis.modes.NORMAL, ' j', qf.action.cn)
|
||||||
|
|
||||||
vis:map(vis.modes.NORMAL, ' [', '<vis-prompt-show>lspc-prev-diagnostic<Enter>')
|
vis:map(vis.modes.NORMAL, ' [', '<vis-prompt-show>lspc-prev-diagnostic<Enter>')
|
||||||
vis:map(vis.modes.NORMAL, ' ]', '<vis-prompt-show>lspc-next-diagnostic<Enter>')
|
vis:map(vis.modes.NORMAL, ' ]', '<vis-prompt-show>lspc-next-diagnostic<Enter>')
|
||||||
vis:map(vis.modes.NORMAL, ' =', '<vis-prompt-show>lspc-format<Enter>')
|
vis:map(vis.modes.NORMAL, ' =', '<vis-prompt-show>lspc-format<Enter>')
|
||||||
|
|
||||||
for num = 1, 9 do
|
|
||||||
vis:map(vis.modes.NORMAL, ' r' .. num, function() set_file_slot(num) end, 'set file slot ' .. num)
|
|
||||||
vis:map(vis.modes.NORMAL, ' ' .. num, function() open_file_slot(num, 'e') end, 'open file slot ' .. num)
|
|
||||||
vis:map(vis.modes.NORMAL, ' h' .. num, function() open_file_slot(num, 'o') end, 'open file slot ' .. num)
|
|
||||||
vis:map(vis.modes.NORMAL, ' v' .. num, function() open_file_slot(num, 'vsplit') end,
|
|
||||||
'open file slot ' .. num)
|
|
||||||
end
|
|
||||||
|
|
||||||
vis:map(vis.modes.NORMAL, ' s', '<vis-prompt-show>fzf-files auto-search<Enter>', 'fzf: search')
|
vis:map(vis.modes.NORMAL, ' s', '<vis-prompt-show>fzf-files auto-search<Enter>', 'fzf: search')
|
||||||
vis:map(vis.modes.NORMAL, ' f', '<vis-prompt-show>fzf-files auto-files<Enter>', 'fzf: files')
|
vis:map(vis.modes.NORMAL, ' f', '<vis-prompt-show>fzf-files auto-files<Enter>', 'fzf: files')
|
||||||
vis:map(vis.modes.NORMAL, ' S', '<vis-prompt-show>fzf-files search<Enter>', 'fzf: search with rg')
|
vis:map(vis.modes.NORMAL, ' S', '<vis-prompt-show>fzf-files search<Enter>', 'fzf: search with rg')
|
||||||
@@ -302,12 +264,12 @@ vis.events.subscribe(vis.events.INIT, function()
|
|||||||
search(fzf_reload(ripgrep .. ' --with-filename {q} ' .. escape_and_quoted(vis.win.file.path)))
|
search(fzf_reload(ripgrep .. ' --with-filename {q} ' .. escape_and_quoted(vis.win.file.path)))
|
||||||
end, 'fzf: rg current file')
|
end, 'fzf: rg current file')
|
||||||
|
|
||||||
vis:map(vis.modes.NORMAL, ' .', function()
|
vis:map(vis.modes.NORMAL, ' d', function()
|
||||||
local shell = os.getenv('SHELL')
|
local shell = os.getenv('SHELL')
|
||||||
vis:command('!' .. shell)
|
vis:command('!' .. shell)
|
||||||
end, 'run shell')
|
end, 'run shell')
|
||||||
|
|
||||||
vis:map(vis.modes.NORMAL, ' ds', function()
|
vis:map(vis.modes.NORMAL, ' D', function()
|
||||||
local shell = os.getenv('SHELL')
|
local shell = os.getenv('SHELL')
|
||||||
local path = vis.win.file.path
|
local path = vis.win.file.path
|
||||||
if path then
|
if path then
|
||||||
@@ -339,16 +301,16 @@ vis.events.subscribe(vis.events.INIT, function()
|
|||||||
open_file_current_line('o')
|
open_file_current_line('o')
|
||||||
end, 'open file from current line in new window (with optional line and col)')
|
end, 'open file from current line in new window (with optional line and col)')
|
||||||
|
|
||||||
vis:map(vis.modes.NORMAL, ' k', function()
|
vis:map(vis.modes.NORMAL, ' zk', function()
|
||||||
open_file_current_line('e', '<vis-window-prev>')
|
open_file_current_line('e', '<vis-window-prev>')
|
||||||
end, 'open file from current line in above window (with optional line and col)')
|
end, 'open file from current line in above window (with optional line and col)')
|
||||||
|
|
||||||
vis:map(vis.modes.NORMAL, ' j', function()
|
vis:map(vis.modes.NORMAL, ' zj', function()
|
||||||
open_file_current_line('e', '<vis-window-next>')
|
open_file_current_line('e', '<vis-window-next>')
|
||||||
end, 'open file from current line in below window (with optional line and col)')
|
end, 'open file from current line in below window (with optional line and col)')
|
||||||
|
|
||||||
vis:map(vis.modes.NORMAL, ' c', function()
|
vis:map(vis.modes.NORMAL, ' c', function()
|
||||||
search('zoxide query -l | fzf', function(path)
|
search('( fd -t d "" ~/src ~/dotfiles -H -E "\\.git" -E node_modules ; zoxide query -l ) | fzf --scheme path', function(path)
|
||||||
vis:command('cd ' .. path)
|
vis:command('cd ' .. path)
|
||||||
end)
|
end)
|
||||||
end, 'fzf change directory')
|
end, 'fzf change directory')
|
||||||
@@ -370,7 +332,7 @@ vis.events.subscribe(vis.events.INIT, function()
|
|||||||
search('cat ~/.config/vis/global-marks.txt | fzf --tac')
|
search('cat ~/.config/vis/global-marks.txt | fzf --tac')
|
||||||
end, 'global marks: jump')
|
end, 'global marks: jump')
|
||||||
|
|
||||||
vis:map(vis.modes.NORMAL, ' em', function()
|
vis:map(vis.modes.NORMAL, ' zm', function()
|
||||||
vis:command('o ~/.config/vis/global-marks.txt')
|
vis:command('o ~/.config/vis/global-marks.txt')
|
||||||
end, 'global marks: edit')
|
end, 'global marks: edit')
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ XTerm.vt100.color15: #ECEFF4
|
|||||||
st.font: FiraCode Nerd Font:size=10
|
st.font: FiraCode Nerd Font:size=10
|
||||||
|
|
||||||
#ifdef THEME_DARK
|
#ifdef THEME_DARK
|
||||||
|
st.lightmode: 0
|
||||||
st.background: #1f212e
|
st.background: #1f212e
|
||||||
st.foreground: #9da0af
|
st.foreground: #9da0af
|
||||||
st.cursorColor: #bf8040
|
st.cursorColor: #bf8040
|
||||||
@@ -80,6 +81,7 @@ st.color13: #8f248f
|
|||||||
st.color14: #509595
|
st.color14: #509595
|
||||||
st.color15: #dbdff0
|
st.color15: #dbdff0
|
||||||
#else
|
#else
|
||||||
|
st.lightmode: 1
|
||||||
st.background: #f2f2f3
|
st.background: #f2f2f3
|
||||||
st.foreground: #1f212e
|
st.foreground: #1f212e
|
||||||
st.cursorColor: #bf8040
|
st.cursorColor: #bf8040
|
||||||
|
|||||||
@@ -30,6 +30,11 @@ xsetroot -cursor_name left_ptr
|
|||||||
|
|
||||||
picom -b -I 1 -O 1 -i 1 -e 1 --no-fading-openclose || compton -b --no-fading-openclose
|
picom -b -I 1 -O 1 -i 1 -e 1 --no-fading-openclose || compton -b --no-fading-openclose
|
||||||
|
|
||||||
|
if which dwm > /dev/null; then
|
||||||
|
lupan-clock &
|
||||||
|
exec dwm
|
||||||
|
fi
|
||||||
|
|
||||||
if which awesome > /dev/null; then
|
if which awesome > /dev/null; then
|
||||||
exec awesome
|
exec awesome
|
||||||
fi
|
fi
|
||||||
@@ -42,11 +47,6 @@ fi
|
|||||||
exec dk
|
exec dk
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if which dwm > /dev/null; then
|
|
||||||
lupan-clock &
|
|
||||||
exec dwm
|
|
||||||
fi
|
|
||||||
|
|
||||||
if which xmonad > /dev/null && test -f ~/.config/xmonad/xmonad.hs; then
|
if which xmonad > /dev/null && test -f ~/.config/xmonad/xmonad.hs; then
|
||||||
exec xmonad
|
exec xmonad
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -2,24 +2,27 @@
|
|||||||
|
|
||||||
THEME="$1"
|
THEME="$1"
|
||||||
|
|
||||||
XSET=$(readlink -e ~/.config/xsettingsd/xsettingsd.conf)
|
|
||||||
if [ "$THEME" = "toggle" ]; then
|
if [ "$THEME" = "toggle" ]; then
|
||||||
if grep Materia-dark "$XSET" > /dev/null; then
|
if [ -e ~/.lightmode ]; then
|
||||||
THEME=light
|
|
||||||
else
|
|
||||||
THEME=dark
|
THEME=dark
|
||||||
|
else
|
||||||
|
THEME=light
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$THEME" = dark ]; then
|
if [ "$THEME" = dark ]; then
|
||||||
GTK_THEME=Materia-dark
|
GTK_THEME=Materia-dark
|
||||||
|
rm -f ~/.lightmode
|
||||||
elif [ "$THEME" = light ]; then
|
elif [ "$THEME" = light ]; then
|
||||||
GTK_THEME=Materia-light
|
GTK_THEME=Materia-light
|
||||||
|
touch ~/.lightmode
|
||||||
else
|
else
|
||||||
echo "error: unknown theme: should be either dark, light or toggle" >&2
|
echo "error: unknown theme: should be either dark, light or toggle" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
pkill -USR1 '^dwm$'
|
||||||
|
|
||||||
XRES=$(readlink -e ~/.Xresources)
|
XRES=$(readlink -e ~/.Xresources)
|
||||||
if [ -n "$XRES" ]; then
|
if [ -n "$XRES" ]; then
|
||||||
if [ "$THEME" = dark ]; then
|
if [ "$THEME" = dark ]; then
|
||||||
@@ -28,7 +31,7 @@ if [ -n "$XRES" ]; then
|
|||||||
sed -i 's/^#define THEME_DARK/#undef THEME_DARK/' "$XRES"
|
sed -i 's/^#define THEME_DARK/#undef THEME_DARK/' "$XRES"
|
||||||
fi
|
fi
|
||||||
xrdb -merge "$XRES"
|
xrdb -merge "$XRES"
|
||||||
killall -USR1 st
|
pkill -USR1 '^st$'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Alacritty
|
# Alacritty
|
||||||
@@ -41,6 +44,7 @@ if [ -f "$ATOML" ]; then
|
|||||||
sed -i "s#^import =.*#import = [\"~/.config/alacritty/$THEME.toml\"]#" "$ATOML"
|
sed -i "s#^import =.*#import = [\"~/.config/alacritty/$THEME.toml\"]#" "$ATOML"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
XSET=$(readlink -e ~/.config/xsettingsd/xsettingsd.conf)
|
||||||
if [ "$THEME" = dark ]; then
|
if [ "$THEME" = dark ]; then
|
||||||
kitten themes --reload-in=all Afterglow
|
kitten themes --reload-in=all Afterglow
|
||||||
elif [ "$THEME" = light ]; then
|
elif [ "$THEME" = light ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user