diff --git a/_ref/den b/_ref/den new file mode 160000 index 0000000..fb189d3 --- /dev/null +++ b/_ref/den @@ -0,0 +1 @@ +Subproject commit fb189d3e83f76c56ee0d7b30752c9017fe4b5462 diff --git a/_ref/nix-wrapper-modules b/_ref/nix-wrapper-modules new file mode 160000 index 0000000..abb9fe7 --- /dev/null +++ b/_ref/nix-wrapper-modules @@ -0,0 +1 @@ +Subproject commit abb9fe7e20adcf3c854c03d101e5d18c6d49457c diff --git a/flake.lock b/flake.lock index 45bd1e6..a712015 100644 --- a/flake.lock +++ b/flake.lock @@ -362,6 +362,22 @@ "type": "github" } }, + "nixpkgs_10": { + "locked": { + "lastModified": 1768564909, + "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_2": { "locked": { "lastModified": 1770841267, @@ -565,7 +581,8 @@ "nixpkgs": "nixpkgs_6", "noctalia": "noctalia", "nvf": "nvf", - "sops-nix": "sops-nix" + "sops-nix": "sops-nix", + "vicinae-extensions": "vicinae-extensions" } }, "sops-nix": { @@ -601,6 +618,66 @@ "type": "github" } }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "vicinae": { + "inputs": { + "nixpkgs": [ + "vicinae-extensions", + "nixpkgs" + ], + "systems": [ + "vicinae-extensions", + "systems" + ] + }, + "locked": { + "lastModified": 1768856963, + "narHash": "sha256-u5bWDuwk6oieTnvm1YjNotcYK8iJSddH5+S68+X4TSc=", + "owner": "vicinaehq", + "repo": "vicinae", + "rev": "934bc0ad47be6dbd6498a0dac655c4613fd0ab27", + "type": "github" + }, + "original": { + "owner": "vicinaehq", + "repo": "vicinae", + "type": "github" + } + }, + "vicinae-extensions": { + "inputs": { + "nixpkgs": "nixpkgs_10", + "systems": "systems_2", + "vicinae": "vicinae" + }, + "locked": { + "lastModified": 1772537696, + "narHash": "sha256-nLMXPAt7+ZPjnh7f3JDpbLCY2BKQlD7kWzWI4qu1ITk=", + "owner": "vicinaehq", + "repo": "extensions", + "rev": "6a32c2678359e611bd8c75469c66aae24ed5563f", + "type": "github" + }, + "original": { + "owner": "vicinaehq", + "repo": "extensions", + "type": "github" + } + }, "xwayland-satellite-stable": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 6f1269f..04620b1 100644 --- a/flake.nix +++ b/flake.nix @@ -16,6 +16,9 @@ nvf.url = "github:notashelf/nvf"; sops-nix.url = "github:Mic92/sops-nix"; + #vicinae.url = "github:vicinaehq/vicinae"; + vicinae-extensions.url = "github:vicinaehq/extensions"; + lux-pkgs.url = "git+ssh://gitea@orion/kiri/lux-pkgs"; }; diff --git a/hm-out b/hm-out new file mode 120000 index 0000000..8a9cc30 --- /dev/null +++ b/hm-out @@ -0,0 +1 @@ +/nix/store/d1zhmp8szw0q777gq0mx9b2c3455l78c-home-manager-generation \ No newline at end of file diff --git a/modules/apps/vicinae.nix b/modules/apps/vicinae.nix index d22f790..f804220 100644 --- a/modules/apps/vicinae.nix +++ b/modules/apps/vicinae.nix @@ -1,53 +1,73 @@ -{ ... }: +{ inputs, ... }: { lux.vicinae = { - homeManager = { - programs.vicinae = { - enable = true; - systemd.enable = true; + homeManager = + { pkgs, ... }: + { + programs.vicinae = { + enable = true; + systemd.enable = true; - themes = { - kanagawa-wave = { - meta = { - version = 1; - name = "Kanagawa Wave"; - description = "A dark theme inspired by the colors of the famous painting by Katsushika Hokusai."; - variant = "dark"; - inherits = "vicinae-dark"; - }; - colors = { - core = { - background = "#1F1F28"; - foreground = "#DCD7BA"; - secondary_background = "#16161D"; - border = "#2A2A37"; - accent = "#7E9CD8"; + themes = { + kanagawa-wave = { + meta = { + version = 1; + name = "Kanagawa Wave"; + description = "A dark theme inspired by the colors of the famous painting by Katsushika Hokusai."; + variant = "dark"; + inherits = "vicinae-dark"; }; - accents = { - blue = "#7E9CD8"; - green = "#98BB6C"; - magenta = "#D27E99"; - orange = "#FFA066"; - purple = "#957FB8"; - red = "#E82424"; - yellow = "#E6C384"; - cyan = "#7AA89F"; - }; - input = { - border_focus = "colors.core.accent"; + colors = { + core = { + background = "#1F1F28"; + foreground = "#DCD7BA"; + secondary_background = "#16161D"; + border = "#2A2A37"; + accent = "#7E9CD8"; + }; + accents = { + blue = "#7E9CD8"; + green = "#98BB6C"; + magenta = "#D27E99"; + orange = "#FFA066"; + purple = "#957FB8"; + red = "#E82424"; + yellow = "#E6C384"; + cyan = "#7AA89F"; + }; + input = { + border_focus = "colors.core.accent"; + }; }; }; }; + + settings = { + theme = { + light.name = "kanagawa-wave"; + dark.name = "kanagawa-wave"; + }; + }; + + extensions = with inputs.vicinae-extensions.packages.${pkgs.stdenv.hostPlatform.system}; [ + agenda + #bluetooth + brotab + #dbus + fuzzy-files + github + it-tools + niri + nix + podman + process-manager + pulseaudio + simple-bookmarks + ssh + #systemd + ]; }; - settings = { - theme = { - light.name = "kanagawa-wave"; - dark.name = "kanagawa-wave"; - }; - }; }; - - }; }; } diff --git a/modules/core/xdg.nix b/modules/core/xdg.nix index f9bd2df..bb59010 100644 --- a/modules/core/xdg.nix +++ b/modules/core/xdg.nix @@ -39,6 +39,7 @@ enable = true; defaultApplicationPackages = with pkgs; [ sioyek + imv vivaldi neovim ]; diff --git a/modules/dev/neovim/default.nix b/modules/dev/neovim/default.nix index 0aab54c..4e7f484 100644 --- a/modules/dev/neovim/default.nix +++ b/modules/dev/neovim/default.nix @@ -20,9 +20,17 @@ }) ]; + # Configure sops-nix secret + sops.secrets.gemini-api-key-neovim = {}; + wrappers.neovim = { enable = true; + # Inject the API key into the Neovim environment only + env = { + GEMINI_API_KEY = "$(cat ${config.sops.secrets.gemini-api-key-neovim.path})"; + }; + # 1. Point to your existing Lua config directory settings.config_directory = ./lua-config; @@ -74,10 +82,8 @@ data = with pkgs.vimPlugins; [ nvim-treesitter.withAllGrammars nvim-treesitter-textobjects - nvim-treesitter-context trouble-nvim guess-indent-nvim - gitsigns-nvim which-key-nvim telescope-nvim telescope-fzf-native-nvim @@ -86,20 +92,18 @@ blink-cmp luasnip friendly-snippets - todo-comments-nvim mini-nvim nvim-lspconfig lazydev-nvim - nvim-autopairs - indent-blankline-nvim - nvim-lint - render-markdown-nvim colorful-menu-nvim lualine-nvim - bufferline-nvim zen-mode-nvim kanagawa-nvim project-nvim + typst-preview-nvim + direnv-vim + codecompanion-nvim + copilot-lua ]; }; }; diff --git a/modules/dev/neovim/lua-config/init.lua b/modules/dev/neovim/lua-config/init.lua index 5d2a5fe..2aa9040 100644 --- a/modules/dev/neovim/lua-config/init.lua +++ b/modules/dev/neovim/lua-config/init.lua @@ -1,5 +1,9 @@ require("options") -require("plugins.ui") -require("plugins.editor") -require("plugins.coding") require("plugins.lsp") +require("plugins.completion") +require("plugins.formatting") +require("plugins.treesitter") +require("plugins.telescope") +require("plugins.ui") +require("plugins.core") +require("plugins.ai") diff --git a/modules/dev/neovim/lua-config/lua/plugins/ai.lua b/modules/dev/neovim/lua-config/lua/plugins/ai.lua new file mode 100644 index 0000000..1e3db19 --- /dev/null +++ b/modules/dev/neovim/lua-config/lua/plugins/ai.lua @@ -0,0 +1,72 @@ +require("lz.n").load({ + { + "copilot.lua", + cmd = "Copilot", + event = "InsertEnter", + after = function() + require("copilot").setup({ + -- Disable inline suggestions, let CodeCompanion (or blink) handle interactions + suggestion = { enabled = false }, + panel = { enabled = false }, + }) + end, + }, + { + "codecompanion.nvim", + cmd = { "CodeCompanion", "CodeCompanionChat", "CodeCompanionActions" }, + keys = { + { "aa", "CodeCompanionChat Toggle", mode = { "n", "v" }, desc = "[A]I [A]ssistant" }, + { "ac", "CodeCompanionActions", mode = { "n", "v" }, desc = "[A]I [C]ode Actions" }, + }, + after = function() + require("codecompanion").setup({ + -- Set Gemini as the default strategy + strategies = { + chat = { + adapter = "gemini", + }, + inline = { + adapter = "gemini", + }, + }, + -- Configure all available adapters + adapters = { + copilot = function() + return require("codecompanion.adapters").extend("copilot", { + schema = { + model = { + default = "claude-3.5-sonnet", -- Good default for Copilot chat + }, + }, + }) + end, + gemini = function() + return require("codecompanion.adapters").extend("gemini", { + env = { + api_key = "GEMINI_API_KEY", + }, + schema = { + model = { + default = "gemini-3.1-pro-preview", + }, + }, + }) + end, + gemini_cli = function() + return require("codecompanion.adapters").extend("gemini_cli", { + -- Pass the model as a CLI argument + args = { + "--model", + "gemini-3.1-pro-preview", + }, + -- Set authentication to use standard Google Login + env = { + auth_method = "oauth-personal", + }, + }) + end, + }, + }) + end, + }, +}) diff --git a/modules/dev/neovim/lua-config/lua/plugins/coding.lua b/modules/dev/neovim/lua-config/lua/plugins/coding.lua deleted file mode 100644 index 070fc7c..0000000 --- a/modules/dev/neovim/lua-config/lua/plugins/coding.lua +++ /dev/null @@ -1,227 +0,0 @@ -require("lz.n").load({ - -- { - -- "nvim-treesitter-context", - -- event = "BufReadPost", - -- after = function() - -- require("treesitter-context").setup({ - -- enable = true, - -- max_lines = 3, -- How many lines the window should span - -- }) - -- end, - -- }, - { - "nvim-lint", - event = { "BufReadPre", "BufNewFile" }, - after = function() - local lint = require("lint") - - -- Create autocommand which carries out the actual linting - -- on the specified events. - local lint_augroup = vim.api.nvim_create_augroup("lint", { clear = true }) - vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost", "InsertLeave" }, { - group = lint_augroup, - callback = function() - -- Only run the linter in buffers that you can modify in order to - -- avoid superfluous noise, notably within the handy LSP pop-ups that - -- describe the hovered symbol using Markdown. - if vim.bo.modifiable then - lint.try_lint() - end - end, - }) - end, - }, - { - "nvim-autopairs", - event = "InsertEnter", - after = function() - require("nvim-autopairs").setup({ - check_ts = true, - }) - end, - }, - { - "nvim-treesitter", - dep_of = "render-markdown.nvim", - -- cmd = { "" }, - event = "DeferredUIEnter", - -- ft = "", - -- keys = "", - -- colorscheme = "", - load = function(name) - vim.cmd.packadd(name) - end, - after = function() - -- [[ Configure Treesitter ]] - -- See `:help nvim-treesitter` - require("nvim-treesitter.configs").setup({ - highlight = { enable = true }, - indent = { enable = true }, - incremental_selection = { - enable = true, - keymaps = { - init_selection = "", - node_incremental = "", - scope_incremental = "", - node_decremental = "", - }, - }, - }) - end, - }, - { - "conform.nvim", - event = "BufWritePre", - cmd = "ConformInfo", - keys = { - { - "f", - function() - require("conform").format({ async = true, lsp_format = "fallback" }) - end, - mode = "", - desc = "[F]ormat buffer", - }, - }, - after = function() - require("conform").setup({ - notify_on_error = true, - format_on_save = function(bufnr) - -- Disable "format_on_save lsp_fallback" for languages that don't - -- have a well standardized coding style. You can add additional - -- languages here or re-enable it for the disabled ones. - local disable_filetypes = { c = true, cpp = true } - if disable_filetypes[vim.bo[bufnr].filetype] then - return nil - else - return { - timeout_ms = 500, - lsp_format = "fallback", - } - end - end, - formatters_by_ft = { - lua = { "stylua" }, - -- Conform can also run multiple formatters sequentially - python = { "isort", "black" }, - -- - -- You can use 'stop_after_first' to run the first available formatter from the list - -- javascript = { "prettierd", "prettier", stop_after_first = true }, - }, - formatters = { - stylua = { - prepend_args = { "--indent-type", "Spaces", "--indent-width", "2" }, - }, - }, - }) - end, - }, - { - "friendly-snippets", - }, - { - "luasnip", - before = function() - require("lz.n").trigger_load("friendly-snippets") - end, - after = function() - require("luasnip.loaders.from_vscode").lazy_load() - end, - }, - { - -- lazydev makes your lsp way better in your config without needing extra lsp configuration. - "lazydev.nvim", - cmd = "LazyDev", - ft = "lua", - after = function() - require("lazydev").setup({ - library = { - { words = { "nixCats", "settings" }, path = "nix-info" }, - }, - }) - end, - }, - { - "blink.cmp", - before = function() - -- Trigger lazydev so it's ready for blink source - require("lz.n").trigger_load({ "lazydev.nvim", "luasnip" }) - end, - after = function() - require("blink.cmp").setup({ - keymap = { - preset = "default", - - -- [Up/Down] - [""] = { "select_next", "fallback" }, - [""] = { "select_prev", "fallback" }, -- Overrides Signature Help - - -- [Insert Suggestion] - [""] = { "select_and_accept", "fallback" }, - - -- [Remap Signature Help] - -- Since we took , let's move signature help to (optional) - [""] = { "show_signature", "hide_signature", "fallback" }, - }, - - appearance = { - nerd_font_variant = "mono", - }, - - completion = { - -- By default, you may press `` to show the documentation. - -- Optionally, set `auto_show = true` to show the documentation after a delay. - documentation = { - auto_show = true, - auto_show_delay_ms = 500, - }, - menu = { - draw = { - columns = { { "kind_icon" }, { "label", gap = 1 } }, - components = { - label = { - text = function(ctx) - return require("colorful-menu").blink_components_text(ctx) - end, - highlight = function(ctx) - return require("colorful-menu").blink_components_highlight(ctx) - end, - }, - }, - }, - }, - }, - - cmdline = { - completion = { - menu = { - auto_show = true, - }, - }, - keymap = { preset = "inherit" }, - }, - - sources = { - default = { - "lsp", - "path", - "snippets", - "lazydev", - }, - providers = { - lazydev = { module = "lazydev.integrations.blink", score_offset = 100 }, - }, - }, - - snippets = { preset = "luasnip" }, - - fuzzy = { implementation = "prefer_rust_with_warning" }, - - -- Shows a signature help window while you type arguments for a function - signature = { - enabled = true, - }, - }) - end, - }, -}) diff --git a/modules/dev/neovim/lua-config/lua/plugins/completion.lua b/modules/dev/neovim/lua-config/lua/plugins/completion.lua new file mode 100644 index 0000000..2bca72c --- /dev/null +++ b/modules/dev/neovim/lua-config/lua/plugins/completion.lua @@ -0,0 +1,104 @@ +require("lz.n").load({ + { + "friendly-snippets", + }, + { + "luasnip", + before = function() + require("lz.n").trigger_load("friendly-snippets") + end, + after = function() + require("luasnip.loaders.from_vscode").lazy_load() + -- Load custom lua snippets + require("luasnip.loaders.from_lua").load({ paths = { vim.fn.stdpath("config") .. "/snippets" } }) + end, + }, + { + "colorful-menu.nvim", + after = function() + require("colorful-menu").setup({}) + end, + }, + { + "blink.cmp", + event = { "InsertEnter", "CmdlineEnter" }, + before = function() + -- Trigger lazydev so it's ready for blink source + require("lz.n").trigger_load({ "lazydev.nvim", "luasnip", "colorful-menu.nvim" }) + end, + after = function() + require("blink.cmp").setup({ + keymap = { + preset = "default", + + -- [Up/Down] + [""] = { "select_next", "fallback" }, + [""] = { "select_prev", "fallback" }, -- Overrides Signature Help + + -- [Insert Suggestion] + [""] = { "select_and_accept", "fallback" }, + + -- [Remap Signature Help] + -- Since we took , let's move signature help to (optional) + [""] = { "show_signature", "hide_signature", "fallback" }, + }, + + appearance = { + nerd_font_variant = "mono", + }, + + completion = { + documentation = { + auto_show = true, + auto_show_delay_ms = 500, + }, + menu = { + draw = { + columns = { { "kind_icon" }, { "label", gap = 1 } }, + components = { + label = { + text = function(ctx) + return require("colorful-menu").blink_components_text(ctx) + end, + highlight = function(ctx) + return require("colorful-menu").blink_components_highlight(ctx) + end, + }, + }, + }, + }, + }, + + cmdline = { + completion = { + menu = { + auto_show = true, + }, + }, + keymap = { preset = "inherit" }, + }, + + sources = { + default = { + "lsp", + "path", + "snippets", + "lazydev", + }, + providers = { + lazydev = { module = "lazydev.integrations.blink", score_offset = 100 }, + }, + }, + + snippets = { preset = "luasnip" }, + + fuzzy = { implementation = "prefer_rust_with_warning" }, + + signature = { + enabled = true, + }, + }) + end, + }, +}) + diff --git a/modules/dev/neovim/lua-config/lua/plugins/core.lua b/modules/dev/neovim/lua-config/lua/plugins/core.lua new file mode 100644 index 0000000..296a1b1 --- /dev/null +++ b/modules/dev/neovim/lua-config/lua/plugins/core.lua @@ -0,0 +1,65 @@ +require("lz.n").load({ + { + "mini.nvim", + event = { "BufReadPre", "BufNewFile" }, + after = function() + -- Better Around/Inside textobjects + require("mini.ai").setup({ n_lines = 500 }) + + -- Add/delete/replace surroundings (brackets, quotes, etc.) + require("mini.surround").setup() + + -- Auto-pairs (replaces nvim-autopairs) + require("mini.pairs").setup() + + local files = require("mini.files") + files.setup() + vim.keymap.set("n", "e", function() + if not files.close() then + files.open(vim.api.nvim_buf_get_name(0)) + end + end, { desc = "File [E]xplorer" }) + + local icons = require("mini.icons") + icons.setup() + icons.mock_nvim_web_devicons() + + local hipatterns = require("mini.hipatterns") + hipatterns.setup({ + highlighters = { + -- Highlight hex color strings (#rrggbb) using that color + hex_color = hipatterns.gen_highlighter.hex_color(), + -- Highlight TODOs, FIXMEs, etc. (replaces todo-comments.nvim) + fixme = { pattern = "%f[%w]()FIXME()%f[%W]", group = "MiniHipatternsFixme" }, + hack = { pattern = "%f[%w]()HACK()%f[%W]", group = "MiniHipatternsHack" }, + todo = { pattern = "%f[%w]()TODO()%f[%W]", group = "MiniHipatternsTodo" }, + note = { pattern = "%f[%w]()NOTE()%f[%W]", group = "MiniHipatternsNote" }, + }, + }) + + local indentscope = require("mini.indentscope") + indentscope.setup({ + symbol = "│", + }) + + vim.api.nvim_create_autocmd("FileType", { + pattern = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy", "mason" }, + callback = function() + vim.b.miniindentscope_disable = true + end, + }) + end, + }, + { + "guess-indent.nvim", + event = { "BufReadPre", "BufNewFile" }, + after = function() + require("guess-indent").setup({}) + end, + }, + { + "direnv.vim", + event = "BufEnter", + }, +}) + diff --git a/modules/dev/neovim/lua-config/lua/plugins/editor.lua b/modules/dev/neovim/lua-config/lua/plugins/editor.lua deleted file mode 100644 index 656aee1..0000000 --- a/modules/dev/neovim/lua-config/lua/plugins/editor.lua +++ /dev/null @@ -1,240 +0,0 @@ -require("lz.n").load({ - { - "project.nvim", - name = "project-nvim", - event = { "VimEnter" }, -- Load early to set root correctly - after = function() - require("project").setup({ - -- 1. Automagically change directory to project root - manual_mode = false, - - -- Methods to detect the root directory - detection_methods = { "lsp", "pattern" }, - - -- Files/folders that indicate a root - patterns = { ".git", "_darcs", ".hg", ".bzr", ".svn", "Makefile", "package.json", "flake.nix" }, - - -- Show hidden files in telescope - show_hidden = true, - - -- When the project scope changes, change the directory - scope_chdir = "global", - }) - end, - }, - { - "guess-indent.nvim", - event = { "BufReadPre", "BufNewFile" }, - after = function() - require("guess-indent").setup({}) - end, - }, - { - "gitsigns.nvim", - event = { "BufReadPre", "BufNewFile" }, - after = function() - require("gitsigns").setup({ - signs = { - add = { text = "▎" }, - change = { text = "▎" }, - delete = { text = "" }, - topdelete = { text = "" }, - changedelete = { text = "▎" }, - }, - on_attach = function(bufnr) - local gitsigns = require("gitsigns") - - local function map(mode, l, r, opts) - opts = opts or {} - opts.buffer = bufnr - vim.keymap.set(mode, l, r, opts) - end - - -- Navigation - map("n", "]c", function() - if vim.wo.diff then - vim.cmd.normal({ "]c", bang = true }) - else - gitsigns.nav_hunk("next") - end - end, { desc = "Jump to next git [c]hange" }) - - map("n", "[c", function() - if vim.wo.diff then - vim.cmd.normal({ "[c", bang = true }) - else - gitsigns.nav_hunk("prev") - end - end, { desc = "Jump to previous git [c]hange" }) - - -- Actions - -- visual mode - map("v", "hs", function() - gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) - end, { desc = "git [s]tage hunk" }) - map("v", "hr", function() - gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) - end, { desc = "git [r]eset hunk" }) - -- normal mode - map("n", "hs", gitsigns.stage_hunk, { desc = "git [s]tage hunk" }) - map("n", "hr", gitsigns.reset_hunk, { desc = "git [r]eset hunk" }) - map("n", "hS", gitsigns.stage_buffer, { desc = "git [S]tage buffer" }) - map("n", "hu", gitsigns.stage_hunk, { desc = "git [u]ndo stage hunk" }) - map("n", "hR", gitsigns.reset_buffer, { desc = "git [R]eset buffer" }) - map("n", "hp", gitsigns.preview_hunk, { desc = "git [p]review hunk" }) - map("n", "hb", gitsigns.blame_line, { desc = "git [b]lame line" }) - map("n", "hd", gitsigns.diffthis, { desc = "git [d]iff against index" }) - map("n", "hD", function() - gitsigns.diffthis("@") - end, { desc = "git [D]iff against last commit" }) - -- Toggles - map("n", "tb", gitsigns.toggle_current_line_blame, { desc = "[T]oggle git show [b]lame line" }) - map("n", "tD", gitsigns.preview_hunk_inline, { desc = "[T]oggle git show [D]eleted" }) - end, - }) - end, - }, - { - "telescope.nvim", - event = "VimEnter", - after = function() - local actions = require("telescope.actions") - - require("telescope").setup({ - defaults = { - path_display = { "truncate" }, - layout_strategy = "horizontal", - layout_config = { - prompt_position = "top", - }, - sorting_strategy = "ascending", - mappings = { - i = { - [""] = actions.move_selection_previous, -- Move up with Ctrl-k - [""] = actions.move_selection_next, -- Move down with Ctrl-j - [""] = actions.send_selected_to_qflist + actions.open_qflist, -- Send to quickfix - }, - }, - }, - extensions = { - ["ui-select"] = { - require("telescope.themes").get_dropdown(), - }, - }, - }) - - -- Enable Telescope extensions if they are installed - pcall(require("telescope").load_extension, "projects") - pcall(require("telescope").load_extension, "fzf") - pcall(require("telescope").load_extension, "ui-select") - - -- See `:help telescope.builtin` - local builtin = require("telescope.builtin") - vim.keymap.set("n", "sh", builtin.help_tags, { desc = "[S]earch [H]elp" }) - vim.keymap.set("n", "sk", builtin.keymaps, { desc = "[S]earch [K]eymaps" }) - vim.keymap.set("n", "sf", builtin.find_files, { desc = "[S]earch [F]iles" }) - vim.keymap.set("n", "ss", builtin.builtin, { desc = "[S]earch [S]elect Telescope" }) - vim.keymap.set("n", "sw", builtin.grep_string, { desc = "[S]earch current [W]ord" }) - vim.keymap.set("n", "sg", builtin.live_grep, { desc = "[S]earch by [G]rep" }) - vim.keymap.set("n", "sd", builtin.diagnostics, { desc = "[S]earch [D]iagnostics" }) - vim.keymap.set("n", "sr", builtin.resume, { desc = "[S]earch [R]esume" }) - vim.keymap.set("n", "s.", builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' }) - vim.keymap.set("n", "", builtin.buffers, { desc = "[ ] Find existing buffers" }) - vim.keymap.set("n", "sp", function() - require("telescope").extensions.projects.projects({}) - end, { desc = "[S]earch [P]rojects" }) - - -- Slightly advanced example of overriding default behavior and theme - vim.keymap.set("n", "/", function() - -- You can pass additional configuration to Telescope to change the theme, layout, etc. - builtin.current_buffer_fuzzy_find(require("telescope.themes").get_dropdown({ - winblend = 10, - previewer = false, - })) - end, { desc = "[/] Fuzzily search in current buffer" }) - - -- It's also possible to pass additional configuration options. - -- See `:help telescope.builtin.live_grep()` for information about particular keys - vim.keymap.set("n", "s/", function() - builtin.live_grep({ - grep_open_files = true, - prompt_title = "Live Grep in Open Files", - }) - end, { desc = "[S]earch [/] in Open Files" }) - - -- Shortcut for searching your Neovim configuration files - vim.keymap.set("n", "sn", function() - builtin.find_files({ cwd = vim.fn.stdpath("config") }) - end, { desc = "[S]earch [N]eovim files" }) - end, - }, - { - "trouble.nvim", - cmd = "Trouble", - keys = { - { "xx", "Trouble diagnostics toggle", desc = "Diagnostics (Trouble)" }, - { "xX", "Trouble diagnostics toggle filter.buf=0", desc = "Buffer Diagnostics (Trouble)" }, - }, - after = function() - require("trouble").setup({ - focus = true, - }) - end, - }, - { - "todo-comments.nvim", - event = { "BufReadPre", "BufNewFile" }, - keys = { - { "st", "TodoTelescope", desc = "[S]earch [T]odos" }, - { "xt", "TodoTrouble", desc = "Todo (Trouble)" }, - }, - after = function() - require("todo-comments").setup({ - signs = false, - }) - end, - }, - { - "mini.nvim", - after = function() - -- Better Around/Inside textobjects - require("mini.ai").setup({ n_lines = 500 }) - - -- Add/delete/replace surroundings (brackets, quotes, etc.) - require("mini.surround").setup() - - local files = require("mini.files") - files.setup() - vim.keymap.set("n", "e", function() - if not files.close() then - files.open(vim.api.nvim_buf_get_name(0)) - end - end, { desc = "File [E]xplorer" }) - - local icons = require("mini.icons") - icons.setup() - icons.mock_nvim_web_devicons() - - local hipatterns = require("mini.hipatterns") - hipatterns.setup({ - highlighters = { - -- Highlight hex color strings (#rrggbb) using that color - hex_color = hipatterns.gen_highlighter.hex_color(), - }, - }) - - local indentscope = require("mini.indentscope") - indentscope.setup({ - symbol = "│", - -- draw = { animation = indentscope.gen_animation.linear({}) }, - }) - - vim.api.nvim_create_autocmd("FileType", { - pattern = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy", "mason" }, - callback = function() - vim.b.miniindentscope_disable = true - end, - }) - end, - }, -}) diff --git a/modules/dev/neovim/lua-config/lua/plugins/formatting.lua b/modules/dev/neovim/lua-config/lua/plugins/formatting.lua new file mode 100644 index 0000000..43da74e --- /dev/null +++ b/modules/dev/neovim/lua-config/lua/plugins/formatting.lua @@ -0,0 +1,49 @@ +require("lz.n").load({ + { + "conform.nvim", + event = "BufWritePre", + cmd = "ConformInfo", + keys = { + { + "f", + function() + require("conform").format({ async = true, lsp_format = "fallback" }) + end, + mode = "", + desc = "[F]ormat buffer", + }, + }, + after = function() + require("conform").setup({ + notify_on_error = true, + format_on_save = function(bufnr) + -- Disable "format_on_save lsp_fallback" for languages that don't + -- have a well standardized coding style. You can add additional + -- languages here or re-enable it for the disabled ones. + local disable_filetypes = { c = true, cpp = true } + if disable_filetypes[vim.bo[bufnr].filetype] then + return nil + else + return { + timeout_ms = 500, + lsp_format = "fallback", + } + end + end, + formatters_by_ft = { + lua = { "stylua" }, + -- Conform can also run multiple formatters sequentially + python = { "isort", "black" }, + -- + -- You can use 'stop_after_first' to run the first available formatter from the list + -- javascript = { "prettierd", "prettier", stop_after_first = true }, + }, + formatters = { + stylua = { + prepend_args = { "--indent-type", "Spaces", "--indent-width", "2" }, + }, + }, + }) + end, + }, +}) \ No newline at end of file diff --git a/modules/dev/neovim/lua-config/lua/plugins/lsp.lua b/modules/dev/neovim/lua-config/lua/plugins/lsp.lua index 88cc8f1..ed9f6ab 100644 --- a/modules/dev/neovim/lua-config/lua/plugins/lsp.lua +++ b/modules/dev/neovim/lua-config/lua/plugins/lsp.lua @@ -1,7 +1,37 @@ require("lz.n").load({ + { + "typst-preview.nvim", + ft = "typst", + after = function() + -- Setup typst-preview + require("typst-preview").setup({ + -- Optionally configure things here + dependencies_bin = { + -- For example, use tinymist as the LSP if that's what you are running + }, + }) + + vim.keymap.set("n", "tp", "TypstPreviewToggle", { desc = "[T]ypst [P]review Toggle" }) + end, + }, + { + "lazydev.nvim", + cmd = "LazyDev", + ft = "lua", + after = function() + require("lazydev").setup({ + library = { + { words = { "nixCats", "settings" }, path = "nix-info" }, + }, + }) + end, + }, { "nvim-lspconfig", event = { "BufReadPre", "BufNewFile" }, + before = function() + require("lz.n").trigger_load("lazydev.nvim") + end, after = function() vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup("kickstart-lsp-attach", { clear = true }), @@ -15,18 +45,19 @@ require("lz.n").load({ vim.keymap.set(mode, keys, func, { buffer = bufnr, desc = "LSP: " .. desc }) end - -- Mappings (Standard LSP functions from lsp-defaults) [cite: 20-23] - map("grn", vim.lsp.buf.rename, "[R]e[n]ame") - map("gra", vim.lsp.buf.code_action, "[G]oto Code [A]ction", { "n", "x" }) - map("grD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") + -- Standard LSP functions + map("rn", vim.lsp.buf.rename, "[R]e[n]ame") + map("ca", vim.lsp.buf.code_action, "[C]ode [A]ction", { "n", "x" }) + map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") + map("K", vim.lsp.buf.hover, "Hover Documentation") -- Telescope Mappings - map("grr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences") - map("gri", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation") - map("grd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition") - map("gO", require("telescope.builtin").lsp_document_symbols, "Open Document Symbols") - map("gW", require("telescope.builtin").lsp_dynamic_workspace_symbols, "Open Workspace Symbols") - map("grt", require("telescope.builtin").lsp_type_definitions, "[G]oto [T]ype Definition") + map("gd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition") + map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences") + map("gI", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation") + map("D", require("telescope.builtin").lsp_type_definitions, "Type [D]efinition") + map("ds", require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]ymbols") + map("ws", require("telescope.builtin").lsp_dynamic_workspace_symbols, "[W]orkspace [S]ymbols") -- Highlight references (Document Highlight) if client and client:supports_method("textDocument/documentHighlight", bufnr) then @@ -130,24 +161,6 @@ require("lz.n").load({ vim.lsp.enable("rust_analyzer") -- Python - -- vim.lsp.config("basedpyright", { - -- settings = { - -- basedpyright = { - -- analysis = { - -- autoSearchPaths = true, - -- useLibraryCodeForTypes = true, - -- diagnosticMode = "openFilesOnly", - -- typeCheckingMode = "recommended", - -- inlayHints = { - -- variableTypes = true, - -- callArgumentNames = true, - -- functionReturnTypes = true, - -- }, - -- }, - -- }, - -- }, - -- }) - -- vim.lsp.enable("basedpyright") vim.lsp.enable("ty") vim.lsp.enable("ruff") @@ -163,4 +176,17 @@ require("lz.n").load({ vim.lsp.enable("tinymist") end, }, + { + "trouble.nvim", + cmd = "Trouble", + keys = { + { "xx", "Trouble diagnostics toggle", desc = "Diagnostics (Trouble)" }, + { "xX", "Trouble diagnostics toggle filter.buf=0", desc = "Buffer Diagnostics (Trouble)" }, + }, + after = function() + require("trouble").setup({ + focus = true, + }) + end, + }, }) diff --git a/modules/dev/neovim/lua-config/lua/plugins/telescope.lua b/modules/dev/neovim/lua-config/lua/plugins/telescope.lua new file mode 100644 index 0000000..62e2e10 --- /dev/null +++ b/modules/dev/neovim/lua-config/lua/plugins/telescope.lua @@ -0,0 +1,101 @@ +require("lz.n").load({ + { + "project.nvim", + event = { "VimEnter" }, -- Load early to set root correctly + after = function() + require("project").setup({ + -- 1. Automagically change directory to project root + manual_mode = false, + + -- LSP detection + lsp = { enabled = true }, + + -- Files/folders that indicate a root + patterns = { ".git", "_darcs", ".hg", ".bzr", ".svn", "Makefile", "package.json", "flake.nix" }, + + -- Show hidden files in telescope + show_hidden = true, + + -- When the project scope changes, change the directory + scope_chdir = "global", + }) + end, + }, + { + "telescope.nvim", + event = "VimEnter", + before = function() + require("lz.n").trigger_load("project.nvim") + end, + after = function() + local actions = require("telescope.actions") + + require("telescope").setup({ + defaults = { + path_display = { "truncate" }, + layout_strategy = "horizontal", + layout_config = { + prompt_position = "top", + }, + sorting_strategy = "ascending", + mappings = { + i = { + [""] = actions.move_selection_previous, -- Move up with Ctrl-k + [""] = actions.move_selection_next, -- Move down with Ctrl-j + [""] = actions.send_selected_to_qflist + actions.open_qflist, -- Send to quickfix + }, + }, + }, + extensions = { + ["ui-select"] = { + require("telescope.themes").get_dropdown(), + }, + }, + }) + + -- Enable Telescope extensions if they are installed + pcall(require("telescope").load_extension, "projects") + pcall(require("telescope").load_extension, "fzf") + pcall(require("telescope").load_extension, "ui-select") + + -- See `:help telescope.builtin` + local builtin = require("telescope.builtin") + vim.keymap.set("n", "sh", builtin.help_tags, { desc = "[S]earch [H]elp" }) + vim.keymap.set("n", "sk", builtin.keymaps, { desc = "[S]earch [K]eymaps" }) + vim.keymap.set("n", "sf", builtin.find_files, { desc = "[S]earch [F]iles" }) + vim.keymap.set("n", "ss", builtin.builtin, { desc = "[S]earch [S]elect Telescope" }) + vim.keymap.set("n", "sw", builtin.grep_string, { desc = "[S]earch current [W]ord" }) + vim.keymap.set("n", "sg", builtin.live_grep, { desc = "[S]earch by [G]rep" }) + vim.keymap.set("n", "sd", builtin.diagnostics, { desc = "[S]earch [D]iagnostics" }) + vim.keymap.set("n", "sr", builtin.resume, { desc = "[S]earch [R]esume" }) + vim.keymap.set("n", "s.", builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' }) + vim.keymap.set("n", "", builtin.buffers, { desc = "[ ] Find existing buffers" }) + vim.keymap.set("n", "sp", function() + require("telescope").extensions.projects.projects({}) + end, { desc = "[S]earch [P]rojects" }) + + -- Slightly advanced example of overriding default behavior and theme + vim.keymap.set("n", "/", function() + -- You can pass additional configuration to Telescope to change the theme, layout, etc. + builtin.current_buffer_fuzzy_find(require("telescope.themes").get_dropdown({ + winblend = 10, + previewer = false, + })) + end, { desc = "[/] Fuzzily search in current buffer" }) + + -- It's also possible to pass additional configuration options. + -- See `:help telescope.builtin.live_grep()` for information about particular keys + vim.keymap.set("n", "s/", function() + builtin.live_grep({ + grep_open_files = true, + prompt_title = "Live Grep in Open Files", + }) + end, { desc = "[S]earch [/] in Open Files" }) + + -- Shortcut for searching your Neovim configuration files + vim.keymap.set("n", "sn", function() + builtin.find_files({ cwd = vim.fn.stdpath("config") }) + end, { desc = "[S]earch [N]eovim files" }) + end, + }, +}) \ No newline at end of file diff --git a/modules/dev/neovim/lua-config/lua/plugins/treesitter.lua b/modules/dev/neovim/lua-config/lua/plugins/treesitter.lua new file mode 100644 index 0000000..85eacb2 --- /dev/null +++ b/modules/dev/neovim/lua-config/lua/plugins/treesitter.lua @@ -0,0 +1,26 @@ +require("lz.n").load({ + { + "nvim-treesitter", + event = "DeferredUIEnter", + load = function(name) + vim.cmd.packadd(name) + end, + after = function() + -- [[ Configure Treesitter ]] + -- See `:help nvim-treesitter` + require("nvim-treesitter.configs").setup({ + highlight = { enable = true }, + indent = { enable = true }, + incremental_selection = { + enable = true, + keymaps = { + init_selection = "", + node_incremental = "", + scope_incremental = "", + node_decremental = "", + }, + }, + }) + end, + }, +}) \ No newline at end of file diff --git a/modules/dev/neovim/lua-config/lua/plugins/typst.lua b/modules/dev/neovim/lua-config/lua/plugins/typst.lua new file mode 100644 index 0000000..aa64bd8 --- /dev/null +++ b/modules/dev/neovim/lua-config/lua/plugins/typst.lua @@ -0,0 +1 @@ +require("lz.n").load({}) diff --git a/modules/dev/neovim/lua-config/lua/plugins/ui.lua b/modules/dev/neovim/lua-config/lua/plugins/ui.lua index b947e97..c9dd4aa 100644 --- a/modules/dev/neovim/lua-config/lua/plugins/ui.lua +++ b/modules/dev/neovim/lua-config/lua/plugins/ui.lua @@ -1,51 +1,4 @@ require("lz.n").load({ - -- { - -- "catppuccin-nvim", - -- event = "VimEnter", - -- after = function() - -- require("catppuccin").setup({ - -- flavour = "mocha", - -- term_colors = true, - -- dim_inactive = { - -- enabled = true, - -- shade = "dark", - -- percentage = 0.15, - -- }, - -- integrations = { - -- gitsigns = true, - -- telescope = true, - -- treesitter = true, - -- treesitter_context = true, - -- markdown = true, - -- which_key = true, - -- blink_cmp = { - -- style = "bordered", - -- }, - -- }, - -- - -- native_lsp = { - -- enabled = true, - -- virtual_text = { - -- errors = { "italic" }, - -- hints = { "italic" }, - -- warnings = { "italic" }, - -- information = { "italic" }, - -- }, - -- underlines = { - -- errors = { "underline" }, - -- hints = { "underline" }, - -- warnings = { "underline" }, - -- information = { "underline" }, - -- }, - -- inlay_hints = { - -- background = true, - -- }, - -- }, - -- }) - -- - -- vim.cmd.colorscheme("catppuccin") - -- end, - -- }, { "theme-loader", event = "VimEnter", @@ -62,62 +15,6 @@ require("lz.n").load({ end, }, - { - "colorful-menu.nvim", - after = function() - require("colorful-menu").setup({}) - end, - }, - { - "indent-blankline.nvim", - event = "User FileOpened", - after = function() - require("ibl").setup({ - indent = { char = "|" }, - scope = { - enabled = false, - show_start = false, - show_end = false, - }, - }) - end, - }, - { - "render-markdown.nvim", - before = function() - require("lz.n").trigger_load({ "nvim-treesitter", "mini.nvim" }) - end, - after = function() - require("render-markdown").setup({}) - end, - }, - { - "which-key.nvim", - event = "VimEnter", - before = function() - require("lz.n").trigger_load("nvim-web-devicons") - end, - after = function() - require("which-key").setup({ - preset = "modern", - delay = 200, - icons = { - -- set icon mappings to true if you have a Nerd Font - mappings = true, - -- If you are using a Nerd Font: set icons.keys to an empty table which will use the - -- default which-key.nvim defined Nerd Font icons, otherwise define a string table - keys = {}, - }, - - -- Document existing key chains - spec = { - { "s", group = "[S]earch" }, - { "t", group = "[T]oggle" }, - { "h", group = "Git [H]unk", mode = { "n", "v" } }, - }, - }) - end, - }, { "lualine.nvim", event = "VimEnter", @@ -141,54 +38,9 @@ require("lz.n").load({ }) end, }, - { - "bufferline.nvim", - enabled = false, - event = "VimEnter", - after = function() - require("bufferline").setup({ - options = { - mode = "buffers", - numbers = "none", - - separator_style = "thick", - - -- Integrations - diagnostics = "nvim_lsp", - diagnostics_indicator = function(count, level, diagnostics_dict, context) - local icon = level:match("error") and " " or " " - return " " .. icon .. count - end, - - -- Visuals - show_buffer_close_icons = false, - show_close_icon = false, - color_icons = true, - show_tab_indicators = true, - }, - - highlights = { - fill = { - bg = "NONE", -- Makes the empty space transparent/blended - }, - background = { - bg = "NONE", -- Makes inactive buffers transparent/blended - }, - -- Optional: Fix separators if they look "cut off" - separator = { - fg = { attribute = "bg", highlight = "Normal" }, - bg = "NONE", - }, - separator_visible = { - fg = { attribute = "bg", highlight = "Normal" }, - bg = "NONE", - }, - }, - }) - end, - }, { "zen-mode.nvim", + cmd = "ZenMode", after = function() require("zen-mode").setup({ window = { @@ -199,4 +51,31 @@ require("lz.n").load({ }) end, }, -}) + { + "which-key.nvim", + event = "VimEnter", + before = function() + require("lz.n").trigger_load("mini.nvim") + end, + after = function() + require("which-key").setup({ + preset = "modern", + delay = 200, + icons = { + -- set icon mappings to true if you have a Nerd Font + mappings = true, + -- If you are using a Nerd Font: set icons.keys to an empty table which will use the + -- default which-key.nvim defined Nerd Font icons, otherwise define a string table + keys = {}, + }, + + -- Document existing key chains + spec = { + { "s", group = "[S]earch" }, + { "t", group = "[T]oggle" }, + { "h", group = "Git [H]unk", mode = { "n", "v" } }, + }, + }) + end, + }, +}) \ No newline at end of file diff --git a/modules/dev/neovim/lua-config/snippets/nix.lua b/modules/dev/neovim/lua-config/snippets/nix.lua new file mode 100644 index 0000000..1f1ec0b --- /dev/null +++ b/modules/dev/neovim/lua-config/snippets/nix.lua @@ -0,0 +1,91 @@ +local ls = require("luasnip") +local s = ls.snippet +local t = ls.text_node +local i = ls.insert_node + +return { + -- Full lux module (both nixos and homeManager) + s("luxmod", { + t({ + "{ inputs, ... }:", + "{", + " lux." + }), + i(1, "moduleName"), + t({ + " = {", + " nixos = { config, lib, pkgs, ... }: {", + " " + }), + i(2), + t({ + "", + " };", + "", + " homeManager = { config, lib, pkgs, ... }: {", + " " + }), + i(3), + t({ + "", + " };", + " };", + "}", + }), + }), + + -- lux nixos only module + s("luxnixos", { + t({ + "{ inputs, ... }:", + "{", + " lux." + }), + i(1, "moduleName"), + t({ + ".nixos = { config, lib, pkgs, ... }: {", + " " + }), + i(0), + t({ + "", + " };", + "}", + }), + }), + + -- lux homeManager only module + s("luxhm", { + t({ + "{ inputs, ... }:", + "{", + " lux." + }), + i(1, "moduleName"), + t({ + ".homeManager = { config, lib, pkgs, ... }: {", + " " + }), + i(0), + t({ + "", + " };", + "}", + }), + }), + + -- den inline aspect + s("denaspect", { + t({ + "(", + " { host, user, ... }: {", + " " + }), + i(0), + t({ + "", + " }", + ")" + }), + }), +} \ No newline at end of file diff --git a/modules/profiles/workstation.nix b/modules/profiles/workstation.nix index ce28aef..cd949f2 100644 --- a/modules/profiles/workstation.nix +++ b/modules/profiles/workstation.nix @@ -49,6 +49,7 @@ }) ]; + programs.imv.enable = true; programs.sioyek.enable = true; programs.television = { @@ -130,6 +131,17 @@ iosevka jetbrains-mono fira-code + + # Fonts for typst tasteful pairings + roboto + fira + merriweather + ibm-plex + lexend + literata + montserrat + source-sans-pro + source-serif-pro ]; }; diff --git a/modules/secrets/secrets.yaml b/modules/secrets/secrets.yaml index 575c8ad..26d6053 100644 --- a/modules/secrets/secrets.yaml +++ b/modules/secrets/secrets.yaml @@ -3,6 +3,7 @@ university-calendar-url: ENC[AES256_GCM,data:oGP1BdF3YxdRRr061LaC4HaaiPXoyZq7ZAL ssh-config-orion: ENC[AES256_GCM,data:VEe6VSnrpySOdEJ+Sxcc2K6bL/eh/3PjAUNLBjvG7ceJcVnvdA==,iv:yJEhPQ3rYcCn+V7mzC8bPFjkW2GYDArjDJDI8vC1D70=,tag:n49AfsnZZgPuKO8MtAzVtg==,type:str] orion-ip: ENC[AES256_GCM,data:S6fpCWnD8dvchvrHlEo=,iv:72+oRxHUEJ7imJ+sWjGbG+TUrSqYL8hbyHl3ChwFYwA=,tag:Rj6msje87+Ve+M6kcZd4Jw==,type:str] hashed-password-kiri: ENC[AES256_GCM,data:xubN5stH4RPlHYl+Jzcu2BCepz3Hra3TxjiSspktzjgpEWrU79h3NbcPMrYC0MSjsv3oaWio/S7nBV3Tes3WBlI9EC9vq+6tyTVPynUqpB7c9CvvYSmqc9bAHOnIOBb+gP2RR6JB395UoQ==,iv:uN83RNTfCJdBDhFhywV5NbVBp4xcptqzoKVAoAnaiQk=,tag:x9yufiPdSJwBADT6QymExA==,type:str] +gemini-api-key-neovim: ENC[AES256_GCM,data:B8FeFt45FsU3aagyLDKXiwmx0mRrsw4C8RQ3EWXwZ+YfWLMvwJad,iv:1HqBD6vc07Ke/PMYXfHqFrWDGw/UMjiiBjLRN33/xHI=,tag:czcrYGbJFi41rYtIPM4qTQ==,type:str] sops: age: - recipient: age122w85pqj508ukv0rd388mahecgfckmpgnsgz0zcyec37ljae2epsdnvxpl @@ -32,7 +33,7 @@ sops: YlZ4VGIzaE5kQ3ZSczI2Wk5IU1UvOXcKqkj/OYP37+60Gr2xJmPE9O7HB7LCu4Tp AvvoMQLkkvVJ30Y03pfEzIMnvJHKREy9zDOScfqUflDk79mcDaDhvg== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-03-01T17:21:02Z" - mac: ENC[AES256_GCM,data:O3SPxEu8M7au3NF2jZvqqzj4yK44dH7ccb04n59tZmx5lDQfa6nRTJUrlEnwRPUMYmta1WyYZDSje+Yf9hNLSj9ARKMx9Ot/gfBRISOdDQ5FyeHNEU8aq8/HeRkf2CHJYqbNi8wn27IKrMXOG6TktNUXaqb8v4POo3K0qbJ5Z6s=,iv:Aw4G8VXbr48yWWqVhUa5KQ61y1o6ST8VHRECc9s0f5U=,tag:EP218k82eh7itHYO+iNTwQ==,type:str] + lastmodified: "2026-03-03T17:11:55Z" + mac: ENC[AES256_GCM,data:nDtf2GgJr8SNKo/At41gUpvKyhst6zlBshKcmtiwD+5G0tv78nDvIPR6VAegaSRiHpu1jNVj8hZTaT5jMUYsQ85Kkbz4vr3kYU+nucTRNIDQLnLL+z8qRguO3/fG0OuIQvZACc4rzwINR4+FsS6dlNdpzk1V5NpRLxwfhO0WRHM=,iv:yIdccdCNOYP04iV7v2X7HVjDb5NnTbwshtlSYXZt4KQ=,tag:ObSvx6t0/b7sl1RcdqcCeA==,type:str] unencrypted_suffix: _unencrypted version: 3.12.1 diff --git a/result b/result new file mode 120000 index 0000000..e72fe96 --- /dev/null +++ b/result @@ -0,0 +1 @@ +/nix/store/c6fykfn4q9nmy9y16ld4dc7cg1pgyri2-test-nvim \ No newline at end of file