diff --git a/.gitignore b/.gitignore index bb0ed89..0137fc4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ user/.config/zsh/personal/* user/.config/autorandr/* +user/.config/nvim/plugin/* +user/.config/nvim/plugin/lua/priv/* diff --git a/personal/archives/nvim.zip b/personal/archives/nvim.zip new file mode 100644 index 0000000..d1d1d0f Binary files /dev/null and b/personal/archives/nvim.zip differ diff --git a/personal/pack.sh b/personal/pack.sh index e5066b3..b938b0c 100644 --- a/personal/pack.sh +++ b/personal/pack.sh @@ -9,4 +9,7 @@ zip --encrypt ../../../../personal/archives/zsh.zip ./* cd "${XDG_CONFIG_HOME:-$HOME/.config}/autorandr" zip --encrypt "$dir/archives/autorandr.zip" ./**/** +cd "${XDG_CONFIG_HOME:-$HOME/.config}/nvim/lua/priv" +zip --encrypt "$dir/archives/nvim.zip" ./* + cd "$dir" diff --git a/personal/unpack.sh b/personal/unpack.sh index d4bdf77..d45d206 100644 --- a/personal/unpack.sh +++ b/personal/unpack.sh @@ -4,3 +4,6 @@ unzip ./archives/zsh.zip -d ../user/.config/zsh/personal unzip ./archives/autorandr.zip -d ../user/.config/autorandr + +unzip ./archives/nvim.zip -d ../user/.config/nvim/lua/priv +echo 'require("priv.init")' >> ../user/.config/nvim/init.lua diff --git a/user/.config/nvim/init.lua b/user/.config/nvim/init.lua new file mode 100644 index 0000000..a5999f0 --- /dev/null +++ b/user/.config/nvim/init.lua @@ -0,0 +1 @@ +require("user.init") diff --git a/user/.config/nvim/lua/priv/autocmd.lua b/user/.config/nvim/lua/priv/autocmd.lua new file mode 100644 index 0000000..54282b9 --- /dev/null +++ b/user/.config/nvim/lua/priv/autocmd.lua @@ -0,0 +1,10 @@ +vim.api.nvim_create_autocmd("BufWritePost", { + pattern = "email-list.md", + callback = function () + local infile = vim.fn.expand('%:p') + local outfile = os.getenv("HOME") .. '/docs/notes/harc/emails/raw-list.md' + local command = string.format("grep -o '[^ ^ ]*@[^ ^ ]*' %s > %s", infile, outfile) + + os.execute(command) + end, +}) diff --git a/user/.config/nvim/lua/priv/init.lua b/user/.config/nvim/lua/priv/init.lua new file mode 100644 index 0000000..f67e1e7 --- /dev/null +++ b/user/.config/nvim/lua/priv/init.lua @@ -0,0 +1 @@ +require("priv.autocmd") diff --git a/user/.config/nvim/lua/user/autocmd.lua b/user/.config/nvim/lua/user/autocmd.lua new file mode 100644 index 0000000..6e6c20c --- /dev/null +++ b/user/.config/nvim/lua/user/autocmd.lua @@ -0,0 +1,7 @@ +vim.api.nvim_create_autocmd("BufWritePost", { + pattern = "logind.conf", + callback = function () + local command = string.format('sudo -A cp -f %s %s', vim.fn.expand('%:p'), "/etc/systemd/logind.conf") + os.execute(command) + end, +}) diff --git a/user/.config/nvim/lua/user/filetypes/md/keys.lua b/user/.config/nvim/lua/user/filetypes/md/keys.lua new file mode 100644 index 0000000..8522eb3 --- /dev/null +++ b/user/.config/nvim/lua/user/filetypes/md/keys.lua @@ -0,0 +1,40 @@ +local opts = { noremap = true, silent = true } +local term_opts = { silent = true } + +-- Function to check if the buffer is saved +local function is_buffer_saved() + return vim.api.nvim_buf_get_option(0, 'modified') == false +end + +-- Function to prompt user to save buffer +local function save_buffer_prompt() + if not is_buffer_saved() then + local save_choice = vim.fn.confirm('Buffer is not saved. Save it?', '&Yes\n&No', 1) + if save_choice == 1 then + vim.cmd('w') + else + return + end + end +end + +-- Keybinding function +function run_md_export() + save_buffer_prompt() + + -- vim.api.nvim_exec2("TermExec direction=float cmd=\"md-export " .. vim.fn.expand('%:p') .. "\"" , true) +end + +-- MD keybinds +vim.api.nvim_create_autocmd("FileType", { + pattern = { "vimwiki", "markdown"}, + callback = function () + vim.api.nvim_buf_set_keymap(0, "n", "mp", ":MarkdownPreview", opts) -- Preview + vim.api.nvim_buf_set_keymap(0, "n", "mgl", ":VimwikiGenerateLinks", opts) -- Generate VimWiki Links + vim.api.nvim_buf_set_keymap(0, "n", "toc", ":VimwikiTOC", opts) -- Generate TOC + vim.api.nvim_buf_set_keymap(0, "n", "mtc", ":VimwikiTOC", opts) -- Generate TOC + vim.api.nvim_buf_set_keymap(0, "n", "mdc", ":TermExec direction=float cmd=\"md2src " .. vim.fn.expand('%:p') .. "\"", opts ) -- Compile Markdown File to code using md2src +-- vim.api.nvim_buf_set_keymap(0, "n", 'mde', ':lua run_md_export()', opts ) + end +}) + diff --git a/user/.config/nvim/lua/user/init.lua b/user/.config/nvim/lua/user/init.lua new file mode 100644 index 0000000..5113a3d --- /dev/null +++ b/user/.config/nvim/lua/user/init.lua @@ -0,0 +1,5 @@ +require("user.plugins.packer") +require("user.options") +require("user.keys") +require("user.autocmd") +require("user.filetypes.md.keys") diff --git a/user/.config/nvim/lua/user/keys.lua b/user/.config/nvim/lua/user/keys.lua new file mode 100644 index 0000000..af3706a --- /dev/null +++ b/user/.config/nvim/lua/user/keys.lua @@ -0,0 +1,84 @@ +local opts = { noremap = true, silent = true } + +local term_opts = { silent = true } + +--Remap space as leader key +vim.api.nvim_set_keymap("", "", "", opts) +vim.g.mapleader = " " +vim.g.maplocalleader = " " + +-- Modes +-- normal_mode = "n", +-- insert_mode = "i", +-- visual_mode = "v", +-- visual_block_mode = "x", +-- term_mode = "t", +-- command_mode = "c", + +-- Normal -- +vim.api.nvim_set_keymap("n", "ws", ":w|source", opts) +-- Better window navigation +vim.api.nvim_set_keymap("n", "", "h", opts) +vim.api.nvim_set_keymap("n", "", "j", opts) +vim.api.nvim_set_keymap("n", "", "k", opts) +vim.api.nvim_set_keymap("n", "", "l", opts) + +-- NvimTree Focus +vim.api.nvim_set_keymap("n", "ft", ":NvimTreeFocus", opts) + +-- Telescope +vim.api.nvim_set_keymap("n", "fr", ":Telescope oldfiles", opts) +vim.api.nvim_set_keymap("n", "ff", ":Telescope find_files", opts) +vim.api.nvim_set_keymap('n', 'fn', [[:lua require('telescope.builtin').find_files({ cwd = '~/docs/notes' })]], opts) +vim.api.nvim_set_keymap("n", "sh", ":Telescope help_tags", opts) +vim.api.nvim_set_keymap("n", "sf", ":Telescope filetypes", opts) + +-- Better buffer navigation + +local function is_nvimtree_open() + for _, winid in ipairs(vim.api.nvim_list_wins()) do + local bufnr = vim.fn.winbufnr(winid) + local filetype = vim.bo[bufnr].filetype + + if filetype == 'NvimTree' then + return true + end + end + + return false +end + +function close_or_exit() + local ls_output = vim.fn.execute(":ls") + local open_buffers_count = vim.fn.len(vim.fn.split(ls_output, '\n')) + + if vim.bo.filetype == "NvimTree" then + require("nvim-tree.api").tree.close() + + elseif vim.fn.winnr('$') == 2 and is_nvimtree_open() then + if open_buffers_count > 1 then + vim.cmd('bnext | bdelete! #') + else + vim.cmd('qall!') + end + + elseif vim.fn.winnr('$') > 1 then + vim.cmd(':q!') + elseif open_buffers_count > 1 then + vim.cmd('bdelete!') + else + vim.cmd('qall!') + end +end + +vim.api.nvim_set_keymap("n", "ZZ", ":w|lua close_or_exit()", opts) +vim.api.nvim_set_keymap("n", "ZQ", ":lua close_or_exit()", opts) +vim.api.nvim_set_keymap("n", "bj", ":BufferLineCycleNext", opts) +vim.api.nvim_set_keymap("n", "bk", ":BufferLineCyclePrev", opts) +vim.api.nvim_set_keymap("n", "bf", ":Telescope buffers", opts) +vim.api.nvim_set_keymap("n", "bp", ":BufferLinePick", opts) + +for dig = 1, 9 do + vim.api.nvim_set_keymap("n", "" .. dig , ":BufferLineGoToBuffer " .. dig .. "", opts) +end +vim.api.nvim_set_keymap("n", "0", ":BufferLineGoToBuffer 10", opts) diff --git a/user/.config/nvim/lua/user/options.lua b/user/.config/nvim/lua/user/options.lua new file mode 100644 index 0000000..31817e2 --- /dev/null +++ b/user/.config/nvim/lua/user/options.lua @@ -0,0 +1,26 @@ +vim.opt.clipboard = 'unnamedplus' -- Use system clipboard +vim.opt.number = true -- Have curent line show line number +vim.opt.relativenumber = true -- Show relative line numbers +vim.opt.hlsearch = false -- Disable highlight on searched strings +vim.opt.ignorecase = true -- Ignore case in searches +vim.opt.mouse = '' -- Set mouse behaviour (disabled) +vim.opt.scrolloff = 8 -- Prevent cursor from top and bottom edges - better readability +vim.opt.sidescrolloff = 8 -- Prevent cursor from side edges - better readability +vim.opt.cursorline = true -- Highlught line which cursor is on +vim.opt.splitbelow = true -- force all horizontal splits to go below current window +vim.opt.splitright = true -- force all vertical splits to go to the right of current window +vim.opt.expandtab = false -- convert tabs to spaces +vim.opt.shiftwidth = 2 -- the number of spaces inserted for each indentation +vim.opt.tabstop = 2 -- insert 2 spaces for a tab +vim.opt.swapfile = false -- keep track of open buffers, ocassionally casuses issues +vim.opt.undofile = true -- save undo hist on nvim exit + +-- Disable New Line Comment +vim.api.nvim_create_autocmd("BufEnter", { + callback = function() + vim.opt.formatoptions:remove { "c", "r", "o" } + end +}) + + +vim.opt.termguicolors = true diff --git a/user/.config/nvim/lua/user/plugins/buf-line.lua b/user/.config/nvim/lua/user/plugins/buf-line.lua new file mode 100644 index 0000000..b140004 --- /dev/null +++ b/user/.config/nvim/lua/user/plugins/buf-line.lua @@ -0,0 +1,35 @@ +require('bufferline').setup { + options = { + mode = "buffers", + themeable = true, + right_mouse_command = nil, + left_mouse_command = nil, + middle_mouse_command = nil, + indicator = { + -- icon = 'lala', + style = 'icon', + }, + show_buffer_icons = true, + show_buffer_close_icons = false, + -- show_close_icon = false, + -- show_tab_indicators = true | false, + -- show_duplicate_prefix = true | false, -- whether to show duplicate buffer prefix + offsets = { + { + filetype = "NvimTree", + -- text = function() return vim.fn.getcwd() end, + text = "File Explorer", + text_align = "center", + highlight = "Directory", + separator = true, + }, + }, + separator_style = 'slant' -- "slant" | "slope" | "thick" | "thin" | { 'any', 'any' }, + }, + highlights = { + tab = { + -- fg = '', + -- bg = 'lualine_c_normal', + }, + } +} diff --git a/user/.config/nvim/lua/user/plugins/calendar.lua b/user/.config/nvim/lua/user/plugins/calendar.lua new file mode 100644 index 0000000..ac77e78 --- /dev/null +++ b/user/.config/nvim/lua/user/plugins/calendar.lua @@ -0,0 +1 @@ +vim.g.calendar_no_mappings = 1 -- Disable default (bad) mappings diff --git a/user/.config/nvim/lua/user/plugins/dash.lua b/user/.config/nvim/lua/user/plugins/dash.lua new file mode 100644 index 0000000..245ffbb --- /dev/null +++ b/user/.config/nvim/lua/user/plugins/dash.lua @@ -0,0 +1,122 @@ +function custom_footer(command, max_chars, max_lines) + local handle, result = io.popen(command), {} + for _ = 1, 3 do table.insert(result, "") end + for line in handle:lines() do + line = string.gsub(line, "\t", "") + while #line > max_chars do + local chunk, i = string.sub(line, 1, max_chars), max_chars + while i > 0 and string.sub(chunk, i, i) ~= " " do i = i - 1 end + if i > 0 then chunk = string.sub(chunk, 1, i) end + chunk = string.gsub(chunk, "^%s*(.-)%s*$", "%1") + table.insert(result, chunk) + line = string.sub(line, i + 1) + end + table.insert(result, line) + if #result > max_lines then handle:close(); return custom_footer(command, max_chars, max_lines) end + end + handle:close() + return result +end + + +require('dashboard').setup { + theme = 'doom', + -- disable_move, -- default is false disable move keymap for hyper + -- shortcut_type, -- shorcut type 'letter' or 'number' + -- change_to_vcs_root, -- default is false,for open file in hyper mru. it will change to the root of vcs + config = { + header = { + '', + '', + '', + '', + '', + ' ███╗ ██╗ ███████╗ ██████╗ ██╗ ██╗ ██╗ ███╗ ███╗', + ' ████╗ ██║ ██╔════╝██╔═══██╗ ██║ ██║ ██║ ████╗ ████║', + ' ██╔██╗ ██║ █████╗ ██║ ██║ ██║ ██║ ██║ ██╔████╔██║', + ' ██║╚██╗██║ ██╔══╝ ██║ ██║ ╚██╗ ██╔╝ ██║ ██║╚██╔╝██║', + ' ██║ ╚████║ ███████╗╚██████╔╝ ╚████╔╝ ██║ ██║ ╚═╝ ██║', + ' ╚═╝ ╚═══╝ ╚══════╝ ╚═════╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝', + '', + '', + '', + }, + center = { + { + icon = '󰋚 ', + desc = 'Recent Files ', + key = 'r', + keymap = 'SPC f r', + action = ':Telescope oldfiles' + }, + { + icon = '󰝒 ', + desc = 'New File ', + key = 'n', + keymap = 'NONE', + action = ':enew' + }, + { + icon = '󰍉 ', + desc = 'Find Files ', + key = 'f', + keymap = 'SPC f f', + action = ':Telescope find_files' + }, + { + icon = '󰍉 ', + desc = 'File Tree ', + key = 't', + keymap = 'SPC f t', + action = ':NvimTreeFocus' + }, + { + icon = '󰠮 ', + desc = 'Open Vimwiki ', + key = 'w', + keymap = 'SPC w w', + action = ':VimwikiIndex' + }, + { + icon = '󰺿 ', + desc = 'Open Daily Note ', + key = 'd', + keymap = 'SPC w SPC w', + action = ':VimwikiMakeDiaryNote' + }, + { + icon = '󰃭 ', + desc = 'Open Calendar ', + key = 'c', + keymap = 'SPC c a l', + action = ':CalendarT' + }, + { + icon = '󰚰 ', + desc = 'Update Plugins', + key = 'u', + keymap = 'NONE', + action = ':PackerSync' + }, + { + icon = '󰋗 ', + desc = 'Help Pages', + key = 'h', + keymap = 'SPC s h', + action = ':Telescope help_tags' + }, + }, + footer = custom_footer("fortune", 50, 8) + }, + -- hide = { + -- statusline, -- hide statusline default is true + -- tabline, -- hide the tabline + -- winbar, -- hide winbar + -- }, + -- preview = { + -- command, -- preview command + -- file_path, -- preview file path + -- file_height, -- preview file height + -- file_width, -- preview file width + -- } +} diff --git a/user/.config/nvim/lua/user/plugins/gruvbox.lua b/user/.config/nvim/lua/user/plugins/gruvbox.lua new file mode 100644 index 0000000..7faad0e --- /dev/null +++ b/user/.config/nvim/lua/user/plugins/gruvbox.lua @@ -0,0 +1,24 @@ +require("gruvbox").setup({ + undercurl = true, + underline = true, + bold = true, + italic = { + strings = false, + comments = false, + operators = false, + folds = true, + }, + strikethrough = true, + invert_selection = false, + invert_signs = false, + invert_tabline = false, + invert_intend_guides = false, + inverse = true, -- invert background for search, diffs, statuslines and errors + contrast = "hard", -- can be "hard", "soft" or empty string + palette_overrides = {}, + overrides = {}, + dim_inactive = false, + transparent_mode = true, +}) + +vim.cmd "colorscheme gruvbox" diff --git a/user/.config/nvim/lua/user/plugins/lualine.lua b/user/.config/nvim/lua/user/plugins/lualine.lua new file mode 100644 index 0000000..f7f5b75 --- /dev/null +++ b/user/.config/nvim/lua/user/plugins/lualine.lua @@ -0,0 +1,40 @@ +require('lualine').setup { + options = { + icons_enabled = true, + theme = 'auto', + component_separators = { left = '', right = ''}, + section_separators = { left = '', right = ''}, + disabled_filetypes = { + statusline = {}, + winbar = {}, + }, + ignore_focus = {}, + always_divide_middle = true, + globalstatus = false, + refresh = { + statusline = 1000, + tabline = 1000, + winbar = 1000, + } + }, + sections = { + lualine_a = {'mode'}, + lualine_b = {'branch', 'diff', 'diagnostics'}, + lualine_c = {'filename'}, + lualine_x = {'encoding', 'filetype'}, --fileformat + lualine_y = {'progress'}, + lualine_z = {'location'} + }, + inactive_sections = { + lualine_a = {}, + lualine_b = {}, + lualine_c = {'filename'}, + lualine_x = {'location'}, + lualine_y = {}, + lualine_z = {} + }, + tabline = {}, + winbar = {}, + inactive_winbar = {}, + extensions = {} +} diff --git a/user/.config/nvim/lua/user/plugins/markdown-preview.lua b/user/.config/nvim/lua/user/plugins/markdown-preview.lua new file mode 100644 index 0000000..bae5929 --- /dev/null +++ b/user/.config/nvim/lua/user/plugins/markdown-preview.lua @@ -0,0 +1,10 @@ +vim.g.mkdp_filetypes = { 'markdown' } + +-- TODO lua rewrite +vim.cmd[[ +function OpenFF (url) + execute "silent ! firefox -P nvim-mdp " . a:url . "&" +endfunction +]] + +vim.g.mkdp_browserfunc = 'OpenFF' diff --git a/user/.config/nvim/lua/user/plugins/nvim-tree.lua b/user/.config/nvim/lua/user/plugins/nvim-tree.lua new file mode 100644 index 0000000..6d5ce8b --- /dev/null +++ b/user/.config/nvim/lua/user/plugins/nvim-tree.lua @@ -0,0 +1,240 @@ +-- Disable Default Nvim file browser - it suck ngl +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 + +-- Load Plugin +require("nvim-tree").setup { + auto_reload_on_write = true, + disable_netrw = true, + hijack_cursor = true, + hijack_netrw = true, + hijack_unnamed_buffer_when_opening = false, + sort = { + sorter = "name", + folders_first = true, + }, + root_dirs = {}, + prefer_startup_root = false, + sync_root_with_cwd = false, + reload_on_bufenter = false, + respect_buf_cwd = false, + on_attach = "default", + select_prompts = false, + view = { + centralize_selection = false, + cursorline = true, + debounce_delay = 15, + width = 30, + side = "left", + preserve_window_proportions = false, + number = false, + relativenumber = false, + signcolumn = "yes", + float = { + enable = false, + quit_on_focus_loss = true, + open_win_config = { + relative = "editor", + border = "rounded", + width = 35, + height = 30, + row = 1, + col = 1, + }, + }, + }, + renderer = { + add_trailing = false, + group_empty = false, + highlight_git = false, + full_name = false, + highlight_opened_files = "none", + highlight_modified = "none", + root_folder_label = ":~:s?$?/..?", + indent_width = 2, + indent_markers = { + enable = true, + inline_arrows = true, + icons = { + corner = "└", + edge = "│", + item = "│", + bottom = "─", + none = " ", + }, + }, + icons = { + webdev_colors = true, + git_placement = "before", + modified_placement = "after", + padding = " ", + symlink_arrow = " ➛ ", + show = { + file = true, + folder = true, + folder_arrow = true, + git = true, + modified = true, + }, + glyphs = { + default = "", + symlink = "", + bookmark = "󰆤", + modified = "●", + folder = { + arrow_closed = "", + arrow_open = "", + default = "", + open = "", + empty = "", + empty_open = "", + symlink = "", + symlink_open = "", + }, + git = { + unstaged = "✗", + staged = "✓", + unmerged = "", + renamed = "➜", + untracked = "★", + deleted = "", + ignored = "◌", + }, + }, + }, + special_files = { "Cargo.toml", "Makefile", "README.md", "readme.md" }, + symlink_destination = true, + }, + hijack_directories = { + enable = true, + auto_open = false, + }, + update_focused_file = { + enable = true, + update_root = false, + ignore_list = {}, + }, + system_open = { + cmd = "xdg-open", + args = {}, + }, + diagnostics = { + enable = false, + show_on_dirs = false, + show_on_open_dirs = true, + debounce_delay = 50, + severity = { + min = vim.diagnostic.severity.HINT, + max = vim.diagnostic.severity.ERROR, + }, + icons = { + hint = "", + info = "", + warning = "", + error = "", + }, + }, + filters = { + git_ignored = false, + dotfiles = false, + git_clean = false, + no_buffer = false, + custom = {}, + exclude = {}, + }, + filesystem_watchers = { + enable = true, + debounce_delay = 50, + ignore_dirs = {}, + }, + git = { + enable = true, + show_on_dirs = true, + show_on_open_dirs = true, + disable_for_dirs = {}, + timeout = 400, + }, + modified = { + enable = false, + show_on_dirs = true, + show_on_open_dirs = true, + }, + actions = { + use_system_clipboard = true, + change_dir = { + enable = true, + global = false, + restrict_above_cwd = false, + }, + expand_all = { + max_folder_discovery = 300, + exclude = {}, + iii}, + file_popup = { + open_win_config = { + col = 1, + row = 1, + relative = "cursor", + border = "shadow", + style = "minimal", + }, + }, + open_file = { + quit_on_open = false, + eject = true, + resize_window = true, + window_picker = { + enable = true, + picker = "default", + chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", + exclude = { + filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame" }, + buftype = { "nofile", "terminal", "help" }, + }, + }, + }, + remove_file = { + close_window = true, + }, + }, + trash = { + cmd = "gio trash", + }, + live_filter = { + prefix = "[FILTER]: ", + always_show_folders = true, + }, + tab = { + sync = { + open = true, + close = true, + ignore = {}, + }, + }, + notify = { + threshold = vim.log.levels.INFO, + absolute_path = true, + }, + ui = { + confirm = { + remove = true, + trash = true, + }, + }, + experimental = {}, + log = { + enable = false, + truncate = false, + types = { + all = false, + config = false, + copy_paste = false, + dev = false, + diagnostics = false, + git = false, + profile = false, + watcher = false, + }, + }, +} + diff --git a/user/.config/nvim/lua/user/plugins/packer.lua b/user/.config/nvim/lua/user/plugins/packer.lua new file mode 100644 index 0000000..d77fee4 --- /dev/null +++ b/user/.config/nvim/lua/user/plugins/packer.lua @@ -0,0 +1,138 @@ +-- Auto install packer +local ensure_packer = function() + local fn = vim.fn + local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim' + if fn.empty(fn.glob(install_path)) > 0 then + fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) + vim.cmd [[packadd packer.nvim]] + return true + end + return false +end + +local packer_bootstrap = ensure_packer() + +-- Autocommand that reloads neovim whenever you save the plugins.lua file +vim.api.nvim_create_autocmd("BufWritePost", { + pattern = "packer.lua", + command = "source | PackerSync", + group = vim.api.nvim_create_augroup("packer_user_config", {clear = true}) +}) + +-- Use a protected call so we don't error out on first use +local status_ok, packer = pcall(require, 'packer') +if not status_ok then + return +end + +-- Have packer use a popup window +packer.init({ + git = { clone_timeout = -1 }, + display = { + open_fn = function() + return require('packer.util').float({ border = 'single' }) + end + } +}) + +return require('packer').startup(function(use) + + use 'https://github.com/wbthomason/packer.nvim' + + use { 'https://github.com/ellisonleao/gruvbox.nvim', + config = function() require('user.plugins.gruvbox') end + } + + use { 'https://github.com/nvim-treesitter/nvim-treesitter', + config = function() end + } + + use { 'https://github.com/kylechui/nvim-surround', + tag = '*', + config = function () require("nvim-surround").setup() end + } + + use { 'https://github.com/norcalli/nvim-colorizer.lua', + config = function() + require 'colorizer'.setup{ + '*'; + '!dashboard'; + '!gcode'; + '!ngc'; + } + end + } + + use { 'https://github.com/terrortylor/nvim-comment', + config = function() require('nvim_comment').setup() end + } + + use 'https://github.com/junegunn/goyo.vim' + + use { 'https://github.com/vimwiki/vimwiki', + config = function() require('user.plugins.vimwiki') end + } + + use { 'https://github.com/nvim-tree/nvim-tree.lua', + config = function() require('user.plugins.nvim-tree') end, + requires = {'https://github.com/nvim-tree/nvim-web-devicons'} + } + + use { 'https://github.com/iamcco/markdown-preview.nvim', + run = function() vim.fn['mkdp#util#install']() end, + setup = function() require('user.plugins.markdown-preview') end, + ft = { 'markdown' }, + } + + use { + 'https://github.com/windwp/nvim-autopairs', + config = function() require("nvim-autopairs").setup {} end + } + + + use { 'https://github.com/nvimdev/dashboard-nvim', + config = function() require('user.plugins.dash') end, + requires = {'https://github.com/nvim-tree/nvim-web-devicons'} + } + + use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' } + use { 'https://github.com/nvim-telescope/telescope.nvim', + requires = { 'https://github.com/nvim-lua/plenary.nvim', + 'https://github.com/BurntSushi/ripgrep', + }, + config = function () require('user.plugins.telescope') end + } + + + use { + 'https://github.com/akinsho/toggleterm.nvim', + tag = '*', + config = function () require("user.plugins.toggleterm") end + } + + use { 'https://git.jakubb.xyz/jakub/vim-nc' } + + use { 'https://github.com/nvim-lualine/lualine.nvim', + config = function() require("user.plugins.lualine") end, + requires = { 'nvim-tree/nvim-web-devicons' } + } + + use { 'https://github.com/mattn/calendar-vim', + config = function() require("user.plugins.calendar") end, + } + + use { 'https://github.com/akinsho/bufferline.nvim', + -- tag = "*", + config = function() + require("user.plugins.buf-line") + vim.cmd "colorscheme gruvbox" + end, + requires = 'nvim-tree/nvim-web-devicons' + } + + + if packer_bootstrap then + require('packer').sync() + end +end) + diff --git a/user/.config/nvim/lua/user/plugins/telescope.lua b/user/.config/nvim/lua/user/plugins/telescope.lua new file mode 100644 index 0000000..69b1a32 --- /dev/null +++ b/user/.config/nvim/lua/user/plugins/telescope.lua @@ -0,0 +1,33 @@ +require("telescope").setup { + pickers = { + find_files = { + mappings = { + n = { ["q"] = "close", } + }, + hidden = true, + file_ignore_patterns = { + -- special dirs + ".git/", + -- xdg dirs + ".cache", ".local/share", ".local/state", + -- bin output + "%.o", "%.a", "%.out", + -- bin docs + "%.pdf", "%doc", "%docx", "%.odt", + -- vids + "%.mkv", "%.mp4", "%.webm", "%.mov", "%.srt", + "%.m4a", + -- pics + "%.jpg", "%.png", "%.webp", "%.gif", + -- audio + "%.mp3", "%.flac", + -- archives + "%.zip", + -- fonts + "%.ttf", + -- misc + "%.torrent", "%.part", "%.dll", "%.exe", "%.pdb", + } + } + } +} diff --git a/user/.config/nvim/lua/user/plugins/toggleterm.lua b/user/.config/nvim/lua/user/plugins/toggleterm.lua new file mode 100644 index 0000000..7600894 --- /dev/null +++ b/user/.config/nvim/lua/user/plugins/toggleterm.lua @@ -0,0 +1,67 @@ +require("toggleterm").setup{ + -- size can be a number or function which is passed the current terminal + size = function(term) + if term.direction == "horizontal" then + return 15 + elseif term.direction == "vertical" then + return vim.o.columns * 0.4 + end + end, + open_mapping = [[]], + -- on_create = fun(t: Terminal), -- function to run when the terminal is first created + -- on_open = fun(t: Terminal), -- function to run when the terminal opens + -- on_close = fun(t: Terminal), -- function to run when the terminal closes + -- on_stdout = fun(t: Terminal, job: number, data: string[], name: string) -- callback for processing output on stdout + -- on_stderr = fun(t: Terminal, job: number, data: string[], name: string) -- callback for processing output on stderr + -- on_exit = fun(t: Terminal, job: number, exit_code: number, name: string) -- function to run when terminal process exits + shade_terminals = false, + hide_numbers = true, -- hide the number column in toggleterm buffers + autochdir = true, -- when neovim changes it current directory the terminal will change it's own when next it's opened + highlights = { + -- -- highlights which map to a highlight group name and a table of it's values + -- -- NOTE: this is only a subset of values, any group placed here will be set for the terminal window split + -- Normal = { + -- guibg = "", + -- }, + -- NormalFloat = { + -- link = 'Normal' + -- }, + FloatBorder = { link = "FloatBorder" }, + }, + -- start_in_insert = true, + -- insert_mappings = true, -- whether or not the open mapping applies in insert mode + -- terminal_mappings = true, -- whether or not the open mapping applies in the opened terminals + -- direction = 'float', + direction = 'horizontal', + -- auto_scroll = true, -- automatically scroll to the bottom on terminal output + -- This field is only relevant if direction is set to 'float' + float_opts = { + -- The border key is *almost* the same as 'nvim_open_win' + -- see :h nvim_open_win for details on borders however + -- the 'curved' border is a custom border type + -- not natively supported but implemented in this plugin. + border = 'single', + width = 160, + height = 40, + }, +} + + +vim.api.nvim_create_autocmd( "TermOpen", { + callback = function() + local opts = {noremap = true} + vim.api.nvim_buf_set_keymap(0, 't', '', [[]], opts) + vim.api.nvim_buf_set_keymap(0, 't', 'jk', [[]], opts) + vim.api.nvim_buf_set_keymap(0, 't', '', [[h]], opts) + vim.api.nvim_buf_set_keymap(0, 't', '', [[j]], opts) + vim.api.nvim_buf_set_keymap(0, 't', '', [[k]], opts) + vim.api.nvim_buf_set_keymap(0, 't', '', [[l]], opts) + end, + pattern = "term://*", +}) + + +vim.api.nvim_create_autocmd( "BufEnter", { + pattern = "term://*", + callback = function() vim.cmd("startinsert") end +}) diff --git a/user/.config/nvim/lua/user/plugins/vimwiki.lua b/user/.config/nvim/lua/user/plugins/vimwiki.lua new file mode 100644 index 0000000..fab6d14 --- /dev/null +++ b/user/.config/nvim/lua/user/plugins/vimwiki.lua @@ -0,0 +1,47 @@ +vim.g.vimwiki_list = {{ + path = '~/docs/notes/', + syntax = 'markdown', + ext = '.md' +}} + +vim.g.vimwiki_links_header = "Pages" +vim.g.vimwiki_links_header_level = 2 +vim.g.vimwiki_links_space_char = '-' + +vim.api.nvim_create_autocmd( "BufEnter", { + pattern = vim.fn.expand("~") .. "/docs/notes/diary/diary.md", + command = "VimwikiDiaryGenerateLinks" +}) + +vim.api.nvim_create_autocmd( "BufEnter", { + pattern = vim.fn.expand("~") .. "/docs/notes/index.md", + command = "VimwikiGenerateLinks" +}) + +-- Automatically asign todays date as title to todays diary entry +vim.api.nvim_create_autocmd( "BufNewFile", { + pattern = vim.fn.expand("~") .. "/docs/notes/diary/*.md", + callback = function () + buf_name = vim.api.nvim_buf_get_name(0) + todays_note= vim.fn.expand("~") .. "/docs/notes/diary/".. os.date("%Y-%m-%d") .. ".md" + + if buf_name == todays_note then + local date = vim.fn.split("# " .. os.date("%-b. %-d, %Y"), "\n") + vim.api.nvim_buf_set_lines(0, 0, 1, false, date) + end + end +}) + +-- Timestamp entries into todays diary entry +vim.api.nvim_create_autocmd( {"BufRead", "BufNewFile"}, { + pattern = vim.fn.expand("~") .. "/docs/notes/diary/*.md", + callback = function () + buf_name = vim.api.nvim_buf_get_name(0) + todays_note= vim.fn.expand("~") .. "/docs/notes/diary/".. os.date("%Y-%m-%d") .. ".md" + if buf_name == todays_note then + vim.api.nvim_buf_set_lines(0, -1, -1, false, { "", "## " .. os.date("%-I:%M %p"), "" }) + vim.cmd("normal! G$") + end + end +}) +