Skip to content

Instantly share code, notes, and snippets.

@s-mage
Last active November 28, 2022 10:52
Show Gist options
  • Save s-mage/6339144 to your computer and use it in GitHub Desktop.
Save s-mage/6339144 to your computer and use it in GitHub Desktop.
vim.o.background = "light"
vim.o.termguicolors = true
if vim.g.colors_name then vim.cmd("hi clear") end
vim.cmd("syntax reset")
vim.g.colors_name = "Boring Tomorrow"
-- Default GUI Colours
local foreground = "#000000"
local background = "#ffffff"
local selection = "#efefef"
local red = "#ffc1bf"
local orange = "#f5871f"
local yellow = "#fee2ae"
local aqua = "#3e999f"
local purple = "#8959a8"
local window = "#efefef"
-- github diff colors
local diffadd = "#e6ffeb"
local diffrm = "#ffebe9"
local diffupdateadd = "#aaf2bb"
local diffupdaterm = "#ffc1bf"
local hl = function(group, params) return vim.api.nvim_set_hl(0, group, params) end
-- Interface Highlighting
hl("LineNr", { fg = "darkGrey" })
hl("Normal", { fg = foreground, bg = background })
hl("NonText", { fg = selection })
hl("SpecialKey", { fg = selection })
hl("Search", { bg = yellow })
hl("TabLine", { bg = window, fg = foreground, reverse = true })
hl("TabLineFill", { bg = window, fg = foreground, reverse = true })
hl("StatusLine", { bg = window, fg = window, reverse = true })
hl("StatusLineNC", { bg = window, fg = foreground, reverse = true })
hl("VertSplit", { bg = window, fg = window })
hl("Visual", { bg = selection })
hl("Directory", { fg = foreground })
hl("ModeMsg", { bg = background })
hl("MoreMsg", { bg = background })
hl("Question", { bg = background })
hl("WarningMsg", { bg = red })
hl("ErrorMsg", { fg = foreground, bg = diffupdaterm })
hl("NvimInternalError", { bg = red })
hl("MatchParen", { bg = yellow })
hl("Folded", { bg = background, fg = foreground })
hl("FoldColumn", { bg = background })
hl("CursorLine", { bg = window })
hl("CursorColumn", { bg = window })
hl("Cursor", { bg = foreground, fg = background })
hl("PMenu", { fg = foreground, bg = selection })
hl("PMenuSel", { fg = foreground, bg = selection, reverse = true })
hl("PMenuThumb", { fg = foreground, bg = selection, reverse = true })
hl("SignColumn", { bg = background })
hl("ColorColumn", { bg = window })
hl("Conceal", { fg = foreground, bg = "LightGrey" })
-- comments are important, make them stand out
hl("Comment", { bold = true })
hl("Todo", { link = "Comment" })
-- normalize the rest to be black on white
hl("Title", {})
hl("Identifier", {})
hl("Statement", {})
hl("Conditional", {})
hl("Repeat", {})
hl("Structure", {})
hl("Function", {})
hl("Constant", {})
hl("Keyword", {})
hl("String", {})
hl("Special", {})
hl("PreProc", {})
hl("Operator", {})
hl("Type", {})
hl("Define", {})
hl("Include", {})
hl("vimCommand", {})
-- git
hl("gitcommitSummary", { bold = true })
hl("diffAdded", { bg = diffadd })
hl("diffRemoved", { bg = diffrm })
hl("DiffAdd", { bg = diffupdateadd })
hl("DiffChange", {})
hl("DiffDelete", { bg = diffrm })
hl("DiffText", { bg = diffupdateadd })
hl("CocGitChangedSign", { bg = background })
hl("CocGitAddedSign", { bg = background })
hl("CocGitRemovedSign", { bg = background })
hl("CocGitChangeRemovedSign", { bg = background })
-- ShowMarks Highlighting
hl("ShowMarksHLl", { fg = orange, bg = background })
hl("ShowMarksHLo", { fg = purple, bg = background })
hl("ShowMarksHLu", { fg = yellow, bg = background })
hl("ShowMarksHLm", { fg = aqua, bg = background })
-- misc
hl("Underlined", { fg = foreground })
hl("CocMenuSel", { bold = true })
hl("CocSearch", { fg = foreground, bg = yellow })
{
"diagnostic.messageTarget": "echo",
"diagnostic.virtualText": true,
"diagnostic.virtualTextPrefix": " |> ",
"diagnostic.infoSign": "|>",
"diagnostic.hintSign": "|>",
"diagnostic.warningSign": "->",
"diagnostic.errorSign": "=>",
"suggest.minTriggerInputLength": 2,
"solargraph.useBundler": true,
"solargraph.bundlerPath": "/Users/rm/.rbenv/shims/bundle",
"solargraph.diagnostics": true,
"solargraph.completion": true,
"solargraph.definitions": true,
"solargraph.checkGemVersion": false,
"eslint.packageManager": "yarn",
"vetur.ignoreProjectWarning": true
}
-- https://github.com/nanotee/nvim-lua-guide
--
local Plug = vim.fn['plug#']
vim.call('plug#begin', '~/.vim/plugged')
Plug('/opt/homebrew/opt/fzf') -- tag search
Plug('junegunn/fzf.vim')
Plug('itchyny/lightline.vim') -- bottom line
Plug('zhaocai/GoldenView.Vim') -- open windows in golden proportion
Plug('neoclide/coc.nvim', { branch = 'release' }) -- lang servers; help coc-configuration
Plug('tpope/vim-fugitive') -- git wrapper
Plug('tpope/vim-rhubarb') -- fugitive addon for github
Plug('junegunn/gv.vim') -- commit browser
Plug('justinmk/vim-dirvish') -- file tree
Plug('nvim-treesitter/nvim-treesitter', { ["do"] = vim.fn["TSUpdate"] }) -- syntax highlighting
Plug('nvim-lua/plenary.nvim')
Plug('sindrets/diffview.nvim')
Plug('cappyzawa/trim.nvim')
Plug('ziglang/zig.vim')
Plug('Pocco81/auto-save.nvim')
vim.call('plug#end')
function _G.custom_fold_text()
local line = vim.fn.getline(vim.v.foldstart)
local line_count = vim.v.foldend - vim.v.foldstart + 1
return "⋮⋮⋮ " .. line .. " <- " .. line_count .. " lines ⋮⋮⋮"
end
----------------------------------
-- Options: used to be set in viml
----------------------------------
local opt = vim.opt
opt.encoding = "utf-8"
opt.foldmethod = "expr"
opt.foldexpr = "nvim_treesitter#foldexpr()"
opt.foldlevel = 20
opt.foldtext = "v:lua.custom_fold_text()"
opt.fillchars = { eob = "-", fold = " " }
-- Tabs should be converted to a group of 2 spaces.
opt.shiftwidth = 2
opt.tabstop = 2
opt.expandtab = true
opt.smarttab = true
opt.scrolloff=999 -- Cursor is always in the center of the screen
opt.ruler = true -- Show line number, cursor position
opt.showcmd = true -- Display incomplete commands
opt.ignorecase = true -- Ignore case when searching
opt.smartcase = true -- Become case sensitive when an uppercase letter entered
-- Relative line number
opt.relativenumber = true
opt.numberwidth = 2
-- gui colors instead of 256
opt.termguicolors = true
-- Copy to system clipboard
opt.clipboard = "unnamedplus"
---------------
-- Key mappings
---------------
local map = vim.api.nvim_set_keymap
local nnoremap = function(key, command) return map('n', key, command, { noremap = true }) end
local vnoremap = function(key, command) return map('v', key, command, { noremap = true }) end
local cnoremap = function(key, command) return map('c', key, command, { noremap = true }) end
local tnoremap = function(key, command) return map('t', key, command, { noremap = true }) end
vim.g.mapleader = ","
-- Full-text search
nnoremap("<leader>a", ":Rg<Space>")
nnoremap("<leader>*", ":Rg <c-r>=expand('<cword>')<cr><cr>")
vnoremap("<leader>*", "y:Rg<Space><c-r>+<cr>")
-- Search the word under cursor
vnoremap("*", "y/<c-r>+<cr>")
-- Split string on cursor position
nnoremap("s", "i<cr><esc>")
-- Backspace moves back in jumps
nnoremap("<BS>", "<C-o>")
-- Next error/warning
nnoremap("<leader><space>", "<Plug>(coc-diagnostic-next)")
-- Next in file list
nnoremap("<space>", ":cn<cr>")
-- Allows to save a file we don't have permission to save *after* we have already opened it
cnoremap("w!!", "w !sudo tee % >/dev/null")
-- g as in go somewhere
nnoremap("gd", "<Plug>(coc-definition)")
nnoremap("gb", ":Git blame<cr>")
vnoremap("gh", ":'<,'>GBrowse<cr>")
-- Disable opening command line window when I try to exit. `q?` still does that
nnoremap("q:", ":q")
nnoremap("<c-t>", ":tabnew<cr>")
-- Search through files
nnoremap("<leader>m", ":Files<cr>")
nnoremap("<leader>g", ":GFiles<cr>")
nnoremap("<leader>h", ":History<cr>")
nnoremap("<leader>/", ":BLines<cr>")
-- Show current path
nnoremap("<leader>ff", ":file<cr>")
-- current file and dir
-- help map-expression
-- help expand
map("c", "%f", "expand('%:f')", { noremap = true, expr = true })
map("c", "%%", "expand('%:h') . '/'", { noremap = true, expr = true })
map("n", "<leader>fm", ":!mv % %f", {})
map("n", "<leader>fc", ":!cp % %%", {})
map("n", "<leader>fa", ":e %%", {})
nnoremap("<leader>t", ":40vsplit +Dirvish<cr>")
nnoremap("<leader>r", ":40vsplit<cr>:Dirvish %<cr>")
-- Accept selected completion on tab & enter
map("i", "<TAB>",
'coc#pum#visible() ? coc#pum#confirm() : "<TAB>"',
{ noremap = true, silent = true, expr = true }
)
map("i", "<CR>",
'coc#pum#visible() ? coc#pum#confirm() : "<CR>"',
{ noremap = true, silent = true, expr = true }
)
vim.cmd("cabbrev help tab help")
-- :help nvim_replace_termcodes()
local t = function(s) return vim.api.nvim_replace_termcodes(s, true, true, true) end
function setBreakpoint()
local command = "debugger"
if vim.bo.filetype == "haml" then command = "- debugger" end
return vim.cmd(t([[execute "normal! o]] .. command .. [[<esc>"]]))
end
nnoremap("<leader>b", ":lua setBreakpoint()<cr>")
tnoremap("<Esc>", [[<C-\><C-n>]])
-------------
-- Autogroups
-------------
local api = vim.api
local setFtAutogroup = vim.api.nvim_create_augroup("setFt", { clear = true })
api.nvim_create_autocmd(
{ "BufNewFile", "BufRead" },
{ command = 'set filetype=html', pattern = { "*.ejs" }, group = setFtAutogroup }
)
-- when opening a file, open it on the same line you left
-- help mark-motions
local keepLineAutogroup = vim.api.nvim_create_augroup("keepLine" , { clear = true })
api.nvim_create_autocmd( "BufReadPost", {
command = [[if line("'\"") > 0 && line ("'\"") <= line("$") | execute "normal! g'\"" | endif]],
pattern = { "*" },
group = keepLineAutogroup,
})
-----------
-- Plugins
-----------
vim.api.nvim_command("colors boring-tomorrow")
-- remove unwanted spaces and blank lines
require('trim').setup({})
require'nvim-treesitter.configs'.setup {
ensure_installed = "all",
ignore_install = { "phpdoc" },
highlight = { enable = true },
indent = { enable = true },
}
require'diffview'.setup {
use_icons = false,
enhanced_diff_hl = true,
file_panel = { win_config = { position = "bottom" }, listing_style = "list" }
}
require("auto-save").setup {
execution_message = {
message = function()
return (vim.fn.expand('%:p'))
end,
dim = 0,
cleaning_interval = 10000,
},
}
-- https://github.com/junegunn/fzf/blob/master/README-VIM.md#explanation-of-gfzf_colors
vim.g.fzf_layout = { window = { width = 1.0, height = 0.4, yoffset = 1.0, border = 'top' } }
vim.g.fzf_colors = {
fg = {'fg', 'Normal'},
bg = {'bg', 'Normal'},
hl = {'fg', 'Normal'},
['fg+'] = {'fg', 'Normal'},
['bg+'] = {'bg', 'Visual' },
['hl+'] = {'fg', 'Normal'},
info = {'fg', 'Normal'},
border = {'bg', 'Normal'},
prompt = {'fg', 'Normal'},
pointer = {'fg', 'Exception'},
marker = {'fg', 'Normal'},
spinner = {'fg', 'Normal'},
header = {'fg', 'Normal'}
}
vim.g.lightline = {
colorscheme = 'smagin',
active = {
left = {
{ 'mode', 'paste' },
{ 'cocstatus', 'readonly', 'filename', 'modified' },
},
},
component_function = { cocstatus = 'coc#status' },
}
vim.g.lightline.tabline = { left = { { 'tabs' } } }
vim.g.lightline.enable = { statusline = 1, tabline = 1 }
" =============================================================================
" Filename: autoload/lightline/colorscheme/smagin.vim
" Based on one.vim
" =============================================================================
" Common colors
let s:blue = [ '#61afef', 75 ]
let s:green = [ '#98c379', 76 ]
let s:purple = [ '#c678dd', 175 ]
let s:red1 = [ '#e06c75', 168 ]
let s:red2 = [ '#be5046', 168 ]
let s:yellow = [ '#e5c07b', 180 ]
let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
if lightline#colorscheme#background() ==# 'light'
" Light variant
let s:fg = [ '#000000', 0 ]
let s:bg = [ '#fafafa', 255 ]
let s:gray1 = [ '#494b53', 238 ]
let s:gray2 = [ '#f0f0f0', 255 ]
let s:gray3 = [ '#d0d0d0', 250 ]
let s:green = [ '#98c379', 35 ]
let s:p.inactive.left = [ [ s:bg, s:gray3 ], [ s:bg, s:gray3 ] ]
let s:p.inactive.middle = [ [ s:gray3, s:gray2 ] ]
let s:p.inactive.right = [ [ s:bg, s:gray3 ] ]
else
" Dark variant
let s:fg = [ '#abb2bf', 145 ]
let s:bg = [ '#282c34', 235 ]
let s:gray1 = [ '#5c6370', 241 ]
let s:gray2 = [ '#2c323d', 235 ]
let s:gray3 = [ '#3e4452', 240 ]
let s:p.inactive.left = [ [ s:gray1, s:bg ], [ s:gray1, s:bg ] ]
let s:p.inactive.middle = [ [ s:gray1, s:gray2 ] ]
let s:p.inactive.right = [ [ s:gray1, s:bg ] ]
endif
" Common
let s:p.normal.left = [ [ s:bg, s:green, 'bold' ], [ s:fg, s:gray3 ] ]
let s:p.normal.middle = [ [ s:fg, s:gray2 ] ]
let s:p.normal.right = [ [ s:bg, s:green, 'bold' ], [ s:fg, s:gray3 ] ]
let s:p.normal.error = [ [ s:red2, s:bg ] ]
let s:p.normal.warning = [ [ s:yellow, s:bg ] ]
let s:p.insert.right = [ [ s:bg, s:blue, 'bold' ], [ s:fg, s:gray3 ] ]
let s:p.insert.left = [ [ s:bg, s:blue, 'bold' ], [ s:fg, s:gray3 ] ]
let s:p.replace.right = [ [ s:bg, s:red1, 'bold' ], [ s:fg, s:gray3 ] ]
let s:p.replace.left = [ [ s:bg, s:red1, 'bold' ], [ s:fg, s:gray3 ] ]
let s:p.visual.right = [ [ s:bg, s:purple, 'bold' ], [ s:fg, s:gray3 ] ]
let s:p.visual.left = [ [ s:bg, s:purple, 'bold' ], [ s:fg, s:gray3 ] ]
let s:p.tabline.left = [ [ s:fg, s:gray2 ] ]
let s:p.tabline.tabsel = [ [ s:fg, s:gray3 ] ]
let s:p.tabline.middle = [ [ s:gray3, s:gray2 ] ]
let s:p.tabline.right = copy(s:p.normal.right)
let g:lightline#colorscheme#smagin#palette = lightline#colorscheme#flatten(s:p)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment