This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

pkgs: vendor realwallpaper, nomads-cloud and grib2json from stockholm

nomads-cloud and grib2json are only realwallpaper dependencies; they are
pulled in by path since pkgs/ is not an overlay.

+491 -3
+2 -3
modules/realwallpaper.nix
··· 1 1 # Copied from stockholm krebs/3modules/realwallpaper.nix (cc283503); 2 - # realwallpaper now comes from stockholm's packages output instead of its 3 - # overlay. 2 + # realwallpaper itself is pkgs/realwallpaper. 4 3 { 5 4 config, 6 5 lib, ··· 62 61 Type = "simple"; 63 62 Restart = "on-failure"; 64 63 ExecStart = "${ 65 - self.inputs.stockholm.packages.${pkgs.stdenv.hostPlatform.system}.realwallpaper 64 + self.packages.${pkgs.stdenv.hostPlatform.system}.realwallpaper 66 65 }/bin/generate-wallpaper"; 67 66 User = "realwallpaper"; 68 67 };
+24
pkgs/grib2json/package.nix
··· 1 + # Copied from stockholm krebs/5pkgs/simple/grib2json (cc283503). 2 + { 3 + stdenv, 4 + fetchzip, 5 + jre, 6 + }: 7 + 8 + stdenv.mkDerivation { 9 + name = "grib2json"; 10 + src = fetchzip { 11 + url = "https://github.com/krebs/grib2json-bin/archive/31efe677b40fe491c988d50f96b59b1b7e2d46f7.zip"; 12 + sha256 = "1h3yxg270bvac7kaqsbsv4f8nln1i03rfz4cm8cp7llhjj3s6a6b"; 13 + }; 14 + installPhase = '' 15 + mkdir -p $out/bin 16 + cp -r lib $out/ 17 + cat > $out/bin/grib2json << EOF 18 + #!/bin/sh 19 + set -x 20 + ${jre}/bin/java -jar $out/lib/grib2json-0.8.0-SNAPSHOT.jar "\$@" 21 + EOF 22 + chmod +x $out/bin/grib2json 23 + ''; 24 + }
+56
pkgs/nomads-cloud/package.nix
··· 1 + # Copied from stockholm krebs/5pkgs/simple/nomads-cloud (cc283503). 2 + { 3 + callPackage, 4 + writers, 5 + coreutils, 6 + curl, 7 + jq, 8 + findutils, 9 + imagemagick, 10 + }: 11 + let 12 + grib2json = callPackage ../grib2json/package.nix { }; 13 + in 14 + writers.writeDashBin "nomads-cloud" '' 15 + prefix=$(mktemp -d) 16 + grib_path=$prefix/clouds.grib 17 + json_path=$prefix/clouds.json 18 + pgm_path=$prefix/clouds.pgm 19 + png_path=$1 20 + 21 + mkdir -p "$prefix" 22 + 23 + date=$(${coreutils}/bin/date +%Y%m%d) 24 + for hour in 18 12 06 00; do 25 + url="https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25_1hr.pl?file=gfs.t''${hour}z.pgrb2.0p25.anl&lev_entire_atmosphere_%5C%28considered_as_a_single_layer%5C%29=on&var_CWAT=on&leftlon=-180&rightlon=180&toplat=90&bottomlat=-90&dir=%2Fgfs.''${date}%2F''${hour}%2Fatmos" 26 + echo "$url" 27 + ${curl}/bin/curl -fsS "$url" > "$grib_path" 28 + if [ "$?" -eq 0 ]; then 29 + break 30 + fi 31 + done 32 + ${grib2json}/bin/grib2json --data "$grib_path" > "$json_path" 33 + 34 + width=$(${jq}/bin/jq '.[0].header.nx' < "$json_path") 35 + height=$(${jq}/bin/jq '.[0].header.ny' < "$json_path") 36 + 37 + # The maximum gray value. Must be bigger than 0 and less than 65536. 38 + maxval=1000 39 + 40 + # pgm - Netpbm grayscale image format 41 + # http://netpbm.sourceforge.net/doc/pgm.html 42 + { 43 + echo P2 44 + echo "$width $height" 45 + echo "$maxval" 46 + cat "$json_path" | 47 + ${jq}/bin/jq --argjson maxval "$maxval" -c ' 48 + ((.[0].data[]) * $maxval | round) 49 + ' | 50 + ${findutils}/bin/xargs -n "$width" 51 + } > "$pgm_path" 52 + 53 + ${imagemagick}/bin/convert -roll +50% "$pgm_path" "$png_path" 54 + 55 + rm -r "$prefix" 56 + ''
+41
pkgs/realwallpaper/get_constellations.py
··· 1 + from astropy.coordinates import SkyCoord, ITRS, representation 2 + from astropy.time import Time 3 + import json 4 + import sys 5 + 6 + 7 + def convert_to_itrs(coord): 8 + c = SkyCoord(coord[0], coord[1], unit='degree', frame='icrs') 9 + c_itrs = c.transform_to(ITRS(obstime=Time.now())) 10 + rep = c_itrs.represent_as(representation.UnitSphericalRepresentation) 11 + return [rep.lat.deg, rep.lon.deg] 12 + 13 + 14 + def points_to_lines(points): 15 + lines = [] 16 + for x in range(len(points) - 1): 17 + lines.append([points[x], points[x+1]]) 18 + return lines 19 + 20 + 21 + def main(): 22 + with open(sys.argv[1]) as f: 23 + constellations = json.load(f)['features'] 24 + 25 + output = [] 26 + 27 + for const in constellations: 28 + for line in const['geometry']['coordinates']: 29 + transformed_line = [] 30 + for point in line: 31 + transformed_line.append(convert_to_itrs(point)) 32 + 33 + line_combined = points_to_lines(transformed_line) 34 + for l in line_combined: # noqa 35 + output.append(f'{l[0][0]} {l[0][1]} {l[1][0]} {l[1][1]} # {const["id"]}') # noqa 36 + 37 + print('\n'.join(output)) 38 + 39 + 40 + if __name__ == "__main__": 41 + main()
+368
pkgs/realwallpaper/package.nix
··· 1 + # Copied from stockholm krebs/5pkgs/simple/realwallpaper (cc283503). 2 + { pkgs, callPackage }: 3 + let 4 + nomads-cloud = callPackage ../nomads-cloud/package.nix { }; 5 + in 6 + pkgs.writers.writeDashBin "generate-wallpaper" '' 7 + set -euf 8 + 9 + export PATH=${ 10 + pkgs.lib.makeBinPath ( 11 + [ 12 + nomads-cloud 13 + ] 14 + ++ (with pkgs; [ 15 + coreutils 16 + curl 17 + gnugrep 18 + gnused 19 + file 20 + findutils 21 + imagemagick 22 + inkscape 23 + jq 24 + xplanet 25 + ]) 26 + ) 27 + } 28 + 29 + # usage: getimg FILENAME URL 30 + fetch() { 31 + echo "fetch $1" 32 + curl -LsS -z "$1" -o "$1" "$2" 33 + } 34 + 35 + # usage: check_type FILENAME TYPE 36 + check_type() { 37 + if ! file -ib "$1" | grep -q "^$2/"; then 38 + echo "$1 is not of type $2" >&2 39 + rm "$1" 40 + return 1 41 + fi 42 + } 43 + 44 + # check if file exists and fetch only if missing 45 + fetch_once() { 46 + name=$1 47 + url=$2 48 + test -e "$name" || fetch "$name" "$url" 49 + } 50 + 51 + fetch_older_min() { 52 + min=$1 53 + name=$2 54 + url=$3 55 + if ! test "$(find $name -mmin -$min)"; then 56 + fetch "$name" "$url" 57 + fi 58 + } 59 + 60 + fetch_older_days() { 61 + days=$1 62 + name=$2 63 + url=$3 64 + if ! test "$(find $name -mtime -$days)"; then 65 + fetch "$name" "$url" 66 + fi 67 + } 68 + 69 + # usage: needs_rebuild DST SRC... 70 + needs_rebuild() { 71 + a="$1" 72 + shift 73 + if ! test -e "$a"; then 74 + #echo " $a does not exist" >&2 75 + result=0 76 + else 77 + result=1 78 + for b; do 79 + if check_type "$b" image; then 80 + if test "$b" -nt "$a"; then 81 + #echo " $b is newer than $a" >&2 82 + result=0 83 + fi 84 + fi 85 + done 86 + fi 87 + #case $result in 88 + # 0) echo "$a needs rebuild" >&2;; 89 + #esac 90 + return $result 91 + } 92 + 93 + get_neo_url() { 94 + url=$1 95 + curl -Ss "$url" | grep '3600 x 1800' | sed 's/.*href="\([^"]*\)".*/\1/' 96 + } 97 + 98 + main() { 99 + cd "''${working_dir:-$PWD}" 100 + 101 + # fetch source images in parallel 102 + fetch_once nightmap-raw.jpg \ 103 + 'https://eoimages.gsfc.nasa.gov/images/imagerecords/144000/144898/BlackMarble_2016_3km.jpg' & 104 + fetch_once daymap-raw.tif \ 105 + 'https://eoimages.gsfc.nasa.gov/images/imagerecords/57000/57752/land_shallow_topo_8192.tif' & 106 + 107 + fetch_once mercury-raw.svg \ 108 + 'https://upload.wikimedia.org/wikipedia/commons/2/2e/Mercury_symbol.svg' & 109 + fetch_once venus-raw.svg \ 110 + 'https://upload.wikimedia.org/wikipedia/commons/6/66/Venus_symbol.svg' & 111 + fetch_once mars-raw.svg \ 112 + 'https://upload.wikimedia.org/wikipedia/commons/b/b7/Mars_symbol.svg' & 113 + fetch_once jupiter-raw.svg \ 114 + 'https://upload.wikimedia.org/wikipedia/commons/2/26/Jupiter_symbol.svg' & 115 + fetch_once saturn-raw.svg \ 116 + 'https://upload.wikimedia.org/wikipedia/commons/7/74/Saturn_symbol.svg' & 117 + fetch_once uranus-raw.svg \ 118 + 'https://upload.wikimedia.org/wikipedia/commons/f/f1/Uranus_symbol.svg' & 119 + fetch_once neptune-raw.svg \ 120 + 'https://upload.wikimedia.org/wikipedia/commons/4/47/Neptune_symbol.svg' & 121 + 122 + fetch_once krebs-raw.svg \ 123 + 'https://raw.githubusercontent.com/krebs/painload/master/cholerab/bling/krebs_aquarium.svg' & 124 + 125 + fetch_older_min 720 ice-raw.jpg $(get_neo_url \ 126 + 'https://neo.gsfc.nasa.gov/view.php?datasetId=NISE_D') & 127 + fetch_older_days 1 snow-raw.jpg $(get_neo_url \ 128 + 'https://neo.gsfc.nasa.gov/view.php?datasetId=MOD10C1_E_SNOW') & 129 + fetch_older_days 1 chlora-raw.jpg $(get_neo_url \ 130 + 'https://neo.gsfc.nasa.gov/view.php?datasetId=MY1DMM_CHLORA') & 131 + fetch_older_days 1 fire-raw.jpg $(get_neo_url \ 132 + 'https://neo.gsfc.nasa.gov/view.php?datasetId=MOD14A1_E_FIRE') & 133 + 134 + # regular fetches 135 + fetch marker.json.tmp "''${marker_url:-}" || : 136 + if [ -s marker.json.tmp ]; then 137 + mv marker.json.tmp marker.json 138 + fi 139 + fetch sun-raw.jpg 'https://sdo.gsfc.nasa.gov/assets/img/latest/latest_512_0171.jpg' & 140 + 141 + wait 142 + 143 + # fetch clouds if they are older than 3h 144 + if ! test "$(find clouds-raw.png -mmin -180)"; then 145 + nomads-cloud clouds-raw.png 146 + fi 147 + 148 + in_size=3600x1800 149 + xplanet_out_size=3200x2500 150 + out_geometry=3200x1800+0+350 151 + 152 + for raw in \ 153 + nightmap-raw.jpg \ 154 + daymap-raw.tif \ 155 + chlora-raw.jpg \ 156 + clouds-raw.png \ 157 + ; 158 + do 159 + normal=''${raw%-raw.*}.png 160 + if needs_rebuild $normal $raw; then 161 + echo "make $normal; normalize $raw" >&2 162 + convert $raw -scale $in_size $normal 163 + fi 164 + done 165 + 166 + # remove snow from ice map 167 + if needs_rebuild ice.png ice-raw.jpg; then 168 + convert ice-raw.jpg -fuzz 20% -fill black -opaque white -colorspace gray -blur 0x6 -scale "$in_size" ice.png 169 + fi 170 + 171 + if needs_rebuild snow.png snow-raw.jpg; then 172 + convert snow-raw.jpg -fuzz 20% -fill '#DEDEDE' -opaque white -scale "$in_size" snow.png 173 + fi 174 + 175 + # make fire more red 176 + if needs_rebuild fire.png fire-raw.jpg; then 177 + convert fire-raw.jpg -fuzz 20% -fill '#ef840c' -opaque white -scale "$in_size" fire.png 178 + fi 179 + 180 + # cut out sun with alpha transparency 181 + if needs_rebuild sun.png sun-raw.jpg; then 182 + convert sun-raw.jpg \ 183 + \( +clone -colorspace HSB -fill white -draw "circle 256,256 256,54" -separate -delete 0,1 \) \ 184 + -compose copyopacity -composite -crop 512x472+0+20 -scale "100x100" sun.png 185 + fi 186 + 187 + if needs_rebuild krebs.png krebs-raw.svg; then 188 + inkscape --export-type="png" --export-width=16 --export-height=16 --export-filename=krebs.png krebs-raw.svg 189 + fi 190 + 191 + # -- Planets -- 192 + for planet in mercury venus mars jupiter saturn uranus neptune; do 193 + if needs_rebuild "$planet".png "$planet"-raw.svg; then 194 + sed -i 's/#000/#FE8019/g' "$planet"-raw.svg 195 + inkscape --export-type="png" --export-width=40 --export-height=40 --export-filename="$planet.png" "$planet-raw.svg" 196 + fi 197 + done 198 + 199 + # -- Daymap -- 200 + 201 + # merge with water chlora layer 202 + if needs_rebuild daymap-final.png daymap.png fire.png snow.png ice.png chlora.png; then 203 + convert daymap.png fire.png -compose lighten -composite daymap-1.png 204 + convert daymap-1.png ice.png -compose lighten -composite daymap-2.png 205 + convert daymap-2.png snow.png -compose lighten -composite daymap-3.png 206 + convert daymap-3.png chlora.png -compose lighten -composite daymap-final.png 207 + fi 208 + 209 + # -- Nightmap -- 210 + 211 + if needs_rebuild nightmap-final.png nightmap.png fire.png snow.png ice.png chlora.png; then 212 + convert nightmap.png fire.png -compose lighten -composite nightmap-1.png 213 + convert nightmap-1.png \( -fill black -colorize 70% ice.png \) -compose lighten -composite nightmap-2.png 214 + convert nightmap-2.png \( -fill black -colorize 70% snow.png \) -compose lighten -composite nightmap-3.png 215 + convert nightmap-3.png \( -fill black -colorize 70% chlora.png \) -compose lighten -composite nightmap-final.png 216 + fi 217 + 218 + # create marker file from json 219 + echo 'position=sun image=sun.png' > marker_file 220 + echo 'position=moon image=moon.png' >> marker_file 221 + echo 'position=mercury image=mercury.png' >> marker_file 222 + echo 'position=venus image=venus.png' >> marker_file 223 + echo 'position=mars image=mars.png' >> marker_file 224 + echo 'position=jupiter image=jupiter.png' >> marker_file 225 + echo 'position=saturn image=saturn.png' >> marker_file 226 + echo 'position=uranus image=uranus.png' >> marker_file 227 + echo 'position=neptune image=neptune.png' >> marker_file 228 + 229 + # generate moon 230 + xplanet -body moon --num_times 1 -origin earth \ 231 + --transpng moon.png --geometry 50x50 \ 232 + -config ${pkgs.writeText "moon.config" '' 233 + [moon] 234 + shade=10 235 + ''} 236 + 237 + # rebuild every time to update shadow 238 + xplanet --num_times 1 --geometry $xplanet_out_size \ 239 + --output xplanet-output.png --projection merc \ 240 + -config ${pkgs.writeText "xplanet.config" '' 241 + [earth] 242 + "Earth" 243 + map=daymap-final.png 244 + night_map=nightmap-final.png 245 + cloud_map=clouds.png 246 + cloud_threshold=1 247 + cloud_gamma=10 248 + shade=15 249 + ''} 250 + 251 + xplanet --num_times 1 --geometry $xplanet_out_size \ 252 + --output xplanet-marker-output.png --projection merc \ 253 + -config ${pkgs.writeText "xplanet-marker.config" '' 254 + [earth] 255 + "Earth" 256 + map=daymap-final.png 257 + night_map=nightmap-final.png 258 + cloud_map=clouds.png 259 + cloud_threshold=1 260 + cloud_gamma=10 261 + marker_file=marker_file 262 + shade=15 263 + ''} 264 + 265 + if [ -s marker.json ]; then 266 + jq -r 'to_entries[] | select(.value.latitude != null) | @json "\(.value.latitude) \(.value.longitude) image=krebs.png"' marker.json >> marker_file 267 + fi 268 + 269 + xplanet --num_times 1 --geometry $xplanet_out_size \ 270 + --output xplanet-krebs-output.png --projection merc \ 271 + -config ${pkgs.writeText "xplanet-krebs.config" '' 272 + [earth] 273 + "Earth" 274 + map=daymap-final.png 275 + night_map=nightmap-final.png 276 + cloud_map=clouds.png 277 + cloud_threshold=1 278 + cloud_gamma=10 279 + marker_file=marker_file 280 + shade=15 281 + ''} 282 + 283 + ${ 284 + pkgs.writers.writePython3 "get_constellations" { 285 + libraries = [ pkgs.python3Packages.astropy ]; 286 + } ./get_constellations.py 287 + } ${ 288 + pkgs.fetchurl { 289 + url = "https://raw.githubusercontent.com/ofrohn/d3-celestial/d2e20e104b86429d90ac8227a5b021262b45d75a/data/constellations.lines.json"; 290 + sha256 = "0g71fdrnxvxd6pcqvihj2q9iaynrl7px45kzw6qm1kymynz6ckr9"; 291 + } 292 + } > constellations.arcs || : # seems like astropy doesn't want to convert from icrs to itrs anymore 293 + 294 + xplanet --num_times 1 --geometry $xplanet_out_size \ 295 + --output xplanet-krebs-stars-output.png --projection merc \ 296 + -config ${pkgs.writeText "xplanet-krebs-stars.config" '' 297 + [default] 298 + 299 + arc_thickness=1 300 + arc_file=constellations.arcs 301 + 302 + [earth] 303 + "Earth" 304 + map=daymap-final.png 305 + night_map=nightmap-final.png 306 + cloud_map=clouds.png 307 + cloud_threshold=1 308 + cloud_gamma=10 309 + marker_file=marker_file 310 + shade=15 311 + ''} 312 + 313 + xplanet --num_times 1 --geometry $xplanet_out_size \ 314 + --latitude 52.520008 --longitude 13.404954 \ 315 + --output xplanet-krebs-stars-berlin-output.png --projection merc \ 316 + -config ${pkgs.writeText "xplanet-krebs-stars.config" '' 317 + [default] 318 + 319 + arc_thickness=1 320 + arc_file=constellations.arcs 321 + 322 + [earth] 323 + "Earth" 324 + map=daymap-final.png 325 + night_map=nightmap-final.png 326 + cloud_map=clouds.png 327 + cloud_threshold=1 328 + cloud_gamma=10 329 + marker_file=marker_file 330 + shade=15 331 + ''} 332 + 333 + # trim xplanet output 334 + if needs_rebuild realwallpaper.png xplanet-output.png; then 335 + convert xplanet-output.png -crop $out_geometry \ 336 + realwallpaper-tmp.png 337 + mv realwallpaper-tmp.png realwallpaper.png 338 + fi 339 + 340 + if needs_rebuild realwallpaper-marker.png xplanet-marker-output.png; then 341 + convert xplanet-marker-output.png -crop $out_geometry \ 342 + realwallpaper-marker-tmp.png 343 + mv realwallpaper-marker-tmp.png realwallpaper-marker.png 344 + fi 345 + 346 + if needs_rebuild realwallpaper-krebs.png xplanet-krebs-output.png; then 347 + convert xplanet-krebs-output.png -crop $out_geometry \ 348 + realwallpaper-krebs-tmp.png 349 + mv realwallpaper-krebs-tmp.png realwallpaper-krebs.png 350 + mkdir -p archive 351 + convert realwallpaper-krebs.png archive/"$(date -Is)".jpg 352 + fi 353 + 354 + if needs_rebuild realwallpaper-krebs-stars.png xplanet-krebs-stars-output.png; then 355 + convert xplanet-krebs-stars-output.png -crop $out_geometry \ 356 + realwallpaper-krebs-stars-tmp.png 357 + mv realwallpaper-krebs-stars-tmp.png realwallpaper-krebs-stars.png 358 + fi 359 + 360 + if needs_rebuild realwallpaper-krebs-stars-berlin.png xplanet-krebs-stars-berlin-output.png; then 361 + convert xplanet-krebs-stars-berlin-output.png -crop $out_geometry \ 362 + realwallpaper-krebs-stars-berlin-tmp.png 363 + mv realwallpaper-krebs-stars-berlin-tmp.png realwallpaper-krebs-stars-berlin.png 364 + fi 365 + } 366 + 367 + main "$@" 368 + ''