return{{"\110\118\105\109-\116\114\101\101\046\108\117\097",after=function()(require("\110\118\105\109-\116\114\101\101")).setup({sync_root_with_cwd=true,diagnostics={enable=true},renderer={indent_markers={enable=true},icons={web_devicons={folder={enable=true}}}};modified={enable=true}})local O=(require("\107\101\121\109\097\112\115")).setup()O.normal["\060\115\112\097\099\101\062\110"]={function()(require("\110\118\105\109-\116\114\101\101\046\097\112\105")).tree.open()end,"\111\112\101\110 \110\118\105\109 \116\114\101\101"}vim.api.nvim_create_autocmd("\087\105\110\069\110\116\101\114",{pattern="\078\118\105\109\084\114\101\101\095\042",group=vim.api.nvim_create_augroup("\102\105\108\101\116\121\112\101\058\110\118\105\109\116\114\101\101\058\111\112\116\105\111\110\115",{clear=true});callback=function(O)vim.api.nvim_set_option_value("\115\105\100\101\115\099\114\111\108\108\111\102\102",0,{win=O.win})end})end};{"\107\101\121\109\097\112\115\046\110\118\105\109",priority=1000;after=function()(require("\107\101\121\109\097\112\115")).setup()end},{"\109\097\114\107\105\116\046\110\118\105\109";event="\066\117\102\065\100\100",after=function()(require("\109\097\114\107\105\116")).setup({default_mappings=false,mappings={set="\109";set_next="\109\044";toggle="\109\059",toggle_mark="\077",next="\093\109";prev="\091\109";preview="\109\058";annotate="\109\060\099\114\062",delete="\100\109",delete_line="\100\109-",delete_buf="\100\109\060\115\112\097\099\101\062"};builtin_marks={"\046";"\060";"\062","\094"};cyclic=true,force_write_shada=false,refresh_interval=150;sign_priority={lower=10;upper=15;builtin=8;bookmark=20},excluded_filetypes={};excluded_buftypes={"\110\111\102\105\108\101"}})end},{"\109\105\110\105\046\097\105",event="\066\117\102\065\100\100";after=function()(require("\109\105\110\105\046\097\105")).setup({mappings={around="\097",inside="\105",around_next="\097\110";inside_next="\105\110";around_last="\097\108",inside_last="\105\108",goto_left="\103\091",goto_right="\103\093"}})end};{"\109\105\110\105\046\097\108\105\103\110";event="\066\117\102\065\100\100",after=function()(require("\109\105\110\105\046\097\108\105\103\110")).setup()end};{"\109\105\110\105\046\098\114\097\099\107\101\116\101\100",event="\085\073\069\110\116\101\114",after=function()(require("\109\105\110\105\046\098\114\097\099\107\101\116\101\100")).setup()end};{"\109\105\110\105\046\100\105\102\102";event="\066\117\102\065\100\100",after=function()(require("\109\105\110\105\046\100\105\102\102")).setup({view={style="\110\117\109\098\101\114",signs={add="\226\148\130",change="\226\148\130",delete="\226\148\130",topdelete="\226\128\190";changedelete="~",untracked="\226\148\134"}};delay={text_change=1000},mappings={apply="\103\104";reset="\103\072";textobject="\103\104";goto_first="\091\072",goto_prev="\091\104",goto_next="\093\104",goto_last="\093\072"}})end};{"\109\105\110\105\046\102\105\108\101\115",event="\085\073\069\110\116\101\114",after=function()(require("\109\105\110\105\046\102\105\108\101\115")).setup({options={use_as_default_explorer=false};windows={max_number=3;preview=false,width_focus=50,width_nofocus=15,width_preview=25}})local O=(require("\107\101\121\109\097\112\115")).setup()O.normal["\060\115\112\097\099\101\062\115\112"]={(require("\109\105\110\105\046\102\105\108\101\115")).open;"\079\112\101\110 \070\105\108\101\115",group="\085\073"}end},{"\109\105\110\105-\103\105\116";event="\085\073\069\110\116\101\114",after=function()(require("\109\105\110\105\046\103\105\116")).setup()end};{"\109\105\110\105\046\105\099\111\110\115";event="\086\105\109\069\110\116\101\114";after=function()local O={glyph="\243\176\154\169";hl="\077\105\110\105\073\099\111\110\115\079\114\097\110\103\101"};(require("\109\105\110\105\046\105\099\111\110\115")).setup({file={["\046\101\099\114\099"]={glyph="\238\153\146";hl="\077\105\110\105\073\099\111\110\115\071\114\101\101\110"},["\046\101\110\118\114\099"]={glyph="\238\152\149",hl="\077\105\110\105\073\099\111\110\115\089\101\108\108\111\119"},["\046\101\100\105\116\111\114\099\111\110\102\105\103"]={glyph="\238\153\146",hl="\077\105\110\105\073\099\111\110\115\071\114\101\101\110"};["\046\108\117\097\099\104\101\099\107\114\099"]={glyph="\243\176\162\177",hl="\077\105\110\105\073\099\111\110\115\066\108\117\101"},["\046\074\117\115\116\102\105\108\101"]=O;["\046\106\117\115\116\102\105\108\101"]=O,Justfile=O;justfile=O};lsp={color={glyph="\243\176\143\152"},constant={glyph="\243\176\143\191"};constructor={glyph="\243\176\146\147"},event={glyph="\243\177\144\139"};file={glyph="\243\176\136\148"},folder={glyph="\243\176\137\139"};["\102\117\110\099\116\105\111\110"]={glyph="\243\176\138\149"},property={glyph="\243\176\150\183"};snippet={glyph="\243\177\132\189"},string={glyph="\226\128\156"},value={glyph="\243\176\166\168"},variable={glyph="\243\176\134\166"}}});(require("\109\105\110\105\046\105\099\111\110\115")).mock_nvim_web_devicons()end},{"\109\105\110\105\046\109\111\118\101",event="\066\117\102\065\100\100";after=function()(require("\109\105\110\105\046\109\111\118\101")).setup({mappings={left="\060";right="\062",down="\060\115-\109-\106\062",up="\060\115-\109-\107\062";line_left="",line_right="",line_down="\060\115-\109-\106\062",line_up="\060\115-\109-\107\062"},options={reindent_linewise=true}})end};{"\109\105\110\105\046\111\112\101\114\097\116\111\114\115",event="\066\117\102\065\100\100",after=function()(require("\109\105\110\105\046\111\112\101\114\097\116\111\114\115")).setup({exchange={prefix="\067\120"};multiply={prefix="\067\109"};replace={prefix="\067\114"};sort={prefix=""}})end};{"\109\105\110\105\046\112\097\105\114\115",event="\073\110\115\101\114\116\069\110\116\101\114";after=function()(require("\109\105\110\105\046\112\097\105\114\115")).setup()end};{"\109\105\110\105\046\115\112\108\105\116\106\111\105\110";event="\066\117\102\065\100\100";after=function()(require("\109\105\110\105\046\115\112\108\105\116\106\111\105\110")).setup()end},{"\109\105\110\105\046\115\117\114\114\111\117\110\100",event="\073\110\115\101\114\116\069\110\116\101\114",after=function()(require("\109\105\110\105\046\115\117\114\114\111\117\110\100")).setup({mappings={add="\083",delete="\100\115";find="\115\102",find_left="\115\070";highlight="\115\104";replace="\099\115",update_n_lines="\115\110";suffix_last="";suffix_next=""}})end};{"\109\105\110\105\046\116\114\097\105\108\115\112\097\099\101",event="\066\117\102\065\100\100",after=function()(require("\109\105\110\105\046\116\114\097\105\108\115\112\097\099\101")).setup({only_in_normal_buffers=true})end};{"\114\097\105\110\098\111\119-\100\101\108\105\109\105\116\101\114\115\046\110\118\105\109"};{"\114\117\115\116\097\099\101\097\110\118\105\109";ft="\114\117\115\116"},{"\108\097\122\121\100\101\118\046\110\118\105\109";after=function()(require("\108\097\122\121\100\101\118")).setup({library={{path="\036\123\051\114\100\125\047\108\117\118\047\108\105\098\114\097\114\121",words={"\118\105\109\037\046\117\118"}}}})end};{"\117\110\100\111\116\114\101\101",after=function()vim.keymap.set("\110","\060\108\101\097\100\101\114\062\117",vim.cmd.UndotreeToggle)end};{"\118\105\109-\119\097\107\097\116\105\109\101";enabled=function()return vim.fn.glob("~\047\046\119\097\107\097\116\105\109\101\046\099\102\103")~=""or vim.fn.glob("\036\087\065\075\065\084\073\077\069\095\072\079\077\069\047\046\119\097\107\097\116\105\109\101\046\099\102\103")~=""end};{"\100\105\114\101\110\118\046\110\118\105\109",enabled=function()return vim.fn.executable("\100\105\114\101\110\118")==1 end,after=function()(require("\100\105\114\101\110\118")).setup({autoload_direnv=true})end};{"\104\117\110\107\046\110\118\105\109",cmd={"\068\105\102\102\069\100\105\116\111\114"},after=function()(require("\108\122\046\110")).trigger_load("\110\117\105");(require("\104\117\110\107")).setup()end},{"\099\111\114\100\046\110\118\105\109",after=function()(require("\099\111\114\100")).setup({editor={image="\104\116\116\112\115\058\047\047\114\097\119\046\103\105\116\104\117\098\117\115\101\114\099\111\110\116\101\110\116\046\099\111\109\047\073\111\103\097\077\097\115\116\101\114\047\110\101\111\118\105\109\047\109\097\105\110\047\046\103\105\116\104\117\098\047\097\115\115\101\116\115\047\110\105\120\118\105\109-\100\097\114\107\046\119\101\098\112"},display={swap_icons=true}})end};{"\110\117\105\046\110\118\105\109"}}
return {
  -- tree view
  {
    "nvim-tree.lua",
    after = function()
      require("nvim-tree").setup({
        sync_root_with_cwd = true,
        diagnostics = { enable = true },
        renderer = {
          indent_markers = { enable = true },
          icons = { web_devicons = { folder = { enable = true } } },
        },
        modified = { enable = true },
      })

      local keymaps = require("keymaps").setup()
      keymaps.normal["<space>n"] = {
        function()
          require("nvim-tree.api").tree.open()
        end,
        "open nvim tree",
      }

      vim.api.nvim_create_autocmd("WinEnter", {
        pattern = "NvimTree_*",
        group = vim.api.nvim_create_augroup("filetype:nvimtree:options", { clear = true }),
        callback = function(ev)
          vim.api.nvim_set_option_value("sidescrolloff", 0, { win = ev.win })
        end,
      })
    end,
  },

  -- keymaps
  {
    "keymaps.nvim",
    priority = 1000,
    after = function()
      require("keymaps").setup()
    end,
  },

  {
    "markit.nvim",
    event = "BufAdd",
    after = function()
      require("markit").setup({
        -- whether to map keybinds or not. default true
        default_mappings = false,
        mappings = {
          set = "m", -- Sets a letter mark (will wait for input).
          set_next = "m,", -- Set next available lowercase mark at cursor.
          toggle = "m;", -- Toggle next available mark at cursor.
          toggle_mark = "M", -- Toggle a mark at the current line.
          next = "]m", -- Goes to next mark in buffer.
          prev = "[m", -- Goes to previous mark in buffer.

          preview = "m:", -- Previews mark (will wait for user input). press <cr> to just preview the next mark.
          annotate = "m<cr>", -- Prompts the user for a virtual line annotation that is then placed above the bookmark. Requires neovim 0.6+ and is not mapped by default.

          delete = "dm", -- Delete a letter mark (will wait for input).
          delete_line = "dm-", -- Deletes all marks on current line.
          delete_buf = "dm<space>", -- Deletes all marks in current buffer.

          -- set_bookmark[0-9] = "m", -- Sets a bookmark from group[0-9].
          -- delete_bookmark[0-9] = "dm", -- Deletes all bookmarks from group[0-9].
          -- delete_bookmark = "dm=", -- Deletes the bookmark under the cursor.
          -- next_bookmark = "}m", -- Moves to the next bookmark having the same type as the bookmark under the cursor.
          -- prev_bookmark = "{m", -- Moves to the previous bookmark having the same type as the bookmark under the cursor.
          -- next_bookmark[0-9] = "", -- Moves to the next bookmark of the same group type. Works by first going according to line number, and then according to buffer number.
          -- prev_bookmark[0-9] = "", -- Moves to the previous bookmark of the same group type. Works by first going according to line number, and then according to buffer number.
        },
        -- which builtin marks to show. default {}
        builtin_marks = { ".", "<", ">", "^" },
        -- whether movements cycle back to the beginning/end of buffer. default true
        cyclic = true,
        -- whether the shada file is updated after modifying uppercase marks. default false
        force_write_shada = false,
        -- how often (in ms) to redraw signs/recompute mark positions.
        -- higher value means better performance but may cause visual lag,
        -- while lower value may cause performance penalties. default 150.
        refresh_interval = 150,
        -- sign priorities for each type of mark - builtin marks, uppercase marks, lowercase
        -- marks, and bookmarks.
        -- can be either a table with all/none of the keys, or a single number, in which case
        -- the priority applies to all marks.
        -- default 10.
        sign_priority = { lower = 10, upper = 15, builtin = 8, bookmark = 20 },
        -- disables mark tracking for specific filetypes. default {}
        excluded_filetypes = {},
        -- disables mark tracking for specific buftypes. default {}
        excluded_buftypes = {
          "nofile",
        },
      })
    end,
  },

  -- mini
  {
    "mini.ai",
    event = "BufAdd",
    after = function()
      require("mini.ai").setup({
        mappings = {
          -- Main textobject prefixes
          around = "a",
          inside = "i",

          -- Next/last variants
          around_next = "an",
          inside_next = "in",
          around_last = "al",
          inside_last = "il",

          -- Move cursor to corresponding edge of `a` textobject
          goto_left = "g[",
          goto_right = "g]",
        },
      })
    end,
  },
  {
    "mini.align",
    event = "BufAdd",
    after = function()
      require("mini.align").setup()
    end,
  },
  {
    "mini.bracketed",
    event = "UIEnter",
    after = function()
      require("mini.bracketed").setup()
    end,
  },
  {
    "mini.diff",
    event = "BufAdd",
    after = function()
      require("mini.diff").setup({
        view = {
          style = "number",
          signs = {
            add = "│",
            change = "│",
            delete = "│",
            topdelete = "‾",
            changedelete = "~",
            untracked = "┆",
          },
        },
        delay = { text_change = 1000 },
        mappings = {
          -- Apply hunks inside a visual/operator region
          apply = "gh",

          -- Reset hunks inside a visual/operator region
          reset = "gH",

          -- Hunk range textobject to be used inside operator
          -- Works also in Visual mode if mapping differs from apply and reset
          textobject = "gh",

          -- Go to hunk range in corresponding direction
          goto_first = "[H",
          goto_prev = "[h",
          goto_next = "]h",
          goto_last = "]H",
        },
      })
    end,
  },
  {
    "mini.files",
    event = "UIEnter",
    after = function()
      require("mini.files").setup({
        options = {
          use_as_default_explorer = false,
        },
        windows = {
          -- Maximum number of windows to show side by side
          max_number = 3,
          -- Whether to show preview of file/directory under cursor
          preview = false,
          -- Width of focused window
          width_focus = 50,
          -- Width of non-focused window
          width_nofocus = 15,
          -- Width of preview window
          width_preview = 25,
        },
      })
      local keymaps = require("keymaps").setup()
      keymaps.normal["<space>sp"] = { require("mini.files").open, "Open Files", group = "UI" }
    end,
  },
  {
    "mini-git",
    event = "UIEnter",
    after = function()
      require("mini.git").setup()
    end,
  },
  {
    "mini.icons",
    event = "VimEnter",
    after = function()
      local justfile = {
        glyph = "󰚩",
        hl = "MiniIconsOrange",
      }
      require("mini.icons").setup({
        file = {
          [".ecrc"] = {
            glyph = "",
            hl = "MiniIconsGreen",
          },
          [".envrc"] = {
            glyph = "",
            hl = "MiniIconsYellow",
          },
          [".editorconfig"] = {
            glyph = "",
            hl = "MiniIconsGreen",
          },
          [".luacheckrc"] = {
            glyph = "󰢱",
            hl = "MiniIconsBlue",
          },
          [".Justfile"] = justfile,
          [".justfile"] = justfile,
          ["Justfile"] = justfile,
          ["justfile"] = justfile,
        },
        lsp = {
          color        = { glyph = '󰏘' },
          constant     = { glyph = '󰏿' },
          constructor  = { glyph = '󰒓' },
          event        = { glyph = '󱐋' },
          file         = { glyph = '󰈔' },
          folder       = { glyph = '󰉋' },
          ['function'] = { glyph = '󰊕' },
          property     = { glyph = '󰖷' },
          snippet      = { glyph = '󱄽' },
          string       = { glyph = '“' },
          value        = { glyph = '󰦨' },
          variable     = { glyph = '󰆦' },
        },
      })
      require("mini.icons").mock_nvim_web_devicons()
    end,
  },
  {
    "mini.move",
    event = "BufAdd",
    after = function()
      require("mini.move").setup({
        mappings = {
          -- Move visual selection in Visual mode. Defaults are Alt (Meta) + hjkl.
          left = "<",
          right = ">",
          down = "<s-m-j>",
          up = "<s-m-k>",

          -- Move current line in Normal mode
          line_left = "",
          line_right = "",
          line_down = "<s-m-j>",
          line_up = "<s-m-k>",
        },

        -- Options which control moving behavior
        options = {
          -- Automatically reindent selection during linewise vertical move
          reindent_linewise = true,
        },
      })
    end,
  },
  {
    "mini.operators",
    event = "BufAdd",
    after = function()
      require("mini.operators").setup({
        exchange = { prefix = 'Cx' },
        multiply = { prefix = 'Cm' },
        replace = { prefix = 'Cr' },
        sort = { prefix = '' },
      })
    end,
  },
  {
    "mini.pairs",
    event = "InsertEnter",
    after = function()
      require("mini.pairs").setup()
    end,
  },
  {
    "mini.splitjoin",
    event = "BufAdd",
    after = function()
      require("mini.splitjoin").setup()
    end,
  },
  {
    "mini.surround",
    event = "InsertEnter",
    after = function()
      require("mini.surround").setup({
        mappings = {
          add = "S", -- Add surrounding in Normal and Visual modes
          delete = "ds", -- Delete surrounding
          find = "sf", -- Find surrounding (to the right)
          find_left = "sF", -- Find surrounding (to the left)
          highlight = "sh", -- Highlight surrounding
          replace = "cs", -- Replace surrounding
          update_n_lines = "sn", -- Update `n_lines`
          suffix_last = "", -- Suffix to search with "prev" method
          suffix_next = "", -- Suffix to search with "next" method
        },
      })
    end,
  },
  {
    "mini.trailspace",
    event = "BufAdd",
    after = function()
      require("mini.trailspace").setup({
        -- highlight only in normal buffers (ones with empty 'buftype'). this is
        -- useful to not show trailing whitespace where it usually doesn't matter.
        only_in_normal_buffers = true,
      })
    end,
  },

  -- lsp
  { "rainbow-delimiters.nvim" },

  -- rust lsp + formmating
  {
    "rustaceanvim",
    ft = "rust",
  },

  {
    "lazydev.nvim",
    after = function()
      require("lazydev").setup({
        library = {
          { path = "${3rd}/luv/library", words = { "vim%.uv" } },
        },
      })
    end,
  },

  -- add better undo history
  {
    "undotree",
    after = function()
      vim.keymap.set("n", "<leader>u", vim.cmd.UndotreeToggle)
    end,
  },

  -- track my time coding
  {
    "vim-wakatime",
    enabled = function()
      return vim.fn.glob("~/.wakatime.cfg") ~= "" or vim.fn.glob("$WAKATIME_HOME/.wakatime.cfg") ~= ""
    end,
  },

  {
    "direnv.nvim",
    enabled = function()
      return vim.fn.executable("direnv") == 1
    end,
    after = function()
      require("direnv").setup({
        autoload_direnv = true,
      })
    end,
  },

  {
    "hunk.nvim",
    cmd = { "DiffEditor" },
    after = function()
      require("lz.n").trigger_load("nui")

      require("hunk").setup()
    end,
  },

  -- discord integration
  {
    "cord.nvim",
    after = function()
      require("cord").setup({
        editor = { image = "https://raw.githubusercontent.com/IogaMaster/neovim/main/.github/assets/nixvim-dark.webp" },
        display = { swap_icons = true }, -- place the editor image as the main image
      })
    end,
  },

  {
    "nui.nvim",
  },
}
