{ pkgs, ... }:
{
  programs = {
    neovim = {
      enable = true;
      defaultEditor = true;
      vimAlias = true;
      plugins = with pkgs.vimPlugins; [
        vim-fugitive
        undotree
        telescope-nvim
        nvim-cmp
        cmp-nvim-lsp
        nvim-lspconfig
        lsp-zero-nvim
        vim-floaterm
        luasnip
        cmp_luasnip
        lualine-nvim
        vim-sleuth
        copilot-lua
        copilot-cmp
        cmp-cmdline
        cmp-buffer
        catppuccin-nvim
        (nvim-treesitter.withPlugins (p: [
          p.tree-sitter-yaml
          p.tree-sitter-nix
          p.tree-sitter-go
          p.tree-sitter-lua
          p.tree-sitter-vim
          p.tree-sitter-bash
          p.tree-sitter-json
          p.tree-sitter-python
          p.tree-sitter-c
          p.tree-sitter-cmake
          p.tree-sitter-cpp
          p.tree-sitter-markdown
          p.tree-sitter-markdown-inline
        ]))
      ];
      extraLuaConfig = ''
        ${builtins.readFile ./options.lua}
        ${builtins.readFile ./plugins.lua}
        ${builtins.readFile ./keybinds.lua}
      '';
    };
  };
  home.packages = with pkgs; [
    # nix stuff
    nixfmt-rfc-style
    statix

    # LSPs
    gopls
    pyright
    nodePackages.typescript-language-server
    nodePackages.typescript
    nil
    yaml-language-server
    lua-language-server
    clang-tools
    zls
    ruff
  ];
  home.sessionVariables.EDITOR = "nvim";
}