From 5da0e3dc7c126706d78d37c5a8215eafe21f572e Mon Sep 17 00:00:00 2001 From: Squibid Date: Sun, 30 Apr 2023 18:41:13 -0400 Subject: [PATCH] new config old version is now on v1 branch --- README.md | 78 ---- after/ftplugin/help.lua | 1 + after/ftplugin/java.lua | 11 + after/plugin/autopairs.lua | 6 + {lua/core/overrides => after/plugin}/cmp.lua | 38 +- .../overrides => after/plugin}/colorizer.lua | 7 +- after/plugin/comment.lua | 26 ++ after/plugin/dapui.lua | 6 + after/plugin/fidget.lua | 14 + after/plugin/gitsigns.lua | 28 ++ after/plugin/hlargs.lua | 6 + after/plugin/iconpicker.lua | 6 + after/plugin/indent-blankline.lua | 17 + after/plugin/jabs.lua | 23 ++ after/plugin/lsp.lua | 105 ++++++ after/plugin/lspsignature.lua | 12 + .../snip.lua => after/plugin/luasnip.lua | 7 +- after/plugin/marks.lua | 9 + after/plugin/mason-dap.lua | 8 + after/plugin/mason.lua | 29 ++ after/plugin/masontool.lua | 18 + after/plugin/neorg.lua | 34 ++ after/plugin/notify.lua | 16 + after/plugin/project.lua | 10 + after/plugin/scrollbar.lua | 22 ++ {lua/core/overrides => after/plugin}/sfm.lua | 26 +- after/plugin/smartsplits.lua | 28 ++ after/plugin/startpage.lua | 71 ++++ after/plugin/statusline.lua | 136 +++++++ after/plugin/tabline.lua | 9 + .../overrides => after/plugin}/telescope.lua | 19 +- after/plugin/toggleterm.lua | 33 ++ .../overrides => after/plugin}/trouble.lua | 7 +- after/plugin/ts.lua | 27 ++ after/plugin/tsc.lua | 10 + after/plugin/tsj.lua | 9 + after/plugin/urlview.lua | 8 + after/plugin/whichkey.lua | 20 ++ init.lua | 18 +- lua/.luarc.json | 56 +++ lua/bootstrap.lua | 7 + lua/components.lua | 340 ++++++++++++++++++ lua/core/auto.lua | 87 ++--- lua/core/binds.lua | 148 ++++++++ lua/core/cmds.lua | 6 + lua/core/handler.lua | 7 + lua/core/highlight.lua | 50 +++ lua/core/init.lua | 6 - lua/core/maps.lua | 165 --------- lua/core/opts.lua | 225 ++---------- lua/core/overrides/alpha.lua | 260 -------------- lua/core/overrides/cmpluasnipchoice.lua | 3 - lua/core/overrides/hover.lua | 18 - lua/core/overrides/indentblankline.lua | 22 -- lua/core/overrides/init.lua | 24 -- lua/core/overrides/lspkind.lua | 1 - lua/core/overrides/lspzero.lua | 17 - lua/core/overrides/lualine.lua | 145 -------- lua/core/overrides/modicator.lua | 18 - lua/core/overrides/neoclip.lua | 9 - lua/core/overrides/neorg.lua | 18 - lua/core/overrides/notify.lua | 14 - lua/core/overrides/scrollbar.lua | 29 -- lua/core/overrides/smartsplits.lua | 7 - lua/core/overrides/toggleterm.lua | 19 - lua/core/overrides/treesitter.lua | 15 - lua/core/overrides/treesj.lua | 3 - lua/core/overrides/truezen.lua | 13 - lua/core/overrides/whichkey.lua | 8 - lua/core/plugins.lua | 176 ++++----- lua/{core/snippets => snippet}/c.lua | 0 lua/{core/snippets => snippet}/lua.lua | 0 lua/{core/snippets => snippet}/makefile.lua | 0 .../init.lua => snippet/shorthands.lua} | 4 - pics/alpha.png | Bin 32779 -> 0 bytes pics/editing-c.png | Bin 124122 -> 0 bytes spell/en.utf-8.add.spl | Bin 0 -> 32 bytes 77 files changed, 1611 insertions(+), 1267 deletions(-) delete mode 100644 README.md create mode 100644 after/ftplugin/help.lua create mode 100644 after/ftplugin/java.lua create mode 100644 after/plugin/autopairs.lua rename {lua/core/overrides => after/plugin}/cmp.lua (80%) rename {lua/core/overrides => after/plugin}/colorizer.lua (51%) create mode 100644 after/plugin/comment.lua create mode 100644 after/plugin/dapui.lua create mode 100644 after/plugin/fidget.lua create mode 100644 after/plugin/gitsigns.lua create mode 100644 after/plugin/hlargs.lua create mode 100644 after/plugin/iconpicker.lua create mode 100644 after/plugin/indent-blankline.lua create mode 100644 after/plugin/jabs.lua create mode 100644 after/plugin/lsp.lua create mode 100644 after/plugin/lspsignature.lua rename lua/core/overrides/snip.lua => after/plugin/luasnip.lua (51%) create mode 100644 after/plugin/marks.lua create mode 100644 after/plugin/mason-dap.lua create mode 100644 after/plugin/mason.lua create mode 100644 after/plugin/masontool.lua create mode 100644 after/plugin/neorg.lua create mode 100644 after/plugin/notify.lua create mode 100644 after/plugin/project.lua create mode 100644 after/plugin/scrollbar.lua rename {lua/core/overrides => after/plugin}/sfm.lua (64%) create mode 100644 after/plugin/smartsplits.lua create mode 100644 after/plugin/startpage.lua create mode 100644 after/plugin/statusline.lua create mode 100644 after/plugin/tabline.lua rename {lua/core/overrides => after/plugin}/telescope.lua (66%) create mode 100644 after/plugin/toggleterm.lua rename {lua/core/overrides => after/plugin}/trouble.lua (60%) create mode 100644 after/plugin/ts.lua create mode 100644 after/plugin/tsc.lua create mode 100644 after/plugin/tsj.lua create mode 100644 after/plugin/urlview.lua create mode 100644 after/plugin/whichkey.lua create mode 100644 lua/.luarc.json create mode 100644 lua/bootstrap.lua create mode 100644 lua/components.lua create mode 100644 lua/core/binds.lua create mode 100644 lua/core/cmds.lua create mode 100644 lua/core/handler.lua create mode 100644 lua/core/highlight.lua delete mode 100644 lua/core/init.lua delete mode 100644 lua/core/maps.lua delete mode 100644 lua/core/overrides/alpha.lua delete mode 100644 lua/core/overrides/cmpluasnipchoice.lua delete mode 100644 lua/core/overrides/hover.lua delete mode 100644 lua/core/overrides/indentblankline.lua delete mode 100644 lua/core/overrides/init.lua delete mode 100644 lua/core/overrides/lspkind.lua delete mode 100644 lua/core/overrides/lspzero.lua delete mode 100644 lua/core/overrides/lualine.lua delete mode 100644 lua/core/overrides/modicator.lua delete mode 100644 lua/core/overrides/neoclip.lua delete mode 100644 lua/core/overrides/neorg.lua delete mode 100644 lua/core/overrides/notify.lua delete mode 100644 lua/core/overrides/scrollbar.lua delete mode 100644 lua/core/overrides/smartsplits.lua delete mode 100644 lua/core/overrides/toggleterm.lua delete mode 100644 lua/core/overrides/treesitter.lua delete mode 100644 lua/core/overrides/treesj.lua delete mode 100644 lua/core/overrides/truezen.lua delete mode 100644 lua/core/overrides/whichkey.lua rename lua/{core/snippets => snippet}/c.lua (100%) rename lua/{core/snippets => snippet}/lua.lua (100%) rename lua/{core/snippets => snippet}/makefile.lua (100%) rename lua/{core/snippets/init.lua => snippet/shorthands.lua} (91%) delete mode 100644 pics/alpha.png delete mode 100644 pics/editing-c.png create mode 100644 spell/en.utf-8.add.spl diff --git a/README.md b/README.md deleted file mode 100644 index e3e62a1..0000000 --- a/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# muh neovim config - -#### some goals for my config: -- reduce the use of nerdfonts -- keep as simple as possible without losing functionality - -## screenshots - - - -## plugins -
click me to view the plugins that are currently in muh config - - - [essentials](https://github.com/tamton-aquib/essentials.nvim) - - [alpha-nvim](https://github.com/goolord/alpha-nvim) - - [nvim-scrollbar](https://github.com/petertriho/nvim-scrollbar) - - [nvim-tetris](https://github.com/alec-gibson/nvim-tetris) - - [duckytype](https://github.com/kwakzalver/duckytype.nvim) - - [modicator](https://github.com/melkster/modicator.nvim) - - [murmur](https://github.com/nyngwang/murmur.lua) - - [pantran](https://github.com/potamides/pantran.nvim) - - [jellybeans-nvim](https://github.com/metalelf0/jellybeans-nvim) - - [lush.nvim](https://github.com/rktjmp/lush.nvim) - - [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim) - - [barbacue.nvim](https://github.com/utilyre/barbecue.nvim) - - [nvim-navic](https://github.com/SmiteshP/nvim-navic) - - [indent-blankline.nvim](https://github.com/lukas-reineke/indent-blankline.nvim) - - [gitsigns.nvim](https://github.com/lewis6991/gitsigns.nvim) - - [marks.nvim](https://github.com/chentoast/marks.nvim) - - [which-key.nvim](https://github.com/folke/which-key.nvim) - - [smart-splits](https://github.com/mrjones2014/smart-splits.nvim) - - [bufresize](https://github.com/kwkarlwang/bufresize.nvim) - - [nvim-notify](https://github.com/rcarriga/nvim-notify) - - [cosmic-ui](https://github.com/CosmicNvim/cosmic-ui) - - [nui.nvim](https://github.com/MunifTanjim/nui.nvim) - - [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) - - [telescope-file-browser.nvim](https://github.com/nvim-telescope/telescope-file-browser.nvim) - - [telescope-ui-select.nvim](https://github.com/nvim-telescope/telescope-ui-select.nvim) - - [plenary.nvim](https://github.com/nvim-lua/plenary.nvim) - - [telescope-undo.nvim](https://github.com/debugloop/telescope-undo.nvim) - - [nvim-neoclip.lua](https://github.com/AckslD/nvim-neoclip.lua) - - [intellitab.nvim](https://github.com/pta2002/intellitab.nvim) - - [comment.nvim](https://github.com/numToStr/Comment.nvim) - - [trouble.nvim](https://github.com/folke/trouble.nvim) - - [todo-comments.nvim](https://github.com/folke/todo-comments.nvim) - - [toggleterm.nvim](https://github.com/akinsho/toggleterm.nvim) - - [diffview.nvim](https://github.com/sindrets/diffview.nvim) - - [nvim-rooter.lua](https://github.com/notjedi/nvim-rooter.lua) - - [venn.nvim](https://github.com/jbyuki/venn.nvim) - - [neorg](https://github.com/nvim-neorg/neorg) - - [true-zen.nvim](https://github.com/loqusion/true-zen.nvim) - - [high-str.nvim](https://github.com/Pocco81/high-str.nvim) - - [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter) - - [hlargs](https://github.com/m-demare/hlargs.nvim) - - [treesj](https://github.com/Wansmer/treesj) - - [hover.nvim](https://github.com/lewis6991/hover.nvim) - - [nvim-colorizer.lua](https://github.com/nvchad/nvim-colorizer.lua) - - [lsp-zero.nvim](https://github.com/VonHeikemen/lsp-zero.nvim) - - [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) - - [cmp-buffer](https://github.com/hrsh7th/cmp-buffer) - - [cmp-path](https://github.com/hrsh7th/cmp-path) - - [cmp-calc](https://github.com/hrsh7th/cmp-calc) - - [cmp_luasnip](https://github.com/saadparwaiz1/cmp_luasnip) - - [cmp-nvim-lua](https://github.com/hrsh7th/cmp-nvim-lua) - - [cmp-nvim-lsp](https://github.com/hrsh7th/cmp-nvim-lsp) - - [cmp-under-comparator](https://github.com/lukas-reineke/cmp-under-comparator) - - [lspkind.nvim](https://github.com/onsails/lspkind.nvim) - - [LuaSnip](https://github.com/L3MON4D3/LuaSnip) - - [friendly-snippets](https://github.com/rafamadriz/friendly-snippets) - - [cmp-luasnip-choice](https://github.com/doxnit/cmp-luasnip-choice) - - [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig) - - [mason.nvim](https://github.com/williamboman/mason.nvim) - - [mason-lspconfig.nvim](https://github.com/williamboman/mason-lspconfig.nvim) - - [nvim-autopairs](https://github.com/windwp/nvim-autopairs) - -
- -PS: sry about the kitchen sink commits, I just learned about `git add --patch` diff --git a/after/ftplugin/help.lua b/after/ftplugin/help.lua new file mode 100644 index 0000000..fe6caae --- /dev/null +++ b/after/ftplugin/help.lua @@ -0,0 +1 @@ +vim.treesitter.start() diff --git a/after/ftplugin/java.lua b/after/ftplugin/java.lua new file mode 100644 index 0000000..575ab1c --- /dev/null +++ b/after/ftplugin/java.lua @@ -0,0 +1,11 @@ +local status_ok, jdtls = pcall(require, "jdtls") +if not status_ok then + return +end + +jdtls.start_or_attach { + cmd = {'/home/squibid/Downloads/jdt-lang-serv/bin/jdtls'}, + root_dir = vim.fs.dirname( + vim.fs.find({ 'gradlew', '.git', 'mvnw' }, { upward = true })[1] + ), +} diff --git a/after/plugin/autopairs.lua b/after/plugin/autopairs.lua new file mode 100644 index 0000000..ddf106f --- /dev/null +++ b/after/plugin/autopairs.lua @@ -0,0 +1,6 @@ +local status_ok, autopairs = pcall(require, "nvim-autopairs") +if not status_ok then + return +end + +autopairs.setup{} diff --git a/lua/core/overrides/cmp.lua b/after/plugin/cmp.lua similarity index 80% rename from lua/core/overrides/cmp.lua rename to after/plugin/cmp.lua index 5fbb2a5..f69fc43 100644 --- a/lua/core/overrides/cmp.lua +++ b/after/plugin/cmp.lua @@ -1,3 +1,36 @@ +local status_ok, cmp = pcall(require, "cmp") +if not status_ok then + return +end + +local lspicons = { + Text = 'Tx', + Snippet = '<>', + Method = '{}', + Function = '{}', + Constructor = '{}', + Field = '""', + Variable = 'x=', + Class = '{}', + Interface = '.h', + Module = '{}', + Property = '@p', + Unit = ' ', + Value = ' ', + Enum = 'E#', + Keyword = '$1', + Color = ' ', + File = '#`', + Reference = ' ', + Folder = '[/', + EnumMember = ' ', + Constant = 'c=', + Struct = ' ', + Event = ' ', + Operator = '%*', + TypeParameter = ' ', +} + local has_words_before = function() unpack = unpack or table.unpack local line, col = unpack(a.nvim_win_get_cursor(0)) @@ -5,7 +38,6 @@ local has_words_before = function() [1]:sub(col, col):match("%s") == nil end -local cmp = require('cmp') local luasnip = require('luasnip') require("luasnip.loaders.from_vscode").lazy_load() @@ -27,7 +59,7 @@ cmp.setup { window = { completion = { winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None", - col_offset = -3, + col_offset = 0, side_padding = 0, } }, @@ -58,7 +90,7 @@ cmp.setup { elseif has_words_before() then cmp.complete() else - fallback() + require("intellitab").indent() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) diff --git a/lua/core/overrides/colorizer.lua b/after/plugin/colorizer.lua similarity index 51% rename from lua/core/overrides/colorizer.lua rename to after/plugin/colorizer.lua index a18101e..830e1b9 100644 --- a/lua/core/overrides/colorizer.lua +++ b/after/plugin/colorizer.lua @@ -1,4 +1,9 @@ -require('colorizer').setup { +local status_ok, colorizer = pcall(require, "colorizer") +if not status_ok then + return +end + +colorizer.setup { filetypes = { '*' }, user_default_options = { names = false, diff --git a/after/plugin/comment.lua b/after/plugin/comment.lua new file mode 100644 index 0000000..e95b823 --- /dev/null +++ b/after/plugin/comment.lua @@ -0,0 +1,26 @@ +local status_ok, comment = pcall(require, "Comment") +if not status_ok then + return +end + +comment.setup { + toggler = { + line = 'gcc', + block = 'gbc', + }, + opleader = { + line = 'gc', + block = 'gb', + }, + extra = { + above = 'gcO', + below = 'gco', + eol = 'gcA', + }, + mappings = { + basic = true, + extra = true, + }, + pre_hook = nil, + post_hook = nil, +} diff --git a/after/plugin/dapui.lua b/after/plugin/dapui.lua new file mode 100644 index 0000000..56cfb1b --- /dev/null +++ b/after/plugin/dapui.lua @@ -0,0 +1,6 @@ +local status_ok, dapui = pcall(require, "dapui") +if not status_ok then + return +end + +dapui.setup {} diff --git a/after/plugin/fidget.lua b/after/plugin/fidget.lua new file mode 100644 index 0000000..ee412a7 --- /dev/null +++ b/after/plugin/fidget.lua @@ -0,0 +1,14 @@ +local status_ok, fidget = pcall(require, "fidget") +if not status_ok then + return +end + +fidget.setup { + text = { + spinner = "line", + done = ":)", + }, + window = { + zindex = 1, + } +} diff --git a/after/plugin/gitsigns.lua b/after/plugin/gitsigns.lua new file mode 100644 index 0000000..b5436ae --- /dev/null +++ b/after/plugin/gitsigns.lua @@ -0,0 +1,28 @@ +local status_ok, gitsigns = pcall(require, "gitsigns") +if not status_ok then + return +end + +gitsigns.setup { + signs = { + add = { text = '│' }, + change = { text = '│' }, + delete = { text = '-' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + untracked = { text = '┆' }, + }, + signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` + numhl = false, -- Toggle with `:Gitsigns toggle_numhl` + linehl = false, -- Toggle with `:Gitsigns toggle_linehl` + word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` + watch_gitdir = { + interval = 1000, + follow_files = true + }, + attach_to_untracked = true, + current_line_blame_formatter = ', - ', + preview_config = { + border = 'shadow', + }, +} diff --git a/after/plugin/hlargs.lua b/after/plugin/hlargs.lua new file mode 100644 index 0000000..85aa905 --- /dev/null +++ b/after/plugin/hlargs.lua @@ -0,0 +1,6 @@ +local status_ok, hlargs = pcall(require, "hlargs") +if not status_ok then + return +end + +hlargs.setup {} diff --git a/after/plugin/iconpicker.lua b/after/plugin/iconpicker.lua new file mode 100644 index 0000000..e616a67 --- /dev/null +++ b/after/plugin/iconpicker.lua @@ -0,0 +1,6 @@ +local status_ok, iconpicker = pcall(require, "icon-picker") +if not status_ok then + return +end + +iconpicker.setup {} diff --git a/after/plugin/indent-blankline.lua b/after/plugin/indent-blankline.lua new file mode 100644 index 0000000..830ad99 --- /dev/null +++ b/after/plugin/indent-blankline.lua @@ -0,0 +1,17 @@ +local status_ok, indent_blankline = pcall(require, "indent_blankline") +if not status_ok then + return +end + +indent_blankline.setup { + char = "", + char_highlight_list = { + "IndentBlanklineIndent1", + "IndentBlanklineIndent2", + }, + space_char_highlight_list = { + "IndentBlanklineIndent1", + "IndentBlanklineIndent2", + }, + show_trailing_blankline_indent = false, +} diff --git a/after/plugin/jabs.lua b/after/plugin/jabs.lua new file mode 100644 index 0000000..123de41 --- /dev/null +++ b/after/plugin/jabs.lua @@ -0,0 +1,23 @@ +local status_ok, jabs = pcall(require, "jabs") +if not status_ok then + return +end + +jabs.setup { + offset = { bottom = 2, right = 2 }, + + symbols = { + current = "@", + split = "|", + alternate = "*", + hidden = "\\", + locked = "=", + ro = "=", + edited = "+", + terminal = ">_", + default_file = "~", + terminal_symbol = ">_", + }, + + use_devicons = false, +} diff --git a/after/plugin/lsp.lua b/after/plugin/lsp.lua new file mode 100644 index 0000000..50b6201 --- /dev/null +++ b/after/plugin/lsp.lua @@ -0,0 +1,105 @@ +local status_ok, lspconfig = pcall(require, "lspconfig") +if not status_ok then + return +end + +local function lsp_keymaps(bufnr) + local map = function(m, lhs, rhs) + local opts = {remap = false, silent = true, buffer = bufnr} + vim.keymap.set(m, lhs, rhs, opts) + end + + -- LSP actions + map('n', 'K', 'lua vim.lsp.buf.hover()') + map('n', 'gd', 'lua vim.lsp.buf.definition()') + map('n', 'gD', 'lua vim.lsp.buf.declaration()') + map('n', 'gi', 'lua vim.lsp.buf.implementation()') + map('n', 'go', 'lua vim.lsp.buf.type_definition()') + map('n', 'gr', 'lua vim.lsp.buf.references()') + map('n', '', 'lua vim.lsp.buf.signature_help()') + map('n', '', 'lua vim.lsp.buf.rename()') + map('n', '', 'lua vim.lsp.buf.code_action()') + + -- Diagnostics + map('n', '', 'lua vim.diagnostic.open_float()') + map('n', '[d', 'lua vim.diagnostic.goto_prev()') + map('n', ']d', 'lua vim.diagnostic.goto_next()') +end + +local function lsp_settings() + local sign = function(opts) + vim.fn.sign_define(opts.name, { + texthl = opts.name, + text = opts.text, + numhl = '' + }) + end + + sign({name = 'DiagnosticSignError', text = 'x'}) + sign({name = 'DiagnosticSignWarn', text = '!'}) + sign({name = 'DiagnosticSignHint', text = 'h'}) + sign({name = 'DiagnosticSignInfo', text = 'i'}) + + vim.diagnostic.config({ + virtual_text = false, + signs = true, + update_in_insert = false, + underline = true, + severity_sort = true, + float = { + focusable = false, + show_header = true, + style = 'minimal', + border = 'shadow', + source = 'always', + header = '', + prefix = '* ', + }, + }) + + vim.lsp.handlers['textDocument/hover'] = vim.lsp.with( vim.lsp.handlers.hover, + { border = 'shadow', } + ) + + vim.lsp.handlers['textDocument/signatureHelp'] = vim.lsp.with( + vim.lsp.handlers.signature_help, + {border = 'shadow'} + ) + + local command = vim.api.nvim_create_user_command + + command('LspWorkspaceAdd', function() + vim.lsp.buf.add_workspace_folder() + end, {desc = 'Add folder to workspace'}) + + command('LspWorkspaceList', function() + vim.notify(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, {desc = 'List workspace folders'}) + + command('LspWorkspaceRemove', function() + vim.lsp.buf.remove_workspace_folder() + end, {desc = 'Remove folder from workspace'}) +end + +local function lsp_attach(client, bufnr) + local buf_command = vim.api.nvim_buf_create_user_command + + lsp_keymaps(bufnr) + + buf_command(bufnr, 'LspFormat', function() + vim.lsp.buf.format() + end, {desc = 'Format buffer with language server'}) +end + +lsp_settings() + +require('mason').setup({}) +require('mason-lspconfig').setup({}) + +local get_servers = require('mason-lspconfig').get_installed_servers +for _, server_name in ipairs(get_servers()) do + lspconfig[server_name].setup({ + on_attach = lsp_attach, + capabilities = require('cmp_nvim_lsp').default_capabilities(), + }) +end diff --git a/after/plugin/lspsignature.lua b/after/plugin/lspsignature.lua new file mode 100644 index 0000000..7e2c1b2 --- /dev/null +++ b/after/plugin/lspsignature.lua @@ -0,0 +1,12 @@ +local status_ok, lspsignature = pcall(require, "lsp_signature") +if not status_ok then + return +end + +lspsignature.setup { + hint_enable = false, + floating_window = true, + handler_opts = { + border = "shadow" + } +} diff --git a/lua/core/overrides/snip.lua b/after/plugin/luasnip.lua similarity index 51% rename from lua/core/overrides/snip.lua rename to after/plugin/luasnip.lua index c11236e..1374bc3 100644 --- a/lua/core/overrides/snip.lua +++ b/after/plugin/luasnip.lua @@ -1,6 +1,9 @@ -local ls = require('luasnip') +local status_ok, luasnip = pcall(require, "luasnip") +if not status_ok then + return +end -ls.config.set_config { +luasnip.config.set_config { -- return back into snippet history = true, diff --git a/after/plugin/marks.lua b/after/plugin/marks.lua new file mode 100644 index 0000000..be51c58 --- /dev/null +++ b/after/plugin/marks.lua @@ -0,0 +1,9 @@ +local status_ok, marks = pcall(require, "marks") +if not status_ok then + return +end + +marks.setup { + default_mappings = true, + builtin_marks = nil, +} diff --git a/after/plugin/mason-dap.lua b/after/plugin/mason-dap.lua new file mode 100644 index 0000000..0b7a57e --- /dev/null +++ b/after/plugin/mason-dap.lua @@ -0,0 +1,8 @@ +local status_ok, masondap = pcall(require, "mason-nvim-dap") +if not status_ok then + return +end + +masondap.setup { + automatic_setup = true, +} diff --git a/after/plugin/mason.lua b/after/plugin/mason.lua new file mode 100644 index 0000000..ccd812e --- /dev/null +++ b/after/plugin/mason.lua @@ -0,0 +1,29 @@ +local status_ok, mason = pcall(require, "mason") +if not status_ok then + return +end + +mason.setup({ + ui = { + border = "shadow", + width = 0.6, + height = 0.9, + + icons = { + package_installed = "+", + package_pending = "?", + package_uninstalled = "x" + } + }, + keymaps = { + toggle_package_expand = "", + install_package = "i", -- Keymap to install the package under the current cursor position + update_package = "u", -- Keymap to reinstall/update the package under the current cursor position + check_package_version = "c", -- Keymap to check for new version for the package under the current cursor position + update_all_packages = "U", -- Keymap to update all installed packages + check_outdated_packages = "C", -- Keymap to check which installed packages are outdated + uninstall_package = "r", -- Keymap to uninstall a package + cancel_installation = "", -- Keymap to cancel a package installation + apply_language_filter = "", -- Keymap to apply language filter + }, +}) diff --git a/after/plugin/masontool.lua b/after/plugin/masontool.lua new file mode 100644 index 0000000..ee9d012 --- /dev/null +++ b/after/plugin/masontool.lua @@ -0,0 +1,18 @@ +local status_ok, masontool = pcall(require, "mason-tool-installer") +if not status_ok then + return +end + +masontool.setup { + -- a list of all tools you want to ensure are installed upon + -- start; they should be the names Mason uses for each tool + ensure_installed = { + 'lua-language-server', + 'stylua', + 'shellcheck', + 'editorconfig-checker', + 'shfmt', + 'clangd', + 'clang-format', + }, +} diff --git a/after/plugin/neorg.lua b/after/plugin/neorg.lua new file mode 100644 index 0000000..2331864 --- /dev/null +++ b/after/plugin/neorg.lua @@ -0,0 +1,34 @@ +local status_ok, neorg = pcall(require, "neorg") +if not status_ok then + return +end + +neorg.setup { + load = { + ["core.defaults"] = {}, + ["core.dirman"] = { + config = { + workspaces = { + home = "~/Documents/notes/home", + } + } + }, + ["core.concealer"] = { + config = { + dim_code_blocks = { + padding = { right = 2, }, + content_only = false, + width = "content", + }, + } + }, + ["core.export"] = {}, + ["core.completion"] = { + config = { + engine = "nvim-cmp", + } + }, + } +} + +-- vim.cmd('Neorg sync-parsers') diff --git a/after/plugin/notify.lua b/after/plugin/notify.lua new file mode 100644 index 0000000..1a3d1e9 --- /dev/null +++ b/after/plugin/notify.lua @@ -0,0 +1,16 @@ +local status_ok, notify = pcall(require, "notify") +if not status_ok then + return +end + +notify.setup { + icons = { + DEBUG = "B", + ERROR = "x", + INFO = "i", + TRACE = "t", + WARN = "!" + }, + minimum_width = 35, + max_width = 80, +} diff --git a/after/plugin/project.lua b/after/plugin/project.lua new file mode 100644 index 0000000..fd44e4c --- /dev/null +++ b/after/plugin/project.lua @@ -0,0 +1,10 @@ +local status_ok, project = pcall(require, "project_nvim") +if not status_ok then + return +end + +project.setup { + detection_methods = { "pattern" }, + patterns = { ".git", "_darcs", ".hg", ".bzr", ".svn", "Makefile", "package.json" }, + show_hidden = false, +} diff --git a/after/plugin/scrollbar.lua b/after/plugin/scrollbar.lua new file mode 100644 index 0000000..7421536 --- /dev/null +++ b/after/plugin/scrollbar.lua @@ -0,0 +1,22 @@ +local status_ok, scrollbar = pcall(require, "scrollbar") +if not status_ok then + return +end + +scrollbar.setup({ + hide_if_all_visible = true, + handle = { + hide_if_all_visible = true, + }, + marks = { + Cursor = { + text = "*", + } + }, + handlers = { + cursor = true, + diagnostic = true, + gitsigns = true, -- Requires gitsigns + handle = true, + }, +}) diff --git a/lua/core/overrides/sfm.lua b/after/plugin/sfm.lua similarity index 64% rename from lua/core/overrides/sfm.lua rename to after/plugin/sfm.lua index 06c77d1..dcbbe95 100644 --- a/lua/core/overrides/sfm.lua +++ b/after/plugin/sfm.lua @@ -1,12 +1,18 @@ -local sfm = require('sfm') +local status_ok, sfm = pcall(require, "sfm") +if not status_ok then + return +end sfm.setup { view = { - side = "left", -- side of the tree, can be `left`, `right` - width = 30 + side = 'right', + width = 35, }, mappings = { custom_only = false, + list = { + -- user mappings go here + } }, renderer = { icons = { @@ -24,17 +30,17 @@ sfm.setup { folder_closed = "", folder_open = "", file = "", - }, + } } - }, + } }:load_extension('sfm-git', { icons = { - staged = "^", unstaged = "+", - unmerged = "", - renamed = ">", + staged = "S", + unmerged = "U", + renamed = "r", untracked = "?", - deleted = "x", - ignored = "#" + deleted = "-", + ignored = "?", } }) diff --git a/after/plugin/smartsplits.lua b/after/plugin/smartsplits.lua new file mode 100644 index 0000000..54fc07c --- /dev/null +++ b/after/plugin/smartsplits.lua @@ -0,0 +1,28 @@ +local status_ok, smartsplits = pcall(require, "smart-splits") +if not status_ok then + return +end + +smartsplits.setup { + default_amount = 3, + resize_mode = { + quit_key = 'r', + resize_keys = { + '', + '', + '', + '', + }, + silent = true, + hooks = { + on_enter = function() + vim.notify("Resize mode on", vim.log.levels.INFO, { title = "Smart Splits" }) + vim.cmd('unmap r') + end, + on_leave = function() + vim.notify("Resize Mode off", vim.log.levels.INFO, { title = "Smart Splits" }) + vim.keymap.set('n', 'r', smartsplits.start_resize_mode, {}) + end, + }, + }, +} diff --git a/after/plugin/startpage.lua b/after/plugin/startpage.lua new file mode 100644 index 0000000..2f12e56 --- /dev/null +++ b/after/plugin/startpage.lua @@ -0,0 +1,71 @@ +local status_ok, alpha = pcall(require, "alpha") +if not status_ok then + return +end + +-- buttons +local function button(sc, txt, keybind) + local opts = { + position = "center", + shortcut = sc, + cursor = 5, + width = 80, + align_shortcut = "right", + hl_shortcut = "Keyword", + } + local function on_press() + local key = vim.api.nvim_replace_termcodes(keybind .. "", true, false, true) + vim.api.nvim_feedkeys(key, "t", false) + end + + return { + type = "button", + val = txt, + on_press = on_press, + opts = opts, + } +end + +-- actual config +local R = {} + +R.width = vim.api.nvim_win_get_width(0) +R.height = vim.api.nvim_win_get_height(0) + +if R.width >= 120 then + alpha.setup { + layout = { + { type = "padding", val = math.floor(R.height / 2.5) }, + button([[ `'::. `'::::. ]], "Recent Files", "Telescope oldfiles"), + button([[ _________H ,%%&%, _____A_ ]], "New File", "ene"), + button([[ /\ _ \%&&%%&% / /\ ]], "Update Plugins", "DepSync"), + button([[ / \___/^\___\%&%%&& __/__/\__/ \___ ]], "", ""), + button([[ | | [] [] |%\Y&%' /__|" '' "| /___/\ ]], "", ""), + button([[ | | .-. | || |''|"'||'"| |' '|| ]], "", ""), + button([[~~@._|@@_|||_@@|~||~~~ ~`""`""))""`"`""""`~~]], "", ""), + button([[ `""") )"""` // ]], "", ""), + } + } +end +if R.width <= 119 then + local header = { + [[ `'::. `'::::. ]], + [[ _________H ,%%&%, _____A_ ]], + [[ /\ _ \%&&%%&% / /\ ]], + [[ / \___/^\___\%&%%&& __/__/\__/ \___ ]], + [[ | | [] [] |%\Y&%' /__|" '' "| /___/\ ]], + [[ | | .-. | || |''|"'||'"| |' '|| ]], + [[~~@._|@@_|||_@@|~||~~~ ~`""`""))""`"`""""`~~]], + [[ `""") )"""` // ]], + } + alpha.setup { + layout = { + { type = "padding", val = math.floor(R.height / 2.5) }, + { type = "text", val = header, opts = { position = "center", hl = "AlphaHeader" } }, + { type = "padding", val = 1 }, + button([[]], "Recent Files", "Telescope oldfiles"), + button([[]], "New File", "ene"), + button([[]], "Update Plugins", "DepSync"), + } + } +end diff --git a/after/plugin/statusline.lua b/after/plugin/statusline.lua new file mode 100644 index 0000000..d3a6ed2 --- /dev/null +++ b/after/plugin/statusline.lua @@ -0,0 +1,136 @@ +local status_ok, el = pcall(require, "el") +if not status_ok then + return +end + +el.reset_windows() + +local builtin = require "el.builtin" +local sections = require "el.sections" +local c = require "components" + +-- color setup +local hl_statusline = "StatusLine" +--diagnostic colors +local hl_hint = "DiagnosticHint" +local hl_info = "DiagnosticInfo" +local hl_warn = "DiagnosticWarn" +local hl_err = "DiagnosticError" +-- git colors +local hl_red = "ErrorMsg" +local hl_green = "diffAdded" +local hl_yellow = "WarningMsg" +local highlights = { + -- diagnostic colors + diag_err = c.extract_hl({ + bg = { [hl_statusline] = "bg" }, + fg = { [hl_err] = "fg" }, + bold = true, + }), + diag_warn = c.extract_hl({ + bg = { [hl_statusline] = "bg" }, + fg = { [hl_warn] = "fg" }, + bold = true, + }), + diag_info = c.extract_hl({ + bg = { [hl_statusline] = "bg" }, + fg = { [hl_info] = "fg" }, + bold = true, + }), + diag_hint = c.extract_hl({ + bg = { [hl_statusline] = "bg" }, + fg = { [hl_hint] = "fg" }, + bold = true, + }), + + -- git colors + red_fg = c.extract_hl({ + bg = { [hl_statusline] = "bg" }, + fg = { [hl_red] = "fg" }, + bold = true, + }), + green_fg = c.extract_hl({ + bg = { [hl_statusline] = "bg" }, + fg = { [hl_green] = "fg" }, + bold = true, + }), + yellow_fg = c.extract_hl({ + bg = { [hl_statusline] = "bg" }, + fg = { [hl_yellow] = "fg" }, + bold = true, + }), +} + +-- modes +local modes = { + -- display name, mode, highlight group + n = { "Normal", "N" }, + niI = { "Normal", "N" }, + niR = { "Normal", "N" }, + niV = { "Normal", "N" }, + no = { "N·OpPd", "?" }, + v = { "Visual", "V" }, + V = { "V·Line", "Vl" }, + [""] = { "V·Block", "Vb" }, + s = { "Select", "S" }, + S = { "S·Line", "Sl" }, + [""] = { "S·Block", "Sb" }, + i = { "Insert", "I" }, + ic = { "ICompl", "Ic" }, + R = { "Replace", "R" }, + Rv = { "VReplace", "Rv" }, + c = { "Command", "C" }, + cv = { "Vim Ex", "E" }, + ce = { "Ex (r)", "E" }, + r = { "Prompt", "P" }, + rm = { "More ", "M" }, + ["r?"] = { "Confirm", "Cn" }, + ["!"] = { "Shell ", "S" }, + nt = { "Term ", "T" }, + t = { "Term ", "T" }, +} + +el.setup { + generator = function() + + local items = { + { c.mode { modes = modes, fmt = " %s %s ", icon = "", hl_icon_only = false } }, + { sections.split, required = true }, + { sections.collapse_builtin { { builtin.filetype }, { " " } } }, + { sections.maximum_width(builtin.tail_file, 0.50), required = true }, + { sections.collapse_builtin { { " " }, { builtin.modified_flag } } }, + { sections.split, required = true }, + { c.diagnostics { + fmt = "[%s]", lsp = true, + hl_err = highlights.diag_err, + hl_warn = highlights.diag_warn, + hl_info = highlights.diag_info, + hl_hint = highlights.diag_hint, + icon_err = 'x', icon_warn = '!', icon_info = 'i', icon_hint = 'h' + } + }, + { c.git_branch { fmt = "%s *%s", icon = "" } }, + { c.git_changes_buf { + fmt = "[%s]", + icon_insert = "+", + icon_change = "~", + icon_delete = "-", + hl_insert = highlights.green_fg, + hl_change = highlights.yellow_fg, + hl_delete = highlights.red_fg, + } + }, + } + + local add_item = function(result, item) + table.insert(result, item) + end + + local result = {} + for _, item in ipairs(items) do + add_item(result, item) + end + + return result +end, +} diff --git a/after/plugin/tabline.lua b/after/plugin/tabline.lua new file mode 100644 index 0000000..7ec5cf1 --- /dev/null +++ b/after/plugin/tabline.lua @@ -0,0 +1,9 @@ +local status_ok, luatab = pcall(require, "luatab") +if not status_ok then + return +end + +luatab.setup { + windowCount = function() return '' end, + devicon = function() return '' end, +} diff --git a/lua/core/overrides/telescope.lua b/after/plugin/telescope.lua similarity index 66% rename from lua/core/overrides/telescope.lua rename to after/plugin/telescope.lua index c17e56c..0674b21 100644 --- a/lua/core/overrides/telescope.lua +++ b/after/plugin/telescope.lua @@ -1,13 +1,20 @@ -local telescope = require('telescope') +local status_ok, telescope = pcall(require, "telescope") +if not status_ok then + return +end local actions = require('telescope.actions') telescope.setup { defaults = { - borderchars = { " ", " ", " ", " ", " ", " ", " ", " " }, + borderchars = { + prompt = {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }; + results = {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }; + preview = {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }; + }, sorting_strategy = 'ascending', + layout_strategy = 'bottom_pane', layout_config = { - height = 0.9, - prompt_position = 'top', + height = 0.3, }, mappings = { i = { @@ -25,16 +32,16 @@ telescope.setup { }, extensions = { ["ui-select"] = { - require("telescope.themes").get_dropdown { + require("telescope.themes").get_ivy { -- even more opts } } }, } } -telescope.load_extension('undo') telescope.load_extension('file_browser') telescope.load_extension('ui-select') +telescope.load_extension('projects') a.nvim_create_autocmd('User', { pattern = 'TelescopePreviewerLoaded', diff --git a/after/plugin/toggleterm.lua b/after/plugin/toggleterm.lua new file mode 100644 index 0000000..b0cd2c8 --- /dev/null +++ b/after/plugin/toggleterm.lua @@ -0,0 +1,33 @@ +local status_ok, toggleterm = pcall(require, "toggleterm") +if not status_ok then + return +end + +toggleterm.setup { + shade_terminals = true, + float_opts = { + border = 'shadow', + }, + on_open = function() + vim.opt.cmdheight = 0 + end, + on_close = function() + vim.opt.cmdheight = 1 + end +} + +local term = require('toggleterm.terminal').Terminal +local glow = term:new({ + cmd = "glow", + hidden = true, + direction = "float", + float_opts = { + border = "shadow", + width = 120, + height = 50, + } +}) + +function _glow() + glow:toggle() +end diff --git a/lua/core/overrides/trouble.lua b/after/plugin/trouble.lua similarity index 60% rename from lua/core/overrides/trouble.lua rename to after/plugin/trouble.lua index eabbd7e..bdf9f37 100644 --- a/lua/core/overrides/trouble.lua +++ b/after/plugin/trouble.lua @@ -1,4 +1,9 @@ -require("trouble").setup { +local status_ok, trouble = pcall(require, "trouble") +if not status_ok then + return +end + +trouble.setup { icons = false, fold_open = "v", fold_closed = ">", diff --git a/after/plugin/ts.lua b/after/plugin/ts.lua new file mode 100644 index 0000000..7e5a490 --- /dev/null +++ b/after/plugin/ts.lua @@ -0,0 +1,27 @@ +local status_ok, treesitter = pcall(require, "nvim-treesitter.configs") +if not status_ok then + return +end + +treesitter.setup { + ensure_installed = { + "c", + "lua", + "bash", + "vim", + "vimdoc", + "query", + "git_rebase", + "gitattributes", + "gitcommit", + "gitignore", + "git_config", + }, + + auto_install = true, + + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, +} diff --git a/after/plugin/tsc.lua b/after/plugin/tsc.lua new file mode 100644 index 0000000..70131e7 --- /dev/null +++ b/after/plugin/tsc.lua @@ -0,0 +1,10 @@ +local status_ok, tc = pcall(require, "treesitter-context") +if not status_ok then + return +end + +tc.setup{ + enable = true, + line_numbers = true, + separator = '-', +} diff --git a/after/plugin/tsj.lua b/after/plugin/tsj.lua new file mode 100644 index 0000000..8465a40 --- /dev/null +++ b/after/plugin/tsj.lua @@ -0,0 +1,9 @@ +local status_ok, treesj = pcall(require, "treesj") +if not status_ok then + return +end + +treesj.setup { + use_default_keymaps = false, + max_join_length = 120, +} diff --git a/after/plugin/urlview.lua b/after/plugin/urlview.lua new file mode 100644 index 0000000..1cae07c --- /dev/null +++ b/after/plugin/urlview.lua @@ -0,0 +1,8 @@ +local status_ok, urlview = pcall(require, "urlview") +if not status_ok then + return +end + +urlview.setup { + default_picker = 'telescope', +} diff --git a/after/plugin/whichkey.lua b/after/plugin/whichkey.lua new file mode 100644 index 0000000..66c8a9e --- /dev/null +++ b/after/plugin/whichkey.lua @@ -0,0 +1,20 @@ +local status_ok, whichkey = pcall(require, "which-key") +if not status_ok then + return +end + +whichkey.setup { + icons = { + breadcrumb = '>>', + separator = '->', + }, + winblend = 0, + window = { + border = 'shadow', + margin = { 1, 5, 2, 5 }, + }, + layout = { + width = { min = 20, max = 50 }, + align = 'left', + } +} diff --git a/init.lua b/init.lua index bc64bd9..c24c4a0 100644 --- a/init.lua +++ b/init.lua @@ -1,9 +1,15 @@ --- global shorthands +-- shorhands ------------------------------------------------------------------ o = vim.opt -g = vim.g a = vim.api -cmd = vim.cmd -g.mapleader = " " +g = vim.g +c = vim.cmd --- load config -require('core.init') +-- main lua files ------------------------------------------------------------- +require('bootstrap') +require('core.handler') + +-- call all snippets in the lua/snippets directory ---------------------------- +require('snippet.shorthands') +for _, file in ipairs(vim.fn.readdir(vim.fn.stdpath('config')..'/lua/snippet', [[v:val =~ '\.lua$']])) do + require('snippet.'..file:gsub('%.lua$', '')) +end diff --git a/lua/.luarc.json b/lua/.luarc.json new file mode 100644 index 0000000..5579dc5 --- /dev/null +++ b/lua/.luarc.json @@ -0,0 +1,56 @@ +{ + "diagnostics.globals": [ + "vim", + "a", + "o", + "g" + ], + "workspace.library": [ + "/home/squibid/.local/share/nvim/site/pack/deps/opt/neodev.nvim/types/stable", + "/usr/share/nvim/runtime/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/Comment.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/LuaSnip/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/cmp-buffer/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/cmp-calc/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/cmp-luasnip-choice/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/cmp-nvim-lsp/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/cmp-nvim-lua/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/cmp-path/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/cmp-under-comparator/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/cmp_luasnip/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/dep/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/express_line.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/gitsigns.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/hlargs.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/impatient.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/indent-blankline.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/intellitab.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/lsp_signature.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/lspkind.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/marks.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/mason-lspconfig.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/mason-tool-installer.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/mason.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/mellow.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/modicator.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/neodev.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/nvim-autopairs/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/nvim-cmp/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/nvim-colorizer.lua/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/nvim-lsp-notify/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/nvim-lspconfig/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/nvim-neoclip.lua/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/nvim-notify/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/nvim-scrollbar/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/nvim-treesitter/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/plenary.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/telescope-file-browser.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/telescope-ui-select.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/telescope.nvim/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/treesj/lua", + "/home/squibid/.local/share/nvim/site/pack/deps/opt/which-key.nvim/lua", + "/home/squibid/.config/nvim/lua", + "${3rd}/luv/library" + ], + "workspace.checkThirdParty": false +} \ No newline at end of file diff --git a/lua/bootstrap.lua b/lua/bootstrap.lua new file mode 100644 index 0000000..3312b33 --- /dev/null +++ b/lua/bootstrap.lua @@ -0,0 +1,7 @@ +local path = vim.fn.stdpath("data") .. "/site/pack/deps/opt/dep" + +if vim.fn.empty(vim.fn.glob(path)) > 0 then + vim.fn.system({ "git", "clone", "--depth=1", "https://git.squi.bid/dep", path }) +end + +vim.cmd("packadd dep") diff --git a/lua/components.lua b/lua/components.lua new file mode 100644 index 0000000..6298d35 --- /dev/null +++ b/lua/components.lua @@ -0,0 +1,340 @@ +if not pcall(require, "el") then + return +end + +local Job = require "plenary.job" +local el_sub = require "el.subscribe" + +local M = {} + +function M.extract_hl(spec) + if not spec or vim.tbl_isempty(spec) then return end + local hl_name, hl_opts = { "El" }, {} + for attr, val in pairs(spec) do + if type(val) == "table" then + table.insert(hl_name, attr) + assert(vim.tbl_count(val) == 1) + local hl, what = next(val) + local hlID = vim.fn.hlID(hl) + if hlID > 0 then + table.insert(hl_name, hl) + local col = vim.fn.synIDattr(hlID, what) + if col and #col > 0 then + table.insert(hl_name, what) + hl_opts[attr] = col + end + end + else + -- bold, underline, etc + hl_opts[attr] = val + end + end + hl_name = table.concat(hl_name, "_") + -- if highlight exists, verify it has + -- the correct colorscheme highlights + local newID = vim.fn.hlID(hl_name) + if newID > 0 then + for what, expected in pairs(hl_opts) do + local res = vim.fn.synIDattr(newID, what) + if type(expected) == "boolean" then + -- synIDattr returns '1' for boolean + res = res and res == "1" and true + end + if res ~= expected then + -- need to regen the highlight + -- print("color mismatch", hl_name, what, "e:", expected, "c:", res) + newID = 0 + end + end + end + if newID == 0 then + vim.api.nvim_set_hl(0, hl_name, hl_opts) + end + return hl_name +end + +local function set_hl(hls, s) + if not hls or not s then return s end + hls = type(hls) == "string" and { hls } or hls + for _, hl in ipairs(hls) do + if vim.fn.hlID(hl) > 0 then + return ("%%#%s#%s%%0*"):format(hl, s) + end + end + return s +end + +local function wrap_fnc(opts, fn) + return function(window, buffer) + -- buf_autocmd doesn't send win + if not window and buffer then + window = { win_id = vim.fn.bufwinid(buffer.bufnr) } + end + if opts.hide_inactive and window and + window.win_id ~= vim.api.nvim_get_current_win() then + return "" + end + return fn(window, buffer) + end +end + +M.mode = function(opts) + opts = opts or {} + return wrap_fnc(opts, function(_, _) + local fmt = opts.fmt or "%s%s" + local mode = vim.api.nvim_get_mode().mode + local mode_data = opts.modes and opts.modes[mode] + local hls = mode_data and mode_data[3] + local icon = opts.hl_icon_only and set_hl(hls, opts.icon) or opts.icon + mode = mode_data and mode_data[1]:upper() or mode + mode = (fmt):format(icon or "", mode) + return not opts.hl_icon_only and set_hl(hls, mode) or mode + end) +end + +M.try_devicons = function() + if not M._has_devicons then + M._has_devicons, M._devicons = pcall(require, "nvim-web-devicons") + end + return M._devicons +end + +M.file_icon = function(opts) + opts = opts or {} + return el_sub.buf_autocmd("el_file_icon", "BufRead", + wrap_fnc(opts, function(_, buffer) + if not M.try_devicons() then return "" end + local fmt = opts.fmt or "%s" + local ext = vim.fn.fnamemodify(buffer.name, ":p:e") + local icon, hl = M._devicons.get_icon(buffer.name, ext:lower(), { default = true }) + -- local icon = extensions.file_icon(_, bufnr) + if icon then + if opts.hl_icon then + local hlgroup = M.extract_hl({ + bg = { StatusLine = "bg" }, + fg = { [hl] = "fg" }, + }) + icon = set_hl(hlgroup, icon) + end + return (fmt):format(icon) + end + return "" + end)) +end + +M.git_branch = function(opts) + opts = opts or {} + return el_sub.buf_autocmd("el_git_branch", "BufEnter", + wrap_fnc(opts, function(_, buffer) + -- Try fugitive first as it's most reliable + local branch = vim.g.loaded_fugitive == 1 and + vim.fn.FugitiveHead() or nil + -- buffer can be null and code will crash with: + -- E5108: Error executing lua ... 'attempt to index a nil value' + if not buffer or not (buffer.bufnr > 0) then + return + end + -- fugitive is empty or not loaded, try gitsigns + if not branch or #branch == 0 then + local ok, res = pcall(vim.api.nvim_buf_get_var, + buffer.bufnr, "gitsigns_head") + if ok then branch = res end + end + -- last resort run git command + if not branch then + local j = Job:new { + command = "git", + args = { "branch", "--show-current" }, + cwd = vim.fn.fnamemodify(buffer.name, ":h"), + } + + local ok, result = pcall(function() + return vim.trim(j:sync()[1]) + end) + if ok then + branch = result + end + end + + if branch and #branch > 0 then + local fmt = opts.fmt or "%s %s" + local icon = opts.icon or "" + return set_hl(opts.hl, (fmt):format(icon, branch)) + end + end)) +end + +local git_changes_formatter = function(opts) + local specs = { + insert = { + regex = "(%d+) insertions?", + icon = opts.icon_insert or "+", + hl = opts.hl_insert, + }, + change = { + regex = "(%d+) files? changed", + icon = opts.icon_change or "~", + hl = opts.hl_change, + }, + delete = { + regex = "(%d+) deletions?", + icon = opts.icon_delete or "-", + hl = opts.hl_delete, + }, + } + return function(_, _, s) + local result = {} + for k, v in pairs(specs) do + local count = nil + if type(s) == "string" then + -- 'git diff --shortstat' output + -- from 'git_changes_all' + count = tonumber(string.match(s, v.regex)) + else + -- map from 'git_changes_buf' + count = s[k] + end + if count and count > 0 then + table.insert(result, set_hl(v.hl, ("%s%d"):format(v.icon, count))) + end + end + return table.concat(result, ", ") + end +end + +-- requires gitsigns +M.git_changes_buf = function(opts) + opts = opts or {} + local formatter = opts.formatter or git_changes_formatter(opts) + return wrap_fnc(opts, function(window, buffer) + local stats = {} + if buffer and buffer.bufnr > 0 then + local ok, res = pcall(vim.api.nvim_buf_get_var, + buffer.bufnr, "vgit_status") + if ok then stats = res end + end + if buffer and buffer.bufnr > 0 then + local ok, res = pcall(vim.api.nvim_buf_get_var, + buffer.bufnr, "gitsigns_status_dict") + if ok then stats = res end + end + local counts = { + insert = stats.added > 0 and stats.added or nil, + change = stats.changed > 0 and stats.changed or nil, + delete = stats.removed > 0 and stats.removed or nil, + } + if not vim.tbl_isempty(counts) then + local fmt = opts.fmt or "%s" + local out = formatter(window, buffer, counts) + return out and fmt:format(out) or nil + else + -- el functions that return a + -- string must not return nil + return "" + end + end) +end + +M.git_changes_all = function(opts) + opts = opts or {} + local formatter = opts.formatter or git_changes_formatter(opts) + return el_sub.buf_autocmd("el_git_changes", "BufWritePost", + wrap_fnc(opts, function(window, buffer) + if not buffer or + not (buffer.bufnr > 0) or + vim.bo[buffer.bufnr].bufhidden ~= "" or + vim.bo[buffer.bufnr].buftype == "nofile" or + vim.fn.filereadable(buffer.name) ~= 1 then + return + end + + local j = Job:new { + command = "git", + args = { "diff", "--shortstat" }, + -- makes no sense to run for one file as + -- 'file(s) changed' will always be 1 + -- args = { "diff", "--shortstat", buffer.name }, + cwd = vim.fn.fnamemodify(buffer.name, ":h"), + } + + local ok, git_changes = pcall(function() + return formatter(window, buffer, vim.trim(j:sync()[1])) + end) + + if ok then + local fmt = opts.fmt or "%s" + return git_changes and fmt:format(git_changes) or nil + end + end)) +end + +local function lsp_srvname(bufnr) + local buf_clients = vim.lsp.buf_get_clients(bufnr) + if not buf_clients or #buf_clients == 0 then + return nil + end + local names = "" + for i, c in ipairs(buf_clients) do + if i > 1 then names = names .. ", " end + names = names .. c.name + end + return names +end + +local function diag_formatter(opts) + return function(_, buffer, counts) + local items = {} + local icons = { + ["errors"] = { opts.icon_err or "E", opts.hl_err }, + ["warnings"] = { opts.icon_warn or "W", opts.hl_warn }, + ["infos"] = { opts.icon_info or "I", opts.hl_info }, + ["hints"] = { opts.icon_hint or "H", opts.hl_hint }, + } + for _, k in ipairs({ "errors", "warnings", "infos", "hints" }) do + if counts[k] > 0 then + table.insert(items, + set_hl(icons[k][2], ("%s:%s"):format(icons[k][1], counts[k]))) + end + end + local fmt = opts.fmt or "%s" + local lsp_name = opts.lsp and lsp_srvname(buffer.bufnr) + if not lsp_name and vim.tbl_isempty(items) then + return "" + else + local contents = lsp_name + if not vim.tbl_isempty(items) then + contents = ("%s %s"):format(lsp_name, table.concat(items, " ")) + end + return fmt:format(contents) + end + end +end + +local get_buffer_counts = function(diagnostic, _, buffer) + local counts = { 0, 0, 0, 0 } + local diags = diagnostic.get(buffer.bufnr) + if diags and not vim.tbl_isempty(diags) then + for _, d in ipairs(diags) do + if tonumber(d.severity) then + counts[d.severity] = counts[d.severity] + 1 + end + end + end + return { + errors = counts[1], + warnings = counts[2], + infos = counts[3], + hints = counts[4], + } +end + +M.diagnostics = function(opts) + opts = opts or {} + local formatter = opts.formatter or diag_formatter(opts) + return el_sub.buf_autocmd("el_buf_diagnostic", "LspAttach,DiagnosticChanged", + wrap_fnc(opts, function(window, buffer) + return formatter(window, buffer, get_buffer_counts(vim.diagnostic, window, buffer)) + end)) +end + +return M diff --git a/lua/core/auto.lua b/lua/core/auto.lua index 2403c5e..1a20612 100644 --- a/lua/core/auto.lua +++ b/lua/core/auto.lua @@ -1,73 +1,48 @@ +local function auto(event, opts) + a.nvim_create_autocmd(event, opts) +end + a.nvim_create_augroup('bufcheck', {clear = true}) -- highlight yanks -a.nvim_create_autocmd('TextYankPost', { - group = 'bufcheck', - pattern = '*', - callback = function() vim.highlight.on_yank{timeout = 250} end -}) - --- start terminal in insert mode -a.nvim_create_autocmd('TermOpen', { - group = 'bufcheck', - pattern = '*', - command = 'startinsert | set winfixheight' -}) - --- close terminal buffers after shell dies -a.nvim_create_autocmd('TermClose', { +auto('TextYankPost', { group = 'bufcheck', - pattern = 'term://*', - command = 'call nvim_input("")' + pattern = '*', + callback = function() + vim.highlight.on_yank{ timeout = 250 } + end }) -- start git messages in insert mode -a.nvim_create_autocmd('FileType', { - group = 'bufcheck', - pattern = { 'gitcommit', 'gitrebase', }, - command = 'startinsert | 1' +auto('FileType', { + group = 'bufcheck', + pattern = { 'gitcommit', 'gitrebase', }, + command = 'startinsert | 1' }) -- return to last place -a.nvim_create_autocmd('BufRead', { +auto('BufRead', { pattern = '*', command = [[call setpos(".", getpos("'\""))]] }) --- disable color column in certain files -a.nvim_create_autocmd('FileType', { - pattern = { - 'netrw', - "help", - "term", - "gitcommit", - "packer", - "vim", - "Trouble", - "norg", - "alpha" - }, - command = 'set colorcolumn=0' +-- start terminal in insert mode +auto('TermOpen', { + group = 'bufcheck', + pattern = '*', + callback = function() + vim.cmd('startinsert | set winfixheight') + o.winfixheight = true + o.cmdheight = 0 + end }) --- disable intent markers in certain files -a.nvim_create_autocmd('FileType', { - pattern = { - 'netrw', - "help", - "term", - "gitcommit", - "packer", - "vim", - "Trouble", - "norg", - "alpha" - }, - command = 'IndentBlanklineDisable' -}) - --- disable extra tildas in certain files -a.nvim_create_autocmd('FileType', { - pattern = '*', - command = 'hi NonText guifg=bg' +-- close terminal buffers after shell dies +auto('TermClose', { + group = 'bufcheck', + pattern = 'term://*', + callback = function() + vim.cmd('call nvim_input("")') + o.cmdheight = 1 + end }) diff --git a/lua/core/binds.lua b/lua/core/binds.lua new file mode 100644 index 0000000..bf04f59 --- /dev/null +++ b/lua/core/binds.lua @@ -0,0 +1,148 @@ +local function map(mode, bind, cmd, opts) + opts = opts or {noremap = true, silent = true} + if type(bind) == 'table' then + for i in pairs(bind) do + vim.keymap.set(mode, bind[i], cmd, opts) + end + elseif type(bind) == 'string' then + vim.keymap.set(mode, bind, cmd, opts) + else + vim.notify('-- Invalid bind for keymap:\nvim.keymap.set(\'' + .. mode .. '\', ' .. bind .. ', \'' .. cmd .. '\')', + vim.log.levels.WARN, { + title = 'Neovim Config', + on_open = function(win) + local buf = vim.api.nvim_win_get_buf(win) + vim.api.nvim_buf_set_option(buf, "filetype", "lua") + end + } + ) + end +end + +-- vim binds ------------------------------------------------------------------ +g.mapleader = ' ' -- set leader key + +-- greatest remap ever +map('x', 'p', [["_dP]]) + +-- clear search +map('n', '', ':nohlsearch:echo') + +-- move selected text up/down +map('v', '', ":m '<-2gv=gv") +map('v', '', ":m '>+1gv=gv") + +-- the cursor STAYS IN THE MIDDLE +map('n', '', 'mzJ`zdelm z') -- when combining lines +map('n', 'n', 'nzzzv') -- searching +map('n', 'N', 'Nzzzv') +map('n', '', 'zz') -- half page jumping +map('n', '', 'zz') + +-- execute order 111 +map('n', 'x', '!chmod +x %') + +-- tabs +--[[ map('n', '', 'tabnew') +map('n', '', 'tabclose') +map('n', '', 'tabprevious') +map('n', '', 'tabnext') +map('n', 'tL', 'tabmove +1') +map('n', 'tH', 'tabmove -1') ]] + +-- add some keybinds to the file view +a.nvim_create_autocmd('FileType', { + pattern = 'netrw', + callback = function() + local bind = function(lhs, rhs) + vim.keymap.set('n', lhs, rhs, { remap = true, buffer = true }) + end + bind('h', '-^') -- Go up a directory + bind('l', '') -- Go down a directory / open a file + bind('.', 'gh') -- Toggle dotfiles + bind('P', 'z') -- Close preview window + bind('', 'q') -- Close netrw + end +}) + +-- custom menu for simpler neovim managment ----------------------------------- +local function configmenu() + local list = {} + local function add(name, plug) + if not plug then + table.insert(list, name) + return + end + if package.loaded[plug] then + table.insert(list, name) + end + end + + add('edit config') + add('update plugins', 'dep') + + vim.ui.select(list, { prompt = 'Config Menu' }, + function(choice) + if choice == 'edit config' then + vim.cmd'e $XDG_CONFIG_HOME/nvim/init.lua' + end + if choice == 'update plugins' then + require('dep').sync() + if package.loaded['nvim-treesitter'] then + vim.cmd'TSUpdate' + end + if package.loaded['mason'] then + require('mason.api.command').MasonUpdate() + end + end + end) +end + +map('n', '', configmenu) + +-- plugin binds --------------------------------------------------------------- +-- treesj +local treesj = require('treesj') +map('n', 'j', treesj.toggle) + +-- telescope +local telebuilt = require('telescope.builtin') +map('n', 'sf', telebuilt.find_files) +map('n', 'sg', telebuilt.git_files) +map('n', 'sp', function() + telebuilt.grep_string({ search = vim.fn.input('Find string in project > ') }); +end) +map('n', 'so', telebuilt.oldfiles) + +-- intellitab +local intellitab = require('intellitab') +map('n', '', intellitab.indent) + +-- undo tree +map('n', 'u', 'UndotreeToggle') + +-- sfm +map('n', 'f', 'SFMToggle') + +-- dap ui +local dapui = require('dapui') +map('n', 'd', dapui.toggle) + +-- switch between previous buffers +map('n', 'b', 'JABSOpen') + +-- resizing buffers (toggleable) +local smartsplits = require('smart-splits') +map('n', 'r', smartsplits.start_resize_mode) + +-- trouble (lsp error view) +map('n', 't', 'TroubleToggle') + +-- icon picker +map('n', '', 'IconPickerYank') + +-- toggle term +map('t', '', '') -- make work in terminals +map({'n', 't'}, '', 'ToggleTerm size=20') +map({'n', 't'}, 'gl', 'lua _glow()') diff --git a/lua/core/cmds.lua b/lua/core/cmds.lua new file mode 100644 index 0000000..03ff87f --- /dev/null +++ b/lua/core/cmds.lua @@ -0,0 +1,6 @@ +local function cmd(name, exec, opts) + opts = opts or {} + vim.api.nvim_create_user_command(name, exec, opts) +end + +cmd('Colorscheme', 'Telescope colorscheme') diff --git a/lua/core/handler.lua b/lua/core/handler.lua new file mode 100644 index 0000000..2808f2f --- /dev/null +++ b/lua/core/handler.lua @@ -0,0 +1,7 @@ +require('core.plugins') -- load plugins first to allow colorscheme to be set in opts +require'impatient'.enable_profile() +require('core.opts') +require('core.highlight') +require('core.binds') +require('core.auto') +require('core.cmds') diff --git a/lua/core/highlight.lua b/lua/core/highlight.lua new file mode 100644 index 0000000..bf8865b --- /dev/null +++ b/lua/core/highlight.lua @@ -0,0 +1,50 @@ +local highlight = function(group, opts, space) + space = space or 0 + a.nvim_set_hl(space, group, opts) +end + +local c = require('mellow.colors') + +-- vim highlights ------------------------------------------------------------- +highlight("CursorLineNr", { fg = '#FFFFFF', bold = true }) + +-- diagnostics +-- highlight('DiagnosticError', { fg = c.cyan }) +-- highlight('DiagnosticWarn', { fg = c.red }) +-- highlight('DiagnosticInfo', { fg = c.yellow }) +-- highlight('DiagnosticHint', { fg = c.blue }) +-- highlight('DiagnosticUnderlineError', { fg = c.cyan }) +-- highlight('DiagnosticUnderlineWarn', { fg = c.red }) +-- highlight('DiagnosticUnderlineInfo', { fg = c.yellow }) +-- highlight('DiagnosticUnderlineHint', { fg = c.blue }) + +-- plugin highlights ---------------------------------------------------------- +-- telescope +highlight('TelescopeMatching', { bg = '#1B1B1D' }) +highlight('TelescopeNormal', { bg = '#131314' }) + +highlight('TelescopePreviewBorder', { bg = '#161617' }) +highlight('TelescopePreviewNormal', { bg = '#161617' }) +highlight('TelescopePreviewTitle', { bg = '#161617', fg = '#161617' }) + +highlight('TelescopePromptBorder', { bg = '#1B1B1D' }) +highlight('TelescopePromptNormal', { bg = '#1B1B1D' }) +highlight('TelescopePromptPrefix', { bg = '#1B1B1D' }) +highlight('TelescopePromptTitle', { bg = '#1B1B1D'}) + +highlight('TelescopeResultsBorder', { bg = '#131314' }) +highlight('TelescopeResultsNormal', { bg = '#131314' }) +highlight('TelescopeResultsTitle', { bg = '#131314', fg = '#131314' }) + +highlight('TelescopeSelection', { bg = '#161617' }) +highlight('TelescopeSelectionCaret', { bg = '#161617', fg = '#F5A191'}) + +-- indent blankline +highlight('IndentBlanklineIndent1', { bg = '#161617' }) +highlight('IndentBlanklineIndent2', { bg = '#121212' }) + +-- alpha +highlight('AlphaHeader', { fg = '#AAA0CE' }) + +-- fidget +highlight('FidgetTask', { fg = '#ffffff' }) diff --git a/lua/core/init.lua b/lua/core/init.lua deleted file mode 100644 index cfd4ed6..0000000 --- a/lua/core/init.lua +++ /dev/null @@ -1,6 +0,0 @@ -require('core.plugins') -require('core.opts') -require('core.maps') -require('core.auto') -require("core.snippets.init") -require('core.overrides.init') diff --git a/lua/core/maps.lua b/lua/core/maps.lua deleted file mode 100644 index 7958785..0000000 --- a/lua/core/maps.lua +++ /dev/null @@ -1,165 +0,0 @@ -local opts = { noremap = true, silent = true } - --- greatest remap ever -a.nvim_set_keymap("n", "p", "\"_dP", opts) - --- toggle terminal buffer -a.nvim_set_keymap("n", "", "ToggleTerm size=20", opts) -a.nvim_set_keymap("t", "", "ToggleTerm", opts) - --- esc to go to normal mode in term bufers -a.nvim_set_keymap("t", "", "", opts) - --- open file viewer -a.nvim_set_keymap("n", "fo", ":Ex", opts) -a.nvim_set_keymap("n", "fs", ":Sex", opts) -a.nvim_set_keymap("n", "fh", ":Hex", opts) -a.nvim_set_keymap("n", "fv", ":Vex", opts) - --- clear search -a.nvim_set_keymap("n", "", ":nohlsearch:echo", opts) - --- move selected text -a.nvim_set_keymap("v", "", ":m '>+1gv=gv", opts) -a.nvim_set_keymap("v", "", ":m '<-2gv=gv", opts) - --- keep cursor middle -a.nvim_set_keymap("n", "", "mzJ`z", opts) -- when combining lines -a.nvim_set_keymap("n", "n", "nzzzv", opts) -- searching -a.nvim_set_keymap("n", "N", "Nzzzv", opts) -a.nvim_set_keymap("n", "", "zz", opts) -- half page jumping -a.nvim_set_keymap("n", "", "zz", opts) - --- execute order 111 -a.nvim_set_keymap("n", "x", "!chmod +x %", opts) - --- add some keybinds to the file view -a.nvim_create_autocmd('FileType', { - pattern = 'netrw', - callback = function() - local bind = function(lhs, rhs) - vim.keymap.set('n', lhs, rhs, { remap = true, buffer = true }) - end - bind('h', '-^') -- Go up a directory - bind('l', '') -- Go down a directory / open a file - bind('.', 'gh') -- Toggle dotfiles - bind('P', 'z') -- Close preview window - bind('', 'q') -- Close netrw - end -}) - --- plugin related binds --- better indenting -a.nvim_set_keymap('i', '', 'lua require("intellitab").indent()', opts) - --- open Trouble buffer -a.nvim_set_keymap("n", "tt", "TroubleToggle document_diagnostics", opts) -a.nvim_set_keymap("n", "td", "TodoTrouble", opts) - --- dismiss notifications -a.nvim_set_keymap("n", "nd", "", { callback = require('notify').dismiss }) - --- resizing splits -a.nvim_set_keymap("n", '', "SmartResizeLeft", opts) -a.nvim_set_keymap("n", '', "SmartResizeDown", opts) -a.nvim_set_keymap("n", '', "SmartResizeUp", opts) -a.nvim_set_keymap("n", '', "SmartResizeRight", opts) - --- don't blame me pls -a.nvim_set_keymap("n", "", [[Gitsigns toggle_current_line_blame]], opts) - --- telescope -a.nvim_set_keymap('n', 'sf', 'Telescope find_files', opts) -a.nvim_set_keymap('n', 'sg', 'Telescope git_commits', opts) -a.nvim_set_keymap('n', 'sb', 'Telescope current_buffer_fuzzy_find', opts) -a.nvim_set_keymap('n', 'so', 'Telescope oldfiles', opts) -a.nvim_set_keymap('n', 'sc', 'Telescope neoclip unnamed', opts) -a.nvim_set_keymap('n', 'su', 'Telescope undo', opts) -a.nvim_set_keymap('n', 'sd', 'Telescope diagnostics', opts) -a.nvim_set_keymap('n', 'sn', 'Telescope notify', opts) - --- treesitter -a.nvim_set_keymap('n', 'j', 'TSJToggle', opts) - --- re-source snippets -a.nvim_set_keymap('n', 's', 'source ~/.config/nvim/lua/core/snippets/init.lua', opts) - --- hover -vim.keymap.set('n', '', require("hover").hover_select, opts) - --- lsp diagnostics float -a.nvim_set_keymap('n', '', 'lua vim.diagnostic.open_float()', opts) - --- essentials -a.nvim_set_keymap('n', 'eu', 'lua require("essentials").go_to_url()', opts) -a.nvim_set_keymap('n', 'ec', 'lua require("essentials").cheat_sh()', opts) - --- return to home screen -a.nvim_set_keymap('n', 'gh', 'Alpha', opts) - --- true zen -local truezen = require('true-zen') -local keymap = vim.keymap - -keymap.set('n', 'zn', function() - local first = 0 - local last = vim.api.nvim_buf_line_count(0) - truezen.narrow(first, last) -end, { noremap = true }) -keymap.set('v', 'zn', function() - local first = vim.fn.line('v') - local last = vim.fn.line('.') - truezen.narrow(first, last) -end, { noremap = true }) -a.nvim_set_keymap('n', 'zf', 'lua require("true-zen.focus").toggle()', opts) -a.nvim_set_keymap('n', 'zm', 'lua require("true-zen.minimalist").toggle()', opts) -a.nvim_set_keymap('n', 'za', 'lua require("true-zen.ataraxis").toggle()', opts) - --- highlighting -a.nvim_set_keymap("v", "ha", ":HSHighlight 1", opts) -a.nvim_set_keymap("v", "hc", ":HSRmHighlight", opts) - --- code actions + renaming -a.nvim_set_keymap('n', 'gn', 'lua require("cosmic-ui").rename()', opts) -a.nvim_set_keymap('v', 'ga', 'lua require("cosmic-ui").range_code_actions()', opts) -a.nvim_set_keymap('n', 'ga', 'lua require("cosmic-ui").code_actions()', opts) - --- glow -a.nvim_set_keymap('n', 'gl', 'lua _glow()', opts) - --- open file tree -a.nvim_set_keymap('n', 'to', 'SFMToggle', opts) - --- vbox note taking -function _G.Toggle_venn() - local venn_enabled = vim.inspect(vim.b.venn_enabled) - vim.notify = require('notify') - if venn_enabled == "nil" then - vim.b.venn_enabled = true - cmd[[setlocal ve=all]] - - -- draw a line on HJKL keystokes - a.nvim_buf_set_keymap(0, "n", "J", "j:VBox", {noremap = true}) - a.nvim_buf_set_keymap(0, "n", "K", "k:VBox", {noremap = true}) - a.nvim_buf_set_keymap(0, "n", "L", "l:VBox", {noremap = true}) - a.nvim_buf_set_keymap(0, "n", "H", "h:VBox", {noremap = true}) - - -- draw a box by pressing "f" with visual selection - a.nvim_buf_set_keymap(0, "v", "f", ":VBox", {noremap = true}) - -- make easier to navigate - o.cursorcolumn = true - o.colorcolumn = { 0 } - -- notify - vim.notify("venn toggled on", "info", { title = "Neovim config" }) - else - cmd[[setlocal ve=]] - cmd[[mapclear ]] - vim.b.venn_enabled = nil - o.cursorcolumn = false - o.colorcolumn = { 80 } - -- notify - vim.notify("venn toggled off", "info", { title = "Neovim config" }) - end -end --- toggle keymappings for venn using v -a.nvim_set_keymap('n', 'v', ":lua Toggle_venn()", { noremap = true}) diff --git a/lua/core/opts.lua b/lua/core/opts.lua index 75e8c38..f134f70 100644 --- a/lua/core/opts.lua +++ b/lua/core/opts.lua @@ -1,116 +1,57 @@ ---------------- --- better ui -- ---------------- -o.number = true -o.relativenumber = true -o.numberwidth = 2 -- width o numberline -o.signcolumn = 'yes:1' -- show gutter -o.cursorline = true -- highlights the current line -o.scrolloff = 5 -- # lines below/above cursor -o.showmode = false -- stop vim from showing mode -o.cmdheight = 2 -- vim command height -o.mouse = "" -- no mouse -o.laststatus = 3 -- global statusline +-- better ui ------------------------------------------------------------------ +vim.notify = require("notify") +o.colorcolumn = { 80 } -o.wrap = true -- wrap lines +-- buffer +o.scrolloff = 5 +o.wrap = true -- wraping lines o.linebreak = true -- fix where line is wraped -o.emoji = false -- something to do with the spacing of emojis -o.clipboard = 'unnamedplus' -- use system clipboard +o.cursorline = true --- intenting & tabing +-- statusbar +o.laststatus = 3 +o.cmdheight = 1 +if o.cmdheight == 0 then + o.showcmdloc = 'statusline' +end +o.showmode = false -- stop vim from showing mode (we have a statusbar) + +-- status column +o.signcolumn = 'yes:1' -- show gutter +o.relativenumber = true +o.number = true +o.numberwidth = 2 + +-- indents + tabs +local tabwidth = 2 o.expandtab = true o.smarttab = true o.cindent = true o.autoindent = true -o.tabstop = 2 -o.shiftwidth = 2 -o.softtabstop = -1 -- If negative, shiftwidth value is used +o.tabstop = tabwidth +o.shiftwidth = tabwidth +o.softtabstop = tabwidth --- spelling -o.spelllang = { 'en_us' } - --- colors +-- colorscheme o.termguicolors = true -cmd('colorscheme jellybeans-nvim') +vim.cmd('colorscheme mellow') --- diagnostics w/o virtual text -vim.diagnostic.config({ - underline = true, - virtual_text = false -}) +-- better editing ------------------------------------------------------------- +o.clipboard = 'unnamedplus' -- system clipboard (on unix like) -colors = { - black = '#000000', - black2 = '#161616', - black3 = '#0E0E0E', - black4 = '#101010', - grey = '#1E1E1E', - grey2 = '#404040', - white = '#ffffff', - red = '#E06C75', - orange = '#EA936C', - yellow = '#E5C07B', - green = '#98C379', - blue = '#61AFEF', - purple = '#C678DD', - pink = '#704A5A', -} - -lspicons = { - Text = 'Tx', - Snippet = '<>', - Method = ' ', - Function = '{}', - Constructor = ' ', - Field = '""', - Variable = 'x=', - Class = '~{', - Interface = '.h', - Module = ' ', - Property = '@p', - Unit = ' ', - Value = ' ', - Enum = 'E#', - Keyword = '$1', - Color = ' ', - File = '#`', - Reference = ' ', - Folder = '[/', - EnumMember = ' ', - Constant = ' ', - Struct = ' ', - Event = ' ', - Operator = '%*', - TypeParameter = ' ', -} - --- width line -o.colorcolumn = { 80 } - --- custom opts -copts = { - tablines = 'colored', -- false, 'colored', and 'wrap' - minimapcolor = colors.grey2, -} - ------------- --- saving -- ------------- +-- file saving ---------------------------------------------------------------- o.swapfile = false o.undofile = true o.confirm = true ------------- --- search -- ------------- +-- searching ------------------------------------------------------------------ o.ignorecase = true o.smartcase = true o.wrapscan = true o.showmatch = true +o.incsearch = true ----------------- --- wild menus -- ----------------- +-- wild menus ----------------------------------------------------------------- o.wildoptions = 'pum' o.pumblend = 3 o.pumheight = 20 @@ -118,101 +59,9 @@ o.pumheight = 20 o.wildignorecase = true o.wildignore = '*.o' ------------ --- netrw -- ------------ -g.netrw_banner = 0 +-- netrw ---------------------------------------------------------------------- +g.netrw_banner = 1 g.netrw_localcopydircmd = 'cp -r' g.netrw_winsize = 30 g.netrw_liststyle = 1 - ------------------------ --- language settings -- ------------------------ -g.c_syntax_for_h = true -- treat c header files as c files instead of c++ files - ----------------- --- highlights -- ----------------- --- transparent background --- a.nvim_set_hl(0, "Normal", { bg = "" }) - --- -a.nvim_set_hl(0, "ColorColumn", { bg = colors.grey }) -- color column -a.nvim_set_hl(0, "Pmenu", { bg = colors.black2 }) -a.nvim_set_hl(0, "PmenuSel", { bg = colors.grey2 }) -a.nvim_set_hl(0, "CursorLineNr", { fg = colors.white, bold = true }) - --- indent line colors -a.nvim_set_hl(0, "IndentBlanklineIndent1", { fg = colors.red } ) -a.nvim_set_hl(0, "IndentBlanklineIndent2", { fg = colors.orange } ) -a.nvim_set_hl(0, "IndentBlanklineIndent3", { fg = colors.yellow } ) -a.nvim_set_hl(0, "IndentBlanklineIndent4", { fg = colors.green } ) -a.nvim_set_hl(0, "IndentBlanklineIndent5", { fg = colors.blue } ) -a.nvim_set_hl(0, "IndentBlanklineIndent6", { fg = colors.purple } ) - --- code window -a.nvim_set_hl(0, 'CodewindowBorder', {fg = copts.minimapcolor}) - --- diagnostics -a.nvim_set_hl(0, "DiagnosticVirtualTextHint", { fg = "#ffffff", bg = "#1E1E1E" }) -a.nvim_set_hl(0, "DiagnosticVirtualTextInfo", { fg = "#006fd8", bg = "#152f47" }) -a.nvim_set_hl(0, "DiagnosticVirtualTextWarn", { fg = "#E9AD5A", bg = "#533221" }) -a.nvim_set_hl(0, "DiagnosticVirtualTextError", - { fg = "#ED3B44", bg = "#4b1313" }) - --- alpha start page 4chan edition -a.nvim_set_hl(0, "AlphaHeader", {fg = "#789922" }) -a.nvim_set_hl(0, "AlphaEmphasis", {fg = "#DD0000" }) - --- murmur (word highlights) -a.nvim_set_hl(0, "murmur_cursor_rgb", { bg = colors.grey2 }) - --- cmp/treesitter stuff -a.nvim_set_hl(0, "CmpItemMenu", { fg = colors.purple, italic = true }) - -a.nvim_set_hl(0, "CmpItemKindSnippet", { bg = "#A377BF", bold = true }) -a.nvim_set_hl(0, "CmpItemKindText", { bg = "#63bc47", bold = true }) -a.nvim_set_hl(0, "CmpItemKindField", { bg = "#db7093", bold = true }) -a.nvim_set_hl(0, "CmpItemKindVariable", { bg = "#ff8c00", bold = true }) -a.nvim_set_hl(0, "CmpItemKindEnum", { bg = "#FF5733", bold = true }) -a.nvim_set_hl(0, "CmpItemKindFunction", { bg = "#483d8b", bold = true }) -a.nvim_set_hl(0, "CmpItemKindKeyword", { bg = "#FF339C", bold = true }) -a.nvim_set_hl(0, "CmpItemKindProperty", { bg = "#4FBF63", bold = true }) -a.nvim_set_hl(0, "CmpItemKindInterface", { bg = "#1e90ff", bold = true }) -a.nvim_set_hl(0, "CmpItemKindClass", { bg = "#4D4C5C", bold = true }) -a.nvim_set_hl(0, "CmpItemKindFile", { bg = "#E8D01C", bold = true }) -a.nvim_set_hl(0, "CmpItemKindFolder", { bg = "#E8D01C", bold = true }) -a.nvim_set_hl(0, "CmpItemKindOperator", { bg = "#E06C75", bold = true }) - --- telescope -a.nvim_set_hl(0, "TelescopeMatching", { bg = colors.black3 }) -a.nvim_set_hl(0, "TelescopeNormal", { bg = colors.black3 }) - -a.nvim_set_hl(0, "TelescopePreviewBorder", { bg = colors.black3 }) -a.nvim_set_hl(0, "TelescopePreviewNormal", { bg = colors.black3 }) -a.nvim_set_hl(0, "TelescopePreviewTitle", { bg = colors.black3, - fg = colors.black3 }) - -a.nvim_set_hl(0, "TelescopePromptBorder", { bg = colors.black2 }) -a.nvim_set_hl(0, "TelescopePromptNormal", { bg = colors.black2 }) -a.nvim_set_hl(0, "TelescopePromptPrefix", { bg = colors.black2 }) -a.nvim_set_hl(0, "TelescopePromptTitle", { bg = colors.black2, - fg = colors.black2 }) - -a.nvim_set_hl(0, "TelescopeResultsBorder", { bg = colors.black4 }) -a.nvim_set_hl(0, "TelescopeResultsNormal", { bg = colors.black4 }) -a.nvim_set_hl(0, "TelescopeResultsTitle", { bg = colors.black4, - fg = colors.black4 }) - -a.nvim_set_hl(0, "TelescopeSelection", { bg = colors.black2 }) -a.nvim_set_hl(0, "TelescopeSelectionCaret", { bg = colors.black2, - fg = colors.orange, bold = true }) - --- sfm (tree view stuff) -a.nvim_set_hl(0, "SFMGitStaged", { fg = colors.green }) -a.nvim_set_hl(0, "SFMGitUnstaged", { fg = colors.green }) -a.nvim_set_hl(0, "SFMGitRenamed", { fg = colors.purple }) -a.nvim_set_hl(0, "SFMGitNew", { fg = colors.orange }) -a.nvim_set_hl(0, "SFMGitDeleted", { fg = colors.red }) -a.nvim_set_hl(0, "SFMGitIgnored", { fg = colors.grey }) +g.netrw_preview = 1 diff --git a/lua/core/overrides/alpha.lua b/lua/core/overrides/alpha.lua deleted file mode 100644 index 373eeff..0000000 --- a/lua/core/overrides/alpha.lua +++ /dev/null @@ -1,260 +0,0 @@ -local present, alpha = pcall(require, "alpha") -if not present then - return -end - -local pepe = { - { - [[⠄⠄⠄⠄⠄⠄⠄⢀⣠⣶⣾⣿⣶⣦⣤⣀⠄⢀⣀⣤⣤⣤⣤⣄⠄⠄⠄⠄⠄⠄]], - [[⠄⠄⠄⠄⠄⢀⣴⣿⣿⣿⡿⠿⠿⠿⠿⢿⣷⡹⣿⣿⣿⣿⣿⣿⣷⠄⠄⠄⠄⠄]], - [[⠄⠄⠄⠄⠄⣾⣿⣿⣿⣯⣵⣾⣿⣿⡶⠦⠭⢁⠩⢭⣭⣵⣶⣶⡬⣄⣀⡀⠄⠄]], - [[⠄⠄⠄⡀⠘⠻⣿⣿⣿⣿⡿⠟⠩⠶⠚⠻⠟⠳⢶⣮⢫⣥⠶⠒⠒⠒⠒⠆⠐⠒]], - [[⠄⢠⣾⢇⣿⣿⣶⣦⢠⠰⡕⢤⠆⠄⠰⢠⢠⠄⠰⢠⠠⠄⡀⠄⢊⢯⠄⡅⠂⠄]], - [[⢠⣿⣿⣿⣿⣿⣿⣿⣏⠘⢼⠬⠆⠄⢘⠨⢐⠄⢘⠈⣼⡄⠄⠄⡢⡲⠄⠂⠠⠄]], - [[⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣥⣀⡁⠄⠘⠘⠘⢀⣠⣾⣿⢿⣦⣁⠙⠃⠄⠃⠐⣀]], - [[⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣋⣵⣾⣿⣿⣿⣿⣦⣀⣶⣾⣿⣿⡉⠉⠉]], - [[⣿⣿⣿⣿⣿⣿⣿⠟⣫⣥⣬⣭⣛⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠄]], - [[⣿⣿⣿⣿⣿⣿⣿⠸⣿⣏⣙⠿⣿⣿⣶⣦⣍⣙⠿⠿⠿⠿⠿⠿⠿⠿⣛⣩⣶⠄]], - [[⣛⣛⣛⠿⠿⣿⣿⣿⣮⣙⠿⢿⣶⣶⣭⣭⣛⣛⣛⣛⠛⠛⠻⣛⣛⣛⣛⣋⠁⢀]], - [[⣿⣿⣿⣿⣿⣶⣬⢙⡻⠿⠿⣷⣤⣝⣛⣛⣛⣛⣛⣛⣛⣛⠛⠛⣛⣛⠛⣡⣴⣿]], - [[⣛⣛⠛⠛⠛⣛⡑⡿⢻⢻⠲⢆⢹⣿⣿⣿⣿⣿⣿⠿⠿⠟⡴⢻⢋⠻⣟⠈⠿⠿]], - [[⣿⡿⡿⣿⢷⢤⠄⡔⡘⣃⢃⢰⡦⡤⡤⢤⢤⢤⠒⠞⠳⢸⠃⡆⢸⠄⠟⠸⠛⢿]], - [[⡟⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢸]], - }, - { - [[⠄⠄⠄⠄⠄⠄⠄⠄⠄⣾⣿⣿⣿⣿⡄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄]], - [[⠄⠄⠄⠄⠄⠄⠄⠄⣼⣿⣿⣿⣿⣿⣿⣧⠄⠄⠄⠄⠄⣀⣀⠄⠄⠄⠄⠄⠄⠄]], - [[⠄⠄⠄⠄⠄⠄⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣧⠄⠄⠄⣾⠛⠛⣷⢀⣾⠟⠻⣦⠄]], - [[⠄⠄⠄⠄⠄⠄⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠄⠄⢰⡿⠋⠄⠄⣠⡾⠋⠄]], - [[⠄⠄⠄⠄⠄⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠄⣬⡄⠄⠄⠄⣭⡅⠄⠄]], - [[⠄⠄⠄⠄⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠄⠄⠄⠄⠄⠄⠄⠄⠄]], - [[⠄⠄⠄⠄⢛⣛⣛⣛⣛⣛⣛⣛⣛⡛⢋⣉⣭⣭⣥⣬⣤⣤⣀⠄⠄⠄⠄⠄⠄⠄]], - [[⠄⠄⣴⣵⣿⣟⡉⣥⣶⣶⠶⠶⠬⣉⡂⠹⣟⡫⠽⠟⢒⣒⠒⠆⠄⠄⠄⠄⠄⠄]], - [[⠄⣼⣿⣿⣿⣿⣿⣶⣭⣃⡈⠄⠄⠘⠃⡰⢶⣶⣿⠏⠄⠄⠙⡛⠄⠄⠄⠄⠄⠄]], - [[⢰⣿⣿⣿⣿⣿⣿⣿⣯⣉⣉⣩⣭⣶⣿⡿⠶⠶⠶⠶⠶⠾⣋⠄⠄⠄⠄⠄⠄⠄]], - [[⢾⣿⣿⣿⣿⣿⣿⣿⢩⣶⣒⠒⠶⢖⣒⣚⡛⠭⠭⠭⠍⠉⠁⠄⠄⠄⣀⣀⡀⠄]], - [[⠘⢿⣿⣿⣿⣿⣿⣿⣧⣬⣭⣭⣭⣤⡤⠤⠶⠟⣋⣀⣀⡀⢀⣤⣾⠟⠋⠈⢳⠄]], - [[⣴⣦⡒⠬⠭⣭⣭⣭⣙⣛⠋⠭⡍⠁⠈⠙⠛⠛⠛⠛⢻⠛⠉⢻⠁⠄⠄⠄⢸⡀]], - [[⣿⣿⣿⣿⣷⣦⣤⠤⢬⢍⣼⣦⡾⠛⠄⠄⠄⠄⠄⠄⠈⡇⠄⢸⠄⠄⠄⢦⣄⣇]], - [[⣿⣿⡿⣋⣭⣭⣶⣿⣶⣿⣿⣿⠟⠛⠃⠄⠄⠄⠄⠄⢠⠃⠄⡜⠄⠄⠄⠔⣿⣿]], - }, - { - [[⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠔⠊⠉⠉⠉⠉⠉⠐⢦⡄⠄⠄⠄⠄⠄⠄⠄⠄]], - [[⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡐⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠘⣆⠄⠄⠄⠄⠄⠄⠄]], - [[⠄⠄⠄⠄⠄⠄⠄⠄⢀⠖⠁⢀⣾⣆⡰⠶⡷⠶⣀⣾⣄⠄⠈⣆⠄⠄⠄⠄⠄⠄]], - [[⠄⠄⡄⠄⠠⢤⣤⠔⠃⠄⠄⠄⠄⠘⢧⣤⢣⣤⠋⠄⠄⠄⠄⠈⠣⢤⡠⠄⠄⠄]], - [[⠄⠄⠘⠦⡀⠄⠄⠄⠄⠄⠄⠄⢻⡟⠻⣿⣿⡿⠻⡟⠃⠄⠄⠄⠄⠄⠄⠄⡀⠞]], - [[⠄⠄⠄⠄⠉⢢⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⡠⠊⠄⠄]], - [[⠄⠄⠄⠄⠄⠄⠈⠢⣤⣤⣴⣶⡶⢶⣶⣶⣶⣆⢒⣤⣤⠄⢠⠤⠤⠚⠄⠄⠄⠄]], - [[⠄⠄⠄⠄⠄⢀⣠⣾⣿⣿⣿⣿⣎⢻⣿⠁⡀⣿⡎⣿⣿⣀⣃⠧⡀⠄⠄⠄⠄⠄]], - [[⠄⠄⣠⣶⣾⣿⣿⣿⣿⣿⣿⣿⡹⡼⢿⣠⠵⠿⣑⢿⣟⣛⠤⣩⡁⠄⠄⠄⠄⠄]], - [[⢠⣿⣿⣿⢏⡜⡻⣷⡽⣿⣷⣭⣿⣮⣽⣯⣽⣿⣿⣷⣤⣾⡿⠟⠃⠄⠄⠄⠄⠄]], - [[⠻⣿⣿⣿⣌⢷⣙⠾⠯⣒⡿⠭⣝⣛⣛⣛⣛⠛⠭⠭⠟⢣⠌⠄⠄⠄⠄⠄⠄⠄]], - [[⠄⠻⣿⣿⣿⣮⣟⠷⣦⣤⣝⣛⠲⠶⠶⠒⢂⣀⠠⠄⠐⠁⠄⠄⠄⠄⠄⠄⠄⠄]], - [[⠄⠄⠄⠙⠿⠿⢿⣿⡷⠶⠭⠭⠭⠵⠶⠒⠋⠉⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄]], - }, - { - [[⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]], - [[⣿⣿⣿⣿⣿⣿⣿⠛⢩⣴⣶⣶⣶⣌⠙⠫⠛⢋⣭⣤⣤⣤⣤⡙⣿⣿⣿⣿⣿⣿]], - [[⣿⣿⣿⣿⣿⡟⢡⣾⣿⠿⣛⣛⣛⣛⣛⡳⠆⢻⣿⣿⣿⠿⠿⠷⡌⠻⣿⣿⣿⣿]], - [[⣿⣿⣿⣿⠏⣰⣿⣿⣴⣿⣿⣿⡿⠟⠛⠛⠒⠄⢶⣶⣶⣾⡿⠶⠒⠲⠌⢻⣿⣿]], - [[⣿⣿⠏⣡⢨⣝⡻⠿⣿⢛⣩⡵⠞⡫⠭⠭⣭⠭⠤⠈⠭⠒⣒⠩⠭⠭⣍⠒⠈⠛]], - [[⡿⢁⣾⣿⣸⣿⣿⣷⣬⡉⠁⠄⠁⠄⠄⠄⠄⠄⠄⠄⣶⠄⠄⠄⠄⠄⠄⠄⠄⢀]], - [[⢡⣾⣿⣿⣿⣿⣿⣿⣿⣧⡀⠄⠄⠄⠄⠄⠄⠄⢀⣠⣿⣦⣤⣀⣀⣀⣀⠄⣤⣾]], - [[⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣶⡶⢇⣰⣿⣿⣟⠿⠿⠿⠿⠟⠁⣾⣿⣿]], - [[⣿⣿⣿⣿⣿⣿⣿⡟⢛⡛⠿⠿⣿⣧⣶⣶⣿⣿⣿⣿⣿⣷⣼⣿⣿⣿⣧⠸⣿⣿]], - [[⠘⢿⣿⣿⣿⣿⣿⡇⢿⡿⠿⠦⣤⣈⣙⡛⠿⠿⠿⣿⣿⣿⣿⠿⠿⠟⠛⡀⢻⣿]], - [[⠄⠄⠉⠻⢿⣿⣿⣷⣬⣙⠳⠶⢶⣤⣍⣙⡛⠓⠒⠶⠶⠶⠶⠖⢒⣛⣛⠁⣾⣿]], - [[⠄⠄⠄⠄⠄⠈⠛⠛⠿⠿⣿⣷⣤⣤⣈⣉⣛⣛⣛⡛⠛⠛⠿⠿⠿⠟⢋⣼⣿⣿]], - [[⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠉⠉⣻⣿⣿⣿⣿⡿⠿⠛⠃⠄⠙⠛⠿⢿⣿]], - [[⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢬⣭⣭⡶⠖⣢⣦⣀⠄⠄⠄⠄⢀⣤⣾⣿]], - [[⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢰⣶⣶⣶⣾⣿⣿⣿⣿⣷⡄⠄⢠⣾⣿⣿⣿]], - }, -} - --- dynamic header padding -local fn = vim.fn -local marginTopPercent = 0.2 -local Padding = fn.max { 2, fn.floor(fn.winheight(0) * marginTopPercent) } - -local header = { - type = "text", - val = pepe[math.random(#pepe)], - opts = { - position = "center", - hl = "AlphaAscii", - }, -} - -local plugins = require('lazy').stats().count -local date = os.date("%d/%m/%y(%a)%X") - -math.randomseed(os.time()) -local id = math.random(10000000, 99999999) -local id1 = math.random(10000000, 99999999) -local id2 = math.random(10000000, 99999999) - -local chan = { - [[based!!!]], - [[in other words, 4chan is better because - everyone gets to be an idiot.]], - [[NOOOOOOO YOU CAN’T PUBLISH BENCHMARKS FOR - OUR ANCIENT OS]], - [[This is the beginning of the end. AI has - finally won. Tech is no longer a viable job.]], - [[And Wikipedia is bloat because of html, - mathml, rich text, etc. Using modern codecs - and a simpler form of wiki we could store - the entire "human knowledge-base" and plain - text references (books, papers, articles, - websites) inside a single μSD card]], - [[My arch install broke again]], - [[Why are stdout, stderr and stdin already - opened when I start my program? Who opened - them and what is he doing in my computer?]], - [[YES BOYCOTT! - SPREAD THIS MESSAGE - EVERYONE QUIT USING THE SITE, THEY CANNOT - IGNORE US ANYMORE. FROM THIS DAY ONWARDS - THEIR PRODUCT WILL NOT BE ABLE TO HOLD UP - WITHOUT US]], - [[COMPANY A BETTER THAN COMPANY B]], - [[Nah, ignore this anon. If you want to - REALLY learn programming, you need to - learn with punch cards. Once you've - got that under your belt, move on - up to assembly.]], -} -local phrase = chan[math.random(#chan)] - -local heading = { - type = "text", - val = "  Anonymous " .. date .. " No." .. id .. " ", - opts = { - position = "center", - hl = "AlphaButtons", - }, -} - -local post_buttons = { - type = "text", - val = "They don't get it. For me, it's nvim. ", - opts = { - position = "center", - hl = "AlphaFooter", - }, -} - -local pre_foot = { - type = "text", - val = ">>" .. id2 .. "(OP) ", - opts = { - position = "center", - hl = "AlphaEmphasis", - }, -} - -local footer = { - type = "text", - val = " I've " .. plugins .. " plugins, it launches instantly kek.", - opts = { - position = "center", - hl = "AlphaFooter", - }, -} - -local pre_foot_2 = { - type = "text", - val = ">>" .. id1 .. " ", - opts = { - position = "center", - hl = "AlphaEmphasis", - }, -} - -local footer_2 = { - type = "text", - val = " " .. phrase, - opts = { - position = "left", - hl = "AlphaFooter", - }, -} - -local function button(sc, txt, keybind) - local sc_ = sc:gsub("%s", ""):gsub("SPC", "") - - local opts = { - position = "center", - text = txt, - shortcut = sc, - cursor = 0, - width = 44, - align_shortcut = "right", - hl_shortcut = "AlphaShortcuts", - hl = "AlphaHeader", - } - if keybind then - opts.keymap = { "n", sc_, keybind, { noremap = true, silent = true } } - end - - return { - type = "button", - val = txt, - on_press = function() - local key = vim.api.nvim_replace_termcodes(sc_, true, false, true) - vim.api.nvim_feedkeys(key, "normal", false) - end, - opts = opts, - } -end - -local buttons = { - type = "group", - val = { - button("LDR e", " >open new file", ":ene"), - button("LDR h", " >open oldfiles", ":Telescope oldfiles"), - button("LDR f", " >fuzzy search", ":Telescope find_files"), - button("LDR y", " >browse folders" , ":Telescope file_browser path=%:p:h"), - button("LDR /", " >regex search", ":Telescope live_grep"), - button("LDR u", " >update plugins", ":lua require('lazy').update()"), - }, - opts = { - spacing = 0, - }, -} - -local section = { - header = header, - buttons = buttons, - heading = heading, - post_buttons = post_buttons, - pre_foot = pre_foot, - footer = footer, - pre_foot_2 = pre_foot_2, - footer_2 = footer_2, -} - -local opts = { - layout = { - { type = "padding", val = Padding}, - { type = "padding", val = 1 }, - section.header, - { type = "padding", val = 1 }, - section.heading, - { type = "padding", val = 1 }, - section.buttons, - section.post_buttons, - { type = "padding", val = 1 }, - section.pre_foot, - section.footer, - { type = "padding", val = 1 }, - section.pre_foot_2, - section.footer_2, - { type = "padding", val = Padding }, - }, - opts = { - margin = 50, - }, -} -alpha.setup(opts) diff --git a/lua/core/overrides/cmpluasnipchoice.lua b/lua/core/overrides/cmpluasnipchoice.lua deleted file mode 100644 index 52aa759..0000000 --- a/lua/core/overrides/cmpluasnipchoice.lua +++ /dev/null @@ -1,3 +0,0 @@ -require('cmp_luasnip_choice').setup { - auto_open = true, -} diff --git a/lua/core/overrides/hover.lua b/lua/core/overrides/hover.lua deleted file mode 100644 index 9e8a684..0000000 --- a/lua/core/overrides/hover.lua +++ /dev/null @@ -1,18 +0,0 @@ -require("hover").setup { - init = function() - -- Require providers - require("hover.providers.lsp") - -- require('hover.providers.gh') - -- require('hover.providers.gh_user') - -- require('hover.providers.jira') - require('hover.providers.man') - require('hover.providers.dictionary') - end, - preview_opts = { - border = 'single' - }, - -- Whether the contents of a currently open hover window should be moved - -- to a :h preview-window when pressing the hover keymap. - preview_window = true, - title = true -} diff --git a/lua/core/overrides/indentblankline.lua b/lua/core/overrides/indentblankline.lua deleted file mode 100644 index 0e43c22..0000000 --- a/lua/core/overrides/indentblankline.lua +++ /dev/null @@ -1,22 +0,0 @@ -if copts.tablines == 'colored' then - require("indent_blankline").setup { - space_char_blankline = ' ', - char_highlight_list = { - 'IndentBlanklineIndent1', - 'IndentBlanklineIndent2', - 'IndentBlanklineIndent3', - 'IndentBlanklineIndent4', - 'IndentBlanklineIndent5', - 'IndentBlanklineIndent6', - }, - } -elseif copts.tablines == 'wrap' then - o.list = true - require('indent_blankline').setup { - space_char_blankline = ' ', - show_current_context = true, - show_current_context_start = true, - } -else - g.indent_blankline_char = ' ' -end diff --git a/lua/core/overrides/init.lua b/lua/core/overrides/init.lua deleted file mode 100644 index 34df01f..0000000 --- a/lua/core/overrides/init.lua +++ /dev/null @@ -1,24 +0,0 @@ -require('core.overrides.indentblankline') -require('core.overrides.lualine') -require('core.overrides.telescope') -require('core.overrides.modicator') -require('core.overrides.neorg') -require('core.overrides.whichkey') -require('core.overrides.neoclip') -require('core.overrides.smartsplits') -require('core.overrides.treesitter') -require('core.overrides.treesj') -require('core.overrides.colorizer') -require('core.overrides.trouble') -require('core.overrides.lspzero') -require('core.overrides.cmp') -require('core.overrides.snip') -require('core.overrides.lspkind') -require('core.overrides.cmpluasnipchoice') -require('core.overrides.truezen') -require('core.overrides.alpha') -require('core.overrides.notify') -require('core.overrides.hover') -require('core.overrides.scrollbar') -require('core.overrides.toggleterm') -require('core.overrides.sfm') diff --git a/lua/core/overrides/lspkind.lua b/lua/core/overrides/lspkind.lua deleted file mode 100644 index f2f11d5..0000000 --- a/lua/core/overrides/lspkind.lua +++ /dev/null @@ -1 +0,0 @@ -require('lspkind').init() diff --git a/lua/core/overrides/lspzero.lua b/lua/core/overrides/lspzero.lua deleted file mode 100644 index 108e566..0000000 --- a/lua/core/overrides/lspzero.lua +++ /dev/null @@ -1,17 +0,0 @@ -local lsp = require('lsp-zero') -lsp.set_preferences { - suggest_lsp_servers = true, - setup_servers_on_start = true, - set_lsp_keymaps = true, - configure_diagnostics = true, - cmp_capabilities = true, - manage_nvim_cmp = false, - call_servers = 'local', - sign_icons = { - error = 'x', - warn = '!', - hint = '?', - info = 'i' - } -} -lsp.setup() diff --git a/lua/core/overrides/lualine.lua b/lua/core/overrides/lualine.lua deleted file mode 100644 index ef5bc75..0000000 --- a/lua/core/overrides/lualine.lua +++ /dev/null @@ -1,145 +0,0 @@ -local custom = require'lualine.themes.auto' - -custom.normal = { - a = { fg = colors.black, bg = colors.blue, gui = 'bold' }, - b = { fg = colors.black, bg = colors.grey, gui = 'bold' }, - c = { fg = colors.white, bg = colors.grey }, - x = {}, - y = { fg = colors.blue, bg = colors.black2 }, - z = { fg = colors.black2, bg = colors.blue, gui = 'bold' }, -} -custom.insert = { - a = { fg = colors.black, bg = colors.green, gui = 'bold' }, - b = { fg = colors.black, bg = colors.grey, gui = 'bold' }, - c = { fg = colors.white, bg = colors.grey }, - x = {}, - y = { fg = colors.green, bg = colors.black2 }, - z = { fg = colors.black2, bg = colors.green, gui = 'bold' }, -} -custom.replace = { - a = { fg = colors.black, bg = colors.orange, gui = 'bold' }, - b = { fg = colors.black, bg = colors.grey, gui = 'bold' }, - c = { fg = colors.white, bg = colors.grey }, - x = {}, - y = { fg = colors.orange, bg = colors.black2 }, - z = { fg = colors.black2, bg = colors.orange, gui = 'bold' }, -} -custom.visual = { - a = { fg = colors.black, bg = colors.purple, gui = 'bold' }, - b = { fg = colors.black, bg = colors.grey, gui = 'bold' }, - c = { fg = colors.white, bg = colors.grey }, - x = {}, - y = { fg = colors.purple, bg = colors.black2 }, - z = { fg = colors.black2, bg = colors.purple, gui = 'bold' }, -} -custom.command = { - a = { fg = colors.black, bg = colors.red, gui = 'bold' }, - b = { fg = colors.black, bg = colors.grey, gui = 'bold' }, - c = { fg = colors.white, bg = colors.grey }, - x = {}, - y = { fg = colors.red, bg = colors.black2 }, - z = { fg = colors.black2, bg = colors.red, gui = 'bold' }, -} -custom.terminal = { - a = { fg = colors.black, bg = colors.yellow, gui = 'bold' }, - b = { fg = colors.black, bg = colors.grey, gui = 'bold' }, - c = { fg = colors.white, bg = colors.grey }, - x = {}, - y = { fg = colors.yellow, bg = colors.black2 }, - z = { fg = colors.black2, bg = colors.yellow, gui = 'bold' }, -} -custom.inactive = { - a = { bg = colors.black2 }, - b = { bg = colors.black2 }, - c = { bg = colors.black2 }, - x = { bg = colors.black2 }, - y = { bg = colors.black2 }, - z = { bg = colors.black2 }, -} - -local function diff_source() - local gitsigns = vim.b.gitsigns_status_dict - if gitsigns then - return { - added = gitsigns.added, - modified = gitsigns.changed, - removed = gitsigns.removed - } - end -end - -local function maximize_status() - return require("true-zen.focus").running and '[M]' or '[]=' -end - -require('lualine').setup { - options = { - icons_enabled = false, - component_separators = { left = '', right = '' }, - section_separators = { left = '', right = '' }, - disabled_filetypes = { - statusline = { - 'no-neck-pain', - 'alpha', - 'TelescopePrompt', - }, - winbar = {}, - }, - theme = custom, - always_divide_middle = false, - globalstatus = true, - refresh = { - statusline = 500, - tabline = 1000, - winbar = 1000, - } - }, - sections = { - lualine_a = { - { 'mode' }, - { 'filetype', - color = { fg = colors.white, bg = colors.grey }, - }, - { 'filename', - filestatus = true, - path = 0, - - symbols = { - modified = '[+]', - readonly = '[=]', - unnamed = 'No Name', - newfile = '[New]', - } - } - }, - lualine_b = { - { 'diff', - source = diff_source, - }, - { 'diagnostics', - sources = {'nvim_diagnostic', 'nvim_lsp'}, - sections = {'error', 'warn', 'info', 'hint'}, - diagnostics_color = { - error = 'DiagnosticError', - warn = 'DiagnosticWarn', - info = 'DiagnosticInfo', - hint = 'DiagnosticHint', - }, - symbols = {error = '[x]', warn = '[!]', info = '[i]', hint = '[?]'}, - } - }, - lualine_c = {}, - lualine_x = { - { 'fileformat', - color = { gui = 'bold' } - } - }, - lualine_y = { - { maximize_status }, - }, - lualine_z = { 'progress' } - }, - inactive_sections = { - lualine_x = {'location'}, - }, -} diff --git a/lua/core/overrides/modicator.lua b/lua/core/overrides/modicator.lua deleted file mode 100644 index dc978de..0000000 --- a/lua/core/overrides/modicator.lua +++ /dev/null @@ -1,18 +0,0 @@ -require('modicator').setup({ - show_warnings = true, - highlights = { - defaults = { - bold = true, - }, - modes = { - ['i'] = { foreground = colors.green, }, - ['v'] = { foreground = colors.purple, }, - ['V'] = { foreground = colors.purple, }, - [''] = { foreground = colors.purple, }, - ['s'] = { foreground = colors.purple, }, - ['S'] = { foreground = colors.yellow, }, - ['R'] = { foreground = colors.orange, }, - ['c'] = { foreground = colors.red, }, - }, - }, -}) diff --git a/lua/core/overrides/neoclip.lua b/lua/core/overrides/neoclip.lua deleted file mode 100644 index a41877d..0000000 --- a/lua/core/overrides/neoclip.lua +++ /dev/null @@ -1,9 +0,0 @@ -require('neoclip').setup { - keys = { - telescope = { - i = { - paste_behind = ' ' - }, - }, - }, -} diff --git a/lua/core/overrides/neorg.lua b/lua/core/overrides/neorg.lua deleted file mode 100644 index dc6df57..0000000 --- a/lua/core/overrides/neorg.lua +++ /dev/null @@ -1,18 +0,0 @@ -require('neorg').setup { - load = { - ['core.defaults'] = {}, - ['core.norg.concealer'] = { - config = { - dim_code_blocks = { - width = 'content', - padding = { right = 2, }, - }, - folds = false, - } - }, - ['core.norg.completion'] = { - config = { engine = 'nvim-cmp', } - }, - ['core.integrations.nvim-cmp'] = {}, - } -} diff --git a/lua/core/overrides/notify.lua b/lua/core/overrides/notify.lua deleted file mode 100644 index f816d86..0000000 --- a/lua/core/overrides/notify.lua +++ /dev/null @@ -1,14 +0,0 @@ -require('notify').setup( - { - icons = { - DEBUG = "B", - ERROR = "x", - INFO = "i", - TRACE = "t", - WARN = "!" - }, - minimum_width = 35, - max_width = 80, - render = "compact", - } -) diff --git a/lua/core/overrides/scrollbar.lua b/lua/core/overrides/scrollbar.lua deleted file mode 100644 index dbce04f..0000000 --- a/lua/core/overrides/scrollbar.lua +++ /dev/null @@ -1,29 +0,0 @@ -require("scrollbar").setup({ - show = true, - show_in_active_only = true, - handle = { - color = colors.bg_highlight, - }, - marks = { - Search = { color = colors.pink }, - Error = { color = colors.red }, - Warn = { color = colors.orange }, - Info = { color = colors.blue }, - Hint = { color = colors.grey2 }, - Misc = { color = colors.purple }, - }, - excluded_buftypes = { - "terminal", - }, - excluded_filetypes = { - "prompt", - "TelescopePrompt", - "noice", - "alpha", - "sfm", - }, - handlers = { - diagnostic = true, - gitsigns = true, - } -}) diff --git a/lua/core/overrides/smartsplits.lua b/lua/core/overrides/smartsplits.lua deleted file mode 100644 index 5e677ab..0000000 --- a/lua/core/overrides/smartsplits.lua +++ /dev/null @@ -1,7 +0,0 @@ -require('smart-splits').setup { - resize_mode = { - hooks = { - on_leave = require('bufresize').register - }, - }, -} diff --git a/lua/core/overrides/toggleterm.lua b/lua/core/overrides/toggleterm.lua deleted file mode 100644 index 4f5f598..0000000 --- a/lua/core/overrides/toggleterm.lua +++ /dev/null @@ -1,19 +0,0 @@ -require('toggleterm').setup { - shade_terminals = true, -} - -local Terminal = require('toggleterm.terminal').Terminal -local glow = Terminal:new({ - cmd = "glow", - hidden = true, - direction = "float", - float_opts = { - border = "shadow", - width = 120, - height = 50, - } -}) - -function _glow() - glow:toggle() -end diff --git a/lua/core/overrides/treesitter.lua b/lua/core/overrides/treesitter.lua deleted file mode 100644 index e74af0d..0000000 --- a/lua/core/overrides/treesitter.lua +++ /dev/null @@ -1,15 +0,0 @@ -require('nvim-treesitter.configs').setup { - ensure_installed = { - 'help', - 'c', - 'lua', - 'norg', - 'bash', - 'html', - 'make', - }, - highlight = { - enable = true, - additional_vim_regex_highlighting = false, - }, -} diff --git a/lua/core/overrides/treesj.lua b/lua/core/overrides/treesj.lua deleted file mode 100644 index dc618de..0000000 --- a/lua/core/overrides/treesj.lua +++ /dev/null @@ -1,3 +0,0 @@ -require('treesj').setup({ - use_default_keymaps = false, -}) diff --git a/lua/core/overrides/truezen.lua b/lua/core/overrides/truezen.lua deleted file mode 100644 index 4132a6a..0000000 --- a/lua/core/overrides/truezen.lua +++ /dev/null @@ -1,13 +0,0 @@ -require('true-zen').setup { - modes = { - ataraxis = { -- normal zen - minimum_writing_area = { -- minimum size of main window - width = 120, - height = 44, - }, - }, - narrow = { - folds_style = "invisible", - }, - }, -} diff --git a/lua/core/overrides/whichkey.lua b/lua/core/overrides/whichkey.lua deleted file mode 100644 index 65b6ca4..0000000 --- a/lua/core/overrides/whichkey.lua +++ /dev/null @@ -1,8 +0,0 @@ -require("which-key").setup { - icons = { - breadcrumb = '>>', - separator = '->', - }, - window = { winblend = 3, }, - layout = { align = 'center', }, -} diff --git a/lua/core/plugins.lua b/lua/core/plugins.lua index 2844d8a..e15d93b 100644 --- a/lua/core/plugins.lua +++ b/lua/core/plugins.lua @@ -1,111 +1,70 @@ --- make sure lazy is installed -local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not vim.loop.fs_stat(lazypath) then - if not vim.loop.fs_stat(lazypath) then - vim.fn.system({ "git", "clone", "--filter=blob:none", - "https://github.com/folke/lazy.nvim.git", lazypath }) - vim.fn.system({ "git", "-C", lazypath, "checkout", "tags/stable" }) - end -end -vim.opt.rtp:prepend(lazypath) +require 'dep' { + -- dep manages dep ---------------------------------------------------------- + { 'squibid/dep', + url = 'https://git.squi.bid/dep', + branch = 'dev' + }, -require('lazy').setup{ - { 'tamton-aquib/essentials.nvim' }, + -- preformance -------------------------------------------------------------- + { 'lewis6991/impatient.nvim' }, - -- only the most useless plugins (some of these are also ui related) - { 'goolord/alpha-nvim' }, + -- ui ----------------------------------------------------------------------- + { 'kvrohit/mellow.nvim' }, -- colorscheme + { 'lukas-reineke/indent-blankline.nvim' }, -- indentation indicators + { 'folke/which-key.nvim' }, -- key map help + { 'rcarriga/nvim-notify' }, -- notifications + { 'tjdevries/express_line.nvim', -- status bar + requires = 'nvim-lua/plenary.nvim', + }, + { 'alvarosevilla95/luatab.nvim' }, -- tabline + { 'goolord/alpha-nvim' }, -- start page + { 'dinhhuy258/sfm.nvim', -- tree view + requires = 'dinhhuy258/sfm-git.nvim', + }, + { 'mrjones2014/smart-splits.nvim'}, -- buffer resizing + { 'axieax/urlview.nvim' }, -- view urls in current buffer + { 'matbme/JABS.nvim' }, -- buffer switcher + { 'ziontee113/icon-picker.nvim' }, -- icons { 'petertriho/nvim-scrollbar' }, - { 'alec-gibson/nvim-tetris' }, - { 'kwakzalver/duckytype.nvim', config = true }, -- like monkey type - { 'melkster/modicator.nvim' }, - { 'nyngwang/murmur.lua', config = true }, - { 'potamides/pantran.nvim' }, - -- - -- colorscheme / ui - { 'metalelf0/jellybeans-nvim', - dependencies = 'rktjmp/lush.nvim', - lazy = false, - priority = 1000, - }, - { 'nvim-lualine/lualine.nvim' }, - { 'utilyre/barbecue.nvim', - version = '*', - dependencies = { - 'SmiteshP/nvim-navic', - }, - config = true, - }, - { 'lukas-reineke/indent-blankline.nvim' }, - { 'lewis6991/gitsigns.nvim', config = true, }, - { 'chentoast/marks.nvim', config = true, }, - { 'folke/which-key.nvim' }, - { 'mrjones2014/smart-splits.nvim', - dependencies = { 'kwkarlwang/bufresize.nvim', config = true, }, - }, - { 'rcarriga/nvim-notify' }, - { 'CosmicNvim/cosmic-ui', - dependencies = { 'MunifTanjim/nui.nvim' }, - config = true, - }, - { 'dinhhuy258/sfm.nvim', - dependencies = { 'dinhhuy258/sfm-git.nvim' } - }, - -- + -- functional plugins ------------------------------------------------------- + { 'lewis6991/gitsigns.nvim' }, + { 'chentoast/marks.nvim' }, + { 'pta2002/intellitab.nvim' }, + { 'mbbill/undotree' }, -- careful this one is written in vimscript + { 'windwp/nvim-autopairs' }, + { 'numToStr/Comment.nvim' }, + { 'jghauser/mkdir.nvim' }, -- mkdir's when they dont exist + { 'numtostr/BufOnly.nvim' }, -- kill the other buffers with :BufOnly + { 'ahmedkhalf/project.nvim' }, -- cd into root of project + { 'akinsho/toggleterm.nvim' }, - -- careful the following plugins might be considered useful proceed with caution - -- muh fzf + -- note taking -------------------------------------------------------------- + { 'nvim-neorg/neorg' }, + + -- fzf ---------------------------------------------------------------------- { 'nvim-telescope/telescope.nvim', - version = '0.1.*', - dependencies = { + requires = 'nvim-lua/plenary.nvim', + deps = { 'nvim-telescope/telescope-file-browser.nvim', 'nvim-telescope/telescope-ui-select.nvim', - 'nvim-lua/plenary.nvim', - 'debugloop/telescope-undo.nvim', 'AckslD/nvim-neoclip.lua', } }, - -- - -- movement - { 'pta2002/intellitab.nvim' }, - -- - - -- debugging - { 'numToStr/Comment.nvim', config = true, }, - { 'folke/trouble.nvim' }, - { 'folke/todo-comments.nvim', config = true, }, - { 'akinsho/toggleterm.nvim', version = '*' }, - -- - - -- project stuff - { 'sindrets/diffview.nvim', config = true, }, - { 'notjedi/nvim-rooter.lua', config = true, }, - -- - - -- notes - { 'jbyuki/venn.nvim' }, - { 'nvim-neorg/neorg', - version = '*', - ft = 'norg', - build = ':Neorg sync-parsers', - }, - { 'loqusion/true-zen.nvim' }, - { 'Pocco81/high-str.nvim' }, - -- - - -- cmp, lsp and syntax + -- treesitter + colorizing -------------------------------------------------- { 'nvim-treesitter/nvim-treesitter', - dependencies = { - { 'm-demare/hlargs.nvim', config = true }, - 'Wansmer/treesj', + deps = { + { 'm-demare/hlargs.nvim' }, + { 'Wansmer/treesj' }, + { 'nvim-treesitter/nvim-treesitter-context' }, } }, - { 'lewis6991/hover.nvim' }, - { 'nvchad/nvim-colorizer.lua' }, - { 'VonHeikemen/lsp-zero.nvim' }, + { 'NvChad/nvim-colorizer.lua' }, + + -- cmp ---------------------------------------------------------------------- { 'hrsh7th/nvim-cmp', - dependencies = { + deps = { 'hrsh7th/cmp-buffer', 'hrsh7th/cmp-path', 'hrsh7th/cmp-calc', @@ -116,14 +75,35 @@ require('lazy').setup{ 'onsails/lspkind.nvim', }, }, + { 'ray-x/lsp_signature.nvim' }, + + -- snippets ----------------------------------------------------------------- { 'L3MON4D3/LuaSnip', - version = 'v1.*', - dependencies = 'rafamadriz/friendly-snippets', + deps = 'rafamadriz/friendly-snippets', }, { 'doxnit/cmp-luasnip-choice' }, + + -- lsp ---------------------------------------------------------------------- { 'neovim/nvim-lspconfig' }, - { 'williamboman/mason.nvim' }, - { 'williamboman/mason-lspconfig.nvim' }, - { 'windwp/nvim-autopairs', config = true, }, - -- + { 'j-hui/fidget.nvim' }, -- shows lsp progress + { 'folke/trouble.nvim' }, + + -- optional language specific lsp's + -- { 'mfussenegger/nvim-jdtls' }, + + -- dap ---------------------------------------------------------------------- + { 'mfussenegger/nvim-dap', + deps = { + 'rcarriga/nvim-dap-ui', + } + }, + + -- dap + lsp + linter + formatter installer --------------------------------- + { 'williamboman/mason.nvim', + deps = { + { 'WhoIsSethDaniel/mason-tool-installer.nvim' }, + { 'williamboman/mason-lspconfig.nvim' }, + { 'jay-babu/mason-nvim-dap.nvim' }, + }, + }, } diff --git a/lua/core/snippets/c.lua b/lua/snippet/c.lua similarity index 100% rename from lua/core/snippets/c.lua rename to lua/snippet/c.lua diff --git a/lua/core/snippets/lua.lua b/lua/snippet/lua.lua similarity index 100% rename from lua/core/snippets/lua.lua rename to lua/snippet/lua.lua diff --git a/lua/core/snippets/makefile.lua b/lua/snippet/makefile.lua similarity index 100% rename from lua/core/snippets/makefile.lua rename to lua/snippet/makefile.lua diff --git a/lua/core/snippets/init.lua b/lua/snippet/shorthands.lua similarity index 91% rename from lua/core/snippets/init.lua rename to lua/snippet/shorthands.lua index a7824e2..05453bd 100644 --- a/lua/core/snippets/init.lua +++ b/lua/snippet/shorthands.lua @@ -29,7 +29,3 @@ parse = require("luasnip.util.parser").parse_snippet ri = function (insert_node_id) return f(function (args) return args[1][1] end, insert_node_id) end - -require('core.snippets.c') -require('core.snippets.makefile') -require('core.snippets.lua') diff --git a/pics/alpha.png b/pics/alpha.png deleted file mode 100644 index 8f30ffb9594ff2ac739f349455d097fc5e53873b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32779 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%0DAs-I6qIDmem*pdVUESw_N5A7GgddgOuS4G#zf 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 WYbN~HNB#^1P*3Wd)+T74zwuw38jdai diff --git a/pics/editing-c.png b/pics/editing-c.png deleted file mode 100644 index 0ae419067e90cc5a18249fc086db4e2e89d537c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124122 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 D9DFAq-Y*N5d~w z-v3THmFo!}%eDt)x6t{IFD`Ec!l!JF6^>UG;7xPnm&@4B+Ss7x^K>bcMMv=fIY<;H zF@H~n$0zlYDC4os_kUXn6ab6^$>2)sHvCAp=sgM0ORtfJB(1XfmSe4KI}Bm2uZOz1<3k(d@(A^-b8dMH&TmNNXWn-AtA!yN}zXRna7BYcr>H zW)~jMd0a#*P7AwlIcuj*ID|_d&*uW~lYp$awR65_&^_pyY<(>L{vi*~RNa1w88X|c zb3fpA(AH__U!0tkjEv8Zwr8H|_OGi)?{R_+60~c9Y`y{m?5W$Q!2+F~3REHED2eO= zQiM7o@JE0*zuhKK5IOWsd9UEZVS8$ct9&S!)HCnE&2e?8es7a89n$C0>v0zeC4ad{ z6W020g^QzwPIq;<5XWRp|Mwt*aB$5}&B@AMy!`=`HJ0bOBm$$hkGSjB!QMK(43}W$ zgN=)-CO-l~n{|6CIxna452EukO@NPy#w4EJUUa3bpp(a6f?&DORmLjqoSp${&Nz83 zDKJoK8a~*C_zyM1`IiqMI}yXfcHC^fvT7!W_na6Uqe4{I*q(kqlt8iri!K00MXP(X z2)DpMc-B7e>6%GJt|GoJ1&e zH3Nz1&tTEEgP;G*+`9K*WxJ2B8?`_En2;Ugdh06Hng2pTF-FBp(~k&X2*yR4_BqbI zj<`=aMHigt9RpR7+Seo6+WLJw2%-0a75n^E?78&Eg`nCU$D)0g z`%?v!DI7uxi(eLGu~7jp3*?MPhE}JoN@sU>@>gRQY%qHe5ejWM>RLq*eA$Wj4N~tP z@;Ok>4>1b8dCnEiTIST$dZKMVNuXaX7w1xi_^`ZFbhSF3m<=0&eHcLcx+(AZf!0BA zVr68yD-weUV5FlC$6cE>EdF#f^e7g_cUAj0C2G6RChzU>$TtMUD_<)^LEYcpg?~64 z<}4gxOG?x_0T;KhI~5Kx0k!INnrU05_@$b2J9n2it>TNQU=I#&3BWcI^YDC$-{N=V zi*d8qz9Jy$^H-^R)#fu08|H&A-)(_5z^&+BiB_c4C7>x9EyA3T2E3t0Z=8pRV z1+)-e=k*eo_q*d6?eMNmEU%)Aw$B&%PfoJLH=%8h+yBEtj zZp%O@;|&Y**$jB1T?_C{?i}ZI<4mVM{FLz{F~OxNE<;aQ>=T|3(lWIE+$ZO=%kAtN zKiZaOnukqk%7X-U2pGOEkI%;S6fa)_A^^12$PKuipm)g}RV>>aaU{RoRh=(@VeyL& zrc0_&#LXSx*7A+1D5;u1Gm(nCJ%j7^=sEv0^<1jzE~+VRmK(tN05+7lbUu*CToza) z>@0LYuQiv71Ai?jcyf3tq3R!=D+26al+le>`>v?EHx{%(q?qU@v4uc0XMvQfN_Y*Q zKG*$U`5Z>8|AESQ-~r`TC=D6AQs;N8&0BrdDHZtLH)=py+53>>0Mygy?*TTsF#P){ zxQ?!}N-W&CK%9@L5x(631Ql!@^X0^$Vc`tiwWz7Y+kMe` z;kM-O_P(`-g8pYptIUIB);CQgWf%aS0^s$y(C8~E_-dZ=)%=u5!Mga6zYKFN-mrJ^ z?5q!(0DLqLKBDJb0I;yZMwf(L9F|VK0&lN($5$kC+0+rH46;p-xDVl#WS2gtLg23s zkBBRvI$4an4=SusXX|fnbonsMT;qxCE3+Fghaf9R{57n6j=TVI(14D1l_r%X%Z#2L z##CmxOn!8t6BMT^+f6C)bkRi~Ag9O04i~Q^fTzU-1p4t!Dyhvl{eboY{2c6z&lmpr z%LchN#WfgI$pTV%?*WU&;aGImxk^T8&r6z58!hyaJ%g_JVb6FbE+p^vT&;b_t+uqm zEahqEa;a%cW8i4XJu6b+aZx~W5uD!s-6wOUq!-|azv1!CVItJsW{YHXaS~|_6VT9B zaI;{_P%wqEZ>P}@NtZFIZz6)TM3_RxITNdvRrcu49OwTN&~fZ{c>?XlI7aj!zH3!a zsN`DEcxBCK_{xAen~RI97-5)R-_#_Oq7)x)^}VPlE@DX3gCrs8jVK(ZKg=`#JD%l9 zD?v;cghx3=X$+yCcDmiD2g!vJ=lO4;0dgx6sqKWj!4?EQN8*)Wfss+rN6fC2il5xsPcI|pE9kMnx3A4Rk>p=?(4w83kdb|OJ~1*INQ7g26v48 z)-P1;*dc|U`q}pVLVaD8j&UJfURh>PaBYR zh99;b7!uHD%bwc6PLKcG%|DNufBXaO*9LniZ#n?=1Oy-jgV;C4D?50G+S?MfW&kq* z7Zfy{F_%`x-jgUVzw8h+ez+JeAi?G-FndqPs*E3WJe+~T9MJl=Liyh@v)p!3iGhC+ zA^2#cqFk>7+zL}^;gdFGnAjP#6*`;Wbqi1~v{b`~-b#+~s*d~d33+2SQvt)e76noB+!D!3TeIV@nh;nXg>2^v`E*rKesSV<{FxwzpAYVwFQe=l54f zywv9AafYBkkOSiZt@r=1X?CBaErRv|x?(<-NF9^0x$P6D*RtG9kt}lv*q-$!M5>9Z zLr58ZaJ)Obll>&U-v0OueETCXZ!WH)d&qph!w&0c*De7g#G+czX3cX9So-?dgv6q0 zwaunyIEA>WoXd9lC-=GS>qEIGWd@=VTZ7+{NNxd7t>Cm{gXZJFR_xq%#pyz6dB<8A z*-ed;ZwhS^Yv?(WWCf2vC2 zrSO+w?iUfJLQPp_z0eh4HUrX62?^R2{}0N=Ckd2`6u}KmWbSW;q!hDtG;iTONeLIN zy>h35^M}7(_?{OSM&9UtGU!0hL^cthd9(w^8QNcH!{7bwUp5jc`GhM9L!+#}cKivj zq^?J6B$_>@;LWwDPqBA+&7Prhq(8JYJWzU)kZH0_UB`bn@3?^)bDo;0&{i(jRI3^@ z(f{8<;4S<8v?X9oay~_bDkZ+iK3kW$~^Wv!ar0zFZx+-O(!0vr6xkx)Dnsh%d!8bg_QY*ZTyGb z$UT##*B7slhi2ZM5dR}%P4Zkqs-G4+$Ib)5W%}oMRkELQ9!<6>c`fH%JpWnw!(V~} zd^`GW#PAg{XHngUW~L`w3b~G6s?~q}q66LiOYebY4H{teJscWkbY;-*tiNac^1?m3 zzI`xx?FAr&)1%A00Q@h=R=x|vo35$J8(kh}N5nd$zq$+8|z<3#SNb6zS{tR#todQUV$Q%2_Kr*3xbduHVjYS;V#MZ8@5G^%Z z@6DoJSlm&C{;yN*MP*H@tCI(=MI8Dw?-se1ygxQYn+FO8T-(aXn^6K$9ad=f?wK$D zFS?gIz^>N^+9mxn1c;vYG>{_D(!LRe)&?~#`lx2hco1>FiK34pIwM z>nxRnARzH{6Un#&Z`&WPE7`YWYF)Af?j<3UxR=CGCm5dEH(iFV9GusG=Y~Cu_!Lg# zt;7xj>cAx@r(ZlQ?j0ByC|Jlzz5Gs3ugsQ~HecT0Ux1Vpc-=kxz^$4xU~1`g9*x;@K_`$doE^RR9GOwP}q{r(?@*PBvLuRqUECP^U3 z&dwgX3MGK0TO9(SQxik#UX;{hR=#aO8*yPGm6dI44PXD`1hZZRdIg6x?gKm5na7V* z81W>~I=*tGOURmjg$r|QQ-biw)KtV_a3`Vfk|6n#GXc_jOny%^Tp+R#^#AU9M1W3Y zp7`qe6WlNrL(`3?OH71)JNEe+Ro7CMtN@>*Ko7oSZfslg)Z>{np^J!md*|(I-sZ*) z#|yAkJp4?@2h@{*8Xyl6HL>ukxuq~=VvCh$6)+ZcM_D9rxXi4!4lg#AnA`RzW#vcK zUYs2QW+$^cL+!u(z>UwFam%WpwH5FP=|o=Is}mrE)bF$9?q;NtQij)B8)O2~47}jZ z?E{nm<80Pv8l8KqF8#U+OneLsOlSlLxiDC#H?Elm+5>{rZo{dQANv6fn%2fD8$e3- z^i!Y$Zn*GPUZ*1!mWblwl3vV-vr{4Ja2TfGHD_{Tha0ozOHi}W#cCz@b5i*!}9@tm&4wt?EZW`J?bdT_%%80xkwp( zRYe(dXzDB?`3+a2KMILEumZot@6xsyOW={}(E{TJ7Qb0$ut_+`s^<)EZ)--#Q2$;= zZD_h<@{?n?U4@mkq^P*$zsU{)9zt*ab_iY||99~H)X0}?$Q*N_(~G(OQ$g+}q{hPg zW@1q>>S(Pfhp@Al_CgX+jj%AcXppsH~Ck$(CigtezgOxfK%6 zl@uRRmQ(VcZqc{mB@xAUxvbRGRM3Ysw57gGTuO>9S{!uIlQ|NRl9~?_HldaVg@U4K zh)O%A8Y)iCqi{vF;W7&yS=msPIu2$h`l*&E4ygbfJWk66umSm^fgNZin93d67D-Rc zY59UAH7RLwWw?-TZ>2*jhl@9PEVv@EC0A8vK0)X5G#79^tE^s4$B%uu#reO*al3o+ zR6@-oBs&j))q$5h5ZDHD7!yJKHfYy2h;2ttjwK}}<#s-KpEsxsRe)#|Lw4<*goTB5 zb-%0SmAt1xv-&=`d?{DlzkgpbS4B@(H;4@J`ST5Bd2koF2hAr&9uhMIKdg#q(pVeJ zBiVAX7%KMdPgoeEE^`Fnc(;nY zm>5W%!6Lp5A)%qq%?IAQw|r`CX#tYO{o&SD(K6N~s6sYBNnFp_-s*^Z5U@qOj`%Y4 zymch`o-K`bdCTt(WgpOSspJmax}(p$C5bYPy!1)!e&Q zER}Ph&&@S@DsJ7+S+T`^86kca3IbCW;Ha1^2rXJ#)IrU}%UQE>jlnFrBW& zl9GL>*ma~g&MdR2sF+i=y58<;F*?EhXNOc=%>&FNyYp{}d+jO(4iQn+Z(d^VB^J@E zS660c>dkk?7rbpq8reL7C~DX1iJ4(0e-#3o6-F(lg~3kF*{4L|)AfpV;l<{%?bCXX z*`;WlNEo!f)Mt#1t@G9>XtaZjd^+)tS?+oEvQ~~ID*JTkFkUlwia>&Oea4U4#E%P_Uf+?NT zy<;f^!2fGqiOwVbqG>W@q@so}u_A?wI#DpmF6Ld|Ij^mbd0|yw;x9 z-LTj4f`w_BnOcB0gBhP<&HFJ`?A5w?#eF|e zClz*}dr|rc5Whz`V6ksE)01r9XfM~NnQ^>NvO7t#e}9Kxv(fLN_~pn9t~lb!n4a;u zSo_>{&PA7WMa$^5`Ej0l+8)h>cKT20*!KmVxH_3bf78;cTnLM@_qwNf_7~A`s!MegL{(&?=t01 zZr{W#D~NB>Yg0mnb;Pn+q|*}>?j)q$UbIvex)(yN9hiSy&v{Bzwk7V9gpOIEqZoqO z+`I-c8n5J_yf|9cWJv}?XQmU!7Md(OJW^58+03XC`*XQEgFoJa zWOqE~kZsRPi)PTJdawz}N}Y`X!bmZ)OI@rj)FSomomW<1g4G$Wl{%DU-+EXlSpYm5 zg?7Su;oqvO)$#_pjy!CqIRsY($wCC{!f`i`KkXZqK>gNT0ijjDqDzOfX$Jh&!}hGR z9ei~ZXX2du^*$w56ArVjOq4`SQ%(T{kiFc~2MUUcHkM#p2t>TA#ro6W9|~)>tf{6= z8ST6Mrnx#wXH^;rsJMf}$r4KvD!Pjm9d_y9v4oVEWIW&56gctEDJ)&~ckiRv-|Z6x#KH$e%Gnz6XGSf3di6 zVsPEOdGp)1Z@RF1xE20BK8(@g4GmK1aH8gL2xZE>J9h*G1XRn+Jk~!h6W(va)*J#=?8qB5$@#tS^z`>t1KAAF|NyY?)P8bg=2{yT5bl?4ohAt8)&oj+do1JuT07Z*vZ{Ddf1 zgChAZ#yp?tL3UL z-|TQw{+&B_{BfDcDJZ<0j{3RyYI5^DEu_m_7o(kp3>+ORRn8^Lw~8v(PcLNv(}4eb zKq=|+pMbLQF0=6bNX@x!T1d4vh1(uvhqQ08H)E`ugJ-EhrQlxA@-9_46*;-!j{&RQ z%i}N7NlAIr8WBe=y*a|^zTMOZUdG5MQ>o)UUpw}{j(|2_c32ayo8(SAuTiTD(&Yfe zh81Jlu`bkbxR!ZWZEr6h>9ga6Q?v6}xLP*pba{U#xY||tC*c*4-I)}Z`o(J@f$L9h zt$?~gbt%wP@dSJL{m-gYQ?@e^X5WTsQ5eu`KkK;X<>d*}@-cB;L^@l+ncPp3j{`1j zE#s7R_jT99LVlf&n@U0eS_^#0UE%dNkzLrdU%6}fwmvQw?H^EO%Il<_}+7^g|1}ReIX$s-#&Z3J;yInC#S0+HWSJ4hvR>?23T18gFYw4 zkY=XU{CypYzc1)Zcgyn&i?py<8-f3ztRwnH+wZwSHcamR;?bCuCW^|#|AS-2ZjB@? zvR}V{d6$HQBsn?RzG_?}U)Tg617ouK=g`saa??q*&3b}b9x^5a%Bq z*;lE#04oyQoq`K|L^vps$C#F1uik-6^Yj0jX$su6uj<#|{p9{<7*)UF8@}@L$_B|V z{Z$E|dTgS4P@?)|i!BkituRvl`xtJH7q;Hg&)tB-Q0zz}om4nE3J+UPPk*Tzzw5Ct z83hFe=#-Eq16G;gWEj!N>y%jU9Y8defDpyW$*E@dJNyDzZk&O>^sS;_To}qxz$aV3 zK%5wPfa-Dyc=qg>IJvB~HLOYFPhz>izh(FeByynIGfE63auA4T7zDVLda)}M(vX3T zn0|+4dwLsQb9Azu$NnGq@xU_b`$7jOHP#U{WPU(S_1RbmU?DOxEuD)aBO`+=pGA;u z3{+FWige~eRAUnoIv3xjLf?!`zwts-t#;&a0y`9Trl)6|DF?rqVJs*tlpqfsOBR@0 zey7~&7|qt;ZDl>-r{dij4qMr`Io$d!At3>_JNvZu$Yp<3u%T?&+omfV{_tvmU$OO+ zQY&dZMgwL>maFRE)zEXPk$=f7DwPotLs`X;ks<`xrA5&T6+a}>CW44lTgLQ6NzMn zLZ}i-&7@INGnl6iZhxI7nzOYLf1j_s_|vJ50bs#&b#)~;4f`WgSQ=cZE;!sF( zJw4`|5dN={HliuR&)x%o4EURv7ziNwbe0GB%sSZ%F9w12EME%&dN7lvbf1;+;mKdt zs}X{VS3+#AJ6=GE!`K3KtegcOy8KmHB0z5z@%t3dg>2r+-s>7{M_B|jENZ4`2SZm& zi)`$N=6-t~OSCvlpMwKADkXE}@?=5190?=c`6Lw-nwc3~p!tGV{h`d<@+fBo<8$Y9 zBx^Y6x9yHm3;_k+5<(g3IYMraOqN^yhSt}knRM87;utMsOA_RD=V;>)v2Umv8O875GJMHTK}OmD1##adIBgfY&|Du8z(cx4wW=D- z>r~ppfa8k~l4)pYtmj~_d8CAajjhEP?cFIqWq^~|c-xdk$L;1dzVCSWgy?*@~ zTu_j?Czr9a8}|F`SK4jQP1Si(kdpq0ee%E)#(I37*#as)19Clg%v7U;ZRPH|eZly( zR#sh|z|kN+g5X>QmtWVLYut%aD!%vA%Ad{|Kk<&CJY1hX4`+cSJ!! zVI0sZTeB^oO6OZ7*dYefKwz}OCh)Y%8rkC+KoX*lKiI$r7h#N@3umXtAdj&`VR`n< zHGT4f{&17Sp%GBF2Ax@6(1$$%_YaZ(6Q$+HKUF$XFbH961k9BZaIRX~ z&Xj2bR{yh>s_>y9>)`6}_Uwar2w?>{H_2_#Sx0}@FoP{gDy~^Jlb`Qo!|CG0`mcSx z;v!WIG78e&9wc_OV7|#@g3TvJ`(V`sa$JRQtedBHaxJjWkGi*U+8P-61VC zbVv=&-GKi7@!eSK&SEVmgqb<}oHw3$ch^Fwa$vJZ@H`oIW&;n<#@m=l-sn)GRy5Qv z8I%dmOXSM*-|zDD zSXd_Rl)i1d|4ZvY>D|*inmtw;dWg&W0!-adaTnLtuqbxqeC|W5cGV*yaAnZ$(a)hA zIbCCPnG_sIkVooCaCPS3<8akKL;}VL&9Fws_sp%xC3~U^0z1>Sc?-tbS(M4M(P*>w zEuA}eveosE;GX^!>)iC#3owo&$0Gk}KH;s^pANdOswJ)rYI~k}GTcY*h^R>ejYGef zJj}Fk5MCOd&V&rixmZoMH?C@$S!SnL3oh>;X(yiaK%19bJdQfZ3IgqTJPzdd3t?-n z#}GAnzk-T8&HZ!;bGYVOc@h@snUsI{ek&wUsSgh~d(P!&N`>6G>SNq%<+~-Qi&1A! z20R;cW1H%K!)-vlUYT}ZI-ZlC?Fbdn6fE!IIXAs0d+X5lU{Cg7yCc&JSraX}g}D1c zTMe`0)G9nLop%C;{!j>|biI3PVV`|4m>u;HfhzA1M~#ldz&A4FziUd1=IYP8hqGwS z*+!qOqj`(=x$1zaLjtBBl*Rp=_L3Jo(SJ_OT>`M9a>GO&|I;IqfqjV@LDvTQ1~G?x zI>j@Ooe?kL`Yn7$6-be$(IyM$r|8|iH<$E^WwweR7N2H;aXApBdFxa&pft5^UT#Vb zUGd85n>Z{BX%K4>QfLvP#7g*0L57ckcRai)xl^GYVEYi$qakyrruZ#vz@_duTu?Yk z+-mVUHyi#Td42MYQnRSwWQ4wMA@jI^FI=J z5Bnx!l3Wu`{jO%jeYlms<8rX;ZU7rDaHy^z{V2Pgkg+7J^^9bBq2;{fkSgGAjK&e{ zAZdR}P$n`W8n|>!$N1|e-XKvmhInwT?y-Q`hUiI!0lV+>GJ+a-z#I)sLGFC5vOE)T z$c$~_NS14xYv}!Zf>N&BELiPXD+MgeQcl(W_z8Hh>o}YKwp;-^SV$tbOwYQ@Xjanh zFW;OCrF;Gu@>=RDs;*bSeGl$Ef6A4Rvp*&K7{iUC&F?zzDQogTU5E}C8X&N}xJm1^ zb)9#YqUWR%F$Y;!5#9R4y>u9t*Kfr~U^<8Rpib1?BoAQJDW-v=0%H3b?gu_pLhUA3 zhlFl@vOj-947A>Ye=bNWe$T%H_VAOvOSAZ9=|*k4zlie zo;n`;aM4#>QkzlmT}dGs&qQAATsvHKda2ch8(f%5jxY6##kphQpYPI)e;jZ-{TUYs zrOy08k04MlG+8|ZhA~B@TWIY66qNx3_F4syzY-Hr$>uw%*AAqgP>ReLAJ84mA%jVl zo(Sk4OcL%6<^P}~dkw(Ejb@3TDGEU!<_Ba4Q{JJx^yCcvDpceF7Yxh*f0&$H{{mKe z#q0L!CUc>)459<5&+{D{p1^{uCd-u{%T%y)po_^_4hsCqY~=cX^}byW47FYFT{xPL z2VgMClj#AQWbw4b`lON>kd7k-DgJLYd69`(TkqBV>wqZP*j$LUd6NV)&HBzMfb6Wm zlD<#pd8Oi>mojc%ph*h$%_BE%e=GR5O*+maWO+$QCQ9XTckG(M{Mced$5r6F0yIZ#aVIi32{Lp)JwQTT`KAu|X5C$)#i9`5#@sWl5S4L_}m z>r}h-ud%&l%TosB^hiBb;x-uE8XHfcs6TnQb}??I5|RbEQLP+EBIQ(Gw2aF;@N(pp z)OdQ7wo=-kFutrUnEwn1tvq3&x)LWjPDG{t_&L3o2q3+O1I?0;x(?eeYYCg^Ofun%-hBC+^@UKCUC&W33E`lPAL_QD{=eY81L}+9)I|!1*nt;jtk*N@nB688pE@P zR|VtkqZ~?Zr54E7J*`Dyy%IHc4W#Av^JHl2RGeTmz_RV#soJky1L2?-Sr1H?k(8TP6c=C}dL32(VMK%9SiS5H zP=-1|xs2c$h?886O7gFZ`&de`k32)bG^+-s*=BkkW5?_AQXjLK1Q8^sm#^)m$9S*n zN9qj9r!#)O4$`Qr%)J^)xlojq%nA;zJ2EqrtI&~sVQON+^QTYj&<#3J3~yu&!9e}_ zlMCzM^hWfcIb>HkaD>_r;=V7uA1t-=qAT3S?OUm}2NhLqDlDiVSE&U5)2DGp0k2*0 z1=+_#4i@hs`zpPs9~HclZ+56X8Gy$uX*qoO{I=w35^BA8LPEe|NWnw;@Ec6xOv%+b8W9{yy>k%#hO zZ6caIUksbJ)+Q9?{6jeNsju5BviwsSs%E{pnI&*n9)XR%~ z#M(6#X922&!Ia=#H;!hLh3*_=W#&5+Y40OT3%sp@f~l4k29HP%ZLq(;B6ZJX_3A*@ z*hC&zwSu|%8wG`Y(UI5Rn@3STFpU8c+yejNcRree+6&pB>G{#7YjKQz?7{pTdHoFb z&0kmTr^DRm>Kjwq_(uMWy8+nyC+VH-6y}A|40YQ5TzSU%WKY}|G*347nyV4J-uglm zuq>b29jRK-8_LyELkBgM*!ZGSIwchIy1fR9QNHkG$rhT|dMFWKd@s-#u{41VJeEnV zlVZ`!_e2lNar{8kUOP2!X4XSBf`U6JS!<{kStqshD!L~fE0W`i1Crg4Q|}%M*3~91 zQeV^5_#K!Ua&}?8BTn(&fz;72ji+W+6TERI()J<{#HsHByzr>HMm?2WB7K=)E zr-gn(#X|e~Ap)J$Th4)-{nyp!t73`TgJ{^dR*O4wWL{i>f2xap!o^$Zd7Iqe(^Ym^K=Lg31C7p--_ zPc%mcF*|J6n@(w~1y5?eB@Pj3ETgYewWzY~)tLXS=Qlr*L%fE4;N<}2+1+BOL-rul z;#6MFUPqIds}HX^%jc-9H1o(=#Zpu)R#QyT+_Q@7vd1f2uSUsPjo44s5V4OP+;g9R zJR!k4L7`7#w>_d=kNVSAhp=t~f4v9uTtkKly}sB_xwdeaHlJz0_sG%x-7U0>SnILB z_<#b|KRfPmZMy>9uB~Hh#O3t=f!&|sGh1ut#PRD=g?nJuoO^CE`gbGwweIjrYfBX7 zlkj;C;Sm^$rn2@#8vOcf!^b0E9eTa-!pqN^nhA$b!b;t( ze9UGXvRy`U%tIf!!Tn{eVcPBziqrB_1p3ORG5)!p@ZBhI$F*pkduNxh%A@rWO4=<{ zingw<_dHSF#%Rbc-x4Gf_}x+}D(D$4-Ghl{*B91DaDGwJYG3tczh~}$$}&PK&%$@H zo<$ZE#!MOg}Be+s1e`X@Z;G#(79_f~lUaE_jA?I8jWy)QPT6i6ct#Wj<&6)hjRNIKr0u zxW1b7k2@lt#ugF@Ltl7#1t0qTvnZOeA)JWSgHL#B)|}NXgy+Hu^^LF!g|Q2hzIw|1 zsl&CJ)5+pcBM63ISr7aC#dg4wNOvrLUG)?jY-{d_*ri1C;nCH{ZAZb*G5^ejj@~_= zIIXlZiHzLuwOj746CTdTJ1iEn)A23eTi0^u_2xHg&ZZn@lfTH8&{%vLFG@mR+u(KX z?-dw+HPDJSU z-}Gb)A#qWKyWLUiI>I41d)>E z5*i-W7pGXy5Ym8KwI71uGTJcwZ9>ZbV!WzEnH?c`u9p}Q2d;^BtzExDURAMUm`CK- zX1}NlrM0**Jx?woTy!Vc2=+x~Mn;=1-)(iN#*U^2BUyaqgf$?s9s<*?Vw&>}5G?d1*ZRuR6K+ zqJnn*0uex=bC`Ip6WhsB4EJ9mF}Q8`e}DMqj||dJ8Qhzi_wd$8+}afo+Kpk3$-zT2){XuB#Gf7K1zcp7W48Cv1=Xh;dS!L+q=i6^EZikVL?aliueAf8sj1HN{K&@M zy2kCipDiN{J=NHBYmKP9)@rV_-Q^s+Yb0QK-7{nuzPc^e{wQ9Tqf&a5x_|HT<-&FU-a*HVCep7({=4M`ckQfQzn%l#gQ{Dq# zCOXo2ft4vY=ILXRmy_dix*{;!;FiV5egA`2z4NiFweM0!{+7hp(!PeUQB3VX-HHxF zFL+nFnX*==sh?tA;xZ#RMdN+4qxgKh4rZ_T`Doe*QY6oT+kv-*=_+e+(muv&x$J1YMS zQ)|n;rEuH30($4ieTSFPOe~YC)=t)f%`vF>&772A14b&6g)*@Fpr<7sJYy}wm3t)h z*pO#y(2lPcr?{A>hu!xEqq)|tQ&vM**5PIPx{dbSA=r;Lqm=UMe2(Vu5}Yg}Ey{D} zyTVCa@f!8soikbV8ct01+7es*GCxX3d}YZN*Ul#d?{`Na(gyf|J>xQoXDXNk+KSrd zJy+x%N7kEP?WR`KXMXoZUxcpI9tP4qtTf|2`6K%6aoGICU<(6QG0r#_tpF+0S|G;r zr|-2Q^4#urjs^~{TIU@fW70HBklDC-FAB!T$Fs9lpq8WA3!d0tTe^%H&t13S2%mOg zdZG&nSz1oL^i)w*_3~-N#&tUB#+KY2@$Be$;n%8n_!0VUWbj?4g8c`NDMk5j++60@ zj=QQAmoH;*WO7XMkZ2xs#Bx-EdEFEp+eZDBq)H}pGhtZgLdGfa=*&Y#{oqAbx)oEli4-!DdpY8A@mEnVkqVZ6{vle#Y zIObFY2Cs_pazk?A00MY?OojB+^=Hy4dd9mLbdKwDY8BH8+Q&NWUEi=@o;FucnN9vW z=E(ks-+d4VsR9ipeqhd-Hi~kDLkbBkqvWewgZ*c;$Xsu9-H%9UGPTPv)FGn*tyXx} zvOG#3PUhW$f?B?2W zjeUigNq(z+*p{n?$OqwRG6hqon$c?VgmsRW2|Sf3ctd|Q)ls>V(n?OB4dE0Ch9($( zEYJM@ab{#-SzC%(cb8=WnOd-8c#aGYcF0oaqs%g(9I=eN`l)g(HHW3l(v+wZDIb9#XwWh(ZP75WvvFhf`p{8bM*!@!eJfnn{np!D`7AOJ*l9aRyq04e0+rEEaj3@ogZyUa>(nKO7 z^Us$olZu%tE9o55YOA!g8vT122>Z)bm(r-8WSp&Mu1Zoh?EP~u)U0RR6;IjbG`_K# zY+$M8^wn@wKBHOwBOV$kJ)>2gR2AlO-O=bEp_R3gUTZ5Vz2$?(kkB$=wu*yQhC97}i z=#M7T1FiO#mqwi{T~}8u--(bv7p2I^08{vftY3#4Y@=OWnaYJh8(|1l-w9Y)K8Pf_ z+s7Zq+@ooi+Skc?OW@OwqC#Rt&>d%jephD4MOl1!`(XD`ONJiw3=y{7vK?78n2j|T z1+w#8$vw!^TB31Ke?H6GML@)z$rAgVr*BEzlFGiRJL8K)qUhheR9hi~tdX{f5m2*L zrO@qUpkPePMXEfIgLx74JZiJt(%{3}RuI3)NdNK6pZ$dSzl1~^JUl$#wb&fVl2!SI zFZI~PDyEB&O+pmu(f>!;TC%ri*1XNm&R&0gRZ++L;IsEJ=|In};jG!#D-Md4{)G8u zr&H7?<^k?fTbJbd%1I4*>~#a_WvuMrVQ)m>0D=FOf}-jl$3~G)id;qsOmr;OTJlRA zda4eaiJl>cz3F9Am-k*V%Mva~Ph?X&j!fF?M;sUL9D~x1B4hp7f`?fmV3Qb0f$k{U zl+vm${&`xZAli~>YgN3ZN@xN*s2d~wzxMd~pqgpEJ`a2wnqXgAEv{^(S#2NoQ!be5 zC{hBnBq^Hz@;x$WI1hsb+Rx4heibc$Ld!fFF|Zepj*ePAOTKHX zR%u_GRK|r^8lE3BNE4ua{>+?V9U{EQe&PONNg|TE@q|eeL6W<~V)(GSN9%+q+ z@4mL%$99TbiGW8WUq~=kM5^Nv)^tT=ib+>Xeba;z^Z|#Nsn%<~J;ZPVlMldfP+VEk zZ?wgg~^=2MKL< zE5{Yv3`g*YPd6DQLmbCuHF4$;$0EnE zgZuhV6ABS`6OBolxUXUsL97td@h^>z^yf)d25%T@Sd>8v@~k-NEM;#k5HLD z9-y-S77rroC&lXO4KVpBF%*4!W1Y=39yY{4%2|zeKcROlq=>)XEGCJfWXD(tDW|Xw z0;!Qf8cNL5_2T8HDk&B((5z6E&+3%O*v&|kH#I$vnmWyrtao8zUlIhkis1n?(J+Jp*oD^|7%jTDdQ z!0Oc*oEQ)B=U?hXn2E|VM4?{vBmw=A`2kLMtPfB#ckx(!)Yq^T@n}C z50B>SxW}&b_dOGQtFvLOd2Teq96rokJzY}7c9Syw13Sw@B7qiEYo1FLe!T-!Zo3k22K)6E!S#7IpL`f$VQ~Wi z0Ho&m^%CDAqi7-f9maJ`7l(q>UD%GAqMX{n46@6wNaP5E=R**CdTcy*@^z`ulj0V= zk0HX%Xsz#agVrx2bOnUZyE^16n@b=$EfiC#S$^^c|A!O!`k z+sq<*RG2c`IFdFlj@>sVbrB)Fa3mukXQh65t^3q%;JE*6ASsqL4!zm0^UabWqtBKG zg{x0=Nq|!D@3M~)eehE}zr3RDV{S^Q`Ui$WoKYh?Yz9MTg9wH>lM(y@bzcvaCa^8N z>1E?!0(!S={yS9Pz`{ZnX?<$!q>#Gth@*P^j4uQwo%dqJL+9}(eE!cEdW~JblO$>HC(y{d zAmU`Tz12vhFPE6Gd%WPi?lJEU_0fY>gm_fxoRuETLhGL+oGv@_2PquiTZTC zZkeI(Sb4x$gJj13S%?K`_epZ~SlMVSb53xv_ZPo+T4wPEZp^W7;jzK`CDnr0TTIgvR$(WXTn- zYxZIX#iS+lKvX%S(5<)P7eUwxq{)kd{D~blvVZGOH=l`n_>N!x=90wY9;n%&VKPA2 z;l@+?dbO;=Z~n@thh-MsEwf5OD}@Ng3Y%sh9qT=qLLTgJFv}Pq*Izx8)^6v;4>32X zk8nHtlrv*-#yp2w$~uu;Vk;7MLG-mHBGzlQd$0)u`uOKhbBEn8W_3J;b_m^rJoqmS zl9-Em35bO)`U>1mbP2>PgA$^C%>V4qQD zIEK`s(X2ORk91#(79M~xvkgc3XIq$LR-a-lU{wqGTf$rp~_SUMpPzYZaZBp^kL@#|?PDmxKi*U1nS4^eylx<(BRx=CLAdURg7!N+Y z@|!BndgXVH6me{J{`sSZ4F$>PEE0tZv8yRnxQ~V+{o$dEAjzg5epx+H%ykcx_0Lzh z{3J{tH&;@Z(K;&iVAY>msdFiu6hCeh9t=XiOXYi9h#2O|%8)$`CZBjYDaac({87k| z+qetDWUo8+U97blX*;A2B8cK(pPhQn9OpDSIpuh6mZrnhPucJ%%P8w=HCz}P`Qv>B zXOo_98lC*NX(XSvdqfqN&eor_2!1o!g|YB>nX4Zs&@c57E`ID8t>bKJ>94@4)jZP` z~7{iO@Fgc9OS!R+E}dONj& zhu>qly8O_YZNf$l?xi8kcXaEuHi6%pG;uqQDQOSInP{kAqCEg5jcVfFB0MpbMW1ar zLpVCaZ1tIfZ8J?yDq)tCIJ&<$z?21=p^?O=<& zlVbj@5k&FC_)UD?xBKZB)lUxJX{$~*Tsna3#VHc7bm}Z5>9^cR#9YOtT>_&9w;{yB za-QG*W?9k`OlFFRcbPKRui1LKF-6_ zA5-!WlSq8O?!tV0_E#`zoy{tTla{-Xp5DXbTpMSjj%s(e8Vk2squwG)BocLP7%q1e z!)knMgvpp4hf*)$WT^{>;M>Kv63++|ii+AJyPe#}=S#hZ68iKa#I=+&5Gn&{5c-89 ztPV`qq)J>2Bx=32$o?#0%PTR6*yrZvJJ!vUmgmN+Mk4bh&KCOEom`w>^Nd*@$o%@V zrC~LlN|;VYaYC0<728qUySl-&wgjlw*2rhiT>)2biKM(QoCL5bO%MZKC9dRPp=gA5BMWcHD5N>00w+uN& zCE61F#r2KIJznI2bSIPXhKBaB{HSQBb|Iu&^!atVJ=m<$jl9R9W~-1v3iDN>wo0V7 z%F(5Ao`z;3n7BI5HiGbRyQIq~z~0?XMk>m-JnqMPC6HF0$mr`$T(~x6>#brDyCzU) zk~ro^P(^+te_FZF5)*OLJN~-Zd=dPa&r12($=mDV<2k{nvk&@06;(hzkWgka`8Mjx z6J60QU>$jI3bk0EKVECSFQZ@o)e${uoZL8wjhW z)rGiQ%Z>sr8n6L#;j8(Nox?elqwQ6hs#U8SeYHQ^TUNvJ!uXUGib=CnLJw41hf-vi z1%1`z`)FT}%#PG-q*vqU!8943;=d8()vSM-XtWT+YSA|}F;NwJ^ps@)jhm{LdPF zd<6g2UdqSanZJkPPFqShBJF-NB=%exX-s;E6rQh!X|_kQF>GsAMy$I8PRp)t*@zwG z+VmsB`3l3tXiDVAa{YsLka?f|pB2N7=A13d)@KmtLR~A601NN|w=OQnkLwt(GO2%Z zHE2U|H69fX-ESvYDH2=n-ktcWm9YijTJ!89H22`pyN0fNf_A?C+hku{gq_R4}ah5 z_TiKluI}r~%JRHKwc3rG)rsxu-0WhhfR=RGt=V$_29Ek!1pZ-7ovY1e%%DWY=ro5x zKiWN5ngzXqfpV?_;WX|&A^jbB97x^2Uehit2@W7|8p&4`tV-fVo%7wVdobr+!15gw;CY)gKc8|4a=40?NM|5#do@@M>^n&^ep)y|Bw&5 zuG#FEF5M?QbE2T0T*%XJdtbYdZUPN4!+1`8$fr2G(Jrg=4wr$FZHD#ndY|fC?3}XKi3F96Id8y> z^M03cM~g;MC+AS!ghbPKE09F_EkrJ=61lNlYnH>vkah|?SGncUKc!pSh-&KU&X5PA z%9;ajeeI79@!0#%*KjblXqnu0ELLA5E%cTD_nzD--e?%Bd5P^0-q1YCVg0C$f1sI% zjoq|u4gWV;v@)xrO{bhHNE$bV=}&zz!M8HTd=}=Sf@LF}#mC>gu`-hspXmdD#Z2nE@_1^>S%KLzXGuH&{{o=4QQ?3%gRxW*gO8&=Eqhfs<63sIVQfs9{d?e09 zY>vYq6)#irb+{0L&HjD>HkgV$?XY8O8|;~Vo33kMWmdQ>L-AwdxyPm+99;Ba==;;# z>W2BM-vM3jQqhC8{FwZ=SZ!>7 zjOHlvG$Qka5{M&J+jI=uyiAsO@8~))uH|+X=yHZD^COynA}7ywWv+Ts5Q$2P&y9-- z%9M0-vQD&`2z#&$;*g|^jQA6+#88TFj~vQ_vXZ%{c<;X@|ynk4Cdv(sRUdX@j=45Dn9Le7?&8c zPDbWAD8y9liGB+yoL_4gt(FMsfIyI&UIwkkIWCHO_R2&T!YHFk&3f?`RP1vH3-6iV zlE$p9TT#)R%PH9d&hjaRbkg~L=0Hq~q>=0etX}y$jpXG#RC#2eHBPS7a_xyd{eh?} z5*pNGs&2jr6fCRT$^uK|=9jLQr)8K^)i}elSLdb5ZLD~uwIP~{y*q+3s$XJbN<_3%xs(HhdwyHHm76gdJg;y`tUrn=Zpz)T6$H*r_?seT5H)4xS31uzA3 zVF-}ZWnGO8JNv?`61tLtqn+_p!`_pn0Kj8tHx#F;ISDZ05a!!E`dmb$`@Sg5AW{F( zQ0#^IRfu7sHUXAK0!_rC&x1iQuV|6>uBjAfs=U@>jc$)WV{_qrFAlC(3kvd}&r%7p zzk+8-z`DVwK2$*@KKTz@A9?V;8G|N9n(aC6IR!%8T%SzeXBD z`40j%DL_MX%M$e4?FnHxpd8(|GJNuD8<94B7h#HRp9 zxV;_^{49zb9tf~lpxC^ve3F$;wU3;a7{lT1pvT;ok;3?CGj;;vyx}n)zr>63t}36Z znpH%3?a6jYU8XDnvq$Xc(6waf2+|WTz&0x7Ds0scu%3ugKKc1($O84D_e_9{x}sdN z!@Vh^IqUv*{Teea$|KfNDJf;gav{r)QEX*~njhDmNNXOYDi#`7_Vn`|9*KGLoiV&us$$a-!5Xw(Xn#mJgLbDr*+R77 z9neV9lLGD3bhc;5*)`jMYl>&yfXOG^;4;`OF{U7!(zCAA^{{;7nf;`A%Xwh}pXt&L ztzak3y%LjL=;>|(lrC?U9u?7gd9i*zm6)(w`>4$J?0J{^ydi~wP15UMA`_Rq6C5W1ugB~XV6Of~F57>E+TVSdk-p_W=TefZ z)@7cZquO$T)v)O)fGj*emPNt+O9o$8wv0%ylf+dZpm91TgwW6`Z32(;z4NtrdVZ63mc*I~T!&uL?W{N0I zj(l;+U4zrUr&cxm9_qfPcNG|4BXt;a&^OQ~$_iUmZK0G->Y?vZwPLS<1_>&&On$-R zq@e=fMgd`aiXQG^f*T%Z^I+jA{sK_f`B>E@gn!eN1)9v>ScXD78*jIwsqpYJf}2o+d<>6e_BQSJGydTbPpcZtepPq2#X7o9Nq8sbmjX1b(yMu;XIr zP_4>(qdC(13iVERs0%?@+kY&57)m=wOYz#Lb7pfTw#904%ktT&mm-LMY^WRn?{nW~ zreyJn&+VqhJ8oZzRAl`a`ORkzh)y^X{5pqXhR_KRv4_x--{h!h6EV<*P`L>uc8!zSxI*7DCcKB7^sL+q4Gl%mZvX@EQr!n3}X+%Yg z=z_a$FKWfh1~n`cT{Gv^Z}N?e(m9RZbbH0#lLX85D+s&|*?&nmJ*{`R?NZ+8t5r6>Os&Cr%B3y9U_mbvCm%JKtGJ#0^)mGw(LYzzveJy1ig)Rr0%Acaqv6CcX@eg4x{2xYRP%`SOel(@MqzpdSbUBl1 z-k7TK7ENFh=XvxHCk9AkfUfg|l;ytCnj3p^PbU+&7tdX%tl4wPkYv)P49ck}u5|p= zbs?m-QCg{F&H8G1fXISssm4CQ#3O^x(1FCw_1UFF?VeJ@!Y~sM9|ym5*UoZJR_>ix zh_PrbZA4?ZFmPJX2u;g8r*U#nx><%90D=HENWq}(lcJaX&ki$+Y2&)gRb~K$bO%@) zCll3A9g%p#C;eO*@rES6ykt(ij>A0U`r>ioB6#R^el35}<8#$GYgTJ@Zhn#B|AppB zJ^t2JR{&=843C5Q_2o!pT;=Zm_=Vx`S87U}QAGB;<14ctV0!Dk4zy8k;7D3>k}fuP=KV&&*2bn~w`^dVu7ENI0k4@4X-`v^sA^y^lKIjT&pXyENt_v>6-rI6oE*~~F1JkeGE zx_r?E8C8`^9Mz7E|KMxB%i#-8ea*Ms5?mrkL-b?Azlvbtj5SZxz_nysZu0EE^X;Xc zepWj^!$%*@yd`_e);y7=Yx$JIYAA{yh+L=&70&r%(%R0tUJ9ncsb5kZL0^;`LYfHg`5m%%tPSM8&$zOF=E=*|fX5 zRC_g2>X78LIR_;$Bo|e_B%0NlI2vmxL_~EB({z$A^}h6ct-LyPqi7U$dUln*b|+~> zK-}F$73^f>iJPFTVf6XtBCxk6vT#1R*7yx&&gE{bbL&SKIzcm_m`-J)E|0v7r6l$z zQxmik^pe8=PxQy@!$L{s^5aTL;+oEO`tyH)PvC005Tzh20{0JGMmpI!D6VU_yc%tW z3pLKXR4M4`I;rS7ovt^RgfsvfD6Pq+iIj+2^i_UicoOqr!`VC6yQNgjX!8sK+QDO@ zn(Bt1@gwxKke`EJc=mFG3Y8qSN&VhaStP=Fa#4lro3#d z8%n;QTZ=+!oX&TkMjh7HrC6}ajvYS5?z$vqUAXW(P4qiY9#{|2No}?ZAW(y~6WP@x)O8-pbICvNc(wdg79`kfgey-kn0_j%y zit(;6JyoB9*cjZJ!vDg8)+S3S53VLGpf;(NtQ-dd9Bn8($zExwdC5)_O`gVDKLI7wEH!ZBumyF{|6ER0u1&4DTmNWL0F5@z6#e!qz$jei=YXw z?q2CS%*dnt?1dWk_SwlfQz4+E2xrNVZ%(oK3ylj<8-6ItqnSp+3~LJUC1G|r zP`aJ+4nFJlPeG>Smtg=Mo~>0sfI^|qghkpuv7*M?24<2_Q;$!;p4@+kHmLZlDU4S% z*qqF4B0>Uis2yuV20#J!#pS*LbGy?3-tM+Cxhz9i78p5?y!^~$YRtxe_5~#njH)U2 zcm0Rsc(y6kNp5U{??>~ViAu@SQ!1=oOA&jFBTlQ)k1X~#F{k6N?C+jy5+Ywx4DNf2 zi%!9UXx;}F?eaA@ILz+=qAA%yxNP7?Vg0J|e*ia4;dih5A;Ap%KxtT8kHzleU>au5DHk#X@z;; z7YtI&67#aL z{IC`2B$iceZkNTz-Fm@!pmS#8b6u&wmN|@R=^8Wf?R5inBmjdmT6dQ8xp)FkSV@B# zJm^@HrHq?O96u^Nwm7>*pHb8=q*eI6I1=c;@6*R_>UIN>8_*j{&i}HuoNoU{Y{8oS z;?xb5??Mp6MJJ(UpX}+kx#xGnoGFffo2ZqA8}vM@JLq>lgJwj{$;b{o<)7!}Nlu7I zEPY~TcFrs?slyr;KG3sry2aA=U=kf|K1I^;L>-Lz1DZrBe?aMjN1>rUg&M_&^fHcz zoIG3r3~c`JD^GYGgoSQ4tnl*xd|lw@W0f-Q=G;oT^UeZRX2vAPjnGGZT}(x4zG~9Z4dw5c?*3Vafnh->yB<&y*)y$hJz0|yG8wtXsr%$Vx9Ti=0e^0)n9qs{7%H)PxmCV6jG zZ4}t&NzdSwUX_fX6pTk;0HiJEB0yYp%Zh18sLyE)9*R6SJJitXh0kTI50qi;|~ESV<1w!g{62}4({geo77b!8jp_x&^OM` z!kq3egIiVqNx?-)nBbE0tRwSI!7*;B#!Y@^E)XR2gLaQT4 zX%q{FuRRLx78~vZ{ikwhq%z70wLQ*A+>MZRn=d9|ae4VUR@opJIVNu9K#U9Sj#m&{ zpk^-n??yIWqg3-w0z1Q-Be){EJy_h@`cIkS^)Zv|@NmG*5{|t@w#4N!G;H$czue+n z2W`XmnB^9kP)@W2+#ZB-Z;g1J~;01HicRwX(?_RMY)AfE@_ z*~2Qp8#G#kaR#tA}V~x$ARx0z|?}a2AiKB2U84-ia4UNj)z(7&JMk% zrfQm+PWhZ|vwX5-wHYPpN%T+mjYI>(ynHM$cNF#XMu7gcr$-3xBV!^jLt~s>WpUa} zbOeusd-&=K2P?b%heGb|IoW3CqxITPE$31al6o!Rq15C_Z%U_(VkCAjOg$Y~B*t-p zIPAYTMI`Y7DT$s@;?JZ9qZo6xfw^Bf63oOzjfpqS3uSF}i_dN2!o-{rfuLn(RRlMV`!EuDLd0(taV~)5uTkMHQ6G~j#qi8wp z9EC`1{Hd3J7rclO*a5Fk^zuPiN5$8|;-uuLe8ExqdvC$Q=SkF4!B3wyeg$-9EfwfiDVBZ_kjy>CO~V6%JMY+8GR zYejdfVH0{@_;29YM@psR<73Ydh-R(5t?ch&cKZl187%-)H(UQtI}w4g#$^6|k3Sm6 z0!!UrwQP+bq&$jrx&lW+3q$x|02Ht7zpCzm^$qXXR0nqFr3#szndyx)_kIq{L$BTE zW2UDoJj5JYO^NC;Zpld?*z<}Zc>n~p=zW3{1WjAqTv6eGt5moKA+A|w)`*aQBzBgAoAdi3nXM`w!q28#s)bx zRhKOmQKm+81Wfu-*VLqWr}Q~|qW?*{9mcxD}$WKx>)+_Fv$yYYVdWrs#bH`03lV+6yTegfEj&6hf+YJ4dtF0lrO8 z^$po@-V}eAha(tYO5h{9AK!ejdgWnQa5!%H?Qla!AvqQ(>&4u6}6? zCU$^CQn@p;y|%-dd(6kV*xQr&H_2GvA@%b9vZp5tKD#Fq6)-YXSj^Yyv}AgE zjsOdr?I8y%ANN_@qHfz_n@KdwWVPgvi|Xv`*261H(|MwuU4aDj=5_MV7(o=|_O>`g zctCeb#FOQyV*?*v(j-*gRDFIMkqVYFWS|HUhmlN8-7eZ+K@}PuI#exrMn? zb3io8^*-s_hk;}7&r+to%!eI@_QpUR*ndKQK^b#{7oU`!cJ!bph} z93>xjQsQjm6(eWEQ%Xw3rd4bb5BB^SkL@ zSJ&#w{slwBua@|({>vre>##WWWX)@r-T#ZX_l|1n>$Zl$iXwsqP^t)s(iQ1V0jUB? zm9F%T^iEJ|Ql(2r={5A;k=|>l2}qL;fzU(V9q@Ob=ehTOV|?TN<2{4nATcMLv(MgZ zuQlgfYt>eot9j;Ye$u`ra+8wJVSi(~tc**<54f*DFG@>Gs8gx?1G4ei=`0pD*fCVz ztlp=D1N=;_K*9z1v;zg?7O6ocrIAmdV7K#UOQfnXRG2Ss<#abt-1^fK+8Wuzw?*1# zfZ@nrJGW)5+e^_5HILcy6VR|PuRDQQRcMMGy*b%;@{u_y-R*zXuUdi%IW!nM@XFiwpikT#?!Dh> zwY_8H%Fn-BE>-a+O6^T8+V{q6?{|YoJ(KxAc5+wiZri#8Nn~_kI77E~yfyNp$xTOt z!!MrJc@`G?{sXaJm0_$Z$E=Z^Ov5#wIPqxiGZ3mo%-h~x%5$9rwGXppRAXhLh3@oG zR7`drX^j5gh*(F?v(auiTbUF-1dTN_fd>Rs;=|e;VvXtU!SeoVx+7^a(X92;=$`(V zKtQVX5VJDH%P4BA?LfylzLXdN9p)qyi2ssgVZ;$Gugk)D24y#JT*k-7@aD@(O5Wu% zU~N*tllQl+T$GMRYC4aq9S`dR%zY^P#hAvtu?dr@AD)A4UK?y2{0?p{<8$4;BgFcm zJZ`=Pzz4FU4u--`_9*~D z^xOt5iDv2kB#N#!f(3Kubn>5lcU3$7J_nGhX2$k{8c{lOE)5y0^cadBa0dx>d0Ej# z@;WS$$3VPVy&SnnrW7?kFC+T#yF&4n=D-Z0sjNLnq0s#-{Qc>rHt*eVK;WkwJCNp4 zedvEZSX5KlWYE&BpHSt$<=w=dwzy{&%_{*LS(>T+Y#8|d972gI;boonQ&?2<+=wT# zy*SYfLWZ9iZE3mYx%>e@p2~9sF?sW(S7a7z!Z^XJ$_9zfo6$5BKR+q%oR}!Azaf7Z zqoCqcb7h3tBj0N|K}xaJjL0@fk}YME&tm(KxCqiRxDPVre&Y`kQLH_@@=9)ICPFaD zL4<$!N(*!QvvUT=rO7Y$Q*(0V?Yisf!{*mD-On~2c0T|ZrTo<0K~gz2)GDY^5fkSq zMR7d&uZ%er6GdCuWn#};AQlCiDae@{7@%BU160exT^Nx_*idBYN}SiXB7YwsOEn=KdX?>;ka}&q-c^!=%i>0Zgw=QXeH~Kbcz4WnZz8h_E{__6J04z&-lXb)iq^Sz1 zoLiOVE?vl|+lm~w;+eAF(S*qRo0}`(D~aH})lbV-UOdd{**&!BRg=}Dd}{Hi$Da7H zR`G{UWulEpxPvUkt>!>gqO(z;($;zneF$>%%lGvi{KLcb-t>zwFi1RVnReF)ziLc+ z)NptZ6OH*(bZEd3hGdN?*=a%bjB}z|*>SyRk$4X`?~x z>c#p?|1b5VA6_TP(_tjPn0$X0o<8p)pLnOZy5AK^@#q!I{GJQ(7$^R|v{kh@LiL7A z5GzCLgNd_N9Ste-o$2r4u(h}H*CU?&w`gkp6?`azZFqF_@|E7rffRm0P$&1Z8tB5= z6)ntR8o?~!7PqX2+n=L@sMC|EeCi8|8?H3;+8J)H@xY++`+3mg!25fbX!KWCg+#CJ zFT{s`x5=y8X!Wn8b#>Sj$CIjg7xm4i=a)lyU9Z;tf#=geXv$kv8MzFSH2sAfNX+Z-t?mE>m@E{ znRv;k`xy}iluI=-_8@ftTR&s5pfc?PP>ZU{K#4?vd~~>4RY$9`sif;B*+J?HR(nuL zBj3Y+_V?3QzXjrnni829|7Vh7H(jj3SvdAHM=n<5EF=q9^SQT}ASDV7%^xSKyB=k( zdSXsw4Z|a(xrCk7PLh;0noV&YTGPyLur#3X>Ah8uLEe1jhh*~qtU#eH#zh}Z^m|

zSKP?38nb;x{NKaH?hDVS1@pk@ zxq^g6)WgEJ4}P(4z9w@Cvg`5LQZCT1{%!QduUh;+WTI4jo2_JfA;z7ZaCjooV5ym^ z?f%sUoO8TicnIpE^T3_s;{px-UZ#86RcOrJ!#ryPsQGoO+8AN>Ol`HRr@t%LAgz&T z)!ixx>$riY+Rh-{UM8jvR)Mzb6>?O9@-3O;cwX*D4}i&4n*B57_yQpTIXU^Ksi-KD z0Myxo^qK}u9Jr?e{Ev&n{MC_z^J$y*+};rH@zmSemH1*@9FiCN5 zuh681|M~~U!}0W$1cfTj4CMJg0?CRdzAJ+dw zent#CeLMd2tCLxVPeBxbx-zvyf>LT|Kx1`6JRne>VsLJ>p%*u zkDk+2f+4y3)$>bixa)^Y@ctf9PR0W)R*H^t`qstsEbf~MF<(~O1Mm2DD_i_~m4NB0 zeRkE-hmj=h;d6W3oSDwHZU4p(422V9PyHJ?ke^`2c3)S_H)wP$6}VmTd>&D?(=W`- zcKU1!MW~YQj*tBk4qrFwJWx|)=&n+*Tb3T6pCG_@YAXasbL?qR^KrdF~kNb9aXb9^-KyJ@RwGTd{uLm@ZGHxY_{~CxmD}6!O zt$&P)nP%O2gxoSZP7&7QPR%jo=;d(b+I8R;rhoFV-OQvtD$UCLD<1OMW7yp$cP^KF z9@W{{B4hVI7etR8w&sHV!J&3*9jXIVgozMeD#bT*F(+A4#RMzG4y-MepLd(Vjt(kh znEkqX|NKFB;{&dxwP1N9C#Cv*!5K>5b7%3=U~^b^zzU-vKP#-JGOe_flh;x>T=!p8 zK$9!(owX}GL?R_vHCCF^0!(Z)Hvp@pv|RL7T$y0hmBhQbn#k2HujM34pL?E32PDAg zTWV@~I>(LY8Fm1R%x85f7GIu9adW%0{N&Y>~}&%sw~Y2(b0qN?pGi=olyjMIM>0W4~aNFB1CD zR}1qwTEv;Zga2osmoXDl4k)5As3`{pwX$BU2w=ZWfYW5}sFeEo^N}IjU;AqO(Sqa? zAlr8*{oKFyr2l|R)^HDGNA0domII*d9+~Vz_Id4+(d@7bwfOx)J5jb=kA^I|c(XEM z40NlSawtEGR_FfUTon<87@yV5kge8o*!Tez{=F75x(d>87c*E<*{e6z359p#>H-~e z7Sq;-RAm-`@2^K~BS*q|HVjJ2Oyj<5AFobu77xr&oyQ63u-s`Qt+DkD!GfUT9rX&s z+I2EPa+iSzMhmA{MOk$@0AJv5&!@)O-OpIho>6k>{$A;%+qJTI@= zC78QJljKp&3Oe5e=^VKYHb8T%`>QYVN%6~+*ZmL3fo3rVXnfQACyi!v8psPoZhYZm z6VT?n^eK}pp2^rQ=^VIBwr#rb-1BL+nVA)$ZhD}W{RTnfhc~y@amelxq`br$R!mZ@ zYe>k?I#LYg8tFCMJFFk>JRrKjd<9Q!{^7UJ(&RUY1C_I0<)ojQ3+iYTB5XxM*0+^H z_L5Pqv3t8R8pk8rfhx1_*yulJs=f5?q%5M*B(?c;i7O6A>OtIt3-!XS!EM zVP3GE#xHFfZi}`__a{PaYoO5lxpaDNoF|wy=t}jL&tj z*g1?`qb7Or1OH}$(PsK+@lg|Ex}vJeA?X{Rf+A|8b;PLea;9pu>esi)qdE9$Gdgdb z=*icte!0?7Gp(lF>fS(>3vl{+8SX_w#T5vyJ85-HQrM7)T*<}b!cWhfR@EThyFq4B z{E{<&odtf!(DrQ59tK}Fen8Reb5pi_e2U#LtZkn;kZ0-8lo%@A( zfu6wlG%oual$%jA{#*vS8}N&fxZxYl2KmTYHUylandCBfw+u;R|EE9o6df`Gp|U8; zulupSrZ%^*rs;wS9D&?~5*#PJ<6G`%n56o0U!OcN(lr6P-tE1UFp|IC%F$cDuyJ}3 zDkt05Pl?%DS8fY-tMlYsjD4bZCp|TUY_eQOn8wSjOB^;zAmVp?dT3OoSyyb4K}MeK zU}?(dJSEv-)3~BMrM}yqw=al1aJ1qgzo;I{Wq9HlLGz^9r`$>Yaba<3eh)_6Wt4MO z$4SNYa-Yl< z+lb%ntID?eNu+Dk(n?88esMHT$b5J>9{LzRg3x{GiI!_%G_#i^IoHa>6I+Wc+N*T* zFbe*eZK|Biqw3I8vU_^gFpI7z54~~P5SGzb)KMWm<4VO~MuMlsaP!{xXXX{i(!$X^ zx9N4aoWjKdfsuA&zX!0$njWOuw-6s2v1i9NCSW`k5Tg@zMaAf;4J3D|6w(D9{XJ-j z7*p|RWVkRU{JP~yR4mzE@y!>iQ4w^<2Je&P_lmI&p(NC0JcoC7?-0y0;N(T#}-(J&xe$Qzq9@ zw`q~tYI2o@9_EV8-i500(rO_cmvz#r@JJ<0%|tk{gy|kt)_Ao|OVz-A2O2RMv+$xf z_j0vcnhs^`C9q>^Y|eMO;iD|9y%)#JVL8~M7PZg)UhhU2b^uvu&(<_|u~AW#eFfTvQ?200{;(E876@{0jv@G0`cn}!cDg%Q?(zqIFRuk=D%I|0) zfttCLa#f*Q;_z~-4rQSeH`Qr`e2LHW73GM<%-PpNv4U}69`e*Z(|=*J*uRTMaz1ho z1HiDo);a7{J>AU^ev)L=8=obsUhR-a^n1P|T-4`=8o(+B(_|(mC#jw1LpMG4t7Bqx za#>C%>(P_HTLQjBLQYSd>8#Nh44HZ9ZBSynD|iZ z79eQjh8iu&HPa;Ttg*K&cCHsP%oI$+991dqy_A|$JR)41sNAK+EVNyet(4si%#7MdLN-GbOLVKeLhqoEG#S{ z70ec)t%i%8D?2MAIknoGv>^gNdydzwAR5u!i#;J(19J=u({{%Y4-7fOif%c~3F((x zZN&0MB?-1RK2L4+L3Kf*no-za&DDztUz~8j!dZn&Y}1sFJoK`0fFPNm^MqFncf^#V z-aY4x^qbw}i8fu6kyai%|4 zS_mGE4OP8kPoivb(WAd8zzZ0t66f-a{zWnCC0}WB{W&lPt?JQb{g?i{sk=_|?Af!= zk(&@3!Xb|``=KKkMez~?A(cwydh_Uz_K$0g)_sIYRd&mR=_qK{5`&+YtH;4`+o}pR ze~}KJ^|~s_)J}88#H4zJtzDMQa);;_`UEp87R&*ZgL3C;TI$}q8S5o~Gf}mMIpF7r z7iG|E(TiNpH5SrFoA_2@9(+iX;1=A1MziVISUlz!yUfCw>6d|4T<{x=Hs1e}e)UxO zkp06V!2~p)@O1Q@>$^mgp5CT=_dqZZJK*<>qj@H|GDZe!^ywb?2R?5pi-$;jng(*78ldu z5DdE0SHrS$K^}56#9e>bv(Oc7Cf}bgwEEe+JAq&IiSu}oL8zsD-w%yMc-gRiA+DPbG%y&z=3}{T7xN>yxKcE2dOkGZPJK-@7H6{pha^8E$EU>BJx;R z5&3*{$2%;{HCt~39XDD(>QScb=mus{FtuQ^ z;GiAy08AUs1OY1ck%+mBTIl-N$F^N^)v3Li4Lx7P80yD{*Gd(7ff|F-tgcfYD6ZRx zK)xh+H*11XBCl`yS>QVSTkw`P-px`8zNf2iwMKex)~|NHU&&tY&GuP=*SbtUMYo22 zQOGMhuP7mQ72M4y!|v}-jr)@U^CcVmTng_gXs-r(?|_#HpsZ|PqF`s;BIq(G7td2z zR^|Xc3!3fT!Hmu2PF|{YJ47CDR6{|ZY%260M)668p5vng>RPnv>hh!YZD*Z&Td=CR zp_m*O{jsgLJ9QpQKm7CBLa4UnITso_CNkisJ2SYd2$%Jmskd_>POCX_a`EdYy3|Kw z-BS4Zm_=7|)dUlZu!t1B1qr$jiN${b2yTuCQGi=_-2a?{`swpmpoTolht z+KY$+oFFP=^bu+T3T|Gl)HIT)X=%s6(D3w+gmBeDl*Z{{5=PBc&e{2}%6|1iR8&~l zZwRQe`Bua)lvYAKcVN1I1#!x3-Ox}?<)JA!XuYupUUy6S8GX^7Ec~!K;4WOdzz=oX z{OYT7xZvx%mnj9Tw516@CuGAy6(xIDWNrL-JHN9Z_wk;`u3W=h9z2|8=hV`w*;A;t zKIyn6wOps-pt_boLZhxkh2I5PGC#bV{eW1?3r4HF;8Py5KAC_?fNYOeGI5I|RiCE7 zQuK};lJ-llc2P0gYoO{Nhe?qleo1g-LhkUap~kt;MfdAvV@+#qx9t|i3^^?b8ddeB z(L=JJtW4#g#q;z}N(c#?Hny`P!6rK)akfmWe|9e!OPgfjH^iV_>>wWKNh5>fSmtu~>w|Ckn*Fv=S#U z*&c}4L(XE^^Rj?Xqmsqy*Qcu;YcxJHO+ab&Qs^w$eH)%miKwqGm8xf)mbGuBQWiuN z(Q$%3M{o2t&I|M1l@XaR>?;0Viba-f*4IBFY@*Pcyf~iLQXO9;mR`$CQ&DXCh`sJx zJ#Sy<_f+H~&I|o`0hgJ1D+tM^ikQN`{);5})4k=jwFtLT1toLj>5>NGcz;qGuUh-T z!&b~H_uTX)oENV_<2@;byps@Y(Y;?+{-s5F+j#E8Vx2-p;IuY91)aQ&UwYJN39?I(*k(|kEN9(jdwv(nk7e%ozNj$|6m zdm;$RSZ!&QvnU4Z8@_%M{EnITo^xE@{^J`Q`8o#~gu$5*k1gtYf|PIhTw$|c9pX}Y zAS6{OnZ2Kpx#T8E6yv&J^;JF6eQ|Lym5#y4P(O9jeA`lT-yuD3XQA|}WoOrG@~~m3 z)ut17hOZ1Y-wV83$JW8_wNESZTlw&RuZOlT&gxySB9uHt9Ol7h_E?XtBi8w&QG*ohg~5g8!fjIW?CmS zZclzrBUTWWxBFONpAE7IoK)(3tu!hrqHEx#q24%Csc%kTL_ep*Gl2n1+uciX-W!jz zi<1Rb2aDEB^q}Ktcw8t81rAPf4uIm=Ga$OZGec>APy1U!w<9(ObgYnx+r$Wd^oe)C zwxt~567LABmmiv^tqy)qQ?;ynn|3W6!R*ZZ*??=5LL1Xm?08o=T+plz^V?8Q(f!hD z7!M4deQGh_Etf>}duuO*Z0h(zVnK@TT(Ex-Zn%04!#)q}G4|FE)#Wv;LhO;ew+E@b zpIdgPo~%X-Ajf`J9W_tPWoXp&)gCy>m<wro}#bG=oR6Mvh9YYG_4Y5Tr zcAY>Nw&+v?w_oU84%Xy)*_H4ZvX#)oiEuB{6f82<9>ot~JAf-Lta6Rq>pu2nAej>2 zmcjeMBrTUE>G&p3HJYp-6jxC`LO7FY$Vt2M8=9cHXIxE`OQ2rtux9p<-q%#V4+CEn zkG)%A)`rD)MKF=p%SzIAMKV^ZT5; zRuLy+c-v!U8ibaUnQo&;+eL`(80&B%-LBq!NFDM6$_d{6S%O+S%VQ)x|A}C(8)w-5 z=tK16f{Juhd-wM(h-$8~P@B_NMrqr-MG{q^N&?4m21#p9@^Px@f+H&?)!H;+;RhWQ z9g6lSsvJi)SMyMp^co2>X%uAyEN2~B!;eA0TD#=G{fVVDNz-StD6{d+#xAG?A!x&J zs#m;sfrQ?OE%D^O+g8p}z{s%L5E8S$@3DZmR9W zP?H)s^A%w_K#{cvtXRttI$RH_iR&i_l#?IzptQ3WMp=2&i8c4w7EAkE@k~z~A}212 z_<3D=tKcSTGF~U`SX?t0_M03;nz{3X+5F=q?8+KN0?NF)^iZ$VdX0;#ukY5Bk3 zD7Hss<_7BPuX6JDHsCv z!?ZQgxUrAmQFDI-DLBakJvU!rR-ba(_XfsA32xawkQ*Byr zFAR(o8Z~E;K)3MKh?r|c+j)^rAy;KaMppC3b6CdPDegm6Cv_Bu{V3pf+C&nkI3*Oc zZQ5P(O4K}j$=;UQ4ylE2Qnwp5{x%*{kT6{(`xcRV%2MA|)x~_tZIpAgs_%FL9fHLl z_`&R+-Lki%({Z;4#(9Ktr^KYbEM5?Ln)l7uxWa6fv#O_zyo?&Z^1Can$&5}z7p+)I z-=*kHv}vC2ybFtK>LOPtI8`?(=AvuifWWN_T7Q{-j>Jx5!#3VAdjmS?e70hf^kc}X zo9&A6w1c`q@p_vCS&m%UYxD{WuB%JQ?>m^59u%8EoS^F|B?cMD#fdqhugY@+?gyW` zMkE9s=BaTQp`_?MVv#5PzYbYxiL;IeIvRH$;EkI^Ho+il7T*6ohpV`N@`+Dj;YSdv z6jiM%Mz2il?*rcy_bSajj332qEnB(;dh*JyCd=Y)@E_uCB`Woa&688fEP2zg z^nVT6h*GSp3>dHEE)ZG1uzP|_AkORrS7HSKRh2B~6`6a5Gl#Esib`gm&C`(C(IW)7 zyM%{*UaBBFkIl06=k(}FZRqlLVG)w3$EgKSKFB7OfC;AW*}{%LzY%#~rk7*C;kCKx z!}rd@M<(Ezrq$N$HNa_mMEnRHN0UsK?}`j3 zn7cZ!zQzLE7>_R< zwUks&?l8H{bGqUOQ11B~of1X0D7zptSJz}&(;Nrb#=h80`LP#Kbr%9TOrcO;S8Z)? zzaH(;Cja$Ha*etrmok$++_N$;f;m+$jprZ4y;So0Es^1hG61x;_dR{=g5A0$NgEm= zf96weF)IswIYnh(P0@ndf4BsBV^;Zi!xEW~}8I-xb)1^hmO zFpiuunARnEc#sR8)t^|GmTKG=<-+wxVk!{+a=+`a8YB2zrHbMTfs-b69Y z;hS0lPi+rKKmD*}xKZu6{j0I#Ya`MpW2HSy0#Yl5wgp?g*x{FeMT5)CYUA@c={G4O zGJA4PviNKm-)mch%sVg4qd6xTEkf=#w(`;)O8Tr>Ie~dc+riwvO2GRCnUmk*Y7=5B zySH`-@XdbuX-0ohNjTe83t=47c zffS91A9I_%iQd|2n-M8|T^QeHAdc2MRYDr)DynaMFABIz0Jyx@!6X&gHv=3jM-mSm z4X7CcF*5vT#MNxTtG*6>3@lgPX-uN)mz_Bnc^sM72kJa6^dQv3^yK85MO22k6&+ee zg=>Yem<94z0gdXE2k3j8F1Qtept$Au%gCUSwUgsI*zSED|y%kC{zlw$9xm_xR zOv`Ln3)6=v9a(A~ZD$LK;4PI^A@hDf%%wNRsaG%KP{E74*HA)Xl934&n?O5<<_zObjqO~ASJA>25fi@!f8>)2)YUz!)Inre z_A1Mpt=4QE9Cf<4mQAG_$bOH4Om?JPy}{L?db6Tmjm$<N}{zw2SeNUc5<$74~*~eZsPKX}e z(0R_bil91hqmdfFlsCsWHP1Iyvh7U|3%vi(Yb$YEO~-Q&`Uf~c@)&E^1{Lqu%5F8) zLh}!cB5QzWu`hWG&J#x|WdZDknL}{kK1>q+jm!)HS?8O)yjFl_X^z8(y{!cuwC*oB zzY~&_{DQ=jZEhZmdBADZZg(Y7Op(3+#AY#;>Ae%3ty8|{hDn2Y{BZMdY|aMG|NeBP z!29fYh&F9jx`#BYMfcKEw^FQCDc+atfdj`ssJ8&0MqNE_xJA}r->%?Ud9cg(o!B%f1M11Ha53~(tGBLC7E`CUJYtR~HeC@WV~Ltxci!~rujwCmwU#PC`y zue4uxPwB5<7W7c4SiNhN;g3c}VC7|{uS!?;Mu!0JYNEDRQV3h~ z*zCz1{hKKx25N=j+z}6=uvSLYxe`(+VV)=OahlHioqqi~kY9CXntPPLO6l38OH{Lh z>jTGwhhw+|-wX1m?r%Oie+Q(=;P=1adB*WfAuQaRNLuWsj)a8yibbwHKrrN)DzpyO zwF>jn3Te2M!98OSL$Ip6Xzl-evx}4cwIzW^%o)jlMsU5U<5HmpUc~vwv`Fy#J$aY8 zCha6PSXB*}VF}8`_?uK8l1>ae^a`PWKgAB%hXxApCz}Z=1E1aKDI{*B1{E6d<_E~0mrld+d2Sud+es-|YDc8~4zmHih|UY4=b!CGUqVR9I?^=MZeT z7efDPl<)vg;CXGeGhsWss|9JGgdg;Nl+5%f;HMX$q<6KzXCS@tY`U zxx1TbXiUZaee!lv*bfDg@rsl$sEre?TUee2bl5-JkBwwMXjO8+WzR1Ir-}ev+DCm5 z;L|bS(?s}D)CC7Sl>_sLJ^t971tNTQl2tvA4sMB@zx#j(drD?NFL-)CFCSKGMp8k! z>;8g1I90LQ+m<-}wTFCsXI%=g=Uf7){re{HSuouvXr<7{A-(OAD+poj|2l~o05Xr1 zD0#**tdg)#h?bPqO~wA~sal(#1EM(noLGbXMpY-tve+Pm8cMb8RC_gq;;Y`@mOGxT zXR`&YChP=OIlow(X&g`);P3DMG0@=Fs$!(%^Mf7F>RN+N(yyukHg%;>|DQRELqrTl z^6$Ane>!4L(cVP0E`_&)oTSO40PP*<$n;vH6qqVP^@kf7_vROOz-+rBd%>wCwW_4SpNhr7!|RnV4}mS!IUe!D;4LT&s50(R=UowQexNaRM%j$HZV`p#i@ zx;PYWEGaAN{^y5p#4RobsHI1Wx)qGVh}Jp4-ygZNvx7w5zI{8GTG%q%jmcS$ZBI2f zt4;D(OI>}_yy9~O$HzFdM|)d!}V%&cs?j>LC>~5Eo zk^|ExDJ(udEZ!}07en?+^X1D%fYfWTs+yVQ*rb-0jx5+17#IXm@{caqIM-?`Uarz) zMcImoh=30BuU@^<(;LQwH#B^@=uPB)bjgFrS%50KYh--<{+vt7kK*E?1)CshVUGq+ zT=5mz*RPc@!49=rw($#jWZZyU-JT;S!yXagLDA;)RyAT)!E_1=3c6|uDw;=TCr?%| zm(DcRl3)q_wIvo{(oP%3ZM37GmsMNY*w{>2I;yF~xcpj0@g?*&HHlPDYlCmdehvoG zj&B6&P+eP4P*7FH2kh5UZ^9iBx4m&AT*aKTLr=#l!qkp0K`6FF_)DGTG){>d$I+gejANCpxl{0g1aa5g2bfdy22l~((Pk|#Kx_*Tw4UrX)K@i5|#;4AEmPnN)9t&qb#Lt3LE zuyTN@7&NdxeCJ*ZO%dh&c?sdChIiAqIW#eG1LIPGL{=2(4VdHIoDSHVm?2z=TQtpP zec`KM)u808ZDH(}A`!CE^uX%|1&s+9BczMyo@$dM{5{PRJ7@gs*Uh=&*hxM&OV=W; zxfE=i=9n3*z@;06mo_37oEOjpykzMcwBDgCt%ghOP8~F^`sI`0EIvNI2-`r!ap$eM zJ_3ulpi4p5p!44X1zvp-{B*WvZ~wJqO>-#IeIcesZe5bkv>Y59Gpn-n!{_<%KM(`&)`YLE#!s4$cyT4izBb#Oa17|vD|rn z`}|UGsuj^W1-Qj8%;)(lbr>26&l`WQ3TZMc4&{B;+a4Jn9-cD!%VHi*I%q~aX1NV! z6BI^{gcDZJf4itV|AcJq+70Yf_y(%TvNKE@0#hKohceY646&{~h1RaB8x%Y)pQMcQ zCRfZu_AxD60d-u&yJe9}ZIw)c;?V|f@sZa?g7s6I_{GZfwL<1!sa1+qr#PM8d-7H6 zx6ZzEcW;<86$}0|P)9}ek|xFZl3C#1yl0j;Tw&iyfHj(FObGEl3(3``L0mNN$@28s z8jXfQnnd~vigb_Xs(|p=3E3v})@_+>A9-%n$ymlW&wi|)j*Qf~L_DC9 zntEk&n*lOAU9UggS9FbLaA=6~ro^jP-nVH*7~W+MEh{;=Grn4m{V>mY@}9oyn2CW} ziWb$mLk8tmm}90UU_x^~tl`plGTvTGWF9XX>;q}Ij=E4bXvjpbu^c+?suNcZ$SW3> zyyWB;li#zmvqAHTZ|G8Oo3Wp}XZFE!qicqZ=sI?9r4bg!oE+}RWpI$0QFFzy2x9`0 zA5Qqk%NYUTK}nW>XQ#BmxJ-05nvx5ngke=uRV^ zss?Y@v_jv}h#47W>^ag}aA{at=5y`YjTKWD&2NdJ&S!}r74W3Elh=+XOH34>UsrY5 z%hD+&uGD0$o))r#3uuuTkiRb&e(#K~p4oO1ppt+4_N}RDHkRx%iH@Pm>RjFO_Vzv% z#(QKHS)=a^p}(xY1`XwsNP%yu8@S!ctbzYoAP8}z>q$2?*<{1ih+iTnU;-$QP2dve zE7H1V%krhgMN@e^*FDiFio{HzvjvviCUZ}~senjiT>sLqu5*gUM+llRR=In6KLIKUtxW>zeoSSwTScskMiHQ>NA%C7Xzq=rV*qYXtwo49zl}58pxZqA6aNxTc0DaLxmWqcdqOmj<`*Nu5;{-H896Nb~7d z(x}JH3T}wqd#V;Itan5LOXTZnomwQ1=L^gN;V6o4Eev03>PIC+KRBEVNBFR2_KOjc z*2~kRZDrM7!i|#hX=eG}n-O0#)dVxMYv1`eH_c$6iC~UHRgMEALmZ=9?p)Q&<@@KV z$t%V2f-oe|VixD4CuUwYgH4F7@kY7B(r4$<`{ z>?3&2kgJp8v5Y-D&K!>Y0H`$;5go%tm!*S%Jq*m2t9x=FR^LfaFRP5)mzXAc~zhgxujH0^zdEn_Oq5m7l7E- z9nGv>HIr+rSYh9IMk5xmKTow3d(Lm%wCdn=f!V$wNxFeNRi_TxGCZ4gL|oV%eb53F z_D7CDsi2P0InO2{4fSQ6RtPsACjr%9Y1WD_CmR~UnTCN$&i*T0%QJu;Wi0kEJMGR! zuD}59iaG4`CE(JC1EhoPs?ODNOHJ#gHGco3$~m1xHR~mF#Vi}-X(vlJRh>--kZQSJ zl@~fWx>@WkHuck4jZL8L1^TFWF?Lf(&5};fVe}h8AKP1@tD4^;Biw$TyqxZsP_pPC zPt>u=+}l0bthFo=_CPV#?JFGuNS2|Kdf5IAuUhocUq%MbxFFimRV}SOL0nW%q6o15 z&{gRUC$M1dfJ$+iRi~dXFT6RemTO-d@OajKOujvE_JqIN_c7TLh|gj-p+?~YAEJMY zI-zh|3l_ko*;~M23O-{;nrV_oC@`g7%~TlGOj3z zK&{hCT358{dcJZ9o!`GWi3aPpH=@khIg`&Rj}tJ-bxIgtM%+cbQ7?lIPUliwBe^b0 zmE0`Z(Wp>LA8nPD!=wMO+Z$5rUlpE&&`lW%FKxT3H7$?Uz_Z?&$^~B|SMI<_FR8x3 zyKqP6X5(AOB9?a{0F1TCrBh89UuAsKV)uI86E*_m&=(Tj(hF(yKNY%x5i@gpo=!ZK z@5Y0e&9S!N{(e^U<~^t*<$3M2ksC}W;C)-!+A5JIYsfk49F53p$a7D-AZU}^v$4Z= zv`7v4zy-2!<&uud#a~P>7C^D}R2S=0v9iwxFeWV%k zydxJ(;AmAASFu!y>Ba$w_Hm@dUMkTG?<`TKf7UvH<=A%bq`BrTtU05sN-r6RmW-1OOpPrZ$LqEh@9!e7F5=2D(MTH4Wxn^M^`{o{~K(;fda zdcIN`axR}IcujRzJo~SSTN~f8V$=R1qYhN?rHYFtA*p8q_~+AH(t^)~n2csm(o_kD zVP_FDbHTqNrudwZ~9Pm&%9-LuhVX5_uY5LQR)#*Vo{G;iDMF6BfM&Oeg5^`%F zziZ1i!MDU`<4krXm9McD_u2C+a(5c2VMa-AczxJsP2}O>efs`dqXM87tp6nc!tx0F zSVF-QWq4D*4sZIw5|2X9x8qM01)P_Q`w@(uRwG4r{#+JcD9APrjqrt^) zxn8^398Ow2tTo4bzli~8Ysx5#*)V8WJuHNkT{#ICboFSzptq&}Z6DTYe2(^T#GS3Z zWW6m?yvqRcQ_Q|eu{KoR7x8s`B@~}jD2MN30dQ#V4R1_T6|URu)IbsA|E7}4f;TySeW$O&BQ(_N`TftJ1!G`A%MIY%@}c39YOZhY8xvHM28w2!TRhZ@~7m z;_46Bh%6FFsdRKI`;cYEOdcnzJslUJE_=Q@xqnI%`7v`kR-=|MdrQGlyQ;Z-Zy25S zhy>p3l!|H{>Rr1MCXAR3Itk6s>Fih~Xss8w2szQ>X^c z+zNrYZb^P$ePB33HSyn6?TVL3lga-b;f`?rFQi&i&;ro$SmF9a;Qyjn@19SBRZK5f z0U4VxW@D2{M|Fx<<50cW(N(YKgL8J|X?820p#j(vGzv8SLCq5~shl@wI&{qOC|qd_ zwbiR312wr2*O>sy1S~Ck6f#-5RB@BL@+P;1+lLNLJs&)p8Y8y}@0s^mr}Ruha4oBk zxa!(g>|m;9^8Z|aTcD!Gz@{eDd!>zWMwt{@MfU9(U6*x2WKu7_lOXiiy`LLL#D4{A zi5swgj><Zhm^}M%?wE^r#{|+E(4%lsT(*YxUb{3GlU;eMkg`SxYt~@6SUJjlD7%blG zwu@sWfb?V5w@hYueBYBIS#>dwN->QFrmAf9x8h59R98cIqLv9XL^V?_pC3`uUc zzslKhWMyRmq^EOfaBvVvCEtxEMn`i4{r8`dN%tjHM>e~KFnoOcbq7}|sjrYQ)Zuy^ z$C!P)5lDP_zb3|5r-ncC_pbfNT-J(PE>y>4&!0uU}`? zsavzD1noH@X+Z@+5Y;j zBA*r%Pbhcp!2(Wl9jDUQ=&ckK!lo@9`4UbUQq$5F=0R|4G?f!|RM?-tyCWZI};^;@6F?#4@|Vu0bS zKs=ciRiNr2r1DLgFyxO-GY4CFkZcf8JCv(}`9Qz6WX4xjmIq zQSr{vCbh}uz)|>p#cgM8gD1jKd0}{mgH`$3-s52xd!YgXGM9{A!VKq7vFJV)8)R6X zP9H9mewz9D88Ss?{xLe?Wo5bH_&Ee)hs;#iX=lc3xzoWaNXRf!HgZk49$DzW#%w%ko(=!}`GSFbA?n3_WEeoE zyj%rW4I7nkg7SI4*oPryzm8`iDp*UNCMn{PCo`&`D(`CNw`hu@`VTsNDjP-r zc_U%}+z1oLW9sX)*hll9_Yr`J!Wt_gu<8t*Yv5Y>Y*816&LW#?CrM+AZ$VDwEt#Hd z%WVnMmirJjjWmrJ0PM7W5%`r>544R{RIeCu0@PaD81>^8Z0B{9p8E*8&^xN#ihmi< zad_=$skBqv(JXMKJG(vsJmwKImY*1{CESzw%^9pvVS zBuK~U=OCXN?5F|Y`10k;6U@rW%AhSOveze9^^!}Y&Uzi-;pf(pveC1p-*%WxipP1c zJ1smG&NDPcq>Z1F$#W{WIyuG&Sk)N5fvXqiJ?mZLXv6rvSSTi9RzB?xEtl3V`agud z1z1&G*EWg@0{Va$fV2omcY}a{bSWv4N_RJGcmPppk(8FsE!}KDy1Tn`(`=eEH~2j7 z`~ClS&RN&K2;IP1bIm!%J?{G+bDe9mG_;pI)UN3xGTKn^3w2U|+JhYL*>+$!)fE}~ z+sEVdD29zyL%?>f!AJ!i+i_`V1vtg`S91>>-fakqs=XLy49( z`=gB!W+5RRfk!(|*c6I|me%2E1qTNQot?7aDyMF(B&xktS2wXX2c$XZ@5zvj>92CK zS~7ERaHtD&xY*j<9K76%VB5S)F(JKvxGj^)gnPmhD>oGE2RiV0@9}oG*SWq-0IX@i z#ZV;iUUm`9==uAHP=exqI{Mt6BzHW@tn>ulO9hby1>8@ED-m%Kt|{EzZ%KlFB@%&a ztBdeKhP}$uQ~Ov(w{z#iFW|;GFG>=}J_#!k>!Z;edy$?;^Zb4359dIS4}0v#+s#yyVR^t zW<7VvYHb-a&yM`(+z-v&?|`R*+P3C&|J2<#6RS4tmCniiCFld13se1eJ6Qo8n4o5> zx*jymBjLc&0I>w;jG`8NBY%fuk-Vywjft*8yh6oestWi64d#}nt{VH1s*|}}Zvkt0+9{7MeeaJxK$J3@SMwLqK>2hrLeC z{1ggG!Gh~W;`~3lqNecw3nW;bf_Zw9zlLh(zNSd%_e*n$C0dyB?*#&CB8z42RbmlP zNzAOcwYzUoto6FBgtG53Z;Lv0A77YN*`seco`J@wnaN4_(}T77`S}mO z{Yd!iTP01><*{j)nYX+7x9zK@SkExez~kOOle&U`LmrWbKhol#P^?H;0pnQ<Qr8#ZoR4jrHCAGqP{)lc)2H|y-@@-( z#ZhnqTj-RQ-23CiQ3MNUepK=JU8memLs9vmB6v#n?j zArsQA^LjUIruy;Y&(pGpeMD0K01G`$tAlrI-(FfByoOHOfTjyFq1t5RA)M9fJZ;=r ztM~(`Ae9T8Sq4YbWzU(M%9=bm0|S;M+dm0(I=323J9^l88hPyJJR)>a>mK zLI1!GYUF4$s65rN4xE-$RYM-Yle}8cPvJ7X`c=E;f5=<=;(A9B{o!H12S}h&j75lA zT$_q2#><=!nhX+(Oq({PJgTa2cz$|K&Ba295PWqN#7A*NO%({I`T9t4CYRo+xeD`} z5zuq)-|qms!L_#oX%nC#05h{5g*Taz`*J}&-gygg#z01&`mtNY&w=2)PK%rQal-_GMkvY<7V9|g!3`!Cb!NURT2{ zRh%gZ(lRn5zHwYKYdu}a{lxeJ)FtC)qfM@#sy%R*p3j{d0 ztx9thc_eUQg!inYF8~SFJ~lQxCnw@cDMKTqw-zT4>r;WtzM&E`#>(O%>Lgd%@P=bm z2}xg?|19(+KQVUMgqHeAlW%%zDi3im$O;r2dtsM+#MtDG-e~v1ya_KI+d7(`|7fsk zFQ8Z^o6Q_zwjwz~0gQ#j^q4N?kBSZnjZAax1;R!^i`riGFtklqUi-RN=U^d<`zX#Mi5bkG_Z*h6pNF-$Ui%Q7x#hTCynZpK%UKWjSY#AG0Y1 znFt}$S^&5mh{d~HHH^OLX{Os36C^{|)8I978t7G0a8DU-e0#_%J13yJP_1ocV379h z(`H!Mqp69;TRNs(lIk^B%vPh}OvW3W4p~nDgd4se(e#bOp{a7pQmf9F*KWBphCM^3 zDSya8XJlD&%HYm~hkbNJzPuG$m=_f%7MXG+6D zA}Ccx43%=)9um`Ex&DTKqZ~Trq{Y{+QI*CU7FV=wYF{{~Nxn1K)6DlFQ$-bEV#5TNo28RM_yU>FdQ5NsSF&zuE7PZPF%ZM_c@!m+q);z{=t^ zx_V7d_5Vs1l`zt8tirWfw&rOLBuEkXiJJT7_Um>f+-oEy8e~t5aFvmkF146YO=1Nt z(AR<nhM5r$wAj;8l;x7A|rmz_4W0?j#}reDXFMg`F6{A! zrP2vMRVE=J0d5NEH)y={dIqV}zuYLLN+5FWpVWZo@zbYo;W`DE7OJJPbX3$YUVtf< z*t25Kw_Uz~eTWzc3}}9LvNDt=4QHbt@f!>4^1qm}u;ExN!ioB(ydO-!E{;j2f2316 zIx}V1qVD$jy~}M426c=NMPn}%5+t3{D;FwoI#(egK~Ww1$=zNulCZSjizFc~)6bkS(nX_;M_?A!wI^^>mO=jZN4 zSN%Dr$4I~Tak!lLx?0&pjmf}^ zrJ|0dLSRx^?)t6|lxNbAjLb|LPEHk!x&4#Cb26(x*QSOz{WWFT)78bPXxMt${##md z?>#}At_#*>?$1QvrI%E!Av$e!oLjASk`x5B#0}u@s>QJpM1v1_|zN4jkM@q*<+O zES=x>j}YZ{_5R0{B{Ks913kT6)fAZfmSt6d0I2O^NyzzgBMJ;UA{7KrC{6PM0;{X5 zLDUJ4jO60xj+HB68hs~LHLVNwn`jAOkp{yH+(h9$T1Igx)U_8w_qMYh6=sG;8KZ6> zEo5G#*L1_A)OV(U4j^W7wmh<>mdnn8T3MI{XcXmw$1^xoXad}#*AfiA(1vm|bx9&U zK3vFM4;ETNtc;Ndj)?Qi1R5?Tk?UG-eRK1#Xg=%NSLCk~1;2SRbhOa99=1!Z1MKzH zM(=0#e_MtM$c#=@@UeEcppj!4{=T~_`u}ZCI&?*jpx}2cSiedfu&9*sb{DBzhdFH*Q3P zs2r?Ed>@?ntqSjs=LeC(LvSXJ*Y2ZG_g)SY;rxUSW03+b=0Z;!_$8#JpU9ARi2@{fq6*A(9}gdYLw-0Sx690QPUFlQb}CGyD$<`FYJu%scuH5p1Z`*y zIND1>tt7oM0=3^C3_Fk%R3+cwWK(Sqi`yYG!t}YoQY{4D+~+)J-w3e+0DVJnk79E} zecCXfxGaEx2xUm`k_ks)<_6OoC8(+XqhQ-W8UK_ZGXNrWNXlq1(1rg_MzE- zS+-JaDc@zEMplL?zj>ouH0E0nwN%1)ckP-ST6o%eZ8NNV0c6+5N2ENX z`w-tZE+v{LxeyEr=yA)7df>}2c-X$>2pWKD(()~%xb_OGkI=5VV!1bt98O_ZOj*d& z9pc`iKUba3jY6jiMbJ=!_5+zxwy<^H%Dk*`Ww6;vF05Xft3O-!IsciVgyfoECc8mKgVWudIB9efs4GMpK9=L9nArL68z$0y2v8Th{;MQN`i6y%;`ajR zd$W2Ia^r(dSsPp{WoDMu!Sud(`Qs7sD^k8XY2905uCA58=Q1-h-%KB<#pJ1-eYYgn zSR$iKE-xRQ4JnlxH>c!$dIC;FjUY&upYNijoq?YH>9nAdOB*oR@F!RPT_Q+We@dTN z4}v6EqkzM+h`fOXJ~fe@kkOH%b3uUi{`a$d1MH!RwI0YuiV)569d*EgsLieyfnC-A zV5G^2usGGjpW$8QRb({8?DY_B_Y@ z+d6btwarN9TyKqCKtO<u=Zft#bxBS*N$M`j~Lct1MI(%P|AR3&S zb!ocau0fTE=7SIcMxZW3cA{aKM#-l^PNKn~k&FrRv4xf#2~h9VQ%KB@ zrt;WUXgXGTOjobmf9wed^+FY~P1H_7axW8v26{kNvo6 zT&qr3;;F5azx!!UDF{Fo!i&Ae0%{|vq)MI#hJn40JU2`7#)?+%lasnxY>+hdyslO; z6gX|(wmj?e8K)Ql7T!K?h*MXb*>A~+sB4=a3XaZyTs}xUgce>@$k2#cFcmOlE34_u zj1S|L8Gd3rSkHmDs&$VA_ecw6zI}i#ySYE}K>iHMjm;IeM@4-|dy%v}!EJc7Hf3hD z731|Oju&CFhR*4htsqhD5?~mNBZ8X4ZLLR01Y~H=VOF=v!D=9rxtL;$RjYi6W^r2| zfqC{MAOw$y1zz|{5{IT6glr0h>$``tS_o($*{7VgzAYP5OWDdm1xEH7 zOoJUSs!;^&8hQa4vOG7leVUk5SOY4(8!te}#-I<(!??MBgWdD|rwqp1iP75g5V!Oo zqByqMY$YQhtap-QrGAALSbfIYrnWFWxmw-ByMyoSoG!i1vPO{FdOM75Qtk1=_8cJ!KLX+O8(Tyb2rh5J~q6gl=J1zhQ%fI`2`G5_NhzBsRJCw_h6_DlN@s1 zCDl}BupzGs`ZMp7|In_vxV)M!b*xI}gaa*n`#8#I`gloUn&zYpSc?S8Ef$EVgx-b$ zU)Xfv{zW3x{ha`>m0^9#1E~8EcZVQoL#!SJ4fupR$3(F6w)#9G(bDyuVgItrjgtw; z!7O*A=k^$XtyL<;LyoE)_`{<%tH_sl3)h$gr4Dx$h&np;vq!^44c;FU4YhqPAz!%rN*m9|XJerGUck9hu>>aezAH3?m5;aTI@Ouj=RFaB{9 z%AIsND)g7I?0kpD-pk8FuCjRMi=^~yctBU{p6ldqL3%Q^no$Q}Y1Dd;+>39luPqX&IuB!l)%KJ!O1t152Bd*0+oEWQa60L)h+?5%D zp905-tM@x&Ol$NPDcYKLow18Lu9#t3HdF{rYn+jLIep3M27^rhVyt~x*Zny6Jh zxw|F?>O-WtL&LH53N%L9ZH2plVK@K{lNr|rkinAe?IDM=C6~N&jJd(sWs>Rl$&E8_ z{*qRRcO9r6Z}$n}Z0SmGm$`fCc?1_?^52*yyCV1B6Fo^Te3t+GHIAq7Uzdy7-@bhO zIYdbqQ2O<7JXMNtz)i;WyC&>w&U

$9Wbt!=wkPTDoQa5dcKbTSGAQSUaa46o@m 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

`g+gD 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 z