110 lines
3.1 KiB
Nix
110 lines
3.1 KiB
Nix
{ 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
|
|
{
|
|
options.programs = {
|
|
editor = {
|
|
enable = mkEnableOption "editor";
|
|
package = mkPackageOption pkgs "vscodium" {
|
|
example = "pkgs.vscode";
|
|
};
|
|
neovim = mkEnableOption "neovim mode";
|
|
};
|
|
};
|
|
|
|
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 = {
|
|
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" ];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
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
|
|
'';
|
|
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"; }];
|
|
}];
|
|
};
|
|
|
|
}
|