Dynamic theme setting

This commit is contained in:
Geoffrey Frogeye 2023-12-05 23:11:54 +01:00
parent 56544fe947
commit 94d9bae95b
Signed by: geoffrey
GPG key ID: C72403E7F82E6AD8
8 changed files with 55 additions and 40 deletions

View file

@ -6,6 +6,13 @@
x11_screens = [ "HDMI-1-0" "eDP1" ];
maxVideoHeight = 1440;
numlock = true;
phasesBrightness = {
enable = true;
backlight = "intel_backlight";
jour = 40000;
crepuscule = 10000;
nuit = 1;
};
};
dev = {
docker = true;

View file

@ -1,12 +0,0 @@
#!/usr/bin/env bash
# FIXME
if [ "$(cat /etc/hostname)" = "curacao.geoffrey.frogeye.fr" ]
then
echo 10000 | sudo tee /sys/class/backlight/intel_backlight/brightness
elif [ "$(cat /etc/hostname)" = "pindakaas.geoffrey.frogeye.fr" ]
then
echo 3000 | sudo tee /sys/class/backlight/edp-backlight/brightness
fi
automatrop -e base16_scheme=solarized-dark --tags color

View file

@ -1,12 +0,0 @@
#!/usr/bin/env bash
# FIXME
if [ "$(cat /etc/hostname)" = "curacao.geoffrey.frogeye.fr" ]
then
echo 40000 | sudo tee /sys/class/backlight/intel_backlight/brightness
elif [ "$(cat /etc/hostname)" = "pindakaas.geoffrey.frogeye.fr" ]
then
echo 3500 | sudo tee /sys/class/backlight/edp-backlight/brightness
fi
automatrop -e base16_scheme=solarized-light --tags color

View file

@ -1,12 +0,0 @@
#!/usr/bin/env bash
# FIXME
if [ "$(cat /etc/hostname)" = "curacao.geoffrey.frogeye.fr" ]
then
echo 1 | sudo tee /sys/class/backlight/intel_backlight/brightness
elif [ "$(cat /etc/hostname)" = "pindakaas.geoffrey.frogeye.fr" ]
then
echo 700 | sudo tee /sys/class/backlight/edp-backlight/brightness
fi
automatrop -e base16_scheme=solarized-dark --tags color

View file

@ -1,14 +1,21 @@
{ pkgs, config, fetchFromGitHub, ... }:
{ pkgs, config, lib, ... }:
let
# Currently last commit in https://github.com/danth/stylix/pull/194
stylix = builtins.fetchTarball "https://github.com/willemml/stylix/archive/2ed2b0086b41d582aca26e083c19c0e47c8991e3.tar.gz";
polarityFile = "${config.xdg.stateHome}/theme_polarity";
polarity = if builtins.pathExists polarityFile then lib.strings.fileContents polarityFile else "light";
phases = [
{ command = "jour"; polarity = "light"; }
{ command = "crepuscule"; polarity = "dark"; }
{ command = "nuit"; polarity = "dark"; }
];
cfg = config.frogeye.desktop.phasesBrightness;
in
{
imports = [ (import stylix).homeManagerModules.stylix ];
stylix = {
# FIXME Changeable at runtime
base16Scheme = "${pkgs.base16-schemes}/share/themes/solarized-dark.yaml";
base16Scheme = "${pkgs.base16-schemes}/share/themes/solarized-${polarity}.yaml";
image = builtins.fetchurl {
url = "https://get.wallhere.com/photo/sunlight-abstract-minimalism-green-simple-circle-light-leaf-wave-material-line-wing-computer-wallpaper-font-close-up-macro-photography-124350.png";
sha256 = "sha256:1zfq3f3v34i45mi72pkfqphm8kbhczsg260xjfl6dbydy91d7y93";
@ -30,10 +37,32 @@ in
};
};
# Setting a custom base16 theme via nixvim:
# - Is required so nixvim works
# - For the rest only works on dark polarity, use the colorscheme otherwise... shrug
programs.nixvim.colorschemes.base16.colorscheme = "solarized-${polarity}";
# Fix https://nix-community.github.io/home-manager/index.html#_why_do_i_get_an_error_message_about_literal_ca_desrt_dconf_literal_or_literal_dconf_service_literal
# home.packages = [ pkgs.dconf ];
dconf.enable = false; # Otherwise standalone home-manager complains it can't find /etc/dbus-1/session.conf on Arch.
# Symlinking it to /usr/share/dbus-1/session.conf goes further but not much.
# TODO Use xbacklight instead (pindakaas doesn't seem to support it OOTB)
home.packages = map
(phase: (pkgs.writeShellApplication {
name = "${phase.command}";
text = (lib.optionalString cfg.enable ''
echo ${builtins.toString (builtins.getAttr phase.command cfg)} | sudo tee /sys/class/backlight/${cfg.backlight}/brightness
'') + ''
echo ${phase.polarity} > ${polarityFile}
if command -v home-manager
then
home-manager switch
else
sudo nixos-rebuild switch
fi
'';
})
)
phases;
}

View file

@ -17,6 +17,13 @@
description = "Maximum video height in pixel the machine can reasonably watch";
default = 1080;
};
phasesBrightness = {
enable = lib.mkEnableOption "Set a specific brightness for the screen when running phases commands";
backlight = lib.mkOption { type = lib.types.str; description = "Name of the backlight device"; };
jour = lib.mkOption { type = lib.types.int; description = "brightness value for phase: jour"; };
crepuscule = lib.mkOption { type = lib.types.int; description = "brightness value for phase: crepuscule"; };
nuit = lib.mkOption { type = lib.types.int; description = "brightness value for phase: nuit"; };
};
};
dev = {
ansible = lib.mkEnableOption "Ansible dev stuff";

View file

@ -13,6 +13,7 @@
services.printing.enable = true;
# Enable passwordless sudo
# TODO execWheelOnly? sudo-rs?
security.sudo.extraRules = [{
groups = [ "wheel" ];
commands = [{

View file

@ -5,6 +5,13 @@
xorg = true;
x11_screens = [ "DP-1" "eDP-1" ];
maxVideoHeight = 720;
phasesBrightness = {
enable = true;
backlight = "edp-backlight";
jour = 3500;
crepuscule = 3000;
nuit = 700;
};
};
frogeye.dev.docker = true;
}