{ config, lib, pkgs, ... }: with lib; let cfg = config.voidcruiser.vim; in { options.voidcruiser.vim = { enable = mkEnableOption "Enables opinionated vim configuration"; enableNvim = mkEnableOption "Enables neovim and alias"; setEnvVar = mkOption { type = types.bool; default = true; description = '' Set 'vim' as $EDITOR ''; }; }; config = mkIf cfg.enable { programs.nano.enable = false; environment = { variables = mkIf cfg.setEnvVar { EDITOR = "vim"; }; systemPackages = with pkgs; [ (mkIf cfg.enableNvim (neovim.override { vimAlias = true; })) ((vim_configurable.override { }).customize { name = "vim"; vimrcConfig = { packages.myplugs = with pkgs.vimPlugins; { start = [ vim-nix ]; opt = []; }; customRC = '' syntax on set nocompatible set ignorecase set hlsearch set incsearch set autoindent set smartindent set wildmenu set expandtab set shiftwidth=4 set tabstop=4 set number set relativenumber set mouse= set listchars=tab:│\ ,trail:· set list set scrolloff=3 set notimeout set backspace=2 au FileType nix setlocal shiftwidth=2 tabstop=2 expandtab au FileType haskell,tex setlocal shiftwidth=4 tabstop=4 expandtab ''; }; }) ]; }; }; }