{pkgs, ...}: {
  services.network-manager-applet.enable = true;
  services.dunst.enable = true;

  home.packages = with pkgs; [
    toybox
    hyprlock
    hyprpicker
    hypridle
    hyprpolkitagent

    dunst
    libnotify
    swayosd

    playerctl

    hyprshade
    swappy
    grimblast

    udiskie

    wl-clipboard
    cliphist
    pavucontrol
    nautilus
    rofi-wayland
    
    wlogout

    (writeShellScriptBin "dontkillsteam" ''
      if [[ $(hyprctl activewindow -j | ${pkgs.jq}/bin/jq -r ".class") == "Steam" ]]; then
        xdotool windowunmap $(xdotool getactivewindow)
      else
        hyprctl dispatch killactive ""
      fi
    '')

    (writeShellScriptBin "screenshot" ''
      restore_shader() {
       if [ -n "$shader" ]; then
       	${pkgs.hyprshade}/bin/hyprshade on "$shader"
       fi
      }

      # Saves the current shader and turns it off
      save_shader() {
      	shader=$(hyprshade current)
      	${pkgs.hyprshade}/bin/hyprshade off
      	trap restore_shader EXIT
      }

      save_shader

      save_file=$(date +'%y%m%d_%Hh%Mm%Ss_screenshot.png')
      temp_screenshot="/tmp/screenshot.png"

      case $1 in
      p) # print all outputs
      	grimblast copysave screen $temp_screenshot && restore_shader && swappy -f $temp_screenshot ;;
      s) # drag to manually snip an area / click on a window to print it
      	grimblast copysave area $temp_screenshot && restore_shader && swappy -f $temp_screenshot ;;
      sf) # frozen screen, drag to manually snip an area / click on a window to print it
      	grimblast --freeze copysave area $temp_screenshot && restore_shader && swappy -f $temp_screenshot ;;
      m) # print focused monitor
      	grimblast copysave output $temp_screenshot && restore_shader && swappy -f $temp_screenshot ;;
      *) # invalid option
      	print_error ;;
      esac

      rm "$temp_screenshot"
    '')

    (writeShellScriptBin "keyboardswitch" ''
      hyprctl switchxkblayout all next
      layMain=$(hyprctl -j devices | ${pkgs.jq}/bin/jq '.keyboards' | ${pkgs.jq}/bin/jq '.[] | select (.main == true)' | awk -F '"' '{if ($2=="active_keymap") print $4}')
      ${libnotify}/bin/notify-send -a "t1" -r 91190 -t 800 "$layMain" -i ~/dotfiles/config/icons/keyboard.svg
    '')

    (writeShellScriptBin "background-switch-random" ''
      directory=$HOME/dotfiles/config/backgrounds/
      monitor=$(hyprctl monitors | grep Monitor | awk '{print $2}')

      if [ -d "$directory" ]; then
          # Use find to include .jpg, .png, and .jpeg files
          random_background=$(find "$directory" -type f \( -name "*.jpg" -o -name "*.png" -o -name "*.jpeg" \) | shuf -n 1)

          hyprctl hyprpaper unload all
          hyprctl hyprpaper preload "$random_background"
          hyprctl hyprpaper wallpaper "$monitor, $random_background"
      fi

    '')
  ];

  programs.rofi = {
    enable = true;
    cycle = true;
    package = pkgs.rofi-wayland;
    location = "center";
  };
}
