nixos-configuration/jrpotter/neovim/default.nix

143 lines
3.6 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;
2023-11-19 00:18:20 +00:00
lualine-nvim = {
plugin = pkgs.vimPlugins.lualine-nvim;
config = ''
require('init.evil')
'';
};
2023-11-18 23:08:50 +00:00
nvim-cmp = {
plugin = pkgs.vimPlugins.nvim-cmp;
config = ''
require('init.cmp').setup()
'';
};
2023-11-17 11:58:33 +00:00
nvim-dap = {
2023-11-20 04:00:33 +00:00
plugin = utils.pluginGit
"e154fdb6d70b3765d71f296e718b29d8b7026a63"
"mfussenegger/nvim-dap";
config = 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
};
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-17 11:58:33 +00:00
lua
nix
python
2023-11-20 15:13:13 +00:00
typescript
2023-11-17 11:58:33 +00:00
]
));
config = ''
2023-11-18 23:08:50 +00:00
require('init.treesitter').setup()
2023-11-17 11:58:33 +00:00
'';
};
in
{
options.programs.neovim = {
nvim-dap = lib.mkOption {
type = lib.types.lines;
example = ''
require('...').nvim_dap()
'';
description = lib.mdDoc ''
Language-specific configurations for the `nvim-dap` plugin.
'';
};
nvim-lspconfig = lib.mkOption {
type = lib.types.lines;
example = ''
require('...').nvim_lspconfig()
'';
description = lib.mdDoc ''
Language-specific configurations for the `nvim-lspconfig` plugin.
'';
};
};
# Notice that within our imports we use `home.packages` instead of
# `extraPackages`. The latter is preferable but comes with `$PATH`-related
# problems.
#
# Specifically, Home Manager appends paths specifed in `extraPackages` to the
# end of `$PATH` meaning any already defined instance of some package will be
# used instead. Prepending is not an option either since that would break
# environments like those produced by `direnv` or `nix-shell`.
#
# https://github.com/nix-community/home-manager/pull/1756
imports = [
2023-11-20 15:09:07 +00:00
./lang/bash.nix
./lang/c.nix
2023-11-20 16:32:20 +00:00
./lang/elixir.nix
2023-11-20 04:00:33 +00:00
./lang/lean.nix
./lang/lua.nix
./lang/nix.nix
./lang/python.nix
2023-11-20 15:13:13 +00:00
./lang/typescript.nix
];
config = {
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) [
2023-11-19 00:18:20 +00:00
lualine-nvim
2023-11-18 23:08:50 +00:00
nvim-cmp
nvim-dap
nvim-lspconfig
nvim-treesitter
2023-11-18 23:08:50 +00:00
pkgs.vimPlugins.cmp-buffer
pkgs.vimPlugins.cmp-nvim-lsp
2023-11-18 23:41:39 +00:00
pkgs.vimPlugins.cmp_luasnip
pkgs.vimPlugins.luasnip
2023-11-19 00:18:20 +00:00
pkgs.vimPlugins.nvim-web-devicons
];
viAlias = true;
vimAlias = true;
};
xdg.configFile."nvim/init.lua".text = lib.mkMerge [
# Extra Lua configuration to be prepended to `init.lua`. Extend the Lua
# loader to search for our /nix/store/.../?.lua files.
(let
lua = pkgs.stdenv.mkDerivation {
name = "lua";
src = ./lua;
installPhase = ''
mkdir -p $out/
cp -r ./* $out/
'';
};
in lib.mkBefore ''
package.path = '${lua}/?.lua;' .. package.path
'')
# Extra Lua configuration to be appended to `init.lua`.
(lib.mkAfter ''
vim.g.mapleader = ' '
vim.g.maplocalleader = '\\'
vim.o.colorcolumn = '80,100'
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.
'')
2023-11-17 11:58:33 +00:00
];
};
}