should build the icon theme

This commit is contained in:
alsaiduq-lab 2025-03-28 14:37:37 -06:00
parent e844794e8a
commit 8378ba87c8
2 changed files with 103 additions and 64 deletions

View file

@ -2,6 +2,8 @@
lib,
stdenv,
fetchFromGitHub,
hicolor-icon-theme,
candy-icons,
}:
stdenv.mkDerivation {
pname = "vivid-icons";
@ -12,64 +14,85 @@ stdenv.mkDerivation {
rev = "fe8b8f1bdd3784dc838c125bb9e1b2d713f40e67";
sha256 = "UlZkxeWb2n5TexaQymeyEqAjKwDfonTXO2OYjICHl+U=";
};
buildInputs = [ ];
propagatedBuildInputs = [ hicolor-icon-theme candy-icons ];
dontBuild = true;
dontFixup = true;
dontUpdateIconCache = true;
installPhase = ''
echo "Source contents at root:"
ls -la .
mkdir -p $out/share/icons
cd "Vivid Icons Themes"
echo "Contents of Vivid Icons Themes:"
ls -la .
for dir in Vivid-Dark-Icons Vivid-Glassy-Dark-Icons Vivid-Magna-Glassy-Dark-Icons; do
if [ -d "$dir" ]; then
echo "Processing: $dir"
theme_name="$dir"
dest_dir="$out/share/icons/$theme_name"
mkdir -p "$dest_dir"
find "$dir" -type d -regex ".*/[0-9]+" | while read -r size_dir; do
size=$(basename "$size_dir")
category=$(basename "$(dirname "$size_dir")")
target_dir="$dest_dir/''${size}x''${size}/$category"
mkdir -p "$target_dir"
cp -rv "$size_dir"/* "$target_dir/"
done
echo "[Icon Theme]" > "$dest_dir/index.theme"
echo "Name=$theme_name" >> "$dest_dir/index.theme"
echo "Comment=$theme_name icons" >> "$dest_dir/index.theme"
directories=""
for size_dir in "$dest_dir"/*; do
if [ -d "$size_dir" ]; then
size=$(basename "$size_dir") # e.g., "22x22"
if [[ "$size" =~ ^[0-9]+x[0-9]+$ ]]; then
directories="$directories''${directories:+,}$size"
echo "[$size]" >> "$dest_dir/index.theme"
echo "Size=''${size%%x*}" >> "$dest_dir/index.theme"
echo "Context=Actions" >> "$dest_dir/index.theme"
echo "Type=Fixed" >> "$dest_dir/index.theme"
fi
fi
done
if [ -z "$directories" ]; then
echo "No size dirs found for $theme_name, adding fallback"
directories="scalable"
echo "[scalable]" >> "$dest_dir/index.theme"
echo "Size=48" >> "$dest_dir/index.theme"
echo "Context=Actions" >> "$dest_dir/index.theme"
echo "Type=Scalable" >> "$dest_dir/index.theme"
mkdir -p $out/share/icons
cd "Vivid Icons Themes"
for dir in Vivid-Dark-Icons Vivid-Glassy-Dark-Icons Vivid-Magna-Glassy-Dark-Icons; do
if [ -d "$dir" ]; then
dest_dir="$out/share/icons/$dir"
mkdir -p "$dest_dir"
cp -r "$dir"/* "$dest_dir/" || true
mkdir -p "$dest_dir/actions/16" "$dest_dir/actions/22" "$dest_dir/actions/24" "$dest_dir/actions/32"
mkdir -p "$dest_dir/status/16" "$dest_dir/status/22" "$dest_dir/status/24" "$dest_dir/status/32"
essential_icons=(
"help-about" "window-close" "gtk-apply" "go-previous" "go-next" "process-stop"
"list-add" "list-remove" "edit-cut" "edit-copy" "edit-paste" "document-new"
"document-open" "document-save" "document-save-as" "folder-new" "folder"
"edit-delete" "edit-find" "edit-redo" "edit-undo" "view-refresh" "system-run"
"dialog-ok" "dialog-cancel" "dialog-close" "dialog-error" "image-missing"
)
for size in 16 22 24 32; do
mkdir -p "$dest_dir/actions/$size"
mkdir -p "$dest_dir/status/$size"
for icon in ''${essential_icons[@]}; do
if [ ! -f "$dest_dir/actions/$size/$icon.svg" ] && [ ! -f "$dest_dir/actions/$size/$icon.png" ]; then
for candy_size in $size 16 22 24 32 48 64; do
for ext in svg png; do
for category in actions status apps; do
if [ -f "${candy-icons}/share/icons/candy-icons/$candy_size/$category/$icon.$ext" ]; then
ln -sf "${candy-icons}/share/icons/candy-icons/$candy_size/$category/$icon.$ext" "$dest_dir/actions/$size/$icon.$ext"
break 3
fi
done
done
done
fi
if [ ! -f "$dest_dir/status/$size/$icon.svg" ] && [ ! -f "$dest_dir/status/$size/$icon.png" ]; then
for candy_size in $size 16 22 24 32 48 64; do
for ext in svg png; do
for category in status actions apps; do
if [ -f "${candy-icons}/share/icons/candy-icons/$candy_size/$category/$icon.$ext" ]; then
ln -sf "${candy-icons}/share/icons/candy-icons/$candy_size/$category/$icon.$ext" "$dest_dir/status/$size/$icon.$ext"
break 3
fi
done
done
done
fi
done
done
if [ -f "$dest_dir/index.theme" ]; then
if grep -q "^Inherits=" "$dest_dir/index.theme"; then
sed -i 's/^Inherits=.*/Inherits=candy-icons,hicolor/' "$dest_dir/index.theme"
else
echo "Inherits=candy-icons,hicolor" >> "$dest_dir/index.theme"
fi
if grep -q "^Name=" "$dest_dir/index.theme"; then
sed -i 's/^Name=.*/Name=Vivid-Magna-Glassy-Dark-Icons/' "$dest_dir/index.theme"
else
echo "Name=Vivid-Magna-Glassy-Dark-Icons" >> "$dest_dir/index.theme"
fi
else
cat > "$dest_dir/index.theme" << EOF
[Icon Theme]
Name=Vivid-Magna-Glassy-Dark-Icons
Comment=$dir Icon Theme
Inherits=candy-icons,hicolor
EOF
fi
touch "$dest_dir/.icon-theme.cache"
fi
echo "Directories=$directories" >> "$dest_dir/index.theme"
else
echo "Warning: $dir not found in Vivid Icons Themes"
fi
done
echo "Installed themes:"
ls -la $out/share/icons/
'';
meta = with lib; {
done
'';
meta = {
description = "Vivid Icons Theme";
homepage = "https://github.com/L4ki/Vivid-Plasma-Themes";
license = licenses.gpl3;
platforms = platforms.all;
maintainers = with maintainers; [ "Cobray" ];
license = lib.licenses.gpl3;
platforms = lib.platforms.all;
maintainers = [ "Cobray" ];
};
}