{ config,
  nixosConfig,
  pkgs,
  lib,
  inputs,
  home-manager,
  ... }:
let
  handheldPkgs = lib.attrVals [
    "fluffychat"
  ] pkgs;
  pcPkgs = lib.attrVals [
    "activitywatch"
    "anki"
    "awatcher"
    "dunst"
    "foliate"
    "foot"
    "grim"
    "hunspell"
    "hyprpaper"
    "imv"
    "isync"
    "kitty"
    "libreoffice"
    "librewolf"
    "lynx"
    "mpv"
    "msmtp"
    "neomutt"
    "networkmanagerapplet"
    "nheko"
    "notmuch"
    "okular"
    "osu-lazer"
    "pass"
    "pavucontrol"
    "playerctl"
    "prismlauncher"
    "pstree"
    "qbittorrent"
    "qt6ct"
    "slurp"
    "swaylock-effects"
    "tofi"
    "wofi"
    "zathura"
  ] pkgs ++ [ pkgs.hunspellDicts.en_US ];
in
{
  options = {
  };

  config = {
    home.packages = with pkgs; [
      cider
      ngspice
      kicad
      #steamvr?
      procps
      usbutils
      yt-dlp
      (python3.withPackages (lib.attrVals [ "matplotlib" "pyflakes" "python-lsp-server" "sympy"]))
    ]
    ++ (lib.optionals (nixosConfig.stitchyconf.form == "handheld") handheldPkgs)
    ++ (lib.optionals (nixosConfig.stitchyconf.form == "pc") pcPkgs);

    dconf.settings = {
      "org/virt-manager/virt-manager/connections" = {
        autoconnect = ["qemu:///system"];
        uris = ["qemu:///system"];
      };
    };

    # To-Do Later
    home.sessionVariables = {
      FOO = "BAR";

    };

    home.file = {
      ".zshrc".source = config.lib.file.mkOutOfStoreSymlink "/etc/nixos/config/zshrc";
    };

    xdg.configFile = {
      "dunst" = {
        source = config.lib.file.mkOutOfStoreSymlink "/etc/nixos/config/dunst";
        recursive = true;
      };
      "eww" = {
        source = config.lib.file.mkOutOfStoreSymlink "/etc/nixos/config/eww";
        recursive = true;
      };
      "foot" = {
        source = config.lib.file.mkOutOfStoreSymlink "/etc/nixos/config/foot";
        recursive = true;
      };
      "hypr" = {
        source = config.lib.file.mkOutOfStoreSymlink "/etc/nixos/config/hypr";
        recursive = true;
      };
      "swaylock" = {
        source = config.lib.file.mkOutOfStoreSymlink "/etc/nixos/config/swaylock";
        recursive = true;
      };
    };

    systemd.user.services = {
      mailsync = {
        Unit = {
          Description = "Syncs email";
    After = [ "network-online.target" ];
        };
        Service = {
          Type = "oneshot";
          ExecStart = "${pkgs.mutt-wizard}/bin/mailsync";
          Environment =  [
            "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus"
            "DISPLAY=:0"
            "MBSYNCRC=/home/stitchynyan/.config/mbsync/config"
            "PATH=$PATH:${lib.makeBinPath (lib.attrVals [ "busybox" "cyrus-sasl-xoauth2" "gnupg" "isync" "notify" "notmuch" "pass" "perl" "python3" ] pkgs)}"
            "SASL_PATH=/run/current-system/sw/lib/sasl2"
            "WAYLAND_DISPLAY=wayland-1"
          ];
        };
        Install.WantedBy = [ "default.target" ];
      };
    };

    programs.gpg = {
      homedir = "${config.xdg.dataHome}/gnupg";
    };

    services = {
      gpg-agent = {
        enable = true;
        enableScDaemon = false;
        enableSshSupport = true;
        defaultCacheTtl = 34560000;
        maxCacheTtl = 34560000;
        extraConfig = ''
          allow-preset-passphrase
          pinentry-program /run/current-system/sw/bin/pinentry
        '';
      };
    };

    systemd.user.timers = {
      mailsync = {
        Unit.Description = "Syncs email";
        Timer = {
          OnBootSec = "1min";
    OnUnitActiveSec = "10min";
        };
        Install.WantedBy = [ "timers.target" ];
      };
    };

    home.pointerCursor = {
      name = "phinger-cursors-dark";
      package = pkgs.phinger-cursors;
      gtk.enable = true;
      size = 24;
    };

    # Read the Docs before change
    home.stateVersion = "23.05";
    home.homeDirectory = "/home/stitchynyan";
  };
}