return {
  require('plugins.nvim_cmp'),
  require('plugins.lsp'),
  {
    "ray-x/lsp_signature.nvim",
    opts = {
      hint_enable = true,
    },
  },


  {
    "scrooloose/nerdcommenter",
    config = function ()
      vim.g.NERDSpaceDelims=1
      vim.g.NERDDefaultAlign='left'
    end
  },
  "vim-scripts/DrawIt",

  -- easymotion alternative
  require('plugins.hop'),

  require('plugins.ale'),
  "mattn/emmet-vim",
  require('plugins.go'),

  {
    "pangloss/vim-javascript",
    config = function ()
      vim.g.javascript_plugin_jsdoc = 1
    end
  },

  "godlygeek/tabular",
  "plasticboy/vim-markdown",

  -- fzf
  require('plugins.fzf'),

  "kyazdani42/nvim-web-devicons",
  require('plugins.nvim_tree'),

  "kien/tabman.vim",

  -- for git 
  "tpope/vim-fugitive",
  "christoomey/vim-conflicted",
  "sindrets/diffview.nvim",

  -- for mark 
  "inkarkat/vim-ingo-library",
  "inkarkat/vim-mark",

  "rking/ag.vim",

  {
    "terryma/vim-multiple-cursors",
    config = function ()
      local g = vim.g
      g.multi_cursor_use_default_mapping=0

      -- Default mapping
      g.multi_cursor_start_word_key      = "<C-n>"
      g.multi_cursor_select_all_word_key = '<A-n>'
      g.multi_cursor_start_key           = "g<C-n>"
      g.multi_cursor_select_all_key      = 'g<A-n>'
      g.multi_cursor_next_key            = "<C-n>"
      g.multi_cursor_skip_key            = '<C-x>'
      g.multi_cursor_quit_key            = '<Esc>'
    end
  },

  require('plugins.lualine'),
  require('plugins.bufferline'),

  --require('plugins.indent_blankline'),
  {
    "nvim-treesitter/nvim-treesitter",
    branch = "main",
  },

  {
    "bluz71/vim-nightfly-colors",
    config = function () 
      vim.g.nightflyTransparent = true 
      vim.cmd[[ colorscheme nightfly ]]
    end
  },
  {
    "folke/tokyonight.nvim",
    branch = "main",
  },

  "norcalli/nvim-colorizer.lua",

  -- code outline
  require('plugins.aerial'),

  "tpope/vim-surround",
  -- "buoto/gotests-vim",
  "cespare/vim-toml",
  {
    "rust-lang/rust.vim",
    config = function ()
      local g = vim.g 
      g.rust_recommended_style = 0
      g.rustfmt_autosave = 1
      g.syntastic_rust_checkers = {'cargo'}
    end
  },
  "vim-scripts/TaskList.vim",
  "google/vim-jsonnet",

  {
    "github/copilot.vim",
    keys = {
      {'<c-j>', 'copilot#Accept("<CR>")', mode = 'i', silent = true, expr = true, noremap = true, replace_keycodes = false},
    },
    lazy = false,
    init = function ()
      vim.g.copilot_no_tab_map = true
    end
  },

  -- temp plugins
  "elkowar/yuck.vim",
  "towolf/vim-helm",

  "evanleck/vim-svelte",
  "AndrewRadev/linediff.vim",

  -- themes
  "tomasr/molokai",

  {
    "vimwiki/vimwiki",
    init = function ()
      vim.g.vimwiki_list = {
        {
          path = '~/vimwiki/',
          syntax = 'markdown',
          ext = '.md',
	  custom_wiki2html = "~/bin/wiki2html.sh",
        }
      }
    end
  },
  -- require('plugins.vim-ai'),
  -- ai 助手
  -- require('plugins.avante'),
  require('plugins.codecompanion'),
}
