add Nix flake and documentation (#553)
This commit is contained in:
parent
4628b5d1e1
commit
3e2b779406
76
README.md
76
README.md
|
@ -19,6 +19,7 @@ auto-cpufreq is looking for [co-maintainers & open source developers to help sha
|
||||||
* [Snap store](#snap-store)
|
* [Snap store](#snap-store)
|
||||||
* [auto-cpufreq-installer](#auto-cpufreq-installer)
|
* [auto-cpufreq-installer](#auto-cpufreq-installer)
|
||||||
* [AUR package (Arch/Manjaro Linux)](#aur-package-archmanjaro-linux)
|
* [AUR package (Arch/Manjaro Linux)](#aur-package-archmanjaro-linux)
|
||||||
|
* [NixOS](#nixos)
|
||||||
* [Update using installer](#update-using-auto-cpufreq-installer)
|
* [Update using installer](#update-using-auto-cpufreq-installer)
|
||||||
* [Post Installation](#post-installation)
|
* [Post Installation](#post-installation)
|
||||||
* [Configuring auto-cpufreq](#configuring-auto-cpufreq)
|
* [Configuring auto-cpufreq](#configuring-auto-cpufreq)
|
||||||
|
@ -116,6 +117,81 @@ In case you encounter any problems with `auto-cpufreq-installer`, please [submit
|
||||||
* [Git Package](https://aur.archlinux.org/packages/auto-cpufreq-git)
|
* [Git Package](https://aur.archlinux.org/packages/auto-cpufreq-git)
|
||||||
(For the latest commits/changes)
|
(For the latest commits/changes)
|
||||||
|
|
||||||
|
### NixOS
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Flakes</summary>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
This repo contains a flake that exposes a NixOS Module that manages and offers options for auto-cpufreq. To use it, add the flake as an input to your `flake.nix` file, and enable the module
|
||||||
|
|
||||||
|
```nix
|
||||||
|
# flake.nix
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
# ---Snip---
|
||||||
|
auto-cpufreq = {
|
||||||
|
url = "github:adnanhodzic/auto-cpufreq/nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
# ---Snip---
|
||||||
|
}
|
||||||
|
|
||||||
|
outputs = {nixpkgs, auto-cpufreq, ...} @ inputs: {
|
||||||
|
nixosConfigurations.HOSTNAME = nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = { inherit inputs; };
|
||||||
|
modules = [
|
||||||
|
./configuration.nix
|
||||||
|
auto-cpufreq.nixosModules.default
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Then you can enable the program in your `configuration.nix` file
|
||||||
|
```nix
|
||||||
|
# configuration.nix
|
||||||
|
|
||||||
|
{inputs, pkgs, ...}: {
|
||||||
|
# ---Snip---
|
||||||
|
programs.auto-cpufreq.enable = true;
|
||||||
|
# optionally, you can configure your auto-cpufreq settings, if you have any
|
||||||
|
programs.auto-cpufreq.settings = {
|
||||||
|
charger = {
|
||||||
|
governor = "performance";
|
||||||
|
turbo = "auto";
|
||||||
|
};
|
||||||
|
|
||||||
|
battery = {
|
||||||
|
governor = "powersave";
|
||||||
|
turbo = "auto";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# ---Snip---
|
||||||
|
}
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Nixpkgs</summary>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
There is a nixpkg available but it is more prone to being outdated whereas the flake pulls from the latest commit. You can install it in your `configuration.nix` and enable the system service
|
||||||
|
```nix
|
||||||
|
# configuration.nix
|
||||||
|
|
||||||
|
# ---Snip---
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
auto-cpufreq
|
||||||
|
];
|
||||||
|
|
||||||
|
services.auto-cpufreq.enable = true;
|
||||||
|
# ---Snip---
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
## Post Installation
|
## Post Installation
|
||||||
After installation `auto-cpufreq` will be available as a binary and you can refer to [auto-cpufreq modes and options](https://github.com/AdnanHodzic/auto-cpufreq#auto-cpufreq-modes-and-options) for more information on how to run and configure `auto-cpufreq`.
|
After installation `auto-cpufreq` will be available as a binary and you can refer to [auto-cpufreq modes and options](https://github.com/AdnanHodzic/auto-cpufreq#auto-cpufreq-modes-and-options) for more information on how to run and configure `auto-cpufreq`.
|
||||||
|
|
||||||
|
|
|
@ -191,6 +191,11 @@ elif [ -f /etc/os-release ];then
|
||||||
xbps-install -Sy python3 python3-pip python3-devel python3-setuptools base-devel dmidecode cairo-devel gobject-introspection gcc gtk+3
|
xbps-install -Sy python3 python3-pip python3-devel python3-setuptools base-devel dmidecode cairo-devel gobject-introspection gcc gtk+3
|
||||||
completed
|
completed
|
||||||
;;
|
;;
|
||||||
|
nixos)
|
||||||
|
echo -e "NixOS detected\n"
|
||||||
|
echo -e "This installer is not supported on NixOS.\nPlease refer to the install instructions for NixOS at https://github.com/AdnanHodzic/auto-cpufreq#nixos"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
*) #Any other distro
|
*) #Any other distro
|
||||||
manual_install
|
manual_install
|
||||||
completed
|
completed
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1693355128,
|
||||||
|
"narHash": "sha256-+ZoAny3ZxLcfMaUoLVgL9Ywb/57wP+EtsdNGuXUJrwg=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "a63a64b593dcf2fe05f7c5d666eb395950f36bc9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = {self, nixpkgs}@inputs :
|
||||||
|
let
|
||||||
|
system = "x86_64-linux"; # replace this as needed
|
||||||
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
auto-cpufreq = pkgs.python3Packages.callPackage ./nix/default.nix {};
|
||||||
|
in {
|
||||||
|
packages.${system}.default = auto-cpufreq;
|
||||||
|
|
||||||
|
devShells.${system}.default = pkgs.mkShell {
|
||||||
|
inputsFrom = [ auto-cpufreq ];
|
||||||
|
packages = [ pkgs.python310Packages.pip ];
|
||||||
|
};
|
||||||
|
|
||||||
|
nixosModules.default = import ./nix/module.nix inputs;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
{ lib, python310Packages, fetchFromGitHub, callPackage, pkgs, version ? "git"}:
|
||||||
|
|
||||||
|
python310Packages.buildPythonPackage rec {
|
||||||
|
pname = "auto-cpufreq";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
# src = fetchFromGitHub {
|
||||||
|
# owner = "AdnanHodzic";
|
||||||
|
# repo = pname;
|
||||||
|
# rev = "v${version}";
|
||||||
|
# sha256 = "sha256-ElYzVteBnoz7BevA6j/730BMG0RsmhBQ4PNl9+0Kw4k=";
|
||||||
|
# };
|
||||||
|
src = ../.;
|
||||||
|
|
||||||
|
nativeBuildInputs = with pkgs; [ wrapGAppsHook gobject-introspection ];
|
||||||
|
|
||||||
|
buildInputs = with pkgs; [ gtk3 ];
|
||||||
|
|
||||||
|
propagatedBuildInputs = with python310Packages; [ requests pygobject3 click distro psutil setuptools (callPackage ./pkgs/setuptools-git-versioning.nix {})];
|
||||||
|
|
||||||
|
doCheck = false;
|
||||||
|
pythonImportsCheck = [ "auto_cpufreq" ];
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
|
||||||
|
# patch to prevent script copying and to disable install
|
||||||
|
./patches/prevent-install-and-copy.patch
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
substituteInPlace auto_cpufreq/core.py --replace '/opt/auto-cpufreq/override.pickle' /var/run/override.pickle
|
||||||
|
substituteInPlace scripts/org.auto-cpufreq.pkexec.policy --replace "/opt/auto-cpufreq/venv/bin/auto-cpufreq" $out/bin/auto-cpufreq
|
||||||
|
'';
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
# copy script manually
|
||||||
|
cp scripts/cpufreqctl.sh $out/bin/cpufreqctl.auto-cpufreq
|
||||||
|
|
||||||
|
# systemd service
|
||||||
|
mkdir -p $out/lib/systemd/system
|
||||||
|
cp scripts/auto-cpufreq.service $out/lib/systemd/system
|
||||||
|
substituteInPlace $out/lib/systemd/system/auto-cpufreq.service --replace "/usr/local" $out
|
||||||
|
|
||||||
|
# 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.png
|
||||||
|
|
||||||
|
# polkit policy
|
||||||
|
mkdir -p $out/share/polkit-1/actions
|
||||||
|
cp scripts/org.auto-cpufreq.pkexec.policy $out/share/polkit-1/actions
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://github.com/AdnanHodzic/auto-cpufreq";
|
||||||
|
description = "Automatic CPU speed & power optimizer for Linux";
|
||||||
|
license = licenses.lgpl3Plus;
|
||||||
|
platforms = platforms.linux;
|
||||||
|
maintainers = [ maintainers.Technical27 ];
|
||||||
|
mainProgram = "auto-cpufreq";
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
inputs: { config, lib, pkgs, options, ... }:
|
||||||
|
|
||||||
|
with lib; let
|
||||||
|
|
||||||
|
cfg = config.programs.auto-cpufreq;
|
||||||
|
system = "x86_64-linux";
|
||||||
|
defaultPackage = inputs.self.packages.${system}.default;
|
||||||
|
cfgFilename = "auto-cpufreq.conf";
|
||||||
|
cfgFile = format.generate cfgFilename cfg.settings;
|
||||||
|
|
||||||
|
format = pkgs.formats.ini {};
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
options.programs.auto-cpufreq = {
|
||||||
|
enable = mkEnableOption "Automatic CPU speed & power optimizer for Linux";
|
||||||
|
|
||||||
|
settings = mkOption {
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Configuration for `auto-cpufreq`.
|
||||||
|
|
||||||
|
See its [example configuration file] for supported settings.
|
||||||
|
[example configuration file]: https://github.com/AdnanHodzic/auto-cpufreq/blob/master/auto-cpufreq.conf-example
|
||||||
|
'';
|
||||||
|
|
||||||
|
default = {};
|
||||||
|
type = types.submodule { freeformType = format.type; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
environment.systemPackages = [ defaultPackage ];
|
||||||
|
|
||||||
|
services.auto-cpufreq.enable = true;
|
||||||
|
systemd.services.auto-cpufreq = {
|
||||||
|
overrideStrategy = "asDropin";
|
||||||
|
serviceConfig.ExecStart = lib.mkForce [
|
||||||
|
""
|
||||||
|
"${defaultPackage}/bin/auto-cpufreq --daemon --config ${cfgFile}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,113 @@
|
||||||
|
diff --git a/auto_cpufreq/core.py b/auto_cpufreq/core.py
|
||||||
|
index 99397a9..16869ab 100755
|
||||||
|
--- a/auto_cpufreq/core.py
|
||||||
|
+++ b/auto_cpufreq/core.py
|
||||||
|
@@ -350,29 +350,12 @@ 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):
|
||||||
|
@@ -400,30 +383,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():
|
||||||
|
@@ -463,40 +424,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():
|
|
@ -0,0 +1,11 @@
|
||||||
|
{ fetchPypi, python310Packages}:
|
||||||
|
|
||||||
|
python310Packages.buildPythonPackage rec {
|
||||||
|
pname = "setuptools-git-versioning";
|
||||||
|
version = "1.13.5";
|
||||||
|
src = fetchPypi {
|
||||||
|
inherit pname version;
|
||||||
|
sha256 = "af9ad1e8103b5abb5b128c2db4fef99407328ac9c12f65d3ff9550c4bb39ad1c";
|
||||||
|
};
|
||||||
|
propagatedBuildInputs = with python310Packages; [ toml packaging];
|
||||||
|
}
|
Loading…
Reference in New Issue