{
  lib,
  pkgs,
  config,
  osConfig,
  ...
}: let
  userConfig = osConfig.host.users.eve;
  hardware = osConfig.host.hardware;
in {
  config = {
    nixpkgs.config = {
      allowUnfree = true;
    };

    # Packages that can be installed without any extra configuration
    # See https://search.nixos.org/packages for all options
    home.packages = lib.lists.optionals userConfig.isDesktopUser (
      with pkgs; [
        ungoogled-chromium
        (lib.mkIf hardware.piperMouse.enable piper)
      ]
    );

    # Packages that need to be installed with some extra configuration
    # See https://home-manager-options.extranix.com/ for all options
    programs = lib.mkMerge [
      {
        # Let Home Manager install and manage itself.
        home-manager.enable = true;
      }
      (lib.mkIf (config.user.isDesktopUser || config.user.isTerminalUser) {
        git = {
          enable = true;
          userName = "Eve";
          userEmail = "evesnrobins@gmail.com";
          extraConfig.init.defaultBranch = "main";
        };

        openssh = {
          enable = true;
          hostKeys = [
            {
              type = "ed25519";
              path = "${config.home.username}_${osConfig.networking.hostName}_ed25519";
            }
          ];
        };
      })
      (lib.mkIf config.user.isDesktopUser {
        vscode = {
          enable = true;
          package = pkgs.vscodium;
        };

        firefox.enable = true;
        bitwarden.enable = true;
        discord.enable = true;
        makemkv.enable = true;
        signal-desktop-bin.enable = true;
        steam.enable = true;
      })
    ];
  };
}