summaryrefslogtreecommitdiffstats
path: root/krebs/3modules
diff options
context:
space:
mode:
Diffstat (limited to 'krebs/3modules')
-rw-r--r--krebs/3modules/realwallpaper.nix185
1 files changed, 1 insertions, 184 deletions
diff --git a/krebs/3modules/realwallpaper.nix b/krebs/3modules/realwallpaper.nix
index c09bb008d..a83758ccd 100644
--- a/krebs/3modules/realwallpaper.nix
+++ b/krebs/3modules/realwallpaper.nix
@@ -77,190 +77,7 @@ let
serviceConfig = {
Type = "simple";
- ExecStart = pkgs.writeDash "generate-wallpaper" ''
- set -euf
-
- # usage: getimg FILENAME URL
- fetch() {
- echo "fetch $1"
- curl -LsS -z "$1" -o "$1" "$2"
- }
-
- # usage: check_type FILENAME TYPE
- check_type() {
- if ! file -ib "$1" | grep -q "^$2/"; then
- echo "$1 is not of type $2" >&2
- rm "$1"
- return 1
- fi
- }
-
- # usage: image_size FILENAME
- image_size() {
- identify "$1" | awk '{print$3}'
- }
-
- # 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"
- fi
- }
-
- # usage: flatten DST HILAYER LOLAYER
- flatten() {
- if needs_rebuild "$@"; then
- echo "make $1 (flatten)" >&2
- composite "$2" "$3" "$1"
- fi
- }
-
- # usage: needs_rebuild DST SRC...
- needs_rebuild() {
- a="$1"
- shift
- if ! test -e "$a"; then
- #echo " $a does not exist" >&2
- result=0
- else
- result=1
- for b; do
- if test "$b" -nt "$a"; then
- #echo " $b is newer than $a" >&2
- result=0
- fi
- done
- fi
- #case $result in
- # 0) echo "$a needs rebuild" >&2;;
- #esac
- return $result
- }
-
- main() {
- cd ${cfg.workingDir}
-
- # fetch source images in parallel
- fetch nightmap-raw.jpg \
- ${cfg.nightmap} &
- fetch daymap-raw.png \
- ${cfg.daymap} &
- fetch clouds-raw.jpg \
- ${cfg.cloudmap} &
- fetch marker.json \
- ${cfg.marker} &
- wait
-
- check_type nightmap-raw.jpg image
- check_type daymap-raw.png image
- check_type clouds-raw.jpg image
-
- in_size=2048x1024
- xplanet_out_size=1466x1200
- out_geometry=1366x768+100+160
-
- nightsnow_color='#0c1a49' # nightmap
-
- for raw in \
- nightmap-raw.jpg \
- daymap-raw.png \
- clouds-raw.jpg \
- ;
- do
- normal=''${raw%-raw.*}.png
- if needs_rebuild $normal $raw; then
- echo "make $normal; normalize $raw" >&2
- convert $raw -scale $in_size $normal
- fi
- done
-
- # create nightmap-fullsnow
- 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
- 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.png
-
- # create marker file from json
- if [ -s marker.json ]; then
- jq -r 'to_entries[] | @json "\(.value.latitude) \(.value.longitude)"' marker.json > marker_file
- fi
-
- # make all unmodified files as final
- for normal in \
- daymap.png \
- 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 \
- -config ${pkgs.writeText "xplanet.config" ''
- [earth]
- "Earth"
- map=daymap-final.png
- night_map=nightmap-final.png
- cloud_map=clouds-final.png
- cloud_threshold=10
- shade=15
- ''}
-
- xplanet --num_times 1 --geometry $xplanet_out_size \
- --output xplanet-krebs-output.png --projection merc \
- -config ${pkgs.writeText "xplanet-krebs.config" ''
- [earth]
- "Earth"
- map=daymap-final.png
- night_map=nightmap-final.png
- cloud_map=clouds-final.png
- cloud_threshold=10
- marker_file=marker_file
- shade=15
- ''}
-
- # trim xplanet output
- if needs_rebuild realwallpaper.png xplanet-output.png; then
- convert xplanet-output.png -crop $out_geometry \
- realwallpaper-tmp.png
- mv realwallpaper-tmp.png realwallpaper.png
- fi
-
- if needs_rebuild realwallpaper-krebs.png xplanet-krebs-output.png; then
- convert xplanet-krebs-output.png -crop $out_geometry \
- realwallpaper-krebs-tmp.png
- mv realwallpaper-krebs-tmp.png realwallpaper-krebs.png
- fi
- }
-
- main "$@"
- '';
+ ExecStart = "${pkgs.realwallpaper}/bin/generate-wallpaper";
User = "realwallpaper";
};
};