diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7606769..7244e92 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,11 +30,11 @@ jobs: include: - os: ubuntu-latest target: x86_64-unknown-linux-gnu - name: watt-linux-amd64 + name: superfreq-linux-amd64 cross: false - os: ubuntu-latest target: aarch64-unknown-linux-gnu - name: watt-linux-arm64 + name: superfreq-linux-arm64 cross: true runs-on: ${{ matrix.os }} @@ -88,15 +88,16 @@ jobs: uses: robinraju/release-downloader@v1 with: tag: ${{ github.ref_name }} - fileName: "watt-*" + fileName: "superfreq-*" out-file-path: "." - name: Generate checksums run: | - sha256sum watt-* > SHA256SUMS + sha256sum superfreq-* > SHA256SUMS - name: Upload Checksums uses: softprops/action-gh-release@v2 with: token: ${{ secrets.GITHUB_TOKEN }} files: SHA256SUMS + diff --git a/README.md b/README.md index e7f32ed..c1aff74 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- Watt + Superfreq

@@ -8,17 +8,17 @@

- Synopsis
+ Synopsis
Features | Usage
Contributing
-## What is Watt +## What is Superfreq -Watt is a modern CPU frequency and power management utility for Linux systems. -It provides intelligent control of CPU governors, frequencies, and power-saving -features, helping optimize both performance and battery life. +Superfreq is a modern CPU frequency and power management utility for Linux +systems. It provides intelligent control of CPU governors, frequencies, and +power-saving features, helping optimize both performance and battery life. It is greatly inspired by auto-cpufreq, but rewritten from ground up to provide a smoother experience with a more efficient and more correct codebase. Some @@ -48,81 +48,81 @@ but most common usecases are already implemented. ```bash # Show current system information -watt info +superfreq info # Run as a daemon in the background -sudo watt daemon +sudo superfreq daemon # Run with verbose logging -sudo watt daemon --verbose +sudo superfreq daemon --verbose # Display comprehensive debug information -watt debug +superfreq debug ``` ### CPU Governor Control ```bash # Set CPU governor for all cores -sudo watt set-governor performance +sudo superfreq set-governor performance # Set CPU governor for a specific core -sudo watt set-governor powersave --core-id 0 +sudo superfreq set-governor powersave --core-id 0 # Force a specific governor mode persistently -sudo watt force-governor performance +sudo superfreq force-governor performance ``` ### Turbo Boost Management ```bash # Always enable turbo boost -sudo watt set-turbo always +sudo superfreq set-turbo always # Disable turbo boost -sudo watt set-turbo never +sudo superfreq set-turbo never -# Let Watt manage turbo boost based on conditions -sudo watt set-turbo auto +# Let Superfreq manage turbo boost based on conditions +sudo superfreq set-turbo auto ``` ### Power and Performance Settings ```bash # Set Energy Performance Preference (EPP) -sudo watt set-epp performance +sudo superfreq set-epp performance # Set Energy Performance Bias (EPB) -sudo watt set-epb 4 +sudo superfreq set-epb 4 # Set ACPI platform profile -sudo watt set-platform-profile balanced +sudo superfreq set-platform-profile balanced ``` ### Frequency Control ```bash # Set minimum CPU frequency (in MHz) -sudo watt set-min-freq 800 +sudo superfreq set-min-freq 800 # Set maximum CPU frequency (in MHz) -sudo watt set-max-freq 3000 +sudo superfreq set-max-freq 3000 # Set per-core frequency limits -sudo watt set-min-freq 1200 --core-id 0 -sudo watt set-max-freq 2800 --core-id 1 +sudo superfreq set-min-freq 1200 --core-id 0 +sudo superfreq set-max-freq 2800 --core-id 1 ``` ### Battery Management ```bash # Set battery charging thresholds to extend battery lifespan -sudo watt set-battery-thresholds 40 80 # Start charging at 40%, stop at 80% +sudo superfreq set-battery-thresholds 40 80 # Start charging at 40%, stop at 80% ``` Battery charging thresholds help extend battery longevity by preventing constant charging to 100%. Different laptop vendors implement this feature differently, -but Watt attempts to support multiple vendor implementations including: +but Superfreq attempts to support multiple vendor implementations including: - Lenovo ThinkPad/IdeaPad (Standard implementation) - ASUS laptops @@ -135,12 +135,12 @@ more than issue reports, as supporting hardware _needs_ hardware. ## Configuration -Watt uses TOML configuration files. Default locations: +Superfreq uses TOML configuration files. Default locations: -- `/etc/xdg/watt/config.toml` -- `/etc/watt.toml` +- `/etc/xdg/superfreq/config.toml` +- `/etc/superfreq.toml` -You can also specify a custom path by setting the `WATT_CONFIG` environment +You can also specify a custom path by setting the `SUPERFREQ_CONFIG` environment variable. ### Sample Configuration @@ -214,7 +214,7 @@ throttle_on_battery = true # Logging level: Error, Warning, Info, Debug log_level = "Info" # Optional stats file path -stats_file_path = "/var/run/watt-stats" +stats_file_path = "/var/run/superfreq-stats" # Optional: List of power supplies to ignore [power_supply_ignore_list] @@ -224,14 +224,14 @@ mouse_battery = "hid-12:34:56:78:90:ab-battery" ## Advanced Features -Those are the more advanced features of Watt that some users might be more +Those are the more advanced features of Superfreq that some users might be more inclined to use than others. If you have a use-case that is not covered, please create an issue. ### Dynamic Turbo Boost Management -When using `turbo = "auto"` with `enable_auto_turbo = true`, Watt dynamically -controls CPU turbo boost based on: +When using `turbo = "auto"` with `enable_auto_turbo = true`, Superfreq +dynamically controls CPU turbo boost based on: - **CPU Load Thresholds**: Enables turbo when load exceeds `load_threshold_high` (default 70%), disables when below `load_threshold_low` (default 30%) @@ -256,21 +256,21 @@ performance for demanding tasks while conserving energy during light workloads. The table below explains how different combinations of `turbo` and `enable_auto_turbo` settings affect CPU turbo behavior: -| Setting | `enable_auto_turbo = true` | `enable_auto_turbo = false` | -| ------------------ | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | -| `turbo = "always"` | **Always enabled**
Turbo is always active regardless of CPU load or temperature | **Always enabled**
Turbo is always active regardless of CPU load or temperature | -| `turbo = "never"` | **Always disabled**
Turbo is always disabled regardless of CPU load or temperature | **Always disabled**
Turbo is always disabled regardless of CPU load or temperature | -| `turbo = "auto"` | **Dynamically managed**
Watt enables/disables turbo based on CPU load and temperature thresholds | **System default**
Turbo is reset to system's default enabled state and is managed by the hardware/kernel | +| Setting | `enable_auto_turbo = true` | `enable_auto_turbo = false` | +| ------------------ | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | +| `turbo = "always"` | **Always enabled**
Turbo is always active regardless of CPU load or temperature | **Always enabled**
Turbo is always active regardless of CPU load or temperature | +| `turbo = "never"` | **Always disabled**
Turbo is always disabled regardless of CPU load or temperature | **Always disabled**
Turbo is always disabled regardless of CPU load or temperature | +| `turbo = "auto"` | **Dynamically managed**
Superfreq enables/disables turbo based on CPU load and temperature thresholds | **System default**
Turbo is reset to system's default enabled state and is managed by the hardware/kernel | > [!NOTE] -> When `turbo = "auto"` and `enable_auto_turbo = false`, Watt ensures that any -> previous turbo state restrictions are removed, allowing the hardware/kernel to -> manage turbo behavior according to its default algorithms. +> When `turbo = "auto"` and `enable_auto_turbo = false`, Superfreq ensures that +> any previous turbo state restrictions are removed, allowing the +> hardware/kernel to manage turbo behavior according to its default algorithms. ### Adaptive Polling -Watt includes a "sophisticated" (euphemism for complicated) adaptive polling -system to try and maximize power efficiency +Superfreq includes a "sophisticated" (euphemism for complicated) adaptive +polling system to try and maximize power efficiency - **Battery Discharge Analysis** - Automatically adjusts polling frequency based on the battery discharge rate, reducing system activity when battery is @@ -294,8 +294,8 @@ idle periods, while maintaining responsiveness when needed. ### Power Supply Filtering -Configure Watt to ignore certain power supplies (like peripheral batteries) that -might interfere with power state detection. +Configure Superfreq to ignore certain power supplies (like peripheral batteries) +that might interfere with power state detection. ## Troubleshooting @@ -319,11 +319,11 @@ Not all features are available on all hardware: 2. **CPU frequencies fluctuating**: May be due to thermal throttling 3. **Missing CPU information**: Verify kernel module support for your CPU -While reporting issues, please attach the results from `watt debug`. +While reporting issues, please attach the results from `superfreq debug`. ## Contributing -Contributions to Watt are always welcome! Whether it's bug reports, feature +Contributions to Superfreq are always welcome! Whether it's bug reports, feature requests, or code contributions, please feel free to contribute. > [!NOTE] @@ -357,5 +357,5 @@ before committing to catch possible code smell early. ## License -Watt is available under [Mozilla Public License v2.0](LICENSE) for your +Superfreq is available under [Mozilla Public License v2.0](LICENSE) for your convenience, and at our expense. Please see the license file for more details. diff --git a/flake.nix b/flake.nix index d7b9cbc..59bc72c 100644 --- a/flake.nix +++ b/flake.nix @@ -14,16 +14,16 @@ }); in { overlays = { - watt = final: _: { - watt = final.callPackage ./nix/package.nix {}; + superfreq = final: _: { + superfreq = final.callPackage ./nix/package.nix {}; }; - default = self.overlays.watt; + default = self.overlays.superfreq; }; packages = nixpkgs.lib.mapAttrs (system: pkgs: { - inherit (pkgs) watt; - default = self.packages.${system}.watt; + inherit (pkgs) superfreq; + default = self.packages.${system}.superfreq; }) pkgsForEach; @@ -34,8 +34,8 @@ pkgsForEach; nixosModules = { - watt = import ./nix/module.nix inputs; - default = self.nixosModules.watt; + superfreq = import ./nix/module.nix inputs; + default = self.nixosModules.superfreq; }; formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.alejandra); diff --git a/nix/module.nix b/nix/module.nix index 65ff310..f94d262 100644 --- a/nix/module.nix +++ b/nix/module.nix @@ -10,32 +10,32 @@ inputs: { inherit (lib.lists) optional; inherit (lib.meta) getExe; - cfg = config.services.watt; + cfg = config.services.superfreq; format = pkgs.formats.toml {}; - cfgFile = format.generate "watt-config.toml" cfg.settings; + cfgFile = format.generate "superfreq-config.toml" cfg.settings; in { - options.services.watt = { + options.services.superfreq = { enable = mkEnableOption "Automatic CPU speed & power optimizer for Linux"; - package = mkPackageOption inputs.self.packages.${pkgs.stdenv.system} "watt" { + package = mkPackageOption inputs.self.packages.${pkgs.stdenv.system} "superfreq" { pkgsText = "self.packages.\${pkgs.stdenv.system}"; }; settings = mkOption { default = {}; type = submodule {freeformType = format.type;}; - description = "Configuration for Watt."; + description = "Configuration for Superfreq."; }; }; config = mkIf cfg.enable { environment.systemPackages = [cfg.package]; - # This is necessary for the Watt CLI. The environment variable + # This is necessary for the Superfreq CLI. The environment variable # passed to the systemd service will take priority in read order. - environment.etc."watt.toml".source = cfgFile; + environment.etc."superfreq.toml".source = cfgFile; - systemd.services.watt = { + systemd.services.superfreq = { wantedBy = ["multi-user.target"]; conflicts = [ "auto-cpufreq.service" @@ -45,12 +45,12 @@ in { "thermald.service" ]; serviceConfig = { - Environment = optional (cfg.settings != {}) ["WATT_CONFIG=${cfgFile}"]; + Environment = optional (cfg.settings != {}) ["SUPERFREQ_CONFIG=${cfgFile}"]; WorkingDirectory = ""; ExecStart = "${getExe cfg.package} daemon --verbose"; Restart = "on-failure"; - RuntimeDirectory = "watt"; + RuntimeDirectory = "superfreq"; RuntimeDirectoryMode = "0755"; }; }; @@ -60,14 +60,14 @@ in { assertion = !config.services.power-profiles-daemon.enable; message = '' You have set services.power-profiles-daemon.enable = true; - which conflicts with Watt. + which conflicts with Superfreq. ''; } { assertion = !config.services.auto-cpufreq.enable; message = '' You have set services.auto-cpufreq.enable = true; - which conflicts with Watt. + which conflicts with Superfreq. ''; } ]; diff --git a/nix/package.nix b/nix/package.nix index 98228c5..d21c45b 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -5,7 +5,7 @@ fs = lib.fileset; in rustPlatform.buildRustPackage (finalAttrs: { - pname = "watt"; + pname = "superfreq"; version = "0.1.0"; src = fs.toSource { @@ -24,14 +24,14 @@ in meta = { description = "Automatic CPU speed & power optimizer for Linux"; longDescription = '' - Watt is a CPU speed & power optimizer for Linux. It uses + Superfreq is a CPU speed & power optimizer for Linux. It uses the CPU frequency scaling driver to set the CPU frequency governor and the CPU power management driver to set the CPU power management mode. ''; - homepage = "https://github.com/NotAShelf/watt"; - mainProgram = "watt"; + homepage = "https://github.com/NotAShelf/superfreq"; + mainProgram = "superfreq"; license = lib.licenses.mpl20; platforms = lib.platforms.linux; }; diff --git a/src/cpu.rs b/src/cpu.rs index e0e00e2..70918be 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -441,7 +441,7 @@ impl Cpu { if !epps.iter().any(|avail_epp| avail_epp == epp) { bail!( - "EPP value '{epp}' is not available for {self}. available EPP values: {epps}", + "EPP value '{epp}' is not availabile for {self}. available EPP values: {epps}", epps = epps.join(", "), ); } diff --git a/src/daemon.rs b/src/daemon.rs index e57aba0..9e0370a 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -110,7 +110,7 @@ struct CpuLog { /// CPU usage between 0-1, a percentage. usage: f64, - /// CPU temperature in celsius. + /// CPU temperature in celcius. temperature: f64, } @@ -261,7 +261,7 @@ impl Daemon { } } - // If we can't determine the discharge rate, that means that + // If we can't deterine the discharge rate, that means that // we were very recently started. Which is user activity. None => { interval *= 2; diff --git a/src/engine.rs b/src/engine.rs index b9c7b01..6c5fe59 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -204,7 +204,7 @@ pub fn determine_and_apply_settings( manage_auto_turbo(report, selected_profile_config, on_ac_power)?; } else { log::debug!( - "Watt's dynamic turbo management is disabled by configuration. Ensuring system uses its default behavior for automatic turbo control." + "Superfreq's dynamic turbo management is disabled by configuration. Ensuring system uses its default behavior for automatic turbo control." ); // Make sure the system is set to its default automatic turbo mode. // This is important if turbo was previously forced off.