{ pkgs, lib, ... }:
let
  battery-limit-script = ''
    start_batt() {
    	echo 80 > /sys/class/power_supply/BAT0/charge_control_end_threshold
    }
    stop_batt() {
    	echo "meow"
    }
  '';
  gpu-limit-frequency = ''
    start_gpu() {
    	${pkgs.intel-gpu-tools}/bin/intel_gpu_frequency -e
    }

    stop_gpu() {
    	${pkgs.intel-gpu-tools}/bin/intel_gpu_frequency -d
    }
  '';
  cpu-power-efficency = ''
    start_cpu_effic() {
    n=$(nproc)
    i=0
    while [ "$i" -lt $n ]; do
    echo 178 | tee  /sys/devices/system/cpu/cpu$i/cpufreq/energy_performance_preference
    echo 8 | tee  /sys/devices/system/cpu/cpu$i/power/energy_perf_bias
    i=$(( i + 1 ))
    done 
    return 0
    }

    stop_cpu_effic() {
    n=$(nproc)
    i=0
    while [ "$i" -lt $n ]; do
    echo "balance_performance" | tee  /sys/devices/system/cpu/cpu$i/cpufreq/energy_performance_preference
    echo 6 | tee  /sys/devices/system/cpu/cpu$i/power/energy_perf_bias
    i=$(( i + 1 ))
    done     
    return 0
    }
  '';
  one-with-all = ''
    #!/bin/sh
    ${battery-limit-script}
    ${gpu-limit-frequency}
    ${cpu-power-efficency}
    start() {
    echo "meow"
    echo "mreoww" > /home/doloro/meow.txt
    start_gpu
    start_batt
    start_cpu_effic
    }
    stop() {
    stop_gpu
    stop_batt
    stop_cpu_effic
    }
    if [ "$1" == "start" ]; then 
    start
    fi
    if [ "$1" == "stop" ]; then
    stop
    fi
  '';
  tuned-auto-profile-config = ''
    	# TuneD rules for recommend_profile.
    #
    # Syntax:
    # [PROFILE1]
    # KEYWORD11=RE11
    # KEYWORD21=RE12
    #
    # [PROFILE2]
    # KEYWORD21=RE21
    # KEYWORD22=RE22

    # KEYWORD can be:
    # virt            - for RE to match output of virt-what
    # system          - for RE to match content of /etc/system-release-cpe
    # process         - for RE to match running processes. It can have arbitrary
    #                   suffix, all process* lines have to match for the PROFILE
    #                   to match (i.e. the AND operator)
    # /FILE           - for RE to match content of the FILE, e.g.:
    #                   '/etc/passwd=.+'. If file doesn't exist, its RE will not
    #                   match.
    # chassis_type    - for RE to match the chassis type as reported by dmidecode
    # syspurpose_role - for RE to match the system role as reported by syspurpose

    # All REs for all KEYWORDs have to match for PROFILE to match (i.e. the AND operator).
    # If 'virt' or 'system' is not specified, it matches for every string.
    # If 'virt' or 'system' is empty, i.e. 'virt=', it matches only empty string (alias for '^$').
    # If several profiles matched, the first match is taken.
    #
    # Limitation:
    # Each profile can be specified only once, because there cannot be
    # multiple sections in the configuration file with the same name
    # (ConfigParser limitation).
    # If there is a need to specify the profile multiple times, unique
    # suffix like ',ANYSTRING' can be used. Everything after the last ','
    # is stripped by the parser, e.g.:
    #
    # [balanced,1]
    # /FILE1=RE1
    #
    # [balanced,2]
    # /FILE2=RE2
    #
    # This will set 'balanced' profile in case there is FILE1 matching RE1 or
    # FILE2 matching RE2 or both.

    # Profile for devices on battery
    [doloro-power-saver]
    virt=
    system=
    /sys/class/power_supply/BAT0/status=Discharging

    # Profile for devices on AC power
    [doloro-balanced]
    virt=
    system=
    /sys/class/power_supply/BAT0/status=Charging

    [atomic-host]
    virt=
    system=.*atomic.*

    [atomic-guest]
    virt=.+
    system=.*atomic.*

    [throughput-performance]
    virt=
    system=.*(computenode|server).*

    [virtual-guest]
    virt=.+

    [balanced]
  '';
in
{
  services.tuned = {
    enable = true;
    profiles = {
      doloro-power-saver = {
        main = {
          include = "powersave, intel-best_power_efficiency_mode";
        };
        script = {
          script = "\${i:PROFILE_DIR}/script.sh";
        };
      };
      doloro-balanced = {
        main = {
          include = "balanced";
        };
        script = {
          script = "${battery-limit-script}/bin/set-battery-limit";
        };
      };
    };
  };
  environment.etc = {
    "tuned/recommend.conf" = {
      text = tuned-auto-profile-config;
    };
    "tuned/profiles/doloro-power-saver/script.sh" = {
      text = "${one-with-all}";
      mode = "0777";
    };
  };
  systemd.services = {
    # Tells tuned "hey, re-eval system state and change profiles accordingly"
    send-sighup-to-tuned = {
      serviceConfig = {
        ExecStart = "${pkgs.killall}/bin/killall -1 .tuned-wrapped";
        Restart = "always";
        RestartSec = "30s";
      };
      wantedBy = [ "multi-user.target" ];
    };
    tuned-auto-profile = {
      description = "Enable Auto Profile in TuneD";
      after = [ "network.target" ]; # Ensure network is up (if needed for TuneD)
      wantedBy = [ "multi-user.target" ]; # Start in the default target mode

      # Command to run
      serviceConfig = {
        ExecStart = "${pkgs.tuned}/bin/tuned-adm auto_profile";
        Restart = "on-failure";
        RestartSec = 5; # Wait 5 seconds before retrying if it fails
        Environment = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; # Ensure PATH is correct
      };
    };
  };
  services.thermald.enable = true;
  services.upower = {
    enable = true;
  };
  boot.kernelParams = [
    # "mem_sleep_default=deep"
    "i915.fastboot=1"
    "pcie_aspm=force"
    "ahci.mobile_lpm_policy=1"
  ];
  services.logind.settings.Login = {
    HandleLidSwitch = "suspend";
    HandleLidSwitchExternalPower = "suspend";
    HandleLidSwitchDocked = "ignore";
  };
  systemd.sleep.extraConfig = ''
        HibernateDelaySec=30min
    		SuspendEstimationSec=120
  '';

  systemd.services.rfkill-sleep-wake = {
    enable = true;
    description = "Using rfkill; disable all rf devices before sleeping.";
    before = [ "sleep.target" ];

    serviceConfig = {
      Type = "oneshot";
      ExecStop = ''${pkgs.utillinux}/bin/rfkill unblock all'';
      ExecStart = ''${pkgs.utillinux}/bin/rfkill block all'';
      RemainAfterExit = true;
    };
    wantedBy = [ "sleep.target" ];
    partOf = [ "sleep.target" ];

  };
  # one of "ignore", "poweroff", "reboot", "halt", "kexec", "suspend", "hibernate", "hybrid-sleep", "suspend-then-hibernate", "lock"
  powerManagement = {
    enable = true;
    # powertop.enable = true;
  };
}
