weather

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 3, 2024 License: MIT Imports: 22 Imported by: 0

README ¶

â›…Weather

weather is a command-line application designed to provide the current weather forecast for your location. It is excellent for integrating with a status bar, allowing you to quickly glance at the current weather conditions.

🚀 Features

  • Configurable icons, colors, and formatting (support for both nerdfonts, and unicode)

  • Option to specify your location manually or let weather determine it automatically

  • Compatible with multiple weather forecasting APIs (current support for met.no and openweather)

  • Integration with various geocoding APIs (based on latitude-longitude, location string, or IP)

  • Extensible by design, allowing you to develop your own plugins for integration with additional weather forecasting and geocoding APIs, as well as custom icon sets.

📸 Screenshot

screenshot

📦 Installation

Binary installation

Download a compatible binary for your system. For convenience, place weather in a directory where you can access it from the command line.

Via Go
$ go install github.com/jpbruinsslot/weather/cmd/weather

💻 Usage

When you've installed weather, you can run it by just executing weather on the command line.

$ weather

🔧 Configuration

When you run weather for the first time, it will generate a default configuration file. This file will be stored in your XDG_CONFIG_HOME directory. To display the configuration file's location, use the weather -config-path command. When modifying the file, you have the option to adjust the following settings:

Appearance
Icons

By default the unicode icon set is used. However, as it has a limited array of icons for various weather conditions, an alternative is available by utilizing nerd fonts. Ensure that you have installed or patched a font following the installation manual. Within the configuration file, you can modify the icon_type to nerd-fonts.

{
    "icon_type": "nerd-fonts"
}

If you prefer to utilize custom icons or override specific icons, you can update the values located in the icons field. For instance:

{
    "icons": {
        "celsius": "°C"
    }
}

Click here to get an overview all the icons that you can customize.

Formatting

The formatting of weather is controlled by the format value. It leverages the Go templating syntax to manage formatting. You can use the following values and arrange them to suit your preferences:

Field Description
{{ .Temperature }} The temperature of the weather forecast
{{ .Units }} The units of the weather forecast (Celsius or Fahrenheit)
{{ .Icon }} The icon of the weather forecast
{{ .Rain }} Rain icon indicator

Default:

{{if .Rain}}{{.Rain}} {{end}}{{.Icon}}  {{printf `%.1f` .Temperature}}{{.Units}}
Colors

You're also able to choose from variety of colors. At the moment this is limited to the basic ANSI color codes.

Color
{{ .Colors.Black }}
{{ .Colors.Red }}
{{ .Colors.Green }}
{{ .Colors.Yellow }}
{{ .Colors.Blue }}
{{ .Colors.Magenta }}
{{ .Colors.Cyan }}
{{ .Colors.White }}

To incorporate colors, modify the formatting of the format field by adding color to specific parts of your output. Begin a color section by specifying a color and conclude it with {{.Colors.Reset}}.

For example if you only want to color the rain indicator icon to be blue:

{{if .Rain}}{{.Colors.Blue}}{{.Rain}}{{.Colors.Reset}} {{end}}{{.Icon}}  {{printf `%.1f` .Temperature}}{{.Units}}
Location

weather will initially attempt to retrieve the latitude and longitude specified in the latitude and longitude fields. In the absence of these coordinates, it will resort to the location string provided in the location field. Finally, if neither of these options is available, it will attempt to determine the location based on the machine's IP address.

The recommended and simplest method is to specify your location with the latitude and longitude fields. The other two options require API access with a key to those services

Latitude / Longitude

If you wish to define your latitude and longitude, you can modify the latitude and longitude fields. This will take precedence over any other location specification. Simply update the values of the latitude and longitude fields in the configuration file.

{
    "latitude": 52.1015441,
    "longitude": 5.1779992
}
Location string

By utilizing the Google Maps API you can specify a location string. This will retrieve the latitude and longitude of the provided location string.

To do this, update the value of location in the configuration file to the desired location string.

{
    "location": "Amsterdam, The Netherlands"
}

To enable this functionality, you must provide a Google Maps API key in the geocoder section of the configuration file.

{
    "geocoder": {
        "google": {
            "api_key": "your-api-key",
            "enabled": true
        }
    }
}

IP address

To determine the location of your machine based on the IP address, you can utilize the IP Geolocation service from ipgeolocation.io. Make sure to specify this service in the configuration file to enable IP-based geolocation.

To utilize this feature, it is necessary to provide an ipgeolocation.io API key in the geocoder section of the configuration file.

{
    "geocoder": {
        "ipgeolocation": {
            "api_key": "your-api-key",
            "enabled": true
        }
    }
}

Forecaster
MET

By default weather uses the MET weather forecasting API. If you want to use this API you don't need to change anything in the configuration file.

OpenWeather

If you want to use OpenWeather API you need to specify an API key in the forecaster section of the configuration file.

{
    "forecaster": {
        "openweather": {
            "api_key": "your-api-key",
            "enabled": true
        }
    }
}

Other configuration options

The configuration file allows you to modify various other settings. The following table provides an overview of all the available options.

field description default
units choose either imperial or metric {"units": "metric"}
interval set the interval in seconds to use cached data {"interval": 60}

📖 License

This project is licensed under the MIT License - see the LICENSE file for details.

Documentation ¶

Index ¶

Constants ¶

View Source
const (
	Version   = "0.1.0"
	URL       = "github.com/jpbruinsslot/weather"
	UserAgent = "weather/" + Version + " (" + URL + ")"
)

Variables ¶

This section is empty.

Functions ¶

This section is empty.

Types ¶

type Output ¶

type Output struct {
	Colors      colors.Colors
	Units       string
	Temperature float64
	Rain        string
	Icon        string
}

type Weather ¶

type Weather struct {
	Config    *config.Config
	LastCheck time.Time

	Forecaster forecaster.Forecaster
	Forecast   forecaster.Forecast

	Locator  geocoder.Locator
	Location geocoder.Location
}

func New ¶

func New(config *config.Config) (*Weather, error)

func (*Weather) Colors ¶

func (w *Weather) Colors() colors.Colors

func (*Weather) GenerateOutput ¶

func (w *Weather) GenerateOutput() Output

func (*Weather) GetForecast ¶

func (w *Weather) GetForecast() error

func (*Weather) GetForecaster ¶

func (w *Weather) GetForecaster() string

func (*Weather) GetLocation ¶

func (w *Weather) GetLocation() error

func (*Weather) GetLocator ¶

func (w *Weather) GetLocator() string

func (*Weather) GobDecode ¶

func (w *Weather) GobDecode(data []byte) error

func (*Weather) GobEncode ¶

func (w *Weather) GobEncode() ([]byte, error)

func (*Weather) Icon ¶

func (w *Weather) Icon() string

func (*Weather) Load ¶

func (w *Weather) Load() error

func (*Weather) PrintForecast ¶

func (w *Weather) PrintForecast() error

func (*Weather) Rain ¶

func (w *Weather) Rain() string

func (*Weather) Save ¶

func (w *Weather) Save() error

func (*Weather) Temperature ¶

func (w *Weather) Temperature() float64

func (*Weather) Units ¶

func (w *Weather) Units() string

Directories ¶

Path Synopsis
cmd
met
utils
xdg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL