nixos-configuration/users/jrpotter/neovim/default.nix

165 lines
4.1 KiB
Nix
Raw Normal View History

2023-11-20 04:00:33 +00:00
args @ { config, pkgs, lib, ... }:
2023-11-17 11:58:33 +00:00
let
2023-11-20 04:00:33 +00:00
utils = import ./utils.nix args;
colorscheme = {
plugin = utils.pluginGit
"eb82712f86319272f4b7b9dbb4ec6df650e6987f"
"EdenEast/nightfox.nvim";
config = ''
2024-03-05 03:10:57 +00:00
vim.cmd("colorscheme nordfox")
'';
};
lualine = {
plugin = pkgs.vimPlugins.lualine-nvim;
config = ''
2024-03-05 03:10:57 +00:00
require("lualine").setup {
sections = {
2024-03-05 03:10:57 +00:00
lualine_x = { "encoding", "filetype" },
lualine_y = {
2024-03-05 03:10:57 +00:00
require("utils.statusline").get_active_lsp,
require("utils.statusline").get_dap_status,
require("utils.statusline").get_autoexpand_status,
},
2024-03-05 03:10:57 +00:00
lualine_z = { "%c:%l:%%%p" },
},
}
'';
};
2023-11-18 23:08:50 +00:00
nvim-cmp = {
plugin = pkgs.vimPlugins.nvim-cmp;
config = ''
2024-03-05 03:10:57 +00:00
require("utils.cmp").setup()
2023-11-18 23:08:50 +00:00
'';
};
2023-11-17 11:58:33 +00:00
nvim-dap = {
2023-11-20 04:00:33 +00:00
plugin = utils.pluginGit
2024-03-05 02:55:49 +00:00
"fc880e82059eb21c0fa896be60146e5f17680648"
"mfussenegger/nvim-dap";
config = ''
2024-03-05 02:55:49 +00:00
require("dap").defaults.fallback.terminal_win_cmd = function()
return vim.api.nvim_create_buf(
true, -- listed
true -- scratch
)
end
${config.programs.neovim.nvim-dap}
'';
2023-11-17 11:58:33 +00:00
};
nvim-lspconfig = {
plugin = pkgs.vimPlugins.nvim-lspconfig;
config = config.programs.neovim.nvim-lspconfig;
2023-11-17 11:58:33 +00:00
};
2023-11-24 15:21:43 +00:00
nvim-telescope = {
plugin = pkgs.vimPlugins.telescope-nvim;
config = ''
2024-03-05 03:10:57 +00:00
require("utils.telescope").setup()
2023-11-24 15:21:43 +00:00
'';
};
2023-11-17 11:58:33 +00:00
nvim-treesitter = {
plugin = (pkgs.vimPlugins.nvim-treesitter.withPlugins (
ps: with ps; [
2023-11-20 15:13:13 +00:00
bash
c
2023-11-20 16:32:20 +00:00
elixir
2023-11-30 13:58:10 +00:00
heex
html
2023-11-17 11:58:33 +00:00
lua
2023-11-22 21:59:01 +00:00
markdown
2023-11-17 11:58:33 +00:00
nix
python
2023-11-20 15:13:13 +00:00
typescript
2023-11-17 11:58:33 +00:00
]
));
config = ''
2024-03-05 03:10:57 +00:00
require("utils.treesitter").setup()
2023-11-17 11:58:33 +00:00
'';
};
in
{
options.programs.neovim = {
nvim-dap = lib.mkOption {
type = lib.types.lines;
example = ''
2024-03-05 03:10:57 +00:00
require("...").nvim_dap()
'';
description = lib.mdDoc ''
Language-specific configurations for the `nvim-dap` plugin.
'';
};
nvim-lspconfig = lib.mkOption {
type = lib.types.lines;
example = ''
2024-03-05 03:10:57 +00:00
require("...").nvim_lspconfig()
'';
description = lib.mdDoc ''
Language-specific configurations for the `nvim-lspconfig` plugin.
'';
};
};
config = {
2023-11-24 15:21:43 +00:00
home.packages = with pkgs; [
ripgrep
];
programs.neovim = {
defaultEditor = true;
plugins = map (p:
if builtins.hasAttr "config" p then {
inherit (p) plugin;
config = "lua << EOF\n${p.config}\nEOF";
} else p) [
colorscheme # Is always first.
lualine
2023-11-18 23:08:50 +00:00
nvim-cmp
nvim-dap
nvim-lspconfig
2023-11-24 15:21:43 +00:00
nvim-telescope
nvim-treesitter
2023-11-18 23:08:50 +00:00
pkgs.vimPlugins.cmp-buffer
pkgs.vimPlugins.cmp-nvim-lsp
pkgs.vimPlugins.nvim-web-devicons
pkgs.vimPlugins.vim-prettier
];
viAlias = true;
vimAlias = true;
};
xdg.configFile."nvim/init.lua".text =
let
2024-01-04 17:01:01 +00:00
config = import ./config { inherit pkgs; };
in
lib.mkMerge [
# Extra Lua configuration to be prepended to `init.lua`. Extend the
# Lua loader to search for our /nix/store/.../?.lua files.
(lib.mkBefore ''
2024-03-05 03:10:57 +00:00
package.path = "${config}/?.lua;" .. package.path
'')
# Extra Lua configuration to be appended to `init.lua`.
(lib.mkAfter ''
2024-03-05 03:10:57 +00:00
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
vim.o.colorcolumn = "80,100"
vim.o.equalalways = false -- Disable auto window resize.
vim.o.expandtab = true -- Spaces instead of tabs.
vim.o.list = true -- Show hidden characters.
vim.o.shiftwidth = 2 -- # of spaces to use for each (auto)indent.
vim.o.tabstop = 2 -- # of spaces a <Tab> in the file counts for.
2024-03-21 20:36:05 +00:00
-- "Zoom" in on a window
vim.keymap.set("n", "<c-w>z", ":tabedit %<CR>")
-- Open working directory.
vim.keymap.set("n", "-", ":Explore<CR>")
'')
];
2023-11-17 11:58:33 +00:00
};
}