nix: Add overlay to HM module + useful script

This commit is contained in:
benvonh
2024-12-28 16:32:59 +10:00
parent ba7e0dfd52
commit 1b4b6c90eb

View File

@@ -7,7 +7,7 @@ let
jsonFormat = pkgs.formats.json { }; jsonFormat = pkgs.formats.json { };
# No package option # No package option
package = self.packages.${pkgs.system}.default; package = pkgs.hyprpanel;
# 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 = default: mkOption { type = types.str; default = default; };
@@ -43,14 +43,14 @@ let
let let
items = builtins.map toNestedValue value; items = builtins.map toNestedValue value;
in in
"[" + (builtins.concatStringsSep ", " items) + "]" "[\n" + (builtins.concatStringsSep ", " items) + "\n]"
else if builtins.isAttrs value then else if builtins.isAttrs value then
let let
keys = builtins.attrNames value; keys = builtins.attrNames value;
toKeyValue = k: "\"${k}\": ${toNestedValue value.${k}}"; toKeyValue = k: "\"${k}\": ${toNestedValue value.${k}}";
inner = builtins.concatStringsSep ", " (builtins.map toKeyValue keys); inner = builtins.concatStringsSep ", " (builtins.map toKeyValue keys);
in in
"{ " + inner + " }" "{\n" + inner + "\n}"
else else
abort "Unexpected error! Please post a new issue and @benvonh..."; abort "Unexpected error! Please post a new issue and @benvonh...";
@@ -59,7 +59,7 @@ let
keys = builtins.attrNames attrSet; keys = builtins.attrNames attrSet;
kvPairs = builtins.map (k: "\"${k}\": ${toNestedValue attrSet.${k}}") keys; kvPairs = builtins.map (k: "\"${k}\": ${toNestedValue attrSet.${k}}") keys;
in in
"{ " + builtins.concatStringsSep ", " kvPairs + " }"; "{\n " + builtins.concatStringsSep ",\n " kvPairs + "\n}";
in in
{ {
options.programs.hyprpanel = { options.programs.hyprpanel = {
@@ -547,9 +547,40 @@ in
}; };
}; };
config = mkIf cfg.enable { config = let
theme = if cfg.theme != ""
then builtins.fromJSON (builtins.readFile ../themes/${cfg.theme}.json)
else {};
flatSet = flattenAttrs (lib.attrsets.recursiveUpdate cfg.settings theme) "";
mergeSet = flatSet // (flattenAttrs cfg.override "");
fullSet = if cfg.layout == null then mergeSet else mergeSet // cfg.layout;
finalConfig = toNestedObject fullSet;
hyprpanel-diff = pkgs.writeShellApplication {
runtimeInputs = [ pkgs.colordiff ];
name = "hyprpanel-diff";
text = ''
cd
echo '------------- HyprPanel -------------'
echo 'Please ignore the layout diff for now'
echo '-------------------------------------'
colordiff ${config.xdg.configFile.hyprpanel.target} \
${config.xdg.configFile.hyprpanel-swap.target}
'';
};
in mkIf cfg.enable {
nixpkgs.overlays = [ self.overlay ];
home.packages = [ home.packages = [
package package
hyprpanel-diff
(if pkgs ? nerd-fonts.jetbrains-mono (if pkgs ? nerd-fonts.jetbrains-mono
then 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
@@ -569,19 +600,17 @@ in
''; '';
}; };
xdg.configFile.hyprpanel = let xdg.configFile.hyprpanel = {
theme = if cfg.theme != ""
then builtins.fromJSON (builtins.readFile ../themes/${cfg.theme}.json)
else {};
flatSet = flattenAttrs (lib.attrsets.recursiveUpdate cfg.settings theme) "";
mergeSet = flatSet // (flattenAttrs cfg.override "");
fullSet = if cfg.layout == null then mergeSet else mergeSet // cfg.layout;
in {
target = "hyprpanel/config.json"; target = "hyprpanel/config.json";
text = toNestedObject fullSet; text = finalConfig;
onChange = "${pkgs.procps}/bin/pkill -u $USER -USR1 hyprpanel || true"; onChange = "${pkgs.procps}/bin/pkill -u $USER -USR1 hyprpanel || true";
}; };
xdg.configFile.hyprpanel-swap = {
target = "hyprpanel/config.hm.json";
text = finalConfig;
};
systemd.user.services = mkIf cfg.systemd.enable { systemd.user.services = mkIf cfg.systemd.enable {
hyprpanel = { hyprpanel = {
Unit = { Unit = {