diff --git a/Droidnix/README.org b/Droidnix/README.org index 7e1a4709a..82a191cff 100644 --- a/Droidnix/README.org +++ b/Droidnix/README.org @@ -812,32 +812,52 @@ in ** =generated/modules/traveldroid/desktop/waybar.nix= This file installs and configures waybar #+BEGIN_SRC nix :tangle generated/modules/traveldroid/desktop/waybar.nix :noweb tangle :mkdirp yes :eval never-html -{ config, pkgs, ... }: +{ lib, config, pkgs, flakeRoot, home-manager, ... }: let - waybarPath = "${pkgs.waybar}/bin/waybar"; + # Path to Waybar assets + assetPath = "${flakeRoot}/assets/system/conf/waybar"; - # Pick the first normal user - normalUsers = builtins.filter (u: (config.users.users.${u}.isNormalUser or false) != false) (builtins.attrNames config.users.users); - myUser = if normalUsers == [] then builtins.head (builtins.attrNames config.users.users) else builtins.head normalUsers; + # Determine the username safely + username = + builtins.head (builtins.filter (u: config.users.users.${u}.isNormalUser != false) + (builtins.attrNames config.users.users)); - # Compute UID safely - myUid = config.users.users.${myUser}.uid; + # 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 = "${waybarPath}"; + 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 - XDG_RUNTIME_DIR=/run/user/${myUid} ''; }; diff --git a/Droidnix/generated/modules/traveldroid/desktop/waybar.nix b/Droidnix/generated/modules/traveldroid/desktop/waybar.nix index 2921b1c2c..9739d9bea 100644 --- a/Droidnix/generated/modules/traveldroid/desktop/waybar.nix +++ b/Droidnix/generated/modules/traveldroid/desktop/waybar.nix @@ -1,29 +1,49 @@ -{ config, pkgs, ... }: +{ lib, config, pkgs, flakeRoot, home-manager, ... }: let - waybarPath = "${pkgs.waybar}/bin/waybar"; + # Path to Waybar assets + assetPath = "${flakeRoot}/assets/system/conf/waybar"; - # Pick the first normal user - normalUsers = builtins.filter (u: (config.users.users.${u}.isNormalUser or false) != false) (builtins.attrNames config.users.users); - myUser = if normalUsers == [] then builtins.head (builtins.attrNames config.users.users) else builtins.head normalUsers; + # Determine the username safely + username = + builtins.head (builtins.filter (u: config.users.users.${u}.isNormalUser != false) + (builtins.attrNames config.users.users)); - # Compute UID safely - myUid = config.users.users.${myUser}.uid; + # 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 = "${waybarPath}"; + 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 - XDG_RUNTIME_DIR=/run/user/${myUid} ''; };