diff options
| author | Daiderd Jordan <daiderd@gmail.com> | 2016-12-18 13:52:03 +0100 |
|---|---|---|
| committer | Daiderd Jordan <daiderd@gmail.com> | 2016-12-18 13:53:11 +0100 |
| commit | 732866d6b67a85d77e020029909546e5e55e72d4 (patch) | |
| tree | d1b26c8b9d3db03be4c07ef591a164c0b1afeaa6 /modules/programs/vim.nix | |
| parent | cf6d081c29dc7e4549e1a91c5c66dd211119d5ce (diff) | |
add programs.vim module
Diffstat (limited to 'modules/programs/vim.nix')
| -rw-r--r-- | modules/programs/vim.nix | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/modules/programs/vim.nix b/modules/programs/vim.nix new file mode 100644 index 0000000..115fa0f --- /dev/null +++ b/modules/programs/vim.nix @@ -0,0 +1,111 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.vim; + + vim = pkgs.vim_configurable.customize { + name = "vim"; + vimrcConfig.customRC = config.environment.etc."vimrc".text; + vimrcConfig.vam.pluginDictionaries = cfg.plugins; + }; + + text = import ../system/write-text.nix { + inherit lib; + mkTextDerivation = name: text: pkgs.writeText "vim-options-${name}" text; + }; + + vimOptions = concatMapStringsSep "\n" (attr: attr.text) (attrValues cfg.vimOptions); + +in { + options = { + + programs.vim.enable = mkOption { + type = types.bool; + default = false; + description = '' + Whether to configure vim. + ''; + }; + + programs.vim.enableSensible = mkOption { + type = types.bool; + default = false; + example = true; + description = '' + Enable sensible configuration options for vim. + ''; + }; + + programs.vim.plugins = mkOption { + type = types.listOf types.attrs; + default = []; + example = [ { names = [ "surround" "vim-nix" ]; } ]; + description = '' + VAM plugin dictionaries to use for vim_configurable. + ''; + }; + + programs.vim.vimOptions = mkOption { + internal = true; + type = types.attrsOf (types.submodule text); + default = {}; + }; + + programs.vim.vimConfig = mkOption { + type = types.lines; + default = ""; + description = '' + Extra vimrcConfig to use for vim_configurable. + ''; + }; + + }; + + config = mkIf cfg.enable { + + environment.systemPackages = + [ # Include vim_configurable package. + vim + ]; + + environment.variables.EDITOR = "${vim}/bin/vim"; + + environment.etc."vimrc".text = '' + ${vimOptions} + ${cfg.vimConfig} + + if filereadable('/etc/vimrc.local') + source /etc/vimrc.local + endif + ''; + + programs.vim.plugins = mkIf cfg.enableSensible [ + { names = [ "fugitive" "surround" "vim-nix" ]; } + ]; + + programs.vim.vimOptions.sensible.text = mkIf cfg.enableSensible '' + set nocompatible + filetype plugin indent on + syntax on + + set et sw=2 ts=2 + set bs=indent,start + + set hlsearch + nnoremap // :nohlsearch<CR> + + set nowrap + set number + + set list + set listchars=tab:»·,trail:·,extends:⟩,precedes:⟨ + set fillchars+=vert:\ ,stl:\ ,stlnc:\ + + set lazyredraw + ''; + + }; +} |
