Add monitor brightness gnome extension

This commit is contained in:
Joseph DiGiovanni 2024-08-03 08:21:07 -04:00
parent bbd200fc6e
commit 4503e7c046
6 changed files with 87 additions and 9 deletions

View file

@ -1,14 +1,15 @@
{ inputs, pkgs, system, ... }:
let
customPkgs = final: prev: {
adwaita-for-steam = pkgs.callPackage ./adwaita-for-steam.nix { };
customPkgs = final: prev: with pkgs;{
adwaita-for-steam = callPackage ./adwaita-for-steam.nix { };
gnomeExtensions = prev.gnomeExtensions // {
rounded-window-corners-reborn = pkgs.callPackage ./gnomeExtensions/rounded-window-corners-reborn.nix { };
monitor-brightness-and-volume = callPackage ./gnomeExtensions/monitor-brightness-and-volume.nix { };
rounded-window-corners-reborn = callPackage ./gnomeExtensions/rounded-window-corners-reborn.nix { };
};
mkvextract-gtk = pkgs.callPackage ./mkvextract-gtk.nix { };
mkvextract-gtk = callPackage ./mkvextract-gtk.nix { };
};
unstableOverlay = final: prev: {

View file

@ -0,0 +1,29 @@
{ lib, stdenv, fetchurl, unzip, glib }:
stdenv.mkDerivation rec {
pname = "gnome-shell-extension-monitor-brightness-volume";
version = "7";
src = fetchurl {
url = "https://extensions.gnome.org/extension-data/monitor-brightness-volumeailin.nemui.v${version}.shell-extension.zip";
hash = "sha256-NrFZZdQTgnMyYk2Yp2l3RiXM2C+/NHhIPv/Fo/KrXt8=";
};
sourceRoot = ".";
nativeBuildInputs = [ unzip glib ];
installPhase = ''
mkdir -p $out/share/gnome-shell/extensions/monitor-brightness-volume@ailin.nemui
mv * $out/share/gnome-shell/extensions/monitor-brightness-volume@ailin.nemui
glib-compile-schemas $out/share/gnome-shell/extensions/monitor-brightness-volume@ailin.nemui/schemas
'';
meta = with lib; {
description = "GNOME Shell extension to control monitor brightness and volume.";
homepage = "https://extensions.gnome.org/extension/1292/monitor-brightness-and-volume/";
license = licenses.gpl2;
platforms = platforms.linux;
maintainers = with maintainers; [ jdig78 ];
};
}

View file

@ -3,5 +3,6 @@
{
imports = [
./custom-wallpaper
./extensions
];
}

View file

@ -0,0 +1,7 @@
{ ... }:
{
imports = [
./monitor-brightness-and-volume.nix
];
}

View file

@ -0,0 +1,42 @@
{ pkgs, ... }:
let
UUID = "monitor-brightness-volume@ailin.nemui";
lightModeBrightness = 50;
darkModeBrightness = 20;
in
{
dconf.settings = {
"org/gnome/shell".enabled-extensions = [ UUID ];
"org/gnome/shell/extensions/monitor-brightness-volume".show-volume = false;
};
systemd.user.services.ddcutil-auto-brightness-gnome = {
Install.WantedBy = [ "default.target" ];
Service = {
ExecStart = pkgs.writeShellScript "ddcutil-auto-brightness-gnome" ''
${pkgs.glib}/bin/gsettings monitor org.gnome.desktop.interface color-scheme | while read -r line; do
${pkgs.gnome.gnome-shell}/bin/gnome-extensions disable ${UUID} # Reload the extension to detect the brightness change
if [[ "$line" == *"prefer-dark"* ]]; then
${pkgs.ddcutil}/bin/ddcutil setvcp 10 ${toString darkModeBrightness}
else
${pkgs.ddcutil}/bin/ddcutil setvcp 10 ${toString lightModeBrightness}
fi
# Reload the extension to apply the brightness change
${pkgs.gnome.gnome-shell}/bin/gnome-extensions enable ${UUID}
done
'';
Restart = "always";
RestartSec = 10;
};
Unit = {
After = [ "graphical-session.target" ];
Description = "ddcutil auto brightness service for GNOME";
};
};
home.packages = with pkgs; [ gnomeExtensions.monitor-brightness-and-volume ];
}

View file

@ -2,11 +2,9 @@
{
config = lib.mkIf config.hardware.monitor-control.enable {
environment.systemPackages = with pkgs; [
ddcutil
];
boot.kernelModules = [ "i2c-dev" ];
environment.systemPackages = with pkgs; [ ddcutil ];
hardware.i2c.enable = true;
users.groups."i2c".members = builtins.attrNames config.users.users;
};
options.hardware.monitor-control.enable = lib.mkEnableOption "enable support for controlling monitor settings.";