Merge pull request #854 from Ciflire/master

feat: adding iconWorkspaceMap option
This commit is contained in:
orangc
2025-04-02 10:38:46 +03:00
committed by GitHub

View File

@@ -1,14 +1,28 @@
self: { lib, pkgs, config, ... }:
self:
{
lib,
pkgs,
config,
...
}:
let
inherit (lib) types mkIf mkOption mkEnableOption;
inherit (lib)
types
mkIf
mkOption
mkEnableOption
;
cfg = config.programs.hyprpanel;
jsonFormat = pkgs.formats.json { };
# No package option
package = if pkgs ? hyprpanel then pkgs.hyprpanel
else abort ''
package =
if pkgs ? hyprpanel then
pkgs.hyprpanel
else
abort ''
********************************************************************************
* HyprPanel *
@@ -22,58 +36,37 @@ let
'';
# Shorthand lambda for self-documenting options under settings
mkStrOption = default: mkOption { type = types.str; default = default; };
mkIntOption = default: mkOption { type = types.int; default = default; };
mkBoolOption = default: mkOption { type = types.bool; default = default; };
mkStrListOption = default: mkOption { type = types.listOf types.str; default = default; };
mkFloatOption = default: mkOption { type = types.float; default = default; };
mkStrOption =
default:
mkOption {
type = types.str;
default = default;
};
mkIntOption =
default:
mkOption {
type = types.int;
default = default;
};
mkBoolOption =
default:
mkOption {
type = types.bool;
default = default;
};
mkStrListOption =
default:
mkOption {
type = types.listOf types.str;
default = default;
};
mkFloatOption =
default:
mkOption {
type = types.float;
default = default;
};
# TODO: Please merge https://github.com/Jas-SinghFSU/HyprPanel/pull/497
# Do not ask what these do...
flattenAttrs = attrSet: prefix:
let
process = key: value:
if builtins.isAttrs value then
flattenAttrs value "${prefix}${key}."
else
{ "${prefix}${key}" = value; };
in
builtins.foldl' (acc: key:
acc // process key attrSet.${key}
) {} (builtins.attrNames attrSet);
toNestedValue =
let
escapeString = s: builtins.replaceStrings [ "\"" ] [ "\\\"" ] s;
in
value:
if builtins.isBool value then
if value then "true" else "false"
else if (builtins.isInt value || builtins.isFloat value) then
builtins.toString value
else if builtins.isString value then
"\"" + escapeString value + "\""
else if builtins.isList value then
let
items = builtins.map toNestedValue value;
in
"[\n" + (builtins.concatStringsSep ", " items) + "\n]"
else if builtins.isAttrs value then
let
keys = builtins.attrNames value;
toKeyValue = k: "\"${k}\": ${toNestedValue value.${k}}";
inner = builtins.concatStringsSep ", " (builtins.map toKeyValue keys);
in
"{\n" + inner + "\n}"
else
abort "Unexpected error! Please post a new issue and @benvonh...";
toNestedObject = attrSet:
let
keys = builtins.attrNames attrSet;
kvPairs = builtins.map (k: "\"${k}\": ${toNestedValue attrSet.${k}}") keys;
in
"{\n " + builtins.concatStringsSep ",\n " kvPairs + "\n}";
in
{
options.programs.hyprpanel = {
@@ -84,13 +77,6 @@ in
hyprland.enable = mkEnableOption "Hyprland integration";
overwrite.enable = mkEnableOption "overwrite config fix";
theme = mkOption {
type = types.str;
default = "";
example = "catppuccin_mocha";
description = "Theme to import (see ../themes/*.json)";
};
override = mkOption {
type = types.attrs;
default = { };
@@ -105,6 +91,7 @@ in
'';
};
settings = {
layout = mkOption {
type = jsonFormat.type;
default = null;
@@ -131,8 +118,6 @@ in
'';
description = "https://hyprpanel.com/configuration/panel.html";
};
settings = {
bar.autoHide = mkStrOption "never";
bar.battery.hideLabelWhenFull = mkBoolOption false;
bar.battery.label = mkBoolOption true;
@@ -156,7 +141,16 @@ in
bar.customModules.cava.showIcon = mkBoolOption true;
bar.customModules.cava.icon = mkStrOption "";
bar.customModules.cava.spaceCharacter = mkStrOption "";
bar.customModules.cava.barCharacters = mkStrListOption [ "" "" "" "" "" "" "" "" ];
bar.customModules.cava.barCharacters = mkStrListOption [
""
""
""
""
""
""
""
""
];
bar.customModules.cava.showActiveOnly = mkBoolOption false;
bar.customModules.cava.bars = mkIntOption 10;
bar.customModules.cava.channels = mkIntOption 2;
@@ -363,6 +357,19 @@ in
bar.workspaces.spacing = mkFloatOption 1.0;
bar.workspaces.workspaceMask = mkBoolOption false;
bar.workspaces.workspaces = mkIntOption 5;
bar.workspaces.workspaceIconMap = mkOption {
type = jsonFormat.type;
default = null;
example = ''
"1": "<U+EEFE>",
"2": "<U+F269>",
"3": "<U+EAC4>",
"4": "<U+EC1B>",
"5": "<U+F02B4>",
"6": "<U+F1FF> ",
"7": "<U+EB1C>"
'';
};
dummy = mkBoolOption true;
hyprpanel.restartAgs = mkBoolOption true;
# hyprpanel.restartCommand = mkStrOption "${pkgs.procps}/bin/pkill -u $USER -USR1 hyprpanel; ${package}/bin/hyprpanel";
@@ -376,15 +383,20 @@ in
menus.clock.weather.unit = mkStrOption "imperial";
menus.dashboard.controls.enabled = mkBoolOption true;
menus.dashboard.directories.enabled = mkBoolOption true;
menus.dashboard.directories.left.directory1.command = mkStrOption "bash -c \"xdg-open $HOME/Downloads/\"";
menus.dashboard.directories.left.directory1.command =
mkStrOption "bash -c \"xdg-open $HOME/Downloads/\"";
menus.dashboard.directories.left.directory1.label = mkStrOption "󰉍 Downloads";
menus.dashboard.directories.left.directory2.command = mkStrOption "bash -c \"xdg-open $HOME/Videos/\"";
menus.dashboard.directories.left.directory2.command =
mkStrOption "bash -c \"xdg-open $HOME/Videos/\"";
menus.dashboard.directories.left.directory2.label = mkStrOption "󰉏 Videos";
menus.dashboard.directories.left.directory3.command = mkStrOption "bash -c \"xdg-open $HOME/Projects/\"";
menus.dashboard.directories.left.directory3.command =
mkStrOption "bash -c \"xdg-open $HOME/Projects/\"";
menus.dashboard.directories.left.directory3.label = mkStrOption "󰚝 Projects";
menus.dashboard.directories.right.directory1.command = mkStrOption "bash -c \"xdg-open $HOME/Documents/\"";
menus.dashboard.directories.right.directory1.command =
mkStrOption "bash -c \"xdg-open $HOME/Documents/\"";
menus.dashboard.directories.right.directory1.label = mkStrOption "󱧶 Documents";
menus.dashboard.directories.right.directory2.command = mkStrOption "bash -c \"xdg-open $HOME/Pictures/\"";
menus.dashboard.directories.right.directory2.command =
mkStrOption "bash -c \"xdg-open $HOME/Pictures/\"";
menus.dashboard.directories.right.directory2.label = mkStrOption "󰉏 Pictures";
menus.dashboard.directories.right.directory3.command = mkStrOption "bash -c \"xdg-open $HOME/\"";
menus.dashboard.directories.right.directory3.label = mkStrOption "󱂵 Home";
@@ -412,7 +424,8 @@ in
menus.dashboard.shortcuts.right.shortcut1.command = mkStrOption "sleep 0.5 && hyprpicker -a";
menus.dashboard.shortcuts.right.shortcut1.icon = mkStrOption "";
menus.dashboard.shortcuts.right.shortcut1.tooltip = mkStrOption "Color Picker";
menus.dashboard.shortcuts.right.shortcut3.command = mkStrOption "bash -c \"${../scripts/snapshot.sh}\"";
menus.dashboard.shortcuts.right.shortcut3.command =
mkStrOption "bash -c \"${../scripts/snapshot.sh}\"";
menus.dashboard.shortcuts.right.shortcut3.icon = mkStrOption "󰄀";
menus.dashboard.shortcuts.right.shortcut3.tooltip = mkStrOption "Screenshot";
menus.dashboard.stats.enable_gpu = mkBoolOption false;
@@ -581,6 +594,12 @@ in
theme.matugen_settings.mode = mkStrOption "dark";
theme.matugen_settings.scheme_type = mkStrOption "tonal-spot";
theme.matugen_settings.variation = mkStrOption "standard_1";
theme.name = mkOption {
type = types.str;
default = "";
example = "catppuccin_mocha";
description = "Theme to import (see ../themes/*.json)";
};
theme.notification.border_radius = mkStrOption "0.6em";
theme.notification.enableShadow = mkBoolOption false;
theme.notification.opacity = mkIntOption 100;
@@ -608,20 +627,22 @@ in
};
};
config = let
config =
let
theme =
if cfg.theme != ""
then builtins.fromJSON (builtins.readFile ../themes/${cfg.theme}.json)
else {};
if cfg.settings.theme.name != "" then
builtins.fromJSON (builtins.readFile ../themes/${cfg.settings.theme.name}.json)
else
{ };
flatSet = flattenAttrs (lib.attrsets.recursiveUpdate cfg.settings theme) "";
flatSet = lib.attrsets.recursiveUpdate cfg.settings theme;
mergeSet = flatSet // (flattenAttrs cfg.override "");
mergeSet = flatSet // cfg.override;
fullSet = if cfg.layout == null then mergeSet else mergeSet // cfg.layout;
fullSet = if cfg.settings.layout == null then mergeSet else mergeSet // cfg.settings.layout;
finalConfig = toNestedObject fullSet;
finalConfig = builtins.toJSON fullSet;
hyprpanel-diff = pkgs.writeShellApplication {
runtimeInputs = [ pkgs.colordiff ];
@@ -636,7 +657,8 @@ in
'';
};
in mkIf cfg.enable {
in
mkIf cfg.enable {
# nixpkgs.overlays = if cfg.overlay.enable then [ self.overlay ] else null;
nixpkgs.overlays = lib.mkIf cfg.overlay.enable [ self.overlay ];
@@ -644,10 +666,13 @@ in
home.packages = [
package
hyprpanel-diff
(if pkgs ? nerd-fonts.jetbrains-mono
then pkgs.nerd-fonts.jetbrains-mono
(
if pkgs ? nerd-fonts.jetbrains-mono then
pkgs.nerd-fonts.jetbrains-mono
# NOTE:(benvonh) Remove after next release 25.05
else pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; })
else
pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; }
)
];
home.activation =
@@ -692,6 +717,8 @@ in
# };
warnings = if cfg.systemd.enable then [ "The `systemd.enable` option is now obsolete." ] else [ ];
wayland.windowManager.hyprland.settings.exec-once = mkIf cfg.hyprland.enable [ "${package}/bin/hyprpanel" ];
wayland.windowManager.hyprland.settings.exec-once = mkIf cfg.hyprland.enable [
"${package}/bin/hyprpanel"
];
};
}