Merge pull request #854 from Ciflire/master
feat: adding iconWorkspaceMap option
This commit is contained in:
195
nix/module.nix
195
nix/module.nix
@@ -1,14 +1,28 @@
|
|||||||
self: { lib, pkgs, config, ... }:
|
self:
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
inherit (lib) types mkIf mkOption mkEnableOption;
|
inherit (lib)
|
||||||
|
types
|
||||||
|
mkIf
|
||||||
|
mkOption
|
||||||
|
mkEnableOption
|
||||||
|
;
|
||||||
|
|
||||||
cfg = config.programs.hyprpanel;
|
cfg = config.programs.hyprpanel;
|
||||||
|
|
||||||
jsonFormat = pkgs.formats.json { };
|
jsonFormat = pkgs.formats.json { };
|
||||||
|
|
||||||
# No package option
|
# No package option
|
||||||
package = if pkgs ? hyprpanel then pkgs.hyprpanel
|
package =
|
||||||
else abort ''
|
if pkgs ? hyprpanel then
|
||||||
|
pkgs.hyprpanel
|
||||||
|
else
|
||||||
|
abort ''
|
||||||
|
|
||||||
********************************************************************************
|
********************************************************************************
|
||||||
* HyprPanel *
|
* HyprPanel *
|
||||||
@@ -22,58 +36,37 @@ let
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
# Shorthand lambda for self-documenting options under settings
|
# Shorthand lambda for self-documenting options under settings
|
||||||
mkStrOption = default: mkOption { type = types.str; default = default; };
|
mkStrOption =
|
||||||
mkIntOption = default: mkOption { type = types.int; default = default; };
|
default:
|
||||||
mkBoolOption = default: mkOption { type = types.bool; default = default; };
|
mkOption {
|
||||||
mkStrListOption = default: mkOption { type = types.listOf types.str; default = default; };
|
type = types.str;
|
||||||
mkFloatOption = default: mkOption { type = types.float; default = default; };
|
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
|
in
|
||||||
{
|
{
|
||||||
options.programs.hyprpanel = {
|
options.programs.hyprpanel = {
|
||||||
@@ -84,13 +77,6 @@ in
|
|||||||
hyprland.enable = mkEnableOption "Hyprland integration";
|
hyprland.enable = mkEnableOption "Hyprland integration";
|
||||||
overwrite.enable = mkEnableOption "overwrite config fix";
|
overwrite.enable = mkEnableOption "overwrite config fix";
|
||||||
|
|
||||||
theme = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "";
|
|
||||||
example = "catppuccin_mocha";
|
|
||||||
description = "Theme to import (see ../themes/*.json)";
|
|
||||||
};
|
|
||||||
|
|
||||||
override = mkOption {
|
override = mkOption {
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
default = { };
|
default = { };
|
||||||
@@ -105,6 +91,7 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
settings = {
|
||||||
layout = mkOption {
|
layout = mkOption {
|
||||||
type = jsonFormat.type;
|
type = jsonFormat.type;
|
||||||
default = null;
|
default = null;
|
||||||
@@ -131,8 +118,6 @@ in
|
|||||||
'';
|
'';
|
||||||
description = "https://hyprpanel.com/configuration/panel.html";
|
description = "https://hyprpanel.com/configuration/panel.html";
|
||||||
};
|
};
|
||||||
|
|
||||||
settings = {
|
|
||||||
bar.autoHide = mkStrOption "never";
|
bar.autoHide = mkStrOption "never";
|
||||||
bar.battery.hideLabelWhenFull = mkBoolOption false;
|
bar.battery.hideLabelWhenFull = mkBoolOption false;
|
||||||
bar.battery.label = mkBoolOption true;
|
bar.battery.label = mkBoolOption true;
|
||||||
@@ -156,7 +141,16 @@ in
|
|||||||
bar.customModules.cava.showIcon = mkBoolOption true;
|
bar.customModules.cava.showIcon = mkBoolOption true;
|
||||||
bar.customModules.cava.icon = mkStrOption "";
|
bar.customModules.cava.icon = mkStrOption "";
|
||||||
bar.customModules.cava.spaceCharacter = 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.showActiveOnly = mkBoolOption false;
|
||||||
bar.customModules.cava.bars = mkIntOption 10;
|
bar.customModules.cava.bars = mkIntOption 10;
|
||||||
bar.customModules.cava.channels = mkIntOption 2;
|
bar.customModules.cava.channels = mkIntOption 2;
|
||||||
@@ -363,6 +357,19 @@ in
|
|||||||
bar.workspaces.spacing = mkFloatOption 1.0;
|
bar.workspaces.spacing = mkFloatOption 1.0;
|
||||||
bar.workspaces.workspaceMask = mkBoolOption false;
|
bar.workspaces.workspaceMask = mkBoolOption false;
|
||||||
bar.workspaces.workspaces = mkIntOption 5;
|
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;
|
dummy = mkBoolOption true;
|
||||||
hyprpanel.restartAgs = mkBoolOption true;
|
hyprpanel.restartAgs = mkBoolOption true;
|
||||||
# hyprpanel.restartCommand = mkStrOption "${pkgs.procps}/bin/pkill -u $USER -USR1 hyprpanel; ${package}/bin/hyprpanel";
|
# 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.clock.weather.unit = mkStrOption "imperial";
|
||||||
menus.dashboard.controls.enabled = mkBoolOption true;
|
menus.dashboard.controls.enabled = mkBoolOption true;
|
||||||
menus.dashboard.directories.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.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.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.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.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.directory2.label = mkStrOption " Pictures";
|
||||||
menus.dashboard.directories.right.directory3.command = mkStrOption "bash -c \"xdg-open $HOME/\"";
|
menus.dashboard.directories.right.directory3.command = mkStrOption "bash -c \"xdg-open $HOME/\"";
|
||||||
menus.dashboard.directories.right.directory3.label = mkStrOption " 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.command = mkStrOption "sleep 0.5 && hyprpicker -a";
|
||||||
menus.dashboard.shortcuts.right.shortcut1.icon = mkStrOption "";
|
menus.dashboard.shortcuts.right.shortcut1.icon = mkStrOption "";
|
||||||
menus.dashboard.shortcuts.right.shortcut1.tooltip = mkStrOption "Color Picker";
|
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.icon = mkStrOption "";
|
||||||
menus.dashboard.shortcuts.right.shortcut3.tooltip = mkStrOption "Screenshot";
|
menus.dashboard.shortcuts.right.shortcut3.tooltip = mkStrOption "Screenshot";
|
||||||
menus.dashboard.stats.enable_gpu = mkBoolOption false;
|
menus.dashboard.stats.enable_gpu = mkBoolOption false;
|
||||||
@@ -581,6 +594,12 @@ in
|
|||||||
theme.matugen_settings.mode = mkStrOption "dark";
|
theme.matugen_settings.mode = mkStrOption "dark";
|
||||||
theme.matugen_settings.scheme_type = mkStrOption "tonal-spot";
|
theme.matugen_settings.scheme_type = mkStrOption "tonal-spot";
|
||||||
theme.matugen_settings.variation = mkStrOption "standard_1";
|
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.border_radius = mkStrOption "0.6em";
|
||||||
theme.notification.enableShadow = mkBoolOption false;
|
theme.notification.enableShadow = mkBoolOption false;
|
||||||
theme.notification.opacity = mkIntOption 100;
|
theme.notification.opacity = mkIntOption 100;
|
||||||
@@ -608,20 +627,22 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = let
|
config =
|
||||||
|
let
|
||||||
|
|
||||||
theme =
|
theme =
|
||||||
if cfg.theme != ""
|
if cfg.settings.theme.name != "" then
|
||||||
then builtins.fromJSON (builtins.readFile ../themes/${cfg.theme}.json)
|
builtins.fromJSON (builtins.readFile ../themes/${cfg.settings.theme.name}.json)
|
||||||
else {};
|
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 {
|
hyprpanel-diff = pkgs.writeShellApplication {
|
||||||
runtimeInputs = [ pkgs.colordiff ];
|
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 = if cfg.overlay.enable then [ self.overlay ] else null;
|
||||||
nixpkgs.overlays = lib.mkIf cfg.overlay.enable [ self.overlay ];
|
nixpkgs.overlays = lib.mkIf cfg.overlay.enable [ self.overlay ];
|
||||||
@@ -644,10 +666,13 @@ in
|
|||||||
home.packages = [
|
home.packages = [
|
||||||
package
|
package
|
||||||
hyprpanel-diff
|
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
|
# NOTE:(benvonh) Remove after next release 25.05
|
||||||
else pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; })
|
else
|
||||||
|
pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; }
|
||||||
|
)
|
||||||
];
|
];
|
||||||
|
|
||||||
home.activation =
|
home.activation =
|
||||||
@@ -692,6 +717,8 @@ in
|
|||||||
# };
|
# };
|
||||||
warnings = if cfg.systemd.enable then [ "The `systemd.enable` option is now obsolete." ] else [ ];
|
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"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user