{
  config,
  pkgs,
  ...
}: {
  programs.nvf = {
    enable = true;
    settings = {
      vim = {
        theme = {
          enable = true;
          name = "base16";
        };

        statusline.lualine.enable = true;
        telescope.enable = true;

        viAlias = true;
        vimAlias = true;
        lsp = {
          enable = true;
        };
        globals.mapleader = " ";
        languages = {
          enableLSP = true;
          enableDAP = true;
          enableExtraDiagnostics = true;
          enableFormat = true;
          enableTreesitter = true;

          rust.enable = true;
          nix.enable = true;
          markdown.enable = true;
          java.enable = true;
        };
        autocomplete.nvim-cmp.enable = true;
        startPlugins = with pkgs.vimPlugins; [
          vimwiki
        ];
	# the following doesnt seem to work, i fear i may have to properly package vimwiki but i dont want to do that right now so i will come back later
#        luaConfigRC = ''
#
#	  -- set vimwiki settings that I want
#          set nocompatible
#          filetype plugin on
#          syntax on
#
#          let g:vimwiki_list = [{'path': '~/Notes/',
#                                \ 'syntax': 'markdown', 'ext': 'md'}]
#          let g:vimwiki_global_ext = 0
#        ''; # Required settings for vimwiki
      };
    };
  };

  # Pulls stylix base16 colours into nvf for use in the vim theme.
  # This works for colours generated from the wallpaper, colours set manually and colours pulled from a base16Scheme yaml file.
  programs.nvf.settings.vim.theme.base16-colors = {
    base00 = "${config.lib.stylix.colors.base00}";
    base01 = "${config.lib.stylix.colors.base01}";
    base02 = "${config.lib.stylix.colors.base02}";
    base03 = "${config.lib.stylix.colors.base03}";
    base04 = "${config.lib.stylix.colors.base04}";
    base05 = "${config.lib.stylix.colors.base05}";
    base06 = "${config.lib.stylix.colors.base06}";
    base07 = "${config.lib.stylix.colors.base07}";
    base08 = "${config.lib.stylix.colors.base08}";
    base09 = "${config.lib.stylix.colors.base09}";
    base0A = "${config.lib.stylix.colors.base0A}";
    base0B = "${config.lib.stylix.colors.base0B}";
    base0C = "${config.lib.stylix.colors.base0C}";
    base0D = "${config.lib.stylix.colors.base0D}";
    base0E = "${config.lib.stylix.colors.base0E}";
    base0F = "${config.lib.stylix.colors.base0F}";
  };
}