From ed18fab640e343bbee1afe81569e5e6d83fcf15a Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Thu, 25 Jul 2024 21:46:12 -0400 Subject: [PATCH 1/2] corefreq: init at 1.98.4 --- pkgs/os-specific/linux/corefreq/default.nix | 48 +++++++++++++++++++++ pkgs/top-level/linux-kernels.nix | 2 + 2 files changed, 50 insertions(+) create mode 100644 pkgs/os-specific/linux/corefreq/default.nix diff --git a/pkgs/os-specific/linux/corefreq/default.nix b/pkgs/os-specific/linux/corefreq/default.nix new file mode 100644 index 0000000000000..66102f27cbc4e --- /dev/null +++ b/pkgs/os-specific/linux/corefreq/default.nix @@ -0,0 +1,48 @@ +{ + lib, + stdenv, + fetchFromGitHub, + kernel, + hostPlatform, + # See the official readme for a list of optional flags: + # https://github.com/cyring/CoreFreq/blob/master/README.md + extraFlags ? [ ], +}: + +stdenv.mkDerivation rec { + pname = "corefreq"; + version = "1.98.4"; + + src = fetchFromGitHub { + owner = "cyring"; + repo = "CoreFreq"; + rev = version; + hash = "sha256-ljo8EDoJmcdfVvC8s+Xbf5TsYruvSOU1OSYBPwQst1c="; + }; + + nativeBuildInputs = kernel.moduleBuildDependencies; + + env.NIX_CFLAGS_COMPILE = "-I${src}/${hostPlatform.qemuArch}"; + makeFlags = [ + "KERNELDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + "INSTALL_MOD_PATH=$(out)" + ] ++ extraFlags; + + preInstall = '' + mkdir -p $out/bin + ''; + + installFlags = [ "PREFIX=$(out)" ]; + + meta = { + description = "CPU monitoring and tuning software designed for 64-bit processors"; + homepage = "https://github.com/cyring/CoreFreq"; + license = lib.licenses.gpl2Only; + maintainers = with lib.maintainers; [ mrene ]; + mainProgram = "corefreq-cli"; + platforms = [ + "x86_64-linux" + "aarch64-linux" + ]; + }; +} diff --git a/pkgs/top-level/linux-kernels.nix b/pkgs/top-level/linux-kernels.nix index 4255d0c036e83..3129d7cfef886 100644 --- a/pkgs/top-level/linux-kernels.nix +++ b/pkgs/top-level/linux-kernels.nix @@ -531,6 +531,8 @@ in { turbostat = callPackage ../os-specific/linux/turbostat { }; + corefreq = callPackage ../os-specific/linux/corefreq { }; + trelay = callPackage ../os-specific/linux/trelay { }; universal-pidff = callPackage ../os-specific/linux/universal-pidff { }; From dcc8b99d856d77d373cd4c0ec88329e5bfb042b6 Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Thu, 25 Jul 2024 21:47:13 -0400 Subject: [PATCH 2/2] nixos/corefreq: add program defining both the daemon service and its kernel module --- nixos/modules/module-list.nix | 1 + nixos/modules/programs/corefreq.nix | 42 +++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 nixos/modules/programs/corefreq.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index c86a571cc0c09..a6766429dfca2 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -171,6 +171,7 @@ ./programs/cpu-energy-meter.nix ./programs/command-not-found/command-not-found.nix ./programs/coolercontrol.nix + ./programs/corefreq.nix ./programs/criu.nix ./programs/darling.nix ./programs/dconf.nix diff --git a/nixos/modules/programs/corefreq.nix b/nixos/modules/programs/corefreq.nix new file mode 100644 index 0000000000000..c656b4a13da17 --- /dev/null +++ b/nixos/modules/programs/corefreq.nix @@ -0,0 +1,42 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.programs.corefreq; + kernelPackages = config.boot.kernelPackages; +in +{ + options = { + programs.corefreq = { + enable = lib.mkEnableOption "Whether to enable the corefreq daemon and kernel module"; + + package = lib.mkOption { + type = lib.types.package; + default = kernelPackages.corefreq; + defaultText = lib.literalExpression "config.boot.kernelPackages.corefreq"; + description = '' + The corefreq package to use. + ''; + }; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ cfg.package ]; + boot.extraModulePackages = [ cfg.package ]; + boot.kernelModules = [ "corefreqk" ]; + + # Create a systemd service for the corefreq daemon + systemd.services.corefreq = { + description = "CoreFreq daemon"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = lib.getExe' cfg.package "corefreqd"; + }; + }; + }; +}