{ lib, config, ... }: let inherit (builtins) concatStringsSep; inherit (lib) optionalString mkIf nvim; cfg = config.vim; in { config = { vim.startPlugins = ["plenary-nvim"] ++ lib.optionals (cfg.spellChecking.enableProgrammingWordList) ["vim-dirtytalk"]; vim.maps.normal = mkIf cfg.disableArrows { "" = { action = ""; noremap = false; }; "" = { action = ""; noremap = false; }; "" = { action = ""; noremap = false; }; "" = { action = ""; noremap = false; }; } // mkIf cfg.mapLeaderSpace { "" = { action = ""; }; }; vim.maps.insert = mkIf cfg.disableArrows { "" = { action = ""; noremap = false; }; "" = { action = ""; noremap = false; }; "" = { action = ""; noremap = false; }; "" = { action = ""; noremap = false; }; }; vim.configRC.basic = nvim.dag.entryAfter ["globalsScript"] '' " Settings that are set for everything set encoding=utf-8 set mouse=${cfg.mouseSupport} set tabstop=${toString cfg.tabWidth} set shiftwidth=${toString cfg.tabWidth} set softtabstop=${toString cfg.tabWidth} set expandtab set cmdheight=${toString cfg.cmdHeight} set updatetime=${toString cfg.updateTime} set shortmess+=c set tm=${toString cfg.mapTimeout} set hidden set cursorlineopt=${toString cfg.cursorlineOpt} set scrolloff=${toString cfg.scrollOffset} ${optionalString cfg.debugMode.enable '' " Debug mode settings set verbose=${toString cfg.debugMode.level} set verbosefile=${cfg.debugMode.logFile} ''} ${optionalString cfg.splitBelow '' set splitbelow ''} ${optionalString cfg.splitRight '' set splitright ''} ${optionalString cfg.showSignColumn '' set signcolumn=yes ''} ${optionalString cfg.autoIndent '' set autoindent ''} ${optionalString cfg.preventJunkFiles '' set noswapfile set nobackup set nowritebackup ''} ${optionalString (cfg.bell == "none") '' set noerrorbells set novisualbell ''} ${optionalString (cfg.bell == "on") '' set novisualbell ''} ${optionalString (cfg.bell == "visual") '' set noerrorbells ''} ${optionalString (cfg.lineNumberMode == "relative") '' set relativenumber ''} ${optionalString (cfg.lineNumberMode == "number") '' set number ''} ${optionalString (cfg.lineNumberMode == "relNumber") '' set number relativenumber ''} ${optionalString cfg.useSystemClipboard '' set clipboard+=unnamedplus ''} ${optionalString cfg.mapLeaderSpace '' let mapleader=" " let maplocalleader=" " ''} ${optionalString cfg.syntaxHighlighting '' syntax on ''} ${optionalString (!cfg.wordWrap) '' set nowrap ''} ${optionalString cfg.hideSearchHighlight '' set nohlsearch set incsearch ''} ${optionalString cfg.colourTerm '' set termguicolors set t_Co=256 ''} ${optionalString (!cfg.enableEditorconfig) '' let g:editorconfig = v:false ''} ${optionalString cfg.spellChecking.enable '' set spell set spelllang=${concatStringsSep "," cfg.spellChecking.languages}${optionalString cfg.spellChecking.enableProgrammingWordList ",programming"} ''} ${optionalString (cfg.leaderKey != null) '' let mapleader = "${toString cfg.leaderKey}" ''} ${optionalString (cfg.searchCase == "ignore") '' set nosmartcase set ignorecase ''} ${optionalString (cfg.searchCase == "smart") '' set smartcase set ignorecase ''} ${optionalString (cfg.searchCase == "sensitive") '' set nosmartcase set noignorecase ''} ''; }; }