mirror of
https://github.com/js0ny/dotfiles.git
synced 2025-12-21 08:43:00 +00:00
Merge remote-tracking branch 'refs/remotes/origin/master'
This commit is contained in:
commit
69d5596438
31 changed files with 279 additions and 1468 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1,4 +1,4 @@
|
||||||
*_private/
|
*private*
|
||||||
.private.env.*
|
.private.env.*
|
||||||
nvim/tt.*
|
nvim/tt.*
|
||||||
nvim/.tests
|
nvim/.tests
|
||||||
|
|
@ -16,3 +16,4 @@ test.*
|
||||||
*.tar
|
*.tar
|
||||||
*.zip
|
*.zip
|
||||||
*.tgz
|
*.tgz
|
||||||
|
WindowsTerminal.json
|
||||||
3
.haskline
Normal file
3
.haskline
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
editMode: Vi
|
||||||
|
bind: ctrl-p up
|
||||||
|
bind: ctrl-n down
|
||||||
6
.markdownlint.json
Normal file
6
.markdownlint.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"line-length": false,
|
||||||
|
"no-inline-html": false,
|
||||||
|
"no-alt-text": false,
|
||||||
|
"ul-style": { "style": "dash" }
|
||||||
|
}
|
||||||
74
.obsidian.vimrc
Normal file
74
.obsidian.vimrc
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
" Put this in OBSIDIAN_VAULT/.obsidian.vimrc
|
||||||
|
|
||||||
|
" Colemak 方向键映射 (hnei)
|
||||||
|
nnoremap k n
|
||||||
|
nnoremap K N
|
||||||
|
nnoremap j e
|
||||||
|
vnoremap j e
|
||||||
|
nnoremap l i
|
||||||
|
nnoremap N J
|
||||||
|
nnoremap E K
|
||||||
|
nnoremap I L
|
||||||
|
nnoremap J E
|
||||||
|
vnoremap J E
|
||||||
|
nnoremap L I
|
||||||
|
nnoremap k n
|
||||||
|
nnoremap K N
|
||||||
|
nnoremap j e
|
||||||
|
vnoremap j e
|
||||||
|
nnoremap l i
|
||||||
|
nnoremap N J
|
||||||
|
nnoremap E K
|
||||||
|
nnoremap I L
|
||||||
|
nnoremap J E
|
||||||
|
vnoremap J E
|
||||||
|
nnoremap L I
|
||||||
|
" 方向键映射
|
||||||
|
noremap n <Down> " 向下
|
||||||
|
noremap e <Up> " 向上
|
||||||
|
noremap i <Right> " 向右
|
||||||
|
|
||||||
|
|
||||||
|
""" Word wrap cursor movement
|
||||||
|
nmap j gj
|
||||||
|
nmap k gk
|
||||||
|
|
||||||
|
nmap Y y$ " Use Y to yank to the EOL
|
||||||
|
|
||||||
|
set clipboard=unnamed " Sync with System Clipboard
|
||||||
|
|
||||||
|
""" Visual mode surrounding
|
||||||
|
exmap addbold obcommand editor:toogle-bold
|
||||||
|
exmap additalic obcommand editor:toogle-italic
|
||||||
|
exmap addhighlight obcommand editor:toogle-highlight
|
||||||
|
exmap addcode obcommand editor:toogle-code
|
||||||
|
exmap adddel obcommand editor:toogle-strikethrough
|
||||||
|
vnoremap ~ :adddel<CR> " Add delete to selection
|
||||||
|
vnoremap ` c`<C-r>"`<Esc> " editor:toogle-code is buggy
|
||||||
|
vnoremap * :addbold<CR> " Add bold to selection
|
||||||
|
vnoremap _ :additalic<CR> " Add italic to selection
|
||||||
|
vnoremap = :addhighlight " Add highlight to selection
|
||||||
|
|
||||||
|
exmap prevtab obcommand workspace:previous-tab
|
||||||
|
exmap nexttab obcommand workspace:next-tab
|
||||||
|
nnoremap H :prevtab<CR>
|
||||||
|
nnoremap I :nexttab<CR>
|
||||||
|
|
||||||
|
exmap reload :source .obsidian.vimrc<CR>
|
||||||
|
|
||||||
|
unmap <Space>
|
||||||
|
exmap vsplit obcommand workspace:split-vertical
|
||||||
|
exmap hsplit obcommand workspace:split-horizontal
|
||||||
|
map <Space>| :vsplit<CR>
|
||||||
|
map <Space>- :hsplit<CR>
|
||||||
|
map <Space>bd
|
||||||
|
|
||||||
|
exmap chat obcommand obsidian-custom-frames:open-custom-frames-chatgpt
|
||||||
|
map <Space>ai :chat<CR>
|
||||||
|
|
||||||
|
exmap omnisearch obcommand omnisearch:show-modal
|
||||||
|
map <Space><Space> :omnisearch<CR>
|
||||||
|
|
||||||
|
""" g-commands
|
||||||
|
exmap tsource obcommand editor:toggle-source
|
||||||
|
nnoremap gs :tsource<CR>
|
||||||
8
nvim/.gitignore
vendored
8
nvim/.gitignore
vendored
|
|
@ -1,8 +0,0 @@
|
||||||
tt.*
|
|
||||||
.tests
|
|
||||||
doc/tags
|
|
||||||
debug
|
|
||||||
.repro
|
|
||||||
foo.*
|
|
||||||
*.log
|
|
||||||
data
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
{
|
|
||||||
"neodev": {
|
|
||||||
"library": {
|
|
||||||
"enabled": true,
|
|
||||||
"plugins": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"neoconf": {
|
|
||||||
"plugins": {
|
|
||||||
"lua_ls": {
|
|
||||||
"enabled": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
201
nvim/LICENSE
201
nvim/LICENSE
|
|
@ -1,201 +0,0 @@
|
||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
# 💤 LazyVim
|
|
||||||
|
|
||||||
A starter template for [LazyVim](https://github.com/LazyVim/LazyVim).
|
|
||||||
Refer to the [documentation](https://lazyvim.github.io/installation) to get started.
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
-- bootstrap lazy.nvim, LazyVim and your plugins
|
|
||||||
require("config.lazy")
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
||||||
{
|
|
||||||
"CopilotChat.nvim": { "branch": "canary", "commit": "6f143f210efd1f16d97c077b945c76b7d5fd0f8b" },
|
|
||||||
"LazyVim": { "branch": "main", "commit": "12818a6cb499456f4903c5d8e68af43753ebc869" },
|
|
||||||
"LuaSnip": { "branch": "master", "commit": "ce0a05ab4e2839e1c48d072c5236cce846a387bc" },
|
|
||||||
"bufferline.nvim": { "branch": "main", "commit": "0b2fd861eee7595015b6561dade52fb060be10c4" },
|
|
||||||
"catppuccin": { "branch": "main", "commit": "ba5f4153a5dad99505baba936bd0373534400ac3" },
|
|
||||||
"clangd_extensions.nvim": { "branch": "main", "commit": "a8500531c4ed3a207e744a374ea038744a0f93eb" },
|
|
||||||
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
|
||||||
"cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" },
|
|
||||||
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
|
|
||||||
"cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" },
|
|
||||||
"conform.nvim": { "branch": "master", "commit": "25d48271e3d4404ba017cb92a37d3a681c1ad149" },
|
|
||||||
"copilot-cmp": { "branch": "master", "commit": "b6e5286b3d74b04256d0a7e3bd2908eabec34b44" },
|
|
||||||
"copilot.lua": { "branch": "master", "commit": "86537b286f18783f8b67bccd78a4ef4345679625" },
|
|
||||||
"dashboard-nvim": { "branch": "master", "commit": "fabf5feec96185817c732d47d363f34034212685" },
|
|
||||||
"flash.nvim": { "branch": "main", "commit": "34c7be146a91fec3555c33fe89c7d643f6ef5cf1" },
|
|
||||||
"friendly-snippets": { "branch": "main", "commit": "00ebcaa159e817150bd83bfe2d51fa3b3377d5c4" },
|
|
||||||
"fzf-lua": { "branch": "main", "commit": "eb63a4bbfd203942737f76d4cf5424f6fb016a9d" },
|
|
||||||
"gitsigns.nvim": { "branch": "main", "commit": "564849a17bf5c5569e0bae98c8328de9c7a1ed29" },
|
|
||||||
"grug-far.nvim": { "branch": "main", "commit": "af2c8bba4faac4b47165005639573e4493e9d79e" },
|
|
||||||
"indent-blankline.nvim": { "branch": "master", "commit": "65e20ab94a26d0e14acac5049b8641336819dfc7" },
|
|
||||||
"lazy.nvim": { "branch": "main", "commit": "077102c5bfc578693f12377846d427f49bc50076" },
|
|
||||||
"lazydev.nvim": { "branch": "main", "commit": "491452cf1ca6f029e90ad0d0368848fac717c6d2" },
|
|
||||||
"lualine.nvim": { "branch": "master", "commit": "544dd1583f9bb27b393f598475c89809c4d5e86b" },
|
|
||||||
"luvit-meta": { "branch": "main", "commit": "ce76f6f6cdc9201523a5875a4471dcfe0186eb60" },
|
|
||||||
"markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" },
|
|
||||||
"markdown.nvim": { "branch": "main", "commit": "70ae5e9e517c930f74c3ad9e4ef325314967f2a0" },
|
|
||||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "fd69d5c782a28420d51b648a3d7fe88df569d391" },
|
|
||||||
"mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" },
|
|
||||||
"mini.ai": { "branch": "main", "commit": "45587078f323eaf41b9f701bbc04f8d1ab008979" },
|
|
||||||
"mini.icons": { "branch": "main", "commit": "fe63fe080e76d80713557e5f0c65bc15b14b152d" },
|
|
||||||
"mini.pairs": { "branch": "main", "commit": "927d19cbdd0e752ab1c7eed87072e71d2cd6ff51" },
|
|
||||||
"neo-tree.nvim": { "branch": "main", "commit": "206241e451c12f78969ff5ae53af45616ffc9b72" },
|
|
||||||
"noice.nvim": { "branch": "main", "commit": "448bb9c524a7601035449210838e374a30153172" },
|
|
||||||
"nui.nvim": { "branch": "main", "commit": "61574ce6e60c815b0a0c4b5655b8486ba58089a1" },
|
|
||||||
"nvim-cmp": { "branch": "main", "commit": "ae644feb7b67bf1ce4260c231d1d4300b19c6f30" },
|
|
||||||
"nvim-jdtls": { "branch": "master", "commit": "6bfd1591583b02e742fc3a2f43393c4ea3b6d3c7" },
|
|
||||||
"nvim-lint": { "branch": "master", "commit": "efc6fc83f0772283e064c53a8f9fb5645bde0bc0" },
|
|
||||||
"nvim-lspconfig": { "branch": "master", "commit": "e6528f4613c8db2e04be908eb2b5886d63f62a98" },
|
|
||||||
"nvim-notify": { "branch": "master", "commit": "d333b6f167900f6d9d42a59005d82919830626bf" },
|
|
||||||
"nvim-treesitter": { "branch": "master", "commit": "a7a3b9c10e8a5fe0da05ebb65db3ed1d164e612d" },
|
|
||||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "48128953949b51235ccada535f021a505fdaf3df" },
|
|
||||||
"nvim-ts-autotag": { "branch": "main", "commit": "dc5e1687ab76ee02e0f11c5ce137f530b36e98b3" },
|
|
||||||
"omnisharp-extended-lsp.nvim": { "branch": "main", "commit": "aad7bf06b4ca0de816b919d475a75b30f5f62b61" },
|
|
||||||
"persistence.nvim": { "branch": "main", "commit": "f6aad7dde7fcf54148ccfc5f622c6d5badd0cc3d" },
|
|
||||||
"plenary.nvim": { "branch": "master", "commit": "a3e3bc82a3f95c5ed0d7201546d5d2c19b20d683" },
|
|
||||||
"todo-comments.nvim": { "branch": "main", "commit": "8f45f353dc3649cb9b44cecda96827ea88128584" },
|
|
||||||
"tokyonight.nvim": { "branch": "main", "commit": "b0e7c7382a7e8f6456f2a95655983993ffda745e" },
|
|
||||||
"trouble.nvim": { "branch": "main", "commit": "6efc446226679fda0547c0fd6a7892fd5f5b15d8" },
|
|
||||||
"ts-comments.nvim": { "branch": "main", "commit": "98d7d4dec0af1312d38e288f800bbf6ff562b6ab" },
|
|
||||||
"vim-wakatime": { "branch": "master", "commit": "3cb40867cb5a3120f9bef76eff88edc7f1dc1a23" },
|
|
||||||
"vimtex": { "branch": "master", "commit": "80c9bc179784c30192d482741a43f176c859daa1" },
|
|
||||||
"which-key.nvim": { "branch": "main", "commit": "6c1584eb76b55629702716995cca4ae2798a9cca" },
|
|
||||||
"yanky.nvim": { "branch": "main", "commit": "73215b77d22ebb179cef98e7e1235825431d10e4" }
|
|
||||||
}
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
{
|
|
||||||
"extras": [
|
|
||||||
"lazyvim.plugins.extras.coding.copilot",
|
|
||||||
"lazyvim.plugins.extras.coding.copilot-chat",
|
|
||||||
"lazyvim.plugins.extras.coding.luasnip",
|
|
||||||
"lazyvim.plugins.extras.coding.yanky",
|
|
||||||
"lazyvim.plugins.extras.editor.fzf",
|
|
||||||
"lazyvim.plugins.extras.lang.clangd",
|
|
||||||
"lazyvim.plugins.extras.lang.java",
|
|
||||||
"lazyvim.plugins.extras.lang.markdown",
|
|
||||||
"lazyvim.plugins.extras.lang.omnisharp",
|
|
||||||
"lazyvim.plugins.extras.lang.python",
|
|
||||||
"lazyvim.plugins.extras.lang.tex",
|
|
||||||
"lazyvim.plugins.extras.util.dot"
|
|
||||||
],
|
|
||||||
"news": {
|
|
||||||
"NEWS.md": "6520"
|
|
||||||
},
|
|
||||||
"version": 6
|
|
||||||
}
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
-- Autocmds are automatically loaded on the VeryLazy event
|
|
||||||
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
|
|
||||||
-- Add any additional autocmds here
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
-- Keymaps are automatically loaded on the VeryLazy event
|
|
||||||
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
|
|
||||||
-- Add any additional keymaps here
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
|
||||||
|
|
||||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
|
||||||
-- bootstrap lazy.nvim
|
|
||||||
-- stylua: ignore
|
|
||||||
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
|
|
||||||
end
|
|
||||||
vim.opt.rtp:prepend(lazypath)
|
|
||||||
|
|
||||||
require("lazy").setup({
|
|
||||||
spec = {
|
|
||||||
-- add LazyVim and import its plugins
|
|
||||||
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
|
||||||
-- import/override with your plugins
|
|
||||||
{ import = "plugins" },
|
|
||||||
},
|
|
||||||
defaults = {
|
|
||||||
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
|
|
||||||
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
|
|
||||||
lazy = false,
|
|
||||||
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
|
|
||||||
-- have outdated releases, which may break your Neovim install.
|
|
||||||
version = false, -- always use the latest git commit
|
|
||||||
-- version = "*", -- try installing the latest stable version for plugins that support semver
|
|
||||||
},
|
|
||||||
install = { colorscheme = { "tokyonight", "habamax" } },
|
|
||||||
checker = { enabled = true }, -- automatically check for plugin updates
|
|
||||||
performance = {
|
|
||||||
rtp = {
|
|
||||||
-- disable some rtp plugins
|
|
||||||
disabled_plugins = {
|
|
||||||
"gzip",
|
|
||||||
-- "matchit",
|
|
||||||
-- "matchparen",
|
|
||||||
-- "netrwPlugin",
|
|
||||||
"tarPlugin",
|
|
||||||
"tohtml",
|
|
||||||
"tutor",
|
|
||||||
"zipPlugin",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
-- Options are automatically loaded before lazy.nvim startup
|
|
||||||
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
|
|
||||||
-- Add any additional options here
|
|
||||||
|
|
||||||
vim.g.autoformat = true
|
|
||||||
vim.g.lazygit_config = true
|
|
||||||
|
|
||||||
-- Tabs
|
|
||||||
vim.opt.tabstop = 4
|
|
||||||
vim.opt.softtabstop = 4
|
|
||||||
vim.opt.shiftwidth = 4
|
|
||||||
vim.opt.expandtab = true
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
||||||
return {
|
|
||||||
{
|
|
||||||
"folke/tokyonight.nvim",
|
|
||||||
lazy = true,
|
|
||||||
opts = { style = "moon" },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"catppuccin/nvim",
|
|
||||||
lazy = true,
|
|
||||||
name = "catppuccin",
|
|
||||||
opts = {
|
|
||||||
integrations = {
|
|
||||||
aerial = true,
|
|
||||||
alpha = true,
|
|
||||||
cmp = true,
|
|
||||||
dashboard = true,
|
|
||||||
flash = true,
|
|
||||||
gitsigns = true,
|
|
||||||
headlines = true,
|
|
||||||
illuminate = true,
|
|
||||||
indent_blankline = { enabled = true },
|
|
||||||
leap = true,
|
|
||||||
lsp_trouble = true,
|
|
||||||
mason = true,
|
|
||||||
markdown = true,
|
|
||||||
mini = true,
|
|
||||||
native_lsp = {
|
|
||||||
enabled = true,
|
|
||||||
underlines = {
|
|
||||||
errors = { "undercurl" },
|
|
||||||
hints = { "undercurl" },
|
|
||||||
warnings = { "undercurl" },
|
|
||||||
information = { "undercurl" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
navic = { enabled = true, custom_bg = "lualine" },
|
|
||||||
neotest = true,
|
|
||||||
neotree = true,
|
|
||||||
noice = true,
|
|
||||||
notify = true,
|
|
||||||
semantic_tokens = true,
|
|
||||||
telescope = true,
|
|
||||||
treesitter = true,
|
|
||||||
treesitter_context = true,
|
|
||||||
which_key = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"LazyVim/LazyVim",
|
|
||||||
opts = {
|
|
||||||
colorscheme = "catppuccin",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
||||||
return {
|
|
||||||
{
|
|
||||||
"nvimdev/dashboard-nvim",
|
|
||||||
lazy = false, -- As https://github.com/nvimdev/dashboard-nvim/pull/450, dashboard-nvim shouldn't be lazy-loaded to properly handle stdin.
|
|
||||||
opts = function()
|
|
||||||
local logo = [[
|
|
||||||
|
|
||||||
|
|
||||||
██╗███████╗ ██████╗ ███╗ ██╗██╗ ██╗
|
|
||||||
██║██╔════╝██╔═████╗████╗ ██║╚██╗ ██╔╝
|
|
||||||
██║███████╗██║██╔██║██╔██╗ ██║ ╚████╔╝
|
|
||||||
██ ██║╚════██║████╔╝██║██║╚██╗██║ ╚██╔╝
|
|
||||||
╚█████╔╝███████║╚██████╔╝██║ ╚████║ ██║
|
|
||||||
╚════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝
|
|
||||||
|
|
||||||
]]
|
|
||||||
|
|
||||||
logo = string.rep("\n", 8) .. logo .. "\n\n"
|
|
||||||
|
|
||||||
local opts = {
|
|
||||||
theme = "doom",
|
|
||||||
hide = {
|
|
||||||
-- this is taken care of by lualine
|
|
||||||
-- enabling this messes up the actual laststatus setting after loading a file
|
|
||||||
statusline = false,
|
|
||||||
},
|
|
||||||
config = {
|
|
||||||
header = vim.split(logo, "\n"),
|
|
||||||
-- stylua: ignore
|
|
||||||
center = {
|
|
||||||
{ action = 'lua LazyVim.pick()()', desc = " Find File", icon = " ", key = "f" },
|
|
||||||
{ action = "ene | startinsert", desc = " New File", icon = " ", key = "n" },
|
|
||||||
{ action = 'lua LazyVim.pick("oldfiles")()', desc = " Recent Files", icon = " ", key = "r" },
|
|
||||||
{ action = 'lua LazyVim.pick("live_grep")()', desc = " Find Text", icon = " ", key = "g" },
|
|
||||||
{ action = 'lua LazyVim.pick.config_files()()', desc = " Config", icon = " ", key = "c" },
|
|
||||||
{ action = 'lua require("persistence").load()', desc = " Restore Session", icon = " ", key = "s" },
|
|
||||||
{ action = "LazyExtras", desc = " Lazy Extras", icon = " ", key = "x" },
|
|
||||||
{ action = "Lazy", desc = " Lazy", icon = " ", key = "l" },
|
|
||||||
{ action = function() vim.api.nvim_input("<cmd>qa<cr>") end, desc = " Quit", icon = " ", key = "q" },
|
|
||||||
},
|
|
||||||
footer = function()
|
|
||||||
local stats = require("lazy").stats()
|
|
||||||
local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100)
|
|
||||||
return { "⚡ Neovim loaded " .. stats.loaded .. "/" .. stats.count .. " plugins in " .. ms .. "ms" }
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, button in ipairs(opts.config.center) do
|
|
||||||
button.desc = button.desc .. string.rep(" ", 43 - #button.desc)
|
|
||||||
button.key_format = " %s"
|
|
||||||
end
|
|
||||||
|
|
||||||
-- open dashboard after closing lazy
|
|
||||||
if vim.o.filetype == "lazy" then
|
|
||||||
vim.api.nvim_create_autocmd("WinClosed", {
|
|
||||||
pattern = tostring(vim.api.nvim_get_current_win()),
|
|
||||||
once = true,
|
|
||||||
callback = function()
|
|
||||||
vim.schedule(function()
|
|
||||||
vim.api.nvim_exec_autocmds("UIEnter", { group = "dashboard" })
|
|
||||||
end)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
return opts
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,193 +0,0 @@
|
||||||
-- since this is just an example spec, don't actually load anything here and return an empty spec
|
|
||||||
-- stylua: ignore
|
|
||||||
if true then return {} end
|
|
||||||
|
|
||||||
-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
|
|
||||||
--
|
|
||||||
-- In your plugin files, you can:
|
|
||||||
-- * add extra plugins
|
|
||||||
-- * disable/enabled LazyVim plugins
|
|
||||||
-- * override the configuration of LazyVim plugins
|
|
||||||
return {
|
|
||||||
-- add gruvbox
|
|
||||||
{ "ellisonleao/gruvbox.nvim" },
|
|
||||||
|
|
||||||
-- Configure LazyVim to load gruvbox
|
|
||||||
{
|
|
||||||
"LazyVim/LazyVim",
|
|
||||||
opts = {
|
|
||||||
colorscheme = "gruvbox",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- change trouble config
|
|
||||||
{
|
|
||||||
"folke/trouble.nvim",
|
|
||||||
-- opts will be merged with the parent spec
|
|
||||||
opts = { use_diagnostic_signs = true },
|
|
||||||
},
|
|
||||||
|
|
||||||
-- disable trouble
|
|
||||||
{ "folke/trouble.nvim", enabled = false },
|
|
||||||
|
|
||||||
-- override nvim-cmp and add cmp-emoji
|
|
||||||
{
|
|
||||||
"hrsh7th/nvim-cmp",
|
|
||||||
dependencies = { "hrsh7th/cmp-emoji" },
|
|
||||||
---@param opts cmp.ConfigSchema
|
|
||||||
opts = function(_, opts)
|
|
||||||
table.insert(opts.sources, { name = "emoji" })
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- change some telescope options and a keymap to browse plugin files
|
|
||||||
{
|
|
||||||
"nvim-telescope/telescope.nvim",
|
|
||||||
keys = {
|
|
||||||
-- add a keymap to browse plugin files
|
|
||||||
-- stylua: ignore
|
|
||||||
{
|
|
||||||
"<leader>fp",
|
|
||||||
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
|
|
||||||
desc = "Find Plugin File",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- change some options
|
|
||||||
opts = {
|
|
||||||
defaults = {
|
|
||||||
layout_strategy = "horizontal",
|
|
||||||
layout_config = { prompt_position = "top" },
|
|
||||||
sorting_strategy = "ascending",
|
|
||||||
winblend = 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- add pyright to lspconfig
|
|
||||||
{
|
|
||||||
"neovim/nvim-lspconfig",
|
|
||||||
---@class PluginLspOpts
|
|
||||||
opts = {
|
|
||||||
---@type lspconfig.options
|
|
||||||
servers = {
|
|
||||||
-- pyright will be automatically installed with mason and loaded with lspconfig
|
|
||||||
pyright = {},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- add tsserver and setup with typescript.nvim instead of lspconfig
|
|
||||||
{
|
|
||||||
"neovim/nvim-lspconfig",
|
|
||||||
dependencies = {
|
|
||||||
"jose-elias-alvarez/typescript.nvim",
|
|
||||||
init = function()
|
|
||||||
require("lazyvim.util").lsp.on_attach(function(_, buffer)
|
|
||||||
-- stylua: ignore
|
|
||||||
vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
|
|
||||||
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
|
|
||||||
end)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
---@class PluginLspOpts
|
|
||||||
opts = {
|
|
||||||
---@type lspconfig.options
|
|
||||||
servers = {
|
|
||||||
-- tsserver will be automatically installed with mason and loaded with lspconfig
|
|
||||||
tsserver = {},
|
|
||||||
},
|
|
||||||
-- you can do any additional lsp server setup here
|
|
||||||
-- return true if you don't want this server to be setup with lspconfig
|
|
||||||
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
|
|
||||||
setup = {
|
|
||||||
-- example to setup with typescript.nvim
|
|
||||||
tsserver = function(_, opts)
|
|
||||||
require("typescript").setup({ server = opts })
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
-- Specify * to use this function as a fallback for any server
|
|
||||||
-- ["*"] = function(server, opts) end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
|
|
||||||
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
|
|
||||||
{ import = "lazyvim.plugins.extras.lang.typescript" },
|
|
||||||
|
|
||||||
-- add more treesitter parsers
|
|
||||||
{
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
opts = {
|
|
||||||
ensure_installed = {
|
|
||||||
"bash",
|
|
||||||
"html",
|
|
||||||
"javascript",
|
|
||||||
"json",
|
|
||||||
"lua",
|
|
||||||
"markdown",
|
|
||||||
"markdown_inline",
|
|
||||||
"python",
|
|
||||||
"query",
|
|
||||||
"regex",
|
|
||||||
"tsx",
|
|
||||||
"typescript",
|
|
||||||
"vim",
|
|
||||||
"yaml",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
|
|
||||||
-- would overwrite `ensure_installed` with the new value.
|
|
||||||
-- If you'd rather extend the default config, use the code below instead:
|
|
||||||
{
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
opts = function(_, opts)
|
|
||||||
-- add tsx and treesitter
|
|
||||||
vim.list_extend(opts.ensure_installed, {
|
|
||||||
"tsx",
|
|
||||||
"typescript",
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- the opts function can also be used to change the default opts:
|
|
||||||
{
|
|
||||||
"nvim-lualine/lualine.nvim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
opts = function(_, opts)
|
|
||||||
table.insert(opts.sections.lualine_x, "😄")
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- or you can return new options to override all the defaults
|
|
||||||
{
|
|
||||||
"nvim-lualine/lualine.nvim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
opts = function()
|
|
||||||
return {
|
|
||||||
--[[add your custom lualine config here]]
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- use mini.starter instead of alpha
|
|
||||||
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
|
|
||||||
|
|
||||||
-- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
|
|
||||||
{ import = "lazyvim.plugins.extras.lang.json" },
|
|
||||||
|
|
||||||
-- add any tools you want to have installed below
|
|
||||||
{
|
|
||||||
"williamboman/mason.nvim",
|
|
||||||
opts = {
|
|
||||||
ensure_installed = {
|
|
||||||
"stylua",
|
|
||||||
"shellcheck",
|
|
||||||
"shfmt",
|
|
||||||
"flake8",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,228 +0,0 @@
|
||||||
return {
|
|
||||||
{
|
|
||||||
"ibhagwan/fzf-lua",
|
|
||||||
cmd = "FzfLua",
|
|
||||||
opts = function(_, opts)
|
|
||||||
local config = require("fzf-lua.config")
|
|
||||||
local actions = require("fzf-lua.actions")
|
|
||||||
|
|
||||||
-- Quickfix
|
|
||||||
config.defaults.keymap.fzf["ctrl-q"] = "select-all+accept"
|
|
||||||
config.defaults.keymap.fzf["ctrl-u"] = "half-page-up"
|
|
||||||
config.defaults.keymap.fzf["ctrl-d"] = "half-page-down"
|
|
||||||
config.defaults.keymap.fzf["ctrl-x"] = "jump"
|
|
||||||
config.defaults.keymap.fzf["ctrl-f"] = "preview-page-down"
|
|
||||||
config.defaults.keymap.fzf["ctrl-b"] = "preview-page-up"
|
|
||||||
config.defaults.keymap.builtin["<c-f>"] = "preview-page-down"
|
|
||||||
config.defaults.keymap.builtin["<c-b>"] = "preview-page-up"
|
|
||||||
|
|
||||||
-- Trouble
|
|
||||||
if LazyVim.has("trouble.nvim") then
|
|
||||||
config.defaults.actions.files["ctrl-t"] = require("trouble.sources.fzf").actions.open
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Toggle root dir / cwd
|
|
||||||
config.defaults.actions.files["ctrl-r"] = function(_, ctx)
|
|
||||||
local o = vim.deepcopy(ctx.__call_opts)
|
|
||||||
o.root = o.root == false
|
|
||||||
o.cwd = nil
|
|
||||||
o.buf = ctx.__CTX.bufnr
|
|
||||||
LazyVim.pick.open(ctx.__INFO.cmd, o)
|
|
||||||
end
|
|
||||||
config.defaults.actions.files["alt-c"] = config.defaults.actions.files["ctrl-r"]
|
|
||||||
config.set_action_helpstr(config.defaults.actions.files["ctrl-r"], "toggle-root-dir")
|
|
||||||
|
|
||||||
-- use the same prompt for all
|
|
||||||
local defaults = require("fzf-lua.profiles.default-title")
|
|
||||||
local function fix(t)
|
|
||||||
t.prompt = t.prompt ~= nil and " " or nil
|
|
||||||
for _, v in pairs(t) do
|
|
||||||
if type(v) == "table" then
|
|
||||||
fix(v)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
fix(defaults)
|
|
||||||
|
|
||||||
local img_previewer ---@type string[]?
|
|
||||||
for _, v in ipairs({
|
|
||||||
{ cmd = "ueberzug", args = {} },
|
|
||||||
{ cmd = "chafa", args = { "{file}", "--format=symbols" } },
|
|
||||||
{ cmd = "viu", args = { "-b" } },
|
|
||||||
}) do
|
|
||||||
if vim.fn.executable(v.cmd) == 1 then
|
|
||||||
img_previewer = vim.list_extend({ v.cmd }, v.args)
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return vim.tbl_deep_extend("force", defaults, {
|
|
||||||
fzf_colors = true,
|
|
||||||
fzf_opts = {
|
|
||||||
["--no-scrollbar"] = false,
|
|
||||||
},
|
|
||||||
defaults = {
|
|
||||||
-- formatter = "path.filename_first",
|
|
||||||
formatter = "path.dirname_first",
|
|
||||||
},
|
|
||||||
previewers = {
|
|
||||||
builtin = {
|
|
||||||
extensions = {
|
|
||||||
["png"] = img_previewer,
|
|
||||||
["jpg"] = img_previewer,
|
|
||||||
["jpeg"] = img_previewer,
|
|
||||||
["gif"] = img_previewer,
|
|
||||||
["webp"] = img_previewer,
|
|
||||||
},
|
|
||||||
ueberzug_scaler = "fit_contain",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- Custom LazyVim option to configure vim.ui.select
|
|
||||||
ui_select = function(fzf_opts, items)
|
|
||||||
return vim.tbl_deep_extend("force", fzf_opts, {
|
|
||||||
prompt = " ",
|
|
||||||
winopts = {
|
|
||||||
title = " " .. vim.trim((fzf_opts.prompt or "Select"):gsub("%s*:%s*$", "")) .. " ",
|
|
||||||
title_pos = "center",
|
|
||||||
},
|
|
||||||
}, fzf_opts.kind == "codeaction" and {
|
|
||||||
winopts = {
|
|
||||||
layout = "vertical",
|
|
||||||
-- height is number of items minus 15 lines for the preview, with a max of 80% screen height
|
|
||||||
height = math.floor(math.min(vim.o.lines * 0.8 - 16, #items + 2) + 0.5) + 16,
|
|
||||||
width = 0.5,
|
|
||||||
preview = not vim.tbl_isempty(LazyVim.lsp.get_clients({ bufnr = 0, name = "vtsls" })) and {
|
|
||||||
layout = "vertical",
|
|
||||||
vertical = "down:15,border-top",
|
|
||||||
hidden = "hidden",
|
|
||||||
} or {
|
|
||||||
layout = "vertical",
|
|
||||||
vertical = "down:15,border-top",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
} or {
|
|
||||||
winopts = {
|
|
||||||
width = 0.5,
|
|
||||||
-- height is number of items, with a max of 80% screen height
|
|
||||||
height = math.floor(math.min(vim.o.lines * 0.8, #items + 2) + 0.5),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
winopts = {
|
|
||||||
width = 0.8,
|
|
||||||
height = 0.8,
|
|
||||||
row = 0.5,
|
|
||||||
col = 0.5,
|
|
||||||
preview = {
|
|
||||||
scrollchars = { "┃", "" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
files = {
|
|
||||||
cwd_prompt = false,
|
|
||||||
actions = {
|
|
||||||
["alt-i"] = { actions.toggle_ignore },
|
|
||||||
["alt-h"] = { actions.toggle_hidden },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
grep = {
|
|
||||||
actions = {
|
|
||||||
["alt-i"] = { actions.toggle_ignore },
|
|
||||||
["alt-h"] = { actions.toggle_hidden },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
lsp = {
|
|
||||||
symbols = {
|
|
||||||
symbol_hl = function(s)
|
|
||||||
return "TroubleIcon" .. s
|
|
||||||
end,
|
|
||||||
symbol_fmt = function(s)
|
|
||||||
return s:lower() .. "\t"
|
|
||||||
end,
|
|
||||||
child_prefix = false,
|
|
||||||
},
|
|
||||||
code_actions = {
|
|
||||||
previewer = vim.fn.executable("delta") == 1 and "codeaction_native" or nil,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
config = function(_, opts)
|
|
||||||
require("fzf-lua").setup(opts)
|
|
||||||
end,
|
|
||||||
init = function()
|
|
||||||
LazyVim.on_very_lazy(function()
|
|
||||||
vim.ui.select = function(...)
|
|
||||||
require("lazy").load({ plugins = { "fzf-lua" } })
|
|
||||||
local opts = LazyVim.opts("fzf-lua") or {}
|
|
||||||
require("fzf-lua").register_ui_select(opts.ui_select or nil)
|
|
||||||
return vim.ui.select(...)
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end,
|
|
||||||
keys = {
|
|
||||||
{ "<c-j>", "<c-j>", ft = "fzf", mode = "t", nowait = true },
|
|
||||||
{ "<c-k>", "<c-k>", ft = "fzf", mode = "t", nowait = true },
|
|
||||||
{
|
|
||||||
"<leader>,",
|
|
||||||
"<cmd>FzfLua buffers sort_mru=true sort_lastused=true<cr>",
|
|
||||||
desc = "Switch Buffer",
|
|
||||||
},
|
|
||||||
{ "<leader>/", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" },
|
|
||||||
{ "<leader>:", "<cmd>FzfLua command_history<cr>", desc = "Command History" },
|
|
||||||
{ "<leader><space>", LazyVim.pick("files"), desc = "Find Files (Root Dir)" },
|
|
||||||
-- find
|
|
||||||
{ "<leader>fb", "<cmd>FzfLua buffers sort_mru=true sort_lastused=true<cr>", desc = "Buffers" },
|
|
||||||
{ "<leader>fc", LazyVim.pick.config_files(), desc = "Find Config File" },
|
|
||||||
{ "<leader>ff", LazyVim.pick("files"), desc = "Find Files (Root Dir)" },
|
|
||||||
{ "<leader>fF", LazyVim.pick("files", { root = false }), desc = "Find Files (cwd)" },
|
|
||||||
{ "<leader>fg", "<cmd>FzfLua git_files<cr>", desc = "Find Files (git-files)" },
|
|
||||||
{ "<leader>fr", "<cmd>FzfLua oldfiles<cr>", desc = "Recent" },
|
|
||||||
{ "<leader>fR", LazyVim.pick("oldfiles", { cwd = vim.uv.cwd() }), desc = "Recent (cwd)" },
|
|
||||||
-- git
|
|
||||||
{ "<leader>gc", "<cmd>FzfLua git_commits<CR>", desc = "Commits" },
|
|
||||||
{ "<leader>gs", "<cmd>FzfLua git_status<CR>", desc = "Status" },
|
|
||||||
-- search
|
|
||||||
{ '<leader>s"', "<cmd>FzfLua registers<cr>", desc = "Registers" },
|
|
||||||
{ "<leader>sa", "<cmd>FzfLua autocmds<cr>", desc = "Auto Commands" },
|
|
||||||
{ "<leader>sb", "<cmd>FzfLua grep_curbuf<cr>", desc = "Buffer" },
|
|
||||||
{ "<leader>sc", "<cmd>FzfLua command_history<cr>", desc = "Command History" },
|
|
||||||
{ "<leader>sC", "<cmd>FzfLua commands<cr>", desc = "Commands" },
|
|
||||||
{ "<leader>sd", "<cmd>FzfLua diagnostics_document<cr>", desc = "Document Diagnostics" },
|
|
||||||
{ "<leader>sD", "<cmd>FzfLua diagnostics_workspace<cr>", desc = "Workspace Diagnostics" },
|
|
||||||
{ "<leader>sg", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" },
|
|
||||||
{ "<leader>sG", LazyVim.pick("live_grep", { root = false }), desc = "Grep (cwd)" },
|
|
||||||
{ "<leader>sh", "<cmd>FzfLua help_tags<cr>", desc = "Help Pages" },
|
|
||||||
{ "<leader>sH", "<cmd>FzfLua highlights<cr>", desc = "Search Highlight Groups" },
|
|
||||||
{ "<leader>sj", "<cmd>FzfLua jumps<cr>", desc = "Jumplist" },
|
|
||||||
{ "<leader>sk", "<cmd>FzfLua keymaps<cr>", desc = "Key Maps" },
|
|
||||||
{ "<leader>sl", "<cmd>FzfLua loclist<cr>", desc = "Location List" },
|
|
||||||
{ "<leader>sM", "<cmd>FzfLua man_pages<cr>", desc = "Man Pages" },
|
|
||||||
{ "<leader>sm", "<cmd>FzfLua marks<cr>", desc = "Jump to Mark" },
|
|
||||||
{ "<leader>sR", "<cmd>FzfLua resume<cr>", desc = "Resume" },
|
|
||||||
{ "<leader>sq", "<cmd>FzfLua quickfix<cr>", desc = "Quickfix List" },
|
|
||||||
{ "<leader>sw", LazyVim.pick("grep_cword"), desc = "Word (Root Dir)" },
|
|
||||||
{ "<leader>sW", LazyVim.pick("grep_cword", { root = false }), desc = "Word (cwd)" },
|
|
||||||
{ "<leader>sw", LazyVim.pick("grep_visual"), mode = "v", desc = "Selection (Root Dir)" },
|
|
||||||
{ "<leader>sW", LazyVim.pick("grep_visual", { root = false }), mode = "v", desc = "Selection (cwd)" },
|
|
||||||
{ "<leader>uC", LazyVim.pick("colorschemes"), desc = "Colorscheme with Preview" },
|
|
||||||
{
|
|
||||||
"<leader>ss",
|
|
||||||
function()
|
|
||||||
require("fzf-lua").lsp_document_symbols({
|
|
||||||
regex_filter = symbols_filter,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
desc = "Goto Symbol",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>sS",
|
|
||||||
function()
|
|
||||||
require("fzf-lua").lsp_live_workspace_symbols({
|
|
||||||
regex_filter = symbols_filter,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
desc = "Goto Symbol (Workspace)",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
return {
|
|
||||||
{ "wakatime/vim-wakatime", lazy = false },
|
|
||||||
}
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
indent_type = "Spaces"
|
|
||||||
indent_width = 2
|
|
||||||
column_width = 120
|
|
||||||
19
pathlib.json
19
pathlib.json
|
|
@ -1,19 +0,0 @@
|
||||||
{
|
|
||||||
".bashrc": "~/.bashrc",
|
|
||||||
".zshrc": "~/.zshrc",
|
|
||||||
"nvim/": "~/.config/nvim/",
|
|
||||||
".condarc": "~/.condarc",
|
|
||||||
".gitconfig": "~/.gitconfig",
|
|
||||||
".ideavimrc": "~/.ideavimrc",
|
|
||||||
"pip.conf": "~/.config/pip/pip.conf",
|
|
||||||
".npmrc": "~/.npmrc",
|
|
||||||
"Microsoft.PowerShell_profile.ps1": {
|
|
||||||
"Mac": "~/.config/powershell/Microsoft.PowerShell_profile.ps1",
|
|
||||||
"Windows": "~/Documents/PowerShell/Microsoft.PowerShell_profile.ps1"
|
|
||||||
},
|
|
||||||
".wslconfig": "~/.wslconfig",
|
|
||||||
"neovide.toml": {
|
|
||||||
"Mac": "~/.config/neovide/neovide.toml",
|
|
||||||
"Windows": "~/AppData/Local/neovide/neovide.toml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
2
pip.conf
2
pip.conf
|
|
@ -1,2 +1,2 @@
|
||||||
[global]
|
[global]
|
||||||
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
|
# index-url = https://pypi.tuna.tsinghua.edu.cn/simple
|
||||||
|
|
@ -4,7 +4,6 @@ Set-PSReadLineOption -EditMode vi # Vi Keybindings
|
||||||
Set-PSReadLineOption -PredictionViewStyle ListView
|
Set-PSReadLineOption -PredictionViewStyle ListView
|
||||||
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
|
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
|
||||||
Set-PSReadLineOption -ContinuationPrompt "`e[36m CR > "
|
Set-PSReadLineOption -ContinuationPrompt "`e[36m CR > "
|
||||||
|
|
||||||
### Keybindings ###
|
### Keybindings ###
|
||||||
|
|
||||||
Set-PSReadLineKeyHandler -Chord "Ctrl+Shift+f" -Function ForwardWord
|
Set-PSReadLineKeyHandler -Chord "Ctrl+Shift+f" -Function ForwardWord
|
||||||
|
|
@ -78,6 +77,7 @@ ${function:pylsenvs} = { conda env list }
|
||||||
${function:pymkenv} = { conda create --name $args[0] }
|
${function:pymkenv} = { conda create --name $args[0] }
|
||||||
${function:pyrmenv} = { conda remove --name $args[0] --all }
|
${function:pyrmenv} = { conda remove --name $args[0] --all }
|
||||||
|
|
||||||
|
|
||||||
# C & C++ #
|
# C & C++ #
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
19
readme.md
19
readme.md
|
|
@ -1,19 +1,4 @@
|
||||||
# .DOTFILES js0ny
|
# .dotfiles
|
||||||
|
|
||||||
## Navigator
|
Moving to *Colemak*
|
||||||
|
|
||||||
- [Windows](./win/readme.md)
|
|
||||||
- [Linux](./linux/readme.md)
|
|
||||||
- [Mac](./mac/readme.md)
|
|
||||||
|
|
||||||
- [Neovim](./nvim/readme.md)
|
|
||||||
- [VSCode](./vscode/readme.md)
|
|
||||||
|
|
||||||
- [IdeaVim](./.ideavimrc)
|
|
||||||
|
|
||||||
- [Git](./.gitconfig)
|
|
||||||
|
|
||||||
- [pip](./pip.conf)
|
|
||||||
- [npm](./.npmrc)
|
|
||||||
- [conda](./.condarc)
|
|
||||||
|
|
||||||
|
|
|
||||||
103
surfingkeys.js
Normal file
103
surfingkeys.js
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
// Paste this into surfingkeys advanced settings
|
||||||
|
|
||||||
|
/** Examples
|
||||||
|
|
||||||
|
// an example to create a new mapping `ctrl-y`
|
||||||
|
api.mapkey('<ctrl-y>', 'Show me the money', function() {
|
||||||
|
Front.showPopup('a well-known phrase uttered by characters in the 1996 film Jerry Maguire (Escape to close).');
|
||||||
|
});
|
||||||
|
|
||||||
|
// an example to replace `T` with `gt`, click `Default mappings` to see how `T` works.
|
||||||
|
api.map('gt', 'T');
|
||||||
|
|
||||||
|
|
||||||
|
// an example to remove mapkey `Ctrl-i`
|
||||||
|
api.unmap('<ctrl-i>');
|
||||||
|
|
||||||
|
*/
|
||||||
|
// Settings
|
||||||
|
settings.language = "zh-CN" ;
|
||||||
|
settings.showModeStatus = true;
|
||||||
|
// Colemak hjkl (hnei)
|
||||||
|
// map('h', 'h') // left no change
|
||||||
|
api.map('n', 'j') // down
|
||||||
|
api.vmap('n', 'j') // down
|
||||||
|
api.map('e', 'k') // up
|
||||||
|
api.vmap('e', 'k') // up
|
||||||
|
api.map('i', 'l') // right
|
||||||
|
api.vmap('i', 'l') // right
|
||||||
|
// DELETED map j -> e : use j to scroll up half page
|
||||||
|
api.vmap('j', 'e') // end of word
|
||||||
|
api.map('k', 'n') // search next word (Original Position of n)
|
||||||
|
api.vmap('k', 'n') // search next word (Original Position of n)
|
||||||
|
api.map('l', 'i') // insert mode, similar position to original i
|
||||||
|
api.vmap('l', 'i') // insert mode, similar position to original i
|
||||||
|
api.map('L', 'I') // insert mode with vim popup, similar pos to I
|
||||||
|
|
||||||
|
// Prev/Next Page (WASD-like left-hand navigation)
|
||||||
|
api.map('A', 'E')
|
||||||
|
api.map('S', 'R')
|
||||||
|
// map('d', 'd') for scroll down half page
|
||||||
|
api.map('j', 'u') //scrool up half page
|
||||||
|
api.map('T', 'C') // Open in new tab
|
||||||
|
|
||||||
|
// Search Alias
|
||||||
|
api.addSearchAlias('f', 'Felo', 'https://felo.ai/search?q=', 's', 'https://duckduckgo.com/ac/?q=', function(response) {
|
||||||
|
var res = JSON.parse(response.text);
|
||||||
|
return res.map(function(r){
|
||||||
|
return r.phrase;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
api.addSearchAlias('p', 'Perplexity', 'https://www.perplexity.ai/?q=', 's', 'https://duckduckgo.com/ac/?q=', function(response) {
|
||||||
|
var res = JSON.parse(response.text);
|
||||||
|
return res.map(function(r){
|
||||||
|
return r.phrase;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
api.addSearchAlias('r', 'Raindrop', 'https://app.raindrop.io/my/0/', 's', 'https://duckduckgo.com/ac/?q=', function(response) {
|
||||||
|
var res = JSON.parse(response.text);
|
||||||
|
return res.map(function(r){
|
||||||
|
return r.phrase;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Theme
|
||||||
|
settings.theme = `
|
||||||
|
.sk_theme {
|
||||||
|
font-family: Input Sans Condensed, Charcoal, sans-serif;
|
||||||
|
font-size: 10pt;
|
||||||
|
background: #24272e;
|
||||||
|
color: #abb2bf;
|
||||||
|
}
|
||||||
|
.sk_theme tbody {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.sk_theme input {
|
||||||
|
color: #d0d0d0;
|
||||||
|
}
|
||||||
|
.sk_theme .url {
|
||||||
|
color: #61afef;
|
||||||
|
}
|
||||||
|
.sk_theme .annotation {
|
||||||
|
color: #56b6c2;
|
||||||
|
}
|
||||||
|
.sk_theme .omnibar_highlight {
|
||||||
|
color: #528bff;
|
||||||
|
}
|
||||||
|
.sk_theme .omnibar_timestamp {
|
||||||
|
color: #e5c07b;
|
||||||
|
}
|
||||||
|
.sk_theme .omnibar_visitcount {
|
||||||
|
color: #98c379;
|
||||||
|
}
|
||||||
|
.sk_theme #sk_omnibarSearchResult ul li:nth-child(odd) {
|
||||||
|
background: #303030;
|
||||||
|
}
|
||||||
|
.sk_theme #sk_omnibarSearchResult ul li.focused {
|
||||||
|
background: #3e4452;
|
||||||
|
}
|
||||||
|
#sk_status, #sk_find {
|
||||||
|
font-size: 20pt;
|
||||||
|
}`;
|
||||||
|
// click `Save` button to make above settings to take effect.</ctrl-i></ctrl-y>
|
||||||
29
vscode/vscode.vimrc
Normal file
29
vscode/vscode.vimrc
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
"vim.vimrc.path": "$HOME/.vscode.vimrc", // from vscode settings.json
|
||||||
|
|
||||||
|
" Colemak 方向键映射 (hnei)
|
||||||
|
nnoremap k n
|
||||||
|
nnoremap K N
|
||||||
|
nnoremap j e
|
||||||
|
vnoremap j e
|
||||||
|
nnoremap l i
|
||||||
|
nnoremap N J
|
||||||
|
nnoremap E K
|
||||||
|
nnoremap I L
|
||||||
|
nnoremap J E
|
||||||
|
vnoremap J E
|
||||||
|
nnoremap L I
|
||||||
|
nnoremap k n
|
||||||
|
nnoremap K N
|
||||||
|
nnoremap j e
|
||||||
|
vnoremap j e
|
||||||
|
nnoremap l i
|
||||||
|
nnoremap N J
|
||||||
|
nnoremap E K
|
||||||
|
nnoremap I L
|
||||||
|
nnoremap J E
|
||||||
|
vnoremap J E
|
||||||
|
nnoremap L I
|
||||||
|
" 方向键映射
|
||||||
|
noremap n <Down> " 向下
|
||||||
|
noremap e <Up> " 向上
|
||||||
|
noremap i <Right> " 向右
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
[wsl2]
|
; [wsl2]
|
||||||
networkingMode=mirrored
|
; networkingMode=mirrored
|
||||||
dnsTunneling=true
|
; dnsTunneling=true
|
||||||
firewall=true
|
; firewall=true
|
||||||
autoProxy=true
|
; autoProxy=true
|
||||||
|
|
||||||
[experimental]
|
; [experimental]
|
||||||
# requires dnsTunneling but are also OPTIONAL
|
; # requires dnsTunneling but are also OPTIONAL
|
||||||
bestEffortDnsParsing=true
|
; bestEffortDnsParsing=true
|
||||||
useWindowsDnsCache=true
|
; useWindowsDnsCache=true
|
||||||
hostAddressLoopback=true
|
; hostAddressLoopback=true
|
||||||
|
|
@ -19,6 +19,7 @@ ${function:shcfg} = { code $PROFILE }
|
||||||
${function:reload} = { . $PROFILE }
|
${function:reload} = { . $PROFILE }
|
||||||
${function:pulldots} = { Set-Location -Path $DOTFILES && git pull }
|
${function:pulldots} = { Set-Location -Path $DOTFILES && git pull }
|
||||||
Set-Alias "pwshcfg" "shcfg"
|
Set-Alias "pwshcfg" "shcfg"
|
||||||
|
|
||||||
# C & C++ #
|
# C & C++ #
|
||||||
|
|
||||||
# Set-Alias "cl" "clang"
|
# Set-Alias "cl" "clang"
|
||||||
|
|
@ -51,6 +52,46 @@ Set-Alias "pip3" "pip"
|
||||||
${function:wsl1} = {wsl.exe --distribution Debian}
|
${function:wsl1} = {wsl.exe --distribution Debian}
|
||||||
${function:wsl2} = {wsl.exe --distribution Ubuntu-22.04}
|
${function:wsl2} = {wsl.exe --distribution Ubuntu-22.04}
|
||||||
|
|
||||||
|
# Search Software #
|
||||||
|
|
||||||
|
function Get-AppPackageListRemote {
|
||||||
|
param(
|
||||||
|
[string]$Name
|
||||||
|
)
|
||||||
|
if (-not $Name) {
|
||||||
|
Write-Host "Please provide a package name."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Write-Host "Searching for $Name..."
|
||||||
|
Write-Host "=== winget ==="
|
||||||
|
winget search $Name
|
||||||
|
Write-Host "=== choco ==="
|
||||||
|
choco search $Name
|
||||||
|
}
|
||||||
|
|
||||||
|
Set-Alias "pkgsearch" "Get-AppPackageListRemote"
|
||||||
|
|
||||||
|
function Get-AppPackageListLocal {
|
||||||
|
winget list
|
||||||
|
choco list
|
||||||
|
scoop list
|
||||||
|
}
|
||||||
|
# Toggle Theme #
|
||||||
|
|
||||||
|
function Set-SystemTheme {
|
||||||
|
$regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize"
|
||||||
|
$currentMode = Get-ItemProperty -Path $regPath -Name "AppsUseLightTheme"
|
||||||
|
if ($currentMode.AppsUseLightTheme -eq 1) {
|
||||||
|
Set-ItemProperty -Path $regPath -Name "AppsUseLightTheme" -Value 0
|
||||||
|
Write-Host "已切换到深色模式"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Set-ItemProperty -Path $regPath -Name "AppsUseLightTheme" -Value 1
|
||||||
|
Write-Host "已切换到浅色模式"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Set-Alias "theme" "Set-SystemTheme"
|
||||||
|
|
||||||
# Miscs #
|
# Miscs #
|
||||||
|
|
||||||
|
|
@ -62,6 +103,12 @@ Import-Module CompletionPredictor
|
||||||
|
|
||||||
### Misc ###
|
### Misc ###
|
||||||
|
|
||||||
|
${function:qwen} = "ollama run qwen2.5:14b"
|
||||||
|
|
||||||
|
# ## Oh-My-Posh ##
|
||||||
|
|
||||||
|
# Oh-My-Posh init pwsh --config "$HOME\AppData\Local\Programs\oh-my-posh\themes\tokyonight_storm.omp.json" | Invoke-Expression
|
||||||
|
|
||||||
## Conda ##
|
## Conda ##
|
||||||
|
|
||||||
#region conda initialize
|
#region conda initialize
|
||||||
|
|
|
||||||
|
|
@ -1,499 +0,0 @@
|
||||||
{
|
|
||||||
"$help": "https://aka.ms/terminal-documentation",
|
|
||||||
"$schema": "https://aka.ms/terminal-profiles-schema",
|
|
||||||
"actions":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"command": "unbound",
|
|
||||||
"keys": "alt+shift+plus"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command": "unbound",
|
|
||||||
"keys": "alt+up"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command": "unbound",
|
|
||||||
"keys": "alt+down"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command": "unbound",
|
|
||||||
"keys": "alt+right"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command": "unbound",
|
|
||||||
"keys": "alt+left"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command": "unbound",
|
|
||||||
"keys": "alt+shift+up"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command": "unbound",
|
|
||||||
"keys": "alt+shift+down"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command": "unbound",
|
|
||||||
"keys": "alt+shift+right"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command": "unbound",
|
|
||||||
"keys": "alt+shift+left"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command":
|
|
||||||
{
|
|
||||||
"action": "copy",
|
|
||||||
"singleLine": false
|
|
||||||
},
|
|
||||||
"keys": "ctrl+c"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command":
|
|
||||||
{
|
|
||||||
"action": "moveFocus",
|
|
||||||
"direction": "up"
|
|
||||||
},
|
|
||||||
"keys": "ctrl+k"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command": "paste",
|
|
||||||
"keys": "ctrl+v"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command":
|
|
||||||
{
|
|
||||||
"action": "resizePane",
|
|
||||||
"direction": "up"
|
|
||||||
},
|
|
||||||
"keys": "ctrl+shift+k"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command": "find",
|
|
||||||
"keys": "ctrl+shift+f"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command":
|
|
||||||
{
|
|
||||||
"action": "resizePane",
|
|
||||||
"direction": "left"
|
|
||||||
},
|
|
||||||
"keys": "ctrl+shift+h"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command":
|
|
||||||
{
|
|
||||||
"action": "splitPane",
|
|
||||||
"split": "auto",
|
|
||||||
"splitMode": "duplicate"
|
|
||||||
},
|
|
||||||
"keys": "alt+shift+d"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command":
|
|
||||||
{
|
|
||||||
"action": "splitPane",
|
|
||||||
"split": "right"
|
|
||||||
},
|
|
||||||
"keys": "alt+shift+/"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command":
|
|
||||||
{
|
|
||||||
"action": "moveFocus",
|
|
||||||
"direction": "down"
|
|
||||||
},
|
|
||||||
"keys": "ctrl+j"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command":
|
|
||||||
{
|
|
||||||
"action": "moveFocus",
|
|
||||||
"direction": "right"
|
|
||||||
},
|
|
||||||
"keys": "ctrl+l"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command":
|
|
||||||
{
|
|
||||||
"action": "moveFocus",
|
|
||||||
"direction": "left"
|
|
||||||
},
|
|
||||||
"keys": "ctrl+h"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command":
|
|
||||||
{
|
|
||||||
"action": "resizePane",
|
|
||||||
"direction": "down"
|
|
||||||
},
|
|
||||||
"keys": "ctrl+shift+j"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"command":
|
|
||||||
{
|
|
||||||
"action": "resizePane",
|
|
||||||
"direction": "right"
|
|
||||||
},
|
|
||||||
"keys": "ctrl+shift+l"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"autoHideWindow": false,
|
|
||||||
"centerOnLaunch": false,
|
|
||||||
"copyFormatting": "none",
|
|
||||||
"copyOnSelect": false,
|
|
||||||
"defaultProfile": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
|
|
||||||
"language": "zh-Hans",
|
|
||||||
"minimizeToNotificationArea": false,
|
|
||||||
"newTabMenu":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"type": "remainingProfiles"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"profiles":
|
|
||||||
{
|
|
||||||
"defaults":
|
|
||||||
{
|
|
||||||
"colorScheme": "One Half Dark",
|
|
||||||
"font":
|
|
||||||
{
|
|
||||||
"face": "CaskaydiaCove Nerd Font"
|
|
||||||
},
|
|
||||||
"opacity": 100,
|
|
||||||
"useAcrylic": false
|
|
||||||
},
|
|
||||||
"list":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"backgroundImage": null,
|
|
||||||
"colorScheme": "One Half Dark",
|
|
||||||
"experimental.retroTerminalEffect": false,
|
|
||||||
"guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
|
|
||||||
"hidden": false,
|
|
||||||
"name": "PowerShell",
|
|
||||||
"opacity": 100,
|
|
||||||
"scrollbarState": "hidden",
|
|
||||||
"source": "Windows.Terminal.PowershellCore",
|
|
||||||
"useAcrylic": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"guid": "{3c5d580b-1c52-55ce-89c9-57119457e5a7}",
|
|
||||||
"hidden": false,
|
|
||||||
"name": "CMD VS 2022",
|
|
||||||
"source": "Windows.Terminal.VisualStudio"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"guid": "{bc7a2d0e-eee9-5401-ae36-b35fa60deb22}",
|
|
||||||
"hidden": false,
|
|
||||||
"name": "PowerShell VS2022",
|
|
||||||
"source": "Windows.Terminal.VisualStudio"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"colorScheme": "Campbell",
|
|
||||||
"commandline": "\"C:\\Users\\citoy\\AppData\\Local\\Microsoft\\WindowsApps\\Microsoft.PowerShell_8wekyb3d8bbwe\\pwsh.exe\"",
|
|
||||||
"elevate": true,
|
|
||||||
"guid": "{6693d425-c727-46ba-8739-542bcf18769b}",
|
|
||||||
"hidden": false,
|
|
||||||
"icon": "ms-appx:///ProfileIcons/pwsh.png",
|
|
||||||
"name": "PowerShell Administrator",
|
|
||||||
"startingDirectory": "%USERPROFILE%"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
|
|
||||||
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
|
|
||||||
"hidden": false,
|
|
||||||
"name": "Windows PowerShell"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"commandline": "%SystemRoot%\\System32\\cmd.exe",
|
|
||||||
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
|
|
||||||
"hidden": false,
|
|
||||||
"name": "\u547d\u4ee4\u63d0\u793a\u7b26"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
|
|
||||||
"hidden": false,
|
|
||||||
"name": "Azure Cloud Shell",
|
|
||||||
"source": "Windows.Terminal.Azure"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"guid": "{58ad8b0c-3ef8-5f4d-bc6f-13e4c00f2530}",
|
|
||||||
"hidden": false,
|
|
||||||
"name": "Debian",
|
|
||||||
"source": "Windows.Terminal.Wsl"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"guid": "{17bf3de4-5353-5709-bcf9-835bd952a95e}",
|
|
||||||
"hidden": true,
|
|
||||||
"name": "Ubuntu-22.04",
|
|
||||||
"source": "Windows.Terminal.Wsl"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"guid": "{e5a83caa-4c73-52b3-ae6b-bc438d721ef9}",
|
|
||||||
"hidden": false,
|
|
||||||
"name": "Ubuntu 22.04.3 LTS",
|
|
||||||
"source": "CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"schemes":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"background": "#0C0C0C",
|
|
||||||
"black": "#0C0C0C",
|
|
||||||
"blue": "#0037DA",
|
|
||||||
"brightBlack": "#767676",
|
|
||||||
"brightBlue": "#3B78FF",
|
|
||||||
"brightCyan": "#61D6D6",
|
|
||||||
"brightGreen": "#16C60C",
|
|
||||||
"brightPurple": "#B4009E",
|
|
||||||
"brightRed": "#E74856",
|
|
||||||
"brightWhite": "#F2F2F2",
|
|
||||||
"brightYellow": "#F9F1A5",
|
|
||||||
"cursorColor": "#FFFFFF",
|
|
||||||
"cyan": "#3A96DD",
|
|
||||||
"foreground": "#CCCCCC",
|
|
||||||
"green": "#13A10E",
|
|
||||||
"name": "Campbell",
|
|
||||||
"purple": "#881798",
|
|
||||||
"red": "#C50F1F",
|
|
||||||
"selectionBackground": "#FFFFFF",
|
|
||||||
"white": "#CCCCCC",
|
|
||||||
"yellow": "#C19C00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"background": "#012456",
|
|
||||||
"black": "#0C0C0C",
|
|
||||||
"blue": "#0037DA",
|
|
||||||
"brightBlack": "#767676",
|
|
||||||
"brightBlue": "#3B78FF",
|
|
||||||
"brightCyan": "#61D6D6",
|
|
||||||
"brightGreen": "#16C60C",
|
|
||||||
"brightPurple": "#B4009E",
|
|
||||||
"brightRed": "#E74856",
|
|
||||||
"brightWhite": "#F2F2F2",
|
|
||||||
"brightYellow": "#F9F1A5",
|
|
||||||
"cursorColor": "#FFFFFF",
|
|
||||||
"cyan": "#3A96DD",
|
|
||||||
"foreground": "#CCCCCC",
|
|
||||||
"green": "#13A10E",
|
|
||||||
"name": "Campbell Powershell",
|
|
||||||
"purple": "#881798",
|
|
||||||
"red": "#C50F1F",
|
|
||||||
"selectionBackground": "#FFFFFF",
|
|
||||||
"white": "#CCCCCC",
|
|
||||||
"yellow": "#C19C00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"background": "#282C34",
|
|
||||||
"black": "#282C34",
|
|
||||||
"blue": "#61AFEF",
|
|
||||||
"brightBlack": "#5A6374",
|
|
||||||
"brightBlue": "#61AFEF",
|
|
||||||
"brightCyan": "#56B6C2",
|
|
||||||
"brightGreen": "#98C379",
|
|
||||||
"brightPurple": "#C678DD",
|
|
||||||
"brightRed": "#E06C75",
|
|
||||||
"brightWhite": "#DCDFE4",
|
|
||||||
"brightYellow": "#E5C07B",
|
|
||||||
"cursorColor": "#FFFFFF",
|
|
||||||
"cyan": "#56B6C2",
|
|
||||||
"foreground": "#DCDFE4",
|
|
||||||
"green": "#98C379",
|
|
||||||
"name": "One Half Dark",
|
|
||||||
"purple": "#C678DD",
|
|
||||||
"red": "#E06C75",
|
|
||||||
"selectionBackground": "#FFFFFF",
|
|
||||||
"white": "#DCDFE4",
|
|
||||||
"yellow": "#E5C07B"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"background": "#FAFAFA",
|
|
||||||
"black": "#383A42",
|
|
||||||
"blue": "#0184BC",
|
|
||||||
"brightBlack": "#4F525D",
|
|
||||||
"brightBlue": "#61AFEF",
|
|
||||||
"brightCyan": "#56B5C1",
|
|
||||||
"brightGreen": "#98C379",
|
|
||||||
"brightPurple": "#C577DD",
|
|
||||||
"brightRed": "#DF6C75",
|
|
||||||
"brightWhite": "#FFFFFF",
|
|
||||||
"brightYellow": "#E4C07A",
|
|
||||||
"cursorColor": "#4F525D",
|
|
||||||
"cyan": "#0997B3",
|
|
||||||
"foreground": "#383A42",
|
|
||||||
"green": "#50A14F",
|
|
||||||
"name": "One Half Light",
|
|
||||||
"purple": "#A626A4",
|
|
||||||
"red": "#E45649",
|
|
||||||
"selectionBackground": "#FFFFFF",
|
|
||||||
"white": "#FAFAFA",
|
|
||||||
"yellow": "#C18301"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"background": "#002B36",
|
|
||||||
"black": "#002B36",
|
|
||||||
"blue": "#268BD2",
|
|
||||||
"brightBlack": "#073642",
|
|
||||||
"brightBlue": "#839496",
|
|
||||||
"brightCyan": "#93A1A1",
|
|
||||||
"brightGreen": "#586E75",
|
|
||||||
"brightPurple": "#6C71C4",
|
|
||||||
"brightRed": "#CB4B16",
|
|
||||||
"brightWhite": "#FDF6E3",
|
|
||||||
"brightYellow": "#657B83",
|
|
||||||
"cursorColor": "#FFFFFF",
|
|
||||||
"cyan": "#2AA198",
|
|
||||||
"foreground": "#839496",
|
|
||||||
"green": "#859900",
|
|
||||||
"name": "Solarized Dark",
|
|
||||||
"purple": "#D33682",
|
|
||||||
"red": "#DC322F",
|
|
||||||
"selectionBackground": "#FFFFFF",
|
|
||||||
"white": "#EEE8D5",
|
|
||||||
"yellow": "#B58900"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"background": "#FDF6E3",
|
|
||||||
"black": "#002B36",
|
|
||||||
"blue": "#268BD2",
|
|
||||||
"brightBlack": "#073642",
|
|
||||||
"brightBlue": "#839496",
|
|
||||||
"brightCyan": "#93A1A1",
|
|
||||||
"brightGreen": "#586E75",
|
|
||||||
"brightPurple": "#6C71C4",
|
|
||||||
"brightRed": "#CB4B16",
|
|
||||||
"brightWhite": "#FDF6E3",
|
|
||||||
"brightYellow": "#657B83",
|
|
||||||
"cursorColor": "#002B36",
|
|
||||||
"cyan": "#2AA198",
|
|
||||||
"foreground": "#657B83",
|
|
||||||
"green": "#859900",
|
|
||||||
"name": "Solarized Light",
|
|
||||||
"purple": "#D33682",
|
|
||||||
"red": "#DC322F",
|
|
||||||
"selectionBackground": "#FFFFFF",
|
|
||||||
"white": "#EEE8D5",
|
|
||||||
"yellow": "#B58900"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"background": "#000000",
|
|
||||||
"black": "#000000",
|
|
||||||
"blue": "#3465A4",
|
|
||||||
"brightBlack": "#555753",
|
|
||||||
"brightBlue": "#729FCF",
|
|
||||||
"brightCyan": "#34E2E2",
|
|
||||||
"brightGreen": "#8AE234",
|
|
||||||
"brightPurple": "#AD7FA8",
|
|
||||||
"brightRed": "#EF2929",
|
|
||||||
"brightWhite": "#EEEEEC",
|
|
||||||
"brightYellow": "#FCE94F",
|
|
||||||
"cursorColor": "#FFFFFF",
|
|
||||||
"cyan": "#06989A",
|
|
||||||
"foreground": "#D3D7CF",
|
|
||||||
"green": "#4E9A06",
|
|
||||||
"name": "Tango Dark",
|
|
||||||
"purple": "#75507B",
|
|
||||||
"red": "#CC0000",
|
|
||||||
"selectionBackground": "#FFFFFF",
|
|
||||||
"white": "#D3D7CF",
|
|
||||||
"yellow": "#C4A000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"background": "#FFFFFF",
|
|
||||||
"black": "#000000",
|
|
||||||
"blue": "#3465A4",
|
|
||||||
"brightBlack": "#555753",
|
|
||||||
"brightBlue": "#729FCF",
|
|
||||||
"brightCyan": "#34E2E2",
|
|
||||||
"brightGreen": "#8AE234",
|
|
||||||
"brightPurple": "#AD7FA8",
|
|
||||||
"brightRed": "#EF2929",
|
|
||||||
"brightWhite": "#EEEEEC",
|
|
||||||
"brightYellow": "#FCE94F",
|
|
||||||
"cursorColor": "#000000",
|
|
||||||
"cyan": "#06989A",
|
|
||||||
"foreground": "#555753",
|
|
||||||
"green": "#4E9A06",
|
|
||||||
"name": "Tango Light",
|
|
||||||
"purple": "#75507B",
|
|
||||||
"red": "#CC0000",
|
|
||||||
"selectionBackground": "#FFFFFF",
|
|
||||||
"white": "#D3D7CF",
|
|
||||||
"yellow": "#C4A000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"background": "#300A24",
|
|
||||||
"black": "#171421",
|
|
||||||
"blue": "#0037DA",
|
|
||||||
"brightBlack": "#767676",
|
|
||||||
"brightBlue": "#08458F",
|
|
||||||
"brightCyan": "#2C9FB3",
|
|
||||||
"brightGreen": "#26A269",
|
|
||||||
"brightPurple": "#A347BA",
|
|
||||||
"brightRed": "#C01C28",
|
|
||||||
"brightWhite": "#F2F2F2",
|
|
||||||
"brightYellow": "#A2734C",
|
|
||||||
"cursorColor": "#FFFFFF",
|
|
||||||
"cyan": "#3A96DD",
|
|
||||||
"foreground": "#FFFFFF",
|
|
||||||
"green": "#26A269",
|
|
||||||
"name": "Ubuntu-22.04-ColorScheme",
|
|
||||||
"purple": "#881798",
|
|
||||||
"red": "#C21A23",
|
|
||||||
"selectionBackground": "#FFFFFF",
|
|
||||||
"white": "#CCCCCC",
|
|
||||||
"yellow": "#A2734C"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"background": "#300A24",
|
|
||||||
"black": "#171421",
|
|
||||||
"blue": "#0037DA",
|
|
||||||
"brightBlack": "#767676",
|
|
||||||
"brightBlue": "#08458F",
|
|
||||||
"brightCyan": "#2C9FB3",
|
|
||||||
"brightGreen": "#26A269",
|
|
||||||
"brightPurple": "#A347BA",
|
|
||||||
"brightRed": "#C01C28",
|
|
||||||
"brightWhite": "#F2F2F2",
|
|
||||||
"brightYellow": "#A2734C",
|
|
||||||
"cursorColor": "#FFFFFF",
|
|
||||||
"cyan": "#3A96DD",
|
|
||||||
"foreground": "#FFFFFF",
|
|
||||||
"green": "#26A269",
|
|
||||||
"name": "Ubuntu-ColorScheme",
|
|
||||||
"purple": "#881798",
|
|
||||||
"red": "#C21A23",
|
|
||||||
"selectionBackground": "#FFFFFF",
|
|
||||||
"white": "#CCCCCC",
|
|
||||||
"yellow": "#A2734C"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"background": "#000000",
|
|
||||||
"black": "#000000",
|
|
||||||
"blue": "#000080",
|
|
||||||
"brightBlack": "#808080",
|
|
||||||
"brightBlue": "#0000FF",
|
|
||||||
"brightCyan": "#00FFFF",
|
|
||||||
"brightGreen": "#00FF00",
|
|
||||||
"brightPurple": "#FF00FF",
|
|
||||||
"brightRed": "#FF0000",
|
|
||||||
"brightWhite": "#FFFFFF",
|
|
||||||
"brightYellow": "#FFFF00",
|
|
||||||
"cursorColor": "#FFFFFF",
|
|
||||||
"cyan": "#008080",
|
|
||||||
"foreground": "#C0C0C0",
|
|
||||||
"green": "#008000",
|
|
||||||
"name": "Vintage",
|
|
||||||
"purple": "#800080",
|
|
||||||
"red": "#800000",
|
|
||||||
"selectionBackground": "#FFFFFF",
|
|
||||||
"white": "#C0C0C0",
|
|
||||||
"yellow": "#808000"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"tabWidthMode": "compact",
|
|
||||||
"themes": [],
|
|
||||||
"useAcrylicInTabRow": true,
|
|
||||||
"windowingBehavior": "useNew"
|
|
||||||
}
|
|
||||||
|
|
@ -8,8 +8,7 @@ tabs = true
|
||||||
theme = "auto"
|
theme = "auto"
|
||||||
title-hidden = true
|
title-hidden = true
|
||||||
vsync = false
|
vsync = false
|
||||||
wsl = true
|
wsl = false
|
||||||
neovim-bin = "/opt/nvim-linux64/bin/nvim"
|
|
||||||
|
|
||||||
[font]
|
[font]
|
||||||
normal = ["CaskaydiaCove Nerd Font"] # Will use the bundled Fira Code Nerd Font by default
|
normal = ["CaskaydiaCove Nerd Font"] # Will use the bundled Fira Code Nerd Font by default
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue