diff options
31 files changed, 1020 insertions, 91 deletions
@@ -1,3 +1,4 @@ neovim/.local/share/nvim/site/pack/ neovim/.config/nvim/lazy-lock.json .DS_Store +.aider* diff --git a/ghostty/.local/share/ghostty/themes/melange_dark.txt b/ghostty/.local/share/ghostty/themes/melange_dark.txt new file mode 100644 index 0000000..dffef20 --- /dev/null +++ b/ghostty/.local/share/ghostty/themes/melange_dark.txt @@ -0,0 +1,21 @@ +background = #292522 +foreground = #ECE1D7 +cursor-color = #ECE1D7 +selection-background = #403A36 +selection-foreground = #ECE1D7 +palette = 0=#34302C +palette = 1=#BD8183 +palette = 2=#78997A +palette = 3=#E49B5D +palette = 4=#7F91B2 +palette = 5=#B380B0 +palette = 6=#7B9695 +palette = 7=#C1A78E +palette = 8=#867462 +palette = 9=#D47766 +palette = 10=#85B695 +palette = 11=#EBC06D +palette = 12=#A3A9CE +palette = 13=#CF9BC2 +palette = 14=#89B3B6 +palette = 15=#ECE1D7 diff --git a/ghostty/.local/share/ghostty/themes/melange_light.txt b/ghostty/.local/share/ghostty/themes/melange_light.txt new file mode 100644 index 0000000..2b2baff --- /dev/null +++ b/ghostty/.local/share/ghostty/themes/melange_light.txt @@ -0,0 +1,21 @@ +background = #F1F1F1 +foreground = #54433A +cursor-color = #54433A +selection-background = #D9D3CE +selection-foreground = #54433A +palette = 0=#E9E1DB +palette = 1=#C77B8B +palette = 2=#6E9B72 +palette = 3=#BC5C00 +palette = 4=#7892BD +palette = 5=#BE79BB +palette = 6=#739797 +palette = 7=#7D6658 +palette = 8=#A98A78 +palette = 9=#BF0021 +palette = 10=#3A684A +palette = 11=#A06D00 +palette = 12=#465AA4 +palette = 13=#904180 +palette = 14=#3D6568 +palette = 15=#54433A diff --git a/ghostty/Library/Application Support/com.mitchellh.ghostty/config b/ghostty/Library/Application Support/com.mitchellh.ghostty/config new file mode 100644 index 0000000..3a0a70b --- /dev/null +++ b/ghostty/Library/Application Support/com.mitchellh.ghostty/config @@ -0,0 +1,51 @@ +# This is the configuration file for Ghostty. +# +# This template file has been automatically created at the following +# path since Ghostty couldn't find any existing config files on your system: +# +# /Users/michael/Library/Application Support/com.mitchellh.ghostty/config +# +# The template does not set any default options, since Ghostty ships +# with sensible defaults for all options. Users should only need to set +# options that they want to change from the default. +# +# Run `ghostty +show-config --default --docs` to view a list of +# all available config options and their default values. +# +# Additionally, each config option is also explained in detail +# on Ghostty's website, at https://ghostty.org/docs/config. + +# Config syntax crash course +# ========================== +# # The config file consists of simple key-value pairs, +# # separated by equals signs. +font-family = SarasaFixedJ Nerd Font Mono +font-size = 13 +# window-padding-x = 2 +# +# # Spacing around the equals sign does not matter. +# # All of these are identical: +# key=value +# key= value +# key =value +# key = value +# +# # Any line beginning with a # is a comment. It's not possible to put +# # a comment after a config option, since it would be interpreted as a +# # part of the value. For example, this will have a value of "#123abc": +# background = #123abc +# +# # Empty values are used to reset config keys to default. +# key = +# +# # Some config options have unique syntaxes for their value, +# # which is explained in the docs for that config option. +# # Just for example: +# resize-overlay-duration = 4s 200ms +theme = light:nord-light,dark:nord +macos-titlebar-style = native +shell-integration-features = title,sudo,cursor +font-thicken = true +font-thicken-strength = 0 +confirm-close-surface = false +macos-option-as-alt = left diff --git a/ncmpcpp/.config/ncmpcpp/config b/ncmpcpp/.config/ncmpcpp/config new file mode 100644 index 0000000..eba20f5 --- /dev/null +++ b/ncmpcpp/.config/ncmpcpp/config @@ -0,0 +1 @@ +song_columns_list_format = (20)[green]{a} (11f)[blue]{yr} (20)[blue]{b} (3f)[blue]{dE:D#}|{} (3f)[cyan]{n:#} (45)[cyan]{t} (7f)[magenta]{lr} diff --git a/neovide/.config/neovide/config.toml b/neovide/.config/neovide/config.toml new file mode 100644 index 0000000..33e1804 --- /dev/null +++ b/neovide/.config/neovide/config.toml @@ -0,0 +1,3 @@ +fork = true +frame = "transparent" +tabs = false diff --git a/neovim/.config/nvim/ginit.vim b/neovim/.config/nvim/ginit.vim index fb39590..da8ff9a 100644 --- a/neovim/.config/nvim/ginit.vim +++ b/neovim/.config/nvim/ginit.vim @@ -1,8 +1,14 @@ if exists('g:GtkGuiLoaded') call rpcnotify(1, 'Gui', 'Font', 'Iosevka SS10 12') call rpcnotify(1, 'Gui', 'Option', 'Tabline', 1) +elseif exists("g:neovide") + set guifont=SarasaMonoCL\ Nerd\ Font\ Propo:h14 + let g:neovide_cursor_animation_length = 0 + let g:neovide_position_animation_length = 0 + let g:neovide_scroll_animation_length = 0 + let g:neovide_theme = 'auto' else - GuiFont Iosevka SS10:h12 + GuiFont SarasaMonoCL Nerd Font Propo:h14 endif if has('autocmd') && exists('g:GtkGuiLoaded') diff --git a/neovim/.config/nvim/lua/config/colourscheme.lua b/neovim/.config/nvim/lua/config/colourscheme.lua index edba16f..6450d46 100644 --- a/neovim/.config/nvim/lua/config/colourscheme.lua +++ b/neovim/.config/nvim/lua/config/colourscheme.lua @@ -1,4 +1,4 @@ -local colorscheme = "xcode" +local colorscheme = "nord" vim.o.background = "light" local ok, _ = pcall(vim.cmd, "colorscheme " .. colorscheme) if not ok then diff --git a/neovim/.config/nvim/lua/config/lazy.lua b/neovim/.config/nvim/lua/config/lazy.lua index 7e08cf4..fd90ac4 100644 --- a/neovim/.config/nvim/lua/config/lazy.lua +++ b/neovim/.config/nvim/lua/config/lazy.lua @@ -1,5 +1,6 @@ -- Bootstrap lazy.nvim local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +---@diagnostic disable-next-line: undefined-field if not (vim.uv or vim.loop).fs_stat(lazypath) then local lazyrepo = "https://github.com/folke/lazy.nvim.git" local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) @@ -29,7 +30,7 @@ require("lazy").setup({ }, -- Configure any other settings here. See the documentation for more details. -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "xcode" }, missing = true }, + install = { colorscheme = { "nord" }, missing = true }, -- automatically check for plugin updates checker = { enabled = true, notify = false }, }) diff --git a/neovim/.config/nvim/lua/config/lualine.lua b/neovim/.config/nvim/lua/config/lualine.lua new file mode 100644 index 0000000..5155bda --- /dev/null +++ b/neovim/.config/nvim/lua/config/lualine.lua @@ -0,0 +1,216 @@ +-- Eviline config for lualine +-- Author: shadmansaleh +-- Credit: glepnir +local lualine = require('lualine') + +-- Color table for highlights +--stylua: ignore +local colors = { + bg = 'StatusLine', + fg = 'StatusLine', + yellow = vim.g.terminal_color_11, + cyan = vim.g.terminal_color_14, + darkblue = vim.g.terminal_color_4, + green = vim.g.terminal_color_10, + orange = vim.g.terminal_color_3, + violet = vim.g.terminal_color_5, + magenta = vim.g.terminal_color_13, + blue = vim.g.terminal_color_12, + red = vim.g.terminal_color_9, +} + +local conditions = { + buffer_not_empty = function() + return vim.fn.empty(vim.fn.expand('%:t')) ~= 1 + end, + hide_in_width = function() + return vim.fn.winwidth(0) > 80 + end, + check_git_workspace = function() + local filepath = vim.fn.expand('%:p:h') + local gitdir = vim.fn.finddir('.git', filepath .. ';') + return gitdir and #gitdir > 0 and #gitdir < #filepath + end, +} + +-- Config +local config = { + options = { + -- Disable sections and component separators + component_separators = '', + section_separators = '', + theme = 'nord', + }, + sections = { + -- these are to remove the defaults + lualine_a = {}, + lualine_b = {}, + lualine_y = {}, + lualine_z = {}, + -- These will be filled later + lualine_c = {}, + lualine_x = {}, + }, + inactive_sections = { + -- these are to remove the defaults + lualine_a = {}, + lualine_b = {}, + lualine_y = {}, + lualine_z = {}, + lualine_c = {}, + lualine_x = {}, + }, + extensions = { 'lazy', 'neo-tree' }, +} + +-- Inserts a component in lualine_c at left section +local function ins_left(component) + table.insert(config.sections.lualine_c, component) +end + +-- Inserts a component in lualine_x at right section +local function ins_right(component) + table.insert(config.sections.lualine_x, component) +end + +ins_left { + function() + return '▊' + end, + color = { fg = colors.blue }, -- Sets highlighting of component + padding = { left = 0, right = 1 }, -- We don't need space before this +} + +ins_left { + -- mode component + function() + return '' + end, + color = function() + -- auto change color according to neovims mode + local mode_color = { + n = colors.red, + i = colors.green, + v = colors.blue, + [''] = colors.blue, + V = colors.blue, + c = colors.magenta, + no = colors.red, + s = colors.orange, + S = colors.orange, + [''] = colors.orange, + ic = colors.yellow, + R = colors.violet, + Rv = colors.violet, + cv = colors.red, + ce = colors.red, + r = colors.cyan, + rm = colors.cyan, + ['r?'] = colors.cyan, + ['!'] = colors.red, + t = colors.red, + } + return { fg = mode_color[vim.fn.mode()] } + end, + padding = { right = 1 }, +} + +ins_left { + -- filesize component + 'filesize', + cond = conditions.buffer_not_empty, +} + +ins_left { + 'filetype', + cond = conditions.buffer_not_empty, + icon_only = true, +} + +ins_left { + 'filename', + cond = conditions.buffer_not_empty, + color = { fg = colors.magenta, gui = 'bold' }, +} + +ins_left { 'location' } + +ins_left { 'progress', color = { fg = colors.fg, gui = 'bold' } } + +ins_left { + 'diagnostics', + sources = { 'nvim_diagnostic' }, + symbols = { error = ' ', warn = ' ', info = ' ' }, + diagnostics_color = { + error = { fg = colors.red }, + warn = { fg = colors.yellow }, + info = { fg = colors.cyan }, + }, +} + +-- Insert mid section. You can make any number of sections in neovim :) +-- for lualine it's any number greater then 2 +ins_left { + function() + return '%=' + end, +} + +ins_left { + -- Lsp server name . + function() + local msg = 'No Active Lsp' + local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype') + local clients = vim.lsp.get_clients() + if next(clients) == nil then + return msg + end + for _, client in ipairs(clients) do + local filetypes = client.config.filetypes + if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then + return client.name + end + end + return msg + end, + cond = function() + local tbl = { ['dashboard'] = true, [''] = true } + if tbl[vim.bo.filetype] then + return false + elseif next(vim.lsp.get_clients()) == nil then + return false + end + return true + end, + icon = '⚙ LSP:', + color = { fg = colors.fg, gui = 'bold' }, +} + +ins_right { + 'branch', + icon = '', + color = { fg = colors.violet, gui = 'bold' }, +} + +ins_right { + 'diff', + -- Is it me or the symbol for modified us really weird + symbols = { added = ' ', modified = ' ', removed = ' ' }, + diff_color = { + added = { fg = colors.green }, + modified = { fg = colors.orange }, + removed = { fg = colors.red }, + }, + cond = conditions.hide_in_width, +} + +ins_right { + function() + return '▊' + end, + color = { fg = colors.blue }, + padding = { left = 1 }, +} + +-- Now don't forget to initialize lualine +lualine.setup(config) diff --git a/neovim/.config/nvim/lua/plugins/aider.lua b/neovim/.config/nvim/lua/plugins/aider.lua new file mode 100644 index 0000000..0aa6745 --- /dev/null +++ b/neovim/.config/nvim/lua/plugins/aider.lua @@ -0,0 +1,23 @@ +return { + { + "ddzero2c/aider.nvim", + config = function() + require("aider").setup({ + command = 'aider', -- Path to aider command + model = 'ollama_chat/qwen2.5-coder:3b', -- AI model to use + mode = 'diff', -- Edit mode: 'diff' or 'inline' + -- Floating window options + float_opts = { + relative = 'editor', + width = 0.8, -- 80% of editor width + height = 0.8, -- 80% of editor height + style = 'minimal', + border = 'rounded', + title = ' Aider ', + title_pos = 'center', + }, + }) + vim.keymap.set({ 'v', 'n' }, 'ga', ':AiderEdit<CR>', { noremap = true, silent = true }) + end + } +} diff --git a/neovim/.config/nvim/lua/plugins/codecompanion.lua b/neovim/.config/nvim/lua/plugins/codecompanion.lua new file mode 100644 index 0000000..b05497c --- /dev/null +++ b/neovim/.config/nvim/lua/plugins/codecompanion.lua @@ -0,0 +1,31 @@ +return { + { + "olimorris/codecompanion.nvim", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-treesitter/nvim-treesitter", + }, + opts = { + adapters = { + qwen = function() + return require('codecompanion.adapters').extend('ollama', { + name = 'qwen', + schema = { + model = { + default = 'qwen2.5-coder:3b', + }, + }, + }) + end, + }, + strategies = { + chat = { + adapter = 'qwen', + }, + inline = { + adapter = 'qwen', + }, + }, + }, + }, +} diff --git a/neovim/.config/nvim/lua/plugins/gen.lua b/neovim/.config/nvim/lua/plugins/gen.lua new file mode 100644 index 0000000..55e85b6 --- /dev/null +++ b/neovim/.config/nvim/lua/plugins/gen.lua @@ -0,0 +1,7 @@ +return { + 'David-Kunz/gen.nvim', + opts = { + model = 'qwen2.5-coder:3b', + display_mode = 'split', + } +} diff --git a/neovim/.config/nvim/lua/plugins/goyo.lua b/neovim/.config/nvim/lua/plugins/goyo.lua index bfe797a..5f70048 100644 --- a/neovim/.config/nvim/lua/plugins/goyo.lua +++ b/neovim/.config/nvim/lua/plugins/goyo.lua @@ -17,14 +17,12 @@ return { vim.opt.scrolloff = 999 vim.opt.laststatus = 0 - local gl = require('galaxyline') - local gls = gl.section - gls.left = {} - gls.mid = {} - gls.right = {} + require('lualine').hide() vim.cmd('Limelight') - vim.cmd('VimRToggleFullscreen') + if vim.fn.exists('g:gui_vimr') == 1 then + vim.cmd('VimRToggleFullscreen') + end end local goyo_leave = function() @@ -36,10 +34,12 @@ return { vim.opt.showmode = true vim.opt.showcmd = true vim.opt.scrolloff = 5 - dofile(script_path() .. '../config/galaxyline.lua') + require('lualine').hide({ unhide = true }) vim.opt.laststatus = 3 vim.cmd('Limelight!') - vim.cmd('VimRToggleFullscreen') + if vim.fn.exists('g:gui_vimr') == 1 then + vim.cmd('VimRToggleFullscreen') + end end local goyo_augroup = vim.api.nvim_create_augroup('Goyo', { clear = true }) diff --git a/neovim/.config/nvim/lua/plugins/lspsaga.lua b/neovim/.config/nvim/lua/plugins/lspsaga.lua index 53bff94..27173ec 100644 --- a/neovim/.config/nvim/lua/plugins/lspsaga.lua +++ b/neovim/.config/nvim/lua/plugins/lspsaga.lua @@ -11,7 +11,11 @@ return { }, lightbulb = { virtual_text = false, - } + }, + diagnostic = { + diagnostic_only_current = true, + border_follow = false, + }, }, keys = { { "gh", "<cmd>Lspsaga finder<CR>", desc = "Lspsaga finder" }, diff --git a/neovim/.config/nvim/lua/plugins/galaxyline.lua b/neovim/.config/nvim/lua/plugins/lualine.lua index d3f8ba7..5f538d1 100644 --- a/neovim/.config/nvim/lua/plugins/galaxyline.lua +++ b/neovim/.config/nvim/lua/plugins/lualine.lua @@ -1,13 +1,12 @@ return { { - 'nvimdev/galaxyline.nvim', - branch = 'main', + 'nvim-lualine/lualine.nvim', dependencies = { { 'nvim-tree/nvim-web-devicons', }, { - "catppuccin/nvim", + 'catppuccin/nvim', name = "catppuccin", priority = 1000, lazy = false, @@ -16,6 +15,26 @@ return { }, }, { + 'rebelot/kanagawa.nvim', + priority = 1000, + lazy = false, + }, + { + 'neanias/everforest-nvim', + priority = 1000, + lazy = false, + }, + { + 'savq/melange-nvim', + priority = 1000, + lazy = false, + }, + { + 'shaunsingh/nord.nvim', + priority = 1000, + lazy = false, + }, + { 'navarasu/onedark.nvim', lazy = false, priority = 1000, @@ -45,6 +64,7 @@ return { group = colorscheme_rules_augroup, callback = function() vim.api.nvim_set_hl(0, 'WinSeparator', { link = 'VertSplit', force = 1, default = 1 }) + vim.api.nvim_set_hl(0, 'NotifyBackground', { link = 'Normal', force = 1, default = 1 }) end, }) end, @@ -66,7 +86,7 @@ return { }, event = { 'BufEnter', 'VimEnter' }, config = function() - require('config.galaxyline') + require('config.lualine') end, - }, + } } diff --git a/neovim/.config/nvim/lua/plugins/neogit.lua b/neovim/.config/nvim/lua/plugins/neogit.lua index a0a3f90..43dcf02 100644 --- a/neovim/.config/nvim/lua/plugins/neogit.lua +++ b/neovim/.config/nvim/lua/plugins/neogit.lua @@ -7,11 +7,8 @@ return { 'sindrets/diffview.nvim', }, opts = { - disable_commit_confirmation = true, - auto_refresh = true, - kind = 'tab', commit_editor = { - kind = 'auto', + staged_diff_split_kind = "auto", }, integrations = { -- Neogit only provides inline diffs. If you want a more traditional way to look at diffs, you can use `sindrets/diffview.nvim`. @@ -26,7 +23,8 @@ return { -- } -- } -- - diffview = true + diffview = true, + telescope = true, } }, keys = { diff --git a/neovim/.config/nvim/lua/plugins/noice.lua b/neovim/.config/nvim/lua/plugins/noice.lua new file mode 100644 index 0000000..004b868 --- /dev/null +++ b/neovim/.config/nvim/lua/plugins/noice.lua @@ -0,0 +1,94 @@ +return { + { + 'folke/noice.nvim', + event = 'VeryLazy', + opts = { + lsp = { + -- override markdown rendering so that **cmp** and other plugins use **Treesitter** + override = { + ['vim.lsp.util.convert_input_to_markdown_lines'] = true, + ['vim.lsp.util.stylize_markdown'] = true, + ['cmp.entry.get_documentation'] = true, -- requires hrsh7th/nvim-cmp + }, + progress = { + enabled = false, + }, + }, + -- you can enable a preset for easier configuration + presets = { + bottom_search = true, -- use a classic bottom cmdline for search + command_palette = true, -- position the cmdline and popupmenu together + long_message_to_split = true, -- long messages will be sent to a split + inc_rename = false, -- enables an input dialog for inc-rename.nvim + lsp_doc_border = false, -- add a border to hover docs and signature help + }, + popupmenu = { + enabled = true, + backend = "cmp", + }, + views = { + cmdline_popup = { + position = { + row = 5, + col = '50%', + }, + size = { + width = 60, + height = 'auto', + }, + }, + popupmenu = { + relative = 'editor', + position = { + row = 8, + col = '50%', + }, + size = { + width = 60, + height = 10, + }, + border = { + style = 'rounded', + padding = { 0, 1 }, + }, + win_options = { + winhighlight = { Normal = 'Normal', FloatBorder = 'DiagnosticInfo' }, + }, + }, + }, + routes = { + { + filter = { + event = 'lsp', + kind = 'progress', + cond = function(message) + local client = vim.tbl_get(message.opts, 'progress', 'client') + return client == 'null-ls' + end, + }, + opts = { + skip = true, + }, + }, + { + filter = { + event = 'msg_show', + kind = '', + find = 'written', + }, + opts = { + skip = true, + }, + }, + }, + }, + dependencies = { + -- if you lazy-load any plugin below, make sure to add proper `module='...'` entries + 'MunifTanjim/nui.nvim', + -- OPTIONAL: + -- `nvim-notify` is only needed, if you want to use the notification view. + -- If not available, we use `mini` as the fallback + 'rcarriga/nvim-notify', + }, + }, +} diff --git a/neovim/.config/nvim/lua/plugins/none_ls.lua b/neovim/.config/nvim/lua/plugins/none_ls.lua new file mode 100644 index 0000000..2ca16b9 --- /dev/null +++ b/neovim/.config/nvim/lua/plugins/none_ls.lua @@ -0,0 +1,32 @@ +return { + { + 'nvimtools/none-ls.nvim', + dependencies = { + { + 'davidmh/cspell.nvim', + }, + }, + config = function () + local cspell = require('cspell') + local null_ls = require('null-ls') + + null_ls.setup { + sources = { + cspell.diagnostics.with({ + diagnostics_postprocess = function(diagnostic) + diagnostic.severity = vim.diagnostic.severity.HINT + end, + }), + cspell.code_actions, + null_ls.builtins.diagnostics.djlint, + null_ls.builtins.formatting.djlint, + null_ls.builtins.code_actions.gitsigns, + }, + should_attach = function(bufnr) + local bufname = vim.api.nvim_buf_get_name(bufnr) + return not bufname:match("gen.nvim") + end, + } + end, + } +} diff --git a/neovim/.config/nvim/lua/plugins/nvim_cmp.lua b/neovim/.config/nvim/lua/plugins/nvim_cmp.lua index f0a4f95..320b684 100644 --- a/neovim/.config/nvim/lua/plugins/nvim_cmp.lua +++ b/neovim/.config/nvim/lua/plugins/nvim_cmp.lua @@ -40,6 +40,17 @@ return { local cmp = require('cmp') local lspkind = require('lspkind') cmp.setup({ + enabled = function() + -- disable completion in comments + local context = require 'cmp.config.context' + -- keep command mode completion enabled when cursor is in a comment + if vim.api.nvim_get_mode().mode == 'c' then + return true + else + return not context.in_treesitter_capture("comment") + and not context.in_syntax_group("Comment") + end + end, snippet = { -- REQUIRED - you must specify a snippet engine expand = function(args) @@ -91,7 +102,12 @@ return { sources = cmp.config.sources({ { name = 'path' } }, { - { name = 'cmdline' } + { + name = 'cmdline', + option = { + ignore_cmds = { 'Man', '!' }, + }, + }, }) }) end, diff --git a/neovim/.config/nvim/lua/plugins/nvim_dap.lua b/neovim/.config/nvim/lua/plugins/nvim_dap.lua index 0de8468..f94fd0f 100644 --- a/neovim/.config/nvim/lua/plugins/nvim_dap.lua +++ b/neovim/.config/nvim/lua/plugins/nvim_dap.lua @@ -37,10 +37,10 @@ return { local pythonPath = function() local cwd = vim.loop.cwd() - if vim.fn.executable(cwd .. '/venv/bin/python') == 1 then - return cwd .. '/venv/bin/python' + if vim.fn.executable(cwd .. '/.venv/bin/python') == 1 then + return cwd .. '/.venv/bin/python' else - return '/Users/michael/.pyenv/shims/python3' + return '/opt/homebrew/bin/python3' end end diff --git a/neovim/.config/nvim/lua/plugins/nvim_lspconfig.lua b/neovim/.config/nvim/lua/plugins/nvim_lspconfig.lua index 48a86c6..ebea05a 100644 --- a/neovim/.config/nvim/lua/plugins/nvim_lspconfig.lua +++ b/neovim/.config/nvim/lua/plugins/nvim_lspconfig.lua @@ -1,25 +1,46 @@ return { { + dependencies = { + { 'williamboman/mason.nvim' }, + { 'williamboman/mason-lspconfig.nvim' }, + }, 'neovim/nvim-lspconfig', lazy = false, priority = 800, config = function() - local nvim_lsp = require('lspconfig') + require("mason").setup() + require("mason-lspconfig").setup() local capabilities = require('cmp_nvim_lsp').default_capabilities() -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches local servers = { "bashls", "clangd", "cssls", "dockerls", "gopls", "htmx", "jsonls", "marksman", - "phpactor", "psalm", "ruff", "rust_analyzer", "taplo", "yamlls" } + "ruff", "rust_analyzer", "taplo", "ts_ls", "ty", "yamlls" } for _, lsp in ipairs(servers) do - nvim_lsp[lsp].setup { + vim.lsp.config(lsp, { capabilities = capabilities, flags = { debounce_text_changes = 150, - } - } + }, + }) + vim.lsp.enable(lsp) end - require 'lspconfig'.lua_ls.setup { + vim.lsp.config('basedpyright', { + settings = { + basedpyright = { + disableOrganizeImports = true, + }, + python = { + analysis = { + ignore = { '*' }, + }, + }, + } + }) + + vim.lsp.enable('basedpyright') + + vim.lsp.config('lua_ls', { on_init = function(client) local path = client.workspace_folders[1].name if vim.loop.fs_stat(path .. '/.luarc.json') or vim.loop.fs_stat(path .. '/.luarc.jsonc') then @@ -35,7 +56,7 @@ return { -- Make the server aware of Neovim runtime files workspace = { checkThirdParty = false, - library = { + library = { vim.env.VIMRUNTIME -- Depending on the usage, you might want to add additional paths here. -- "${3rd}/luv/library" @@ -59,60 +80,32 @@ return { }, capabilities = capabilities, - } + }) + + vim.lsp.enable('lua_ls') - require 'lspconfig'.html.setup { + vim.lsp.config('html', { filetypes = { 'html', 'htmldjango' }, capabilities = capabilities, flags = { debounce_text_changes = 150, }, - } + }) - require 'lspconfig'.ts_ls.setup { - filetypes = { 'typescript', 'typescriptreact', 'typescript.tsx' }, - capabilities = capabilities, - flags = { - debounce_text_changes = 150, - }, - } + vim.lsp.enable('html') - require 'lspconfig'.pylsp.setup { - settings = { - pylsp = { - plugins = { - autopep8 = { - enabled = false, - }, - black = { - enabled = false, - }, - mccabe = { - enabled = false, - }, - pycodestyle = { - enabled = false, - }, - pyflakes = { - enabled = false, - }, - pylsp_mypy = { - enabled = true, - }, - ruff = { - enabled = false, - }, - yapf = { - enabled = false, - }, - } - } - }, + vim.lsp.config('intelephense', { + filetypes = { 'php' }, capabilities = capabilities, flags = { debounce_text_changes = 150, }, - } + init_options = { + licenceKey = '~/.config/intelephense/licence.txt', + }, + }) + + vim.lsp.enable('intelephense') -- Use LspAttach autocommand to only map the following keys -- after the language server attaches to the current buffer @@ -145,6 +138,28 @@ return { end, desc = 'LSP: Disable hover capability from Ruff', }) + + -- Disable diagnostics for gen.nvim + vim.api.nvim_create_autocmd({ "LspAttach" }, { + group = vim.api.nvim_create_augroup("lsp_disable", { clear = true }), + pattern = 'gen.nvim', + callback = function(args) + vim.diagnostic.enable(false, { bufnr = args.buf }) + end, + }) + + vim.api.nvim_create_autocmd({ "BufWritePost" }, { + pattern = '*.py', + callback = function() + vim.lsp.buf.code_action { + context = { + only = { 'source.fixAll.ruff' }, + }, + apply = true, + } + vim.lsp.buf.format { async = true } + end + }) end, }, } diff --git a/neovim/.config/nvim/lua/plugins/tabby.lua b/neovim/.config/nvim/lua/plugins/tabby.lua index 0aa271e..b51c859 100644 --- a/neovim/.config/nvim/lua/plugins/tabby.lua +++ b/neovim/.config/nvim/lua/plugins/tabby.lua @@ -4,6 +4,7 @@ return { dependencies = { 'nvim-tree/nvim-web-devicons', }, + cond = function() return vim.fn.has('gui_running') == 0 end, config = function() local theme = { fill = 'TabLineFill', diff --git a/neovim/.config/nvim/lua/plugins/telescope.lua b/neovim/.config/nvim/lua/plugins/telescope.lua index 6a81359..08729ca 100644 --- a/neovim/.config/nvim/lua/plugins/telescope.lua +++ b/neovim/.config/nvim/lua/plugins/telescope.lua @@ -1,13 +1,52 @@ return { { 'nvim-telescope/telescope.nvim', + tag = '0.1.8', dependencies = { - 'nvim-lua/plenary.nvim', + { + 'nvim-lua/plenary.nvim', + }, + { + "nvim-telescope/telescope-live-grep-args.nvim", + -- This will not install any breaking changes. + -- For major updates, this must be adjusted manually. + version = "^1.0.0", + }, }, + cmd = "Telescope", keys = { - { '<F3>', '<cmd>Telescope buffers<CR>', desc = 'Telescope buffers' }, + { '<F3>', '<cmd>Telescope buffers<CR>', desc = 'Telescope buffers' }, { '<F4>', '<cmd>Telescope find_files<CR>', desc = 'Telescope find files' }, - { '<F6>', '<cmd>Telescope live_grep<CR>', desc = 'Telescope live grep' }, + { '<F6>', '<cmd>Telescope live_grep<CR>', desc = 'Telescope live grep' }, }, + config = function() + local telescope = require("telescope") + local lga_actions = require("telescope-live-grep-args.actions") + + -- first setup telescope + telescope.setup({ + extensions = { + live_grep_args = { + auto_quoting = true, -- enable/disable auto-quoting + -- define mappings, e.g. + mappings = { -- extend mappings + i = { + ["<C-k>"] = lga_actions.quote_prompt(), + ["<C-i>"] = lga_actions.quote_prompt({ postfix = " --iglob " }), + -- freeze the current list and start a fuzzy search in the frozen list + ["<C-space>"] = lga_actions.to_fuzzy_refine, + }, + }, + -- ... also accepts theme settings, for example: + -- theme = "dropdown", -- use dropdown theme + -- theme = { }, -- use own theme spec + -- layout_config = { mirror=true }, -- mirror preview pane + } + } + }) + + -- then load the extension + telescope.load_extension("live_grep_args") + end }, } diff --git a/neovim/.config/nvim/lua/plugins/vim_svelte_plugin.lua b/neovim/.config/nvim/lua/plugins/vim_svelte_plugin.lua new file mode 100644 index 0000000..edcf7b6 --- /dev/null +++ b/neovim/.config/nvim/lua/plugins/vim_svelte_plugin.lua @@ -0,0 +1,6 @@ +return { + { + 'leafOfTree/vim-svelte-plugin', + ft = 'svelte', + } +} diff --git a/neovim/.config/nvim/lua/settings.lua b/neovim/.config/nvim/lua/settings.lua index 4d3c601..cb55779 100644 --- a/neovim/.config/nvim/lua/settings.lua +++ b/neovim/.config/nvim/lua/settings.lua @@ -1,7 +1,8 @@ -- General settings vim.g.loaded_python_provider = 1 -vim.g.python3_host_prog = '/Users/michael/.pyenv/shims/python3' +vim.g.python3_host_prog = '/opt/homebrew/bin/python3' +vim.g.loaded_node_provider = 0 vim.g.loaded_perl_provider = 0 vim.g.loaded_ruby_provider = 0 @@ -25,7 +26,7 @@ vim.opt.linebreak = true vim.opt.showbreak = '↪ ' vim.opt.breakindent = true vim.opt.termguicolors = true -vim.cmd[[ +vim.cmd [[ syntax on filetype on filetype plugin on @@ -39,10 +40,29 @@ vim.opt.shortmess:append 'c' vim.opt.signcolumn = 'yes' vim.opt.laststatus = 3 +if vim.g.neovide then + vim.g.neovide_input_macos_option_key_is_meta = 'only_left' +end + +if vim.g.neovide then + vim.keymap.set('n', '<D-s>', ':w<CR>') -- Save + vim.keymap.set('v', '<D-c>', '"+y') -- Copy + vim.keymap.set('n', '<D-v>', '"+P') -- Paste normal mode + vim.keymap.set('v', '<D-v>', '"+P') -- Paste visual mode + vim.keymap.set('c', '<D-v>', '<C-R>+') -- Paste command mode + vim.keymap.set('i', '<D-v>', '<ESC>l"+Pli') -- Paste insert mode +end + +-- Allow clipboard copy paste in neovim +vim.api.nvim_set_keymap('', '<D-v>', '+p<CR>', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('!', '<D-v>', '<C-R>+', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('t', '<D-v>', '<C-R>+', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('v', '<D-v>', '<C-R>+', { noremap = true, silent = true }) + -- Autocommands local indent_rules_augroup = vim.api.nvim_create_augroup('Indents', {}) -vim.api.nvim_create_autocmd( { 'FileType' }, { +vim.api.nvim_create_autocmd({ 'FileType' }, { pattern = { 'make', 'sh', 'zsh' }, group = indent_rules_augroup, callback = function() @@ -52,7 +72,7 @@ vim.api.nvim_create_autocmd( { 'FileType' }, { vim.opt_local.expandtab = false end }) -vim.api.nvim_create_autocmd( { 'FileType' }, { +vim.api.nvim_create_autocmd({ 'FileType' }, { pattern = { 'go' }, group = indent_rules_augroup, callback = function() @@ -62,7 +82,7 @@ vim.api.nvim_create_autocmd( { 'FileType' }, { vim.opt_local.expandtab = false end }) -vim.api.nvim_create_autocmd( { 'FileType' }, { +vim.api.nvim_create_autocmd({ 'FileType' }, { pattern = { 'javascript', 'lua' }, group = indent_rules_augroup, callback = function() @@ -73,7 +93,7 @@ vim.api.nvim_create_autocmd( { 'FileType' }, { }) local wrap_rules_augroup = vim.api.nvim_create_augroup('Wrap', {}) -vim.api.nvim_create_autocmd( { 'FileType' }, { +vim.api.nvim_create_autocmd({ 'FileType' }, { pattern = { 'markdown', 'rst', 'text' }, group = wrap_rules_augroup, callback = function() @@ -82,7 +102,7 @@ vim.api.nvim_create_autocmd( { 'FileType' }, { }) local terminal_rules_augroup = vim.api.nvim_create_augroup('Terminal', {}) -vim.api.nvim_create_autocmd( { 'TermOpen' }, { +vim.api.nvim_create_autocmd({ 'TermOpen' }, { pattern = { '*' }, group = terminal_rules_augroup, callback = function() @@ -98,7 +118,7 @@ vim.api.nvim_create_autocmd( { 'TermOpen' }, { }) -- Terminal -vim.cmd[[ +vim.cmd [[ tnoremap <Esc> <C-\><C-n> tnoremap <A-h> <C-\><C-N><C-w>h tnoremap <A-j> <C-\><C-N><C-w>j @@ -144,4 +164,15 @@ if vim.fn.has('gui_running') == 1 then vim.keymap.set('n', '<S-D-}>', '<cmd>tabn<CR>', { noremap = true, silent = true }) vim.keymap.set('v', '<S-D-}>', '<cmd>tabn<CR>', { noremap = true, silent = true }) vim.keymap.set('i', '<S-D-}>', '<Esc><cmd>tabn<CR>', { noremap = true, silent = true }) + vim.keymap.set('n', '<M-S-{>', '<cmd>tabp<CR>', { noremap = true, silent = true }) + vim.keymap.set('v', '<M-S-{>', '<cmd>tabp<CR>', { noremap = true, silent = true }) + vim.keymap.set('i', '<M-S-{>', '<Esc><cmd>tabp<CR>', { noremap = true, silent = true }) + vim.keymap.set('n', '<M-S-}>', '<cmd>tabn<CR>', { noremap = true, silent = true }) + vim.keymap.set('v', '<M-S-}>', '<cmd>tabn<CR>', { noremap = true, silent = true }) + vim.keymap.set('i', '<M-S-}>', '<Esc><cmd>tabn<CR>', { noremap = true, silent = true }) end + +vim.diagnostic.config({ + underline = { severity = vim.diagnostic.severity.ERROR }, + virtual_text = false, +}) diff --git a/starship/.config/starship.toml b/starship/.config/starship.toml new file mode 100644 index 0000000..dc911de --- /dev/null +++ b/starship/.config/starship.toml @@ -0,0 +1,224 @@ +[aws] +symbol = " " + +[buf] +symbol = " " + +[bun] +symbol = " " + +[c] +symbol = " " + +[conda] +symbol = " " + +[crystal] +symbol = " " + +[dart] +symbol = " " + +[directory] +read_only = " " + +[docker_context] +symbol = " " + +[elixir] +symbol = " " + +[elm] +symbol = " " + +[fennel] +symbol = " " + +[fossil_branch] +symbol = " " + +[git_branch] +symbol = " " + +[golang] +symbol = " " + +[guix_shell] +symbol = " " + +[haskell] +symbol = " " + +[haxe] +symbol = " " + +[hg_branch] +symbol = " " + +[hostname] +ssh_symbol = " " + +[java] +symbol = " " + +[julia] +symbol = " " + +[kotlin] +symbol = " " + +[lua] +symbol = " " + +[memory_usage] +symbol = " " + +[meson] +symbol = " " + +[nim] +symbol = " " + +[nix_shell] +symbol = " " + +[nodejs] +symbol = " " +disabled = true + +[ocaml] +symbol = " " + +[os.symbols] +Alpaquita = " " +Alpine = " " +AlmaLinux = " " +Amazon = " " +Android = " " +Arch = " " +Artix = " " +CentOS = " " +Debian = " " +DragonFly = " " +Emscripten = " " +EndeavourOS = " " +Fedora = " " +FreeBSD = " " +Garuda = " " +Gentoo = " " +HardenedBSD = " " +Illumos = " " +Kali = " " +Linux = " " +Mabox = " " +Macos = " " +Manjaro = " " +Mariner = " " +MidnightBSD = " " +Mint = " " +NetBSD = " " +NixOS = " " +OpenBSD = " " +openSUSE = " " +OracleLinux = " " +Pop = " " +Raspbian = " " +Redhat = " " +RedHatEnterprise = " " +RockyLinux = " " +Redox = " " +Solus = " " +SUSE = " " +Ubuntu = " " +Unknown = " " +Void = " " +Windows = " " + +[package] +symbol = " " + +[perl] +symbol = " " + +[php] +symbol = " " + +[pijul_channel] +symbol = " " + +[python] +symbol = " " + +[rlang] +symbol = " " + +[ruby] +symbol = " " + +[rust] +symbol = " " + +[scala] +symbol = " " + +[swift] +symbol = " " + +[zig] +symbol = " " + +[palettes.catppuccin_latte] +rosewater = "#dc8a78" +flamingo = "#dd7878" +pink = "#ea76cb" +mauve = "#8839ef" +red = "#d20f39" +maroon = "#e64553" +peach = "#fe640b" +yellow = "#df8e1d" +green = "#40a02b" +teal = "#179299" +sky = "#04a5e5" +sapphire = "#209fb5" +blue = "#1e66f5" +lavender = "#7287fd" +text = "#4c4f69" +subtext1 = "#5c5f77" +subtext0 = "#6c6f85" +overlay2 = "#7c7f93" +overlay1 = "#8c8fa1" +overlay0 = "#9ca0b0" +surface2 = "#acb0be" +surface1 = "#bcc0cc" +surface0 = "#ccd0da" +base = "#eff1f5" +mantle = "#e6e9ef" +crust = "#dce0e8" + +[palettes.catppuccin_mocha] +rosewater = "#f5e0dc" +flamingo = "#f2cdcd" +pink = "#f5c2e7" +mauve = "#cba6f7" +red = "#f38ba8" +maroon = "#eba0ac" +peach = "#fab387" +yellow = "#f9e2af" +green = "#a6e3a1" +teal = "#94e2d5" +sky = "#89dceb" +sapphire = "#74c7ec" +blue = "#89b4fa" +lavender = "#b4befe" +text = "#cdd6f4" +subtext1 = "#bac2de" +subtext0 = "#a6adc8" +overlay2 = "#9399b2" +overlay1 = "#7f849c" +overlay0 = "#6c7086" +surface2 = "#585b70" +surface1 = "#45475a" +surface0 = "#313244" +base = "#1e1e2e" +mantle = "#181825" +crust = "#11111b" diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf new file mode 100644 index 0000000..2187745 --- /dev/null +++ b/tmux/.tmux.conf @@ -0,0 +1,56 @@ +set-option -as terminal-features ',xterm-256color:RGB' +setw -g mode-keys vi + +# List of plugins +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'AngryMorrocoy/tmux-neolazygit' +set -g @plugin 'tmux-plugins/tmux-open' +set -g @plugin 'tmux-plugins/tmux-pain-control' +set -g @plugin 'tmux-plugins/tmux-sensible' +set -g @plugin 'tmux-plugins/tmux-yank' + +# DESIGN TWEAKS + +# don't do anything when a 'bell' rings +set -g visual-activity off +set -g visual-bell off +set -g visual-silence off +setw -g monitor-activity off +set -g bell-action none + +# clock mode +setw -g clock-mode-colour colour1 + +# copy mode +setw -g mode-style 'fg=colour1 bg=colour18 bold' + +# pane borders +set -g pane-border-style 'fg=colour7 dim' +set -g pane-active-border-style 'fg=colour7' + +# statusbar +set -g status-position bottom +set -g status-justify left +set -g status-style 'fg=terminal' +set -g status-left '#[fg=colour0 bold bg=colour7] #S #[fg=terminal bg=terminal]' +set -g status-right '%Y-%m-%d %H:%M ' +set -g status-right-length 50 +set -g status-left-length 25 + +setw -g window-status-current-style 'fg=colour15 bg=colour2 bold' +setw -g window-status-current-format ' #I #W #F ' + +setw -g window-status-style 'fg=colour1 dim' +setw -g window-status-format ' #I #[fg=terminal dim]#W #[fg=colour1 dim]#F ' + +setw -g window-status-bell-style 'fg=colour2 bg=colour9 bold' + +# messages +set -g message-style 'fg=terminal bg=terminal bold' + +# titles +set -g set-titles on +set -g set-titles-string "#W" + +# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) +run '~/.tmux/plugins/tpm/tpm' diff --git a/wezterm/.wezterm.lua b/wezterm/.wezterm.lua index b99a500..df1b874 100644 --- a/wezterm/.wezterm.lua +++ b/wezterm/.wezterm.lua @@ -5,7 +5,7 @@ local wezterm = require 'wezterm' local config = wezterm.config_builder() -- This is where you actually apply your config choices -config.font = wezterm.font 'SarasaFixedSC Nerd Font Mono' +config.font = wezterm.font 'SarasaTermCL Nerd Font Mono' config.font_size = 13 config.window_frame = { -- The font used in the tab bar. @@ -18,7 +18,7 @@ config.window_frame = { } -- For example, changing the color scheme: -config.color_scheme = 'iTerm2 Light Background' +config.color_scheme = 'Apple Classic' -- and finally, return the configuration to wezterm return config diff --git a/zsh/.zshenv b/zsh/.zshenv index 122763d..bc88c29 100644 --- a/zsh/.zshenv +++ b/zsh/.zshenv @@ -15,5 +15,10 @@ if [[ -d $HOME/Library/Python/3.12/bin ]] && [[ ! $PATH == *"$HOME/Library/Pytho } export EDITOR="nvim" +export AWS_PROFILE=krotos +export CMAKE_C_COMPILER=/usr/bin/clang +export CMAKE_CXX_COMPILER=/usr/bin/clang++ . "$HOME/.cargo/env" + +export OLLAMA_API_BASE=http://127.0.0.1:11434 @@ -26,9 +26,6 @@ bindkey '^r' history-incremental-search-backward # PROMPT='%~ > ' -export PYENV_ROOT="$HOME/.pyenv" -[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" -eval "$(pyenv init -)" if command -v ngrok &>/dev/null; then eval "$(ngrok completion)" fi @@ -38,3 +35,12 @@ test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell eval $(thefuck --alias) eval "$(starship init zsh)" + +alias rm="rm -I" + +# bun completions +[ -s "/Users/michael/.bun/_bun" ] && source "/Users/michael/.bun/_bun" + +# bun +export BUN_INSTALL="$HOME/.bun" +export PATH="$BUN_INSTALL/bin:$PATH" |