Add custom theme support with wallpaper-based color extraction (#6)

* Add custom theme support with wallpaper-based color extraction

- Extended theme option to accept "custom" value
- Added customTheme configuration with wallpaperPath and variant options
- Integrated nix-colors colorSchemeFromPicture for dynamic color generation
- Updated wallpaper selection to handle custom paths
- Added VSCode theme fallback for custom color schemes
- Fixed nix-colors contrib function call (requires pkgs argument)
- Maintains full backward compatibility with existing themes

Users can now generate themes from their own wallpapers:
  omarchy = {
    theme = "custom";
    customTheme = {
      wallpaperPath = ./wallpapers/my-image.png;
      variant = "dark"; # or "light"
    };
  };

* Fix: Screen sharing broken due to Qt library version mismatch

  File changed: modules/nixos/hyprland.nix

  Problem:
  The omarchy-nix configuration was using xdg-desktop-portal-hyprland from the hyprland flake input, which had a Qt library version mismatch (6.9.1 vs 6.9.0). This caused the
   hyprland-share-picker to crash with "Cannot mix incompatible Qt library" errors, preventing screen sharing from working.

  Solution:
  Changed the portalPackage from the hyprland flake version to the stable nixpkgs version:

  - portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
  + portalPackage = pkgs.xdg-desktop-portal-hyprland; # Use stable nixpkgs version to fix Qt version mismatch

  Why this works:
  - The stable nixpkgs version of xdg-desktop-portal-hyprland has consistent Qt library versions
  - This matches the working configuration used on other NixOS Hyprland setups
  - Maintains all screen sharing functionality while avoiding the Qt version conflict
This commit is contained in:
Ben Ford
2025-07-28 14:57:58 +01:00
committed by GitHub
parent ec0e79810c
commit b51d8f632b
7 changed files with 78 additions and 8 deletions
+7 -2
View File
@@ -21,7 +21,12 @@ config: let
];
};
selected_wallpaper = builtins.elemAt (wallpapers.${cfg.theme}) 0;
# Handle custom wallpaper path
wallpaper_path = if cfg.theme == "custom"
then toString cfg.customTheme.wallpaperPath
else let
selected_wallpaper = builtins.elemAt (wallpapers.${cfg.theme}) 0;
in "~/Pictures/Wallpapers/${selected_wallpaper}";
in {
wallpaper_path = "~/Pictures/Wallpapers/${selected_wallpaper}";
inherit wallpaper_path;
}