{inputs, ...}: {
  # For every flake input, aliases 'pkgs.inputs.${flake}' to
  # 'inputs.${flake}.packages.${pkgs.system}' or
  # 'inputs.${flake}.legacyPackages.${pkgs.system}'
  flake-inputs = final: _: {
    inputs =
      builtins.mapAttrs (
        _: flake: let
          legacyPackages = (flake.legacyPackages or {}).${final.system} or {};
          packages = (flake.packages or {}).${final.system} or {};
        in
          if legacyPackages != {}
          then legacyPackages
          else packages
      )
      inputs;
  };

  input-flake-packages = final: prev: {
    sheet-organizer = inputs.sheet-organizer.packages.${prev.system}.default; # TODO: change sheet-organizer package output
    music-reader = inputs.music-reader.defaultPackage.${prev.system}; # TODO: change music reader to packages.system
  };

  # Adds my custom packages, available as pkgs.frajul.xyz
  my-pkgs = final: prev: {frajul = import ../pkgs {pkgs = final;};};

  nixpkgs-stable-unstable = final: prev: {
    unstable = import inputs.nixpkgs {
      system = prev.system;
      config.allowUnfree = true;
    };
    stable = import inputs.nixpkgs-stable {
      system = prev.system;
      config.allowUnfree = true;
    };
  };

  # Makes gparted actually open
  gparted-xhost = final: prev: {
    gparted-xhost = prev.gparted.overrideAttrs (oldAttrs: {
      configureFlags = oldAttrs.configureFlags ++ ["--enable-xhost-root"];
    });
  };

  nix-matlab = inputs.nix-matlab.overlay;
}