diff --git a/.gitconfig-advancedmetrics b/.gitconfig-advancedmetrics new file mode 100644 index 0000000..2fee681 --- /dev/null +++ b/.gitconfig-advancedmetrics @@ -0,0 +1,6 @@ +[user] + email = blake.ridgway@ametrics.org + name = Blake Ridgway # optional – set your name too + +[core] + sshCommand = ssh -i ~/.ssh/id_rsa_ametrics -o IdentitiesOnly=yes diff --git a/bashrc b/bashrc index 14341ea..80e9970 100644 --- a/bashrc +++ b/bashrc @@ -73,3 +73,10 @@ work() { echo "main.py exited with code $code" fi } + +# add Pulumi to the PATH +export PATH=$PATH:/home/proc/.pulumi/bin + +# deepseek +export DEEPSEEK_API_KEY="sk-d75aeba06fc546a88a7ff171b9bbc098" + diff --git a/gitconfig b/gitconfig index c6af762..681cc25 100644 --- a/gitconfig +++ b/gitconfig @@ -7,3 +7,6 @@ editor = nvim +14 -c +startinsert [init] defaultBranch = main + +[includeIf "gitdir:~/dev/AdvancedMetrics/"] + path = ~/dotfiles/.gitconfig-advancedmetrics diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json index 4d9546c..800660c 100644 --- a/nvim/lazy-lock.json +++ b/nvim/lazy-lock.json @@ -1,35 +1,40 @@ { - "LuaSnip": { "branch": "master", "commit": "642b0c595e11608b4c18219e93b88d7637af27bc" }, - "NvChad": { "branch": "v2.5", "commit": "eb209a4a82aecabe609d8206b865e00a760fb644" }, + "LuaSnip": { "branch": "master", "commit": "a62e1083a3cfe8b6b206e7d3d33a51091df25357" }, + "NvChad": { "branch": "v2.5", "commit": "d042cc975247c2aa55fcb228e5d146dc1dc6c648" }, + "avante.nvim": { "branch": "main", "commit": "b69b0166275a36febdde1de0c92e1ef9588de963" }, "base46": { "branch": "v3.0", "commit": "884b990dcdbe07520a0892da6ba3e8d202b46337" }, "cmp-async-path": { "branch": "main", "commit": "f8af3f726e07f2e9d37672eaa9102581aefce149" }, "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" }, "cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" }, "cmp-nvim-lua": { "branch": "main", "commit": "e3a22cb071eb9d6508a156306b102c45cd2d573d" }, "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, - "conform.nvim": { "branch": "master", "commit": "178b8f0d70ee63db616a8b3bda637218eef121dd" }, + "conform.nvim": { "branch": "master", "commit": "dca1a190aa85f9065979ef35802fb77131911106" }, + "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" }, "friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" }, - "gitsigns.nvim": { "branch": "main", "commit": "4ed47e8c4c66c921dc1d6643977e0526e1f44396" }, + "gitsigns.nvim": { "branch": "main", "commit": "dd3f588bacbeb041be6facf1742e42097f62165d" }, "harpoon": { "branch": "harpoon2", "commit": "87b1a3506211538f460786c23f98ec63ad9af4e5" }, "indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" }, - "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, + "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, "lazygit.nvim": { "branch": "main", "commit": "a04ad0dbc725134edbee3a5eea29290976695357" }, - "mason.nvim": { "branch": "main", "commit": "57e5a8addb8c71fb063ee4acda466c7cf6ad2800" }, + "mason.nvim": { "branch": "main", "commit": "cb8445f8ce85d957416c106b780efd51c6298f89" }, "menu": { "branch": "main", "commit": "7a0a4a2896b715c066cfbe320bdc048091874cc6" }, "minty": { "branch": "main", "commit": "aafc9e8e0afe6bf57580858a2849578d8d8db9e0" }, + "minuet-ai.nvim": { "branch": "main", "commit": "7e696b717082e524286192ddaf397f709427f1a5" }, + "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, "nvim-autopairs": { "branch": "master", "commit": "59bce2eef357189c3305e25bc6dd2d138c1683f5" }, "nvim-cmp": { "branch": "main", "commit": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca" }, - "nvim-dap": { "branch": "master", "commit": "4f5deb110d9ff8994d96c21df95e2271d11214f9" }, + "nvim-dap": { "branch": "master", "commit": "45a69eba683a2c448dd9ecfc4de89511f0646b5f" }, "nvim-dap-go": { "branch": "main", "commit": "b4421153ead5d726603b02743ea40cf26a51ed5f" }, - "nvim-dap-ui": { "branch": "master", "commit": "d9770a55188bb34c2bdce7d90a6151181beb6966" }, - "nvim-lspconfig": { "branch": "master", "commit": "dc7e7c7699cc01b1b6fefa97f9b496d8f447d7a1" }, + "nvim-dap-ui": { "branch": "master", "commit": "1a66cabaa4a4da0be107d5eda6d57242f0fe7e49" }, + "nvim-lspconfig": { "branch": "master", "commit": "31026a13eefb20681124706a79fc1df6bf11ab27" }, "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, - "nvim-tree.lua": { "branch": "master", "commit": "31503ad5d869fca61461d82a9126f62480ecb0ab" }, - "nvim-treesitter": { "branch": "main", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, - "nvim-web-devicons": { "branch": "master", "commit": "40e9d5a6cc3db11b309e39593fc7ac03bb844e38" }, + "nvim-tree.lua": { "branch": "master", "commit": "f9bfc0059eca24546b69a7006110463da4808f8f" }, + "nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" }, + "nvim-web-devicons": { "branch": "master", "commit": "4fc505ac7bd7692824a142e96e5f529c133862f8" }, "oil.nvim": { "branch": "master", "commit": "0fcc83805ad11cf714a949c98c605ed717e0b83e" }, - "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, - "telescope.nvim": { "branch": "master", "commit": "cfb85dcf7f822b79224e9e6aef9e8c794211b20b" }, + "plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" }, + "render-markdown.nvim": { "branch": "main", "commit": "3f3eea97b80839f629c951ca660ffd125bfa5b34" }, + "telescope.nvim": { "branch": "master", "commit": "f04ab730b8f9c6bf3f54a206d0dcddfd70c52d59" }, "todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" }, "toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" }, "trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" }, diff --git a/nvim/lua/mappings.lua b/nvim/lua/mappings.lua index 2274ab9..3c97748 100644 --- a/nvim/lua/mappings.lua +++ b/nvim/lua/mappings.lua @@ -62,11 +62,16 @@ map("n", "hn", function() require("harpoon"):list():next() end, { d map("n", "-", "Oil", { desc = "Open parent dir (Oil)" }) map("n", "oo", "Oil --float", { desc = "Oil (float)" }) +-- ── AI (Minuet inline completions) ─────────────────────────────────────────── +map("i", "", function() require("minuet").make_cmp_map() end, { desc = "Minuet: trigger completion" }) +map("n", "", function() require("minuet").complete_with_minuet() end, { desc = "Minuet: inline suggestion" }) + -- ── which-key group labels ──────────────────────────────────────────────────── vim.schedule(function() local ok, wk = pcall(require, "which-key") if not ok then return end wk.add { + { "a", group = "AI" }, { "d", group = "Debug" }, { "dg", group = "Go" }, { "x", group = "Diagnostics" }, diff --git a/nvim/lua/plugins/init.lua b/nvim/lua/plugins/init.lua index 0d6dc3c..89018bb 100644 --- a/nvim/lua/plugins/init.lua +++ b/nvim/lua/plugins/init.lua @@ -110,6 +110,83 @@ return { opts = {}, }, + -- ── AI ─────────────────────────────────────────────────────────────────────── + + -- Avante: AI sidebar chat + inline editing (DeepSeek) + { + "yetone/avante.nvim", + event = "VeryLazy", + build = "make", + dependencies = { + "stevearc/dressing.nvim", + "nvim-lua/plenary.nvim", + "MunifTanjim/nui.nvim", + { + "MeanderingProgrammer/render-markdown.nvim", + opts = { file_types = { "markdown", "Avante" } }, + ft = { "markdown", "Avante" }, + }, + }, + opts = { + provider = "deepseek", + providers = { + deepseek = { + __inherited_from = "openai", + api_key_name = "cmd:grep -m1 DEEPSEEK_API_KEY ~/.bashrc | grep -oP '(?<=\")[^\"]*(?=\")'", + endpoint = "https://api.deepseek.com/v1", + model = "deepseek-chat", + extra_request_body = { temperature = 0, max_tokens = 8192 }, + }, + }, + -- Use dressing for concealed API-key prompts (native provider has a bug) + input = { provider = "dressing" }, + }, + config = function(_, opts) + require("avante").setup(opts) + -- DeepSeek is a REST API provider, not an ACP agent — remove ACP-only keys + pcall(vim.keymap.del, "n", "aM") + pcall(vim.keymap.del, "n", "am") + end, + }, + + -- Minuet: inline ghost-text completions (DeepSeek via OpenAI-compat endpoint) + { + "milanglacier/minuet-ai.nvim", + event = "BufReadPost", + dependencies = { "nvim-lua/plenary.nvim" }, + opts = { + provider = "openai_compatible", + provider_options = { + openai_compatible = { + api_key = "DEEPSEEK_API_KEY", + end_point = "https://api.deepseek.com/chat/completions", + model = "deepseek-chat", + name = "DeepSeek", + optional = { max_tokens = 256, top_p = 0.9 }, + }, + }, + virtualtext = { + auto_trigger_ft = {}, -- manual trigger only () + keymap = { + accept = "", + accept_line = "", + prev = "", + next = "", + dismiss = "", + }, + }, + }, + }, + + -- Expose minuet as a nvim-cmp source + { + "hrsh7th/nvim-cmp", + opts = function(_, opts) + table.insert(opts.sources, { name = "minuet" }) + return opts + end, + }, + -- Oil: edit the filesystem like a buffer { "stevearc/oil.nvim",