feat: refactor

This commit is contained in:
2022-04-23 03:41:04 +02:00
parent 42db054021
commit 4bf6a46a85
35 changed files with 2167 additions and 500 deletions

View File

@@ -1,24 +1,24 @@
-- luasnip setup
local luasnip = require "luasnip"
local lspkind = require "lspkind"
-- local lspkind = require "lspkind"
local cmp = require "cmp"
local cmp_autopairs = require("nvim-autopairs.completion.cmp")
cmp.setup {
formatting = {
format = lspkind.cmp_format(
{
with_text = true,
menu = ({
buffer = "[Buffer]",
nvim_lsp = "[LSP]",
luasnip = "[LuaSnip]",
nvim_lua = "[Lua]",
latex_symbols = "[Latex]"
})
}
)
},
-- formatting = {
-- format = lspkind.cmp_format(
-- {
-- with_text = true,
-- menu = ({
-- buffer = "[Buffer]",
-- nvim_lsp = "[LSP]",
-- luasnip = "[LuaSnip]",
-- nvim_lua = "[Lua]",
-- latex_symbols = "[Latex]"
-- })
-- }
-- )
-- },
experimental = {
ghost_text = true
},

View File

@@ -4,28 +4,28 @@ local noremap = {noremap = true}
command_center.add({
{
description = "Search inside current buffer",
command = "Telescope current_buffer_fuzzy_find",
cmd = "Telescope current_buffer_fuzzy_find",
keybindings = { "n", "<leader>fl", noremap },
}, {
-- If no descirption is specified, command is used to replace descirption by default
-- You can change this behavior in settigns
command = "Telescope find_files",
cmd = "Telescope find_files",
},
{
-- If no keybindings specified, no keybindings will be displayed or registered
description = "Find hidden files",
command = "Telescope find_files hidden=true",
cmd = "Telescope find_files hidden=true",
},
{
-- You can specify multiple keybindings for the same command ...
description = "Show document symbols",
command = "Telescope lsp_document_symbols",
cmd = "Telescope lsp_document_symbols",
},
{
description = "Show function signaure (hover)",
command = "lua vim.lsp.buf.hover()",
cmd = "lua vim.lsp.buf.hover()",
},{
description="(TS) Organize Imports",
command = "OrganizeImports"
cmd = "OrganizeImports"
}
})

View File

@@ -1,6 +1,6 @@
local lsp = require "lspconfig"
local lsp_status = require("lsp-status")
local ts_utils = require("nvim-lsp-ts-utils")
-- local ts_utils = require("nvim-lsp-ts-utils")
require'nvim-lightbulb'.setup {
-- LSP client names to ignore

View File

@@ -0,0 +1,239 @@
-----------------
-- Status Line --
-----------------
-- Eviline / Vimline config for lualine
-- Author: shadmansaleh
-- Credit: glepnir
-- Credit: Elai
local lualine = require "lualine"
-- Color table for highlights
-- stylua: ignore
local colors = {
bg = '#00000000',
fg = '#bbc2cf',
yellow = '#ECBE7B',
cyan = '#008080',
darkblue = '#081633',
green = '#B7BD82',
orange = '#8d6141',
violet = '#B294BB',
magenta = '#AE84BB',
blue = '#81A2BE',
red = '#CC8282',
}
local conditions = {
buffer_not_empty = function()
return vim.fn.empty(vim.fn.expand('%:t')) ~= 1
end,
hide_in_width = function()
return vim.fn.winwidth(0) > 80
end,
check_git_workspace = function()
local filepath = vim.fn.expand('%:p:h')
local gitdir = vim.fn.finddir('.git', filepath .. ';')
return gitdir and #gitdir > 0 and #gitdir < #filepath
end,
}
-- Config
local config = {
options = {
-- Disable sections and component separators
component_separators = '',
section_separators = '',
theme = {
-- We are going to use lualine_c an lualine_x as left and
-- right section. Both are highlighted by c theme . So we
-- are just setting default looks o statusline
normal = { c = { fg = colors.fg, bg = colors.bg } },
inactive = { c = { fg = colors.fg, bg = colors.bg } },
},
},
-- These are to remove the defaults
sections = {
lualine_a = {},
lualine_b = {},
lualine_y = {},
lualine_z = {},
-- These will be filled later
lualine_c = {},
lualine_x = {},
},
inactive_sections = {
-- these are to remove the defaults
lualine_a = {},
lualine_b = {},
lualine_y = {},
lualine_z = {},
lualine_c = {},
lualine_x = {},
},
}
-- Inserts a component in lualine_c at left section
local function ins_left(component)
table.insert(config.sections.lualine_c, component)
end
-- Inserts a component in lualine_x ot right section
local function ins_right(component)
table.insert(config.sections.lualine_x, component)
end
-- Begining Of The StatusLine
-- ins_left {
-- function()
-- return '|'
-- end,
-- color = { fg = colors.blue }, -- Sets highlighting of component
-- padding = { left = 0, right = 1 }, -- We don't need space before this
-- }
-- Icon Of Diffrent Mode: -- normal -- | -- insert -- | -- visual --
ins_left {
-- mode component
function()
return ''
end,
color = function()
-- auto change color according to neovims mode
local mode_color = {
n = colors.green,
i = colors.blue,
v = colors.magenta,
[''] = colors.blue,
V = colors.blue,
c = colors.red,
no = colors.red,
s = colors.orange,
S = colors.orange,
[''] = colors.orange,
ic = colors.yellow,
R = colors.violet,
Rv = colors.violet,
cv = colors.red,
ce = colors.red,
r = colors.cyan,
rm = colors.cyan,
['r?'] = colors.cyan,
['!'] = colors.red,
t = colors.red,
}
return { fg = mode_color[vim.fn.mode()] }
end,
padding = { right = 1 },
}
-- File Name
ins_left {
'filename',
file_status = true, -- Displays file status (readonly status, modified status)
path = 2, -- 0: Just the filename
-- 1: Relative path
-- 2: Absolute path
shorting_target = 100, -- Shortens path to leave 40 spaces in the window
-- for other components. (terrible name, any suggestions?)
symbols = {
modified = '', -- Text to show when the file is modified.
readonly = '', -- Text to show when the file is non-modifiable or readonly.
unnamed = '[No Name]', -- Text to show for unnamed buffers.
}
}
-- Git Diff
local function diff_source()
local gitsigns = vim.b.gitsigns_status_dict
if gitsigns then
return {
added = gitsigns.added,
modified = gitsigns.changed,
removed = gitsigns.removed
}
end
end
ins_right { 'diff', source = diff_source }
-- Git Branch
ins_right {
'branch',
icon = '',
-- icon = '',
-- color = { fg = colors.green },
-- padding = { right = 1 },
-- padding = { left = 1 },
}
-- File Type
ins_right {
'filetype',
icon_only = true,
padding = { right = 2, left = 1 }
}
-- File Encoding
ins_right {
'o:encoding', -- option component same as &encoding in viml
fmt = string.upper, -- I'm not sure why it's upper case either ;)
cond = conditions.hide_in_width,
padding = { right = 2 },
-- color = { fg = colors.green, gui = 'bold' },
-- Add components to right sections
}
-- File Format
-- ins_right {
-- 'fileformat',
-- -- fmt = string.upper,
-- -- icons_enabled = false, -- I think icons are cool but Eviline doesn't have them. sigh
-- padding = { right = 2 },
-- symbols = { unix = 'NIX '},
-- -- color = { fg = colors.green, gui = 'bold' },
-- }
-- File Size
ins_right {
-- filesize component
'filesize',
padding = { right = 2 },
cond = conditions.buffer_not_empty,
}
-- Text Progress
ins_right {
'progress',
padding = { right = 1 },
-- padding = { left = 1 },
}
-- File Location
ins_right {
'location',
padding = { right = 0 },
}
-- Insert mid section. You can make any number of sections in neovim :)
-- for lualine it's any number greater then 2
ins_left {
function()
return '%='
end,
}
-- End Of The Status Bar
-- ins_right {
-- function()
-- return ''
-- end,
-- color = { fg = colors.blue }, -- Sets highlighting of component
-- padding = { left = 1, right = 0 }, -- We don't need space before this
-- }
-- Now don't forget to initialize lualine
lualine.setup(config)

View File

@@ -0,0 +1,17 @@
local notify = require("notify")
notify.setup(
{
stages = "fade_in_slide_out",
max_width = 50,
render = "minimal",
background_colour = "#000000",
icons = {
ERROR = "",
WARN = "",
INFO = "",
DEBUG = "",
TRACE = ""
}
}
)
vim.notify = notify;

View File

@@ -49,11 +49,7 @@ local default = {
}
}
local M = {}
M.setup = function()
telescope.setup(default)
-- telescope.load_extension("themes");
telescope.load_extension("command_center");
end
return M
telescope.setup(default)
-- telescope.load_extension("themes");
telescope.load_extension("command_center");
telescope.load_extension("notify");

View File

@@ -0,0 +1,40 @@
local g = vim.g
-- Configure nvim-tree
g.nvim_tree_highlight_opened_files = 1
g.nvim_tree_group_empty = 1
g.nvim_tree_show_icons = {
folder_arrows = 0,
folders = 1,
files = 1,
git = 1
}
require("nvim-tree").setup {
auto_open = 1,
gitignore = 1,
group_empty = 1,
hijack_cursor = 1,
update_cwd = true,
update_focused_file = {
enable = false
},
renderer = {
indent_markers = {
enable = 0
}
},
diagnostics = {
enable = true,
icons = {
hint = "",
info = "",
warning = "",
error = ""
}
},
view = {
auto_resize = true,
hide_root_folder = true,
signcolumn = "no"
}
}

View File

@@ -7,11 +7,6 @@ cmd [[
augroup END
]]
cmd [[
au ColorScheme * hi Normal ctermbg=none guibg=none
au ColorScheme myspecialcolors hi Normal ctermbg=red guibg=red
]]
cmd [[
augroup filetypedetect
au BufNewFile,BufRead *.frag setl ft=glsl
@@ -27,6 +22,9 @@ augroup SaveManualFolds
augroup END
]]
vim.api.nvim_create_autocmd("BufWritePre",{
callback = function()
vim.lsp.buf.formatting_sync();

View File

@@ -1,6 +1,5 @@
local map = vim.api.nvim_set_keymap
local g = vim.g
local cmd = vim.cmd
local options = {noremap = true}
local remap = {noremap = false}
@@ -21,7 +20,7 @@ map("n", "K", "<Cmd>lua vim.lsp.buf.hover()<CR>", options)
map("n", "<Leader>e", "<cmd>lua vim.diagnostic.open_float()<CR>", options)
map("n", "<Leader>rn", "<cmd>lua vim.lsp.buf.rename()<CR>", options)
map("n", "<Leader>c", "<cmd>lua vim.lsp.buf.code_action()<CR>", options)
map("n", "<Leader><C-f>", ":Neoformat<CR>", options)
-- map("n", "<Leader><C-f>", ":Neoformat<CR>", options)
map("n", "[d", "<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>", options)
map("n", "]d", "<cmd>lua vim.lsp.diagnostic.goto_next()<CR>", options)
map("n", "<leader>t", ":TroubleToggle<CR>", remap)
@@ -36,6 +35,9 @@ map("n", "<C-l>", "<C-w>l", options)
map("n", "<A-Left>", ":bprevious<CR>",options);
map("n", "<A-Right>", ":bnext<CR>",options);
-- Backspace Delete like Browser
map('i', '<C-H>', '<Esc>caw', options)
map("n", "Y", "yy", options)
map("n", "<Leader>k", "{", options)
map("n", "<Leader>j", "}", options)

View File

@@ -0,0 +1,63 @@
-------------
-- General --
-------------
local set = vim.opt
set.swapfile = false -- Don't use swapfile
set.updatetime = 0 -- Faster completion
set.encoding="utf-8" -- The encoding displayed
set.fileencoding="utf-8" -- The encoding written to file
set.smartindent = true -- Makes indenting smart
set.iskeyword:append("-") -- treat dash separated words as a word text object"
set.clipboard = "unnamedplus" -- Copy paste between vim and everything else
set.smarttab = true -- Makes tabbing smarter will realize you have 2 vs 4
set.expandtab = true -- Converts tabs to spaces
set.autoindent = true -- Good auto indent
set.autochdir = true -- Your working directory will always be the same as your working directory
set.incsearch = true -- sets incremental search
set.shell = "/bin/zsh" -- Set your shell to bash or zsh
set.shortmess:append "sI" -- Disable nvim intro
vim.cmd [[set nobackup]] -- creates a backup file
vim.cmd [[set nowritebackup]] -- creates a backup file i guess
vim.cmd [[set formatoptions-=cro]] -- Stop newline continution of comments
vim.cmd [[set complete+=kspell]] -- auto complete with spellcheck
vim.cmd [[set completeopt=menuone,longest]] -- auto complete menu (It's pretty great)
vim.cmd [[set nocompatible]] -- Disable compatibility to old-time vi
set.mouse = 'a' -- Enable mouse support
---------------
-- Neovim UI --
---------------
set.pumheight = 15 -- Makes popup menu smaller
set.ruler = true -- Show the cursor position all the time
set.splitbelow = true -- Horizontal splits will automatically be below
set.splitright = true -- Vertical splits will automatically be to the right
set.conceallevel = 0 -- So that I can see `` in markdown files
set.tabstop = 2 -- Insert 2 spaces for a tab
set.number = true -- Line numbers
set.background = "dark" -- tell vim what the background color looks like
set.virtualedit = "onemore" -- With This option you can move the cursor one character over the end
set.ignorecase = true -- ignores case when searching
set.smartcase = true -- turns on case sensitive search when letters are capitalized
set.termguicolors = true -- set term gui colors (most terminals support this)
set.laststatus=2 -- Always display the status line
set.title = true -- Show current txt that you editing
set.relativenumber = false -- Vims absolute, relative and hybrid line numbers
set.cursorline = false -- Enable highlighting of the current line
set.shiftwidth = 2 -- Change the number of space characters inserted for indentation
set.showtabline = 1 -- Always show tabs
set.cmdheight = 1 -- More space for displaying messages
vim.cmd [[set nowrap]] -- Display long lines as just one line
vim.cmd [[set noshowmode]] -- We don't need to see things like -- INSERT -- anymore
vim.cmd [[syntax enable]] -- Enables syntax highlighing
vim.cmd [[set t_Co=256]] -- Support 256 colors
-- vim.cmd "set whichwrap+=<,>,[,],h,l" -- Breaks Space-Time Continuum
-----------------
-- Memory, CPU --
-----------------
set.hidden = true -- Required to keep multiple buffers open multiple buffers
set.timeoutlen = 500 -- By default timeoutlen is 1000 ms
set.lazyredraw = true -- Disable lazyredraw
set.synmaxcol = 240 -- Max column for syntax highlight
set.updatetime = 700 -- ms to wait for trigger an event

View File

@@ -3,15 +3,18 @@ return require("packer").startup(
-- Let packer manage itself
use "wbthomason/packer.nvim"
use 'lewis6991/impatient.nvim'
-- General Helper Functions
use "nvim-lua/plenary.nvim"
-- Filetype Detection
use "nathom/filetype.nvim"
-- use "nathom/filetype.nvim"
-- Theming Section
-- use 'folke/tokyonight.nvim'
use "EdenEast/nightfox.nvim"
use "nvim-lualine/lualine.nvim"
-- use "xiyaowong/nvim-transparent"
-- Layout Plugins
@@ -19,22 +22,22 @@ return require("packer").startup(
use "kyazdani42/nvim-tree.lua"
use "nvim-lua/popup.nvim"
use "mhinz/vim-startify"
use "tpope/vim-fugitive"
-- use "tpope/vim-fugitive"
use "tpope/vim-commentary"
use "tpope/vim-surround"
use "lambdalisue/suda.vim"
-- use "tpope/vim-surround"
-- use "lambdalisue/suda.vim"
use "windwp/nvim-autopairs"
-- Code Navigation
use "alexghergh/nvim-tmux-navigation"
use "dense-analysis/ale"
use "nathanmsmith/nvim-ale-diagnostic"
-- use "alexghergh/nvim-tmux-navigation"
-- use "dense-analysis/ale"
-- use "nathanmsmith/nvim-ale-diagnostic"
use "junegunn/fzf"
use "nvim-telescope/telescope.nvim"
use "gfeiyou/command-center.nvim"
-- Postman like features
use "NTBBloodbath/rest.nvim"
-- use "NTBBloodbath/rest.nvim"
-- Obsidian / Roam like features
-- use "lervag/wiki.vim"
@@ -44,7 +47,7 @@ return require("packer").startup(
-- Lsp Errors
use "folke/lsp-colors.nvim"
use "kosayoda/nvim-lightbulb"
use "onsails/lspkind-nvim"
-- use "onsails/lspkind-nvim"
use {
"folke/trouble.nvim",
requires = "kyazdani42/nvim-web-devicons",
@@ -54,7 +57,7 @@ return require("packer").startup(
}
-- Syntax / Autocomplete
use "terminalnode/sway-vim-syntax" --sway config syntax
-- use "terminalnode/sway-vim-syntax" --sway config syntax
use "neovim/nvim-lspconfig"
use "hrsh7th/nvim-cmp"
use "hrsh7th/cmp-nvim-lsp"
@@ -68,8 +71,8 @@ return require("packer").startup(
use "saadparwaiz1/cmp_luasnip"
use "williamboman/nvim-lsp-installer"
use "nvim-lua/lsp-status.nvim"
use "jose-elias-alvarez/nvim-lsp-ts-utils"
use "neoclide/jsonc.vim"
-- use "jose-elias-alvarez/nvim-lsp-ts-utils"
-- use "neoclide/jsonc.vim"
use "brymer-meneses/grammar-guard.nvim"
use {
"nvim-treesitter/nvim-treesitter",
@@ -84,6 +87,8 @@ return require("packer").startup(
-- General Popup Window
use "akinsho/nvim-toggleterm.lua"
use "rktjmp/fwatch.nvim"
-- Database Feature
use "tpope/vim-dadbod"
use "kristijanhusak/vim-dadbod-ui"

View File

@@ -1,57 +0,0 @@
local cmd = vim.cmd
local g = vim.g
local function tablelength(T)
local count = 0
for _ in pairs(T) do
count = count + 1
end
return count
end
local function select_client(method)
local all_clients = vim.tbl_values(vim.lsp.buf_get_clients())
local supported_client
local found_client = false
for _, client in ipairs(all_clients) do
local supports = client.supports_method(method)
if supports then
found_client = true
supported_client = client
end
end
if not found_client then
return nil
end
return supported_client
end
g.neoformat_enabled_glsl = {}
function FormattingSync()
vim.cmd("Neoformat")
-- local client = select_client("textDocument/formatting")
-- if client == nil then
-- vim.notify("No LSP Client with formatting connected")
-- end
-- vim.notify("Formatting with LSP")
-- local params = util.make_formatting_params({})
-- local result, err = client.request_sync("textDocument/formatting", params, 500, vim.api.nvim_get_current_buf())
-- if result and result.result then
-- util.apply_text_edits(result.result)
-- elseif err then
-- vim.notify("vim.lsp.buf.formatting_sync: " .. err, vim.log.levels.WARN)
-- end
end
vim.cmd [[command! Format lua FormattingSync()]]
cmd [[
augroup auto_format
au!
au BufWritePre * lua FormattingSync()
augroup END
]]

View File

@@ -1,68 +0,0 @@
local Terminal = require("toggleterm.terminal").Terminal
local u = require("utils")
local lazygit =
Terminal:new(
{
cmd = "lazygit",
dir = "git_dir",
direction = "float",
float_opts = {
winblend = 0,
border = "shadow"
},
on_open = function(term)
vim.cmd("startinsert!")
vim.api.nvim_buf_set_keymap(term.bufnr, "n", "q", "<cmd>close<CR>", {noremap = true, silent = true})
end,
on_close = function(term)
Terminal:close()
end
}
)
function _lazygit_toggle()
lazygit:toggle()
end
vim.api.nvim_set_keymap("n", "<C-g>", "<cmd>lua _lazygit_toggle()<CR>", {noremap = true, silent = true})
local pnpm =
Terminal:new(
{
cmd = "pnpm dev",
dir = "git_dir",
size = 5,
direction = "vertical",
on_close = function(term)
Terminal:close()
end
}
)
function _pnpm_toggle()
pnpm:toggle()
end
vim.api.nvim_set_keymap("n", "<Leader>d", "<cmd>lua _pnpm_toggle()<CR>", {noremap = true, silent = true})
local nvimConfig =
Terminal:new(
{
cmd = "cd $HOME/.dotfiles && nvim configs/init.lua && cd -",
direction = "float",
on_close = function(term)
Terminal:close()
u.ReloadConfig()
end
}
)
function _nvimConfig_toggle()
nvimConfig:toggle()
end
vim.api.nvim_set_keymap("n", "<Leader><C-i>", "<cmd>lua _nvimConfig_toggle()<CR>", {noremap = true, silent = true})
require("toggleterm").setup {
shade_terminals = true
}

View File

@@ -1,85 +0,0 @@
local lorem = {}
local WORDS_IN_SENTENCE = {min = 5, max = 15}
local SENTENCES_IN_PARAGRAPH = {min = 2, max = 7 }
local PARAGRAPHS_IN_TEXT = {min = 2, max = 7 }
local function random_int(min, max)
return math.random(min, max)
end
local BASE_PHRASE = [[
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Suspendisse rutrum accumsan elit vel auctor.
Praesent sit amet aliquam turpis.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.
Maecenas non erat ut elit sodales commodo.
Nam gravida ipsum quis nulla tempus, quis pulvinar augue tristique.
Nulla massa odio, imperdiet non ultricies tincidunt, viverra sed lorem.
Nulla elementum sapien ut commodo aliquet.
Pellentesque iaculis turpis tellus, eget laoreet augue condimentum vel.
Quisque at risus rhoncus, facilisis tellus nec, tristique dolor.
Maecenas cursus magna eget imperdiet laoreet.
]]
local function get_words(phrase)
local list = {}
for word in phrase:gmatch('%a+') do
table.insert(list, word:lower())
end
return list
end
lorem.__index = lorem
lorem._dict = get_words(BASE_PHRASE)
function lorem:generator(phrase)
if type(phrase) ~= 'string' then
error('First argument of lorem.generator should be a string', 2)
end
local g = {_dict = {}}
for word in phrase:gmatch('%a+') do
table.insert(g._dict, word:lower())
end
if #(g._dict) == 0 then
error('String argument of lorem.generator should contain words', 2)
end
setmetatable(g, self)
return g
end
function lorem:word()
return self._dict[random_int(1, #(self._dict))]
end
function lorem:sentence()
local n = random_int(WORDS_IN_SENTENCE.min, WORDS_IN_SENTENCE.max)
local words = {}
for i = 1, n do
words[i] = self:word()
end
local s = table.concat(words, ' ')
s = s .. "."
s = s:sub(1, 1):upper() .. s:sub(2)
return s
end
function lorem:paragraph()
local n = random_int(SENTENCES_IN_PARAGRAPH.min, SENTENCES_IN_PARAGRAPH.max)
local sentences = {}
for i = 1, n do
sentences[i] = self:sentence()
end
return table.concat(sentences, ' ')
end
function lorem:text()
local n = random_int(PARAGRAPHS_IN_TEXT.min, PARAGRAPHS_IN_TEXT.max)
local paragraphs = {}
for i = 1, n do
paragraphs[i] = self:paragraph()
end
return table.concat(paragraphs, '\n')
end
return lorem

View File

@@ -0,0 +1,35 @@
-- see if the file exists
local function file_exists(file)
local f = io.open(file, "rb")
if f then f:close() end
return f ~= nil
end
-- get all lines from a file, returns an empty
-- list/table if the file does not exist
local function line_from(file)
if not file_exists(file) then return {} end
local f = io.open(file) -- 'r' is unnecessary because it's a default value.
local line = f:read() -- '*l' is unnecessary because it's a default value.
f:close()
return line;
end
local filePath = os.getenv("HOME").."/.cache/dark-mode";
local function updateTheme()
local line = line_from(filePath);
if line then
local dark = string.find(line, "dark");
if dark then
vim.cmd("colorscheme nightfox")
else
vim.cmd("colorscheme dayfox")
end
end
end
updateTheme()
local w = vim.loop.new_fs_event()
w:start(filePath, {}, vim.schedule_wrap(updateTheme))