Init 🚀
This commit is contained in:
parent
2f3f9699a1
commit
a9cbaf7802
33 changed files with 1814 additions and 0 deletions
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
pack/**
|
||||
sessions/**
|
||||
.netrwhist
|
||||
plugin/
|
||||
lua/cosmic/compiled.lua
|
1
init.lua
Normal file
1
init.lua
Normal file
|
@ -0,0 +1 @@
|
|||
require('cosmic')
|
47
lua/cosmic/core/file-explorer/init.lua
Normal file
47
lua/cosmic/core/file-explorer/init.lua
Normal file
|
@ -0,0 +1,47 @@
|
|||
local g = vim.g
|
||||
local icons = require('cosmic.core.theme.icons')
|
||||
local M = {}
|
||||
|
||||
function M.init()
|
||||
-- settings
|
||||
g.nvim_tree_git_hl = 1
|
||||
g.nvim_tree_refresh_wait = 300
|
||||
|
||||
g.nvim_tree_special_files = {}
|
||||
g.nvim_tree_show_icons = {
|
||||
git = 1,
|
||||
folders = 1,
|
||||
files = 1,
|
||||
folder_arrows = 1,
|
||||
}
|
||||
|
||||
g.nvim_tree_icons = {
|
||||
default = '',
|
||||
symlink = icons.symlink,
|
||||
git = icons.git,
|
||||
folder = icons.folder,
|
||||
|
||||
lsp = {
|
||||
hint = icons.hint,
|
||||
info = icons.info,
|
||||
warning = icons.warn,
|
||||
error = icons.error,
|
||||
},
|
||||
}
|
||||
|
||||
-- set up args
|
||||
local args = {
|
||||
auto_close = true,
|
||||
diagnostics = {
|
||||
enable = true,
|
||||
},
|
||||
update_focused_file = {
|
||||
enable = true,
|
||||
ignore_list = {},
|
||||
},
|
||||
}
|
||||
|
||||
require('nvim-tree').setup(args)
|
||||
end
|
||||
|
||||
return M
|
4
lua/cosmic/core/file-explorer/mappings.lua
Normal file
4
lua/cosmic/core/file-explorer/mappings.lua
Normal file
|
@ -0,0 +1,4 @@
|
|||
local map = require('cosmic.utils').map
|
||||
|
||||
map('n', '<C-n>', ':NvimTreeToggle<CR>', { noremap = true })
|
||||
map('n', '<leader>r', ':NvimTreeRefresh<CR>', { noremap = true })
|
123
lua/cosmic/core/file-navigation/init.lua
Normal file
123
lua/cosmic/core/file-navigation/init.lua
Normal file
|
@ -0,0 +1,123 @@
|
|||
local actions = require('telescope.actions')
|
||||
local mappings = require('cosmic.core.file-navigation.mappings').mappings()
|
||||
local icons = require('cosmic.core.theme.icons')
|
||||
|
||||
require('telescope').setup({
|
||||
defaults = {
|
||||
prompt_prefix = '🔍 ',
|
||||
selection_caret = icons.folder.arrow_closed,
|
||||
file_ignore_patterns = {
|
||||
'.git/',
|
||||
},
|
||||
vimgrep_arguments = {
|
||||
'rg',
|
||||
'--ignore',
|
||||
'--hidden',
|
||||
'--color=never',
|
||||
'--no-heading',
|
||||
'--with-filename',
|
||||
'--line-number',
|
||||
'--column',
|
||||
'--smart-case',
|
||||
},
|
||||
},
|
||||
extensions = {
|
||||
fzf = {
|
||||
fuzzy = true, -- false will only do exact matching
|
||||
override_generic_sorter = true, -- override the generic sorter
|
||||
override_file_sorter = true, -- override the file sorter
|
||||
case_mode = 'smart_case', -- or "ignore_case" or "respect_case"
|
||||
-- the default case_mode is "smart_case"
|
||||
},
|
||||
},
|
||||
pickers = {
|
||||
buffers = {
|
||||
prompt_title = '✨ Search Buffers ✨',
|
||||
mappings = {
|
||||
n = {
|
||||
['d'] = actions.delete_buffer,
|
||||
},
|
||||
},
|
||||
sort_mru = true,
|
||||
-- sort_lastused = true,
|
||||
preview_title = false,
|
||||
},
|
||||
lsp_references = {
|
||||
-- mappings = mappings.normal,
|
||||
initial_mode = 'normal',
|
||||
sorting_strategy = 'ascending',
|
||||
layout_strategy = 'cursor',
|
||||
preview_title = '',
|
||||
-- dynamic_preview_title = true,
|
||||
results_title = false,
|
||||
prompt_title = 'References',
|
||||
layout_config = {
|
||||
width = 0.4,
|
||||
height = 0.4,
|
||||
},
|
||||
},
|
||||
lsp_code_actions = {
|
||||
initial_mode = 'normal',
|
||||
sorting_strategy = 'ascending',
|
||||
layout_strategy = 'cursor',
|
||||
preview = false,
|
||||
prompt_title = 'Code Actions',
|
||||
results_title = '',
|
||||
layout_config = {
|
||||
width = 0.2,
|
||||
height = 0.3,
|
||||
},
|
||||
},
|
||||
lsp_range_code_actions = {
|
||||
initial_mode = 'normal',
|
||||
sorting_strategy = 'ascending',
|
||||
layout_strategy = 'cursor',
|
||||
preview = false,
|
||||
prompt_title = 'Code Actions',
|
||||
results_title = '',
|
||||
layout_config = {
|
||||
width = 0.3,
|
||||
height = 0.3,
|
||||
},
|
||||
},
|
||||
lsp_document_diagnostics = {
|
||||
initial_mode = 'normal',
|
||||
sorting_strategy = 'ascending',
|
||||
layout_strategy = 'cursor',
|
||||
prompt_title = 'Diagnostics',
|
||||
results_title = '',
|
||||
layout_config = {
|
||||
width = 0.5,
|
||||
height = 0.5,
|
||||
},
|
||||
mappings = mappings,
|
||||
},
|
||||
lsp_definitions = {
|
||||
layout_strategy = 'cursor',
|
||||
prompt_title = 'Definitions',
|
||||
preview_title = false,
|
||||
results_title = false,
|
||||
layout_config = {
|
||||
width = 0.5,
|
||||
height = 0.5,
|
||||
},
|
||||
mappings = mappings,
|
||||
},
|
||||
find_files = {
|
||||
prompt_title = '✨ Search Project ✨',
|
||||
mappings = mappings,
|
||||
hidden = true,
|
||||
},
|
||||
git_files = {
|
||||
prompt_title = '✨ Search Git Project ✨',
|
||||
mappings = mappings,
|
||||
hidden = true,
|
||||
},
|
||||
live_grep = {
|
||||
prompt_title = '✨ Live Grep ✨',
|
||||
mappings = mappings,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
require('telescope').load_extension('fzf')
|
30
lua/cosmic/core/file-navigation/mappings.lua
Normal file
30
lua/cosmic/core/file-navigation/mappings.lua
Normal file
|
@ -0,0 +1,30 @@
|
|||
local map = require('cosmic.utils').map
|
||||
local M = {}
|
||||
|
||||
function M.init()
|
||||
map('n', '<leader>p', ':Telescope find_files<CR>', { noremap = true })
|
||||
map('n', '<leader>f', ':Telescope git_files<CR>', { noremap = true })
|
||||
map('n', '<leader>k', ':Telescope buffers<CR>', { noremap = true })
|
||||
map('n', '<leader>s', ':Telescope live_grep<CR>', { noremap = true })
|
||||
map('n', '<leader>gc', ':Telescope git_commits<CR>', { noremap = true })
|
||||
map('n', '<leader>gs', ':Telescope git_status<CR>', { noremap = true })
|
||||
end
|
||||
|
||||
function M.mappings()
|
||||
local actions = require('telescope.actions')
|
||||
local normal = {
|
||||
n = {
|
||||
['Q'] = actions.smart_add_to_qflist + actions.open_qflist,
|
||||
['q'] = actions.smart_send_to_qflist + actions.open_qflist,
|
||||
['<tab>'] = actions.toggle_selection + actions.move_selection_next,
|
||||
['<s-tab>'] = actions.toggle_selection + actions.move_selection_previous,
|
||||
['v'] = actions.file_vsplit,
|
||||
['s'] = actions.file_split,
|
||||
['<cr>'] = actions.file_edit,
|
||||
},
|
||||
}
|
||||
|
||||
return normal
|
||||
end
|
||||
|
||||
return M
|
451
lua/cosmic/core/statusline/init.lua
Normal file
451
lua/cosmic/core/statusline/init.lua
Normal file
|
@ -0,0 +1,451 @@
|
|||
local galaxy = require('galaxyline')
|
||||
local gls = galaxy.section
|
||||
local diag = require('galaxyline.providers.diagnostic')
|
||||
local condition = require('galaxyline.condition')
|
||||
local fileinfo = require('galaxyline.providers.fileinfo')
|
||||
local utils = require('cosmic.utils')
|
||||
local colors = require('cosmic.core.theme.colors')
|
||||
local highlight = utils.highlight
|
||||
local icons = require('cosmic.core.theme.icons')
|
||||
|
||||
local get_mode = function()
|
||||
local mode_colors = {
|
||||
[110] = { 'NORMAL', colors.blue, colors.bg_highlight },
|
||||
[105] = { 'INSERT', colors.hint, colors.bg_highlight },
|
||||
[99] = { 'COMMAND', colors.orange, colors.bg_highlight },
|
||||
[116] = { 'TERMINAL', colors.blue, colors.bg_highlight },
|
||||
[118] = { 'VISUAL', colors.purple, colors.bg_highlight },
|
||||
[22] = { 'V-BLOCK', colors.purple, colors.bg_highlight },
|
||||
[86] = { 'V-LINE', colors.purple, colors.bg_highlight },
|
||||
[82] = { 'REPLACE', colors.red, colors.bg_highlight },
|
||||
[115] = { 'SELECT', colors.red, colors.bg_highlight },
|
||||
[83] = { 'S-LINE', colors.red, colors.bg_highlight },
|
||||
}
|
||||
|
||||
local mode_data = mode_colors[vim.fn.mode():byte()]
|
||||
if mode_data ~= nil then
|
||||
return mode_data
|
||||
end
|
||||
end
|
||||
|
||||
local check_width_and_git_and_buffer = function()
|
||||
return condition.check_git_workspace() and condition.buffer_not_empty()
|
||||
end
|
||||
|
||||
local check_git_and_width = function()
|
||||
return condition.buffer_not_empty() and condition.hide_in_width()
|
||||
end
|
||||
|
||||
local check_buffer_and_width = function()
|
||||
return condition.buffer_not_empty() and condition.hide_in_width()
|
||||
end
|
||||
|
||||
local FilePathShortProvider = function()
|
||||
local fp = vim.fn.fnamemodify(vim.fn.expand('%'), ':~:.:h')
|
||||
local tbl = utils.split(fp, '/')
|
||||
local len = #tbl
|
||||
|
||||
if len > 2 and tbl[1] ~= '~' then
|
||||
return icons.dotdotdot .. '/' .. table.concat(tbl, '/', len - 1) .. '/'
|
||||
else
|
||||
return fp .. '/'
|
||||
end
|
||||
end
|
||||
|
||||
local LineColumnProvider = function()
|
||||
local line_column = fileinfo.line_column()
|
||||
line_column = line_column:gsub('%s+', '')
|
||||
return ' ' .. icons.line_number .. line_column
|
||||
end
|
||||
|
||||
local PercentProvider = function()
|
||||
local line_column = fileinfo.current_line_percent()
|
||||
line_column = line_column:gsub('%s+', '')
|
||||
return line_column .. ' ☰'
|
||||
end
|
||||
|
||||
local BracketProvider = function(icon, cond)
|
||||
return function()
|
||||
local result
|
||||
|
||||
if cond == true or cond == false then
|
||||
result = cond
|
||||
else
|
||||
result = cond()
|
||||
end
|
||||
|
||||
if result ~= nil and result ~= '' then
|
||||
return icon
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
galaxy.short_line_list = {
|
||||
'packer',
|
||||
'NvimTree',
|
||||
'floaterm',
|
||||
'fugitive',
|
||||
'fugitiveblame',
|
||||
}
|
||||
|
||||
gls.left = {
|
||||
{
|
||||
GhostLeftBracket = {
|
||||
provider = BracketProvider(icons.rounded_left_filled, true),
|
||||
highlight = 'GalaxyViModeNestedInv',
|
||||
},
|
||||
},
|
||||
{
|
||||
Ghost = {
|
||||
provider = BracketProvider(icons.ghost, true),
|
||||
highlight = 'GalaxyViModeInv',
|
||||
},
|
||||
},
|
||||
{
|
||||
ViModeLeftBracket = {
|
||||
provider = BracketProvider(icons.rounded_right_filled, true),
|
||||
highlight = 'GalaxyViMode',
|
||||
},
|
||||
},
|
||||
{
|
||||
ViMode = {
|
||||
provider = function()
|
||||
local m = get_mode()
|
||||
if m == nil then
|
||||
return
|
||||
end
|
||||
|
||||
local label, mode_color, mode_nested = unpack(m)
|
||||
highlight('GalaxyViMode', mode_color, mode_nested)
|
||||
highlight('GalaxyViModeInv', mode_nested, mode_color)
|
||||
highlight('GalaxyViModeNested', mode_nested, colors.bg)
|
||||
highlight('GalaxyViModeNestedInv', colors.bg, mode_nested)
|
||||
highlight('GalaxyPercentBracket', colors.bg, mode_color)
|
||||
|
||||
highlight('GalaxyGitLCBracket', mode_nested, mode_color)
|
||||
|
||||
if condition.buffer_not_empty() then
|
||||
highlight('GalaxyViModeBracket', mode_nested, mode_color)
|
||||
else
|
||||
if condition.check_git_workspace() then
|
||||
highlight('GalaxyGitLCBracket', colors.bg, mode_color)
|
||||
end
|
||||
highlight('GalaxyViModeBracket', colors.bg, mode_color)
|
||||
end
|
||||
return ' ' .. label .. ' '
|
||||
end,
|
||||
},
|
||||
},
|
||||
{
|
||||
ViModeBracket = {
|
||||
provider = BracketProvider(icons.arrow_right_filled, true),
|
||||
highlight = 'GalaxyViModeBracket',
|
||||
},
|
||||
},
|
||||
{
|
||||
GitIcon = {
|
||||
provider = BracketProvider(' ' .. icons.branch .. ' ', true),
|
||||
condition = check_width_and_git_and_buffer,
|
||||
highlight = 'GalaxyViModeInv',
|
||||
},
|
||||
},
|
||||
{
|
||||
GitBranch = {
|
||||
provider = function()
|
||||
local vcs = require('galaxyline.providers.vcs')
|
||||
local branch_name = vcs.get_git_branch()
|
||||
if not branch_name then
|
||||
return ' no git '
|
||||
end
|
||||
if string.len(branch_name) > 28 then
|
||||
return string.sub(branch_name, 1, 25) .. icons.dotdotdot
|
||||
end
|
||||
return branch_name .. ' '
|
||||
end,
|
||||
condition = check_width_and_git_and_buffer,
|
||||
highlight = 'GalaxyViModeInv',
|
||||
separator = icons.arrow_right,
|
||||
separator_highlight = 'GalaxyViModeInv',
|
||||
},
|
||||
},
|
||||
{
|
||||
FileIcon = {
|
||||
provider = function()
|
||||
local icon = fileinfo.get_file_icon()
|
||||
if condition.check_git_workspace() then
|
||||
return ' ' .. icon
|
||||
end
|
||||
|
||||
return ' ' .. icon
|
||||
end,
|
||||
condition = condition.buffer_not_empty,
|
||||
highlight = 'GalaxyViModeInv',
|
||||
},
|
||||
},
|
||||
{
|
||||
FilePath = {
|
||||
provider = FilePathShortProvider,
|
||||
condition = check_buffer_and_width,
|
||||
highlight = 'GalaxyViModeInv',
|
||||
},
|
||||
},
|
||||
{
|
||||
FileName = {
|
||||
provider = 'FileName',
|
||||
condition = condition.buffer_not_empty,
|
||||
highlight = 'GalaxyViModeInv',
|
||||
separator = icons.arrow_right_filled,
|
||||
separator_highlight = 'GalaxyViModeNestedInv',
|
||||
},
|
||||
},
|
||||
{
|
||||
DiffAdd = {
|
||||
provider = 'DiffAdd',
|
||||
icon = ' ',
|
||||
condition = check_width_and_git_and_buffer,
|
||||
highlight = { colors.diffAdd, colors.bg },
|
||||
},
|
||||
},
|
||||
{
|
||||
DiffModified = {
|
||||
provider = 'DiffModified',
|
||||
condition = check_width_and_git_and_buffer,
|
||||
icon = ' ',
|
||||
highlight = { colors.diffModified, colors.bg },
|
||||
},
|
||||
},
|
||||
{
|
||||
DiffRemove = {
|
||||
provider = 'DiffRemove',
|
||||
condition = check_width_and_git_and_buffer,
|
||||
icon = ' ',
|
||||
highlight = { colors.diffDeleted, colors.bg },
|
||||
},
|
||||
},
|
||||
{
|
||||
WSpace = {
|
||||
provider = 'WhiteSpace',
|
||||
highlight = { colors.bg, colors.bg },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
gls.right = {
|
||||
{
|
||||
DiagnosticErrorLeftBracket = {
|
||||
provider = BracketProvider(icons.rounded_left_filled, diag.get_diagnostic_error),
|
||||
highlight = 'GalaxyDiagnosticErrorInv',
|
||||
condition = condition.buffer_not_empty,
|
||||
},
|
||||
},
|
||||
{
|
||||
DiagnosticError = {
|
||||
provider = function()
|
||||
local error_result = diag.get_diagnostic_error()
|
||||
highlight('GalaxyDiagnosticError', colors.error, colors.bg)
|
||||
highlight('GalaxyDiagnosticErrorInv', colors.bg, colors.error)
|
||||
|
||||
if error_result ~= '' and error_result ~= nil then
|
||||
return error_result
|
||||
end
|
||||
end,
|
||||
icon = icons.error .. ' ',
|
||||
highlight = 'GalaxyDiagnosticError',
|
||||
condition = condition.buffer_not_empty,
|
||||
},
|
||||
},
|
||||
{
|
||||
DiagnosticErrorRightBracket = {
|
||||
provider = {
|
||||
BracketProvider(icons.rounded_right_filled, diag.get_diagnostic_error),
|
||||
BracketProvider(' ', diag.get_diagnostic_error),
|
||||
},
|
||||
highlight = 'GalaxyDiagnosticErrorInv',
|
||||
condition = condition.buffer_not_empty,
|
||||
},
|
||||
},
|
||||
{
|
||||
DiagnosticWarnLeftBracket = {
|
||||
provider = BracketProvider(icons.rounded_left_filled, diag.get_diagnostic_warn),
|
||||
highlight = 'GalaxyDiagnosticWarnInv',
|
||||
condition = condition.buffer_not_empty,
|
||||
},
|
||||
},
|
||||
{
|
||||
DiagnosticWarn = {
|
||||
provider = function()
|
||||
local warn_result = diag.get_diagnostic_warn()
|
||||
highlight('GalaxyDiagnosticWarn', colors.warn, colors.bg)
|
||||
highlight('GalaxyDiagnosticWarnInv', colors.bg, colors.warn)
|
||||
|
||||
if warn_result ~= '' and warn_result ~= nil then
|
||||
return warn_result
|
||||
end
|
||||
end,
|
||||
highlight = 'GalaxyDiagnosticWarn',
|
||||
icon = icons.warn .. ' ',
|
||||
condition = condition.buffer_not_empty,
|
||||
},
|
||||
},
|
||||
{
|
||||
DiagnosticWarnRightBracket = {
|
||||
provider = {
|
||||
BracketProvider(icons.rounded_right_filled, diag.get_diagnostic_warn),
|
||||
BracketProvider(' ', diag.get_diagnostic_warn),
|
||||
},
|
||||
highlight = 'GalaxyDiagnosticWarnInv',
|
||||
condition = condition.buffer_not_empty,
|
||||
},
|
||||
},
|
||||
{
|
||||
DiagnosticInfoLeftBracket = {
|
||||
provider = BracketProvider(icons.rounded_left_filled, diag.get_diagnostic_info),
|
||||
highlight = 'GalaxyDiagnosticInfoInv',
|
||||
},
|
||||
},
|
||||
{
|
||||
DiagnosticInfo = {
|
||||
provider = function()
|
||||
local info_result = diag.get_diagnostic_info()
|
||||
highlight('GalaxyDiagnosticInfo', colors.info, colors.bg)
|
||||
highlight('GalaxyDiagnosticInfoInv', colors.bg, colors.info)
|
||||
|
||||
if info_result ~= '' and info_result ~= nil then
|
||||
return info_result
|
||||
end
|
||||
end,
|
||||
icon = icons.info .. ' ',
|
||||
highlight = 'GalaxyDiagnosticInfo',
|
||||
condition = check_width_and_git_and_buffer,
|
||||
},
|
||||
},
|
||||
{
|
||||
DiagnosticInfoRightBracket = {
|
||||
provider = {
|
||||
BracketProvider(icons.rounded_right_filled, diag.get_diagnostic_info),
|
||||
BracketProvider(' ', diag.get_diagnostic_info),
|
||||
},
|
||||
highlight = 'GalaxyDiagnosticInfoInv',
|
||||
condition = condition.buffer_not_empty,
|
||||
},
|
||||
},
|
||||
{
|
||||
GitBranchRightBracket = {
|
||||
provider = BracketProvider(icons.arrow_left_filled, true),
|
||||
condition = check_git_and_width,
|
||||
highlight = 'GalaxyViModeNestedInv',
|
||||
},
|
||||
},
|
||||
{
|
||||
GitRoot = {
|
||||
provider = utils.get_git_root,
|
||||
condition = check_git_and_width,
|
||||
icon = ' ' .. icons.file .. ' ',
|
||||
highlight = 'GalaxyViModeInv',
|
||||
},
|
||||
},
|
||||
{
|
||||
LineColumn = {
|
||||
provider = {
|
||||
LineColumnProvider,
|
||||
function()
|
||||
return ' '
|
||||
end,
|
||||
},
|
||||
highlight = 'GalaxyViMode',
|
||||
separator = icons.arrow_left_filled,
|
||||
separator_highlight = 'GalaxyGitLCBracket',
|
||||
},
|
||||
},
|
||||
{
|
||||
PerCent = {
|
||||
provider = {
|
||||
PercentProvider,
|
||||
},
|
||||
highlight = 'GalaxyViMode',
|
||||
separator = icons.arrow_left .. ' ',
|
||||
separator_highlight = 'GalaxyViModeLeftBracket',
|
||||
},
|
||||
},
|
||||
{
|
||||
PercentRightBracket = {
|
||||
provider = BracketProvider(icons.rounded_right_filled, true),
|
||||
highlight = 'GalaxyPercentBracket',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
gls.short_line_left = {
|
||||
{
|
||||
GhostLeftBracketShort = {
|
||||
provider = BracketProvider(icons.rounded_left_filled, true),
|
||||
highlight = { colors.white, colors.bg },
|
||||
},
|
||||
},
|
||||
{
|
||||
GhostShort = {
|
||||
provider = BracketProvider(icons.ghost, true),
|
||||
highlight = { colors.bg, colors.white },
|
||||
},
|
||||
},
|
||||
{
|
||||
GhostRightBracketShort = {
|
||||
provider = BracketProvider(icons.rounded_right_filled, true),
|
||||
highlight = { colors.white, colors.bg },
|
||||
},
|
||||
},
|
||||
{
|
||||
FileIconShort = {
|
||||
provider = {
|
||||
function()
|
||||
return ' '
|
||||
end,
|
||||
'FileIcon',
|
||||
},
|
||||
condition = condition.buffer_not_empty,
|
||||
highlight = {
|
||||
require('galaxyline.providers.fileinfo').get_file_icon,
|
||||
colors.bg,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FilePathShort = {
|
||||
provider = FilePathShortProvider,
|
||||
condition = condition.buffer_not_empty,
|
||||
highlight = { colors.white, colors.bg },
|
||||
},
|
||||
},
|
||||
{
|
||||
FileNameShort = {
|
||||
provider = 'FileName',
|
||||
condition = condition.buffer_not_empty,
|
||||
highlight = { colors.white, colors.bg },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
gls.short_line_right = {
|
||||
{
|
||||
GitRootShortLeftBracket = {
|
||||
provider = BracketProvider(icons.arrow_left_filled, true),
|
||||
condition = condition.buffer_not_empty,
|
||||
highlight = { colors.white, colors.bg },
|
||||
},
|
||||
},
|
||||
{
|
||||
GitRootShort = {
|
||||
provider = utils.get_git_root,
|
||||
condition = condition.buffer_not_empty,
|
||||
icon = ' ' .. icons.file .. ' ',
|
||||
highlight = { colors.bg, colors.white },
|
||||
},
|
||||
},
|
||||
{
|
||||
GitRootShortRightBracket = {
|
||||
provider = BracketProvider(icons.rounded_right_filled, true),
|
||||
condition = condition.buffer_not_empty,
|
||||
highlight = { colors.white, colors.bg },
|
||||
},
|
||||
},
|
||||
}
|
9
lua/cosmic/core/terminal/init.lua
Normal file
9
lua/cosmic/core/terminal/init.lua
Normal file
|
@ -0,0 +1,9 @@
|
|||
local colors = require('cosmic.core.theme.colors')
|
||||
local highlight = require('cosmic.utils').highlight
|
||||
local g = vim.g
|
||||
|
||||
g.floaterm_width = 0.8
|
||||
g.floaterm_height = 0.8
|
||||
g.floaterm_title = '|👾 ($1/$2)|'
|
||||
g.floaterm_opener = 'vsplit'
|
||||
highlight('FloatermBorder', 'None', colors.floatBorder)
|
8
lua/cosmic/core/terminal/mappings.lua
Normal file
8
lua/cosmic/core/terminal/mappings.lua
Normal file
|
@ -0,0 +1,8 @@
|
|||
local map = require('cosmic.utils').map
|
||||
|
||||
map('n', '<C-l>', ':FloatermToggle<CR>', { noremap = true })
|
||||
map('t', '<C-l>', [[<C-\><C-n>]], { noremap = true })
|
||||
map('t', '<C-w>l', [[<C-\><C-n>:FloatermNext<CR>]], { noremap = true })
|
||||
map('t', '<C-w>h', [[<C-\><C-n>:FloatermPrev<CR>]], { noremap = true })
|
||||
map('t', '<C-w>n', [[<C-\><C-n>:FloatermNew<CR>]], { noremap = true })
|
||||
map('t', '<C-w>c', [[<C-\><C-n>:FloatermKill<CR>]], { noremap = true })
|
22
lua/cosmic/core/theme/colors.lua
Normal file
22
lua/cosmic/core/theme/colors.lua
Normal file
|
@ -0,0 +1,22 @@
|
|||
local themeColors = require('tokyonight.colors').setup()
|
||||
|
||||
local colors = {
|
||||
white = themeColors.fg_dark,
|
||||
bg = themeColors.bg,
|
||||
bg_highlight = themeColors.bg_highlight,
|
||||
blue = themeColors.blue,
|
||||
purple = themeColors.magenta,
|
||||
orange = themeColors.orange,
|
||||
hint = themeColors.teal,
|
||||
red = themeColors.red,
|
||||
diffAdd = themeColors.git.add,
|
||||
diffModified = themeColors.git.change,
|
||||
diffDeleted = themeColors.git.delete,
|
||||
info = themeColors.green2,
|
||||
error = themeColors.magenta2,
|
||||
warn = themeColors.orange,
|
||||
floatBorder = themeColors.border_highlight,
|
||||
selection_caret = themeColors.purple,
|
||||
}
|
||||
|
||||
return colors
|
46
lua/cosmic/core/theme/highlights.lua
Normal file
46
lua/cosmic/core/theme/highlights.lua
Normal file
|
@ -0,0 +1,46 @@
|
|||
local colors = require('cosmic.core.theme.colors')
|
||||
local highlight = require('cosmic.utils').highlight
|
||||
local M = {}
|
||||
|
||||
function M.init()
|
||||
-- diagnostic colors
|
||||
-- sign colors
|
||||
highlight('LspDiagnosticsSignError', 'None', colors.error)
|
||||
highlight('LspDiagnosticsSignWarning', 'None', colors.warn)
|
||||
highlight('LspDiagnosticsSignInformation', 'None', colors.info)
|
||||
highlight('LspDiagnosticsSignHint', 'None', colors.hint)
|
||||
|
||||
--highlight('DiagnosticUnderlineError', 'None', colors.error)
|
||||
--highlight('DiagnosticUnderlineWarning', 'None', colors.warn)
|
||||
--highlight('DiagnosticUnderlineInformation', 'None', colors.info)
|
||||
--highlight('DiagnosticUnderlineHint', 'None', colors.hint)
|
||||
|
||||
-- legacy lsp colors
|
||||
highlight('LspDiagnosticsError', 'None', colors.error)
|
||||
highlight('LspDiagnosticsWarn', 'None', colors.warn)
|
||||
highlight('LspDiagnosticsInfo', 'None', colors.info)
|
||||
highlight('LspDiagnosticsHint', 'None', colors.hint)
|
||||
|
||||
highlight('DiagnosticError', 'None', colors.error)
|
||||
highlight('DiagnosticWarn', 'None', colors.warn)
|
||||
highlight('DiagnosticInfo', 'None', colors.info)
|
||||
highlight('DiagnosticHint', 'None', colors.hint)
|
||||
|
||||
highlight('Error', 'None', colors.error)
|
||||
highlight('ErrorMsg', 'None', colors.error)
|
||||
highlight('WarningMsg', 'None', colors.error)
|
||||
|
||||
-- signature highlight color
|
||||
highlight('LspSignatureActiveParameter', 'None', colors.orange)
|
||||
|
||||
-- currently not working
|
||||
highlight('TelescopeSelectionCaret', 'None', colors.selection_caret)
|
||||
|
||||
-- needs to highlight after lsp start, why? idk
|
||||
vim.cmd([[
|
||||
highlight clear NormalFloat
|
||||
highlight link NormalFloat Normal
|
||||
]])
|
||||
end
|
||||
|
||||
return M
|
40
lua/cosmic/core/theme/icons.lua
Normal file
40
lua/cosmic/core/theme/icons.lua
Normal file
|
@ -0,0 +1,40 @@
|
|||
local icons = {
|
||||
rounded_left_filled = '',
|
||||
rounded_right_filled = '',
|
||||
arrow_left_filled = '', -- e0b2
|
||||
arrow_right_filled = '', -- e0b0
|
||||
arrow_left = '', -- e0b3
|
||||
arrow_right = '', -- e0b1
|
||||
ghost = '',
|
||||
warn = '',
|
||||
info = '',
|
||||
error = '',
|
||||
hint = '',
|
||||
branch = '',
|
||||
file = '',
|
||||
dotdotdot = '…',
|
||||
information = '',
|
||||
symlink = '',
|
||||
line_number = '',
|
||||
git = {
|
||||
unstaged = '✗',
|
||||
staged = '✓',
|
||||
unmerged = '',
|
||||
renamed = '➜',
|
||||
untracked = '★',
|
||||
deleted = '',
|
||||
ignored = '◌',
|
||||
},
|
||||
folder = {
|
||||
arrow_open = '',
|
||||
arrow_closed = '',
|
||||
default = '',
|
||||
open = '',
|
||||
empty = '',
|
||||
empty_open = '',
|
||||
symlink = '',
|
||||
symlink_open = '',
|
||||
},
|
||||
}
|
||||
|
||||
return icons
|
58
lua/cosmic/core/theme/ui.lua
Normal file
58
lua/cosmic/core/theme/ui.lua
Normal file
|
@ -0,0 +1,58 @@
|
|||
local colors = require('cosmic.core.theme.colors')
|
||||
local icons = require('cosmic.core.theme.icons')
|
||||
local highlight = require('cosmic.utils').highlight
|
||||
local M = {}
|
||||
|
||||
local api = vim.api
|
||||
local lsp = vim.lsp
|
||||
local buf, win
|
||||
local prompt_str = ' ' .. icons.folder.arrow_closed .. ' '
|
||||
|
||||
function M.rename()
|
||||
local map_opts = { noremap = true, silent = true }
|
||||
local opts = {
|
||||
style = 'minimal',
|
||||
border = 'single',
|
||||
relative = 'cursor',
|
||||
width = 25,
|
||||
height = 1,
|
||||
row = 1,
|
||||
col = 1,
|
||||
}
|
||||
buf, win = api.nvim_create_buf(false, true)
|
||||
api.nvim_buf_set_option(buf, 'bufhidden', 'wipe')
|
||||
|
||||
api.nvim_open_win(buf, true, opts)
|
||||
api.nvim_win_set_option(win, 'scrolloff', 0)
|
||||
api.nvim_win_set_option(win, 'sidescrolloff', 0)
|
||||
api.nvim_buf_set_option(buf, 'modifiable', true)
|
||||
api.nvim_buf_set_option(buf, 'buftype', 'prompt')
|
||||
api.nvim_buf_add_highlight(buf, -1, "LspRenamePrompt", 0, 0, #prompt_str)
|
||||
highlight('LspRenamePrompt', 'None', colors.selection_caret)
|
||||
|
||||
vim.fn.prompt_setprompt(buf, prompt_str)
|
||||
|
||||
vim.api.nvim_command('startinsert!')
|
||||
api.nvim_buf_set_keymap(buf, 'i', '<esc>', '<CMD>stopinsert <BAR> q!<CR>', map_opts)
|
||||
api.nvim_buf_set_keymap(
|
||||
buf,
|
||||
'i',
|
||||
'<CR>',
|
||||
"<CMD>stopinsert <BAR> lua require('cosmic.core.theme.ui')._rename()<CR>",
|
||||
map_opts
|
||||
)
|
||||
|
||||
function M._rename()
|
||||
local newName = vim.trim(vim.fn.getline('.'):sub(5, -1))
|
||||
vim.cmd([[q!]])
|
||||
local params = lsp.util.make_position_params()
|
||||
local currName = vim.fn.expand('<cword>')
|
||||
if not (newName and #newName > 0) or newName == currName then
|
||||
return
|
||||
end
|
||||
params.newName = newName
|
||||
lsp.buf_request(0, 'textDocument/rename', params)
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
33
lua/cosmic/core/treesitter/init.lua
Normal file
33
lua/cosmic/core/treesitter/init.lua
Normal file
|
@ -0,0 +1,33 @@
|
|||
require('nvim-treesitter.configs').setup({
|
||||
ensure_installed = {
|
||||
'typescript',
|
||||
'javascript',
|
||||
'tsx',
|
||||
'html',
|
||||
'css',
|
||||
'bash',
|
||||
'lua',
|
||||
'json',
|
||||
'python',
|
||||
'php',
|
||||
'scss',
|
||||
'go',
|
||||
},
|
||||
highlight = {
|
||||
enable = true,
|
||||
use_languagetree = true,
|
||||
},
|
||||
indent = {
|
||||
enable = true,
|
||||
},
|
||||
autotag = {
|
||||
enable = true,
|
||||
},
|
||||
context_commentstring = {
|
||||
enable = true,
|
||||
},
|
||||
refactor = {
|
||||
highlight_definitions = { enable = true },
|
||||
highlight_current_scope = { enable = false },
|
||||
},
|
||||
})
|
24
lua/cosmic/disabled.lua
Normal file
24
lua/cosmic/disabled.lua
Normal file
|
@ -0,0 +1,24 @@
|
|||
local disabled_built_ins = {
|
||||
'netrw',
|
||||
'netrwPlugin',
|
||||
'netrwSettings',
|
||||
'netrwFileHandlers',
|
||||
'gzip',
|
||||
'zip',
|
||||
'zipPlugin',
|
||||
'tar',
|
||||
'tarPlugin',
|
||||
'getscript',
|
||||
'getscriptPlugin',
|
||||
'vimball',
|
||||
'vimballPlugin',
|
||||
'2html_plugin',
|
||||
'logipat',
|
||||
'rrhelper',
|
||||
'spellfile_plugin',
|
||||
'matchit',
|
||||
}
|
||||
|
||||
for _, plugin in pairs(disabled_built_ins) do
|
||||
vim.g['loaded_' .. plugin] = 1
|
||||
end
|
75
lua/cosmic/editor.lua
Normal file
75
lua/cosmic/editor.lua
Normal file
|
@ -0,0 +1,75 @@
|
|||
local cmd = vim.cmd
|
||||
local opt = vim.opt
|
||||
local indent = 2
|
||||
|
||||
cmd([[
|
||||
filetype plugin indent on
|
||||
autocmd BufWritePre * :%s/\s\+$//e
|
||||
]])
|
||||
|
||||
-- misc
|
||||
opt.syntax = 'enable'
|
||||
opt.hidden = true
|
||||
opt.encoding = 'utf-8'
|
||||
opt.clipboard = 'unnamedplus'
|
||||
opt.backspace = { 'eol', 'start', 'indent' }
|
||||
opt.matchpairs = { '(:)', '{:}', '[:]', '<:>' }
|
||||
|
||||
-- indention
|
||||
opt.autoindent = true
|
||||
opt.smartindent = true
|
||||
|
||||
-- tabs
|
||||
opt.tabstop = indent
|
||||
opt.softtabstop = indent
|
||||
opt.shiftwidth = indent
|
||||
opt.expandtab = true
|
||||
|
||||
-- search
|
||||
opt.wildmenu = true
|
||||
opt.ignorecase = true
|
||||
opt.smartcase = true
|
||||
opt.wildignore = opt.wildignore + { '*/node_modules/*', '*/wp-includes/*', '*/wp-admin/*', '*/vendor/*' }
|
||||
opt.hlsearch = false
|
||||
|
||||
-- ui
|
||||
opt.number = true
|
||||
opt.rnu = true
|
||||
opt.cursorline = true
|
||||
opt.signcolumn = 'yes'
|
||||
opt.laststatus = 2
|
||||
opt.wrap = false
|
||||
opt.scrolloff = 18
|
||||
opt.sidescrolloff = 3 -- Lines to scroll horizontally
|
||||
opt.list = true
|
||||
opt.listchars = {
|
||||
tab = '❘-',
|
||||
trail = '·',
|
||||
lead = '·',
|
||||
extends = '»',
|
||||
precedes = '«',
|
||||
nbsp = '×',
|
||||
}
|
||||
opt.showmode = false
|
||||
opt.lazyredraw = true
|
||||
opt.mouse = 'a'
|
||||
opt.splitright = true -- Open new split to the right
|
||||
opt.splitbelow = true -- Open new split below
|
||||
|
||||
-- backups
|
||||
opt.swapfile = false
|
||||
opt.backup = false
|
||||
opt.writebackup = false
|
||||
|
||||
-- autocomplete
|
||||
opt.completeopt = { 'menu', 'menuone', 'noselect' }
|
||||
opt.shortmess = opt.shortmess + { c = true }
|
||||
|
||||
-- perfomance
|
||||
opt.updatetime = 100
|
||||
opt.timeoutlen = 400
|
||||
opt.redrawtime = 1500
|
||||
opt.ttimeoutlen = 10
|
||||
|
||||
-- theme
|
||||
opt.termguicolors = true
|
5
lua/cosmic/init.lua
Normal file
5
lua/cosmic/init.lua
Normal file
|
@ -0,0 +1,5 @@
|
|||
require('cosmic.compiled')
|
||||
require('cosmic.disabled')
|
||||
require('cosmic.pluginsInit')
|
||||
require('cosmic.mappings')
|
||||
require('cosmic.editor')
|
77
lua/cosmic/lsp/autocomplete.lua
Normal file
77
lua/cosmic/lsp/autocomplete.lua
Normal file
|
@ -0,0 +1,77 @@
|
|||
local cmp = require('cmp')
|
||||
|
||||
vim.cmd([[
|
||||
autocmd FileType TelescopePrompt lua require('cmp').setup.buffer { enabled = false }
|
||||
]])
|
||||
|
||||
cmp.setup({
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
require'luasnip'.lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
mapping = {
|
||||
['<C-d>'] = cmp.mapping.scroll_docs(-4),
|
||||
['<C-u>'] = cmp.mapping.scroll_docs(4),
|
||||
['<C-Space>'] = cmp.mapping.complete(),
|
||||
['<C-e>'] = cmp.mapping.close(),
|
||||
['<CR>'] = cmp.mapping.confirm({
|
||||
behavior = cmp.ConfirmBehavior.Replace,
|
||||
select = true,
|
||||
}),
|
||||
['<Tab>'] = function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end,
|
||||
['<S-Tab>'] = function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end,
|
||||
},
|
||||
documentation = {
|
||||
border = 'single',
|
||||
winhighlight = 'FloatBorder:FloatBorder,Normal:Normal',
|
||||
},
|
||||
experimental = {
|
||||
ghost_text = true,
|
||||
},
|
||||
sources = {
|
||||
{ name = 'nvim_lsp' },
|
||||
{ name = 'buffer' },
|
||||
{ name = 'luasnip' },
|
||||
{ name = 'nvim_lua' },
|
||||
{ name = 'path' },
|
||||
},
|
||||
formatting = {
|
||||
format = require('lspkind').cmp_format({
|
||||
with_text = true,
|
||||
menu = {
|
||||
nvim_lsp = '[LSP]',
|
||||
buffer = '[Buf]',
|
||||
luasnip = '[LSnip]',
|
||||
nvim_lua = '[Lua]',
|
||||
},
|
||||
}),
|
||||
},
|
||||
})
|
||||
|
||||
require('nvim-autopairs').setup({
|
||||
disable_filetype = { 'TelescopePrompt', 'vim' },
|
||||
})
|
||||
|
||||
require('nvim-autopairs.completion.cmp').setup({
|
||||
map_cr = true, -- map <CR> on insert mode
|
||||
map_complete = true, -- it will auto insert `(` (map_char) after select function or method item
|
||||
auto_select = true, -- automatically select the first item
|
||||
insert = false, -- use insert confirm behavior instead of replace
|
||||
map_char = { -- modifies the function or method delimiter by filetypes
|
||||
all = '(',
|
||||
tex = '{',
|
||||
},
|
||||
})
|
67
lua/cosmic/lsp/diagnostics.lua
Normal file
67
lua/cosmic/lsp/diagnostics.lua
Normal file
|
@ -0,0 +1,67 @@
|
|||
local icons = require('cosmic.core.theme.icons')
|
||||
local M = {}
|
||||
|
||||
function M.init()
|
||||
vim.diagnostic.config({
|
||||
underline = true,
|
||||
update_in_insert = false,
|
||||
virtual_text = {
|
||||
spacing = 4,
|
||||
source = 'always',
|
||||
-- severity = 'error'
|
||||
-- prefix = '👾',
|
||||
},
|
||||
signs = true,
|
||||
severity_sort = true,
|
||||
})
|
||||
|
||||
local function do_diagnostic_signs()
|
||||
local signs = {
|
||||
Error = icons.error .. ' ',
|
||||
Warn = icons.warn .. ' ',
|
||||
Hint = icons.hint .. ' ',
|
||||
Info = icons.info .. ' ',
|
||||
}
|
||||
|
||||
local t = vim.fn.sign_getdefined('DiagnosticSignWarn')
|
||||
if vim.tbl_isempty(t) then
|
||||
for type, icon in pairs(signs) do
|
||||
local hl = 'DiagnosticSign' .. type
|
||||
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = '' })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function do_legacy_diagnostic_signs()
|
||||
local signs = {
|
||||
Error = icons.error .. ' ',
|
||||
Warning = icons.warn .. ' ',
|
||||
Hint = icons.hint .. ' ',
|
||||
Information = icons.info .. ' ',
|
||||
}
|
||||
local h = vim.fn.sign_getdefined('LspDiagnosticsSignWarn')
|
||||
if vim.tbl_isempty(h) then
|
||||
for type, icon in pairs(signs) do
|
||||
local hl = 'LspDiagnosticsSign' .. type
|
||||
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = '' })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
do_diagnostic_signs()
|
||||
do_legacy_diagnostic_signs()
|
||||
end
|
||||
|
||||
function M.trouble()
|
||||
require('trouble').setup({
|
||||
mode = 'lsp_document_diagnostics', -- "lsp_workspace_diagnostics", "lsp_document_diagnostics", "quickfix", "lsp_references", "loclist"
|
||||
signs = {
|
||||
error = icons.error .. ' ',
|
||||
warning = icons.warn .. ' ',
|
||||
hint = icons.hint .. ' ',
|
||||
information = icons.info .. ' ',
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
return M
|
7
lua/cosmic/lsp/init.lua
Normal file
7
lua/cosmic/lsp/init.lua
Normal file
|
@ -0,0 +1,7 @@
|
|||
require('cosmic.lsp.providers')
|
||||
require('cosmic.lsp.diagnostics').init()
|
||||
|
||||
vim.lsp.handlers['textDocument/signatureHelp'] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = 'single' })
|
||||
vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(vim.lsp.handlers.hover, {
|
||||
border = 'single',
|
||||
})
|
31
lua/cosmic/lsp/mappings.lua
Normal file
31
lua/cosmic/lsp/mappings.lua
Normal file
|
@ -0,0 +1,31 @@
|
|||
local map = require('cosmic.utils').map
|
||||
|
||||
-- Mappings.
|
||||
local opts = { noremap = true, silent = true }
|
||||
local popup_opts = '{ border = "single", focusable = false, }'
|
||||
local win_opts = '{ popup_opts = ' .. popup_opts .. '}'
|
||||
|
||||
-- See `:help vim.lsp.*` for documentation on any of the below functions
|
||||
map('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
|
||||
map('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
|
||||
map('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
|
||||
map('n', 'gt', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
|
||||
map('n', 'gr', '<cmd>lua require("telescope.builtin").lsp_references()<CR>', opts)
|
||||
map('n', 'gn', '<cmd>lua require("cosmic.core.theme.ui").rename()<CR>', opts)
|
||||
map('n', '[g', '<cmd>lua vim.lsp.diagnostic.goto_prev(' .. win_opts .. ')<CR>', opts)
|
||||
map('n', ']g', '<cmd>lua vim.lsp.diagnostic.goto_next(' .. win_opts .. ')<CR>', opts)
|
||||
map('n', 'ge', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics(' .. popup_opts .. ')<CR>', opts)
|
||||
map('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
|
||||
map('n', '<space>ga', '<cmd>lua require("telescope.builtin").lsp_code_actions()<CR>', opts)
|
||||
map('v', '<space>ga', '<cmd>lua require("telescope.builtin").lsp_range_code_actions()<CR>', opts)
|
||||
map('n', '<space>gf', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts)
|
||||
map('n', '<C-k>', '<cmd>lua require("lsp_signature").signature()<CR>', opts)
|
||||
|
||||
map('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
|
||||
map('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
|
||||
map('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
|
||||
|
||||
-- no default maps, so you may want to define some here
|
||||
map('n', '<space>gr', ':TSLspRenameFile<CR>', opts)
|
||||
map('n', '<space>go', ':TSLspOrganize<CR>', opts)
|
||||
map('n', '<space>gi', ':TSLspImportAll<CR>', opts)
|
51
lua/cosmic/lsp/providers/defaults.lua
Normal file
51
lua/cosmic/lsp/providers/defaults.lua
Normal file
|
@ -0,0 +1,51 @@
|
|||
local M = {}
|
||||
|
||||
function M.on_attach(client, bufnr)
|
||||
local function buf_set_option(...)
|
||||
vim.api.nvim_buf_set_option(bufnr, ...)
|
||||
end
|
||||
|
||||
-- Enable completion triggered by <c-x><c-o>
|
||||
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
|
||||
|
||||
require('cosmic.lsp.mappings')
|
||||
|
||||
-- So that the only client with format capabilities is efm
|
||||
if client.name ~= 'efm' then
|
||||
client.resolved_capabilities.document_formatting = false
|
||||
client.resolved_capabilities.document_range_formatting = false
|
||||
end
|
||||
|
||||
-- need to set eslint formatting manually
|
||||
if client.name == 'eslint' then
|
||||
client.resolved_capabilities.document_formatting = true
|
||||
client.resolved_capabilities.document_range_formatting = true
|
||||
end
|
||||
|
||||
require('lsp_signature').on_attach({
|
||||
bind = true, -- This is mandatory, otherwise border config won't get registered.
|
||||
handler_opts = {
|
||||
border = 'single',
|
||||
},
|
||||
}, bufnr)
|
||||
|
||||
-- for some reason, highlights have to happen here
|
||||
require('cosmic.core.theme.highlights').init()
|
||||
end
|
||||
|
||||
M.flags = {
|
||||
debounce_text_changes = 150,
|
||||
}
|
||||
|
||||
M.capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities())
|
||||
|
||||
M.root_dir = function(fname)
|
||||
local util = require('lspconfig').util
|
||||
return util.root_pattern('.git')(fname)
|
||||
or util.root_pattern('tsconfig.base.json')(fname)
|
||||
or util.root_pattern('package.json')(fname)
|
||||
or util.root_pattern('.eslintrc.js')(fname)
|
||||
or util.root_pattern('tsconfig.json')(fname)
|
||||
end
|
||||
|
||||
return M
|
39
lua/cosmic/lsp/providers/efm.lua
Normal file
39
lua/cosmic/lsp/providers/efm.lua
Normal file
|
@ -0,0 +1,39 @@
|
|||
local util = require('lspconfig').util
|
||||
|
||||
local stylua = {
|
||||
formatCommand = 'stylua -s --quote-style AutoPreferSingle --indent-type Spaces --indent-width 2 -',
|
||||
formatStdin = true,
|
||||
}
|
||||
|
||||
local prettier = {
|
||||
-- formatCommand = 'prettier --stdin-filepath ${INPUT}',
|
||||
formatCommand = 'prettierd "${INPUT}"',
|
||||
formatStdin = true,
|
||||
}
|
||||
|
||||
local filetypes = {
|
||||
css = { prettier },
|
||||
html = { prettier },
|
||||
lua = { stylua },
|
||||
javascript = { prettier },
|
||||
javascriptreact = { prettier },
|
||||
json = { prettier },
|
||||
markdown = { prettier },
|
||||
scss = { prettier },
|
||||
typescript = { prettier },
|
||||
typescriptreact = { prettier },
|
||||
yaml = { prettier },
|
||||
}
|
||||
|
||||
return {
|
||||
init_options = { documentFormatting = true, codeAction = true },
|
||||
root_dir = function(fname)
|
||||
return util.root_pattern('.git')(fname)
|
||||
or util.root_pattern('tsconfig.base.json')(fname)
|
||||
or util.root_pattern('package.json')(fname)
|
||||
or util.root_pattern('.eslintrc.js')(fname)
|
||||
or util.root_pattern('tsconfig.json')(fname)
|
||||
end,
|
||||
filetypes = vim.tbl_keys(filetypes),
|
||||
settings = { languages = filetypes },
|
||||
}
|
15
lua/cosmic/lsp/providers/eslint.lua
Normal file
15
lua/cosmic/lsp/providers/eslint.lua
Normal file
|
@ -0,0 +1,15 @@
|
|||
local util = require('lspconfig').util
|
||||
|
||||
return {
|
||||
settings = {
|
||||
packageManager = 'yarn',
|
||||
format = true,
|
||||
},
|
||||
root_dir = function(fname)
|
||||
return util.root_pattern('.git')(fname)
|
||||
or util.root_pattern('tsconfig.base.json')(fname)
|
||||
or util.root_pattern('package.json')(fname)
|
||||
or util.root_pattern('.eslintrc.js')(fname)
|
||||
or util.root_pattern('tsconfig.json')(fname)
|
||||
end,
|
||||
}
|
42
lua/cosmic/lsp/providers/init.lua
Normal file
42
lua/cosmic/lsp/providers/init.lua
Normal file
|
@ -0,0 +1,42 @@
|
|||
local default_config = require('cosmic.lsp.providers.defaults')
|
||||
local lsp_installer = require('nvim-lsp-installer')
|
||||
|
||||
lsp_installer.settings({
|
||||
ui = {
|
||||
keymaps = {
|
||||
-- Keymap to expand a server in the UI
|
||||
toggle_server_expand = 'i',
|
||||
-- Keymap to install a server
|
||||
install_server = '<CR>',
|
||||
-- Keymap to reinstall/update a server
|
||||
update_server = 'u',
|
||||
-- Keymap to uninstall a server
|
||||
uninstall_server = 'x',
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
lsp_installer.on_server_ready(function(server)
|
||||
local opts = default_config
|
||||
|
||||
if server.name == 'sumneko_lua' then
|
||||
local config = require('cosmic.lsp.providers.lua')
|
||||
opts = vim.tbl_deep_extend('force', opts, config)
|
||||
elseif server.name == 'tsserver' then
|
||||
local config = require('cosmic.lsp.providers.tsserver')
|
||||
opts = vim.tbl_deep_extend('force', opts, config)
|
||||
elseif server.name == 'efm' then
|
||||
local config = require('cosmic.lsp.providers.efm')
|
||||
opts = vim.tbl_deep_extend('force', opts, config)
|
||||
elseif server.name == 'jsonls' then
|
||||
local config = require('cosmic.lsp.providers.jsonls')
|
||||
opts = vim.tbl_deep_extend('force', opts, config)
|
||||
elseif server.name == 'eslint' then
|
||||
local config = require('cosmic.lsp.providers.eslint')
|
||||
opts = vim.tbl_deep_extend('force', opts, config)
|
||||
end
|
||||
|
||||
-- This setup() function is exactly the same as lspconfig's setup function (:help lspconfig-quickstart)
|
||||
server:setup(opts)
|
||||
vim.cmd([[ do User LspAttachBuffers ]])
|
||||
end)
|
49
lua/cosmic/lsp/providers/jsonls.lua
Normal file
49
lua/cosmic/lsp/providers/jsonls.lua
Normal file
|
@ -0,0 +1,49 @@
|
|||
return {
|
||||
settings = {
|
||||
json = {
|
||||
-- Schemas https://www.schemastore.org
|
||||
schemas = {
|
||||
{
|
||||
fileMatch = { 'package.json' },
|
||||
url = 'https://json.schemastore.org/package.json',
|
||||
},
|
||||
{
|
||||
fileMatch = { 'tsconfig*.json' },
|
||||
url = 'https://json.schemastore.org/tsconfig.json',
|
||||
},
|
||||
{
|
||||
fileMatch = {
|
||||
'.prettierrc',
|
||||
'.prettierrc.json',
|
||||
'prettier.config.json',
|
||||
},
|
||||
url = 'https://json.schemastore.org/prettierrc.json',
|
||||
},
|
||||
{
|
||||
fileMatch = { '.eslintrc', '.eslintrc.json' },
|
||||
url = 'https://json.schemastore.org/eslintrc.json',
|
||||
},
|
||||
{
|
||||
fileMatch = { '.babelrc', '.babelrc.json', 'babel.config.json' },
|
||||
url = 'https://json.schemastore.org/babelrc.json',
|
||||
},
|
||||
{
|
||||
fileMatch = { 'lerna.json' },
|
||||
url = 'https://json.schemastore.org/lerna.json',
|
||||
},
|
||||
{
|
||||
fileMatch = { 'now.json', 'vercel.json' },
|
||||
url = 'https://json.schemastore.org/now.json',
|
||||
},
|
||||
{
|
||||
fileMatch = {
|
||||
'.stylelintrc',
|
||||
'.stylelintrc.json',
|
||||
'stylelint.config.json',
|
||||
},
|
||||
url = 'http://json.schemastore.org/stylelintrc.json',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
32
lua/cosmic/lsp/providers/lua.lua
Normal file
32
lua/cosmic/lsp/providers/lua.lua
Normal file
|
@ -0,0 +1,32 @@
|
|||
local sumneko_binary_path = vim.fn.exepath('lua-language-server')
|
||||
local sumneko_root_path = vim.fn.fnamemodify(sumneko_binary_path, ':h:h:h')
|
||||
|
||||
local runtime_path = vim.split(package.path, ';')
|
||||
table.insert(runtime_path, 'lua/?.lua')
|
||||
table.insert(runtime_path, 'lua/?/init.lua')
|
||||
|
||||
return {
|
||||
cmd = { sumneko_binary_path, '-E', sumneko_root_path .. '/main.lua' },
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = {
|
||||
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
|
||||
version = 'LuaJIT',
|
||||
-- Setup your lua path
|
||||
path = runtime_path,
|
||||
},
|
||||
diagnostics = {
|
||||
-- Get the language server to recognize the `vim` global
|
||||
globals = { 'vim' },
|
||||
},
|
||||
workspace = {
|
||||
-- Make the server aware of Neovim runtime files
|
||||
library = vim.api.nvim_get_runtime_file('', true),
|
||||
},
|
||||
-- Do not send telemetry data containing a randomized but unique identifier
|
||||
telemetry = {
|
||||
enable = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
52
lua/cosmic/lsp/providers/tsserver.lua
Normal file
52
lua/cosmic/lsp/providers/tsserver.lua
Normal file
|
@ -0,0 +1,52 @@
|
|||
local default_on_attach = require('cosmic.lsp.providers.defaults').on_attach
|
||||
local M = {}
|
||||
|
||||
function M.on_attach(client, bufnr)
|
||||
default_on_attach(client, bufnr)
|
||||
|
||||
local ts_utils = require('nvim-lsp-ts-utils')
|
||||
|
||||
-- defaults
|
||||
ts_utils.setup({
|
||||
debug = false,
|
||||
disable_commands = false,
|
||||
enable_import_on_completion = true,
|
||||
|
||||
-- import all
|
||||
import_all_timeout = 5000, -- ms
|
||||
import_all_priorities = {
|
||||
buffers = 4, -- loaded buffer names
|
||||
buffer_content = 3, -- loaded buffer content
|
||||
local_files = 2, -- git files or files with relative path markers
|
||||
same_file = 1, -- add to existing import statement
|
||||
},
|
||||
import_all_scan_buffers = 100,
|
||||
import_all_select_source = false,
|
||||
|
||||
-- eslint
|
||||
eslint_enable_code_actions = false,
|
||||
eslint_enable_disable_comments = false,
|
||||
eslint_bin = 'eslint_d',
|
||||
eslint_enable_diagnostics = false,
|
||||
eslint_opts = {},
|
||||
|
||||
-- formatting
|
||||
enable_formatting = false,
|
||||
formatter = 'prettierd',
|
||||
formatter_opts = {},
|
||||
|
||||
-- update imports on file move
|
||||
update_imports_on_move = true,
|
||||
require_confirmation_on_move = false,
|
||||
watch_dir = nil,
|
||||
|
||||
-- filter diagnostics
|
||||
filter_out_diagnostics_by_severity = {},
|
||||
filter_out_diagnostics_by_code = {},
|
||||
})
|
||||
|
||||
-- required to fix code action ranges and filter diagnostics
|
||||
ts_utils.setup_client(client)
|
||||
end
|
||||
|
||||
return M
|
14
lua/cosmic/mappings.lua
Normal file
14
lua/cosmic/mappings.lua
Normal file
|
@ -0,0 +1,14 @@
|
|||
local g = vim.g
|
||||
local map = require('cosmic.utils').map
|
||||
|
||||
g.mapleader = ' '
|
||||
|
||||
-- Quickfix
|
||||
map('n', '<leader>ck', ':cexpr []<CR>', { noremap = true })
|
||||
map('n', '<leader>cc', ':cclose <CR>', { noremap = true })
|
||||
map('n', '<leader>co', ':copen <CR>', { noremap = true })
|
||||
map('n', '<leader>cf', ':cfdo %s/', { noremap = true })
|
||||
|
||||
require('cosmic.core.file-navigation.mappings').init()
|
||||
require('cosmic.core.file-explorer.mappings')
|
||||
require('cosmic.core.terminal.mappings')
|
47
lua/cosmic/packer.lua
Normal file
47
lua/cosmic/packer.lua
Normal file
|
@ -0,0 +1,47 @@
|
|||
local cmd = vim.cmd
|
||||
|
||||
cmd('packadd packer.nvim')
|
||||
|
||||
local present, packer = pcall(require, 'packer')
|
||||
|
||||
if not present then
|
||||
local packer_path = vim.fn.stdpath('data') .. '/site/pack/packer/opt/packer.nvim'
|
||||
|
||||
print('Cloning packer..')
|
||||
-- remove the dir before cloning
|
||||
vim.fn.delete(packer_path, 'rf')
|
||||
vim.fn.system({
|
||||
'git',
|
||||
'clone',
|
||||
'https://github.com/wbthomason/packer.nvim',
|
||||
'--depth',
|
||||
'20',
|
||||
packer_path,
|
||||
})
|
||||
|
||||
cmd('packadd packer.nvim')
|
||||
present, packer = pcall(require, 'packer')
|
||||
|
||||
if present then
|
||||
print('Packer cloned successfully.')
|
||||
else
|
||||
error("Couldn't clone packer !\nPacker path: " .. packer_path .. '\n' .. packer)
|
||||
end
|
||||
end
|
||||
|
||||
packer.init({
|
||||
display = {
|
||||
open_fn = function()
|
||||
return require('packer.util').float({ border = 'single' })
|
||||
end,
|
||||
prompt_border = 'single',
|
||||
},
|
||||
git = {
|
||||
clone_timeout = 800, -- Timeout, in seconds, for git clones
|
||||
},
|
||||
compile_path = vim.fn.stdpath('config')..'/lua/cosmic/compiled.lua',
|
||||
auto_clean = true,
|
||||
compile_on_sync = true,
|
||||
})
|
||||
|
||||
return packer
|
193
lua/cosmic/pluginsInit.lua
Normal file
193
lua/cosmic/pluginsInit.lua
Normal file
|
@ -0,0 +1,193 @@
|
|||
local present, packer = pcall(require, "cosmic.packer")
|
||||
|
||||
if not present then
|
||||
return false
|
||||
end
|
||||
|
||||
local use = packer.use
|
||||
|
||||
return packer.startup(function()
|
||||
use('wbthomason/packer.nvim')
|
||||
|
||||
use({
|
||||
'lewis6991/impatient.nvim',
|
||||
config = function()
|
||||
require('impatient')
|
||||
end
|
||||
})
|
||||
|
||||
use({ -- color scheme
|
||||
'folke/tokyonight.nvim',
|
||||
config = function()
|
||||
vim.g.tokyonight_style = 'night'
|
||||
vim.g.tokyonight_sidebars = { 'qf', 'packer' }
|
||||
vim.cmd('color tokyonight')
|
||||
end,
|
||||
})
|
||||
|
||||
use({ -- icons
|
||||
'kyazdani42/nvim-web-devicons',
|
||||
after = 'tokyonight.nvim',
|
||||
})
|
||||
|
||||
-- theme stuff
|
||||
use({ -- statusline
|
||||
'NTBBloodbath/galaxyline.nvim',
|
||||
branch = 'main',
|
||||
requires = { 'kyazdani42/nvim-web-devicons', opt = true },
|
||||
config = function()
|
||||
require('cosmic.core.statusline')
|
||||
end,
|
||||
after = 'nvim-web-devicons',
|
||||
})
|
||||
|
||||
-- file explorer
|
||||
use({
|
||||
'kyazdani42/nvim-tree.lua',
|
||||
config = function()
|
||||
require('cosmic.core.file-explorer').init()
|
||||
end,
|
||||
opt = true,
|
||||
cmd = {
|
||||
'NvimTreeClipboard',
|
||||
'NvimTreeClose',
|
||||
'NvimTreeFindFile',
|
||||
'NvimTreeOpen',
|
||||
'NvimTreeRefresh',
|
||||
'NvimTreeToggle',
|
||||
},
|
||||
})
|
||||
|
||||
use({ -- lsp
|
||||
'williamboman/nvim-lsp-installer',
|
||||
requires = {
|
||||
'neovim/nvim-lspconfig',
|
||||
'ray-x/lsp_signature.nvim',
|
||||
'jose-elias-alvarez/nvim-lsp-ts-utils',
|
||||
},
|
||||
config = function()
|
||||
require('cosmic.lsp')
|
||||
end,
|
||||
})
|
||||
|
||||
-- autocompletion
|
||||
use({
|
||||
'hrsh7th/nvim-cmp',
|
||||
config = function()
|
||||
require('cosmic.lsp.autocomplete')
|
||||
end,
|
||||
requires = {
|
||||
'hrsh7th/cmp-nvim-lsp',
|
||||
'hrsh7th/cmp-buffer',
|
||||
'hrsh7th/cmp-path',
|
||||
'hrsh7th/nvim-cmp',
|
||||
'L3MON4D3/LuaSnip',
|
||||
'saadparwaiz1/cmp_luasnip',
|
||||
'windwp/nvim-autopairs',
|
||||
'onsails/lspkind-nvim',
|
||||
},
|
||||
})
|
||||
|
||||
-- diagnostics
|
||||
use({
|
||||
'folke/trouble.nvim',
|
||||
opt = true,
|
||||
config = function()
|
||||
require('cosmic.lsp.diagnostics').trouble()
|
||||
end,
|
||||
cmd = {
|
||||
'Trouble',
|
||||
'TroubleClose',
|
||||
'TroubleToggle',
|
||||
'TroubleRefresh',
|
||||
},
|
||||
})
|
||||
|
||||
-- git commands
|
||||
use({
|
||||
'tpope/vim-fugitive',
|
||||
opt = true,
|
||||
cmd = 'Git',
|
||||
})
|
||||
|
||||
-- git column signs
|
||||
use({
|
||||
'lewis6991/gitsigns.nvim',
|
||||
requires = { 'nvim-lua/plenary.nvim' },
|
||||
event = 'BufRead',
|
||||
config = function()
|
||||
require('gitsigns').setup()
|
||||
end,
|
||||
})
|
||||
|
||||
-- floating terminal
|
||||
use({
|
||||
'voldikss/vim-floaterm',
|
||||
opt = true,
|
||||
cmd = { 'FloatermToggle', 'FloatermNew', 'FloatermSend' },
|
||||
config = function()
|
||||
require('cosmic.core.terminal')
|
||||
end,
|
||||
})
|
||||
|
||||
-- file navigation
|
||||
use({
|
||||
'nvim-telescope/telescope.nvim',
|
||||
requires = {
|
||||
'nvim-lua/popup.nvim',
|
||||
'nvim-lua/plenary.nvim',
|
||||
{
|
||||
'nvim-telescope/telescope-fzf-native.nvim',
|
||||
run = 'make',
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
require('cosmic.core.file-navigation')
|
||||
end,
|
||||
event = 'BufRead',
|
||||
})
|
||||
|
||||
-- session management
|
||||
use({
|
||||
'rmagatti/auto-session',
|
||||
event = 'VimEnter',
|
||||
config = function()
|
||||
require('auto-session').setup({
|
||||
pre_save_cmds = { 'NvimTreeClose', 'TroubleClose', 'cclose' },
|
||||
})
|
||||
end,
|
||||
})
|
||||
|
||||
-- lang/syntax stuff
|
||||
use({
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
requires = {
|
||||
'windwp/nvim-ts-autotag',
|
||||
'JoosepAlviste/nvim-ts-context-commentstring',
|
||||
'nvim-treesitter/nvim-treesitter-refactor',
|
||||
},
|
||||
run = ':TSUpdate',
|
||||
config = function()
|
||||
require('cosmic.core.treesitter')
|
||||
end,
|
||||
})
|
||||
|
||||
-- comments and stuff
|
||||
use({
|
||||
'numToStr/Comment.nvim',
|
||||
config = function()
|
||||
require('Comment').setup()
|
||||
end,
|
||||
event = 'BufRead',
|
||||
})
|
||||
|
||||
-- colorized hex codes
|
||||
use({
|
||||
'norcalli/nvim-colorizer.lua',
|
||||
opt = true,
|
||||
cmd = { 'ColorizerToggle' },
|
||||
config = function()
|
||||
require('colorizer').setup()
|
||||
end,
|
||||
})
|
||||
end)
|
43
lua/cosmic/utils.lua
Normal file
43
lua/cosmic/utils.lua
Normal file
|
@ -0,0 +1,43 @@
|
|||
local M = {}
|
||||
|
||||
local function get_basename(file)
|
||||
return file:match('^.+/(.+)$')
|
||||
end
|
||||
|
||||
function M.map(mode, lhs, rhs, opts)
|
||||
local options = { noremap = true }
|
||||
if opts then
|
||||
options = vim.tbl_extend('force', options, opts)
|
||||
end
|
||||
vim.api.nvim_set_keymap(mode, lhs, rhs, options)
|
||||
end
|
||||
|
||||
function M.get_git_root()
|
||||
local git_dir = require('galaxyline.providers.vcs').get_git_dir()
|
||||
if not git_dir then
|
||||
return 'not a git dir '
|
||||
end
|
||||
|
||||
local git_root = git_dir:gsub('/.git/?$', '')
|
||||
return get_basename(git_root) .. ' '
|
||||
end
|
||||
|
||||
function M.split(str, sep)
|
||||
local res = {}
|
||||
for w in str:gmatch('([^' .. sep .. ']*)') do
|
||||
if w ~= '' then
|
||||
table.insert(res, w)
|
||||
end
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
function M.highlight(group, bg, fg, gui)
|
||||
if gui ~= nil and gui ~= '' then
|
||||
vim.api.nvim_command(string.format('hi %s guibg=%s guifg=%s gui=%s', group, bg, fg, gui))
|
||||
else
|
||||
vim.api.nvim_command(string.format('hi %s guibg=%s guifg=%s', group, bg, fg))
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
74
readme.md
Normal file
74
readme.md
Normal file
|
@ -0,0 +1,74 @@
|
|||
# ✨ CosmicNvim ✨
|
||||
|
||||
A lightweight and opinionated Neovim configuration for web development specifically designed to provide a COSMIC programming experience!
|
||||
|
||||
## 🚀 Stellar Features
|
||||
|
||||
#### Native LSP
|
||||
|
||||
Full featured native LSP functionality!
|
||||
|
||||
- 📘 Go-to definition
|
||||
- 🔍 Find references/type def/declaration
|
||||
- 💡 Code actions
|
||||
- 🚨 Statusline diagnostics
|
||||
- ⚠️ Linting thanks to [eslint](https://github.com/williamboman/nvim-lsp-installer/blob/main/lua/nvim-lsp-installer/servers/eslint/README.md)
|
||||
- 🔧 Formatting thanks to [efm](https://github.com/mattn/efm-langserver)
|
||||
|
||||
##### Additional features
|
||||
|
||||
- Amazing colors thanks to [tokyonight.nvim](https://github.com/folke/tokyonight.nvim)
|
||||
- Enhanced syntax highlighting with [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter)
|
||||
- Hand-built statusline with [galaxyline](https://github.com/NTBBloodbath/galaxyline.nvim)
|
||||
- Explore files with [nvim-tree](https://github.com/kyazdani42/nvim-tree.lua)
|
||||
- Fuzzy finder and some LSP actions with [Telescope](https://github.com/nvim-telescope/telescope.nvim)
|
||||
- Floating terminal with [vim-floatterm](https://github.com/voldikss/vim-floaterm)
|
||||
- Easy LSP installation with [nvim-lsp-installer](https://github.com/williamboman/nvim-lsp-installer)
|
||||
- Autocompletion provided by [nvim-cmp](https://github.com/hrsh7th/nvim-cmp)
|
||||
- Session management with [auto-session](https://github.com/rmagatti/auto-session)
|
||||
- Floating windows for references, renaming, diagnostics, code actions and more!
|
||||
|
||||
_While CosmicNvim is geared specifically toward TypeScript/JavaScript development, it should be able to provide a great experience with any LSP supported language._
|
||||
|
||||
### How to install
|
||||
|
||||
Using [stow](https://www.gnu.org/software/stow/)
|
||||
|
||||
```
|
||||
$ git clone git@github.com:mattleong/CosmicNvim.git
|
||||
$ mkdir ~/.config/nvim
|
||||
$ stow -t ~/.config/nvim CosmicNvim
|
||||
```
|
||||
|
||||
Symlinking (don't use relative pathing)
|
||||
|
||||
```
|
||||
$ git clone git@github.com:mattleong/CosmicNvim.git
|
||||
$ ln -s ~/.config/nvim ~/CosmicNvim
|
||||
```
|
||||
|
||||
## 📷 Screenshots
|
||||
|
||||
### Statusline
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
### Autocomplete
|
||||

|
||||
|
||||
### Rename
|
||||

|
||||
|
||||
### Hover
|
||||

|
||||
|
||||
### Find Reference
|
||||

|
||||
|
||||
### File Navigation
|
||||

|
||||
|
||||
### Floating Terminal
|
||||

|
Loading…
Add table
Reference in a new issue