{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; 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', 'ff', builtin.find_files, {}) vim.keymap.set('n', 'fg', builtin.live_grep, {}) vim.keymap.set('n', 'fb', builtin.buffers, {}) vim.keymap.set('n', '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 ''; install = false; hotkeys = [{key = "C";}]; } ]; }; }