summaryrefslogtreecommitdiffstats
path: root/krebs/5pkgs/simple/realwallpaper/default.nix
diff options
context:
space:
mode:
authorlassulus <lassulus@lassul.us>2020-03-25 15:39:25 +0100
committerlassulus <lassulus@lassul.us>2020-03-25 15:39:25 +0100
commitc76f1618940ff188258212a0988d3de7525f9e9e (patch)
tree216436c2f051810df8bddcf47f5efb1908d09638 /krebs/5pkgs/simple/realwallpaper/default.nix
parent4337f9dbce769cf64eba0c9ade8097145e782a83 (diff)
realwallpaper: redesign with new image sources
Diffstat (limited to 'krebs/5pkgs/simple/realwallpaper/default.nix')
-rw-r--r--krebs/5pkgs/simple/realwallpaper/default.nix164
1 files changed, 73 insertions, 91 deletions
diff --git a/krebs/5pkgs/simple/realwallpaper/default.nix b/krebs/5pkgs/simple/realwallpaper/default.nix
index 9be8f7c7c..dfe03ff35 100644
--- a/krebs/5pkgs/simple/realwallpaper/default.nix
+++ b/krebs/5pkgs/simple/realwallpaper/default.nix
@@ -17,24 +17,28 @@ pkgs.writers.writeDashBin "generate-wallpaper" ''
fi
}
- # usage: image_size FILENAME
- image_size() {
- identify "$1" | awk '{print$3}'
+ # check if file exists and fetch only if missing
+ fetch_once() {
+ name=$1
+ url=$2
+ test -e "$name" || fetch "$name" "$url"
}
- # usage: make_mask DST SRC MASK
- make_layer() {
- if needs_rebuild "$@"; then
- echo "make $1 (apply mask)" >&2
- convert "$2" "$3" -alpha off -compose copy_opacity -composite "$1"
+ fetch_older_min() {
+ min=$1
+ name=$2
+ url=$3
+ if ! test "$(find $name -mmin -$min)"; then
+ fetch "$name" "$url"
fi
}
- # usage: flatten DST HILAYER LOLAYER
- flatten() {
- if needs_rebuild "$@"; then
- echo "make $1 (flatten)" >&2
- composite "$2" "$3" "$1"
+ fetch_older_days() {
+ days=$1
+ name=$2
+ url=$3
+ if ! test "$(find $name -mmin -$days)"; then
+ fetch "$name" "$url"
fi
}
@@ -60,35 +64,36 @@ pkgs.writers.writeDashBin "generate-wallpaper" ''
return $result
}
+ get_neo_url() {
+ url=$1
+ curl -Ss "$url" | grep '3600 x 1800' | sed 's/.*href="\([^"]*\)".*/\1/'
+ }
+
main() {
cd "$working_dir"
# fetch source images in parallel
- # fetch basic images which should not change
- test -e nightmap-raw.jpg || fetch nightmap-raw.jpg "$nightmap_url" &
- test -e sun-raw.png || fetch sun-raw.png \
- "http://simpleicon.com/wp-content/uploads/sun-64x64.png" &
-
- test -e moon-raw.png || fetch moon-raw.png \
- "http://simpleicon.com/wp-content/uploads/moon__star-64x64.png" &
+ fetch_once sun-raw.png \
+ 'http://simpleicon.com/wp-content/uploads/sun-64x64.png' &
+ fetch_once moon-raw.png \
+ 'http://simpleicon.com/wp-content/uploads/moon__star-64x64.png' &
+ fetch_once nightmap-raw.jpg \
+ 'https://eoimages.gsfc.nasa.gov/images/imagerecords/144000/144898/BlackMarble_2016_3km.jpg' &
+ fetch_once daymap-raw.tif \
+ 'https://eoimages.gsfc.nasa.gov/images/imagerecords/57000/57752/land_shallow_topo_8192.tif' &
+
+ fetch_older_min 720 ice-raw.jpg $(get_neo_url \
+ 'https://neo.sci.gsfc.nasa.gov/view.php?datasetId=NISE_D') &
+ fetch_older_days 3 snow-raw.jpg $(get_neo_url \
+ 'https://neo.sci.gsfc.nasa.gov/view.php?datasetId=MOD10C1_E_SNOW') &
+ fetch_older_days 7 chlora-raw.jpg $(get_neo_url \
+ 'https://neo.sci.gsfc.nasa.gov/view.php?datasetId=MY1DMM_CHLORA') &
+ fetch_older_days 3 fire-raw.jpg $(get_neo_url \
+ 'https://neo.sci.gsfc.nasa.gov/view.php?datasetId=MOD14A1_E_FIRE') &
# regular fetches
fetch marker.json "$marker_url" &
- # fetch daymap twice daily
- if ! test "$(find daymap-raw.png -mmin -720)"; then
- fetch daymap-raw.png "$daymap_url" &
- fi
-
- # fetch cholrophyl once every week
- chlora_url=$(curl -Ss \
- 'https://neo.sci.gsfc.nasa.gov/view.php?datasetId=MY1DMM_CHLORA&date=2999-12-31' \
- | grep '3600 x 1800' | sed 's/.*href="\([^"]*\)".*/\1/')
-
- if ! test "$(find chlora-raw.jpg -mtime -7)"; then
- fetch chlora-raw.jpg "$chlora_url" &
- fi
-
wait
# fetch clouds if they are older than 3h
@@ -96,21 +101,26 @@ pkgs.writers.writeDashBin "generate-wallpaper" ''
${pkgs.nomads-cloud}/bin/nomads-cloud clouds-raw.png
fi
+ check_type sun-raw.png image
+ check_type moon-raw.png image
check_type nightmap-raw.jpg image
- check_type daymap-raw.png image
+ check_type daymap-raw.tif image
+ check_type ice-raw.jpg image
+ check_type snow-raw.jpg image
+ check_type chlora-raw.jpg image
+ check_type fire-raw.jpg image
check_type clouds-raw.png image
- in_size=2048x1024
+ in_size=3600x1800
xplanet_out_size=1466x1200
out_geometry=1366x768+100+160
- nightsnow_color='#0c1a49' # nightmap
-
for raw in \
nightmap-raw.jpg \
- daymap-raw.png \
- clouds-raw.png \
+ daymap-raw.tif \
+ snow-raw.jpg \
chlora-raw.jpg \
+ clouds-raw.png \
;
do
normal=''${raw%-raw.*}.png
@@ -120,6 +130,16 @@ pkgs.writers.writeDashBin "generate-wallpaper" ''
fi
done
+ # remove snow from ice map
+ if needs_rebuild ice.png ice-raw.jpg; then
+ convert ice-raw.jpg -fuzz 20% -fill black -opaque white -scale "$in_size" ice.png
+ fi
+
+ # make fire more red
+ if needs_rebuild fire.png fire-raw.jpg; then
+ convert fire-raw.jpg -fuzz 20% -fill '#ef840c' -opaque white -scale "$in_size" fire.png
+ fi
+
if needs_rebuild sun.png sun-raw.png; then
convert sun-raw.png -fill gold -opaque black -resize 50% PNG64:sun.png
fi
@@ -131,60 +151,22 @@ pkgs.writers.writeDashBin "generate-wallpaper" ''
# -- Daymap --
# merge with water chlora layer
- convert daymap.png chlora.png -compose lighten -composite daymap-final.png
-
- # -- Nightmap --
-
- # merge with water chlora layer
- convert nightmap.png \( -fill black -colorize 70% chlora.png \) \
- -compose lighten -composite nightmap-chlora.png
-
- # create nightmap-fullsnow, a big blue picture
- if needs_rebuild nightmap-fullsnow.png; then
- convert -size $in_size xc:$nightsnow_color nightmap-fullsnow.png
- fi
-
- # extract daymap-snowmask from daymap-final
- if needs_rebuild daymap-snowmask.png daymap.png; then
- convert daymap.png -threshold 95% daymap-snowmask.png
- fi
-
- # extract nightmap-lightmask from nightmap
- if needs_rebuild nightmap-lightmask.png nightmap.png; then
- convert nightmap.png -threshold 25% nightmap-lightmask.png
+ if needs_rebuild daymap-final.png daymap.png fire.png snow.png ice.png chlora.png; then
+ convert daymap.png fire.png -compose lighten -composite daymap-1.png
+ convert daymap-1.png ice.png -compose lighten -composite daymap-2.png
+ convert daymap-2.png snow.png -compose lighten -composite daymap-3.png
+ convert daymap-3.png chlora.png -compose lighten -composite daymap-final.png
fi
- # create layers
- make_layer nightmap-snowlayer.png nightmap-fullsnow.png daymap-snowmask.png
- make_layer nightmap-lightlayer.png nightmap.png nightmap-lightmask.png
-
- # apply layers
- flatten nightmap-lightsnowlayer.png \
- nightmap-lightlayer.png \
- nightmap-snowlayer.png
-
- flatten nightmap-final.png \
- nightmap-lightsnowlayer.png \
- nightmap-chlora.png
-
+ # -- Nightmap --
- # create marker file from json
- if [ -s marker.json ]; then
- jq -r 'to_entries[] | @json "\(.value.latitude) \(.value.longitude)"' marker.json > marker_file
- echo 'position=sun image=sun.png' >> marker_file
- echo 'position=moon image=moon.png' >> marker_file
+ if needs_rebuild nightmap-final.png nightmap.png fire.png snow.png ice.png chlora.png; then
+ convert nightmap.png fire.png -compose lighten -composite nightmap-1.png
+ convert nightmap-1.png \( -fill black -colorize 70% ice.png \) -compose lighten -composite nightmap-2.png
+ convert nightmap-2.png \( -fill black -colorize 70% snow.png \) -compose lighten -composite nightmap-3.png
+ convert nightmap-3.png \( -fill black -colorize 70% chlora.png \) -compose lighten -composite nightmap-final.png
fi
- # make all unmodified files as final
- for normal in \
- clouds.png \
- ;
- do
- final=''${normal%.png}-final.png
- needs_rebuild $final &&
- ln $normal $final
- done
-
# rebuild every time to update shadow
xplanet --num_times 1 --geometry $xplanet_out_size \
--output xplanet-output.png --projection merc \
@@ -193,7 +175,7 @@ pkgs.writers.writeDashBin "generate-wallpaper" ''
"Earth"
map=daymap-final.png
night_map=nightmap-final.png
- cloud_map=clouds-final.png
+ cloud_map=clouds.png
cloud_threshold=1
cloud_gamma=2.5
shade=15
@@ -206,7 +188,7 @@ pkgs.writers.writeDashBin "generate-wallpaper" ''
"Earth"
map=daymap-final.png
night_map=nightmap-final.png
- cloud_map=clouds-final.png
+ cloud_map=clouds.png
cloud_threshold=1
cloud_gamma=2.5
marker_file=marker_file