{ config, pkgs, nixpkgs, ... }:
let
  username = "minion";
  homedir = "/home/${username}";

  comma = import ( pkgs.fetchFromGitHub {
      owner = "nix-community";
      repo = "comma";
      rev = "02e3e5545b0c62595a77f3d5de1223c536af0614";
      sha256 = "sha256-WBIQmwlkb/GMoOq+Dnyrk8YmgiM/wJnc5HYZP8Uw72E=";
  }) {};

in {
  # Home Manager needs a bit of information about you and the
  # paths it should manage.
  home.username = username;
  home.homeDirectory = homedir;

  programs.vscode.enable = true;
  programs.vscode.package = pkgs.vscode-fhs;

  programs.go.enable = true;

  # programs.steam.enable = true;

  programs.gpg.enable = true;
  services.gpg-agent = {
    enable = true;
    pinentryFlavor = "qt";
  };

  nixpkgs.overlays = [ 
    (import ./overlays/anytype.nix)
    (import ./overlays/mindustry.nix)
    (import ./overlays/nur.nix)
  ];

  home.packages = with pkgs; [
    steam-tui steam-run
    minecraft
    git-crypt gnupg pinentry_qt
    spotify
    keepassxc
    grim slurp
    neovim helix
    qemu
    bind
    file
    nur.repos.kira-bruneau.rofi-wayland
    rofimoji
    anytype-latest
    htop
    hue-cli
    comma
    zip
    mindustry-alpha-wayland
    nodejs-17_x
  ];

  programs.zsh = {
    enable = true;
    oh-my-zsh = {
       enable = true;
      plugins = [ "git" ];
      theme = "crunch";
    };
    history = {
      size = 10000;
      path = "${config.xdg.dataHome}/zsh/history";
      expireDuplicatesFirst = true;
      extended = true;
    };
    initExtra = ''
      bindkey "\'\'$\{key[Up]}" up-line-or-search

      command_not_found_handler ()
      {
      #     echo "Command '$1' not found, searching for it in the Nix store..."
      #     , $@
          local p='/nix/store/ycclzpk99snlrk8sg9n4j8pm1927gavw-command-not-found/bin/command-not-found';
          if [ -x "$p" ] && [ -f '/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite' ]; then
              "$p" "$@";
             if [ $? = 126 ]; then
                  "$@";
              else
                  return 127;
              fi;
          else
              echo "$1: command not found" 1>&2;
              return 127;
          fi
      }
    '';
    enableSyntaxHighlighting = true;
    enableAutosuggestions = true;
    autocd = true;
    dotDir = ".local/share/zsh";
  };

  programs.git = {
    enable = true;

    userName = "Skyler Turner";
    userEmail = "skyler@clicksminuteper.net";

    signing = {
      key = "24D31D3B1B986F33";
      signByDefault = true;
      gpgPath = "gpg2";
    };

    lfs.enable = true;
    delta.enable = true;

    extraConfig = {
      init.defaultBranch = "development";
      color.ui = "auto";
      core.autocrlf = "input";
      pull.rebase = false;
    };
  };

  # This value determines the Home Manager release that your
  # configuration is compatible with. This helps avoid breakage
  # when a new Home Manager release introduces backwards
  # incompatible changes.
  #
  # You can update Home Manager without changing this value. See
  # the Home Manager release notes for a list of state version
  # changes in each release.
  home.stateVersion = "21.11";

  # Let Home Manager install and manage itself.
  programs.home-manager.enable = true;
}
