neovim

some updates

+283 -174
+1
.gitignore
··· 1 1 .direnv 2 + result/
-29
candy/lua/marshmallow/colorscheme.lua
··· 1 - -- require("catppuccin").setup({ 2 - -- term_colors = true, 3 - -- custom_highlights = function(colors) 4 - -- return { 5 - -- StatusLine = { bg = colors.base }, 6 - -- 7 - -- MiniMapDiagnosticError = { bg = colors.red, fg = colors.red }, 8 - -- MiniMapDiagnosticWarn = { bg = colors.yellow, fg = colors.yellow }, 9 - -- MiniMapDiagnosticInfo = { bg = colors.teal, fg = colors.teal }, 10 - -- MiniMapDiagnosticHint = {}, 11 - -- 12 - -- MiniFilesBorder = { fg = colors.surface0 }, 13 - -- MiniFilesNormal = { bg = colors.base }, 14 - -- 15 - -- MiniPickBorder = { fg = colors.surface0 }, 16 - -- MiniPickNormal = { bg = colors.base }, 17 - -- MiniPickPrompt = { fg = colors.mauve }, 18 - -- 19 - -- FloatBorder = { fg = colors.mauve }, 20 - -- 21 - -- Directory = { fg = colors.mauve }, 22 - -- 23 - -- -- native_lsp method doesnt work? 24 - -- LspInlayHint = { fg = colors.overlay0, bg = colors.base }, 25 - -- } 26 - -- end, 27 - -- }) 28 - 29 - vim.cmd.colorscheme("kanagawa")
+4
candy/lua/marshmallow/defaults.lua
··· 3 3 vim.o.timeout = true 4 4 vim.o.timeoutlen = 300 5 5 6 + -- Colourscheme -- 7 + vim.cmd.colorscheme("lackluster-hack") 8 + 6 9 -- Terminal -- 7 10 vim.opt.termguicolors = true 8 11 ··· 41 44 -- Diagnostics -- 42 45 vim.diagnostic.config({ 43 46 virtual_text = false, 47 + virtual_lines = true, 44 48 signs = false, 45 49 update_in_insert = false, 46 50 severity_sort = true,
+1 -1
candy/lua/marshmallow/env/gui.lua
··· 22 22 vim.g.neovide_padding_right = 10 23 23 vim.g.neovide_padding_left = 10 24 24 25 - vim.g.neovide_transparency = 0.9 25 + vim.g.neovide_opacity = 0.9 26 26 27 27 vim.g.neovide_refresh_rate = 240 28 28
+6 -1
candy/lua/marshmallow/init.lua
··· 1 1 require("marshmallow.defaults") 2 2 require("marshmallow.statusline") 3 3 require("marshmallow.remap") 4 - require("marshmallow.colorscheme") 5 4 require("marshmallow.treesitter") 6 5 require("marshmallow.completion") 7 6 require("marshmallow.lsp") ··· 9 8 10 9 -- Too short for file 11 10 require("mini.pick").setup() 11 + require("mini.move").setup() 12 + require("mini.surround").setup() 13 + require("hardtime").setup() 14 + require("mini.jump2d").setup({ view = { dim = true } }) 15 + require("mini.jump").setup() 16 + require("mini.bracketed").setup() 12 17 13 18 require("marshmallow.format") 14 19 require("marshmallow.files")
-6
candy/lua/marshmallow/lsp.lua
··· 14 14 15 15 local opts = { noremap = true, silent = true } 16 16 vim.keymap.set("n", "E", vim.diagnostic.open_float, opts) 17 - vim.keymap.set("n", "[d", function() 18 - vim.diagnostic.jump({ count = -1 }) 19 - end, opts) 20 - vim.keymap.set("n", "]d", function() 21 - vim.diagnostic.jump({ count = 1 }) 22 - end, opts) 23 17 vim.keymap.set( 24 18 "n", 25 19 "<space>q",
+64 -14
candy/lua/marshmallow/remap.lua
··· 1 - require("which-key").setup({}) 1 + -- require("which-key").setup({}) 2 + local miniclue = require("mini.clue") 3 + miniclue.setup({ 4 + triggers = { 5 + -- Leader triggers 6 + { mode = "n", keys = "<Leader>" }, 7 + { mode = "x", keys = "<Leader>" }, 8 + 9 + -- Built-in completion 10 + { mode = "i", keys = "<C-x>" }, 11 + 12 + -- `g` key 13 + { mode = "n", keys = "g" }, 14 + { mode = "x", keys = "g" }, 15 + 16 + -- Marks 17 + { mode = "n", keys = "'" }, 18 + { mode = "n", keys = "`" }, 19 + { mode = "x", keys = "'" }, 20 + { mode = "x", keys = "`" }, 21 + 22 + -- Registers 23 + { mode = "n", keys = '"' }, 24 + { mode = "x", keys = '"' }, 25 + { mode = "i", keys = "<C-r>" }, 26 + { mode = "c", keys = "<C-r>" }, 27 + 28 + -- Window commands 29 + { mode = "n", keys = "<C-w>" }, 30 + 31 + -- `z` key 32 + { mode = "n", keys = "z" }, 33 + { mode = "x", keys = "z" }, 34 + 35 + -- mini surround 36 + { mode = "n", keys = "s" }, 37 + { mode = "x", keys = "s" }, 38 + 39 + -- mini bracketed 40 + { mode = "n", keys = "]" }, 41 + { mode = "n", keys = "[" }, 42 + }, 43 + 44 + clues = { 45 + -- Enhance this by adding descriptions for <Leader> mapping groups 46 + miniclue.gen_clues.builtin_completion(), 47 + miniclue.gen_clues.g(), 48 + miniclue.gen_clues.marks(), 49 + miniclue.gen_clues.registers(), 50 + miniclue.gen_clues.windows(), 51 + miniclue.gen_clues.z(), 52 + }, 53 + }) 2 54 3 55 -- experimental -- 4 56 vim.keymap.set("n", "0", "^", { noremap = true, silent = true }) 5 57 vim.keymap.set("n", "^", "0", { noremap = true, silent = true }) 58 + 59 + -- mini.surround 60 + -- fix s key deleting characters 61 + vim.keymap.set({ "n", "x" }, "s", "<Nop>") 6 62 7 63 -- nvim-spider 8 64 require("lz.n").load({ ··· 43 99 44 100 -- Grep / Pick -- 45 101 vim.keymap.set("n", "<leader>f", require("mini.pick").builtin.files, { desc = "Pick (root dir)" }) 102 + vim.keymap.set("n", "<leader>g", require("mini.pick").builtin.resume, { desc = "Resume Pick" }) 46 103 47 104 vim.keymap.set("n", "<leader>/", function() 48 105 local cope = function() 49 - local items = require("mini.pick").get_picker_items() 106 + local query = require("mini.pick").get_picker_query() 50 107 51 - vim.fn.setqflist(vim.tbl_map(function(value) 52 - local split = vim.split(value, ":") 53 - local text = table.concat(split, "", 4) 108 + vim.cmd("Ggrep " .. table.concat(query)) 54 109 55 - return { 56 - filename = split[1], 57 - lnum = split[2], 58 - col = split[3], 59 - text = vim.trim(text), 60 - } 61 - end, items)) 62 - 63 - vim.cmd.cope() 64 110 return true 65 111 end 66 112 local buffer_mappings = { wipeout = { char = "<C-q>", func = cope } } ··· 74 120 local buffer_mappings = { wipeout = { char = "<C-d>", func = wipeout_current } } 75 121 require("mini.pick").builtin.buffers({ include_current = false }, { mappings = buffer_mappings }) 76 122 end, { desc = "Switch Buffer" }) 123 + 124 + vim.keymap.set("n", "<leader>s", function() 125 + require("mini.jump2d").start() 126 + end, { desc = "Jump2d" }) 77 127 78 128 -- Harpoon -- 79 129 require("lz.n").load({
+60 -13
candy/lua/marshmallow/statusline.lua
··· 1 1 local M = {} 2 2 3 - local function set_highlights(recording) 3 + local function set_highlights_kanagawa(recording) 4 4 local palette = require("kanagawa.colors").setup().theme 5 5 6 6 local bg = recording and palette.diff.delete or palette.ui.bg_m2 ··· 23 23 bg = bg, 24 24 }) 25 25 26 - vim.api.nvim_set_hl(0, "StatusAdd", { 27 - fg = palette.vcs.added, 26 + vim.api.nvim_set_hl(0, "StatusHead", { 27 + fg = palette.syn.identifier, 28 + bg = bg, 29 + }) 30 + end 31 + 32 + -- color = { 33 + -- black = "#000000", 34 + -- blue = "#7788AA", 35 + -- gray1 = "#080808", 36 + -- gray2 = "#191919", 37 + -- gray3 = "#2a2a2a", 38 + -- gray4 = "#444444", 39 + -- gray5 = "#555555", 40 + -- gray6 = "#7a7a7a", 41 + -- gray7 = "#aaaaaa", 42 + -- gray8 = "#cccccc", 43 + -- gray9 = "#DDDDDD", 44 + -- green = "#789978", 45 + -- lack = "#708090", 46 + -- luster = "#deeeed", 47 + -- none = "none", 48 + -- orange = "#ffaa88", 49 + -- red = "#D70000", 50 + -- yellow = "#abab77" 51 + -- }, 52 + -- color_special = { 53 + -- comment = "#3A3A3A", 54 + -- exception = "#505050", 55 + -- keyword = "#666666", 56 + -- main_background = "#101010", 57 + -- menu_background = "#191919", 58 + -- param = "#8E8E8E", 59 + -- popup_background = "#1A1A1A", 60 + -- statusline = "#242424", 61 + -- whitespace = "#202020" 62 + -- }, 63 + 64 + local function set_highlights_lackluster(recording) 65 + local lackluster = require("lackluster") 66 + 67 + local bg = lackluster.color_special.statusline 68 + local fg = recording and lackluster.color.red or lackluster.color.gray7 69 + 70 + -- xxx guifg=#aaaaaa guibg=#242424 71 + vim.api.nvim_set_hl(0, "StatusLine", { fg = fg, bg = bg }) 72 + 73 + vim.api.nvim_set_hl(0, "Ruler", { 74 + fg = lackluster.color.gray7, 28 75 bg = bg, 29 76 }) 30 77 31 - vim.api.nvim_set_hl(0, "StatusChanged", { 32 - fg = palette.vcs.changed, 78 + vim.api.nvim_set_hl(0, "StatusLsp", { 79 + fg = lackluster.color.green, 33 80 bg = bg, 34 81 }) 35 82 36 - vim.api.nvim_set_hl(0, "StatusRemoved", { 37 - fg = palette.vcs.removed, 83 + vim.api.nvim_set_hl(0, "StatusFt", { 84 + fg = lackluster.color.orange, 38 85 bg = bg, 39 86 }) 40 87 41 88 vim.api.nvim_set_hl(0, "StatusHead", { 42 - fg = palette.syn.identifier, 89 + fg = lackluster.color.yellow, 43 90 bg = bg, 44 91 }) 45 92 end ··· 50 97 pattern = "*", 51 98 group = augroup, 52 99 callback = function() 53 - set_highlights(false) 100 + set_highlights_lackluster(false) 54 101 end, 55 102 }) 56 103 ··· 58 105 pattern = "*", 59 106 group = augroup, 60 107 callback = function() 61 - set_highlights(true) 108 + set_highlights_lackluster(true) 62 109 end, 63 110 }) 64 111 ··· 93 140 local removed_count = status.removed or 0 94 141 local changed_count = status.removed or 0 95 142 96 - local added = added_count > 0 and ("%#StatusAdd#+" .. added_count .. "%*") or "" 97 - local removed = removed_count > 0 and ("%#StatusRemoved#-" .. removed_count .. "%*") or "" 98 - local changed = changed_count > 0 and ("%#StatusChanged#~" .. changed_count .. "%*") or "" 143 + local added = added_count > 0 and ("%#GitSignsAdd#+" .. added_count .. "%*") or "" 144 + local removed = removed_count > 0 and ("%#GitSignsDelete#-" .. removed_count .. "%*") or "" 145 + local changed = changed_count > 0 and ("%#GitSignsChange#~" .. changed_count .. "%*") or "" 99 146 local changes = "(" .. added .. removed .. changed .. "%#StatusHead#)%*" 100 147 101 148 return " %#StatusHead#" .. status.head .. (has_changes and changes or "") .. "%*"
+4 -4
candy/lua/marshmallow/usercommand.lua
··· 1 - vim.api.nvim_create_user_command("Trans", function() 2 - if vim.g.neovide_transparency ~= 1 then 3 - vim.g.neovide_transparency = 1 1 + vim.api.nvim_create_user_command("Opacity", function() 2 + if vim.g.neovide_opacity ~= 1 then 3 + vim.g.neovide_opacity = 1 4 4 else 5 - vim.g.neovide_transparency = 0.9 5 + vim.g.neovide_opacity = 0.9 6 6 end 7 7 end, {}) 8 8
+19 -3
flake.lock
··· 50 50 "type": "github" 51 51 } 52 52 }, 53 + "flake-compat_3": { 54 + "locked": { 55 + "lastModified": 1746162366, 56 + "narHash": "sha256-5SSSZ/oQkwfcAz/o/6TlejlVGqeK08wyREBQ5qFFPhM=", 57 + "owner": "nix-community", 58 + "repo": "flake-compat", 59 + "rev": "0f158086a2ecdbb138cd0429410e44994f1b7e4b", 60 + "type": "github" 61 + }, 62 + "original": { 63 + "owner": "nix-community", 64 + "repo": "flake-compat", 65 + "type": "github" 66 + } 67 + }, 53 68 "flake-parts": { 54 69 "inputs": { 55 70 "nixpkgs-lib": [ ··· 314 329 }, 315 330 "tolerable": { 316 331 "inputs": { 332 + "flake-compat": "flake-compat_3", 317 333 "nightly": [ 318 334 "nightly" 319 335 ], ··· 322 338 ] 323 339 }, 324 340 "locked": { 325 - "lastModified": 1744942880, 326 - "narHash": "sha256-XH9Y4ffQq9dHWsSDzPabtaxvEjOyShDYWgkfcggnZVk=", 341 + "lastModified": 1747708726, 342 + "narHash": "sha256-SipAOpY97/8g2CanfpQBBwR61b9ZLLshA9ikOClqmys=", 327 343 "owner": "wires-org", 328 344 "repo": "tolerable-nvim-nix", 329 - "rev": "f1e0e952fba1aa6745f656961655642c4f8ffb09", 345 + "rev": "192f8ebf629f584faf4ef46ebfca739b046e8872", 330 346 "type": "github" 331 347 }, 332 348 "original": {
+124 -103
flake.nix
··· 20 20 inputs.vim-firestore.url = "github:delphinus/vim-firestore"; 21 21 inputs.vim-firestore.flake = false; 22 22 23 - outputs = inputs: 24 - inputs.flake-parts.lib.mkFlake {inherit inputs;} ({config, ...}: { 25 - systems = [ 26 - "x86_64-linux" 27 - "x86_64-darwin" 28 - "aarch64-linux" 29 - "aarch64-darwin" 30 - ]; 23 + outputs = 24 + inputs: 25 + inputs.flake-parts.lib.mkFlake { inherit inputs; } ( 26 + { config, ... }: 27 + { 28 + systems = [ 29 + "x86_64-linux" 30 + "x86_64-darwin" 31 + "aarch64-linux" 32 + "aarch64-darwin" 33 + ]; 31 34 32 - imports = [ 33 - inputs.devshell.flakeModule 34 - ]; 35 + imports = [ 36 + inputs.devshell.flakeModule 37 + ]; 35 38 36 - perSystem = { 37 - inputs', 38 - system, 39 - config, 40 - lib, 41 - pkgs, 42 - ... 43 - }: { 44 - packages = { 45 - neovim = inputs.tolerable.makeNightlyNeovimConfig "candy" { 46 - inherit pkgs; 47 - src = lib.fileset.toSource { 48 - root = ./.; 49 - fileset = ./candy; 39 + perSystem = 40 + { 41 + inputs', 42 + system, 43 + config, 44 + lib, 45 + pkgs, 46 + ... 47 + }: 48 + let 49 + tolerableConfig = { 50 + inherit pkgs; 51 + src = lib.fileset.toSource { 52 + root = ./.; 53 + fileset = ./candy; 54 + }; 55 + path = with pkgs; [ 56 + curl 57 + git 58 + stylua 59 + prettierd 60 + black 61 + nixfmt-rfc-style 62 + taplo 63 + lua-language-server 64 + nil 65 + statix 66 + nodePackages.typescript-language-server 67 + tailwindcss-language-server 68 + nodePackages.sql-formatter 69 + gopls 70 + golangci-lint-langserver 71 + golangci-lint 72 + pyright 73 + tinymist 74 + ]; 75 + config = { 76 + plugins = 77 + let 78 + opt = plugin: { 79 + inherit plugin; 80 + optional = true; 81 + }; 82 + in 83 + with pkgs.vimPlugins; 84 + [ 85 + lz-n 86 + nvim-treesitter.withAllGrammars 87 + nvim-lspconfig 88 + catppuccin-nvim 89 + mini-nvim 90 + colorizer 91 + luasnip 92 + (opt conform-nvim) 93 + plenary-nvim 94 + (pkgs.vimUtils.buildVimPlugin { 95 + src = inputs.harpoon-nvim; 96 + name = "harpoon"; 97 + doCheck = false; 98 + }) 99 + rustaceanvim 100 + lackluster-nvim 101 + typescript-tools-nvim 102 + direnv-vim 103 + vim-dotenv 104 + (opt nvim-spider) 105 + vim-fugitive 106 + gitsigns-nvim 107 + vim-gnupg 108 + fidget-nvim 109 + presence-nvim 110 + hardtime-nvim 111 + (pkgs.vimUtils.buildVimPlugin { 112 + src = inputs.vim-firestore; 113 + name = "firestore"; 114 + }) 115 + 116 + # nvim-cmp 117 + nvim-cmp 118 + cmp-nvim-lsp 119 + cmp-cmdline 120 + cmp-async-path 121 + cmp-buffer 122 + luasnip 123 + cmp_luasnip 124 + ]; 125 + }; 50 126 }; 51 - path = with pkgs; [ 52 - curl 53 - git 54 - stylua 55 - prettierd 56 - black 57 - nixfmt-rfc-style 58 - taplo 59 - lua-language-server 60 - nil 61 - statix 62 - nodePackages.typescript-language-server 63 - tailwindcss-language-server 64 - nodePackages.sql-formatter 65 - gopls 66 - golangci-lint-langserver 67 - golangci-lint 68 - pyright 69 - tinymist 70 - ]; 71 - config = { 72 - plugins = let 73 - opt = plugin: { 74 - inherit plugin; 75 - optional = true; 76 - }; 77 - in 78 - with pkgs.vimPlugins; [ 79 - lz-n 80 - nvim-treesitter.withAllGrammars 81 - nvim-lspconfig 82 - catppuccin-nvim 83 - kanagawa-nvim 84 - mini-nvim 85 - luasnip 86 - (opt conform-nvim) 87 - plenary-nvim 88 - which-key-nvim 89 - (pkgs.vimUtils.buildVimPlugin { 90 - src = inputs.harpoon-nvim; 91 - name = "harpoon"; 92 - doCheck = false; 93 - }) 94 - rustaceanvim 95 - nvim-web-devicons 96 - typescript-tools-nvim 97 - direnv-vim 98 - vim-dotenv 99 - (opt nvim-spider) 100 - vim-fugitive 101 - gitsigns-nvim 102 - vim-gnupg 103 - fidget-nvim 104 - presence-nvim 105 - vim-wakatime 106 - (pkgs.vimUtils.buildVimPlugin { 107 - src = inputs.vim-firestore; 108 - name = "firestore"; 109 - }) 127 + in 128 + { 129 + packages = { 130 + neovim = inputs.tolerable.makeNightlyNeovimConfig "candy" tolerableConfig; 131 + 132 + default = config.packages.neovim; 110 133 111 - # nvim-cmp 112 - nvim-cmp 113 - cmp-nvim-lsp 114 - cmp-cmdline 115 - cmp-async-path 116 - cmp-buffer 117 - luasnip 118 - cmp_luasnip 119 - ]; 134 + testing = inputs.tolerable.makeNightlyNeovimConfig "candy" ( 135 + tolerableConfig 136 + // { 137 + testing = true; 138 + } 139 + ); 120 140 }; 121 141 }; 122 142 123 - default = config.packages.neovim; 124 - }; 125 - }; 126 - 127 - flake = let 128 - package = inputs.nixpkgs.lib.genAttrs config.systems (system: inputs.self.packages.${system}.default); 129 - in { 130 - defaultPackage = package; 131 - }; 132 - }); 143 + flake = 144 + let 145 + package = inputs.nixpkgs.lib.genAttrs config.systems ( 146 + system: inputs.self.packages.${system}.default 147 + ); 148 + in 149 + { 150 + defaultPackage = package; 151 + }; 152 + } 153 + ); 133 154 }