New Fastfetch prompt with weather script and fancy title

This commit is contained in:
Chris Toph 2025-04-04 17:19:17 -04:00
parent bb80bd064d
commit 4b938f89f7
4 changed files with 224 additions and 40 deletions

View file

@ -9,6 +9,8 @@
let let
hostname = config.hostSpec.hostName; hostname = config.hostSpec.hostName;
logoFile = ./. + "/host/${hostname}.txt"; logoFile = ./. + "/host/${hostname}.txt";
weather = import ./scripts/weather.nix { inherit pkgs; };
title = import ./scripts/title.nix { inherit pkgs; };
in in
{ {
enable = true; enable = true;
@ -24,71 +26,146 @@
}; };
}; };
display = { display = {
separator = " "; bar = {
borderLeft = "";
borderRight = "";
charElapsed = "";
charTotal = "";
width = 10;
};
percent = {
type = 2;
};
separator = "";
}; };
# modules = [
# {
# type = "colors";
# symbol = "square";
# }
# "break"
# {
# key = "{#31} ┤ user »{#keys}";
# type = "title";
# format = "{user-name}";
# }
# {
# key = "{#32} ┤ host »{#keys}";
# type = "title";
# format = "{host-name}";
# }
# {
# key = "{#33} ┤ uptime »{#keys}";
# type = "uptime";
# }
# {
# key = "{#34} ┤ distro »{#keys}";
# type = "os";
# }
# {
# key = "{#36} ┤ desktop »{#keys}";
# type = "de";
# }
# {
# key = "{#32} ┤ shell »{#keys}";
# type = "shell";
# }
# {
# key = "{#33} ┤ cpu »{#keys}";
# type = "cpu";
# showPeCoreCount = true;
# }
# {
# key = "{#34} ┤ disk »{#keys}";
# type = "disk";
# folders = "/";
# }
# {
# key = "{#35} ┤ memory »{#keys}";
# type = "memory";
# }
# {
# key = "{#36} ┤ network »{#keys}";
# type = "localip";
# format = "{ipv4} ({ifname})";
# }
# "break"
# {
# type = "colors";
# symbol = "square";
# }
# ];
modules = [ modules = [
"break"
{ {
key = ""; key = " ";
type = "custom"; shell = "fish";
text = "fish ${title}";
type = "command";
}
"break"
{
key = "weather » {#keys}";
keyColor = "1;97";
shell = "${pkgs.fish}/bin/fish";
text = "fish ${weather} 'Richmond'";
type = "command";
} }
{ {
key = " {#31} user {#keys}"; key = "cpu » {#keys}";
type = "title"; keyColor = "1;31";
format = "{user-name}"; showPeCoreCount = true;
type = "cpu";
} }
{ {
key = " {#32}󰇅 host {#keys}"; format = "{0} ({#3;32}{3}{#})";
type = "title"; key = "wm » {#keys}";
format = "{host-name}"; keyColor = "1;32";
type = "wm";
} }
{ {
key = " {#33}󰅐 uptime {#keys}"; text = "printf '%s%s' (string upper (string sub -l 1 $SHELL)) (string lower (string sub -s 2 $SHELL))";
key = "shell » {#keys}";
keyColor = "1;33";
type = "command";
shell = "${pkgs.fish}/bin/fish";
}
{
key = "uptime » {#keys}";
keyColor = "1;34";
type = "uptime"; type = "uptime";
} }
{ {
key = " {#34}{icon} distro {#keys}";
type = "os";
}
{
key = " {#36}󰇄 desktop {#keys}";
type = "de";
}
{
key = " {#32} shell {#keys}";
type = "shell";
}
{
key = " {#33}󰍛 cpu {#keys}";
type = "cpu";
showPeCoreCount = true;
}
{
key = " {#34}󰉉 disk {#keys}";
type = "disk";
folders = "/"; folders = "/";
format = "{0~0,-4} / {2} {13}";
key = "disk » {#keys}";
keyColor = "1;35";
type = "disk";
} }
{ {
key = " {#35} memory {#keys}"; format = "{0~0,-4} / {2} {4}";
key = "memory » {#keys}";
keyColor = "1;36";
type = "memory"; type = "memory";
} }
{ {
key = " {#36}󰩟 network {#keys}"; format = "{ipv4~0,-3} ({#3;32}{ifname}{#})";
key = "network » {#keys}";
keyColor = "1;37";
type = "localip"; type = "localip";
format = "{ipv4} ({ifname})";
} }
{ {
key = ""; format = "{artist} - {title} ({#3;32}{6}{#})";
type = "custom"; key = "media » {#keys}";
keyColor = "5;92";
type = "media";
} }
"break"
{ {
key = " {#39} colors {#keys}"; symbol = "square";
type = "colors"; type = "colors";
symbol = "circle";
}
{
key = "";
type = "custom";
} }
"break"
]; ];
}; };
}; };

View file

@ -0,0 +1,39 @@
{
pkgs,
...
}:
pkgs.writeScript "title" ''
#!/usr/bin/env fish
# Customize these color commands as you like
set colorUser (set_color --bold cyan)
set colorHost (set_color --bold blue)
set colorOS (set_color --bold magenta)
set colorVersion (set_color --bold magenta)
set colorCodename (set_color --bold --italic magenta)
set colorBang (set_color --bold white)
set colorReset (set_color normal)
# Get uppercase user, host, OS name
set u (whoami)
set user (printf '%s%s' (string upper (string sub -l 1 $u)) (string lower (string sub -s 2 $u)))
set h (hostname)
set host (printf '%s%s' (string upper (string sub -l 1 $h)) (string lower (string sub -s 2 $h)))
set osN (grep '^NAME=' /etc/os-release | cut -d= -f2 | tr -d '"')
set osName (printf '%s%s' (string upper (string sub -l 1 $osN)) (string lower (string sub -s 2 $osN)))
set osVersion (grep '^VERSION_ID=' /etc/os-release | cut -d= -f2 | tr -d '"')
set osCN (grep '^VERSION_CODENAME=' /etc/os-release | cut -d= -f2 | tr -d '"')
set osCodeName (printf '%s%s' (string upper (string sub -l 1 $osCN)) (string lower (string sub -s 2 $osCN)))
# Print each part as you like
echo -n $colorUser$user$colorReset
echo -n $colorBang" "
echo -n $colorHost$host$colorReset
echo -n $colorBang" "
echo -n $colorOS$osName" "$colorVersion$osVersion$colorReset" "
echo $colorOS'('$colorCodename$osCodeName$colorReset$colorOS')'
''

View file

@ -0,0 +1,68 @@
{
pkgs,
...
}:
# INFO: Based on https://github.com/fcambus/ansiweather
pkgs.writeScript "weather" ''
#!/usr/bin/env fish
# Usage: ./weather.fish "Richmond,US"
if not set -q argv[1]
echo "Usage: ./weather <city>"
exit 1
end
# URL-encode spaces in city name
set CITY (echo $argv[1] | sed 's/ /%20/g')
set API_KEY 85a4e3c55b73909f42c6a23ec35b7147
if test -z "$API_KEY"
echo "Please set the environment variable API_KEY"
exit 1
end
set WEATHER_API_URL "https://api.openweathermap.org/data/2.5/weather?q=$CITY&units=metric&appid=$API_KEY"
# Fetch current weather data
set weather_data (curl -s "$WEATHER_API_URL")
# Parse needed fields
set city_name (set_color -i green)(echo $weather_data | jq -r '.name')(set_color reset)
set temperature (echo $weather_data | jq -r '.main.temp' | xargs printf "%.0f")
set humidity (echo $weather_data | jq -r '.main.humidity')
set weather_main (echo $weather_data | jq -r '.weather[0].main')
set lon (echo $weather_data | jq -r '.coord.lon')
set lat (echo $weather_data | jq -r '.coord.lat')
# Fetch UVI data
set UVI_API_URL "https://api.openweathermap.org/data/2.5/uvi?lat=$lat&lon=$lon&appid=$API_KEY"
set uvi_data (curl -s "$UVI_API_URL")
set uvi (echo $uvi_data | jq -r '.value')
# Helper function for weather icon
function weather_icon
switch $argv[1]
case "Clouds"
echo ""
case "Clear"
echo ""
case "Rain"
echo "🌧"
case "Snow"
echo ""
case "Thunderstorm"
echo ""
case "Drizzle"
echo "🌦"
case "Mist" "Haze" "Fog" "Smoke" "Dust" "Sand" "Ash" "Squall" "Tornado"
echo "🌫"
case "*"
echo "🌈"
end
end
set icon (weather_icon $weather_main)
printf "%s %s°C %s %s%% (%s)\n" $icon $temperature $uvi $humidity $city_name
''