From 2aff28c6ede88320995b0f008334a52c52f84236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Fri, 19 Nov 2021 08:09:08 +0100 Subject: [PATCH] feat: astrological info script --- configs/packages/default.nix | 1 + lib/i3status-rust.nix | 5 ++ packages/scripts/default.nix | 2 + packages/scripts/horoscope/default.nix | 4 ++ packages/scripts/horoscope/horoscope.py | 54 +++++++++++++++++++++ packages/scripts/horoscope/poetry.lock | 59 +++++++++++++++++++++++ packages/scripts/horoscope/pyproject.toml | 17 +++++++ 7 files changed, 142 insertions(+) create mode 100644 packages/scripts/horoscope/default.nix create mode 100644 packages/scripts/horoscope/horoscope.py create mode 100644 packages/scripts/horoscope/poetry.lock create mode 100644 packages/scripts/horoscope/pyproject.toml diff --git a/configs/packages/default.nix b/configs/packages/default.nix index 89eda61..46d20de 100644 --- a/configs/packages/default.nix +++ b/configs/packages/default.nix @@ -157,6 +157,7 @@ in { scripts.wttr scripts.sanskrit-dictionary scripts.unicodmenu + scripts.horoscope scripts.closest scripts.trans scripts.liddel-scott-jones diff --git a/lib/i3status-rust.nix b/lib/i3status-rust.nix index 74f42a2..0fe0b58 100644 --- a/lib/i3status-rust.nix +++ b/lib/i3status-rust.nix @@ -92,6 +92,11 @@ in { units = "metric"; }; } + { + block = "custom"; + interval = 60 * 60; + command = let inherit (import ) location; in "${pkgs.scripts.horoscope}/bin/horoscope --latitude=${toString location.latitude} --longitude=${toString location.longitude}"; + } { block = "custom"; interval = 60 * 60; diff --git a/packages/scripts/default.nix b/packages/scripts/default.nix index e902d25..3a721de 100644 --- a/packages/scripts/default.nix +++ b/packages/scripts/default.nix @@ -184,6 +184,8 @@ in rec { }} "$@" ''; + horoscope = pkgs.callPackage ./horoscope {}; + genius = wrapScript { packages = [ pkgs.curl pkgs.gnused pkgs.pandoc ]; name = "genius"; diff --git a/packages/scripts/horoscope/default.nix b/packages/scripts/horoscope/default.nix new file mode 100644 index 0000000..7347396 --- /dev/null +++ b/packages/scripts/horoscope/default.nix @@ -0,0 +1,4 @@ +{ poetry2nix }: +poetry2nix.mkPoetryApplication { + projectDir = ./.; +} diff --git a/packages/scripts/horoscope/horoscope.py b/packages/scripts/horoscope/horoscope.py new file mode 100644 index 0000000..34cfe81 --- /dev/null +++ b/packages/scripts/horoscope/horoscope.py @@ -0,0 +1,54 @@ +from datetime import datetime +import click +from flatlib.datetime import Datetime +from flatlib.geopos import GeoPos +from flatlib.chart import Chart +import flatlib.const + +sign_symbols = { + flatlib.const.ARIES: "♈", + flatlib.const.TAURUS: "♉", + flatlib.const.GEMINI: "♊", + flatlib.const.CANCER: "♋", + flatlib.const.LEO: "♌", + flatlib.const.VIRGO: "♍", + flatlib.const.LIBRA: "♎", + flatlib.const.SCORPIO: "♏", + flatlib.const.SAGITTARIUS: "♐", + flatlib.const.CAPRICORN: "♑", + flatlib.const.AQUARIUS: "♒", + flatlib.const.PISCES: "♓", +} + +planet_symbols = { + flatlib.const.SUN: "☉", + flatlib.const.MOON: "☽", + flatlib.const.MERCURY: "☿", + flatlib.const.VENUS: "♀", + flatlib.const.MARS: "♂", + flatlib.const.JUPITER: "♃", + flatlib.const.SATURN: "♄", +} + + +def convert_into_stupid_flatlib_format(dt): + return Datetime(dt.strftime("%Y/%m/%d"), dt.strftime("%H:%M")) + + +@click.command() +@click.option("--latitude", type=click.FLOAT, required=True) +@click.option("--longitude", type=click.FLOAT, required=True) +@click.option("--date", type=click.DateTime(), default=datetime.now()) +def main(latitude: float, longitude: float, date: datetime): + flatlib_datetime = convert_into_stupid_flatlib_format(date) + position = GeoPos(latitude, longitude) + chart = Chart(flatlib_datetime, position) + for planet in planet_symbols.keys(): + planet_position = chart.getObject(planet) + print( + planet_symbols[planet], + sign_symbols[planet_position.sign], + "℞" if planet_position.movement() == flatlib.const.RETROGRADE else "", + end="", + ) + print() diff --git a/packages/scripts/horoscope/poetry.lock b/packages/scripts/horoscope/poetry.lock new file mode 100644 index 0000000..91d42be --- /dev/null +++ b/packages/scripts/horoscope/poetry.lock @@ -0,0 +1,59 @@ +[[package]] +name = "click" +version = "8.0.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "flatlib" +version = "0.2.3" +description = "Python library for Traditional Astrology" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +pyswisseph = "2.08.00-1" + +[[package]] +name = "pyswisseph" +version = "2.08.00-1" +description = "Python extension to the Swiss Ephemeris" +category = "main" +optional = false +python-versions = "*" + +[metadata] +lock-version = "1.1" +python-versions = "^3.8" +content-hash = "2f40aecf583ff9e4f7b2dcc090fee27915e64ff1f8a450fbe5e6f95e8c487d75" + +[metadata.files] +click = [ + {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, + {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +flatlib = [ + {file = "flatlib-0.2.3-py3-none-any.whl", hash = "sha256:c846d83c965db7588581bb65ac9a6668b9a190afcad5027269f7e9c75f467bcd"}, + {file = "flatlib-0.2.3.tar.gz", hash = "sha256:46cc956b936aa31a96082cff23448a5c27dd6e5e434a6293bc9265336c00dd5d"}, +] +pyswisseph = [ + {file = "pyswisseph-2.08.00-1.tar.gz", hash = "sha256:6b4818c0224d309c0b01f3c52df2432900dddcde345364408d99eafc9cdd1e71"}, +] diff --git a/packages/scripts/horoscope/pyproject.toml b/packages/scripts/horoscope/pyproject.toml new file mode 100644 index 0000000..82a8803 --- /dev/null +++ b/packages/scripts/horoscope/pyproject.toml @@ -0,0 +1,17 @@ +[tool.poetry] +name = "horoscope" +version = "0.1.0" +description = "" +authors = ["Kierán Meinhardt "] + +[tool.poetry.dependencies] +python = "^3.8" +flatlib = "^0.2.3" +click = "^8.0.3" + +[tool.poetry.scripts] +horoscope = "horoscope:main" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api"