{ lib, config, pkgs, ... }:
let
  homeConfig = config.homeConfig;
in
{
  # nixpkgs.overlays = [
  #   inputs.nur.overlay
  # ];

  # nixpkgs.config.allowUnfree = true;
  # inputs.nixpkgs-stable.config.allowUnfree = true;
  options.homeConfig = {
    userName = lib.mkOption {
        type = lib.types.str;
        description = "Main username for system";
    };
    hostName = lib.mkOption {
        type = lib.types.str;
        description = "Hostname for system";
    };
    fullName = lib.mkOption {
        type = lib.types.str;
        description = "Hostname for system";
    };
  };

  config = {
    home.username = homeConfig.userName;
    home.homeDirectory = "/home/${homeConfig.userName}";

    programs.home-manager.enable = true;

    home.stateVersion = "23.11"; # Please read the comment before changing.

    fonts.fontconfig.enable = true;
    home.packages = with pkgs; [
      helix
      jq

      #
      # Better Unix
      #
      bat
      duf
      fd
      fzf
      lsd
      ripgrep
      tre-command
      gtop
      htop
      neofetch

      # Normies
      unzip

      imv
      mpv
      ffmpeg
    ];

    home.file."${config.xdg.configHome}" = {
      source = ../../dotfiles;
      recursive = true;
    };

    home.sessionVariables = {
      EDITOR = "hx";
    };

    # Git setup
    programs.git = {
        enable = true;
        userEmail = homeConfig.email;
        userName = homeConfig.fullName;
    };

    programs = {
      direnv = {
        enable = true;
        enableZshIntegration = true; # see note on other shells below
        nix-direnv.enable = true;
      };
      bash.enable = true; # see note on other shells below
    };

    # Zsh setup
    programs.zsh = {
        enable = true;
        oh-my-zsh = {
            enable = true;
            plugins = [ "git" ];
            theme = "half-life";
        };
        initExtra = ''
            eval "$(direnv hook zsh)"

            alias ls="lsd"
            alias l="lsd --almost-all --long"
            alias llm="lsd --timesort --long"
            alias lS="lsd --oneline --classic"
            alias lt="lsd --tree --depth=2"
            alias grep="rg"
         '';
    };
  };
}