{ 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 = with pkgs; [ vscode-extensions.asvetliakov.vscode-neovim ]; userSettings = { "vscode-neovim.neovimExecutablePaths.linux" = "/run/current-system/sw/bin/nvim"; "keyboard.dispatch" = "keyCode"; "terminal.integrated.sendKeybindingsToShell" = true; "aws.telemetry" = false; "gitlens.telemetry.enabled" = false; "redhat.telemetry.enabled" = false; }; }; programs.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" ]; }; }; }; }; }; }]; 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";}]; }]; }; }