{
    plugins = {
        lualine.enable = true;

        cmp = {
            enable = true;
            autoEnableSources = true;
            settings = {
                sources = [
                  {name = "nvim_lsp";}
                  {name = "path";}
                  {name = "buffer";}
                  {name = "luasnip";}
                ];

                mapping = {
                    "<C-d>" = "cmp.mapping.scroll_docs(-4)";
                    "<C-f>" = "cmp.mapping.scroll_docs(4)";
                    "<C-Space>" = "cmp.mapping.complete()";
                    "<C-e>" = "cmp.mapping.close()";
                    "<CR>" = "cmp.mapping.confirm({ select = true })";
                    "<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
                    "<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
                };
            };
        };

        lsp = {
            enable = true;

            servers = {
                tsserver.enable = true;

                lua-ls = {
                    enable = true;
                    settings.telemetry.enable = false;
                };
#                rust-analyzer = {
#                    enable = true;
#                    installCargo = true;
#                };
            };
        };

        telescope.enable = true;

        treesitter.enable = true;

        luasnip.enable = true;
    };
}