diff --git a/README.md b/README.md index 05b30fd9..1c09a69c 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,14 @@ These are dotfiles for my Linux and MacOS machines - WM: [yabai](https://github.com/koekeishiya/yabai) - Terminal: wezterm +### Neovim + +If you want to try my neovim config just do +``` +nix run github:uttarayan21/dotfiles#neovim +``` + + ### For nix I'm a recent convert to NixOS from ArchLinux and have been usin it as primary os as well as a package manager on macos so the flake.nix contains configuration for both nix-darwin as well as nixos. It also contains a native home-manager module configuration for non-nixos devices ( like a SteamDeck ). diff --git a/common/nvim.nix b/common/nvim.nix index f37b3140..7fb9f599 100644 --- a/common/nvim.nix +++ b/common/nvim.nix @@ -1,592 +1,8 @@ { pkgs, - config, inputs, - device, ... -}: let - mkMappings = mappings: - [] - ++ (pkgs.lib.optionals (builtins.hasAttr "normal" mappings) (mkMode mappings.normal "n")) - ++ (pkgs.lib.optionals (builtins.hasAttr "terminal" mappings) (mkMode mappings.terminal "t")) - ++ (pkgs.lib.optionals (builtins.hasAttr "insert" mappings) (mkMode mappings.insert "i")) - ++ (pkgs.lib.optionals (builtins.hasAttr "visual" mappings) (mkMode mappings.visual "v")) - ++ (pkgs.lib.optionals (builtins.hasAttr "global" mappings) (mkMode mappings.global "")); - mkMode = mappings: mode: - pkgs.lib.mapAttrsToList - (key: value: { - key = key; - action = value; - mode = mode; - lua = true; - }) - mappings; - border = ["╭" "─" "╮" "│" "╯" "─" "╰" "│"]; - rawLua = lua: { - "__raw" = '' - ${lua} - ''; - }; -in { +}: { imports = [inputs.nixvim.homeManagerModules.nixvim]; - programs.nixvim = { - enable = true; - plugins = { - fugitive.enable = true; - oil.enable = true; - surround.enable = true; - todo-comments.enable = true; - trouble.enable = true; - ts-context-commentstring.enable = true; - navic = { - enable = true; - lsp.autoAttach = true; - }; - which-key.enable = true; - lualine = { - enable = true; - sections = { - lualine_c = [ - { - name = - rawLua - /* - lua - */ - '' - function(bufnr) - local opts = { highlight = true } - return require'nvim-navic'.get_location(opts) - end, - cond = function() - return require'nvim-navic'.is_available() - end - ''; - } - ]; - }; - }; - - mini = { - enable = true; - modules = { - ai = {}; - starter = {}; - }; - }; - - comment-nvim = { - enable = true; - preHook = '' - require('ts_context_commentstring.integrations.comment_nvim').create_pre_hook() - ''; - }; - - markdown-preview = { - enable = true; - settings.auto_start = true; - }; - # rest.enable = true; - # treesitter-context = { - # maxLines = 3; - # mode = "topline"; - # enable = true; - # }; - - noice = { - enable = true; - notify.enabled = false; - lsp.override = { - "vim.lsp.util.convert_input_to_markdown_lines" = true; - "vim.lsp.util.stylize_markdown" = true; - "cmp.entry.get_documentation" = true; - }; - presets = { - bottom_search = false; - command_palette = true; - long_message_to_split = true; - inc_rename = false; - lsp_doc_border = true; - }; - }; - - treesitter = { - enable = true; - indent = true; - folding = true; - grammarPackages = - pkgs.vimPlugins.nvim-treesitter.allGrammars - ++ (with pkgs.tree-sitter-grammars; [ - tree-sitter-just - tree-sitter-nu - tree-sitter-norg-meta - ]); - }; - - telescope = { - enable = true; - extensions = { - undo.enable = true; - ui-select.enable = true; - fzf-native.enable = true; - file_browser.enable = true; - }; - }; - - fidget = { - enable = true; - notification.overrideVimNotify = true; - }; - - dap = { - enable = true; - extensions = { - dap-ui.enable = true; - dap-virtual-text.enable = true; - }; - }; - - nvim-ufo = { - enable = true; - closeFoldKinds = null; - # providerSelector = - # /* - # lua - # */ - # '' - # function(bufnr, filetype, buftype) - # return {'treesitter', 'indent'} - # end - # ''; - }; - rustaceanvim = { - enable = true; - server = { - onAttach = - /* - lua - */ - '' - function(client, bufnr) - if client.server_capabilities.inlayHintProvider then - vim.lsp.inlay_hint.enable(bufnr, true) - end - end - ''; - settings = - /* - lua - */ - '' - function(project_root) - local ra = require('rustaceanvim.config.server') - return ra.load_rust_analyzer_settings(project_root, { - settings_file_pattern = 'rust-analyzer.json' - }) - end - ''; - }; - dap = { - autoloadConfigurations = false; - }; - }; - - lsp = { - enable = true; - servers = { - gopls.enable = true; - nil_ls = { - enable = true; - settings.formatting.command = [ - "${pkgs.alejandra}/bin/alejandra" - # "${pkgs.nixfmt}/bin/nixfmt" - # "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt" - ]; - # nix.flake.autoArchive = true; - }; - marksman.enable = true; - nushell.enable = true; - clangd.enable = true; - lua-ls.enable = true; - jsonls.enable = true; - html.enable = true; - pylyzer.enable = true; - # rust-analyzer.enable = true; - }; - onAttach = - /* - lua - */ - '' - if client.server_capabilities.inlayHintProvider then - vim.lsp.inlay_hint.enable(bufnr, true) - end - ''; - }; - cmp = { - enable = true; - settings = { - autoEnableSources = true; - sources = [ - {name = "buffer";} - {name = "buffer";} - {name = "cmdline";} - {name = "cmp-clippy";} - {name = "cmp-cmdline-history";} - {name = "crates";} - {name = "dap";} - {name = "dictionary";} - {name = "fish";} - {name = "git";} - {name = "luasnip";} - {name = "nvim_lsp";} - {name = "nvim_lua";} - {name = "nvim_lsp_signature_help";} - {name = "nvim_lsp_document_symbol";} - {name = "path";} - {name = "rg";} - {name = "spell";} - {name = "tmux";} - {name = "treesitter";} - ]; - view = { - entries = { - name = "custom"; - selection_order = "near_cursor"; - }; - }; - window = { - completion = { - inherit border; - }; - documentation = { - inherit border; - }; - }; - mapping = { - # "" = "cmp.mapping.confirm({select = true})"; - "" = "cmp.mapping.confirm()"; - "" = "cmp.mapping.complete()"; - "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; - "" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; - }; - snippet.expand = - /* - lua - */ - '' - function(args) - require('luasnip').lsp_expand(args.body) - end - ''; - }; - }; - }; - globals = { - mapleader = " "; - }; - colorschemes = { - catppuccin = { - enable = true; - flavour = "mocha"; - }; - }; - keymaps = mkMappings { - normal = { - "" = "[[Outline]]"; - "\"" = "[[split]]"; - "%" = "[[vsplit]]"; - "gh" = "[[Octo actions]]"; - "\"" = ''[["+]]''; - "c" = "[[ChatGPT]]"; - "dr" = "[[RustLsp debuggables]]"; - # "ee" = "[[Rest run]]"; - "ee" = "[[RestNvim]]"; - "el" = "[[Rest run last]]"; - "hh" = "[[DevdocsOpenFloat]]"; - "hl" = "[[DevdocsToggle]]"; - "" = "''"; - "n" = "[[bnext]]"; - "o" = "[[TroubleToggle]]"; - "p" = "[[bprev]]"; - "q" = "[[bw]]"; - "nn" = "[[Neorg]]"; - "vff" = "[[vertical Gdiffsplit]]"; - - "" = "vim.lsp.buf.definition"; - "" = "require('FTerm').toggle"; - "F" = "function() vim.lsp.buf.format({ async = true }) end"; - "gi" = "require'telescope.builtin'.lsp_implementations"; - "a" = "vim.lsp.buf.code_action"; - "bb" = "require'dap'.toggle_breakpoint"; - "du" = "require'dapui'.toggle"; - "fb" = "require'telescope'.extensions.file_browser.file_browser"; - "ff" = "require'telescope.builtin'.find_files"; - "gg" = "require'telescope.builtin'.live_grep"; - ";" = "require'telescope.builtin'.buffers"; - }; - terminal = { - "" = "require('FTerm').toggle"; - }; - insert = { - "" = "require('FTerm').toggle"; - }; - visual = { - "L" = "[[:'<,'>!sort -u]]"; - }; - }; - - autoCmd = [ - { - event = ["BufEnter" "BufWinEnter"]; - pattern = "*.norg"; - command = "set conceallevel=3"; - } - { - event = ["BufWinLeave"]; - pattern = "?*"; - command = "mkview!"; - } - { - event = ["BufWinEnter"]; - pattern = "?*"; - command = "silent! loadview!"; - } - ]; - - extraConfigLua = let - codelldb = - if device.isLinux - then pkgs.vscode-extensions.vadimcn.vscode-lldb.adapter - else null; - liblldb = - if device.isLinux - then "${codelldb}/lldb/lib/liblldb.so" - # else if device.isMac then - # "${codelldb}/lldb/lib/liblldb.dylib" - else null; - in - /* - lua - */ - '' - function catcher(callback) - do - success, output = pcall(callback) - if not success then - print("Failed to setup: " .. output) - end - end - end - - do - function setup() - require'neotest'.setup({ - adapters = { - require('rustaceanvim.neotest'), - } - }) - end - success, output = pcall(setup) - if not success then - print("Failed to setup neotest: " .. output) - end - end - - catcher(require('rest-nvim').setup) - - - -- require('telescope').load_extension("dap") - -- require('telescope').load_extension("rest") - require('telescope').load_extension("neorg") - - require("copilot").setup({ - suggestion = { - enabled = true, - auto_trigger = true, - keymap = { - accept = "", - } - }, - panel = { enabled = true }, - }) - - catcher(require('crates').setup) - catcher(require('outline').setup) - - require('FTerm').setup({ - border = 'single', - dimensions = { - height = 0.99, - width = 0.95, - }, - cmd = "${pkgs.fish}/bin/fish", - blend = 10, - }) - - require('neorg').setup({ - load = { - ["core.defaults"] = {}, - ["core.completion"] = { config = { engine = "nvim-cmp", name = "[Norg]" } }, - ["core.concealer"] = { - config = { icon_preset = "diamond" } - }, - ["core.keybinds"] = { - -- https://github.com/nvim-neorg/neorg/blob/main/lua/neorg/modules/core/keybinds/keybinds.lua - config = { - default_keybinds = true, - neorg_leader = "n", - }, - }, - ["core.dirman"] = { - config = { - default_workspace = "Notes", - workspaces = { - Notes = "~/Nextcloud/Notes", - Work = "~/Nextcloud/Work", - } - } - } - } - }) - - require('chatgpt').setup({ - api_key_cmd = "rbw get platform.openai.com", - }) - - require('octo').setup({ - use_local_fs = false, - enable_builtin = false, - default_remote = {"upstream", "origin"}; - default_merge_method = "squash"; - }) - - local rr_dap = require('nvim-dap-rr') - rr_dap.setup({ - mappings = { - continue = "" - }, - }) - - local dap = require'dap'; - dap.configurations.rust = { rr_dap.get_rust_config() } - dap.configurations.cpp = { rr_dap.get_config() } - - if not vim.g.neovide then - require('neoscroll').setup() - else - vim.o.guifont = "Hasklug Nerd Font Mono:h13" - end - - - -- do - -- function setup() - -- local capabilities = vim.lsp.protocol.make_client_capabilities() - -- capabilities.textDocument.foldingRange = { - -- dynamicRegistration = false, - -- lineFoldingOnly = true - -- } - -- -- local language_servers = require("lspconfig").util.available_servers() -- or list servers manually like {'gopls', 'clangd'} - -- local language_servers = {"nil_ls"}; - -- for _, ls in ipairs(language_servers) do - -- require('lspconfig')[ls].setup({ - -- capabilities = capabilities - -- -- you can add other fields for setting up lsp server in this table - -- }) - -- end - -- end - -- success, output = pcall(setup) - -- if not success then - -- print("Failed to setup lspconfig folds: " .. output) - -- end - -- end - require('lspconfig.ui.windows').default_options.border = 'single' - - catcher(require('nvim_context_vt').setup) - catcher(function() - require('nvim-devdocs').setup({ - ensure_installed = {"nix", "rust"}, - float_win = { - relative = "editor", - height = 80, - width = 100, - border = "rounded", - }, - after_open = function() - vim.o.conceallevel = 3 - end, - }) - end) - vim.g.rustaceanvim.tools = { enable_clippy = false }; - ''; - package = pkgs.neovim-nightly; - options = { - shell = "sh"; - number = true; - relativenumber = true; - tabstop = 4; - softtabstop = 4; - shiftwidth = 4; - expandtab = true; - hidden = true; - smartcase = true; - termguicolors = true; - signcolumn = "yes"; - wrap = true; - completeopt = "menu,menuone,popup,noselect"; - undodir = "${config.xdg.cacheHome}/undodir"; - undofile = true; - viewoptions = "cursor,folds"; - concealcursor = "n"; - foldlevelstart = 99; - }; - extraPlugins = with pkgs.vimPlugins; [ - # neorg - neorg - neorg-telescope - - # Wut - ChatGPT-nvim - - # UI and UX - vim-abolish - octo-nvim - neoscroll-nvim - - # Debuggging - nvim-dap-rr - - # Treesitter stuff - outline-nvim - - # lsp stuff - copilot-lua - crates-nvim - luasnip - - # No more postman - rest-nvim - - # UI - nvim-web-devicons - - # Utils - FTerm-nvim - plenary-nvim - vim-speeddating - - # Testing - neotest - - # Helper libs - webapi-vim - - # Treesitter - nvim_context_vt - nvim-devdocs - - pkgs.tree-sitter-grammars.tree-sitter-just - pkgs.tree-sitter-grammars.tree-sitter-nu - ]; - }; + programs.nixvim = pkgs.sneovim.config // {enable = true;}; } diff --git a/common/tmux.nix b/common/tmux.nix index 4e941743..d0e8ce56 100644 --- a/common/tmux.nix +++ b/common/tmux.nix @@ -48,6 +48,7 @@ in { set -gw mode-keys vi set -g status-keys vi set -g allow-passthrough on + set -g visual-activity off set -ga update-environment TERM set -ga update-environment TERM_PROGRAM set -sg escape-time 10 diff --git a/flake.lock b/flake.lock index 13f0edcb..4b582418 100644 --- a/flake.lock +++ b/flake.lock @@ -199,7 +199,30 @@ }, "devshell": { "inputs": { - "flake-utils": "flake-utils_9", + "flake-utils": "flake-utils_8", + "nixpkgs": [ + "neovim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711099426, + "narHash": "sha256-HzpgM/wc3aqpnHJJ2oDqPBkNsqWbW0WfWUO8lKu8nGk=", + "owner": "numtide", + "repo": "devshell", + "rev": "2d45b54ca4a183f2fdcf4b19c895b64fbf620ee8", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_2": { + "inputs": { + "flake-utils": "flake-utils_12", "nixpkgs": [ "nixvim", "nixpkgs" @@ -276,6 +299,20 @@ } }, "flake-compat_3": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_4": { "flake": false, "locked": { "lastModified": 1696426674, @@ -291,7 +328,39 @@ "type": "github" } }, - "flake-compat_4": { + "flake-compat_5": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_6": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_7": { "locked": { "lastModified": 1696426674, "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", @@ -305,7 +374,7 @@ "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" } }, - "flake-compat_5": { + "flake-compat_8": { "flake": false, "locked": { "lastModified": 1696426674, @@ -384,7 +453,8 @@ "flake-parts_4": { "inputs": { "nixpkgs-lib": [ - "neovim-nightly-overlay", + "neovim", + "nixvim", "nixpkgs" ] }, @@ -403,6 +473,71 @@ } }, "flake-parts_5": { + "inputs": { + "nixpkgs-lib": [ + "neovim", + "nnn", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_6": { + "inputs": { + "nixpkgs-lib": [ + "neovim", + "nnn", + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_7": { + "inputs": { + "nixpkgs-lib": [ + "neovim-nightly-overlay", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_8": { "inputs": { "nixpkgs-lib": [ "neovim-nightly-overlay", @@ -423,7 +558,7 @@ "type": "indirect" } }, - "flake-parts_6": { + "flake-parts_9": { "inputs": { "nixpkgs-lib": [ "nixvim", @@ -466,6 +601,60 @@ "inputs": { "systems": "systems_11" }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_11": { + "inputs": { + "systems": "systems_13" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_12": { + "inputs": { + "systems": "systems_14" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_13": { + "inputs": { + "systems": "systems_15" + }, "locked": { "lastModified": 1710146030, "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", @@ -480,9 +669,9 @@ "type": "github" } }, - "flake-utils_11": { + "flake-utils_14": { "inputs": { - "systems": "systems_12" + "systems": "systems_16" }, "locked": { "lastModified": 1705309234, @@ -498,9 +687,9 @@ "type": "github" } }, - "flake-utils_12": { + "flake-utils_15": { "inputs": { - "systems": "systems_13" + "systems": "systems_17" }, "locked": { "lastModified": 1710146030, @@ -516,9 +705,9 @@ "type": "github" } }, - "flake-utils_13": { + "flake-utils_16": { "inputs": { - "systems": "systems_14" + "systems": "systems_18" }, "locked": { "lastModified": 1709126324, @@ -664,11 +853,11 @@ "systems": "systems_10" }, "locked": { - "lastModified": 1701680307, - "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -700,6 +889,29 @@ } }, "gitignore_2": { + "inputs": { + "nixpkgs": [ + "neovim", + "nixvim", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_3": { "inputs": { "nixpkgs": [ "nixvim", @@ -723,7 +935,30 @@ }, "hercules-ci-effects": { "inputs": { - "flake-parts": "flake-parts_5", + "flake-parts": "flake-parts_6", + "nixpkgs": [ + "neovim", + "nnn", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1710478346, + "narHash": "sha256-Xjf8BdnQG0tLhPMlqQdwCIjOp7Teox0DP3N/jjyiGM4=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "64e7763d72c1e4c1e5e6472640615b6ae2d40fbf", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_2": { + "inputs": { + "flake-parts": "flake-parts_8", "nixpkgs": [ "neovim-nightly-overlay", "nixpkgs" @@ -766,16 +1001,38 @@ "home-manager_2": { "inputs": { "nixpkgs": [ + "neovim", "nixvim", "nixpkgs" ] }, "locked": { - "lastModified": 1711133180, - "narHash": "sha256-WJOahf+6115+GMl3wUfURu8fszuNeJLv9qAWFQl3Vmo=", + "lastModified": 1711604890, + "narHash": "sha256-vbI/gxRTq/gHW1Q8z6D/7JG/qGNl3JTimUDX+MwnC3A=", "owner": "nix-community", "repo": "home-manager", - "rev": "1c2c5e4cabba4c43504ef0f8cc3f3dfa284e2dbb", + "rev": "3142bdcc470e1e291e1fbe942fd69e06bd00c5df", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_3": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711604890, + "narHash": "sha256-vbI/gxRTq/gHW1Q8z6D/7JG/qGNl3JTimUDX+MwnC3A=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "3142bdcc470e1e291e1fbe942fd69e06bd00c5df", "type": "github" }, "original": { @@ -918,9 +1175,55 @@ "type": "github" } }, + "neovim": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "nixvim": "nixvim", + "nnn": "nnn", + "nvim-devdocs": "nvim-devdocs", + "systems": "systems_12" + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-H6RUC5dnGvIy2vi5Fi9w/k9nPolNKzpZGIg4iod+XUI=", + "path": "./neovim", + "type": "path" + }, + "original": { + "path": "./neovim", + "type": "path" + } + }, "neovim-flake": { "inputs": { - "flake-utils": "flake-utils_8", + "flake-utils": "flake-utils_10", + "nixpkgs": [ + "neovim", + "nnn", + "nixpkgs" + ] + }, + "locked": { + "dir": "contrib", + "lastModified": 1711669189, + "narHash": "sha256-VVRFhOKS/MmhV2u6av2e9Qzg4WE24vEmrW/JKed6tlo=", + "owner": "neovim", + "repo": "neovim", + "rev": "e2224a7933b6e30ab6efb0b7ad4e3f26da57c226", + "type": "github" + }, + "original": { + "dir": "contrib", + "owner": "neovim", + "repo": "neovim", + "type": "github" + } + }, + "neovim-flake_2": { + "inputs": { + "flake-utils": "flake-utils_11", "nixpkgs": [ "neovim-nightly-overlay", "nixpkgs" @@ -944,10 +1247,10 @@ }, "neovim-nightly-overlay": { "inputs": { - "flake-compat": "flake-compat_3", - "flake-parts": "flake-parts_4", - "hercules-ci-effects": "hercules-ci-effects", - "neovim-flake": "neovim-flake", + "flake-compat": "flake-compat_6", + "flake-parts": "flake-parts_7", + "hercules-ci-effects": "hercules-ci-effects_2", + "neovim-flake": "neovim-flake_2", "nixpkgs": [ "nixpkgs" ] @@ -967,6 +1270,28 @@ } }, "nix-darwin": { + "inputs": { + "nixpkgs": [ + "neovim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711591334, + "narHash": "sha256-9d5ilxxq4CXw44eFw8VFrRneAKex7D8xjn95mwZjgf4=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "f0dd0838c3558b59dc3b726d8ab89f5b5e35c297", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, + "nix-darwin_2": { "inputs": { "nixpkgs": [ "nixpkgs" @@ -986,7 +1311,7 @@ "type": "github" } }, - "nix-darwin_2": { + "nix-darwin_3": { "inputs": { "nixpkgs": [ "nixvim", @@ -994,11 +1319,11 @@ ] }, "locked": { - "lastModified": 1710717205, - "narHash": "sha256-Wf3gHh5uV6W1TV/A8X8QJf99a5ypDSugY4sNtdJDe0A=", + "lastModified": 1711591334, + "narHash": "sha256-9d5ilxxq4CXw44eFw8VFrRneAKex7D8xjn95mwZjgf4=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "bcc8afd06e237df060c85bad6af7128e05fd61a3", + "rev": "f0dd0838c3558b59dc3b726d8ab89f5b5e35c297", "type": "github" }, "original": { @@ -1138,11 +1463,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1711163522, - "narHash": "sha256-YN/Ciidm+A0fmJPWlHBGvVkcarYWSC+s3NTPk/P+q3c=", + "lastModified": 1711523803, + "narHash": "sha256-UKcYiHWHQynzj6CN/vTcix4yd1eCu1uFdsuarupdCQQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "44d0940ea560dee511026a53f0e2e2cde489b4d4", + "rev": "2726f127c15a4cc9810843b96cad73c7eb39e443", "type": "github" }, "original": { @@ -1155,21 +1480,22 @@ "nixvim": { "inputs": { "devshell": "devshell", - "flake-compat": "flake-compat_4", - "flake-parts": "flake-parts_6", + "flake-compat": "flake-compat_3", + "flake-parts": "flake-parts_4", "home-manager": "home-manager_2", - "nix-darwin": "nix-darwin_2", + "nix-darwin": "nix-darwin", "nixpkgs": [ + "neovim", "nixpkgs" ], "pre-commit-hooks": "pre-commit-hooks" }, "locked": { - "lastModified": 1711284540, - "narHash": "sha256-DTzi4ujZoxM3ZXStCwD6Lph3FdGtkBlvfYsDCRITjfA=", + "lastModified": 1711630555, + "narHash": "sha256-jslStwDlRwVZLwcFkExWegOGYv/Dn9q7yoocUX7AsIg=", "owner": "nix-community", "repo": "nixvim", - "rev": "e7a3461fefd983ae3443e9aa849e9d1566ab47e4", + "rev": "acb917fbf2bc9ce9c556516d8a1f257709b3cf1e", "type": "github" }, "original": { @@ -1178,6 +1504,57 @@ "type": "github" } }, + "nixvim_2": { + "inputs": { + "devshell": "devshell_2", + "flake-compat": "flake-compat_7", + "flake-parts": "flake-parts_9", + "home-manager": "home-manager_3", + "nix-darwin": "nix-darwin_3", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks_2" + }, + "locked": { + "lastModified": 1711630555, + "narHash": "sha256-jslStwDlRwVZLwcFkExWegOGYv/Dn9q7yoocUX7AsIg=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "acb917fbf2bc9ce9c556516d8a1f257709b3cf1e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, + "nnn": { + "inputs": { + "flake-compat": "flake-compat_5", + "flake-parts": "flake-parts_5", + "hercules-ci-effects": "hercules-ci-effects", + "neovim-flake": "neovim-flake", + "nixpkgs": [ + "neovim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711670984, + "narHash": "sha256-orA2u5/LqpdPCvYUZnQStarJjjRMylTDYS8JKf97ZfU=", + "owner": "nix-community", + "repo": "neovim-nightly-overlay", + "rev": "6a5e80c188d3f3763a624df1610294b4a11764a0", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "neovim-nightly-overlay", + "type": "github" + } + }, "nur": { "locked": { "lastModified": 1711290879, @@ -1209,26 +1586,44 @@ "type": "github" } }, + "nvim-devdocs_2": { + "flake": false, + "locked": { + "lastModified": 1703234230, + "narHash": "sha256-qqtBNfBBGyxMsHL3UXu+MF/UyfVAubG+6fnwLK9kY9Q=", + "owner": "luckasRanarison", + "repo": "nvim-devdocs", + "rev": "521d24661ffe6d1ba025debea2675c765a9c1ee1", + "type": "github" + }, + "original": { + "owner": "luckasRanarison", + "repo": "nvim-devdocs", + "type": "github" + } + }, "pre-commit-hooks": { "inputs": { - "flake-compat": "flake-compat_5", - "flake-utils": "flake-utils_10", + "flake-compat": "flake-compat_4", + "flake-utils": "flake-utils_9", "gitignore": "gitignore_2", "nixpkgs": [ + "neovim", "nixvim", "nixpkgs" ], "nixpkgs-stable": [ + "neovim", "nixvim", "nixpkgs" ] }, "locked": { - "lastModified": 1710923068, - "narHash": "sha256-6hOpUiuxuwpXXc/xfJsBUJeqqgGI+JMJuLo45aG3cKc=", + "lastModified": 1711519547, + "narHash": "sha256-Q7YmSCUJmDl71fJv/zD9lrOCJ1/SE/okZ2DsrmRjzhY=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "e611897ddfdde3ed3eaac4758635d7177ff78673", + "rev": "7d47a32e5cd1ea481fab33c516356ce27c8cef4a", "type": "github" }, "original": { @@ -1268,6 +1663,34 @@ "type": "github" } }, + "pre-commit-hooks_2": { + "inputs": { + "flake-compat": "flake-compat_8", + "flake-utils": "flake-utils_13", + "gitignore": "gitignore_3", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711519547, + "narHash": "sha256-Q7YmSCUJmDl71fJv/zD9lrOCJ1/SE/okZ2DsrmRjzhY=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "7d47a32e5cd1ea481fab33c516356ce27c8cef4a", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { "anyrun": "anyrun", @@ -1280,12 +1703,13 @@ "ironbar": "ironbar", "lanzaboote": "lanzaboote", "music-player": "music-player", + "neovim": "neovim", "neovim-nightly-overlay": "neovim-nightly-overlay", - "nix-darwin": "nix-darwin", + "nix-darwin": "nix-darwin_2", "nix-index-database": "nix-index-database", "nixpkgs": "nixpkgs_5", "nixpkgs-main": "nixpkgs-main", - "nixvim": "nixvim", + "nixvim": "nixvim_2", "nur": "nur", "rust-overlay": "rust-overlay_6", "subflakes": "subflakes", @@ -1406,7 +1830,7 @@ }, "rust-overlay_6": { "inputs": { - "flake-utils": "flake-utils_11", + "flake-utils": "flake-utils_14", "nixpkgs": [ "nixpkgs" ] @@ -1452,11 +1876,11 @@ }, "subflakes": { "inputs": { - "flake-utils": "flake-utils_12", + "flake-utils": "flake-utils_15", "nixpkgs": [ "nixpkgs" ], - "nvim-devdocs": "nvim-devdocs" + "nvim-devdocs": "nvim-devdocs_2" }, "locked": { "lastModified": 1, @@ -1559,6 +1983,66 @@ "type": "github" } }, + "systems_15": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_16": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_17": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_18": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "systems_2": { "locked": { "lastModified": 1681028828, @@ -1682,7 +2166,7 @@ "zjstatus": { "inputs": { "crane": "crane_4", - "flake-utils": "flake-utils_13", + "flake-utils": "flake-utils_16", "nixpkgs": [ "nixpkgs" ], diff --git a/flake.nix b/flake.nix index 070a7b8e..580d8a23 100644 --- a/flake.nix +++ b/flake.nix @@ -69,6 +69,11 @@ url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; + + neovim = { + url = "path:./neovim"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = { @@ -158,5 +163,7 @@ import ./linux/device.nix { inherit devices inputs nixpkgs home-manager overlays; }; + + packages = inputs.neovim.packages; }; } diff --git a/justfile b/justfile index f3dde35a..5c152940 100644 --- a/justfile +++ b/justfile @@ -1,7 +1,6 @@ set dotenv-load # clean := `git diff-index --quiet --cached HEAD --` - [macos] install: local nix run nix-darwin -- switch --flake . @@ -19,3 +18,7 @@ home: local: nix flake lock --update-input subflakes + nix flake lock --update-input neovim + +nvim: + nix run .#neovim diff --git a/neovim/flake.lock b/neovim/flake.lock new file mode 100644 index 00000000..4f55ccc7 --- /dev/null +++ b/neovim/flake.lock @@ -0,0 +1,480 @@ +{ + "nodes": { + "devshell": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711099426, + "narHash": "sha256-HzpgM/wc3aqpnHJJ2oDqPBkNsqWbW0WfWUO8lKu8nGk=", + "owner": "numtide", + "repo": "devshell", + "rev": "2d45b54ca4a183f2fdcf4b19c895b64fbf620ee8", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "flake-compat": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "nnn", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "nnn", + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "inputs": { + "systems": "systems_3" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "nixvim", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "hercules-ci-effects": { + "inputs": { + "flake-parts": "flake-parts_3", + "nixpkgs": [ + "nnn", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1710478346, + "narHash": "sha256-Xjf8BdnQG0tLhPMlqQdwCIjOp7Teox0DP3N/jjyiGM4=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "64e7763d72c1e4c1e5e6472640615b6ae2d40fbf", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711604890, + "narHash": "sha256-vbI/gxRTq/gHW1Q8z6D/7JG/qGNl3JTimUDX+MwnC3A=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "3142bdcc470e1e291e1fbe942fd69e06bd00c5df", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "neovim-flake": { + "inputs": { + "flake-utils": "flake-utils_3", + "nixpkgs": [ + "nnn", + "nixpkgs" + ] + }, + "locked": { + "dir": "contrib", + "lastModified": 1711669189, + "narHash": "sha256-VVRFhOKS/MmhV2u6av2e9Qzg4WE24vEmrW/JKed6tlo=", + "owner": "neovim", + "repo": "neovim", + "rev": "e2224a7933b6e30ab6efb0b7ad4e3f26da57c226", + "type": "github" + }, + "original": { + "dir": "contrib", + "owner": "neovim", + "repo": "neovim", + "type": "github" + } + }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711591334, + "narHash": "sha256-9d5ilxxq4CXw44eFw8VFrRneAKex7D8xjn95mwZjgf4=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "f0dd0838c3558b59dc3b726d8ab89f5b5e35c297", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1711523803, + "narHash": "sha256-UKcYiHWHQynzj6CN/vTcix4yd1eCu1uFdsuarupdCQQ=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "2726f127c15a4cc9810843b96cad73c7eb39e443", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixvim": { + "inputs": { + "devshell": "devshell", + "flake-compat": "flake-compat", + "flake-parts": "flake-parts", + "home-manager": "home-manager", + "nix-darwin": "nix-darwin", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks" + }, + "locked": { + "lastModified": 1711630555, + "narHash": "sha256-jslStwDlRwVZLwcFkExWegOGYv/Dn9q7yoocUX7AsIg=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "acb917fbf2bc9ce9c556516d8a1f257709b3cf1e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, + "nnn": { + "inputs": { + "flake-compat": "flake-compat_3", + "flake-parts": "flake-parts_2", + "hercules-ci-effects": "hercules-ci-effects", + "neovim-flake": "neovim-flake", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711670984, + "narHash": "sha256-orA2u5/LqpdPCvYUZnQStarJjjRMylTDYS8JKf97ZfU=", + "owner": "nix-community", + "repo": "neovim-nightly-overlay", + "rev": "6a5e80c188d3f3763a624df1610294b4a11764a0", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "neovim-nightly-overlay", + "type": "github" + } + }, + "nvim-devdocs": { + "flake": false, + "locked": { + "lastModified": 1703234230, + "narHash": "sha256-qqtBNfBBGyxMsHL3UXu+MF/UyfVAubG+6fnwLK9kY9Q=", + "owner": "luckasRanarison", + "repo": "nvim-devdocs", + "rev": "521d24661ffe6d1ba025debea2675c765a9c1ee1", + "type": "github" + }, + "original": { + "owner": "luckasRanarison", + "repo": "nvim-devdocs", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils_2", + "gitignore": "gitignore", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711519547, + "narHash": "sha256-Q7YmSCUJmDl71fJv/zD9lrOCJ1/SE/okZ2DsrmRjzhY=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "7d47a32e5cd1ea481fab33c516356ce27c8cef4a", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "nixvim": "nixvim", + "nnn": "nnn", + "nvim-devdocs": "nvim-devdocs", + "systems": "systems_4" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "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" + } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/neovim/flake.nix b/neovim/flake.nix new file mode 100644 index 00000000..9baf7d0e --- /dev/null +++ b/neovim/flake.nix @@ -0,0 +1,47 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + systems.url = "github:nix-systems/default"; + nixvim = { + url = "github:nix-community/nixvim"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nnn = { + url = "github:nix-community/neovim-nightly-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nvim-devdocs.url = "github:luckasRanarison/nvim-devdocs"; + nvim-devdocs.flake = false; + }; + + outputs = { + self, + nixpkgs, + systems, + nixvim, + nnn, + ... + } @ inputs: let + forEachSystem = nixpkgs.lib.genAttrs (import systems); + nvim = forEachSystem (system: + import ./nvim.nix { + pkgs = import nixpkgs { + inherit system; + overlays = import ./overlays.nix { + inherit inputs; + }; + }; + }); + in rec { + packages = forEachSystem (system: rec { + neovim = nvim.${system}.neovim; + default = neovim; + }); + overlays = { + default = prev: final: { + sneovim = packages.${final.system}.neovim; + }; + }; + }; +} diff --git a/neovim/nvim.nix b/neovim/nvim.nix new file mode 100644 index 00000000..66054591 --- /dev/null +++ b/neovim/nvim.nix @@ -0,0 +1,590 @@ +{pkgs, ...}: let + mkMappings = mappings: + [] + ++ (pkgs.lib.optionals (builtins.hasAttr "normal" mappings) (mkMode mappings.normal "n")) + ++ (pkgs.lib.optionals (builtins.hasAttr "terminal" mappings) (mkMode mappings.terminal "t")) + ++ (pkgs.lib.optionals (builtins.hasAttr "insert" mappings) (mkMode mappings.insert "i")) + ++ (pkgs.lib.optionals (builtins.hasAttr "visual" mappings) (mkMode mappings.visual "v")) + ++ (pkgs.lib.optionals (builtins.hasAttr "global" mappings) (mkMode mappings.global "")); + mkMode = mappings: mode: + pkgs.lib.mapAttrsToList + (key: value: { + key = key; + action = value; + mode = mode; + lua = true; + }) + mappings; + border = ["╭" "─" "╮" "│" "╯" "─" "╰" "│"]; + rawLua = lua: { + "__raw" = '' + ${lua} + ''; + }; +in rec { + neovim = (pkgs.nixvim.makeNixvim config) // {config = config;}; + config = { + plugins = { + fugitive.enable = true; + oil.enable = true; + surround.enable = true; + todo-comments.enable = true; + trouble.enable = true; + ts-context-commentstring.enable = true; + which-key.enable = true; + + navic = { + enable = true; + lsp.autoAttach = true; + }; + + image = { + enable = true; + backend = "kitty"; + tmuxShowOnlyInActiveWindow = true; + }; + + mini = { + enable = true; + modules = { + ai = {}; + starter = {}; + }; + }; + + lualine = { + enable = true; + sections = { + lualine_c = [ + { + name = + rawLua + /* + lua + */ + '' + function(bufnr) + local opts = { highlight = true } + return require'nvim-navic'.get_location(opts) + end, + cond = function() + return require'nvim-navic'.is_available() + end + ''; + } + ]; + }; + }; + + comment = { + enable = true; + settings.pre_hook = '' + require('ts_context_commentstring.integrations.comment_nvim').create_pre_hook() + ''; + }; + + markdown-preview = { + enable = true; + settings.auto_start = false; + }; + + noice = { + enable = true; + notify.enabled = false; + lsp.override = { + "vim.lsp.util.convert_input_to_markdown_lines" = true; + "vim.lsp.util.stylize_markdown" = true; + "cmp.entry.get_documentation" = true; + }; + presets = { + bottom_search = false; + command_palette = true; + long_message_to_split = true; + inc_rename = false; + lsp_doc_border = true; + }; + }; + + treesitter = { + enable = true; + indent = true; + folding = true; + grammarPackages = + pkgs.vimPlugins.nvim-treesitter.allGrammars + ++ (with pkgs.tree-sitter-grammars; [ + tree-sitter-just + tree-sitter-nu + tree-sitter-norg-meta + ]); + }; + + telescope = { + enable = true; + extensions = { + undo.enable = true; + ui-select.enable = true; + fzf-native.enable = true; + file_browser.enable = true; + }; + }; + + fidget = { + enable = true; + notification.overrideVimNotify = true; + }; + + dap = { + enable = true; + extensions = { + dap-ui.enable = true; + dap-virtual-text.enable = true; + }; + }; + + nvim-ufo = { + enable = true; + closeFoldKinds = null; + # providerSelector = + # /* + # lua + # */ + # '' + # function(bufnr, filetype, buftype) + # return {'treesitter', 'indent'} + # end + # ''; + }; + rustaceanvim = { + enable = true; + server = { + onAttach = + /* + lua + */ + '' + function(client, bufnr) + if client.server_capabilities.inlayHintProvider then + vim.lsp.inlay_hint.enable(bufnr, true) + end + end + ''; + settings = + /* + lua + */ + '' + function(project_root) + local ra = require('rustaceanvim.config.server') + return ra.load_rust_analyzer_settings(project_root, { + settings_file_pattern = 'rust-analyzer.json' + }) + end + ''; + }; + dap = { + autoloadConfigurations = false; + }; + }; + + lsp = { + enable = true; + servers = { + gopls.enable = true; + nil_ls = { + enable = true; + settings.formatting.command = [ + "${pkgs.alejandra}/bin/alejandra" + # "${pkgs.nixfmt}/bin/nixfmt" + # "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt" + ]; + # nix.flake.autoArchive = true; + }; + marksman.enable = true; + nushell.enable = true; + clangd.enable = true; + lua-ls.enable = true; + jsonls.enable = true; + html.enable = true; + # pylyzer.enable = true; + # rust-analyzer.enable = true; + }; + onAttach = + /* + lua + */ + '' + if client.server_capabilities.inlayHintProvider then + vim.lsp.inlay_hint.enable(bufnr, true) + end + ''; + }; + cmp = { + enable = true; + settings = { + autoEnableSources = true; + sources = [ + {name = "buffer";} + {name = "buffer";} + {name = "cmdline";} + {name = "cmp-clippy";} + {name = "cmp-cmdline-history";} + {name = "crates";} + {name = "dap";} + {name = "dictionary";} + {name = "fish";} + {name = "git";} + {name = "luasnip";} + {name = "nvim_lsp";} + {name = "nvim_lua";} + {name = "nvim_lsp_signature_help";} + {name = "nvim_lsp_document_symbol";} + {name = "path";} + {name = "rg";} + {name = "spell";} + {name = "tmux";} + {name = "treesitter";} + ]; + view = { + entries = { + name = "custom"; + selection_order = "near_cursor"; + }; + }; + window = { + completion = { + inherit border; + }; + documentation = { + inherit border; + }; + }; + mapping = { + # "" = "cmp.mapping.confirm({select = true})"; + "" = "cmp.mapping.confirm()"; + "" = "cmp.mapping.complete()"; + "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; + "" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; + }; + snippet.expand = + /* + lua + */ + '' + function(args) + require('luasnip').lsp_expand(args.body) + end + ''; + }; + }; + }; + globals = { + mapleader = " "; + }; + colorschemes = { + catppuccin = { + enable = true; + flavour = "mocha"; + }; + }; + keymaps = mkMappings { + normal = { + "" = "[[Outline]]"; + "\"" = "[[split]]"; + "%" = "[[vsplit]]"; + "gh" = "[[Octo actions]]"; + "\"" = ''[["+]]''; + "c" = "[[ChatGPT]]"; + "dr" = "[[RustLsp debuggables]]"; + # "ee" = "[[Rest run]]"; + "ee" = "[[RestNvim]]"; + "el" = "[[Rest run last]]"; + "hh" = "[[DevdocsOpenFloat]]"; + "hl" = "[[DevdocsToggle]]"; + "" = "''"; + "n" = "[[bnext]]"; + "o" = "[[TroubleToggle]]"; + "p" = "[[bprev]]"; + "q" = "[[bw]]"; + "nn" = "[[Neorg]]"; + "vff" = "[[vertical Gdiffsplit]]"; + + "" = "vim.lsp.buf.definition"; + "" = "require('FTerm').toggle"; + "F" = "function() vim.lsp.buf.format({ async = true }) end"; + "gi" = "require'telescope.builtin'.lsp_implementations"; + "a" = "vim.lsp.buf.code_action"; + "bb" = "require'dap'.toggle_breakpoint"; + "du" = "require'dapui'.toggle"; + "fb" = "require'telescope'.extensions.file_browser.file_browser"; + "ff" = "require'telescope.builtin'.find_files"; + "gg" = "require'telescope.builtin'.live_grep"; + ";" = "require'telescope.builtin'.buffers"; + }; + terminal = { + "" = "require('FTerm').toggle"; + }; + insert = { + "" = "require('FTerm').toggle"; + }; + visual = { + "L" = "[[:'<,'>!sort -u]]"; + }; + }; + + autoCmd = [ + { + event = ["BufEnter" "BufWinEnter"]; + pattern = "*.norg"; + command = "set conceallevel=3"; + } + { + event = ["BufWinLeave"]; + pattern = "?*"; + command = "mkview!"; + } + { + event = ["BufWinEnter"]; + pattern = "?*"; + command = "silent! loadview!"; + } + ]; + + extraConfigLua = let + codelldb = + if pkgs.stdenv.isLinux + then pkgs.vscode-extensions.vadimcn.vscode-lldb.adapter + else null; + liblldb = + if pkgs.stdenv.isLinux + then "${codelldb}/lldb/lib/liblldb.so" + # else if device.isMac then + # "${codelldb}/lldb/lib/liblldb.dylib" + else null; + in + /* + lua + */ + '' + function catcher(callback) + do + success, output = pcall(callback) + if not success then + print("Failed to setup: " .. output) + end + end + end + + do + function setup() + require'neotest'.setup({ + adapters = { + require('rustaceanvim.neotest'), + } + }) + end + success, output = pcall(setup) + if not success then + print("Failed to setup neotest: " .. output) + end + end + + catcher(require('rest-nvim').setup) + + + -- require('telescope').load_extension("dap") + -- require('telescope').load_extension("rest") + require('telescope').load_extension("neorg") + + require("copilot").setup({ + suggestion = { + enabled = true, + auto_trigger = true, + keymap = { + accept = "", + } + }, + panel = { enabled = true }, + }) + + catcher(require('crates').setup) + catcher(require('outline').setup) + + require('FTerm').setup({ + border = 'single', + dimensions = { + height = 0.99, + width = 0.95, + }, + cmd = "${pkgs.fish}/bin/fish", + blend = 10, + }) + + require('neorg').setup({ + load = { + ["core.defaults"] = {}, + ["core.completion"] = { config = { engine = "nvim-cmp", name = "[Norg]" } }, + ["core.concealer"] = { + config = { icon_preset = "diamond" } + }, + ["core.integrations.image"] = { + tmux_show_only_in_active_window = true, + }, + ["core.keybinds"] = { + -- https://github.com/nvim-neorg/neorg/blob/main/lua/neorg/modules/core/keybinds/keybinds.lua + config = { + default_keybinds = true, + neorg_leader = "n", + }, + }, + ["core.dirman"] = { + config = { + default_workspace = "Notes", + workspaces = { + Notes = "~/Nextcloud/Notes", + Work = "~/Nextcloud/Work", + } + } + } + } + }) + + require('chatgpt').setup({ + api_key_cmd = "rbw get platform.openai.com", + }) + + require('octo').setup({ + use_local_fs = false, + enable_builtin = false, + default_remote = {"upstream", "origin"}; + default_merge_method = "squash"; + }) + + local rr_dap = require('nvim-dap-rr') + rr_dap.setup({ + mappings = { + continue = "" + }, + }) + + local dap = require'dap'; + dap.configurations.rust = { rr_dap.get_rust_config() } + dap.configurations.cpp = { rr_dap.get_config() } + + if not vim.g.neovide then + require('neoscroll').setup() + else + vim.o.guifont = "Hasklug Nerd Font Mono:h13" + end + + + -- do + -- function setup() + -- local capabilities = vim.lsp.protocol.make_client_capabilities() + -- capabilities.textDocument.foldingRange = { + -- dynamicRegistration = false, + -- lineFoldingOnly = true + -- } + -- -- local language_servers = require("lspconfig").util.available_servers() -- or list servers manually like {'gopls', 'clangd'} + -- local language_servers = {"nil_ls"}; + -- for _, ls in ipairs(language_servers) do + -- require('lspconfig')[ls].setup({ + -- capabilities = capabilities + -- -- you can add other fields for setting up lsp server in this table + -- }) + -- end + -- end + -- success, output = pcall(setup) + -- if not success then + -- print("Failed to setup lspconfig folds: " .. output) + -- end + -- end + require('lspconfig.ui.windows').default_options.border = 'single' + + catcher(require('nvim_context_vt').setup) + catcher(function() + require('nvim-devdocs').setup({ + ensure_installed = {"nix", "rust"}, + float_win = { + relative = "editor", + height = 80, + width = 100, + border = "rounded", + }, + after_open = function() + vim.o.conceallevel = 3 + end, + }) + end) + vim.g.rustaceanvim.tools = { enable_clippy = false }; + ''; + package = pkgs.neovim-nightly; + options = { + shell = "sh"; + number = true; + relativenumber = true; + tabstop = 4; + softtabstop = 4; + shiftwidth = 4; + expandtab = true; + hidden = true; + smartcase = true; + termguicolors = true; + signcolumn = "yes"; + wrap = true; + completeopt = "menu,menuone,popup,noselect"; + # undodir = "${config.xdg.cacheHome}/undodir"; + undofile = true; + viewoptions = "cursor,folds"; + concealcursor = "n"; + foldlevelstart = 99; + }; + extraPlugins = with pkgs.vimPlugins; [ + # neorg + neorg + neorg-telescope + + # Wut + ChatGPT-nvim + + # UI and UX + vim-abolish + octo-nvim + neoscroll-nvim + + # Debuggging + nvim-dap-rr + + # Treesitter stuff + outline-nvim + + # lsp stuff + copilot-lua + crates-nvim + luasnip + + # No more postman + rest-nvim + + # UI + nvim-web-devicons + + # Utils + FTerm-nvim + plenary-nvim + vim-speeddating + + # Testing + neotest + + # Helper libs + webapi-vim + + # Treesitter + nvim_context_vt + nvim-devdocs + + pkgs.tree-sitter-grammars.tree-sitter-just + pkgs.tree-sitter-grammars.tree-sitter-nu + ]; + }; +} diff --git a/neovim/overlays.nix b/neovim/overlays.nix new file mode 100644 index 00000000..ab338b9e --- /dev/null +++ b/neovim/overlays.nix @@ -0,0 +1,113 @@ +{inputs, ...}: let + vimPlugins = final: prev: { + vimPlugins = + prev.vimPlugins + // { + comfortable-motion = final.pkgs.vimUtils.buildVimPlugin { + name = "comfortable-motion"; + # TODO: Move to subflake + src = final.pkgs.fetchFromGitHub { + owner = "yuttie"; + repo = "comfortable-motion.vim"; + rev = "master"; + sha256 = "sha256-S1LJXmShhpCJIg/FEPx3jFbmPpS/1U4MAQN2RY/nkI0"; + }; + }; + nvim-dap-rr = final.pkgs.vimUtils.buildVimPlugin { + name = "nvim-dap-rr"; + # TODO: Move to subflake + src = final.pkgs.fetchFromGitHub { + owner = "jonboh"; + repo = "nvim-dap-rr"; + rev = "master"; + sha256 = "sha256-JNztLTSyHmEmh3xT4WR0cpP25vjZ4A6aQbnU49U6+Ss"; + }; + }; + sqls-nvim = final.pkgs.vimUtils.buildVimPlugin { + name = "sqls-nvim"; + # TODO: Move to subflake + src = final.pkgs.fetchFromGitHub { + owner = "nanotee"; + repo = "sqls.nvim"; + rev = "master"; + sha256 = "sha256-jKFut6NZAf/eIeIkY7/2EsjsIhvZQKCKAJzeQ6XSr0s"; + }; + }; + outline-nvim = final.pkgs.vimUtils.buildVimPlugin { + name = "outline-nvim"; + # TODO: Move to subflake + src = final.pkgs.fetchFromGitHub { + owner = "hedyhli"; + repo = "outline.nvim"; + rev = "master"; + sha256 = "sha256-HaxfnvgFy7fpa2CS7/dQhf6dK9+Js7wP5qGdIeXLGPY"; + }; + }; + nvim-devdocs = final.pkgs.vimUtils.buildVimPlugin { + pname = "nvim-devdocs"; + version = "0.4.1"; + src = inputs.nvim-devdocs; + }; + }; + }; + tree-sitter-grammars = final: prev: { + tree-sitter-grammars = + prev.tree-sitter-grammars + // { + tree-sitter-just = final.pkgs.tree-sitter.buildGrammar { + language = "just"; + version = "1"; + # TODO: Move to subflake + src = final.pkgs.fetchFromGitHub { + owner = "IndianBoy42"; + repo = "tree-sitter-just"; + rev = "613b3fd39183bec94bc741addc5beb6e6f17969f"; + sha256 = "sha256-OBlXwWriE6cdGn0dhpfSMnJ6Rx1Z7KcXehaamdi/TxQ"; + }; + }; + tree-sitter-nu = final.pkgs.tree-sitter.buildGrammar { + language = "nu"; + version = "0.0.1"; + # TODO: Move to subflake + src = final.pkgs.fetchFromGitHub { + owner = "nushell"; + repo = "tree-sitter-nu"; + rev = "c5b7816043992b1cdc1462a889bc74dc08576fa6"; + sha256 = "sha256-P+ixE359fAW7R5UJLwvMsmju7UFmJw5SN+kbMEw7Kz0="; + }; + }; + }; + }; + rest-nvim-overlay = final: prev: let + # TODO: Move to subflake + rest-nvim-src = final.pkgs.fetchFromGitHub { + owner = "rest-nvim"; + repo = "rest.nvim"; + # rev = "64175b161b61b6807b4c6f3f18dd884325cf04e0"; + # Before v2 release + rev = "v1.0.0"; + # sha256 = "sha256-3EC0j/hEbdQ8nJU0I+LGmE/zNnglO/FrP/6POer0338"; + # sha256 = "sha256-3EC0j/hEbdQ8nJU0I+LGmE/zNnglO/FrP/6POer0339"; + sha256 = "sha256-jSY5WXx5tQAD0ZefPbg2luHywGAMcB9wdUTy6Av3xnY"; + }; + in { + vimPlugins = + prev.vimPlugins + // { + rest-nvim = final.vimUtils.buildVimPlugin { + pname = "rest.nvim"; + version = "1.0.0"; + src = rest-nvim-src; + # version = "scm-1"; + # rockspecVersion = "0.2-1"; + # buildInputs = with final.pkgs.lua51Packages; [lua lua-curl mimetypes nvim-nio xml2lua]; + }; + }; + }; +in [ + inputs.nnn.overlay + inputs.nixvim.overlays.default + vimPlugins + tree-sitter-grammars + rest-nvim-overlay +] diff --git a/overlays.nix b/overlays.nix index 8ab47197..3e28a98b 100644 --- a/overlays.nix +++ b/overlays.nix @@ -308,7 +308,9 @@ in [ shell-scipts misc-applications inputs.neovim-nightly-overlay.overlay + inputs.nixvim.overlays.default inputs.nur.overlay + inputs.neovim.overlays.default catppuccin inputs.rust-overlay.overlays.default ] diff --git a/patches/nixneovim.patch b/patches/nixneovim.patch deleted file mode 100644 index ad9eee54..00000000 --- a/patches/nixneovim.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/src/plugins/_lspconfig-modules/servers.nix b/src/plugins/_lspconfig-modules/servers.nix -index f553364..3f235e9 100644 ---- a/src/plugins/_lspconfig-modules/servers.nix -+++ b/src/plugins/_lspconfig-modules/servers.nix -@@ -96,6 +96,9 @@ let - languages = "OCaml"; - packages = [ pkgs.ocamlPackages.ocaml-lsp ]; - }; -+ pylyzer = { -+ languages = "Python"; -+ }; - pyright = { - languages = "Python"; - }; -@@ -119,6 +122,9 @@ let - else - [ python3Packages.ruff-lsp ]; - }; -+ sqls = { -+ languages = "SQL"; -+ }; - taplo = { - languages = "TOML"; - packages = [ taplo ];