{ 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.insert "v")); mkMode = mappings: mode: pkgs.lib.mapAttrsToList (key: value: { key = key; action = value; mode = mode; lua = true; }) mappings; in { imports = [inputs.nixvim.homeManagerModules.nixvim]; programs.nixvim = { enable = true; plugins = { 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" ]; }; 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 = { 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 = { border = "cmp.config.window.bordered()"; }; documentation = { border = "cmp.config.window.bordered()"; }; }; mapping = { "" = "cmp.mapping.confirm({select = true})"; "" = "cmp.mapping.complete()"; # "" = "cmp.mapping.complete()"; "" = "cmp.config.next"; "" = "cmp.config.prev"; }; snippet.expand = /* lua */ '' function(args) require('luasnip').lsp_expand(args.body) end ''; }; }; 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; }; }; fidget = { enable = true; notification.overrideVimNotify = true; }; trouble.enable = true; 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; }; }; oil.enable = true; dap = { enable = true; extensions = { dap-ui.enable = true; dap-virtual-text.enable = true; }; }; todo-comments.enable = true; lualine.enable = true; commentary.enable = true; surround.enable = true; which-key.enable = true; # nvim-ufo = { # enable = true; # closeFoldKinds = null; # providerSelector = # /* # lua # */ # '' # function(bufnr, filetype, buftype) # return {'treesitter', 'indent'} # end # ''; # }; fugitive.enable = true; markdown-preview = { enable = true; settings.auto_start = true; }; # rest.enable = true; treesitter-context = { maxLines = 3; mode = "topline"; enable = true; }; ts-context-commentstring.enable = true; treesitter = { enable = true; indent = true; folding = true; grammarPackages = pkgs.vimPlugins.nvim-treesitter.allGrammars ++ (with pkgs.tree-sitter-grammars; [ tree-sitter-just tree-sitter-norg-meta ]); }; telescope = { enable = true; extensions = { undo.enable = true; ui-select.enable = true; fzf-native.enable = true; file_browser.enable = true; }; }; mini = { enable = true; modules = { ai = {}; starter = {}; # pairs.enable = true; # cursorword.enable = true; }; }; }; 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 # No more postman rest-nvim # UI nvim-web-devicons # Utils FTerm-nvim plenary-nvim pkgs.tree-sitter-grammars.tree-sitter-just # Testing neotest # neotest-rust ]; 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; }; globals = { mapleader = " "; }; colorschemes = { catppuccin = { enable = true; flavour = "mocha"; }; }; keymaps = mkMappings { normal = { "c" = "[[ChatGPT]]"; "o" = "[[TroubleToggle]]"; "ee" = "[[Rest run]]"; "el" = "[[Rest run last]]"; "vff" = "[[vertical Gdiffsplit]]"; "\"" = ''[["+]]''; "gh" = "[[Octo actions]]"; "" = "''"; "q" = "[[bw]]"; "n" = "[[bnext]]"; "p" = "[[bprev]]"; "\"" = "[[split]]"; "%" = "[[vsplit]]"; "dr" = "[[RustLsp debuggables]]"; "" = "[[Outline]]"; "fb" = "require'telescope'.extensions.file_browser.file_browser"; "ff" = "require'telescope.builtin'.find_files"; "gg" = "require'telescope.builtin'.live_grep"; ";" = "require'telescope.builtin'.buffers"; "" = "vim.lsp.buf.definition"; "gi" = "require'telescope.builtin'.lsp_implementations"; "a" = "vim.lsp.buf.code_action"; "F" = "function() vim.lsp.buf.format({ async = true }) end"; "bb" = "require'dap'.toggle_breakpoint"; "du" = "require'dapui'.toggle"; "" = "require('FTerm').toggle"; }; terminal = { "" = "require('FTerm').toggle"; }; insert = { "" = "require('FTerm').toggle"; }; visual = { "S" = "[['<,'>!sort -u]]"; }; }; 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 */ '' require'neotest'.setup({ adapters = { -- require('neotest-rust') { -- args = { "--no-capture" }, -- } require('rustaceanvim.neotest'), } }) do function setup() require('rest-nvim').setup() end success, output = pcall(setup) if not success then print("Failed to setup rest-nvim: " .. output) end end 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 }, }) -- require 'fidget'.setup() -- ======================================================================= -- nvim-cmp -- ======================================================================= -- local cmp = require("cmp") -- cmp.setup({ -- view = { -- entries = { name = 'custom', selection_order = 'near_cursor' } -- }, -- snippet = { -- expand = function(args) -- require('luasnip').lsp_expand(args.body) -- end -- }, -- window = { -- completion = cmp.config.window.bordered(), -- documentation = cmp.config.window.bordered(), -- }, -- sources = cmp.config.sources({ -- { name = "copilot", }, -- { name = 'buffer' }, -- { name = 'nvim_lsp' }, -- { name = 'luasnip' }, -- { name = 'treesitter' }, -- { name = 'path' }, -- { name = 'git' }, -- { name = 'tmux' } -- }), -- mapping = cmp.mapping.preset.insert({ -- [''] = cmp.mapping.confirm(), -- [''] = cmp.mapping.complete(), -- -- [''] = cmp.mapping.complete(), -- [''] = cmp.config.next, -- [''] = cmp.config.prev, -- }) -- }) -- cmp.setup.cmdline({ '/', '?' }, { -- mapping = cmp.mapping.preset.cmdline { -- -- [''] = cmp.config.disable, -- -- [''] = cmp.config.disable, -- }, -- sources = { -- { name = 'buffer' } -- } -- }) -- cmp.setup.cmdline(':', { -- mapping = cmp.mapping.preset.cmdline { -- -- [''] = cmp.config.disable, -- -- [''] = cmp.config.disable, -- }, -- -- mapping = cmp.mapping.preset.cmdline(), -- sources = cmp.config.sources({ -- { name = 'path' } -- }, { -- { name = 'cmdline' } -- }) -- }) -- cmp.setup.filetype('gitcommit', { -- sources = cmp.config.sources({ -- { name = 'git' }, -- You can specify the `git` source if [you were installed it](https://github.com/petertriho/cmp-git). -- }, { -- { name = 'buffer' }, -- }) -- }) require('crates').setup() require('outline').setup() require 'FTerm'.setup({ border = 'double', dimensions = { height = 0.95, width = 0.95, }, cmd = "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", } } } } }) vim.api.nvim_create_autocmd({"BufEnter", "BufWinEnter"}, { pattern = {"*.norg"}, command = "set conceallevel=3" }) 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 = {"rust_analyzer"}; 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('ufo').setup() ''; package = pkgs.neovim-nightly; }; }