{
  description = "A very basic flake";

  inputs = {
    nixpkgs.url = "nixpkgs/nixpkgs-unstable";
  };

  outputs = {
    self,
    nixpkgs,
  }: let
    supportedSystems = ["x86_64-linux" "aarch64-linux"];
    forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
    nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;});
    additionalDeps = pkgs: [
      pkgs.alejandra
      pkgs.ccls
      pkgs.gopls
      pkgs.luaformatter
      pkgs.nixd
      pkgs.pyright
      pkgs.rust-analyzer
      pkgs.sumneko-lua-language-server
      pkgs.svls
      pkgs.texlab
      pkgs.tree-sitter
      pkgs.verible
      pkgs.zls
    ];
  in {
    packages = forAllSystems (system: let
      pkgs = nixpkgsFor.${system};
    in {
      nvim = import ./nvim-lsp.nix {inherit pkgs;};
    });

    devShells = forAllSystems (system: let
      pkgs = nixpkgsFor.${system};
      vim = self.packages.${system};
    in {
      default = pkgs.mkShell {
        nativeBuildInputs = [
          pkgs.alejandra
          pkgs.ccls
          pkgs.gopls
          pkgs.luaformatter
          pkgs.nixd
          pkgs.pyright
          pkgs.rust-analyzer
          pkgs.sumneko-lua-language-server
          pkgs.svls
          pkgs.texlab
          pkgs.tree-sitter
          pkgs.verible
          pkgs.zls
          vim
        ];
      };
    });

    overlays = forAllSystems (system: let
      pkgs = nixpkgsFor.${system};
    in {
      overlay = final: prev: {
        inherit (self.packages.${system}) nvim;
        inherit additionalDeps;
      };
    });

    defaultPackage = forAllSystems (system: self.packages.${system}.nvim);
  };
}