return require('packer').startup(function()
  local pid = vim.fn.getpid()

  use 'wbthomason/packer.nvim' -- plugin manager
  use 'nvim-tree/nvim-web-devicons' -- file icons
  use 'rktjmp/lush.nvim'
  use { -- color scheme
    'catppuccin/nvim',
    as = 'cattppuccin'
  }
  use 'hoob3rt/lualine.nvim' -- status line
  use { -- file picker and grepper
    'nvim-telescope/telescope.nvim',
    requires = { {'nvim-lua/plenary.nvim'} }
  }
  use 'nvim-telescope/telescope-ui-select.nvim' -- selector
  use 'gpanders/editorconfig.nvim'
  use 'neovim/nvim-lspconfig'
  use 'L3MON4D3/LuaSnip' -- snipets
  use {
    'hrsh7th/nvim-cmp', -- autocomplete
    requires = {
      {'saadparwaiz1/cmp_luasnip'}, -- autocomplete snips
      {'hrsh7th/cmp-nvim-lsp'}, -- lsp autocomplete
      {'hrsh7th/cmp-buffer'}, -- buffer autocomplete
      {'hrsh7th/cmp-path'}, -- path autocompletes
    }
  }
  use 'mfussenegger/nvim-dap' -- debug adapter protocol
  use { -- gitgutter replacement
    'lewis6991/gitsigns.nvim',
    requires = {
      'nvim-lua/plenary.nvim'
    }
  }
  use 'Pocco81/TrueZen.nvim' -- distraction free writing
  use 'https://code.sitosis.com/rudism/telescope-dict.nvim.git' -- thesaurus and dictionary
  use 'nvim-telescope/telescope-file-browser.nvim' -- file picker
  use 'tpope/vim-dadbod' -- database query runner
  use 'tpope/vim-dotenv' -- .env configuration support
  use 'kristijanhusak/vim-dadbod-completion' -- sql completion
  use 'sirtaj/vim-openscad'
end)
