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

  programs.nvf = {
    enable = true;
    settings = {
      vim = {
        viAlias = false;
        vimAlias = true;

        options = {
          wrap = false;
        };

        clipboard = {
          enable = true;
          providers.wl-copy.enable = true;
          registers = "unnamedplus";
        };

        comments.comment-nvim = {
          enable = true;
        };

        lsp = {
          enable = true;
          formatOnSave = true;
          inlayHints.enable = true;
        };

        treesitter = {
          enable = true;
          indent.enable = true;
        };

        statusline.lualine.enable = true;
        telescope.enable = true;
        autocomplete.blink-cmp.enable = true;

        # Auto-close (, ", `, etc.
        mini.pairs = {
          enable = true;
        };

        # File explorer
        filetree.neo-tree = {
          enable = true;
          setupOpts = {
            git_status_async = true;
          };
        };

        # Formatting files
        formatter.conform-nvim = {
          enable = true;
        };

        binds = {
          whichKey.enable = true;
        };

        keymaps = [
          {
            key = "<A-e>";
            mode = [ "n" ];
            silent = true;
            action = "<cmd>Neotree focus<CR>";
          }
          {
            key = "<C-e>";
            mode = [ "n" ];
            silent = true;
            action = "<cmd>Neotree close<CR>";
          }
          {
            key = "<C-s>";
            desc = "Save";
            mode = [
              "n"
              "i"
              "v"
            ];
            action = "<cmd>w<CR>";
          }
          {
            key = "<C-z>";
            desc = "Undo";
            mode = [
              "n"
              "i"
              "v"
            ];
            action = "<cmd>u<CR>";
          }

          # Window Navigation
          {
            key = "<C-w>LEFT";
            mode = "";
            action = "<C-w>h";
          }
          {
            key = "<C-w>DOWN";
            mode = "";
            action = "<C-w>j";
          }
          {
            key = "<C-w>UP";
            mode = "";
            action = "<C-w>k";
          }
          {
            key = "<C-w>RIGHT";
            mode = "";
            action = "<C-w>l";
          }
        ];

        theme = {
          enable = true;
          name = "catppuccin";
          style = "mocha";
        };

        languages = {
          enableTreesitter = true;
          enableFormat = true;

          clang = {
            enable = true;
            cHeader = true;
            dap.enable = true;
            lsp = {
              enable = true;
              server = "clangd";
            };
            treesitter.enable = true;
          };

          css = {
            enable = true;
            format = {
              enable = true;
              type = "prettier";
            };
            lsp.enable = true;
            treesitter.enable = true;
          };

          html = {
            enable = true;
            treesitter = {
              enable = true;
              autotagHtml = true;
            };
          };

          markdown = {
            enable = true;
            extensions = {
              markview-nvim.enable = true;
            };
            format = {
              enable = true;
            };
            lsp = {
              enable = true;
            };
            treesitter = {
              enable = true;
            };
          };

          nix = {
            enable = true;
            format = {
              enable = true;
              package = pkgs.nixfmt;
              type = "nixfmt";
            };
            lsp = {
              enable = true;
              package = pkgs.nixd;
              server = "nixd";
              options = {
                nixos = {
                  expr = "(builtins.getFlake (builtins.toString ./.)).nixosConfigurations.${host}.options";
                };
                home-manager = {
                  expr = "(builtins.getFlake (builtins.toString ./.)).nixosConfigurations.${host}.options.home-manager.users.type.getSubOptions []";
                };
              };
            };
            treesitter.enable = true;
          };

          python = {
            enable = true;
            dap = {
              enable = true;
              debugger = "debugpy";
            };
            format = {
              enable = true;
              type = "black-and-isort";
            };
            lsp = {
              enable = true;
            };
            treesitter.enable = true;
          };

          rust = {
            enable = true;
            # crates = {
            #   enable = true;
            # };
            dap.enable = true;
            format.enable = true;
            lsp.enable = true;
            treesitter.enable = true;
          };

          tailwind = {
            enable = true;
            lsp.enable = true;
          };

          ts = {
            enable = true;
            extensions = {
              ts-error-translator.enable = true;
            };
            extraDiagnostics.enable = true;
            format = {
              enable = true;
              type = "prettier";
            };
            lsp.enable = true;
            treesitter.enable = true;
          };
        };

        utility = {
          sleuth.enable = true;
          multicursors.enable = true;
          preview = {
            markdownPreview = {
              enable = true;
              autoClose = true;
            };
          };
        };
      };
    };
  };
}
