{
  nixpkgs,
  flake-utils,
  treefmt-nix,
  nvf,
  ...
}:
flake-utils.lib.eachDefaultSystem (system: let
  pkgs = nixpkgs.legacyPackages.${system};
  treefmtEval = treefmt-nix.lib.evalModule pkgs ./treefmt.nix;
  treefmtWrapper = treefmtEval.config.build.wrapper;
  neovimConfigured = nvf.lib.neovimConfiguration {
    inherit pkgs;
    modules = [
      {
        config.vim = {
          preventJunkFiles = true;
          telescope.enable = true;
          autopairs.nvim-autopairs.enable = true;
          autocomplete.nvim-cmp.enable = true;
          snippets.luasnip.enable = true;
          filetree.neo-tree.enable = true;
          tabline.nvimBufferline.enable = true;
          dashboard.alpha.enable = true;
          notify.nvim-notify.enable = true;
          projects.project-nvim.enable = true;
          comments.comment-nvim.enable = true;
          extraPlugins.vim-sleuth.package = pkgs.vimPlugins.vim-sleuth;

          keymaps = [
            {
              key = "<C-e>";
              mode = ["n"];
              action = ":Neotree toggle<CR>";
              silent = true;
              desc = "Toggle Neotree";
            }
          ];

          lsp = {
            formatOnSave = true;
            lightbulb.enable = true;
            trouble.enable = true;
            lspSignature.enable = true;
            otter-nvim.enable = true;
            lsplines.enable = true;
          };

          languages = {
            enableLSP = true;
            enableFormat = true;
            enableTreesitter = true;
            enableExtraDiagnostics = true;
            nix.enable = true;
            markdown.enable = true;
            bash.enable = true;
            clang.enable = true;
            css.enable = true;
            html.enable = true;
            sql.enable = true;
            go.enable = true;
            python.enable = true;

            rust = {
              enable = true;
              crates.enable = true;
            };
          };

          visuals = {
            nvim-web-devicons.enable = true;
            cinnamon-nvim.enable = true;
            fidget-nvim.enable = true;
            highlight-undo.enable = true;
            cellular-automaton.enable = true;
          };

          statusline.lualine = {
            enable = true;
            theme = "gruvbox";
          };

          theme = {
            enable = true;
            name = "gruvbox";
            style = "dark";
            transparent = false;
          };

          binds = {
            whichKey.enable = true;
            cheatsheet.enable = true;
          };

          git = {
            enable = true;
            gitsigns.enable = true;
          };

          utility = {
            surround.enable = true;
            diffview-nvim.enable = true;

            motion = {
              hop.enable = true;
              leap.enable = true;
            };
          };

          terminal.toggleterm = {
            enable = true;
            lazygit.enable = true;
          };

          ui = {
            borders.enable = true;
            noice.enable = true;
            colorizer.enable = true;
            smartcolumn.enable = true;
            fastaction.enable = true;
          };
        };
      }
    ];
  };
in {
  packages = {
    formatter = treefmtWrapper;
    inherit (neovimConfigured) neovim;
  };
})