diff options
author | isabel <isabel@isabelroses.com> | 2024-05-31 19:49:11 +0100 |
---|---|---|
committer | isabel <isabel@isabelroses.com> | 2024-05-31 19:51:23 +0100 |
commit | aa31715677f0ff3d0c4b430d65c4a7ff8f0eb768 (patch) | |
tree | 1d9781b003e57d410c29d7562f0bc8912a20d5be /pkgs/by-name/au | |
parent | 34b9d656bdf1fd0a8edf9b08ba2313f3ad84ee7d (diff) |
auto-cpufreq: move to pkgs/by-name
Diffstat (limited to 'pkgs/by-name/au')
-rw-r--r-- | pkgs/by-name/au/auto-cpufreq/fix-version-output.patch | 33 | ||||
-rw-r--r-- | pkgs/by-name/au/auto-cpufreq/package.nix | 100 | ||||
-rw-r--r-- | pkgs/by-name/au/auto-cpufreq/prevent-install-and-copy.patch | 162 | ||||
-rw-r--r-- | pkgs/by-name/au/auto-cpufreq/prevent-update.patch | 152 |
4 files changed, 447 insertions, 0 deletions
diff --git a/pkgs/by-name/au/auto-cpufreq/fix-version-output.patch b/pkgs/by-name/au/auto-cpufreq/fix-version-output.patch new file mode 100644 index 0000000000000..be21ca889081d --- /dev/null +++ b/pkgs/by-name/au/auto-cpufreq/fix-version-output.patch @@ -0,0 +1,33 @@ +diff --git a/auto_cpufreq/core.py b/auto_cpufreq/core.py +index 58cedb7..89e77a4 100755 +--- a/auto_cpufreq/core.py ++++ b/auto_cpufreq/core.py +@@ -136,26 +136,8 @@ except PermissionError: + + # display running version of auto-cpufreq + def app_version(): +- +- print("auto-cpufreq version: ", end="") +- +- # snap package +- if os.getenv("PKG_MARKER") == "SNAP": +- print(getoutput(r"echo \(Snap\) $SNAP_VERSION")) +- # aur package +- elif dist_name in ["arch", "manjaro", "garuda"]: +- aur_pkg_check = call("pacman -Qs auto-cpufreq > /dev/null", shell=True) +- if aur_pkg_check == 1: +- print(get_formatted_version()) +- else: +- print(getoutput("pacman -Qi auto-cpufreq | grep Version")) +- else: +- # source code (auto-cpufreq-installer) +- try: +- print(get_formatted_version()) +- except Exception as e: +- print(repr(e)) +- pass ++ print("auto-cpufreq version: @version@") ++ print("Git commit: v@version@") + + def check_for_update(): + # returns True if a new release is available from the GitHub repo diff --git a/pkgs/by-name/au/auto-cpufreq/package.nix b/pkgs/by-name/au/auto-cpufreq/package.nix new file mode 100644 index 0000000000000..4121096359c83 --- /dev/null +++ b/pkgs/by-name/au/auto-cpufreq/package.nix @@ -0,0 +1,100 @@ +{ + lib, + python3Packages, + fetchFromGitHub, + substituteAll, + gobject-introspection, + wrapGAppsHook3, + gtk3, +}: +python3Packages.buildPythonPackage rec { + pname = "auto-cpufreq"; + version = "2.3.0"; + format = "pyproject"; + + src = fetchFromGitHub { + owner = "AdnanHodzic"; + repo = "auto-cpufreq"; + rev = "v${version}"; + hash = "sha256-Bet/WOVveLIA+0Mvly4AsielR+r/AJXIgHdWrtc7i/U="; + }; + + nativeBuildInputs = [ + gobject-introspection + wrapGAppsHook3 + ]; + + buildInputs = [ + gtk3 + python3Packages.poetry-core + ]; + + propagatedBuildInputs = with python3Packages; [ + click + distro + psutil + pygobject3 + poetry-dynamic-versioning + setuptools + pyinotify + ]; + + doCheck = false; + pythonImportsCheck = [ "auto_cpufreq" ]; + + patches = [ + # hardcodes version output + (substituteAll { + src = ./fix-version-output.patch; + inherit version; + }) + + # patch to prevent script copying and to disable install + ./prevent-install-and-copy.patch + # patch to prevent update + ./prevent-update.patch + ]; + + postPatch = '' + substituteInPlace auto_cpufreq/core.py \ + --replace-fail '/opt/auto-cpufreq/override.pickle' /var/run/override.pickle + substituteInPlace scripts/org.auto-cpufreq.pkexec.policy \ + --replace-fail "/opt/auto-cpufreq/venv/bin/auto-cpufreq" $out/bin/auto-cpufreq + substituteInPlace auto_cpufreq/gui/app.py auto_cpufreq/gui/objects.py \ + --replace-fail "/usr/local/share/auto-cpufreq/images/icon.png" $out/share/pixmaps/auto-cpufreq.png + substituteInPlace auto_cpufreq/gui/app.py \ + --replace-fail "/usr/local/share/auto-cpufreq/scripts/style.css" $out/share/auto-cpufreq/scripts/style.css + ''; + + postInstall = '' + # copy script manually + cp ${src}/scripts/cpufreqctl.sh $out/bin/cpufreqctl.auto-cpufreq + + # copy css file + mkdir -p $out/share/auto-cpufreq/scripts + cp scripts/style.css $out/share/auto-cpufreq/scripts/style.css + + # systemd service + mkdir -p $out/lib/systemd/system + cp ${src}/scripts/auto-cpufreq.service $out/lib/systemd/system + + # desktop icon + mkdir -p $out/share/applications + mkdir $out/share/pixmaps + cp scripts/auto-cpufreq-gtk.desktop $out/share/applications + cp images/icon.png $out/share/pixmaps/auto-cpufreq.python3Packages + + # polkit policy + mkdir -p $out/share/polkit-1/actions + cp scripts/org.auto-cpufreq.pkexec.policy $out/share/polkit-1/actions + ''; + + meta = { + mainProgram = "auto-cpufreq"; + homepage = "https://github.com/AdnanHodzic/auto-cpufreq"; + description = "Automatic CPU speed & power optimizer for Linux"; + license = lib.licenses.lgpl3Plus; + platforms = lib.platforms.linux; + maintainers = with lib.maintainers; [ Technical27 ]; + }; +} diff --git a/pkgs/by-name/au/auto-cpufreq/prevent-install-and-copy.patch b/pkgs/by-name/au/auto-cpufreq/prevent-install-and-copy.patch new file mode 100644 index 0000000000000..2b3c9de1b6b07 --- /dev/null +++ b/pkgs/by-name/au/auto-cpufreq/prevent-install-and-copy.patch @@ -0,0 +1,162 @@ +diff --git a/auto_cpufreq/bin/auto_cpufreq.py b/auto_cpufreq/bin/auto_cpufreq.py +index 4343b8d..dc286f6 100755 +--- a/auto_cpufreq/bin/auto_cpufreq.py ++++ b/auto_cpufreq/bin/auto_cpufreq.py +@@ -199,41 +199,9 @@ def main(config, daemon, debug, update, install, remove, live, log, monitor, sta + print("https://github.com/AdnanHodzic/auto-cpufreq/#donate") + footer() + elif install: +- if os.getenv("PKG_MARKER") == "SNAP": +- root_check() +- running_daemon_check() +- gnome_power_detect_snap() +- tlp_service_detect_snap() +- bluetooth_notif_snap() +- gov_check() +- run("snapctl set daemon=enabled", shell=True) +- run("snapctl start --enable auto-cpufreq", shell=True) +- deploy_complete_msg() +- else: +- root_check() +- running_daemon_check() +- gov_check() +- deploy_daemon() +- deploy_complete_msg() ++ print("install is disabled in the nix package") + elif remove: +- if os.getenv("PKG_MARKER") == "SNAP": +- root_check() +- run("snapctl set daemon=disabled", shell=True) +- run("snapctl stop --disable auto-cpufreq", shell=True) +- if auto_cpufreq_stats_path.exists(): +- if auto_cpufreq_stats_file is not None: +- auto_cpufreq_stats_file.close() +- +- auto_cpufreq_stats_path.unlink() +- # ToDo: +- # {the following snippet also used in --update, update it there too(if required)} +- # * undo bluetooth boot disable +- gnome_power_rm_reminder_snap() +- remove_complete_msg() +- else: +- root_check() +- remove_daemon() +- remove_complete_msg() ++ print("remove is disabled in the nix package") + elif update: + root_check() + custom_dir = "/opt/auto-cpufreq/source" +diff --git a/auto_cpufreq/core.py b/auto_cpufreq/core.py +index 58cedb7..c50b0e1 100755 +--- a/auto_cpufreq/core.py ++++ b/auto_cpufreq/core.py +@@ -391,30 +391,13 @@ def get_current_gov(): + + + def cpufreqctl(): +- """ +- deploy cpufreqctl script +- """ +- +- # detect if running on a SNAP +- if os.getenv("PKG_MARKER") == "SNAP": +- pass +- else: +- # deploy cpufreqctl.auto-cpufreq script +- if not os.path.isfile("/usr/local/bin/cpufreqctl.auto-cpufreq"): +- shutil.copy(SCRIPTS_DIR / "cpufreqctl.sh", "/usr/local/bin/cpufreqctl.auto-cpufreq") ++ # scripts are already in the correct place ++ pass + + + def cpufreqctl_restore(): +- """ +- remove cpufreqctl.auto-cpufreq script +- """ +- # detect if running on a SNAP +- if os.getenv("PKG_MARKER") == "SNAP": +- pass +- else: +- if os.path.isfile("/usr/local/bin/cpufreqctl.auto-cpufreq"): +- os.remove("/usr/local/bin/cpufreqctl.auto-cpufreq") +- ++ # no need to restore ++ pass + + def footer(l=79): + print("\n" + "-" * l + "\n") +@@ -441,30 +424,8 @@ def remove_complete_msg(): + + + def deploy_daemon(): +- print("\n" + "-" * 21 + " Deploying auto-cpufreq as a daemon " + "-" * 22 + "\n") +- +- # deploy cpufreqctl script func call +- cpufreqctl() +- +- # turn off bluetooth on boot +- bluetooth_disable() +- +- auto_cpufreq_stats_path.touch(exist_ok=True) +- +- print("\n* Deploy auto-cpufreq install script") +- shutil.copy(SCRIPTS_DIR / "auto-cpufreq-install.sh", "/usr/local/bin/auto-cpufreq-install") +- +- print("\n* Deploy auto-cpufreq remove script") +- shutil.copy(SCRIPTS_DIR / "auto-cpufreq-remove.sh", "/usr/local/bin/auto-cpufreq-remove") +- +- # output warning if gnome power profile is running +- gnome_power_detect_install() +- gnome_power_svc_disable() +- +- # output warning if TLP service is detected +- tlp_service_detect() +- +- call("/usr/local/bin/auto-cpufreq-install", shell=True) ++ # prevent needless copying and system changes ++ pass + + + def deploy_daemon_performance(): +@@ -504,40 +465,7 @@ def deploy_daemon_performance(): + + # remove auto-cpufreq daemon + def remove_daemon(): +- +- # check if auto-cpufreq is installed +- if not os.path.exists("/usr/local/bin/auto-cpufreq-remove"): +- print("\nauto-cpufreq daemon is not installed.\n") +- sys.exit(1) +- +- print("\n" + "-" * 21 + " Removing auto-cpufreq daemon " + "-" * 22 + "\n") +- +- # turn on bluetooth on boot +- bluetooth_enable() +- +- # output warning if gnome power profile is stopped +- gnome_power_rm_reminder() +- gnome_power_svc_enable() +- +- # run auto-cpufreq daemon remove script +- call("/usr/local/bin/auto-cpufreq-remove", shell=True) +- +- # remove auto-cpufreq-remove +- os.remove("/usr/local/bin/auto-cpufreq-remove") +- +- # delete override pickle if it exists +- if os.path.exists(governor_override_state): +- os.remove(governor_override_state) +- +- # delete stats file +- if auto_cpufreq_stats_path.exists(): +- if auto_cpufreq_stats_file is not None: +- auto_cpufreq_stats_file.close() +- +- auto_cpufreq_stats_path.unlink() +- +- # restore original cpufrectl script +- cpufreqctl_restore() ++ pass + + + def gov_check(): diff --git a/pkgs/by-name/au/auto-cpufreq/prevent-update.patch b/pkgs/by-name/au/auto-cpufreq/prevent-update.patch new file mode 100644 index 0000000000000..840c7230313d7 --- /dev/null +++ b/pkgs/by-name/au/auto-cpufreq/prevent-update.patch @@ -0,0 +1,152 @@ +diff --git a/auto_cpufreq/bin/auto_cpufreq.py b/auto_cpufreq/bin/auto_cpufreq.py +index 4343b8d..183c2e9 100755 +--- a/auto_cpufreq/bin/auto_cpufreq.py ++++ b/auto_cpufreq/bin/auto_cpufreq.py +@@ -235,47 +235,7 @@ def main(config, daemon, debug, update, install, remove, live, log, monitor, sta + remove_daemon() + remove_complete_msg() + elif update: +- root_check() +- custom_dir = "/opt/auto-cpufreq/source" +- for arg in sys.argv: +- if arg.startswith("--update="): +- custom_dir = arg.split("=")[1] +- sys.argv.remove(arg) +- +- if "--update" in sys.argv: +- update = True +- sys.argv.remove("--update") +- if len(sys.argv) == 2: +- custom_dir = sys.argv[1] +- +- if os.getenv("PKG_MARKER") == "SNAP": +- print("Detected auto-cpufreq was installed using snap") +- # refresh snap directly using this command +- # path wont work in this case +- +- print("Please update using snap package manager, i.e: `sudo snap refresh auto-cpufreq`.") +- #check for AUR +- elif subprocess.run(["bash", "-c", "command -v pacman >/dev/null 2>&1"]).returncode == 0 and subprocess.run(["bash", "-c", "pacman -Q auto-cpufreq >/dev/null 2>&1"]).returncode == 0: +- print("Arch-based distribution with AUR support detected. Please refresh auto-cpufreq using your AUR helper.") +- else: +- is_new_update = check_for_update() +- if not is_new_update: +- return +- ans = input("Do you want to update auto-cpufreq to the latest release? [Y/n]: ").strip().lower() +- if not os.path.exists(custom_dir): +- os.makedirs(custom_dir) +- if os.path.exists(os.path.join(custom_dir, "auto-cpufreq")): +- shutil.rmtree(os.path.join(custom_dir, "auto-cpufreq")) +- if ans in ['', 'y', 'yes']: +- remove_daemon() +- remove_complete_msg() +- new_update(custom_dir) +- print("enabling daemon") +- run(["auto-cpufreq", "--install"]) +- print("auto-cpufreq is installed with the latest version") +- run(["auto-cpufreq", "--version"]) +- else: +- print("Aborted") ++ print("update is disabled in the nix package") + + elif completions: + if completions == "bash": +diff --git a/auto_cpufreq/core.py b/auto_cpufreq/core.py +index 58cedb7..8b44712 100755 +--- a/auto_cpufreq/core.py ++++ b/auto_cpufreq/core.py +@@ -17,8 +17,7 @@ import importlib.metadata + from math import isclose + from pathlib import Path + from shutil import which +-from subprocess import getoutput, call, run, check_output, DEVNULL +-import requests ++from subprocess import getoutput, call, run, DEVNULL + import re + + # execution timestamp used in countdown func +@@ -158,55 +157,7 @@ def app_version(): + pass + + def check_for_update(): +- # returns True if a new release is available from the GitHub repo +- +- # Specify the repository and package name +- # IT IS IMPORTANT TO THAT IF THE REPOSITORY STRUCTURE IS CHANGED, THE FOLLOWING FUNCTION NEEDS TO BE UPDATED ACCORDINGLY +- # Fetch the latest release information from GitHub API +- latest_release_url = f"https://api.github.com/repos/AdnanHodzic/auto-cpufreq/releases/latest" +- try: +- response = requests.get(latest_release_url) +- if response.status_code == 200: +- latest_release = response.json() +- else: +- message = response.json().get("message") +- print("Error fetching recent release!") +- if message is not None and message.startswith("API rate limit exceeded"): +- print("GitHub Rate limit exceeded. Please try again later within 1 hour or use different network/VPN.") +- else: +- print("Unexpected status code:", response.status_code) +- return False +- except (requests.exceptions.ConnectionError, requests.exceptions.Timeout, +- requests.exceptions.RequestException, requests.exceptions.HTTPError) as err: +- print("Error Connecting to server!") +- return False +- +- latest_version = latest_release.get("tag_name") +- +- if latest_version is not None: +- # Get the current version of auto-cpufreq +- # Extract version number from the output string +- output = check_output(['auto-cpufreq', '--version']).decode('utf-8') +- try: +- version_line = next((re.search(r'\d+\.\d+\.\d+', line).group() for line in output.split('\n') if line.startswith('auto-cpufreq version')), None) +- except AttributeError: +- print("Error Retrieving Current Version!") +- exit(1) +- installed_version = "v" + version_line +- #Check whether the same is installed or not +- # Compare the latest version with the installed version and perform update if necessary +- if latest_version == installed_version: +- print("auto-cpufreq is up to date") +- return False +- else: +- print(f"Updates are available,\nCurrent version: {installed_version}\nLatest version: {latest_version}") +- print("Note that your previous custom settings might be erased with the following update") +- return True +- else: +- # Handle the case where "tag_name" key doesn't exist +- print("Malformed Released data!\nReinstall manually or Open an issue on GitHub for help!") +- +- ++ pass + + def new_update(custom_dir): + os.chdir(custom_dir) +diff --git a/poetry.lock b/poetry.lock +index 2a99ca6..9bc26e2 100644 +--- a/poetry.lock ++++ b/poetry.lock +@@ -1,4 +1,4 @@ +-# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. ++# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + + [[package]] + name = "attrs" +@@ -1300,4 +1300,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p + [metadata] + lock-version = "2.0" + python-versions = "^3.8" +-content-hash = "ee73b2db6a43cac87120f38c93d0a8a297bec52f1346b55bc0ca2992aa464482" ++content-hash = "1ba0c404ffea01a611e7c74f9c104de44a914b0a6fad2350470f15880931ae42" +diff --git a/pyproject.toml b/pyproject.toml +index 876d80c..7190356 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -25,7 +25,6 @@ python = "^3.8" + psutil = {git = "https://github.com/giampaolo/psutil.git", rev = "4cf56e08c1bc883ec89758834b50954380759858"} + click = "^8.1.0" + distro = "^1.8.0" +-requests = "^2.31.0" + PyGObject = "^3.46.0" + pyinotify = {git = "https://github.com/shadeyg56/pyinotify-3.12"} + |