feat: more dynamic theming

This commit is contained in:
2024-04-25 21:32:25 +02:00
parent 28b30353d8
commit 5c27567ca1
137 changed files with 180 additions and 8372 deletions

View File

@@ -30,6 +30,9 @@
./services/airprint.nix
./shell/waybar.nix
./shell/dunst.nix
./xdg/forced-compliance.nix
];
}

View File

@@ -6,23 +6,32 @@
...
}:
with lib;
let
cfg = config.desktops.hyprland;
in
{
options.desktops.hyprland = {
enable = mkEnableOption (mdDoc "Enable a DE based on Hyprland");
enable = lib.mkEnableOption "Enable a DE based on Hyprland";
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment = {
sessionVariables.NIXOS_OZONE_WL = "1";
systemPackages = with pkgs; [ glib ];
};
programs.hyprland.enable = true;
xdg.portal = {
enable = true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-kde
];
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
config.common = {
default = [
"hyprland"
"gtk"
];
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
"org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ];
};
};
services = {
@@ -51,12 +60,5 @@ in
gnome.gnome-online-accounts.enable = true;
gnome.evolution-data-server.enable = true;
};
programs = {
hyprland.enable = true;
kdeconnect.enable = true;
};
environment.sessionVariables.NIXOS_OZONE_WL = "1";
};
}

View File

@@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
username,
...
}:
let
cfg = config.shell.components.dunst;
in
{
options.shell.components.dunst = {
enable = lib.mkEnableOption (lib.mdDoc "Enable a pre-configured dunst setup");
};
config = lib.mkIf cfg.enable {
home-manager.users.${username}.services.dunst = {
enable = true;
settings = { };
};
};
}

View File

@@ -0,0 +1,37 @@
{
config,
lib,
pkgs,
username,
...
}:
let
cfg = config.shell.components.waybar;
in
{
options.shell.components.waybar = {
enable = lib.mkEnableOption (lib.mdDoc "Enable a pre-configured waybar setup");
};
config = lib.mkIf cfg.enable {
home-manager.users.${username}.programs.waybar = {
enable = true;
settings = {
mainBar = {
modules-center = [ "clock" ];
modules-right = [
"privacy"
"tray"
];
"custom/theme" = { };
};
};
systemd = lib.mkIf config.desktops.hyprland.enable {
enable = true;
target = "hyprland-session.target";
};
};
};
}

View File

@@ -17,10 +17,76 @@ in
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
matugen
swww
];
environment = {
systemPackages = [
pkgs.adw-gtk3
pkgs.matugen
(pkgs.writeShellApplication {
name = "theme";
runtimeInputs = [
pkgs.matugen
pkgs.swww
pkgs.gnome.zenity
];
text = ''
WALLPAPER=${homeCfg.xdg.configHome}/matugen/wallpaper
SCHEME=$(dconf read /org/gnome/desktop/interface/color-scheme)
if [ "$SCHEME" = "'prefer-light'" ]; then
MODE="light"
else
MODE="dark"
fi
if [ $# -eq 0 ]; then
echo -e "\033[1mUsage:\033[0m mode|light|dark|toggle|wallpaper"
exit 1
elif [ "$1" = "mode" ]; then
echo -e "$MODE"
exit 0
elif [ "$1" = "wallpaper" ]; then
if [ $# -eq 1 ]; then
PICKED=$(zenity --file-selection --file-filter='Images | *.png *.jpg *.jpeg *.svg *.bmp *.gif')
cp "$PICKED" "$WALLPAPER"
else
cp "$2" "$WALLPAPER"
fi
elif [ "$1" = "toggle" ]; then
if [ "$MODE" = "light" ]; then
MODE="dark"
else
MODE="light"
fi
elif [ "$1" = "light" ] || [ "$1" = "dark" ]; then
MODE="$1"
elif [ "$1" = "init" ]; then
echo -e "\033[1mSetting up matugen\033[0m"
else
echo -e "\033[31mInvalid argument\033[0m"
exit 1
fi
if [ ! -f $WALLPAPER ]; then
echo -e "\033[31,1mNo wallpaper set\033[0m"
exit 1
fi
if [ "$MODE" = "light" ]; then
GTK_THEME="adw-gtk3"
else
GTK_THEME="adw-gtk3-dark"
fi
dconf write /org/gnome/desktop/interface/gtk-theme "'$GTK_THEME'"
dconf write /org/gnome/desktop/interface/color-scheme "'prefer-$MODE'"
matugen image "$WALLPAPER" --mode "$MODE"
for i in $(pgrep -u "$USER" -x nvim); do
kill -USR1 "$i"
done
'';
})
];
};
home-manager.users.${username} = {
programs.kitty.extraConfig = ''
@@ -31,10 +97,9 @@ in
config = {
reload_apps = true;
reload_apps_list = {
kitty = true;
gtk_theme = false;
waybar = false;
dunst = false;
kitty = homeCfg.programs.kitty.enable;
waybar = homeCfg.programs.waybar.enable;
dunst = homeCfg.services.dunst.enable;
};
set_wallpaper = true;