{ config, pkgs, inputs, catppuccinFlavor, ... }:
{ imports = [
    inputs.spicetify-nix.homeManagerModules.default
  ];

  programs.chromium = {
    enable = true;
    package = pkgs.brave;
    extensions = [
      { id = "mnjggcdmjocbbbhaepdhchncahnbgone"; } # Sponsor Block Youtube
      { id = "clngdbkpkpeebahjckkjfobafhncgmne"; } # Stylus
      { id = "gppongmhjkpfnbhagpmjfkannfbllamg"; } # Wappalyzer
      { id = "oldceeleldhonbafppcapldpdifcinji"; } # LanguageTool
    ];
  };

  programs.git = {
    enable = true;
    userName  = "Lorenz Hohmermuth";
    userEmail = "loflho@proton.me";
    extraConfig = {
      push = { autoSetupRemote = true; };
      credential.helper = "${
          pkgs.git.override { withLibsecret = true; }
        }/bin/git-credential-libsecret";
    };
  };

  #spotify

  programs.spicetify =
  let
    spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
  in
  {
    enable = true;
    enabledExtensions = with spicePkgs.extensions; [
      adblock
      hidePodcasts
      shuffle # shuffle+ (special characters are sanitized out of extension names)
    ];
    theme = spicePkgs.themes.catppuccin;
    colorScheme = catppuccinFlavor;
  };

  #themes
  catppuccin.flavor = catppuccinFlavor;
  catppuccin.enable = true;

  gtk = {
    enable = true;
    catppuccin = {
      enable = true;
      size = "standard";
      tweaks = [ "normal" ];
    };
    iconTheme = {
        package = pkgs.papirus-icon-theme;
        name = "Papirus-Dark";
    };
  };

  qt = {
    enable = true;
    platformTheme.name = "kvantum";
    style.name = "kvantum";
  };

  # Home Manager needs a bit of information about you and the paths it should
  # manage.
  home.username = "lorenz";
  home.homeDirectory = "/home/lorenz";

  # 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 should not change this value, even if you update Home Manager. If you do
  # want to update the value, then make sure to first check the Home Manager
  # release notes.
  home.stateVersion = "24.05"; # Please read the comment before changing.
  

  # The home.packages option allows you to install Nix packages into your
  # environment.
  nixpkgs.config.allowUnfree = true;
  home.packages = [
    pkgs.git-credential-manager
    pkgs.zsh # shell
    pkgs.fzf # fuzzy search
    pkgs.oh-my-zsh # prompt
    pkgs.picom # compositoe
    pkgs.ranger # file manager

    pkgs.pcmanfm # gui file manager
    pkgs.lxmenu-data # to be offered a list of "Installed applications" when opening a file.
    pkgs.shared-mime-info # to recognise different file types.

    pkgs.superfile # file manager
    pkgs.obsidian # notes
    pkgs.keepassxc # passwords
    pkgs.devdocs-desktop # docs
    pkgs.spicetify-cli # spotify
    pkgs.gimp

    pkgs.libreoffice-qt # office
    pkgs.hunspell # spell check
    pkgs.hunspellDicts.uk_UA
    pkgs.hunspellDicts.de_CH

    pkgs.godot_4
    pkgs.discord
    pkgs.betterdiscordctl
    pkgs.aseprite

    pkgs.flameshot

    pkgs.xournalpp

    pkgs.unzip
    pkgs.textsnatcher
    pkgs.copyq

    # # It is sometimes useful to fine-tune packages, for example, by applying
    # # overrides. You can do that directly here, just don't forget the
    # # parentheses. Maybe you want to install Nerd Fonts with a limited number of
    # # fonts?
    # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })

    # # You can also create simple shell scripts directly inside your
    # # configuration. For example, this adds a command 'my-hello' to your
    # # environment:
    # (pkgs.writeShellScriptBin "my-hello" ''
    #   echo "Hello, ${config.home.username}!"
    # '')
  ];

  # Home Manager is pretty good at managing dotfiles. The primary way to manage
  # plain files is through 'home.file'.
  home.file = {
    # # Building this configuration will create a copy of 'dotfiles/screenrc' in
    # # the Nix store. Activating the configuration will then make '~/.screenrc' a
    # # symlink to the Nix store copy.
    # ".screenrc".source = dotfiles/screenrc;

    # # You can also set the file content immediately.
    # ".gradle/gradle.properties".text = ''
    #   org.gradle.console=verbose
    #   org.gradle.daemon.idletimeout=3600000
    # '';
  };

  # Home Manager can also manage your environment variables through
  # 'home.sessionVariables'. These will be explicitly sourced when using a
  # shell provided by Home Manager. If you don't want to manage your shell
  # through Home Manager then you have to manually source 'hm-session-vars.sh'
  # located at either
  #
  #  ~/.nix-profile/etc/profile.d/hm-session-vars.sh
  #
  # or
  #
  #  ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
  #
  # or
  #
  #  /etc/profiles/per-user/lorenz/etc/profile.d/hm-session-vars.sh
  #
  home.sessionVariables = {
    # EDITOR = "emacs";
  };

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