From 4053f29d91d2ea70ad611215cc25eac45c0cdf0d Mon Sep 17 00:00:00 2001 From: zackartz Date: Fri, 1 Mar 2024 01:54:12 -0500 Subject: [PATCH] 70 current 2024-03-01 01:54:07 24.05.20240228.9099616 6.6.18 * --- modules/home-manager/default.nix | 1 + modules/rice/waybar/crypto.py | 35 ++++++++ modules/rice/waybar/default.nix | 133 +++++++++++++++++++++++++++++ modules/rice/waybar/sakura.png | Bin 0 -> 12904 bytes modules/rice/waybar/style.nix | 129 ++++++++++++++++++++++++++++ modules/rice/waybar/waybar-wttr.py | 119 ++++++++++++++++++++++++++ 6 files changed, 417 insertions(+) create mode 100644 modules/rice/waybar/crypto.py create mode 100644 modules/rice/waybar/default.nix create mode 100644 modules/rice/waybar/sakura.png create mode 100644 modules/rice/waybar/style.nix create mode 100644 modules/rice/waybar/waybar-wttr.py diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix index 1b9e596..cbca9df 100644 --- a/modules/home-manager/default.nix +++ b/modules/home-manager/default.nix @@ -14,6 +14,7 @@ ../rice/hyprland ../rice/gtk.nix ../rice/kitty.nix + ../rice/waybar ../shell ]; diff --git a/modules/rice/waybar/crypto.py b/modules/rice/waybar/crypto.py new file mode 100644 index 0000000..bd7467c --- /dev/null +++ b/modules/rice/waybar/crypto.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +import requests +import json + + +url = "https://api.coingecko.com/api/v3/coins/markets" +params = { + "vs_currency": "usd", + "order": "market_cap_desc", + "per_page": 10, + "price_change_percentage": "24h", + "page": 1, +} + +response = requests.get(url, params=params) + +if response.status_code == 200: + top_cryptos = response.json() + tooltip = 'Crypto\n' + for crypto in top_cryptos: + name = crypto["name"] + symbol = crypto["symbol"] + price = crypto["current_price"] + change = crypto["price_change_percentage_24h"] + tooltip += str(f" {name}: ${price} | {change:.2f}%\n") + + out_data = { + "text": f"󰠓", + "alt": f"", + "tooltip": tooltip, + "class": "weather", + } + print(json.dumps(out_data)) +else: + exit(1) diff --git a/modules/rice/waybar/default.nix b/modules/rice/waybar/default.nix new file mode 100644 index 0000000..05ec5c3 --- /dev/null +++ b/modules/rice/waybar/default.nix @@ -0,0 +1,133 @@ +{ + pkgs, + lib, + ... +}: +with lib; let + waybar-wttr = pkgs.stdenv.mkDerivation { + name = "waybar-wttr"; + buildInputs = [ + (pkgs.python39.withPackages + (pythonPackages: with pythonPackages; [requests])) + ]; + unpackPhase = "true"; + installPhase = '' + mkdir -p $out/bin + cp ${./waybar-wttr.py} $out/bin/waybar-wttr + chmod +x $out/bin/waybar-wttr + ''; + }; +in { + home.packages = [waybar-wttr]; + programs.waybar = { + enable = true; + style = import ./style.nix; + systemd = { + enable = true; + target = "hyprland-session.target"; + }; + settings = { + mainBar = { + layer = "top"; + position = "left"; + width = 57; + spacing = 7; + modules-left = [ + "custom/search" + "hyprland/workspaces" + "custom/lock" + "custom/weather" + "backlight" + "battery" + ]; + modules-center = []; + modules-right = ["pulseaudio" "network" "clock" "custom/power"]; + "hyprland/workspaces" = { + on-click = "activate"; + format = "{icon}"; + active-only = false; + format-icons = { + "1" = "一"; + "2" = "二"; + "3" = "三"; + "4" = "四"; + "5" = "五"; + "6" = "六"; + "7" = "七"; + "8" = "八"; + "9" = "九"; + "10" = "十"; + }; + + persistent_workspaces = { + "*" = 5; + }; + }; + "custom/search" = { + format = " "; + tooltip = false; + on-click = "${pkgs.tofi}/bin/tofi-drun"; + }; + + "custom/weather" = { + format = "{}"; + tooltip = true; + interval = 3600; + exec = "waybar-wttr"; + return-type = "json"; + }; + "custom/lock" = { + tooltip = false; + on-click = "sh -c '(sleep 0.5s; swaylock)' & disown"; + format = ""; + }; + "custom/power" = { + tooltip = false; + on-click = "wlogout &"; + format = ""; + }; + clock = { + format = '' + {:%H + %M}''; + tooltip-format = '' + {:%Y %B} + {calendar}''; + }; + backlight = { + format = "{icon}"; + format-icons = ["" "" "" "" "" "" "" "" ""]; + }; + battery = { + states = { + warning = 30; + critical = 15; + }; + format = "{icon}"; + format-charging = "{icon}\n󰚥"; + tooltip-format = "{timeTo} {capacity}% 󱐋{power}"; + format-icons = ["󰂃" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"]; + }; + network = { + format-wifi = "󰤨"; + format-ethernet = "󰤨"; + format-alt = "󰤨"; + format-disconnected = "󰤭"; + tooltip-format = "{ipaddr}/{ifname} via {gwaddr} ({signalStrength}%)"; + }; + pulseaudio = { + scroll-step = 5; + tooltip = true; + tooltip-format = "{volume}% {format_source}"; + on-click = "${pkgs.killall}/bin/killall pavucontrol || ${pkgs.pavucontrol}/bin/pavucontrol"; + format = " {icon}\n{volume}%"; + format-bluetooth = "󰂯 {icon} {volume}%"; + format-muted = "󰝟 "; + format-icons = { + default = ["" "" " "]; + }; + }; + }; + }; + }; +} diff --git a/modules/rice/waybar/sakura.png b/modules/rice/waybar/sakura.png new file mode 100644 index 0000000000000000000000000000000000000000..21e463ca429c48baeba2d75bd38e6f1b019ca869 GIT binary patch literal 12904 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE0wLHg|i4c z*;grQoiTf!V%fOu@oPE8efL}|!+san_sQvI8!IRXo;SK&)M4JS++23@XSjkXe_3rz|*Vp_T9vBy-n*4n#W$@XvYU@hZ zzJ`6d4<7AWxw87eQ$B+qDO%GWc{a*|HZtTCzuHYK0n%B_m zoM7UA^L6gMyH{`B-k&b@_bk04(LhAK4%hK3dfhF=T}3=JZ@?^jq{U z4UX=UQRMmaT*R{J<7P`gev_bg^^FodpKsmtm>rR|P%n9Rj`+*+wJ)z5nEDv-_+MDH zv!?d&Sa5R`wAOEU7s|ePPovw7 zcW3G{UbcUqy{T)W+rl31G>>}{5>oBX)0?lHQD>3XcYiQ*?)!(2BYy03Yc&07@m%8Y zML9A|DY{JI1|Fz%o zcyg>``QfMVcdnzIJWtz#bi*3iAvB6$0KXgv; zOjQoLb+uja)SvA}lHbA-9&I;1zj>|Kl~+C?bC0UC-CAsHRi(1z(?rdpmj_qK7fYM3 z{bQ&oHoMOH+06cD4QbQQ?mas(!(Z-d?z5wplQ@FX6k5+bm~y-O-JuNirpdQ>MEDvD z*M3gYd>SLFR5<6`)sY?y?T`@(WGC@^O+Q6&x@W8XJBAp%rEi_VLZR6 zd=>)(f1Rg`V@SoVx3jBrQo?JG+wU)aH`iLOfA6=dw`bp_3BOmHeV2uUd#SGAQV~TF z6)vSLE-ulP0!=1MmoC*^vSo`1XUi%t6BA$O#voBAZKc;DWr7HN0%0mI2(S8bnPjuCn|-=3$E@9eYl zkN<{$_?KVs&hgVD{{UI9`M14qoqBeE`*VerS{C1pHoej7dL-EOC{Ag2qg(TrCn@JE z_o_%ucz1){py&JlmRG%-|2-A>sdelR<0^fFZCxo(6LzFu_dnn^O=qv<`uQw-R~=qj z(`WH7chC7r*~jAVFf94ackqgc%f;Lk|4aqW)~~9OO|BEZs?5WC_z6pd^u*Nd5C5t+ zEG&LE;p(l;1JZ)JOY>R~EFkijCc-Pk^@zwi;pZ}Yov1-Dy?NhYv3mRX?`#+3p z{A|mr5cN-FbH*yht+STitl<`jf0EVwDt|(%X~_LEhqUcyw*}S;NB+v#^Ut8>boUfijr8~#~=Ih<@|yw-3@%HtQjr8<}8|_ z;LFc!efjw}yVe=YSGu(S?5~|ydRYBJ(bMEct}_w0f*b>Qo6_WhCu#0p}y% zxZljI(T#iW#1SRHt->ZGZKr=tCXM@k(S=U|8C{0v6L+)kOv~VSzK(UBer2qGhY;t% zgk=rN2l!mJC7+obqUBzAPCa~WJVV3X-;7yLer^x=yL8#O>wO<~vY+R3TeaOtVlUg(?Tf2q6>IlNEYfxP#>Ag==I)Aj z$rUqFzJ6%3TkxAJFw#Bg-Z2lR<-r;nZ^aGlBAO&tggT$_+1&b!G%N?-JG>xL@R4jTp^9buLin>QG7 zn!SHn@#&6pSj+pZXN0FHEYZGdr#m+;tjS#BZ~?2&_KhXqKAqsVEcNPqw39(aDKT`- zUppm!{ojrZrrgek9xD&IayqQ$ShnDnWSsZb^2DdNZw2)yxZYWP?JQ$Udxz4bkEX?p z3=87g7iB0FnHOwQ@0aOVAU0JyCd)C3;Zo$!L+ul%^66_ITrn$-i(l!xp~VNCYv*cA z*&9;cYIW$SO#ScjM84`vfJBdzNx{+t-SB1GmVPJ<`PEr=XmR7_gn{VNsc)qYK zD7}2?bIZvomo1jeJUqi%@aDEP?pZVUyEBz`uUeGLz{MZu!20U1>}L&;uUyQ99JBW> zl$mJl8Eu`m{$CRVgTV2EuRk1J-l?)|e%F$3ZMj~Ne?ya%>*q`7Y#SWjHT~ND-jnA` zbXC~b&KhRv+L`;Lp1<=v|EP8fpyt=d9xM!ChhqV zy{Dex>UYN1FP>f89B!v2oA6A)yZJ`V?do$`#_qkY$=zm`7JNIAn00Z#pyxHsc%F;9?HB| z7ky6rS5|(~D}Bpi=W@OxmaF~l62G_|U^Ha8lSu(zz5 z`eo-{g-v4b?VDe%ztDYV_uK;(x|3z@t9-6szw)p5$Ns*qJs)_()<`bi_p4gw&Ocul zdxzSRsd>Mi^6$z$o}Ki>-!M(}nvy3=t>GjwgSllbeJT6GW|&EI3q6!LR^xH$uzErg zQ%_`TvApZoy$-pRQ48kA?0|2tZE5OO)C-NeNvGtl^&Qy*FTM-{+tyw8Q8C#O?#m5U9@AC39 z4>Js?@d>M{-ah(0EdZW=$epy&`LzuVq--hgC z2X9TW-Tm(9jO_}~CLf5KHmgpAOW0DzJ8=<*-vy2&7PnUy;v3V1JCc0k{z{r&uM63; z$19|{D_r}6d3JK-(#4EZypvA5y-wg!p6Yk~%2}t(R@t4=rpB%Vu7cuY3IK0fQEiI=6AyElHT z+ml~#GgU?VSK0>~{iW>v2fwK&o;EGrbGzqL(X#I7lYd{Qz1eg3*{Sm)buIZr>a1D`pfqFDXe2s(M=`dHXVxi_olh zMM3$g%RXtZUQrc)Gw|Ib9S4=eA&cb=OUtB{wLQ$%S-xK?etmsybz*3IYX^Ve)bN10 zsu4*|YroFCz`8DS#nkz$pLTdNG_Ia@Bi;%oTw^Y8+`O@DY@inu+aPZWKb&U8ITvt%c0n5OB$X`#{9dfT~Y-n<%} zBVc^E;&}fS{-ChQ?;IKmL+aZt))l<)m@YLTHDK)(ft_ z7Jp|DT@j+7Z{?&lcaEIZbIx0O%hs~S=C6HyTcb<5AaB{fcoT+~6E8nqsQzE-!gcoJ zY3DqhQ`a4M#&mPKfK$x0^Uo8^#5e!V4$GUbYbsQd!ErTyah$o2pDr)MGPT4UpHsgU z+!J&;C)u5{RQCMmVg`YoAGpkC-L*U<>F~AJ$3K5T#E$LNbqsTwh1IV$?OXSI`T0Z^ zHL1_md#AtI^NVM#`&YI-@fUc`@jF<2`W7_h<2=R<0k6H%>teJvt+;pK-~5(8Nrntd z*!!nvE!St?)#KW|r0nvOOP99B>|L3!XdDs2{7Gh;J>RLT)2HYz48FDPe_sE+OQ{w1 z8v@vN8!+5EsK3XI>6o4-!vc{it`EhVPCw0Q(fJ{=_F=7j-M&@2JPi}S{oi%YNz602 z;|_C?nuy!X_jTVpr*~wJyo771u>s#2Ha5=Eb0Qyjl)hh@VRiCB z*HOj^IeTpOd{g?Axu;(0YPeF6`&P~(mPC1_Y5~gz!wJv%nY~#RT%T}n+0^XvY_mkI z?nEBFw*gB{Iv1%6SUOK?Fmzfi`miQuo|@*0FylSfQ%)aaO}EImoRf2p!GQBmw&gQ# zfqU;(O}nn!>+z*-_f@8=WiQvUygegseejdngIdB={wxv8-kiGR)M=IjZUujKuum&0`WfkB z=kV}bkgrD@TjE=Tkh7kTUNlR5E)|xEEc4++rD|)X_>{t|J+tNCFRFd?dO4qik(C6WMT@x4jt(n*E`pY&LG&h{s{50@N zYX;NA{fB0hKl)qN*6wLG=YQ++2Q{f(ON!L5-D^2N(T2~`T=wz2QJ)i; z#V|j$=oRatci&4Ex^t%Q+`ohI{eQu$(-l6w@2KI-mS3i!CLyUN8GUQv?sTk3>r{1ObiSR zhKx)MybKHsa~K#Hj2M|1L_kA&3=9mJ?GU^6F)%P(U|?Y207DPZSOEhA1B`a}^bJrj z(la#BGcsaeFfuSQv@$TZGB8yzFt9Q-u`)4aU}RuifN&AW@f-+$Fe3Sbk%0l`4>Lvv z24<)mK|_peNNiCk8{}U`CWsqtKzgBUODT{YF!%ny@&5sXfR~%68v`TAGEi{*zs=yx zz`@4G&c@2Y&d$!s$-%`V!ppuq3IhWp6Eh1d8#@Ol7x(`o3|j?2A;rwZ!pzFb!otA7Sj))7%)lbZ zDx_%W$R-?^$gWfnAuRebI z{N?Mn?>~P20{IK%Pq4QbL2&`{8=Aia8JHNESXh`@*g^hcWGV-FT#$uT(U48ZF_1m6 zP*};Rkwe63;=+vwIhBorK8Pk2UE~r|F?p!^5#%+n&xrF_6Inikdko>PTMRtRj0{YI z%z_N|3_t&MX)IvEz}o(Ye~G^DG+kY*chKC|@Ku$@JO2#}cur}*s?~m|-txxe#M?ZR z8}FWRu}nTa_e}M~moecz|JW9|@BMIOi2!G|reE>D*Y(a`&-$iJ+WBxx$ab;MQ8AwR zg~CToazZa2%P1h>%{(qwPE6fDz^DXyW_RiJc&M*0PM}5@iTP&CT z&S)&^Vi5^+Wgvt_zf3>4o=vTN0dLwX`!B!0o|^neu#EZjmFpcpgb(lkFr{MOalgdh zP4`mnztdO${PM^3>xIWAx@|nRFwlXEJ<)S^VDH`Ifv%$Jp3nCS{*#LOvFqacoT&-d zl;oAa2=%|){>AjO?c1s6=2q*@eZtRrM0cCVorIO^x2--~r}@XC|EQSm%9j^guP%sr z!2k7?ear7(QkgTZF0T#z>{?RC_aSfbW83IAWzMHN4bpd{o;tGp=e!-F;;l8RD}HQ_ zjn%tYvrXo#a-UM*m5G0~U!CXuQSAR=Tff-s{veo6i0K3XTc zkU_1(zq) z-?CiyXzAQ3R~I#PX)K8dbQNKAJMF&V^15~Ja&?p2vQOHayc^DXTjJSzXgrHfedMca zx}NuyRCPnm4@tM$!sD-_wgm9T{Aj$mxXe9h-IBI2358!$xh3}nwme+=<9FmX7ftzF zJRQ~o_s!)yP0w7N!|$-DOM`&`W`0x8>7x5baf$28Ovyi2q;8%~excWV_*Ox`UHr|( zw|B2I>j|56GC28Sz=c^|8Cj)@tRjI9O|aZG*`(!4uA1hQspn_yGjn`e<2=oQPj!3m zrrJu;=ccdZWlqhPxGgy6?~L@%rcb}R^L&}irLm|9J#X@de<(j_eYfZouY1^Dv#?Do zO1ez%Dr>$ds*qn>HE-&N*@vWp)|p%^RFxYwQ7*P(qW>AVc5QT9%q_+ELL~UblGuqX+rlQ#Ii1TrKdeXU_}&lh zZTT109_vgw@KswN_*d9pkwYgw^JYKDZ`;b6wqep^{~4dS%)Xrey?py+(Wi0hKRh4V z^B(!mDRlpqzOL>Ll@(vLukBm1c*Vg*PrRl?9etFkGh_)`MNr4?vyu=CT7Yl4?7zWc5t=fUT>Fks$H7bUTr!h z+IjHHlEkeYUo2J{?%O5=3g8K|IFGu$^~sFM-lw(M*7Ck7cPE$mq}fjn-r9N0H^|*3 zbn4B|;YU|L+54lhazpbIC8xRtDgPO)o^R>r&ffL?Pt%v(v#0+1wM_i-dpY~4U;2(e zLYG9`JH0BKA**W1C&`pd_jeaN&xzKu?=7ErRK~F5k*kZWs2ju5;`879e7DuyO#Wbf zwA|Tvws+v|nwjy=jjas7fxVBv3#`FdIP>^1Sr*-|$5y=AXZVVQs6(T?uj z+N(Kx%%@$BK4rD!;*|Uo*Kdb9hg>u{n{{`=m7Ik;d)o|^nChARo>|R*&uY6Lc~Sc+@|b$z`w*qt zCGuVu_B?uQ+rhSU&gHO~qKYOnml-EbxWrx)T3#jlN`ZSr;FYT?xe_;ul)Zk4mRVdg zJ@Cg@&`rsQZ|_;V$>qj#-Y??PShNIG+C$5nm07=*?(1F>n-%Wck^9)ld>^|P!_VK3 z_br)TXSi*%+lejP4>R7J@#H^)Vq9eS*12JiW3J_WwO%}PU8<4!wkrMu33Z}wYaUMC zy(7?7ghTt4eQTYWzvz$3+;=JRx5~1FQf*_a?H~Vn{p>IQ;alrF-q)R68tGZAaO~0I zrw-K{UufU?Cs(7g|HHA>VjF8$i_8s|PunK1&3wgJZt-%*Ta!(fo~`ANUeu-Kw*XPZ zI6H6@II=HIKQ%9=wYqHeldIW{dyVgey3P(ROYyj|R(sl+uut`shCjnBvaXcfU2^C@ z!`&jSSzH^h>C|v+>Xh8PRoo`jJZrmjWmQc7J-1u-=bwj2JewqHT6RqMZ1lG7toOG5 z{!7EVY(MdQc^}@m$bVs|>e30XG&Qq$m_RuOhWCg+ZtppI_E1IAseq)8PQ6p}*8b7{ zQTk`~#ed2_ZppL#sGVod9=MZLck%mqZ)#g>R+?Oj@mKk5ZL`U+yv$O^^Q78JiLm)M zoi!G9rCaLm-E+NM@b>K^pUx`hx;Rccej|L#5A6rlW~bkan6b0wO!)ktfhqrm_WB>G zA0Aylw5z22`^Gi9_Pmmu+vcM1pMmQ?LvUQD=jKHsyH2cJo;fYbchRjIQAhKczIa?` zT6@ve6BIiPfvzG9f&M)U^6xQ)-&%Sz=dMcXudbAx5onv8>yHxl` z@|Tp3sl|8x&78@++-(VVsWwuJ6;qPda42tF8JpU=J-0-8pP`@lML(O}N6s(lz7p)V z@mbWnKC$mdx7||jvfubMO~AEaU+U7+GRl0f?zPDM`+EEKj_Iy5nE0;oaC}+E{pfz< zI~&)BQ+8ff77sV;->18TO{?zHe}?!&oB#3N&ldY9ebwY|l;uW|(<0ht&I-3D8Myno z+3mZsJjft?vhlY`Q+A5&nm51VUhLd8w%^{{_y06K`D6L9sPL9IQQ0@AE>r#<_NuPj z-rv7!;Ya?Xx6aMcO}bbzZRhS?tfGyljyAsh=Pvr>AJ@gL_JTFuLO)v7GuPH%Qj5Iu zdsWQbW&Wt6k&8xVK++sO@LeTNbFis887D?H_I5sKwj1&8iD6 z*niK4Yn#-q8wv7O{uhEXR+?;y+L+Y%MDm#UmCF&VNz81_JC_V2oM^h&}P&G}tEcjoQeCbwKc6`;gCg%8s@ zA658NE$t~bySrLLqEznewLShv=QDq`H9xcKLfY@z4bM;1sRsU;{bl{a7t4!OeLa4( zWu$JO`EZtbSBOPQsn)4l4wF;A&L4~C`w}k^z1d%&=@0+iyKV*t{xfX-`!L?*$NEE2 z^P9iMZ+N9)m$*wa{N0Iti{_roJb2{SeUGcTrhB#S2X36=nQz4wWL+&^wL4z-kJ*oI z`{w+Ar_17EmCDYnur!o^zv5rgzB!xrZo886X!qusYTKteD=$2uG}+xpZArICpsUg$ zSeEJ1SioX3FM0XhGI?jOEZ3ce3%ErpWlubtQPXks>AgCq_!tqqP4@6yQ<5@2=&JbB)JAU=$$vlN{#LAVn!0G+CHLwTQM-<*^xZfz z{}^*hZ5DTSwf<&Lm3J$(1>6pq3-%dlpZ+I%`&HG`sn=FM@?QPAd-;r2j@G-DWcQss zaPs8a%cA!pU;N5zUwk*_=55_AX}O=)c=&yCkYT*v7?&F^9u^j!cA==`^5jj%Z%j4k zNABKqMX8H(`{cBRn^N2RivPa(%Di0k+Dj`Nx$JxAbM_T8G4FUtYI7yi`RYDcLgckJj$6Ro$mU{xgJT@$a5>^uvFKp2X{4zU;lcUaX@3 zUU2V;T8=l_(Z4;+f4$C_e}_lv%bRqryxXx=lY8BK5}g$OGo%Db?~Gs5Hbc+kr`;EQ z$^Q%~PeLo>3^hMRc9rRR9n~t#f4DKj&OfRwYthLdohfU~nU0D|R8?fTnCOZGdN_i* z91(VUACAuNHsSp8d&QNVL5Y)Pj{WUe`|7~Q`mQxK$_st#%O0OOC~$QCEcZ98hF;gM z{P?!pp1H>Ds*R}qw3$0E&)uxL*^J?<_KWPEMJpcpt_}RA-}WbZ@sCv}VltIY%(=@Wc4NPsf68ADOlGS#rEZLT+o!BtOrS%NAuz`LB4HW|Wf5{ql8SOHkd5KPzt+hv%$yX*sDb zsIKzscj%i;bqVcm)+GkFO^>|bdnag{W$W{I-mP0g2N_vsRuyGk^L_e=$)MrGzNVe$ zJEE#z%Sl~%)H*laLnp{>Yp(o+O$#eAM2l0 zm-)BcS~EALzwNsygJ_Pju8#U-`S0vcJ#rt}AMRi3rLpKu&H0^-TjL)lX&JM0UuIi- z(e=hvPm$(La|{%IU+GqjNDY%noV8wswbIXhsr9m;NzYi)YK z^-@Xwt=iLf>?l5M_<-NRnror2@~l#srY?+6^QGw|-=nGv z4Bz?tLdyIP|Gbdx#uv2l+O4zYvTHJnjZPZ`?md*t^8LWupxHD1Kh{lY)ijg$s*;=4 zY2vm)t9`aRJu&H8j5Uv-Nfdw`kqnd{2>>bE57_Q1cn9o(8 z`(y4_?-|`unKx2(_G^39z4&AGFZ9dAsHb+)8Qc%=vqVITaNDeWe)hQP?0NM(T(7et zZ~7J;=~${h{cUhymtOXn6NiFYmS1#OcZA!!OJj+`a;5jB@xi_;-#YMJlIt+`2`UR0 zdf7Om@uC~6vzKR*=c`N&mNjdFcgyc#zY?N(ZB1M~`{U5dYol(wYCjO&zcjkZU(2Do z#5Blms=>>EGivJ>ntc3OBw+XQNl3`IiE~B$U0?bvXsyl?33OF#6$x};4ZEVF`_l z-x08UKE?h_ozfn&HIL?0#)3Mz6F^Pdb?paknScA7vQOr4s*GpFF?aQ)hZU ze8nHm&Ej(AvmUIgJD+t#-e-b_meyP47atfH7#pmDF1kA2f(0&^UNC`!<@2>kkTHeT zm4D=W!~M3J-u(Nh-!Wi$)Ww{V!w+?jUs@)sCGjid@KR^PX^$?tigbYcBhY?{Wq(Ih zz%?80RktQi6PPL7*R!YpX}r?)+nbN5Z=a?n$=B-ft0(-Z`Lwg?wS`${Bo|IxtYam_ zXZ$NvdETb0MqC<;W;TGDn&F%4&SxwSyLO{5jAKLn1K&8~*!08y8Kh1=m|MD@N7r`E z>8IzV<_H5*r{xd8+AX&0j?b*wA_nAks>Sr!G zRI0RV-eK3uaZ59F56&*(=rvK=EuJZNwqP=oWi&a%i;880QCf~is znZ5OoY5B@C2aFU2HSH_U-xXml3m231yB)M+x7a6kv&#}H$I}?(Ux!U7j<>5(`Ivp< z$GS)7{*`5X4Z9P0yWd*n`DJyLy3j8s*-<5?i-Tveb{zHfar9rI-81v!<0BVV2;Yu4=N=TWu3p*i znAVo6`R*6vxaHq+)^L2bvClg!yUxS@7w2;Ox7=m!Cm-Gj`F&UTKf|VrNqg7$mz76c zoO?q{Lv_X+2KK5S`=e(`_tpo_y3@=uJ!ntG%Pkv~zpUGQg1>!I~lh9V>#-)#`748pLKtw$DAEFU@$n&Hi!R?|73xe0#<2 z*%-*N9^JgI_84!iZqT_^`ggfB7EN3c=xXLEq;bnrGEgLSW*>tH!(?CCJ^Uu;HXfCl zmX_SW@IGF@Ch+6Mk8L{?w-*1Mp5}GH_(=Qi`7hsoUHhM*YrY8Irb{oPbeezL)NDSt zH_fj3@BHU+?jaM;1}**K)D+Uh$x_6ze#t+v8i(#9zp7qd|HOKA?R9qhPdD8^^4AB( zn_l@AzTK+yjrp`<8*_mT6;GU-mdzBH-Mq{0CUaNR=l$*W!fXCSW=%7HGws(d9wXt_ z*?*V*TeMeb$?Kq?a7R~>Ac+w1OEYrxQYB8goH43y$f`Q{aqXiUKeQuuBr!yXODbPU znlbPA@hO3>frns0gpJOtunw2v?=jiyc}}^l^fRZ$p?MPj7$(OjX|o5Matt!!c&GjF z*RSe_;eEL^?hk*M{O+7u>g^)9%kY`244d4(FEjT_Mmt}4v1w-_Kt1oOhmF;`*+#fe5^!tBwD{Bzd4@vpYaNzjY z^@59<7ORVw)NW3#&0cY9>Df6S&olR|K6aCBP55y+xsP$1A6756n_BhZon^&&jsFax z>!UvWXE=W2#u}@CGlF|+7v0?abLGF5D>v?$PQLT))~EjreO8|`_woB0%8N_2%r4-! z7N2JC*Zgs9q@Df`Q=M54OO>AJJrwA9Z+FA?_4E7EKMuV(_+|A+w%tvfQPyXvH(+lFt7BO@_M;@t|ol)e_f;l9a@fRIB8o)Wnih&>WYMu7Rbl zky(g=C1|qC&`{gJz{4L;l%Jo(v2Oif~Dn#FEsI z%v`WD(Wl~0zPw+?z`!63SL|AmndYCCR-9VGU}$OJ)A#uh0|SF7T-q}?F+J5MH7~s+ zgTc_q!oYvxn}-Yx3?irs!ZTB#@^`%Rb5Q&foS#-wo>-L1fILh1LhkuH1_lNdxG5zW zrMXFYiJ3Xr{jVVX1+=VP28(*<{M>?~)Z*gI{5%G;pQ#0)h0JnT)FFGs$kZ&LzyLIP zD2q!a#79P^W*uz5K(nD5SQL5%xVn4hm82FWXC&sOr@G}A|aIA<-_-jHdz?U66zX zN>Txt6{$H4#t*NbjRH*tgVbgwCtD@w7gQEyre~Be1e7M_WF{-PT4 literal 0 HcmV?d00001 diff --git a/modules/rice/waybar/style.nix b/modules/rice/waybar/style.nix new file mode 100644 index 0000000..27e5798 --- /dev/null +++ b/modules/rice/waybar/style.nix @@ -0,0 +1,129 @@ +'' + * { + /* `otf-font-awesome` is required to be installed for icons */ + font-family: Material Design Icons, Iosevka Nerd Font; + } + + window#waybar { + background-color: rgba(48, 52, 70, 0.88); + border-radius: 0px; + color: #c6d0f5; + font-size: 20px; + /* transition-property: background-color; */ + transition-duration: 0.5s; + } + + window#waybar.hidden { + opacity: 0.2; + } + + #workspaces { + font-size: 15px; + background-color: #414559; + } + + #pulseaudio { + color: #a6d189; + } + #network { + color: #8caaee; + } + + #custom-search, + #clock { + background-color: #414559; + } + + #workspaces button { + background-color: transparent; + color: #8caaee; + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -3px transparent; + } + + /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ + #workspaces button:hover { + color: #85c1dc; + } + + #custom-power { + color: #e78284; + } + + #custom-lock { + color: #8caaee; + } + + #workspaces button.active { + color: #e5c890; + } + + #workspaces button.urgent { + background-color: #e78284; + } + + #clock, + #network, + #cpu, + #battery, + #backlight, + #memory, + #workspaces, + #custom-search, + #custom-power, + #custom-todo, + #custom-lock, + #custom-weather, + #custom-btc, + #custom-eth, + #volume, + #pulseaudio { + border-radius: 15px; + margin: 0px 7px 0px 7px; + background-color: rgba(65, 69, 89, 0.9); + padding: 10px 0px 10px 0px; + } + + #custom-power { + margin-bottom: 7px; + padding-right: 6px; + } + #custom-search { + background-image: url("${./sakura.png}"); + background-size: 60%; + background-position: center; + background-repeat: no-repeat; + margin-top: 7px; + } + #clock { + font-weight: 700; + font-size: 20px; + padding: 5px 0px 5px 0px; + font-family: "Iosevka Term"; + } + #backlight { + padding-right: 2px; + color: #e5c890; + } + #battery { + color: #a6d189; + } + + #battery.warning { + color: #ef9f76; + } + + #battery.critical:not(.charging) { + color: #e78284; + } + tooltip { + font-family: 'Lato', sans-serif; + border-radius: 15px; + padding: 20px; + margin: 30px; + } + tooltip label { + font-family: 'Lato', sans-serif; + padding: 20px; + } +'' diff --git a/modules/rice/waybar/waybar-wttr.py b/modules/rice/waybar/waybar-wttr.py new file mode 100644 index 0000000..bc3a7ae --- /dev/null +++ b/modules/rice/waybar/waybar-wttr.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python + +import json +import requests +from datetime import datetime + +WEATHER_CODES = { + '113': '☀️ ', + '116': '⛅ ', + '119': '☁️ ', + '122': '☁️ ', + '143': '☁️ ', + '176': '🌧️', + '179': '🌧️', + '182': '🌧️', + '185': '🌧️', + '200': '⛈️ ', + '227': '🌨️', + '230': '🌨️', + '248': '☁️ ', + '260': '☁️ ', + '263': '🌧️', + '266': '🌧️', + '281': '🌧️', + '284': '🌧️', + '293': '🌧️', + '296': '🌧️', + '299': '🌧️', + '302': '🌧️', + '305': '🌧️', + '308': '🌧️', + '311': '🌧️', + '314': '🌧️', + '317': '🌧️', + '320': '🌨️', + '323': '🌨️', + '326': '🌨️', + '329': '❄️ ', + '332': '❄️ ', + '335': '❄️ ', + '338': '❄️ ', + '350': '🌧️', + '353': '🌧️', + '356': '🌧️', + '359': '🌧️', + '362': '🌧️', + '365': '🌧️', + '368': '🌧️', + '371': '❄️', + '374': '🌨️', + '377': '🌨️', + '386': '🌨️', + '389': '🌨️', + '392': '🌧️', + '395': '❄️ ' +} + +data = {} + + +weather = requests.get("https://wttr.in/?format=j1").json() + + +def format_time(time): + return time.replace("00", "").zfill(2) + + +def format_temp(temp): + return (hour['FeelsLikeC']+"°").ljust(3) + + +def format_chances(hour): + chances = { + "chanceoffog": "Fog", + "chanceoffrost": "Frost", + "chanceofovercast": "Overcast", + "chanceofrain": "Rain", + "chanceofsnow": "Snow", + "chanceofsunshine": "Sunshine", + "chanceofthunder": "Thunder", + "chanceofwindy": "Wind" + } + + conditions = [] + for event in chances.keys(): + if int(hour[event]) > 0: + conditions.append(chances[event]+" "+hour[event]+"%") + return ", ".join(conditions) + +tempint = int(weather['current_condition'][0]['FeelsLikeC']) +extrachar = '' +if tempint >= 0 and tempint < 10: + extrachar = '+' + + +data['text'] = ' '+WEATHER_CODES[weather['current_condition'][0]['weatherCode']] + \ + "\n "+extrachar+weather['current_condition'][0]['FeelsLikeC']+"°" + +data['tooltip'] = f"{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_C']}°\n" +data['tooltip'] += f"Feels like: {weather['current_condition'][0]['FeelsLikeC']}°\n" +data['tooltip'] += f"Wind: {weather['current_condition'][0]['windspeedKmph']}Km/h\n" +data['tooltip'] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n" +for i, day in enumerate(weather['weather']): + data['tooltip'] += f"\n" + if i == 0: + data['tooltip'] += "Today, " + if i == 1: + data['tooltip'] += "Tomorrow, " + data['tooltip'] += f"{day['date']}\n" + data['tooltip'] += f"⬆️ {day['maxtempC']}° ⬇️ {day['mintempC']}° " + data['tooltip'] += f"🌅 {day['astronomy'][0]['sunrise']} 🌇 {day['astronomy'][0]['sunset']}\n" + for hour in day['hourly']: + if i == 0: + if int(format_time(hour['time'])) < datetime.now().hour-2: + continue + data['tooltip'] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeC'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n" + + +print(json.dumps(data))