{inputs, ...}: {
  imports = [
    inputs.devshell.flakeModule
  ];

  perSystem = {
    pkgs,
    config,
    system,
    ...
  }: {
    devshells.default = {
      devshell.startup.pre-commit.text = config.pre-commit.installationScript;

      commands = let
        # Thanks to this, the user can choose to use `nix-output-monitor` (`nom`) instead of plain `nix`
        nix = "$([ '$\{NIXVIM_NOM:-0}' = '1' ] && echo ${pkgs.lib.getExe pkgs.nom} || echo nix)";
      in [
        {
          name = "checks";
          help = "Run all nixvim checks";
          command = "nix flake check";
        }
        {
          name = "tests";
          help = "Run nixvim tests";
          command = ''
            echo "=> Running nixvim tests for the '${system}' architecture..."

            ${nix} build .#checks.${system}.tests "$@"
          '';
        }
        {
          name = "format";
          help = "Format the entire codebase";
          command = "nix fmt";
        }
        {
          name = "docs";
          help = "Build nixvim documentation";
          command = ''
            echo "=> Building nixvim documentation..."

            ${nix} build .#docs "$@"
          '';
        }
        {
          name = "serve-docs";
          help = "Build and serve documentation locally";
          command = ''
            echo -e "=> Building nixvim documentation...\n"

            doc_derivation=$(${nix} build .#docs --no-link --print-out-paths)

            echo -e "\n=> Documentation successfully built ('$doc_derivation')"

            port=8000
            echo -e "\n=> Now open your browser and navigate to 'localhost:$port'\n"

            ${pkgs.lib.getExe pkgs.python3} -m http.server -d "$doc_derivation"/share/doc
          '';
        }
      ];
    };
  };
}