system76 scheduler

This commit is contained in:
atagen 2023-01-12 10:12:50 +11:00
parent 2faec8579a
commit ec067ee460
10 changed files with 218 additions and 105 deletions

View file

@ -9,5 +9,5 @@ let
imports = lib.mapAttrsToList toImport (lib.filterAttrs filterCaches (builtins.readDir folder));
in {
inherit imports;
nix.binaryCaches = ["https://cache.nixos.org/"];
nix.settings.substituters = ["https://cache.nixos.org/"];
}

View file

@ -1,10 +1,10 @@
{
nix = {
binaryCaches = [
settings.substituters = [
"https://cuda-maintainers.cachix.org"
];
binaryCachePublicKeys = [
settings.trusted-public-keys = [
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
];
};

View file

@ -28,6 +28,7 @@
keep-outputs = true
keep-derivations = true
'';
environment.pathsToLink = [ "/share/zsh" ];
boot.loader.systemd-boot.enable = true;
boot.loader.systemd-boot.configurationLimit = 2;
@ -98,7 +99,7 @@
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
# jack.enable = true;
};
# gtk compatibility
@ -117,6 +118,7 @@
tailscale
home-manager
cachix
helix
@ -124,13 +126,14 @@
curl
home-manager
git
zsh
nix-index
comma
hackneyed
];
@ -150,7 +153,7 @@
};
};
networking.firewall.enable = false;
networking.firewall.enable = true;
networking.firewall = {
trustedInterfaces = [ "tailscale0" ];
checkReversePath = "loose";

View file

@ -1,6 +1,14 @@
{ config, lib, pkgs, modulesPath, ... }:
{
nixpkgs.overlays = [
(self: super: {
system76-scheduler = pkgs.callPackage ./syspkgs/system76-scheduler.nix {};
kwin-system76-scheduler-integration = pkgs.libsForQt5.callPackage ./syspkgs/kwin-system76-scheduler-integration.nix {};
})
];
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
@ -9,7 +17,7 @@
boot.initrd.kernelModules = [];
boot.kernelModules = [ "kvm-amd" "i2c-dev" ];
boot.extraModulePackages = [ ];
boot.kernelParams = [ "mitigations=off" "acpi_enforce_resources=lax" ];
boot.kernelParams = [ "mitigations=off" "acpi_enforce_resources=lax" "preempt=full" ];
boot.loader.efi.canTouchEfiVariables = true;
boot.plymouth.enable = true;
@ -22,12 +30,13 @@
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
# dlna
services.minidlna = {
enable = true;
announceInterval = 120;
friendlyName = "PC";
mediaDirs = [ "A,/data/Music/Slsk" ];
settings = {
notify_interval = 120;
friendly_name = "PC";
media_dir = [ "A,/data/Music/Slsk" ];
};
};
services.xserver.videoDrivers = [ "nvidia" ];
@ -36,33 +45,58 @@
hardware.nvidia.powerManagement.enable = true;
programs.xwayland.enable = true;
systemd.services.noRgb = {
systemd.services.no-rgb = {
wantedBy = [ "multi-user.target" ];
description = "rgb led turn-off-er";
serviceConfig = {
Type = "oneshot";
ExecStart = ''${pkgs.openrgb}/bin/openrgb -c 000000'';
ExecStart = ''${pkgs.openrgb}/bin/openrgb -d "HyperX Fury RGB" -m static -c 000000'';
};
};
services.ananicy = {
enable = true;
package = pkgs.ananicy-cpp;
settings = {
check_freq = 5;
systemd.services."com.system76.Scheduler" = {
wantedBy = [ "multi-user.target" ];
description = "the system76 process scheduler";
serviceConfig = {
Type = "dbus";
ExecStart = ''${pkgs.system76-scheduler}/bin/system76-scheduler daemon'';
ExecReload = ''${pkgs.system76-scheduler}/bin/system76-scheduler daemon reload'';
BusName = "com.system76.Scheduler";
};
};
services.dbus.packages = [
pkgs.kwin-system76-scheduler-integration
pkgs.system76-scheduler
];
systemd.packages = [
pkgs.kwin-system76-scheduler-integration
pkgs.system76-scheduler
];
environment.etc = {
"system76-scheduler".source = "${pkgs.system76-scheduler}/etc/system76-scheduler";
};
services.hardware.openrgb = {
enable = true;
motherboard = "amd";
};
hardware.ckb-next.enable = true;
environment.systemPackages = with pkgs; [
xdg-desktop-portal-kde
ckb-next
openrgb
wl-clipboard
wl-clipboard-x11
xclip
];
environment.systemPackages = with pkgs;
[
xdg-desktop-portal-kde
ckb-next
openrgb
wl-clipboard
wl-clipboard-x11
xclip
system76-scheduler
kwin-system76-scheduler-integration
];
networking.hostName = "quiver"; # Define your hostname.
users.users.bolt = {

View file

@ -0,0 +1,54 @@
{ lib, pkgs, stdenv, fetchFromGitHub, dbus, qt5, qtbase, wrapQtAppsHook, kpackage, kcoreaddons, ... }:
stdenv.mkDerivation rec {
pname = "kwin-system76-scheduler-integration";
version = "0.1";
src = fetchFromGitHub {
owner = "maxiberta";
repo = pname;
rev = version;
sha256 = "sha256-HX0nK1p97kqt+ZZuECm7Mg9aAXaFDnsJDkbcLUEU+p0=";
};
nativeBuildInputs = [
wrapQtAppsHook
kpackage
];
buildInputs = [
dbus
qt5.qttools.bin
];
dontBuild = true;
installPhase = ''
runHook preInstall
mkdir -p $out/bin
kpackagetool5 --type=KWin/Script -i . -p $out/share/kwin/scripts
cat <<EOF > $out/bin/kwin-system76-scheduler-dbus-proxy.sh
#!${pkgs.bash}/bin/bash
DBUS_SERVICE="com.system76.Scheduler"
DBUS_PATH="/com/system76/Scheduler"
DBUS_INTERFACE="com.system76.Scheduler"
DBUS_METHOD="SetForegroundProcess"
echo "starting dbus proxy.."
echo \''$DBUS_SERVICE \''$DBUS_PATH \''$DBUS_INTERFACE \''$DBUS_METHOD
${pkgs.dbus}/bin/dbus-monitor --session "destination=\''$DBUS_SERVICE,path=\''$DBUS_PATH,interface=\''$DBUS_INTERFACE,member=\''$DBUS_METHOD" |
while true; do
read method call time sender _ dest serial path interface member
read type pid
[ "\''$member" = "member=\''$DBUS_METHOD" ] && ${pkgs.libsForQt5.qt5.qttools.bin}/bin/qdbus --system \''$DBUS_SERVICE \''$DBUS_PATH \''$DBUS_INTERFACE.\''$DBUS_METHOD \''$pid && echo "new foreground process: \''$pid"
done
EOF
chmod +x $out/bin/kwin-system76-scheduler-dbus-proxy.sh
runHook postInstall
'';
}

View file

@ -0,0 +1,34 @@
{ pkgs, lib, rustPlatform, fetchFromGitHub, ... }:
rustPlatform.buildRustPackage rec {
pname = "system76-scheduler";
version = "1.2.2";
src = fetchFromGitHub {
owner = "pop-os";
repo = pname;
rev = version;
sha256 = "sha256-uFFJkuMxqcGj6OQShF0zh/FGwX4/ln1l6NwGonkUsNI=";
};
nativeBuildInputs = with pkgs; [
bcc
];
EXECSNOOP_PATH = "${pkgs.bcc}/bin/execsnoop";
cargoSha256 = "sha256-s91T/Ttr7G8sjyf0Mp5suep4IA+l/r4118B+ue33yfQ=";
postInstall = ''
mkdir -p $out/etc/system76-scheduler/assignments \
$out/etc/system76-scheduler/exceptions \
$out/lib/systemd/system \
$out/etc/dbus-1/system.d
install -Dm0644 data/config.ron $out/etc/system76-scheduler/config.ron
install -Dm0644 data/assignments.ron $out/etc/system76-scheduler/assignments/default.ron
install -Dm0644 data/exceptions.ron $out/etc/system76-scheduler/exceptions/default.ron
# install -Dm0644 data/com.system76.Scheduler.service $out/lib/systemd/system/com.system76.Scheduler.service
install -Dm0644 data/com.system76.Scheduler.conf $out/etc/dbus-1/system.d/com.system76.Scheduler.conf
'';
}