{ config, pkgs, ... }:

{
  home.username = "youwen";
  home.homeDirectory = "/home/youwen";

  # link the configuration file in current directory to the specified location in home directory
  # home.file.".config/i3/wallpaper.jpg".source = ./wallpaper.jpg;

  # link all files in `./scripts` to `~/.config/i3/scripts`
  # home.file.".config/i3/scripts" = {
  #   source = ./scripts;
  #   recursive = true;   # link recursively
  #   executable = true;  # make all files executable
  # };

  # encode the file content in nix configuration file directly
  # home.file.".xxx".text = ''
  #     xxx
  # '';

  home.file.".config/neofetch/config.conf".source = ./config/neofetch.conf;
  home.file.".wallpapers" = {
    source = ./wallpapers;
    recursive = true;
  };

  # Packages that should be installed to the user profile.
  home.packages = with pkgs; [
    neofetch

    # archives
    zip
    xz
    unzip
    p7zip

    # utils
    nurl # helps fetch git data for nixpkgs

    # nix related
    #
    # it provides the command `nom` works just like `nix`
    # with more details log output
    nix-output-monitor

    # system tools
    pciutils # lspci
    usbutils # lsusb

    # desktop utils
    wl-clipboard
    grim
    slurp
    swappy
    pavucontrol
    swww
    waypaper

    # desktop apps
    dolphin
    bitwarden-desktop
    thunderbird
    spotify
    vesktop
    signal-desktop
    modrinth-app
    lutris
    wine

    # dev tools
    nodePackages_latest.pnpm
    rustfmt
    rust-analyzer

    # desktop ricing
    bibata-cursors
    libsForQt5.qtstyleplugin-kvantum
    libsForQt5.qt5ct
    papirus-icon-theme
    libsForQt5.qt5ct
  ];

  # 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.
  home.stateVersion = "24.05";
  #
  # 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.

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