{
  config,
  lib,
  pkgs,
  ...
}:

let
  patchScriptBin =
    filename: contents:
    ((pkgs.writeScriptBin filename contents).overrideAttrs (old: {
      buildCommand = "${old.buildCommand}\n patchShebangs $out";
    }));
  cleanup_temporary_files = (
    patchScriptBin "cleanup_temporary_files" (builtins.readFile ./files/cleanup_temporary_files.bash)
  );
  alias_rga = pkgs.writeShellScriptBin "rga" ''
    exec ${pkgs.ripgrep}/bin/rg -uuu "''${@}"
  '';
in
{
  imports = [ ];

  options.me = {
    base.enable = lib.mkOption {
      type = lib.types.bool;
      default = false;
      example = true;
      description = "Whether we want to install base.";
    };
  };

  config = lib.mkIf config.me.base.enable {
    environment.systemPackages = with pkgs; [
      wget
      mg
      rsync
      libinput
      htop
      tmux
      file
      usbutils # for lsusb
      pciutils # for lspci
      ripgrep
      alias_rga
      strace
      # ltrace # Disabled because it uses more than 48GB of /tmp space during test phase.
      trace-cmd # ftrace
      tcpdump
      git-crypt
      gnumake
      ncdu
      nix-tree
      libarchive # bsdtar
      lsof
      dmidecode # Read SMBIOS information.
      ipcalc
      gptfdisk # for cgdisk
      nix-output-monitor # For better view into nixos-rebuild
      # nix-serve-ng # Serve nix store over http
      cleanup_temporary_files
      jq
      inetutils # For whois
    ];
  };
}
