<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Gtk on Tarragon</title><link>https://tarrragon.github.io/blog/tags/gtk/</link><description>Recent content in Gtk on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Mon, 29 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/gtk/index.xml" rel="self" type="application/rss+xml"/><item><title>配色系統、鎖屏與 GTK 主題</title><link>https://tarrragon.github.io/blog/linux/dotfile/06-rice-design/color-system-theming/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/dotfile/06-rice-design/color-system-theming/</guid><description>&lt;h2 id="hyprlock鎖屏">Hyprlock：鎖屏&lt;/h2>
&lt;p>Hyprlock 是 Hyprland 配套的鎖屏工具，支援模糊背景、自定義佈局：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="c1"># ~/.config/hypr/hyprlock.conf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">background &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> &lt;span class="nv">monitor&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="nv">path&lt;/span> &lt;span class="o">=&lt;/span> screenshot
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="nv">blur_passes&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="nv">blur_size&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">input-field &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="nv">monitor&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="nv">size&lt;/span> &lt;span class="o">=&lt;/span> 250, &lt;span class="m">50&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> &lt;span class="nv">outline_thickness&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl"> &lt;span class="nv">outer_color&lt;/span> &lt;span class="o">=&lt;/span> rgba&lt;span class="o">(&lt;/span>137, 180, 250, 1&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl"> &lt;span class="nv">inner_color&lt;/span> &lt;span class="o">=&lt;/span> rgba&lt;span class="o">(&lt;/span>30, 30, 46, 1&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl"> &lt;span class="nv">font_color&lt;/span> &lt;span class="o">=&lt;/span> rgba&lt;span class="o">(&lt;/span>205, 214, 244, 1&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl"> &lt;span class="nv">placeholder_text&lt;/span> &lt;span class="o">=&lt;/span> &amp;lt;i&amp;gt;Password...&amp;lt;/i&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl"> &lt;span class="nv">fade_on_empty&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl"> &lt;span class="nv">position&lt;/span> &lt;span class="o">=&lt;/span> 0, -50
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl"> &lt;span class="nv">halign&lt;/span> &lt;span class="o">=&lt;/span> center
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl"> &lt;span class="nv">valign&lt;/span> &lt;span class="o">=&lt;/span> center
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">23&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">24&lt;/span>&lt;span class="cl">label &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">25&lt;/span>&lt;span class="cl"> &lt;span class="nv">monitor&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">26&lt;/span>&lt;span class="cl"> &lt;span class="nv">text&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nv">$TIME&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">27&lt;/span>&lt;span class="cl"> &lt;span class="nv">font_size&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">64&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">28&lt;/span>&lt;span class="cl"> &lt;span class="nv">font_family&lt;/span> &lt;span class="o">=&lt;/span> MesloLGS Nerd Font
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">29&lt;/span>&lt;span class="cl"> &lt;span class="nv">color&lt;/span> &lt;span class="o">=&lt;/span> rgba&lt;span class="o">(&lt;/span>205, 214, 244, 1&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">30&lt;/span>&lt;span class="cl"> &lt;span class="nv">position&lt;/span> &lt;span class="o">=&lt;/span> 0, &lt;span class="m">80&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">31&lt;/span>&lt;span class="cl"> &lt;span class="nv">halign&lt;/span> &lt;span class="o">=&lt;/span> center
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">32&lt;/span>&lt;span class="cl"> &lt;span class="nv">valign&lt;/span> &lt;span class="o">=&lt;/span> center
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">33&lt;/span>&lt;span class="cl">&lt;span class="o">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>鎖屏一旦啟動，桌面的「鎖定」狀態由 compositor 透過 Wayland 的 ext-session-lock 協議持有，殺掉鎖屏 process 不等於解鎖。鎖屏的安全模型與測試時的注意事項見 &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/knowledge-cards/session-lock/" data-link-title="Wayland Session Lock（鎖屏安全狀態）" data-link-desc="hyprlock / swaylock 畫面卡住、pkill 後進不了桌面、或要在 VM / 自動化環境測試鎖屏時回來讀">Session Lock&lt;/a>。&lt;/p>
&lt;h2 id="配色系統的統一管理">配色系統的統一管理&lt;/h2>
&lt;p>Rice 的視覺品質取決於配色一致性。散亂的色碼（waybar 用一套、wofi 用另一套、mako 又一套）是桌面看起來「雜」的最常見原因。&lt;/p>
&lt;p>管理方式：&lt;/p>
&lt;p>&lt;strong>選定一套配色方案&lt;/strong>。Catppuccin、Tokyo Night、Gruvbox、Nord 是目前最多 Linux ricer 使用的方案，每一套都有完整的色彩定義和各工具的預設配置。&lt;/p>
&lt;p>&lt;strong>建立配色變數檔&lt;/strong>。把色碼集中到一個檔案，其他配置引用它：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="c1"># ~/.config/hypr/colors.conf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="nv">$rosewater&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>f5e0dc&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="nv">$flamingo&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>f2cdcd&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="nv">$pink&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>f5c2e7&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="nv">$mauve&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>cba6f7&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="nv">$red&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>f38ba8&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="nv">$maroon&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>eba0ac&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="nv">$peach&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>fab387&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="nv">$yellow&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>f9e2af&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="nv">$green&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>a6e3a1&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="nv">$teal&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>94e2d5&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="nv">$sky&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>89dceb&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="nv">$sapphire&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>74c7ec&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="nv">$blue&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>89b4fa&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&lt;span class="nv">$lavender&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>b4befe&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="nv">$text&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>cdd6f4&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">&lt;span class="nv">$subtext1&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>bac2de&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl">&lt;span class="nv">$overlay0&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>6c7086&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">&lt;span class="nv">$surface0&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>313244&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl">&lt;span class="nv">$base&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>1e1e2e&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl">&lt;span class="nv">$mantle&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>181825&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl">&lt;span class="nv">$crust&lt;/span> &lt;span class="o">=&lt;/span> rgb&lt;span class="o">(&lt;/span>11111b&lt;span class="o">)&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Hyprland 的 &lt;code>source&lt;/code> 可以引用這些變數。Waybar 和 Wofi 的 CSS 無法直接引用 Hyprland 變數，但可以用 build script 或 template 工具（如 pywal、flavours）從一份主設定產生各工具的配色。&lt;/p>
&lt;p>&lt;strong>換配色方案&lt;/strong>時需要改的檔案清單：&lt;/p>
&lt;ul>
&lt;li>Hyprland appearance.conf（邊框、陰影顏色）&lt;/li>
&lt;li>Waybar style.css&lt;/li>
&lt;li>Wofi/Rofi style.css&lt;/li>
&lt;li>Mako config&lt;/li>
&lt;li>Hyprlock config&lt;/li>
&lt;li>Terminal emulator 配色&lt;/li>
&lt;li>Neovim colorscheme&lt;/li>
&lt;li>GTK theme（影響 GUI 應用程式的外觀）&lt;/li>
&lt;/ul>
&lt;p>把這個清單記在 dotfile repo 的 README 裡，換主題時有對照不會漏改。&lt;/p></description><content:encoded><![CDATA[<h2 id="hyprlock鎖屏">Hyprlock：鎖屏</h2>
<p>Hyprlock 是 Hyprland 配套的鎖屏工具，支援模糊背景、自定義佈局：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1"># ~/.config/hypr/hyprlock.conf</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">background <span class="o">{</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">    <span class="nv">monitor</span> <span class="o">=</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">    <span class="nv">path</span> <span class="o">=</span> screenshot
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">    <span class="nv">blur_passes</span> <span class="o">=</span> <span class="m">3</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">    <span class="nv">blur_size</span> <span class="o">=</span> <span class="m">8</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">
</span></span><span class="line"><span class="ln">10</span><span class="cl">input-field <span class="o">{</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="nv">monitor</span> <span class="o">=</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">    <span class="nv">size</span> <span class="o">=</span> 250, <span class="m">50</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">    <span class="nv">outline_thickness</span> <span class="o">=</span> <span class="m">2</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">    <span class="nv">outer_color</span> <span class="o">=</span> rgba<span class="o">(</span>137, 180, 250, 1<span class="o">)</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">    <span class="nv">inner_color</span> <span class="o">=</span> rgba<span class="o">(</span>30, 30, 46, 1<span class="o">)</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">    <span class="nv">font_color</span> <span class="o">=</span> rgba<span class="o">(</span>205, 214, 244, 1<span class="o">)</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">    <span class="nv">placeholder_text</span> <span class="o">=</span> &lt;i&gt;Password...&lt;/i&gt;
</span></span><span class="line"><span class="ln">18</span><span class="cl">    <span class="nv">fade_on_empty</span> <span class="o">=</span> <span class="nb">true</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">    <span class="nv">position</span> <span class="o">=</span> 0, -50
</span></span><span class="line"><span class="ln">20</span><span class="cl">    <span class="nv">halign</span> <span class="o">=</span> center
</span></span><span class="line"><span class="ln">21</span><span class="cl">    <span class="nv">valign</span> <span class="o">=</span> center
</span></span><span class="line"><span class="ln">22</span><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">
</span></span><span class="line"><span class="ln">24</span><span class="cl">label <span class="o">{</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">    <span class="nv">monitor</span> <span class="o">=</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">    <span class="nv">text</span> <span class="o">=</span> <span class="nv">$TIME</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl">    <span class="nv">font_size</span> <span class="o">=</span> <span class="m">64</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">    <span class="nv">font_family</span> <span class="o">=</span> MesloLGS Nerd Font
</span></span><span class="line"><span class="ln">29</span><span class="cl">    <span class="nv">color</span> <span class="o">=</span> rgba<span class="o">(</span>205, 214, 244, 1<span class="o">)</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">    <span class="nv">position</span> <span class="o">=</span> 0, <span class="m">80</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">    <span class="nv">halign</span> <span class="o">=</span> center
</span></span><span class="line"><span class="ln">32</span><span class="cl">    <span class="nv">valign</span> <span class="o">=</span> center
</span></span><span class="line"><span class="ln">33</span><span class="cl"><span class="o">}</span></span></span></code></pre></div><p>鎖屏一旦啟動，桌面的「鎖定」狀態由 compositor 透過 Wayland 的 ext-session-lock 協議持有，殺掉鎖屏 process 不等於解鎖。鎖屏的安全模型與測試時的注意事項見 <a href="/blog/linux/dotfile/knowledge-cards/session-lock/" data-link-title="Wayland Session Lock（鎖屏安全狀態）" data-link-desc="hyprlock / swaylock 畫面卡住、pkill 後進不了桌面、或要在 VM / 自動化環境測試鎖屏時回來讀">Session Lock</a>。</p>
<h2 id="配色系統的統一管理">配色系統的統一管理</h2>
<p>Rice 的視覺品質取決於配色一致性。散亂的色碼（waybar 用一套、wofi 用另一套、mako 又一套）是桌面看起來「雜」的最常見原因。</p>
<p>管理方式：</p>
<p><strong>選定一套配色方案</strong>。Catppuccin、Tokyo Night、Gruvbox、Nord 是目前最多 Linux ricer 使用的方案，每一套都有完整的色彩定義和各工具的預設配置。</p>
<p><strong>建立配色變數檔</strong>。把色碼集中到一個檔案，其他配置引用它：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1"># ~/.config/hypr/colors.conf</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="nv">$rosewater</span> <span class="o">=</span> rgb<span class="o">(</span>f5e0dc<span class="o">)</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="nv">$flamingo</span>  <span class="o">=</span> rgb<span class="o">(</span>f2cdcd<span class="o">)</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="nv">$pink</span>      <span class="o">=</span> rgb<span class="o">(</span>f5c2e7<span class="o">)</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="nv">$mauve</span>     <span class="o">=</span> rgb<span class="o">(</span>cba6f7<span class="o">)</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="nv">$red</span>       <span class="o">=</span> rgb<span class="o">(</span>f38ba8<span class="o">)</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="nv">$maroon</span>    <span class="o">=</span> rgb<span class="o">(</span>eba0ac<span class="o">)</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="nv">$peach</span>     <span class="o">=</span> rgb<span class="o">(</span>fab387<span class="o">)</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="nv">$yellow</span>    <span class="o">=</span> rgb<span class="o">(</span>f9e2af<span class="o">)</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="nv">$green</span>     <span class="o">=</span> rgb<span class="o">(</span>a6e3a1<span class="o">)</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="nv">$teal</span>      <span class="o">=</span> rgb<span class="o">(</span>94e2d5<span class="o">)</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="nv">$sky</span>       <span class="o">=</span> rgb<span class="o">(</span>89dceb<span class="o">)</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="nv">$sapphire</span>  <span class="o">=</span> rgb<span class="o">(</span>74c7ec<span class="o">)</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="nv">$blue</span>      <span class="o">=</span> rgb<span class="o">(</span>89b4fa<span class="o">)</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="nv">$lavender</span>  <span class="o">=</span> rgb<span class="o">(</span>b4befe<span class="o">)</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="nv">$text</span>      <span class="o">=</span> rgb<span class="o">(</span>cdd6f4<span class="o">)</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="nv">$subtext1</span>  <span class="o">=</span> rgb<span class="o">(</span>bac2de<span class="o">)</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="nv">$overlay0</span>  <span class="o">=</span> rgb<span class="o">(</span>6c7086<span class="o">)</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="nv">$surface0</span>  <span class="o">=</span> rgb<span class="o">(</span>313244<span class="o">)</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl"><span class="nv">$base</span>      <span class="o">=</span> rgb<span class="o">(</span>1e1e2e<span class="o">)</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="nv">$mantle</span>    <span class="o">=</span> rgb<span class="o">(</span>181825<span class="o">)</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl"><span class="nv">$crust</span>     <span class="o">=</span> rgb<span class="o">(</span>11111b<span class="o">)</span></span></span></code></pre></div><p>Hyprland 的 <code>source</code> 可以引用這些變數。Waybar 和 Wofi 的 CSS 無法直接引用 Hyprland 變數，但可以用 build script 或 template 工具（如 pywal、flavours）從一份主設定產生各工具的配色。</p>
<p><strong>換配色方案</strong>時需要改的檔案清單：</p>
<ul>
<li>Hyprland appearance.conf（邊框、陰影顏色）</li>
<li>Waybar style.css</li>
<li>Wofi/Rofi style.css</li>
<li>Mako config</li>
<li>Hyprlock config</li>
<li>Terminal emulator 配色</li>
<li>Neovim colorscheme</li>
<li>GTK theme（影響 GUI 應用程式的外觀）</li>
</ul>
<p>把這個清單記在 dotfile repo 的 README 裡，換主題時有對照不會漏改。</p>
<h2 id="gtk--qt-主題">GTK / Qt 主題</h2>
<p>Linux 的 GUI 應用程式分兩大陣營：GTK（GNOME 系）和 Qt（KDE 系）。平鋪式 WM 不自帶主題引擎，需要手動設定：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># GTK 設定</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="c1"># ~/.config/gtk-3.0/settings.ini</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="o">[</span>Settings<span class="o">]</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">gtk-theme-name<span class="o">=</span>Catppuccin-Mocha-Standard-Blue-Dark
</span></span><span class="line"><span class="ln">5</span><span class="cl">gtk-icon-theme-name<span class="o">=</span>Papirus-Dark
</span></span><span class="line"><span class="ln">6</span><span class="cl">gtk-font-name<span class="o">=</span>Noto Sans CJK TC <span class="m">11</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl">gtk-cursor-theme-name<span class="o">=</span>Bibata-Modern-Classic</span></span></code></pre></div><p>Qt 應用程式用 <code>qt5ct</code> / <code>qt6ct</code> 設定，或用 Kvantum 主題引擎統一風格。</p>
<h2 id="dotfile-結構對應">Dotfile 結構對應</h2>
<p>Rice 涉及的工具最多——waybar、wofi、mako、hyprlock、GTK 各自是獨立的 stow package。邊界切在「一個工具一個 package」，換主題時才能按需更新而不影響其他工具。<code>themes/</code> 放共用的配色變數，不屬於任何單一工具：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">~/dotfiles/
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">├── waybar/
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">│   └── .config/
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">│       └── waybar/
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">│           ├── config.jsonc
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">│           └── style.css
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">├── wofi/
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">│   └── .config/
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">│       └── wofi/
</span></span><span class="line"><span class="ln">10</span><span class="cl">│           ├── config
</span></span><span class="line"><span class="ln">11</span><span class="cl">│           └── style.css
</span></span><span class="line"><span class="ln">12</span><span class="cl">├── mako/
</span></span><span class="line"><span class="ln">13</span><span class="cl">│   └── .config/
</span></span><span class="line"><span class="ln">14</span><span class="cl">│       └── mako/
</span></span><span class="line"><span class="ln">15</span><span class="cl">│           └── config
</span></span><span class="line"><span class="ln">16</span><span class="cl">├── hyprlock/
</span></span><span class="line"><span class="ln">17</span><span class="cl">│   └── .config/
</span></span><span class="line"><span class="ln">18</span><span class="cl">│       └── hypr/
</span></span><span class="line"><span class="ln">19</span><span class="cl">│           └── hyprlock.conf
</span></span><span class="line"><span class="ln">20</span><span class="cl">├── gtk/
</span></span><span class="line"><span class="ln">21</span><span class="cl">│   └── .config/
</span></span><span class="line"><span class="ln">22</span><span class="cl">│       └── gtk-3.0/
</span></span><span class="line"><span class="ln">23</span><span class="cl">│           └── settings.ini
</span></span><span class="line"><span class="ln">24</span><span class="cl">└── themes/
</span></span><span class="line"><span class="ln">25</span><span class="cl">    └── colors.conf          # 集中配色定義</span></span></code></pre></div><h2 id="rice-的投資報酬判讀">Rice 的投資報酬判讀</h2>
<p>Rice 可以投入的時間沒有上限。務實的分界線：</p>
<ul>
<li><strong>功能性配置</strong>（waybar 顯示正確資訊、wofi 能搜到 app、通知會跳出來）：投入一到兩小時，這是桌面可用的前提</li>
<li><strong>視覺統一</strong>（全域配色一致、字型統一、圓角/間距協調）：投入半天到一天，這是「好看」跟「雜亂」的分界</li>
<li><strong>精雕細節</strong>（自定義動畫曲線、pixel-perfect 對齊、自製 widget）：時間無底洞，看個人興趣</li>
</ul>
<p>前兩層是值得做的——它們改善每天使用的體驗。第三層是嗜好領域，跟「把車改到完美」是同一種動力，不需要理性上的正當性。</p>
]]></content:encoded></item></channel></rss>