如何在 NixOS 中将天气添加到 i3status

How to add weather to i3status in NixOS

可以通过多种方式将天气添加到 i3 中的状态栏,包括:

i3status 不允许在配置文件中包含任意 shell 命令。 Python 的 NixOS 环境需要进一步配置,当我通过管道传输 i3status 时,我丢失了颜色格式。如何在不添加额外的 i3 扩展的情况下保留颜色格式并添加天气?

添加一个shell脚本到/etc/nixos/i3/weather.sh(修改自Reddit用户@olemartinorg):

#!/bin/sh
# weather.sh
# shell script to prepend i3status with weather

i3status -c /etc/nixos/i3/i3status.conf | while :
do
  read line
  weather=$(cat ~/.weather.cache)
  weather_json='"name":"weather","color":"#FFFFFF", "full_text":'
  weather_json+=$(echo -n "$weather" | python -c 'import json,sys; print json.dumps(sys.stdin.read())')
  weather_json+='},{'

  # Inject our JSON into $line after the first [{
  line=${line/[{/[{$weather_json}
  echo "$line" || exit 1
done

在你的 NixOs 中创建一个 cronjob configuration.nix:

services.cron = {
    enable = true;
    systemCronJobs = [
      "*/5 * * * *      USERNAME    . /etc/profile; curl -s wttr.in/Osnabrueck?format=3 > ~/.weather.cache"
    ];
  };

将 "Osnabrueck" 替换为您的城市名称,并将 USERNAME 替换为您的用户名。这将创建一个文件 .weather.cache,其中将包含当地天气作为一行。

最后,更新 i3.conf,将 i3status 替换为您的脚本路径:

bar {
    status_command /etc/nixos/i3/weather.sh
    tray_output primary
}

nixos-rebuild switch 并启动 i3 ($mod+Shift+R)。您现在应该在底部(或 i3 状态栏显示的任何地方)看到您的天气。