{ config, pkgs, lib, ... }: let activeTheme = config.nomarchy.theme; # Path to local theme files themeDir = ./themes + "/${activeTheme}"; hasThemeConfig = builtins.pathExists (themeDir + "/config.jsonc"); hasThemeStyle = builtins.pathExists (themeDir + "/style.css"); # Default fallback files defaultConfig = ./config/config.jsonc; defaultStyle = ./config/style.css; # Selected files configFile = if hasThemeConfig then (themeDir + "/config.jsonc") else defaultConfig; styleFile = if hasThemeStyle then (themeDir + "/style.css") else defaultStyle; rawSettings = builtins.fromJSON (builtins.readFile configFile); # Modules that only make sense on a laptop. Filtered out of any # `modules-*` slot when nomarchy.formFactor != "laptop" so a desktop # build doesn't ship a permanently-empty battery indicator. laptopOnlyModules = [ "battery" "custom/battery" ]; filterModules = mods: if config.nomarchy.formFactor == "laptop" then mods else builtins.filter (m: !(builtins.elem m laptopOnlyModules)) mods; settings = rawSettings // { modules-left = filterModules (rawSettings.modules-left or []); modules-center = filterModules (rawSettings.modules-center or []); modules-right = filterModules (rawSettings.modules-right or []); }; in { programs.waybar = { enable = lib.mkDefault true; systemd.enable = lib.mkDefault true; settings = lib.mkDefault [ settings ]; style = lib.mkDefault (builtins.readFile styleFile); }; home.packages = lib.mkDefault (with pkgs; [ font-awesome ]); }