neovim lspconfig

This commit is contained in:
Tristan 2023-12-23 15:43:26 +00:00
parent fb5c04a84a
commit 34aaaf63d2
29 changed files with 1705 additions and 1399 deletions

View file

@ -1,13 +1,16 @@
{ user }: { lib, pkgs, config, ... }:
with lib;
let
{user}: {
lib,
pkgs,
config,
...
}:
with lib; let
editor = config.programs.editor;
pkg = editor.package;
terminal = config.programs.terminal.package;
termcmd = "${terminal}/bin/${terminal.pname}";
menu = config.programs.menu.package + config.programs.menu.dmenuCommand;
in
{
in {
options.programs = {
editor = {
enable = mkEnableOption "editor";
@ -19,92 +22,93 @@ in
};
config = mkIf editor.enable {
home-manager.users.${user}.imports = [{
programs.vscode = {
enable = true;
package = editor.package;
extensions =
if editor.neovim then with pkgs; [
vscode-extensions.asvetliakov.vscode-neovim
] else [ ];
userSettings = {
"keyboard.dispatch" = "keyCode";
"terminal.integrated.sendKeybindingsToShell" = true;
"aws.telemetry" = false;
"gitlens.telemetry.enabled" = false;
"redhat.telemetry.enabled" = false;
"cSpell.language" = "en,en-GB";
} // (if editor.neovim then {
"vscode-neovim.neovimExecutablePaths.linux" = "${pkgs.neovim}/bin/nvim";
"extensions.experimental.affinity" = {
"asvetliakov.vscode-neovim" = 1;
};
} else { });
};
programs.neovim = mkIf editor.neovim {
enable = true;
defaultEditor = true;
coc = {
home-manager.users.${user}.imports = [
{
programs.vscode = {
enable = true;
settings = {
languageserver = {
go = {
command = "${pkgs.gopls}/bin/gopls";
filetypes = [ "go" ];
};
nix = {
command = "${pkgs.rnix-lsp}/bin/rnix-lsp";
filetypes = [ "nix" ];
};
typescript = {
command = "${pkgs.nodePackages.typescript-language-server}/bin/typescript-language-server";
filetypes = [ "ts" "tsx" ];
};
};
};
package = editor.package;
extensions =
if editor.neovim
then
with pkgs; [
vscode-extensions.asvetliakov.vscode-neovim
]
else [];
userSettings =
{
"keyboard.dispatch" = "keyCode";
"terminal.integrated.sendKeybindingsToShell" = true;
"aws.telemetry" = false;
"gitlens.telemetry.enabled" = false;
"redhat.telemetry.enabled" = false;
"cSpell.language" = "en,en-GB";
}
// (
if editor.neovim
then {
"vscode-neovim.neovimExecutablePaths.linux" = "${pkgs.neovim}/bin/nvim";
"extensions.experimental.affinity" = {
"asvetliakov.vscode-neovim" = 1;
};
}
else {}
);
};
extraConfig = ''
vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR>
vnoremap <C-R> "ry:%s/<C-R>=escape(@r,'/\')<CR>
vnoremap A :norm A
noremap <C-S-I> :CocCommand editor.action.formatDocument<CR>
set number
set rnu
set ignorecase
set smartcase
set mouse=a
set path=.,**
let g:netrw_banner=0
let g:netrw_liststyle=3
set undofile
set undodir=~/.local/share/nvim/undo
programs.neovim = mkIf editor.neovim {
enable = true;
defaultEditor = true;
extraLuaConfig = ''
${builtins.readFile ./neovim/config.lua}
'';
extraPackages = with pkgs; [
nodePackages_latest.typescript-language-server
vscode-langservers-extracted
gopls
nil
];
plugins = with pkgs.vimPlugins; [
vim-surround
vim-commentary
{
plugin = telescope-nvim;
type = "lua";
config = ''
local builtin = require('telescope.builtin')
vim.keymap.set('n', '<leader>ff', builtin.find_files, {})
vim.keymap.set('n', '<leader>fg', builtin.live_grep, {})
vim.keymap.set('n', '<leader>fb', builtin.buffers, {})
vim.keymap.set('n', '<leader>fh', builtin.help_tags, {})
'';
}
{
plugin = nvim-lspconfig;
type = "lua";
config = builtins.readFile ./neovim/lspconfig.lua;
}
firenvim
];
};
}
];
programs.scripts = [
{
name = "open-code";
text = ''
code_dir=~/Documents/code
cd $code_dir
repo=$({ ls && echo clone-repo; } | ${menu})
case $repo in
clone-repo)
url=$(wl-paste)
${termcmd} -e -- git clone "$url" ;;
*) [ -e "$repo" ] && ${pkg}/bin/${pkg.executableName} $repo ;;
esac
'';
plugins = with pkgs.vimPlugins; [
vim-surround
vim-commentary
firenvim
];
};
}];
programs.scripts = [{
name = "open-code";
text = ''
code_dir=~/Documents/code
cd $code_dir
repo=$({ ls && echo clone-repo; } | ${menu})
case $repo in
clone-repo)
url=$(wl-paste)
${termcmd} -e -- git clone "$url" ;;
*) [ -e "$repo" ] && ${pkg}/bin/${pkg.executableName} $repo ;;
esac
'';
install = false;
hotkeys = [{ key = "C"; }];
}];
install = false;
hotkeys = [{key = "C";}];
}
];
};
}