initial commit

main
Ian Mancini 2 years ago
commit 4e04b8b706

1
.gitignore vendored

@ -0,0 +1 @@
plugin/

@ -0,0 +1,9 @@
{
"Lua": {
"runtime.version": "LuaJIT",
"workspace.checkThirdParty": false
},
"Lua.diagnostics.globals": [
"require"
]
}

@ -0,0 +1,17 @@
vim.g.python3_host_prog = '/usr/bin/python'
vim.g.mapleader = ' '
-- Setup packer
local fn = vim.fn
local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim'
if fn.empty(fn.glob(install_path)) > 0 then
fn.system({
'git', 'clone', '--depth', '1',
'https://github.com/wbthomason/packer.nvim', install_path
})
vim.cmd 'packadd packer.nvim'
end
-- Source settings
require('plugins')
require('settings')

@ -0,0 +1,5 @@
local utils = require('utils')
utils.opt('o', 'termguicolors', true)
vim.g.tokyonight_style = 'night'
vim.cmd('colorscheme tokyonight')

@ -0,0 +1,4 @@
local utils = require("utils")
utils.map("n", "<C-l>", "<cmd>noh<CR>") -- Clear highlights
utils.map("n", "]q", "<cmd>cn<CR>")
utils.map("n", "[q", "<cmd>cp<CR>")

@ -0,0 +1,153 @@
local wk = require("which-key")
local wk_toggle_git_blame = { "<cmd>GitBlameToggle<CR>", "Toggle git blame" }
wk.register({
t = {
b = wk_toggle_git_blame,
},
g = {
n = { "<cmd>Neogit<CR>", "Neogit status" },
f = { "<cmd>Git<CR>", "Fugitive status" },
b = wk_toggle_git_blame,
},
}, {
prefix = "<leader>",
})
local neogit = require("neogit")
neogit.setup()
-- gitsigns
require("gitsigns").setup()
-- git-blame
vim.g.gitblame_enabled = 0
-- octo
require("octo").setup({
default_remote = { "origin" }, -- order to try remotes
ssh_aliases = {}, -- SSH aliases. e.g. `ssh_aliases = {["github.com-work"] = "github.com"}`
reaction_viewer_hint_icon = "", -- marker for user reactions
user_icon = "", -- user icon
timeline_marker = "", -- timeline marker
timeline_indent = "2", -- timeline indentation
right_bubble_delimiter = "", -- Bubble delimiter
left_bubble_delimiter = "", -- Bubble delimiter
snippet_context_lines = 4, -- number or lines around commented lines
file_panel = {
size = 10, -- changed files panel rows
use_icons = true, -- use web-devicons in file panel (if false, nvim-web-devicons does not need to be installed)
},
mappings = {
issue = {
close_issue = { lhs = "<space>ic", desc = "close issue" },
reopen_issue = { lhs = "<space>io", desc = "reopen issue" },
list_issues = { lhs = "<space>il", desc = "list open issues on same repo" },
reload = { lhs = "<C-r>", desc = "reload issue" },
open_in_browser = { lhs = "<C-b>", desc = "open issue in browser" },
copy_url = { lhs = "<C-y>", desc = "copy url to system clipboard" },
add_assignee = { lhs = "<space>aa", desc = "add assignee" },
remove_assignee = { lhs = "<space>ad", desc = "remove assignee" },
create_label = { lhs = "<space>lc", desc = "create label" },
add_label = { lhs = "<space>la", desc = "add label" },
remove_label = { lhs = "<space>ld", desc = "remove label" },
goto_issue = { lhs = "<space>gi", desc = "navigate to a local repo issue" },
add_comment = { lhs = "<space>ca", desc = "add comment" },
delete_comment = { lhs = "<space>cd", desc = "delete comment" },
next_comment = { lhs = "]c", desc = "go to next comment" },
prev_comment = { lhs = "[c", desc = "go to previous comment" },
react_hooray = { lhs = "<space>rp", desc = "add/remove 🎉 reaction" },
react_heart = { lhs = "<space>rh", desc = "add/remove ❤️ reaction" },
react_eyes = { lhs = "<space>re", desc = "add/remove 👀 reaction" },
react_thumbs_up = { lhs = "<space>r+", desc = "add/remove 👍 reaction" },
react_thumbs_down = { lhs = "<space>r-", desc = "add/remove 👎 reaction" },
react_rocket = { lhs = "<space>rr", desc = "add/remove 🚀 reaction" },
react_laugh = { lhs = "<space>rl", desc = "add/remove 😄 reaction" },
react_confused = { lhs = "<space>rc", desc = "add/remove 😕 reaction" },
},
pull_request = {
checkout_pr = { lhs = "<space>po", desc = "checkout PR" },
merge_pr = { lhs = "<space>pm", desc = "merge commit PR" },
squash_and_merge_pr = { lhs = "<space>psm", desc = "squash and merge PR" },
list_commits = { lhs = "<space>pc", desc = "list PR commits" },
list_changed_files = { lhs = "<space>pf", desc = "list PR changed files" },
show_pr_diff = { lhs = "<space>pd", desc = "show PR diff" },
add_reviewer = { lhs = "<space>va", desc = "add reviewer" },
remove_reviewer = { lhs = "<space>vd", desc = "remove reviewer request" },
close_issue = { lhs = "<space>ic", desc = "close PR" },
reopen_issue = { lhs = "<space>io", desc = "reopen PR" },
list_issues = { lhs = "<space>il", desc = "list open issues on same repo" },
reload = { lhs = "<C-r>", desc = "reload PR" },
open_in_browser = { lhs = "<C-b>", desc = "open PR in browser" },
copy_url = { lhs = "<C-y>", desc = "copy url to system clipboard" },
goto_file = { lhs = "gf", desc = "go to file" },
add_assignee = { lhs = "<space>aa", desc = "add assignee" },
remove_assignee = { lhs = "<space>ad", desc = "remove assignee" },
create_label = { lhs = "<space>lc", desc = "create label" },
add_label = { lhs = "<space>la", desc = "add label" },
remove_label = { lhs = "<space>ld", desc = "remove label" },
goto_issue = { lhs = "<space>gi", desc = "navigate to a local repo issue" },
add_comment = { lhs = "<space>ca", desc = "add comment" },
delete_comment = { lhs = "<space>cd", desc = "delete comment" },
next_comment = { lhs = "]c", desc = "go to next comment" },
prev_comment = { lhs = "[c", desc = "go to previous comment" },
react_hooray = { lhs = "<space>rp", desc = "add/remove 🎉 reaction" },
react_heart = { lhs = "<space>rh", desc = "add/remove ❤️ reaction" },
react_eyes = { lhs = "<space>re", desc = "add/remove 👀 reaction" },
react_thumbs_up = { lhs = "<space>r+", desc = "add/remove 👍 reaction" },
react_thumbs_down = { lhs = "<space>r-", desc = "add/remove 👎 reaction" },
react_rocket = { lhs = "<space>rr", desc = "add/remove 🚀 reaction" },
react_laugh = { lhs = "<space>rl", desc = "add/remove 😄 reaction" },
react_confused = { lhs = "<space>rc", desc = "add/remove 😕 reaction" },
},
review_thread = {
goto_issue = { lhs = "<space>gi", desc = "navigate to a local repo issue" },
add_comment = { lhs = "<space>ca", desc = "add comment" },
add_suggestion = { lhs = "<space>sa", desc = "add suggestion" },
delete_comment = { lhs = "<space>cd", desc = "delete comment" },
next_comment = { lhs = "]c", desc = "go to next comment" },
prev_comment = { lhs = "[c", desc = "go to previous comment" },
select_next_entry = { lhs = "]q", desc = "move to previous changed file" },
select_prev_entry = { lhs = "[q", desc = "move to next changed file" },
close_review_tab = { lhs = "<C-c>", desc = "close review tab" },
react_hooray = { lhs = "<space>rp", desc = "add/remove 🎉 reaction" },
react_heart = { lhs = "<space>rh", desc = "add/remove ❤️ reaction" },
react_eyes = { lhs = "<space>re", desc = "add/remove 👀 reaction" },
react_thumbs_up = { lhs = "<space>r+", desc = "add/remove 👍 reaction" },
react_thumbs_down = { lhs = "<space>r-", desc = "add/remove 👎 reaction" },
react_rocket = { lhs = "<space>rr", desc = "add/remove 🚀 reaction" },
react_laugh = { lhs = "<space>rl", desc = "add/remove 😄 reaction" },
react_confused = { lhs = "<space>rc", desc = "add/remove 😕 reaction" },
},
submit_win = {
approve_review = { lhs = "<C-a>", desc = "approve review" },
comment_review = { lhs = "<C-m>", desc = "comment review" },
request_changes = { lhs = "<C-r>", desc = "request changes review" },
close_review_tab = { lhs = "<C-c>", desc = "close review tab" },
},
review_diff = {
add_review_comment = { lhs = "<space>ca", desc = "add a new review comment" },
add_review_suggestion = { lhs = "<space>sa", desc = "add a new review suggestion" },
focus_files = { lhs = "<leader>e", desc = "move focus to changed file panel" },
toggle_files = { lhs = "<leader>b", desc = "hide/show changed files panel" },
next_thread = { lhs = "]t", desc = "move to next thread" },
prev_thread = { lhs = "[t", desc = "move to previous thread" },
select_next_entry = { lhs = "]q", desc = "move to previous changed file" },
select_prev_entry = { lhs = "[q", desc = "move to next changed file" },
close_review_tab = { lhs = "<C-c>", desc = "close review tab" },
toggle_viewed = { lhs = "<leader><space>", desc = "toggle viewer viewed state" },
},
file_panel = {
next_entry = { lhs = "j", desc = "move to next changed file" },
prev_entry = { lhs = "k", desc = "move to previous changed file" },
select_entry = { lhs = "<cr>", desc = "show selected changed file diffs" },
refresh_files = { lhs = "R", desc = "refresh changed files panel" },
focus_files = { lhs = "<leader>e", desc = "move focus to changed file panel" },
toggle_files = { lhs = "<leader>b", desc = "hide/show changed files panel" },
select_next_entry = { lhs = "]q", desc = "move to previous changed file" },
select_prev_entry = { lhs = "[q", desc = "move to next changed file" },
close_review_tab = { lhs = "<C-c>", desc = "close review tab" },
toggle_viewed = { lhs = "<leader><space>", desc = "toggle viewer viewed state" },
},
},
})

@ -0,0 +1,41 @@
vim.g.indent_blankline_use_treesitter = true
vim.g.indent_blankline_filetype_exclude = {
"help",
"dashboard",
"dashpreview",
"coc-explorer",
"startify",
"vista",
"sagahover",
"lspinfo",
}
vim.opt.list = true
vim.opt.listchars:append("space:⋅")
vim.opt.listchars:append("eol:↴")
require("indent_blankline").setup({
space_char_blankline = " ",
show_current_context = true,
show_current_context_start = true,
})
local wk = require("which-key")
wk.register({
t = {
i = {
function()
vim.cmd("IndentBlanklineToggle!")
if vim.g.indent_blankline_enabled then
vim.opt.list = true
else
vim.opt.list = false
end
end,
"Indent guides",
},
},
}, {
prefix = "<leader>",
})

@ -0,0 +1,315 @@
---@diagnostic disable: undefined-global
return require("packer").startup(function()
use("wbthomason/packer.nvim")
use("antoinemadec/FixCursorHold.nvim")
-- Project management
use({
"ahmedkhalf/project.nvim",
config = [[require('plugins.project-nvim')]],
})
-- GUI
use("stevearc/dressing.nvim")
-- Fuzzy finder
use({
{
"nvim-telescope/telescope-fzf-native.nvim",
run = "make",
},
"nvim-telescope/telescope-file-browser.nvim",
"nvim-telescope/telescope-ui-select.nvim",
{
"nvim-telescope/telescope.nvim",
requires = { "nvim-lua/plenary.nvim" },
config = [[require('plugins.telescope-nvim')]],
},
})
-- File explorer
use({
"kevinhwang91/rnvimr",
config = [[require('plugins.rnvimr')]],
})
use({
"kyazdani42/nvim-tree.lua",
config = [[require('plugins.nvim-tree')]],
})
-- Refactor
use({
"ThePrimeagen/refactoring.nvim",
requires = {
{ "nvim-lua/plenary.nvim" },
{ "nvim-treesitter/nvim-treesitter" },
},
config = [[ require('refactoring').setup({}) ]],
})
-- Tooling
use({
"WhoIsSethDaniel/mason-tool-installer.nvim",
{
"williamboman/mason.nvim",
config = [[ require('plugins.tooling') ]],
},
})
-- LSP
use({
"folke/lsp-colors.nvim", -- Color groups
{
-- Installer
"williamboman/mason-lspconfig.nvim",
require = "williamboman/mason.nvim",
},
"folke/neodev.nvim", -- Lua
"jose-elias-alvarez/typescript.nvim", -- Typsecript
"jose-elias-alvarez/null-ls.nvim", -- Tooling
"stevearc/aerial.nvim", -- Outline
"b0o/schemastore.nvim", -- JSON schemas
"folke/trouble.nvim", -- Diagnostics
"kosayoda/nvim-lightbulb", -- Lightbulb
"j-hui/fidget.nvim", -- LSP Status indicator
{
"neovim/nvim-lspconfig", -- Config
config = [[require('plugins.lsp')]],
},
})
-- Buffer line
-- use {
-- 'akinsho/bufferline.nvim',
-- tag = "v2.*",
-- requires = 'kyazdani42/nvim-web-devicons',
-- config = function() require("bufferline").setup {} end
-- }
-- Completion
use({
"onsails/lspkind-nvim", -- Pretty icons
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"hrsh7th/cmp-cmdline",
"hrsh7th/cmp-omni",
"petertriho/cmp-git",
"hrsh7th/cmp-nvim-lsp-signature-help",
{
"hrsh7th/nvim-cmp",
config = [[require('plugins.nvim-cmp')]],
},
})
-- Snippets
use("L3MON4D3/LuaSnip")
use("saadparwaiz1/cmp_luasnip")
use("rafamadriz/friendly-snippets")
-- Comments
use({
"numToStr/Comment.nvim",
config = function()
require("Comment").setup()
end,
})
-- Autopairs
use({
"windwp/nvim-autopairs",
config = function()
require("nvim-autopairs").setup()
end,
})
-- Tree-sitter
use({
"JoosepAlviste/nvim-ts-context-commentstring",
"windwp/nvim-ts-autotag", -- XML-like auto tags
{
"nvim-treesitter/nvim-treesitter",
run = ":TSUpdate",
config = [[require('plugins.nvim-treesitter')]],
},
{
"nvim-orgmode/orgmode",
config = [[require('plugins.orgmode-nvim')]],
},
})
-- Note taking
use({
"jakewvincent/mkdnflow.nvim",
"ekickx/clipboard-image.nvim",
{
"mickael-menu/zk-nvim",
config = [[require('plugins.notes')]],
},
})
-- Terminal
use({
"akinsho/toggleterm.nvim",
tag = "v2.*",
config = [[require('plugins.term')]],
})
-- Git
use({
{
"lewis6991/gitsigns.nvim",
requires = "nvim-lua/plenary.nvim",
},
"tpope/vim-fugitive",
"TimUntersberger/neogit",
"f-person/git-blame.nvim",
{
"sindrets/diffview.nvim",
requires = "nvim-lua/plenary.nvim",
},
{
"pwntester/octo.nvim",
requires = {
"nvim-lua/plenary.nvim",
"nvim-telescope/telescope.nvim",
"kyazdani42/nvim-web-devicons",
},
config = [[require('plugins.git')]],
},
})
-- Indent lines
use({
"lukas-reineke/indent-blankline.nvim",
config = [[require('plugins.indent-blankline-nvim')]],
})
-- Handy stuff
use({
"echasnovski/mini.nvim",
branch = "stable",
config = function()
require("mini.jump").setup({})
require("mini.bufremove").setup({})
end,
})
use({
"ggandor/leap.nvim",
requires = {
"tpope/vim-repeat",
},
config = function()
require("leap").set_default_keymaps()
end,
})
use({
"ygm2/rooter.nvim",
config = function()
vim.g.outermost_root = false
end,
})
use({ "dhruvasagar/vim-table-mode" })
use({ "tpope/vim-eunuch" })
use({
"folke/which-key.nvim",
config = [[require('plugins.which-key')]],
})
use({
"folke/zen-mode.nvim",
config = [[require('plugins.zen-mode-nvim')]],
})
use({
"folke/twilight.nvim",
config = [[require('plugins.twilight-nvim')]],
})
use({
"folke/todo-comments.nvim",
requires = "nvim-lua/plenary.nvim",
config = function()
require("todo-comments").setup()
end,
})
-- Statusline
-- use {
-- 'ojroques/nvim-hardline',
-- config = [[require('plugins.hardline')]]
-- }
use({
"b0o/incline.nvim",
{
"hoob3rt/lualine.nvim",
requires = {
"kyazdani42/nvim-web-devicons",
opt = true,
},
config = [[require('plugins.lualine')]],
},
})
-- Folding
-- use({
-- "kevinhwang91/nvim-ufo",
-- requires = "kevinhwang91/promise-async",
-- config = [[require('plugins.nvim-ufo')]],
-- })
-- Color highlighting
use({
"norcalli/nvim-colorizer.lua",
config = function()
require("colorizer").setup()
end,
})
-- Colorschemes
use({
"Th3Whit3Wolf/onebuddy",
requires = { "tjdevries/colorbuddy.vim" },
})
use({ "RRethy/nvim-base16" })
use({ "NTBBloodbath/doom-one.nvim" })
use({ "folke/tokyonight.nvim" })
use({ "marko-cerovac/material.nvim" })
use({
"kyazdani42/nvim-web-devicons",
config = [[require('plugins.nvim-web-devicons')]],
})
-- package.json
use("vuki656/package-info.nvim")
-- Blade
use({ "Eduruiz/vim-blade" })
-- DAP
use("mfussenegger/nvim-dap")
use("Pocco81/dap-buddy.nvim")
use("rcarriga/nvim-dap-ui")
-- Test runner
use({
"haydenmeade/neotest-jest",
"nvim-neotest/neotest-go",
"nvim-neotest/neotest-python",
{
"nvim-neotest/neotest",
requires = {
"nvim-lua/plenary.nvim",
"nvim-treesitter/nvim-treesitter",
"antoinemadec/FixCursorHold.nvim",
},
config = [[require('plugins.testing')]],
},
})
end)

@ -0,0 +1,9 @@
local utils = require('utils')
local opts = { noremap = true, silent = true }
utils.map('n', '<leader>gg', '<cmd>LazyGit<CR>', opts)
utils.map('n', '<leader>gc', '<cmd>LazyGitConfig<CR>', opts)
vim.env.GIT_EDITOR = 'nvr --remote-wait'
vim.g.lazygit_floating_window_use_plenary = 1
vim.g.lazygit_use_neovim_remote = 1

@ -0,0 +1,243 @@
local wk = require("which-key")
require("mason-lspconfig").setup({
automatic_installation = true,
})
vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, {
border = "rounded",
close_events = { "CursorMoved", "BufHidden", "InsertCharPre" },
})
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, {
border = "rounded",
})
require("aerial").setup({})
local capabilities = require("cmp_nvim_lsp").default_capabilities()
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
local lsp_rename_mapping = {
function()
vim.lsp.buf.rename()
end,
"Rename LSP symbol",
}
local lsp_references_mapping = {
"<cmd>TroubleToggle lsp_references<CR>",
"LSP references",
}
local on_attach = function(client, bufnr)
vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
-- Normal mappings
wk.register({
c = {
a = { "<cmd>lua vim.lsp.buf.code_action()<CR>", "Code action" },
r = lsp_rename_mapping,
f = {
"<cmd>lua vim.lsp.buf.format()<CR>",
"Format file",
},
o = { "<cmd>AerialToggle!<CR>", "Toggle outline" },
x = { "<cmd>lua vim.diagnostic.open_float({source= true})<CR>", "Show line diagnostics" },
R = lsp_references_mapping,
t = {
name = "Trouble",
t = { "<cmd>TroubleToggle<CR>", "Trouble Toggle" },
r = lsp_references_mapping,
w = { "<cmd>TroubleToggle lsp_workspace_diagnostics<CR>", "Workspace diagnostics" },
d = { "<cmd>TroubleToggle lsp_document_diagnostics<CR>", "Document diagnostics" },
q = { "<cmd>TroubleToggle quickfix<CR>", "Quickfix" },
l = { "<cmd>TroubleToggle loclist<CR>", "Location list" },
},
g = {
name = "Go to",
D = { "<cmd>lua vim.lsp.buf.declaration()<CR>", "Go to declaration" },
d = { "<cmd>lua vim.lsp.buf.definition()<CR>", "Go to definition" },
i = { "<cmd>lua vim.lsp.buf.implementation()<CR>", "Go to implementation" },
t = { "<cmd>lua vim.lsp.buf.type_definition()<CR>", "Go to type definition" },
},
},
}, {
prefix = "<leader>",
buffer = bufnr,
})
-- Visual mappings
wk.register({
c = {
a = { "<cmd>lua vim.lsp.buf.code_action()<CR>", "Range code action" },
f = {
"<cmd>lua vim.lsp.buf.format()<CR>",
"Range formatting",
},
},
}, {
mode = "v",
prefix = "<leader>",
buffer = bufnr,
})
-- No leader mappings
wk.register({
gd = { "<cmd>lua vim.lsp.buf.definition()<CR>", "Go to definition" },
K = { "<cmd>lua vim.lsp.buf.hover()<CR>", "LSP Hover" },
["<C-k"] = { "<cmd>lua vim.lsp.buf.signature_help()<CR>", "LSP Signature" },
["<f2>"] = lsp_rename_mapping,
["[["] = { "<cmd>AerialPrevUp<CR>", "Outline previous" },
["]]"] = { "<cmd>AerialNext<CR>", "Outline next" },
}, {
buffer = bufnr,
})
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
if vim.g.format_on_save == 1 then
vim.lsp.buf.format({ bufnr = bufnr })
end
end,
})
end
end
local settings = {
capabilities = capabilities,
on_attach = on_attach,
}
-- Neovim
require("neodev").setup({})
local servers = {
"clangd",
"pyright",
"rust_analyzer",
"gopls",
"phpactor",
"tailwindcss",
"jsonls",
"lua_ls",
}
for _, lsp in pairs(servers) do
require("lspconfig")[lsp].setup(settings)
end
-- JSON
require("lspconfig").jsonls.setup(vim.tbl_deep_extend("force", settings, {
settings = {
json = {
schemas = require("schemastore").json.schemas(),
validate = {
enable = true,
},
},
},
}))
-- Typescript
require("typescript").setup({
disable_commands = false,
debug = false,
server = settings,
})
-- null-ls
local null_ls = require("null-ls")
vim.g.format_on_save = 1
function _G.toggle_format_on_save()
if vim.g.format_on_save == 1 then
vim.g.format_on_save = 0
print("Disabled format on save")
else
vim.g.format_on_save = 1
print("Enabled format on save")
end
end
require("null-ls").setup({
sources = {
-- General
null_ls.builtins.code_actions.refactoring,
null_ls.builtins.completion.spell,
null_ls.builtins.diagnostics.trail_space,
null_ls.builtins.formatting.trim_newlines,
null_ls.builtins.formatting.trim_whitespace,
-- Git
null_ls.builtins.code_actions.gitrebase,
null_ls.builtins.code_actions.gitsigns,
-- GitHub
null_ls.builtins.diagnostics.actionlint,
-- Shell
null_ls.builtins.code_actions.shellcheck,
null_ls.builtins.diagnostics.shellcheck,
null_ls.builtins.formatting.shfmt,
-- C/C++
null_ls.builtins.formatting.clang_format,
null_ls.builtins.formatting.cmake_format,
-- Web
null_ls.builtins.formatting.prettier,
-- null_ls.builtins.code_actions.eslint_d,
null_ls.builtins.diagnostics.eslint,
null_ls.builtins.formatting.eslint,
null_ls.builtins.diagnostics.stylelint,
null_ls.builtins.formatting.stylelint,
null_ls.builtins.formatting.rustywind,
-- Markdown
null_ls.builtins.formatting.remark,
-- Lua
-- null_ls.builtins.diagnostics.luacheck,
null_ls.builtins.formatting.stylua,
-- Python
null_ls.builtins.diagnostics.flake8,
null_ls.builtins.formatting.black,
null_ls.builtins.formatting.isort,
-- PHP
null_ls.builtins.diagnostics.phpstan,
-- Go
null_ls.builtins.formatting.gofmt,
-- Rust
null_ls.builtins.formatting.rustfmt,
},
})
vim.api.nvim_create_autocmd("LspAttach", {
callback = function(args)
vim.bo[args.buf].formatexpr = nil
end,
})
require("nvim-lightbulb").setup({
autocmd = {
enabled = false,
},
sign = {
enabled = false,
},
virtual_text = {
enabled = false,
},
})
require("fidget").setup({})

@ -0,0 +1,42 @@
local lualine = require("lualine")
local conditions = {
buffer_not_empty = function()
return vim.fn.empty(vim.fn.expand("%:t")) ~= 1
end,
}
-- Config
local config = {
options = {
-- Disable sections and component separators
component_separators = "",
section_separators = "",
disabled_filetypes = { "NvimTree" },
globalstatus = true,
theme = tokyonight,
},
sections = {
-- these are to remove the defaults
lualine_a = { "mode" },
lualine_b = { "branch", "diff" },
lualine_c = {},
lualine_x = { "location", "progress" },
lualine_y = { "diagnostics", "filetype" },
lualine_z = {},
},
}
table.insert(config.sections.lualine_c, {
"filename",
condition = conditions.buffer_not_empty,
path = 1,
})
lualine.setup(config)
require("incline").setup({
hide = {
cursorline = true,
},
})

@ -0,0 +1,112 @@
require("zk").setup()
require("mkdnflow").setup({})
require("clipboard-image").setup({
default = {
img_dir = { "%:p:h", "img" },
img_name = function()
vim.fn.inputsave()
local name = vim.fn.input("Name: ")
vim.fn.inputrestore()
return name
end,
},
})
require("telescope").load_extension("zk")
local wk = require("which-key")
wk.register({
n = {
n = {
function()
vim.ui.input({ prompt = "Note title: " }, function(input)
require("zk.commands").get("ZkNew")({ title = input })
end)
end,
"Create new note",
},
d = {
function()
require("zk.commands").get("ZkNew")({ dir = "journal" })
end,
"Create or edit daily note",
},
f = {
function()
require("zk.commands").get("ZkNotes")()
end,
"Find note",
},
i = {
function()
require("zk.commands").get("ZkIndex")()
end,
"Index notes",
},
t = {
function()
require("zk.commands").get("ZkTag")()
end,
"Search by tag",
},
},
}, {
prefix = "<leader>",
})
local augroup = vim.api.nvim_create_augroup("MarkdownZk", {})
local ZK_NOTEBOOK_DIR = vim.env.ZK_NOTEBOOK_DIR
local patt = { ZK_NOTEBOOK_DIR .. "/*.md" }
vim.api.nvim_clear_autocmds({ group = augroup })
vim.api.nvim_create_autocmd("BufEnter", {
group = augroup,
pattern = patt,
callback = function(bufnr)
vim.cmd("lcd %:p:h")
wk.register({
t = {
function()
require("zk.commands").get("ZkNewFromTitleSelection")()
end,
"New note (selected as title)",
},
c = {
function()
require("zk.commands").get("ZkNewFromContentSelection")()
end,
"New note (selected as content)",
},
m = {
function()
require("zk.commands").get("ZkMatch")()
end,
"Find note match",
},
}, {
mode = "v",
bufnr = bufnr,
prefix = "<localleader>",
})
wk.register({
b = {
function()
require("zk.commands").get("ZkBacklinks")()
end,
"Show note backlinks",
},
l = {
function()
require("zk.commands").get("ZkLinks")()
end,
"Show note links",
},
}, {
mode = "n",
bufnr = bufnr,
prefix = "<localleader>",
})
end,
})

@ -0,0 +1,125 @@
local utils = require("utils")
local lspkind = require("lspkind")
local luasnip = require("luasnip")
local cmp = require("cmp")
local has_words_before = function()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
utils.opt("o", "completeopt", "menu,menuone,noselect")
cmp.setup({
confirm_opts = {
behavior = cmp.ConfirmBehavior.Replace,
select = false,
},
snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body)
end,
},
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
formatting = {
format = lspkind.cmp_format({
mode = "symbol_text",
maxwidth = 50,
before = function(_, vim_item)
return vim_item
end,
}),
},
experimental = {
ghost_text = true,
native_menu = false,
},
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(),
["<CR>"] = cmp.mapping.confirm({
select = false,
}),
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
}),
sources = cmp.config.sources({
{
name = "nvim_lsp",
},
{
name = "luasnip",
},
{
name = "nvim_lsp_signature_help",
},
{
name = "nvim_lua",
},
{
name = "orgmode",
},
}, {
{ name = "git" },
}, {
{
name = "path",
},
}, {
{
name = "buffer",
},
}),
})
-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline({ "/", "?" }, {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{
name = "buffer",
},
},
})
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline(":", {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{
name = "path",
},
}, {
{
name = "cmdline",
},
}),
})
require("cmp_git").setup()

@ -0,0 +1,89 @@
local wk = require("which-key")
wk.register({
o = {
p = { "<cmd>NvimTreeToggle<CR>", "Open project sidebar" },
},
}, {
prefix = "<leader>",
})
require("nvim-tree").setup({
auto_reload_on_write = true,
create_in_closed_folder = false,
disable_netrw = false,
hijack_netrw = true,
hijack_unnamed_buffer_when_opening = false,
ignore_buffer_on_setup = false,
open_on_setup = false,
open_on_setup_file = false,
open_on_tab = false,
sort_by = "name",
update_cwd = true,
reload_on_bufenter = false,
respect_buf_cwd = true,
ignore_ft_on_setup = {},
hijack_cursor = false,
update_focused_file = {
enable = true,
update_cwd = true,
ignore_list = {},
},
system_open = {
cmd = nil,
args = {},
},
view = {
width = 30,
side = "left",
signcolumn = "no",
mappings = {
custom_only = false,
list = {},
},
},
git = {
ignore = false,
},
renderer = {
special_files = {},
group_empty = false,
highlight_git = true,
icons = {
git_placement = "before",
show = {
file = true,
folder = true,
folder_arrow = true,
git = true,
},
glyphs = {
default = "",
symlink = "",
git = {
unstaged = "",
staged = "",
unmerged = "",
renamed = "",
untracked = "",
deleted = "",
ignored = "",
},
},
},
},
diagnostics = {
enable = false,
show_on_dirs = false,
icons = {
hint = "",
info = "",
warning = "",
error = "",
},
},
trash = {
cmd = "trash",
require_confirm = true,
},
})

@ -0,0 +1,34 @@
local utils = require("utils")
local tsconf = require("nvim-treesitter.configs")
require("orgmode").setup_ts_grammar()
require("nvim-ts-autotag").setup()
if not tsconf then
vim.cmd([[ echom 'Cannot load `nvim-treesitter.configs`' ]])
return
end
tsconf.setup({
ensure_installed = "all",
ignore_install = { "phpdoc" },
highlight = {
enable = true,
additional_vim_regex_highlighting = { "org" },
},
indent = {
enable = true,
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "gnn",
node_incremental = "grn",
scope_incremental = "grc",
node_decremental = "grm",
},
},
context_commentstring = {
enable = true,
},
})

@ -0,0 +1,44 @@
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
vim.o.foldenable = true
vim.o.foldmethod = "manual"
vim.o.foldcolumn = "1"
vim.o.foldlevel = 99
vim.o.foldlevelstart = 99
local handler = function(virtText, lnum, endLnum, width, truncate)
local newVirtText = {}
local suffix = ("  %d "):format(endLnum - lnum)
local sufWidth = vim.fn.strdisplaywidth(suffix)
local targetWidth = width - sufWidth
local curWidth = 0
for _, chunk in ipairs(virtText) do
local chunkText = chunk[1]
local chunkWidth = vim.fn.strdisplaywidth(chunkText)
if targetWidth > curWidth + chunkWidth then
table.insert(newVirtText, chunk)
else
chunkText = truncate(chunkText, targetWidth - curWidth)
local hlGroup = chunk[2]
table.insert(newVirtText, { chunkText, hlGroup })
chunkWidth = vim.fn.strdisplaywidth(chunkText)
-- str width returned from truncate() may less than 2nd argument, need padding
if curWidth + chunkWidth < targetWidth then
suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth)
end
break
end
curWidth = curWidth + chunkWidth
end
table.insert(newVirtText, { suffix, "MoreMsg" })
return newVirtText
end
vim.keymap.set("n", "zR", require("ufo").openAllFolds)
vim.keymap.set("n", "zM", require("ufo").closeAllFolds)
require("ufo").setup({
provider_selector = function()
return { "treesitter", "indent" }
end,
})

@ -0,0 +1,3 @@
require'nvim-web-devicons'.setup {
default = true;
}

@ -0,0 +1,46 @@
local wk = require("which-key")
require("orgmode").setup({
org_agenda_files = {
"~/.org/work/*",
"~/org/learning/*",
"~/.org/projects/*",
"~/.org/calendars/*",
"~/.org/conferences/*",
},
org_default_notes_file = "~/.org/refile.org",
})
vim.api.nvim_create_autocmd("BufEnter", {
pattern = "*.org",
callback = function()
vim.wo.foldexpr = "nvim_treesitter#foldexpr()"
vim.wo.foldmethod = "expr"
end,
})
local wk_open_org_agenda = {
[[<cmd>lua require('orgmode').action("agenda.prompt")<CR>]],
"Org agenda",
}
wk.register({
O = {
name = "Org mode",
a = wk_open_org_agenda,
f = {
[[<cmd>lua require('telescope.builtin').find_files{ cwd = '~/.org' }<CR>]],
"Find file in notes",
},
n = {
[[<cmd>lua require('orgmode').action("capture.prompt")<CR>]],
"Org capture",
},
s = {
[[<cmd>lua require('telescope.builtin').live_grep{ cwd = '~/.org' }<CR>]],
"Search notes",
},
},
}, {
prefix = "<leader>",
})

@ -0,0 +1,20 @@
require("project_nvim").setup({
manual_mode = false,
detection_methods = { "lsp", "pattern" },
patterns = {
".git",
"_darcs",
".hg",
".bzr",
".svn",
"Makefile",
"package.json",
".luarc.json",
".zk",
},
ignore_lsp = {},
exclude_dirs = {},
show_hidden = true,
silent_chdir = true,
datapath = vim.fn.stdpath("data"),
})

@ -0,0 +1,13 @@
local wk = require("which-key")
wk.register({
f = {
r = {"<cmd>RnvimrToggle<CR>", "Toggle Ranger"}
}
}, {
prefix = "<leader>"
})
vim.g.rnvimr_enable_ex = 0
vim.g.rnvimr_enable_picker = 1
vim.g.rnvimr_enable_bw = 0

@ -0,0 +1,108 @@
local wk = require("which-key")
local actions = require("telescope.actions")
local M = {}
M.project_files = function()
local opts = {}
local ok = pcall(require("telescope.builtin").git_files, opts)
if not ok then
require("telescope.builtin").find_files(opts)
end
end
M.file_browser = function()
require("telescope").extensions.file_browser.file_browser({
cwd = vim.fn.expand("%:p:h"),
})
end
require("telescope").setup({
defaults = {
mappings = {
i = {
["<esc>"] = actions.close,
},
},
},
pickers = {
git_files = {
show_untracked = true,
},
find_files = {
hidden = true,
follow = true,
},
live_grep = {
hidden = true,
follow = true,
},
},
extensions = {
file_browser = {
hidden = true,
follow = true,
},
fzf = {
fuzzy = true,
override_generic_sorter = true,
override_file_sorter = true,
case_mode = "smart_case",
},
},
})
require("telescope").load_extension("file_browser")
require("telescope").load_extension("ui-select")
require("telescope").load_extension("fzf")
require("telescope").load_extension("projects")
local browse_files = {
function()
M.file_browser()
end,
"Browse files",
}
local find_file_in_project = {
function()
M.project_files()
end,
"Find file in project",
}
wk.register({
f = {
f = { "<cmd>Telescope find_files<cr>", "Find file" },
p = {
[[<cmd>lua require('telescope.builtin').find_files{ cwd = '~/.config/nvim/' }<CR>]],
"Find config file",
},
o = { "<cmd>Telescope oldfiles<cr>", "Open recent file" },
b = browse_files,
},
b = {
b = { "<cmd>Telescope buffers<CR>", "Switch buffer" },
},
h = {
h = { "<cmd>Telescope help_tags<CR>", "Vim help tags" },
m = { "<cmd>Telescope man_pages<CR>", "Man pages" },
},
p = {
p = { "<cmd>Telescope projects<CR>", "Switch to project" },
f = find_file_in_project,
},
g = {
c = { "<cmd>Telescope git_commits<CR>", "Checkout commit" },
C = { "<cmd>Telescope git_bcommits<CR>", "Checkout buffer commit" },
B = { "<cmd>Telescope git_branches<CR>", "Switch branch" },
s = { "<cmd>Telescope git_stash<CR>", "Apply stash" },
},
["<space>"] = find_file_in_project,
["."] = browse_files,
[","] = { "<cmd>Telescope buffers<CR>", "Switch buffer" },
["/"] = { "<cmd>Telescope live_grep<CR>", "Live grep" },
}, {
prefix = "<leader>",
})
return M

@ -0,0 +1,41 @@
require("toggleterm").setup({
hide_numbers = true,
shade_terminals = true,
start_in_insert = true,
direction = "horizontal",
close_on_exit = false,
})
local Terminal = require("toggleterm.terminal").Terminal
local lazygit = Terminal:new({
cmd = "lazygit",
hidden = true,
direction = "tab",
on_open = function(term)
vim.cmd("startinsert!")
vim.api.nvim_buf_set_keymap(term.bufnr, "t", "<esc>", "<esc>", { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(term.bufnr, "t", "<C-c>", "", {
callback = function()
term:toggle()
end,
noremap = true,
silent = true,
})
end,
})
local wk = require("which-key")
wk.register({
g = {
g = {
function()
lazygit:toggle()
end,
"Open lazygit",
},
},
o = {
t = { '<cmd>exe v:count1 . "ToggleTerm"<CR>', "Open terminal" },
},
}, { prefix = "<leader>" })

@ -0,0 +1,57 @@
local wk = require("which-key")
require("neotest").setup({
adapters = {
require("neotest-jest"),
require("neotest-python"),
require("neotest-go"),
},
})
local run_current_test_keybiding = {
function()
require("neotest").run.run()
end,
"Current test",
}
local keybindings = {
name = "Test",
t = run_current_test_keybiding,
T = {
function()
require("neotest").run.run(vim.fn.expand("%"))
end,
"Current file",
},
d = {
function()
require("neotest").run.run({ strategy = "dap" })
end,
"Debug current test",
},
s = {
function()
require("neotest").run.stop()
end,
"Stop running test",
},
a = {
function()
require("neotest").run.attach()
end,
"Attach to running test",
},
}
wk.register({
r = {
t = run_current_test_keybiding,
T = keybindings,
},
c = {
T = keybindings,
},
}, {
prefix = "<leader>",
})

@ -0,0 +1,14 @@
require("mason").setup()
require("mason-tool-installer").setup({
ensure_installed = {
"stylua",
"shellcheck",
"shfmt",
"editorconfig-checker",
"eslint",
"prettier",
"flake8",
"black",
},
})

@ -0,0 +1,19 @@
require("twilight").setup({
treesitter = true,
expand = {
"function",
"method",
"table",
"if_statement",
},
})
local wk = require("which-key")
wk.register({
t = {
t = { "<cmd>Twilight<CR>", "Twilight" },
},
}, {
prefix = "<leader>",
})

@ -0,0 +1,76 @@
local wk = require("which-key")
wk.setup()
wk.register({
f = {
name = "File",
C = {
function()
vim.api.nvim_input(":Copy " .. vim.fn.expand("%"))
end,
"Copy file",
},
R = {
function()
vim.api.nvim_input(":Move " .. vim.fn.expand("%"))
end,
"Rename/move file",
},
D = {
function()
vim.api.nvim_input(":Delete")
end,
"Delete file",
},
P = {
function()
print(vim.fn.expand("%:p"))
end,
"Print absolute path",
},
},
b = {
name = "Buffer",
d = { "<cmd>bdel<CR>", "Delete buffer" },
s = { "<cmd>write<CR>", "Save buffer" },
},
c = {
name = "Code",
},
h = {
name = "Help",
},
p = {
name = "Project",
},
n = {
name = "Note",
},
t = {
name = "Toggle",
},
g = {
name = "Git",
},
r = {
name = "Run",
},
o = {
name = "Open",
t = { '<cmd>exe v:count1 . "ToggleTerm"<CR>', "Open terminal" },
T = { "<cmd>terminal<CR>", "Open terminal here" },
},
w = {
name = "Window",
d = { "<cmd>close<CR>", "Close window" },
v = { "<cmd>vsplit<CR>", "Vertical split" },
s = { "<cmd>split<CR>", "Horizontal split" },
},
q = {
name = "Quit",
q = { "<cmd>qa<CR>", "Quit nvim" },
},
}, {
prefix = "<leader>",
})

@ -0,0 +1,11 @@
require("zen-mode").setup()
local wk = require('which-key')
wk.register({
t = {
z = {"<cmd>ZenMode<CR>", "Zen mode"}
}
}, {
prefix = "<leader>"
})

@ -0,0 +1,51 @@
local utils = require("utils")
local cmd = vim.cmd
local indent = 2
cmd("syntax enable")
cmd("filetype plugin indent on")
utils.opt("b", "expandtab", true)
utils.opt("b", "shiftwidth", indent)
utils.opt("b", "smartindent", false)
utils.opt("b", "autoindent", true)
utils.opt("b", "softtabstop", indent)
utils.opt("b", "tabstop", indent)
utils.opt("o", "hidden", true)
utils.opt("w", "wrap", true)
utils.opt("o", "ignorecase", true)
utils.opt("o", "scrolloff", 10)
utils.opt("o", "shiftround", true)
utils.opt("o", "smartcase", true)
utils.opt("o", "splitbelow", true)
utils.opt("o", "splitright", true)
utils.opt("w", "number", true)
utils.opt("w", "relativenumber", true)
utils.opt("w", "cursorline", true)
utils.opt("o", "clipboard", "unnamed,unnamedplus")
utils.opt("o", "lazyredraw", true)
utils.opt("b", "undofile", true)
utils.opt("o", "mouse", "a")
utils.opt("o", "scrolloff", 10)
utils.opt("o", "laststatus", 3)
vim.g.maplocalleader = ","
-- Highlight on yank
vim.cmd("au TextYankPost * lua vim.highlight.on_yank {on_visual = false}")
-- Terminal
vim.api.nvim_create_augroup("Terminal", { clear = true })
vim.api.nvim_create_autocmd("TermOpen", {
group = "Terminal",
pattern = "*",
callback = function()
vim.wo.number = false
vim.wo.relativenumber = false
vim.api.nvim_buf_set_keymap(0, "t", "<esc>", [[<C-\><C-n>]], { noremap = true })
vim.cmd("startinsert")
end,
})
require("keybindings")
require("colorscheme")

@ -0,0 +1,15 @@
local utils = { }
local scopes = {o = vim.o, b = vim.bo, w = vim.wo}
function utils.opt(scope, key, value)
scopes[scope][key] = value
if scope ~= 'o' then scopes['o'][key] = value end
end
function utils.map(mode, lhs, rhs, opts)
opts = opts or { noremap = true }
vim.api.nvim_set_keymap(mode, lhs, rhs, opts)
end
return utils
Loading…
Cancel
Save