{ lib, config, pkgs, flakeRoot, home-manager, ... }: let # Path to Waybar assets assetPath = "${flakeRoot}/assets/system/conf/waybar"; # Determine the username safely username = builtins.head (builtins.filter (u: config.users.users.${u}.isNormalUser != false) (builtins.attrNames config.users.users)); # Compute the Home Manager user map safely hmUser = config.home-manager.users.${username} or {}; in { ############################## # System-wide Waybar package ############################## environment.systemPackages = [ pkgs.waybar ]; ############################## # Home Manager Waybar config ############################## home-manager.users = lib.recursiveUpdate config.home-manager.users { ${username} = lib.recursiveUpdate hmUser { home.file = lib.recursiveUpdate (hmUser.home.file or {}) { ".config/waybar/config" = { source = "${assetPath}/config"; }; ".config/waybar/style.css" = { source = "${assetPath}/style.css"; }; }; }; }; ############################## # Optional: Systemd --user service for Waybar ############################## systemd.user.services.waybar = { description = "Waybar for Hyprland"; after = [ "graphical-session.target" ]; serviceConfig = { ExecStart = "${pkgs.waybar}/bin/waybar"; Restart = "always"; # Use the runtime dir provided by systemd, avoids null/UID issues Environment = '' WAYLAND_DISPLAY=${config.environment.sessionVariables.WAYLAND_DISPLAY or "wayland-0"} XDG_CURRENT_DESKTOP=Hyprland ''; }; wantedBy = [ "default.target" ]; }; }