cross-posted from: !linux@lemmy.eco.br | https://lemmy.eco.br/post/1969330

I’ve been using Gnome for about 10 months and it always bothered me that my city (with more than a million inhabitants) was not found in the Weather program.

I looked for solutions several times and never found them, until I found this thread yesterday. That the user Julian made a script that solves this problem. you just have to run and enter the name of your city and then confirm.

script
#!/bin/bash

if [[ ! -z "$(which gnome-weather)" ]]; then
	system=1
fi

if [[ ! -z "$(flatpak list | grep org.gnome.Weather)" ]]; then
	flatpak=1
fi

if [[ ! $system == 1 && ! $flatpak == 1 ]]; then
	echo "GNOME Weather isn't installed"
	exit
fi

if [[ ! -z "$*" ]]; then
	query="$*"
else
	read -p "Type the name of the location you want to add to GNOME Weather: " query
fi

query="$(echo $query | sed 's/ /+/g')"

request=$(curl "https://nominatim.openstreetmap.org/search?q=$query&format=json&limit=1" -s)

if [[ $request == "[]" ]]; then
	echo "No locations found, consider removing some search terms"
	exit
fi

read -p "If this is not the location you wanted, consider adding search terms
Are you sure you want to add $(echo $request | sed 's/.*"display_name":"//' | sed 's/".*//')? [y/n] : " answer

if [[ ! $answer == "y" ]]; then
	echo "Not adding location"
	exit
else
	echo "Adding location"
fi

id=$(echo $request | sed 's/.*"place_id"://' | sed 's/,.*//')

name=$(curl "https://nominatim.openstreetmap.org/details.php?place_id=$id&format=json" -s | sed 's/.*"name": "//' | sed 's/".*//')

lat=$(echo $request | sed 's/.*"lat":"//' | sed 's/".*//')
lat=$(echo "$lat / (180 / 3.141592654)" | bc -l)

lon=$(echo $request | sed 's/.*"lon":"//' | sed 's/".*//')
lon=$(echo "$lon / (180 / 3.141592654)" | bc -l)

if [[ $system == 1 ]]; then
	locations=$(gsettings get org.gnome.Weather locations)
fi

if [[ $flatpak == 1 ]]; then
	locations=$(flatpak run --command=gsettings org.gnome.Weather get org.gnome.Weather locations)
fi

location="<(uint32 2, <('$name', '', false, [($lat, $lon)], @a(dd) [])>)>"

if [[ $system == 1 ]]; then
	if [[ ! $(gsettings get org.gnome.Weather locations) == "@av []" ]]; then
		gsettings set org.gnome.Weather locations "$(echo $locations | sed "s|>]|>, $location]|")"
	else
		gsettings set org.gnome.Weather locations "[$location]"
	fi
fi

if [[ $flatpak == 1 ]]; then
	if [[ ! $(flatpak run --command=gsettings org.gnome.Weather get org.gnome.Weather locations) == "@av []" ]]; then
		flatpak run --command=gsettings org.gnome.Weather set org.gnome.Weather locations "$(echo $locations | sed "s|>]|>, $location]|")"
	else
		flatpak run --command=gsettings org.gnome.Weather set org.gnome.Weather locations "[$location]"
	fi
fi


It occurred to me that some people might not know how to run scripts, so here’s a brief tutorial:

How to run scripts in Linux
  1. Save the script to a text file and save with the .sh extension
  2. Provide execute permission: chmod u+x script.sh
  3. run the script by double clicking or ./script.sh
  • stepanzak@iusearchlinux.fyi
    link
    fedilink
    arrow-up
    12
    arrow-down
    1
    ·
    edit-2
    7 months ago

    This is amazing! I’m not using Gnome, but moments like this are the reason why I love Linux so much.

    • TurboWafflz@lemmy.world
      link
      fedilink
      arrow-up
      24
      arrow-down
      1
      ·
      7 months ago

      As a gnome user and huge Linux enthusiast, this should not have to exist. Gnome weather is just badly designed

      • stepanzak@iusearchlinux.fyi
        link
        fedilink
        arrow-up
        9
        ·
        edit-2
        7 months ago

        Yeah, it’s a terrible thing that you have to do this to get your city into the weather app, but I simply love the fact that you can do that, whereas on some proprietary system, you might wait months for the fix.