{
  inputs,
  lib,
  pkgs,
  ...
}: {
  imports = [inputs.nvf.homeManagerModules.default];

  programs.nvf = {
    enable = true;
    settings.vim = {
      viAlias = true;
      vimAlias = true;
      enableLuaLoader = true;
      preventJunkFiles = true;
      useSystemClipboard = true;
      options = {
        tabstop = 4;
        autoindent = false;
      };

      luaConfigPost = ''
        vim.opt.formatoptions:remove('c')
        vim.opt.formatoptions:remove('r')
        vim.opt.formatoptions:remove('o')
      '';

      maps = {
        normal = {
          "<leader>m" = {
            silent = true;
            action = "<cmd>make<CR>";
          }; # Same as nnoremap <leader>m <silent> <cmd>make<CR>
          "<leader>t" = {
            silent = true;
            action = "<cmd>Neotree toggle<CR>";
          };
        };
      };
      theme = lib.mkDefault {
        enable = true;
        name = "catppuccin";
        style = "macchiato";
      };

      ui = {
        noice.enable = true;
      };
      notify.nvim-notify.enable = true;

      statusline = {
        lualine = {
          enable = true;
          theme = "auto";
          componentSeparator = {
            left = "";
          };
          sectionSeparator = {
            left = "";
            right = "";
          };

          activeSection = {
            a = [
              ''
                {
                  "mode",
                  separator = { right = "" },
                  right_padding = 2
                }
              ''
            ];
            b = [
              ''
                {
                  "branch",
                  icon = '',
                  separator = { right = "" }
                }
              ''
            ];
            c = [
              ''
                "filename"
              ''
            ];
            x = [
              ''
                {
                  "diagnostics",
                  sources = {'nvim_lsp', 'nvim_diagnostic', 'nvim_diagnostic', 'vim_lsp', 'coc'},
                  symbols = {error = '󰅙  ', warn = '  ', info = '  ', hint = '󰌵 '},
                  colored = true,
                  update_in_insert = false,
                  always_visible = false,
                  diagnostics_color = {
                    color_error = { fg = 'red' },
                    color_warn = { fg = 'yellow' },
                    color_info = { fg = 'cyan' },
                  },
                }
              ''
              ''
                "filetype"
              ''
            ];
            y = [
              ''
                {
                  "progress",
                  separator = { left = "" },
                }
              ''
              ''
              ''
            ];
            z = [
              ''
                {
                  "location",
                  separator = { left = "" },
                  left_padding = 2
                }
              ''
              ''
                {
                  "fileformat",
                  color = {fg='black'},
                  symbols = {
                    unix = '', -- e712
                    dos = '',  -- e70f
                    mac = '',  -- e711
                  },
                }
              ''
            ];
          };

          inactiveSection = {
            a = [
              ''
                "filename"
              ''
            ];
            z = [
              ''
                "location"
              ''
            ];
          };
        };
      };

      git.enable = true;

      utility = {
        vim-wakatime.enable = true;
      };

      lsp = {
        enable = true;
        lspSignature.enable = true;
        lspconfig.enable = true;
        formatOnSave = true;
        mappings = {
          addWorkspaceFolder = "<leader>wa";
          codeAction = "<leader>a";
          goToDeclaration = "gD";
          goToDefinition = "gd";
          hover = "K";
          listImplementations = "gi";
          listReferences = "gr";
          listWorkspaceFolders = "<leader>wl";
          nextDiagnostic = "<leader>k";
          previousDiagnostic = "<leader>j";
          openDiagnosticFloat = "<leader>e";
          removeWorkspaceFolder = "<leader>wr";
          renameSymbol = "<leader>r";
          signatureHelp = "<C-k>";
        };
      };

      autocomplete.nvim-cmp = {
        enable = true;
      };

      autopairs.nvim-autopairs.enable = true;

      languages = {
        enableExtraDiagnostics = true;
        enableFormat = true;
        enableLSP = true;
        enableTreesitter = true;

        nix.enable = true;
        clang.enable = true;
        python.enable = true;
        ts.enable = true;
        css.enable = true;
      };

      treesitter = {
        enable = true;
        fold = true;
        context.enable = true;
        grammars = [
          pkgs.vimPlugins.nvim-treesitter.builtGrammars.nix
          pkgs.vimPlugins.nvim-treesitter.builtGrammars.c
          pkgs.vimPlugins.nvim-treesitter.builtGrammars.python
        ];
      };

      binds.whichKey.enable = true;
      filetree.neo-tree.enable = true;

      telescope.enable = true;
    };
  };
}