+
    uj8iL"                        ^ RI t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
HtHtHtHtHtHt R R ltR R	 ltR0R
 R lltR R ltR R ltR R ltR R lt]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R  R! l4       t]R" R# l4       t]R$ R% l4       t ]R& R' l4       t!]R( R) l4       t"]R* R+ l4       t#]R, R- l4       t$R. R/ lt%R# )1    N)Path)get_dynamic_colours)log_exception)c_state_dir
config_dirdata_dirtemplates_dir	theme_diruser_config_pathuser_templates_dirc                R    V ^8  d   QhR\         \        \        3,          R\        /#    coloursreturndictstr)formats   ":/usr/lib/python3.14/site-packages/caelestia/utils/theme.py__annotate__r      "      d38n      c                 \    R pV P                  4        F  w  r#VRV RV R2,          pK  	  V# ) $z = 
items)r   confnamecolours   &   r   gen_confr#      s7    D!D6VHB'' (Kr   c                R    V ^8  d   QhR\         \        \        3,          R\        /# r   r   )r   s   "r   r   r      r   r   c                 \    R pV P                  4        F  w  r#VRV RV R2,          pK  	  V# )r   r   z: #z;
r   )r   scssr!   r"   s   &   r   gen_scssr'      s7    D!D6VHC(( (Kr   c                j    V ^8  d   QhR\         \        \        3,          R\        R\        R\        /# )r   r   templatehashr   )r   r   r   bool)r   s   "r   r   r   !   s1      c3h 4 t PS r   c                     VP                  4       pV P                  4        F(  w  r4TP                  R V R2V'       d   RV 2MT4      pK*  	  V# )z{{ $z }}#)	read_textr   replace)r   r)   r*   r!   r"   s   &&&  r   gen_replacer0   !   sM    !!#H##fTF%$8$AfX,TZ[ (Or   c                ^    V ^8  d   QhR\         \        \        3,          R\        R\        /# )r   r   r)   r   )r   r   r   )r   s   "r   r   r   (   s)      c3h 4 C r   c                    a R  V3R llpRp\        V 4      oVP                  4       p\        P                  ! W2V4      pV# )c                D    V ^8  d   QhR\         P                  R\        /# )r   matchr   )reMatchr   )r   s   "r   r   )gen_replace_dynamic.<locals>.__annotate__)   s     / /288 / /r   c                 .  < V P                  ^4      P                  4       P                  R4      p\        V4      ^8w  d   V P                  4       # Vw  r#VS9  g   \	        SV,          V4      '       g   V P                  4       # \        SV,          V4      # )   .)groupstripsplitlenhasattrgetattr)r4   datacolformcolours_dyns   &   r   fill_colour(gen_replace_dynamic.<locals>.fill_colour)   sy    {{1~##%++C0t9>;;= 	k!S1A4)H)H;;= {3'..r   z\{\{((?:(?!\{\{|\}\}).)*)\}\})r   r.   r5   sub)r   r)   rE   fieldtemplate_contenttemplate_filledrD   s   &&    @r   gen_replace_dynamicrK   (   sD    / / -E%g.K))+ffU1ABOr   c                R    V ^8  d   QhR\         R\        \        ,          R\         /# )r   cir   )r   listint)r   s   "r   r   r   ;   s*     P P3 PDI P# Pr   c           	         RRP                  \        \        V4      4       RV R,           RV R,           RV R,           R2	# )	z=Hex to ANSI sequence (e.g. ffffff, 11 -> ]11;rgb:ff/ff/ff\)z];z;rgb::r   r   N/:r      N:rT      Nz\)joinmapr   )rM   rN   s   &*r   c2srX   ;   s?    388CQK()qvha#xq3OOr   c                R    V ^8  d   QhR\         \        \        3,          R\        /# r   r   )r   s   "r   r   r   @   s"     # #4S> #c #r   c                n   \        V R,          ^
4      \        V R,          ^4      ,           \        V R,          ^4      ,           \        V R,          ^4      ,           \        V R,          ^^ 4      ,           \        V R,          ^^4      ,           \        V R,          ^^4      ,           \        V R,          ^^4      ,           \        V R,          ^^4      ,           \        V R	,          ^^4      ,           \        V R
,          ^^4      ,           \        V R,          ^^4      ,           \        V R,          ^^4      ,           \        V R,          ^^	4      ,           \        V R,          ^^
4      ,           \        V R,          ^^4      ,           \        V R,          ^^4      ,           \        V R,          ^^4      ,           \        V R,          ^^4      ,           \        V R,          ^^4      ,           \        V R,          ^^4      ,           \        V R,          ^^4      ,           \        V R,          ^^4      ,           # )z
10: foreground
11: background
12: cursor
17: selection
4:
    0 - 7: normal colours
    8 - 15: bright colours
    16+: 256 colours
	onSurfacesurface	secondaryterm0term1term2term3term4term5term6term7term8term9term10term11term12term13term14term15primarytertiary)rX   )r   s   &r   gen_sequencesrp   @   s    	GK "%
gi "
%	&
gk"B
'	( gk"B
'	( gg1
%		&
 gg1
%	& gg1
%	& gg1
%	& gg1
%	& gg1
%		& gg1
%
	& gg1
%	& gg1
%	& gg1
%	& ghB
'	( ghB
'	(  ghB
'!	(" ghB
'#	($ ghB
'%	(& ghB
''	(( gi !R
()	)* gk"Ar
*+	+, gj!1b
)-	*r   c                4    V ^8  d   QhR\         R\        RR/# )r   pathcontentr   N)r   r   )r   s   "r   r   r   f   s!      T C D r   c                 b    V P                   P                  R R R7       V P                  V4       R# )Tparentsexist_okN)parentmkdir
write_text)rr   rs   s   &&r   
write_filer{   f   s%    KKdT2OOGr   c                (    V ^8  d   QhR\         RR/# )r   	sequencesr   Nr   )r   s   "r   r   r   l   s      3 4 r   c                    \         R ,          pVP                  P                  RRR7       VP                  V 4       \	        R4      pVP                  4        FY  pVP                  P                  4       '       g   K%   VP                  R4      ;_uu_ 4       pVP                  V 4       RRR4       K[  	  R#   + '       g   i     Kp  ; i  \         d     K  i ; i)zsequences.txtTru   z/dev/ptsaN)r   rx   ry   rz   r   iterdirr!   isdigitopenwritePermissionError)r}   statepts_pathptfs   &    r   apply_termsr   k   s    /)E	LLtd3	YJH 77??WWS\\QGGI& "\ ! "\\" s0   =C
B6(C
6CC
C

CCc                (    V ^8  d   QhR\         RR/# )r   r    r   Nr~   )r   s   "r   r   r   |   s     > >S >T >r   c                 4    \        \        R ,          V 4       R# )zhypr/scheme/current.confN)r{   r   )r    s   &r   
apply_hyprr   {   s    z66=r   c                (    V ^8  d   QhR\         RR/# )r   r&   r   Nr~   )r   s   "r   r   r      s     M M M Mr   c           	      V   ^ RI pVP                  R4      ;_uu_ 4       p\        V4      R,          P                  V 4       \        P
                  ! RRV\        R,          .RR7      pRRR4       R
 F!  p\        \        V,          R	,          X4       K#  	  R#   + '       g   i     L9; i)r   Nwz_colours.scsssassz-Izdiscord.scssT)textzthemes/caelestia.theme.css)EquicordVencordBetterDiscordequibopvesktoplegcord)	tempfileTemporaryDirectoryr   rz   
subprocesscheck_outputr	   r{   r   )r&   r   tmp_dirr    clients   &    r   apply_discordr      s    		$	$S	)	)W	g	(44T:&&g}~?]'^eij 
* Z:&)EEtL Z	 
*	)s   A	BB(	c                V    V ^8  d   QhR\         \        \        3,          R\        RR/# r   r   moder   Nr   )r   s   "r   r   r      s.     N NT#s(^ N3 N4 Nr   c                 j    \        V \        R V R2,          4      p\        \        R,          V4       R# )z
spicetify-z.iniz$spicetify/Themes/caelestia/color.iniNr0   r	   r{   r   r   r   r)   s   && r   apply_spicetifyr      s,    7Mjd4K$KLHzBBHMr   c                J    V ^8  d   QhR\         \        \        3,          RR/# r   r   r   Nr   )r   s   "r   r   r      s"     ; ;$sCx. ;T ;r   c                 b    \        V \        R ,          4      p\        \        R,          V4       R# )z
fuzzel.inizfuzzel/fuzzel.iniNr   r   r)   s   & r   apply_fuzzelr      s#    7ML$@AHz//:r   c                J    V ^8  d   QhR\         \        \        3,          RR/# r   r   )r   s   "r   r   r      &     L LS#X L4 Lr   c                     \        V \        R ,          RR7      p\        \        R,          V4       \        P
                  ! . RO\        P                  R7       R# )z
btop.themeTr*   zbtop/themes/caelestia.themestderrN)killall-USR2btopr0   r	   r{   r   r   runDEVNULLr   s   & r   
apply_btopr      s:    7ML$@tLHz998DNN/
8J8JKr   c                J    V ^8  d   QhR\         \        \        3,          RR/# r   r   )r   s   "r   r   r      s"     < <c3h <D <r   c                 f    \        V \        R ,          RR7      p\        \        R,          V4       R# )znvtop.colorsTr   znvtop/nvtop.colorsNr   r   s   & r   apply_nvtopr      s%    7MN$BNHz00(;r   c                J    V ^8  d   QhR\         \        \        3,          RR/# r   r   )r   s   "r   r   r      r   r   c                     \        V \        R ,          RR7      p\        \        R,          V4       \        P
                  ! . RO\        P                  R7       R# )z
htop.themeTr   zhtop/htoprcr   N)r   r   htopr   r   s   & r   
apply_htopr      s9    7ML$@tLHzM)84NN/
8J8JKr   c                V    V ^8  d   QhR\         \        \        3,          R\        RR/# r   r   )r   s   "r   r   r      s.     t ttCH~ tS tT tr   c                 X   \        V \        R ,          RR7      p\        \        R,          V4       \        \        R,          V4       \        P
                  ! . RO4       \        P
                  ! RRRRV R	2.4       \        P
                  ! RRR
RVP                  4        R	2.4       R# )zgtk.cssTr   zgtk-3.0/gtk.csszgtk-4.0/gtk.cssdconfr   z)/org/gnome/desktop/interface/color-schemez'prefer-'z'/org/gnome/desktop/interface/icon-themez	'Papirus-N)r   r   z&/org/gnome/desktop/interface/gtk-themez'adw-gtk3-dark')r0   r	   r{   r   r   r   
capitalizer   s   && r   	apply_gtkr      s    7MI$=DIHz--x8z--x8NNbcNNGW&QU]^b]ccdSefgNNGW&OS\]a]l]l]n\oopQqrsr   c                V    V ^8  d   QhR\         \        \        3,          R\        RR/# r   r   )r   s   "r   r   r      s.     C Cd38n CC CD Cr   c           
         \        V \        R V R2,          RR7      p\        \        R,          V4       \        \        R,          V4       \        R,          P	                  4       pVP                  RVP                  4       4      pR Fe  pVP                  R\        \        R V R	2,          4      4      pV^8X  d   VR
,          pM	VR,          p\        \        R V RV R2,          V4       Kg  	  R# )qtz.colorsTr   zqt5ct/colors/caelestia.colorszqt6ct/colors/caelestia.colorsz	qtct.confz{{ $mode }}z{{ $config }}ctzZ
[Fonts]
fixed="Monospace,12,-1,5,50,0,0,0,0,0"
general="Sans Serif,12,-1,5,50,0,0,0,0,0"
zt
[Fonts]
fixed="Monospace,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
general="Sans Serif,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
zct/qtzct.confN)   rU   )r0   r	   r{   r   r.   r/   r   r   )r   r   r)   qtctverr    s   &&    r   apply_qtr      s    7Mbg4F$FTRHz;;XFz;;XFK'224D<<t'89D||OS3%rl1J-KL!8  D   D
 	:"SEse7 ;;TB r   c                V    V ^8  d   QhR\         \        \        3,          R\        RR/# r   r   )r   s   "r   r   r      s.     K KS#X Kc Kd Kr   c                     VR 8X  d   RMRp\        V \        R,          RR7      pVP                  RV4      p\        \        R,          V4       R# )	darkdarkerlighterz	warp.yamlTr   z{{ $warp_mode }}z#warp-terminal/themes/caelestia.yamlN)r0   r	   r/   r{   r   )r   r   	warp_moder)   s   &&  r   
apply_warpr      sE     FN	I7MK$?dKH 2I>Hx??Jr   c                J    V ^8  d   QhR\         \        \        3,          RR/# r   r   )r   s   "r   r   r      r   r   c                     \        V \        R ,          RR7      p\        \        R,          V4       \        P
                  ! . RO\        P                  R7       R# )z	cava.confTr   zcava/configr   N)r   r   cavar   r   s   & r   
apply_cavar      s9    7MK$?dKHzM)84NN/
8J8JKr   c                J    V ^8  d   QhR\         \        \        3,          RR/# r   r   )r   s   "r   r   r      s"     7 7$sCx. 7T 7r   c                     \         P                  ! 4       '       g   R # \         P                  ! 4        FG  pVP                  4       '       g   K  \	        W4      p\        \        VP                  ,          V4       KI  	  R # )N)r   is_dirr   is_filerK   r{   r
   r!   )r   filers   s   &  r   apply_user_templatesr      sO    $$&&"**,<<>>)'8Gy499,g6 -r   c                V    V ^8  d   QhR\         \        \        3,          R\        RR/# r   r   )r   s   "r   r   r      s)     !" !"4S> !" !" !"r   c                 r  a  \         P                  ! \        P                  ! 4       4      R ,          oR V3R llpV! R4      '       d   \        \        V 4      4       V! R4      '       d   \        \        V 4      4       V! R4      '       d   \        \        V 4      4       V! R4      '       d   \        W4       V! R4      '       d   \        V 4       V! R4      '       d   \        V 4       V! R	4      '       d   \!        V 4       V! R
4      '       d   \#        V 4       V! R4      '       d   \%        W4       V! R4      '       d   \'        W4       V! R4      '       d   \)        W4       V! R4      '       d   \+        V 4       \-        V 4       R#   \        \         P
                  \        3 d    / o ELi ; i)themec                0    V ^8  d   QhR\         R\        /# )r   keyr   )r   r+   )r   s   "r   r   #apply_colours.<locals>.__annotate__   s     0 03 04 0r   c                 (   < V S9   d
   SV ,          # R # )T )r   cfgs   &r   checkapply_colours.<locals>.check   s    #:s3x/4/r   
enableTerm
enableHyprenableDiscordenableSpicetifyenableFuzzel
enableBtopenableNvtop
enableHtop	enableGtkenableQt
enableWarp
enableCavaN)jsonloadsr   r.   FileNotFoundErrorJSONDecodeErrorKeyErrorr   rp   r   r#   r   r'   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   s   && @r   apply_coloursr      sP   jj)3356w?0 0 \M'*+\8G$%_hw'(&^W\7]G\7[' Z\7!\7!= t33X> s   0F "F65F6)F)&r   r5   r   pathlibr   caelestia.utils.colourr   caelestia.utils.loggingr   caelestia.utils.pathsr   r   r   r	   r
   r   r   r#   r'   r0   rK   rX   rp   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      sd    	   6 1  &P
#L
   > > M M N N
 ; ;
 L L < <
 L L t t C C4 K K L L 7 7!"r   