{ config, lib, pkgs, flakeRoot, ... }: let cfg = config.programs.hyprscrolling; # Read configuration from your repo (as requested) confSrc = flakeRoot + "/assets/conf/desktop/hypr/hyprscrolling.conf"; # Where we place the generated/symlinked config inside ~/.config confTarget = "hypr/conf.d/90-hyprscrolling.conf"; in { options.programs.hyprscrolling = { enable = lib.mkEnableOption "Hyprscrolling plugin (scrolling layout) for Hyprland"; package = lib.mkOption { type = lib.types.package; default = pkgs.hyprlandPlugins.hyprscrolling; description = "hyprscrolling plugin package to load via wayland.windowManager.hyprland.plugins."; }; }; config = lib.mkIf cfg.enable { assertions = [ { assertion = config.wayland.windowManager.hyprland.enable or false; message = "programs.hyprscrolling.enable requires wayland.windowManager.hyprland.enable = true (Home-Manager Hyprland module)."; } { assertion = builtins.pathExists confSrc; message = "Missing hyprscrolling.conf at: ${toString confSrc}"; } ]; # Ensure plugin is installed + loaded (HM will add the needed plugin loading lines) wayland.windowManager.hyprland.plugins = [ cfg.package ]; # Put your config file into ~/.config/hypr/conf.d/... xdg.configFile."${confTarget}".source = confSrc; # Ensure Hyprland reads it (even if your main config doesn't source conf.d) wayland.windowManager.hyprland.extraConfig = '' # Loaded by Home-Manager: hyprscrolling source = ${config.xdg.configHome}/${confTarget} ''; }; }