c730 15b/7e8
Home Manager automatically changing dark/light mode at sunrise/set
Firstly, to do this you need pkgs.sunwait (though other options would work with a bit of changing). Make a script like this, I put mine in my home.file, but you can also just make it a file on it's own.
'scripts/mode-switcher-based-on-sunlight.sh' = {
text = ''
run_a_command() {
if [[ "$light" == "DAY" ]]; then
sed -i 's/MODE = ".*"/MODE = "light"/' $HOME/.config/home/home.nix
home-manager switch
else
sed -i 's/MODE = ".*"/MODE = "dark"/' $HOME/.config/home/home.nix
home-manager switch
fi
};
#!/bin/bash
# Set your latitude and longitude
LATITUDE="53.43N"
LONGITUDE="-1.89E"
# Calculate the sunrise and sunset times for today using sunwait
light=$(sunwait poll $LATITUDE $LONGITUDE)
run_a_command
while sleep 5; do
new_light=$(sunwait poll $LATITUDE $LONGITUDE)
if [[ "$new_light" != "$light" ]]; then
run_a_command
fi
done
'';
executable = true;
};
text = ''
run_a_command() {
if [[ "$light" == "DAY" ]]; then
sed -i 's/MODE = ".*"/MODE = "light"/' $HOME/.config/home/home.nix
home-manager switch
else
sed -i 's/MODE = ".*"/MODE = "dark"/' $HOME/.config/home/home.nix
home-manager switch
fi
};
#!/bin/bash
# Set your latitude and longitude
LATITUDE="53.43N"
LONGITUDE="-1.89E"
# Calculate the sunrise and sunset times for today using sunwait
light=$(sunwait poll $LATITUDE $LONGITUDE)
run_a_command
while sleep 5; do
new_light=$(sunwait poll $LATITUDE $LONGITUDE)
if [[ "$new_light" != "$light" ]]; then
run_a_command
fi
done
'';
executable = true;
};
I have this to autorun on startup in Hyprland with
exec-once="$HOME/scripts/mode-switcher-based-on-sunlight.sh";
then in the home.nix, I of course have a variable defined called MODE as either "dark" or "light"{config, pkgs, lib, ...}:
let
MODE = "light";
in
{
# Home config
}
And then that should be it, of course you'll want to make to make gtk follow this theme, I do that by having different theme files which each define a set of GTK themes and then those are assigned as variables on rebuild
inherit (import ./themes/${THEME}_${MODE}.nix) GTK_THEME GTK_THEME_NAME;
You can see my full nix configurations here
Fly You High - DeaDvey
nixos,home manager,customisation,guide,dark mode,light mode,sunrise,sunset