---
image: https://hackmd.io/_uploads/BJUDGCAaK.png
---
# 啟用 Figma 桌面版的自訂 CSS 功能,以及暗黑模式
![](https://hackmd.io/_uploads/S1xujpC6t.png)
昨天在推特看到有篇 [Figma 暗黑模式](https://twitter.com/joeyabanks/status/1485652780576608261) 的貼文。
身為一個程式開發者,**暗黑模式乃生存之必要**。吃飯工具來說,編輯器、終端機、手機 App,都應當開啟暗黑模式,若無,則應直接移除該軟體,這是最基本的。什麼,你說移除就沒有替代品了?那就自己寫一個啊!
再廣一點來到日用品層面,舉凡桌面、電競椅、牆面、地板、寢具,通通只能選黑色,並記得配上 LED 多段變色燈作為裝飾。穿著上,黑衣、黑褲、黑外套、黑帽,加上在白天也看不清路的墨鏡,最後再用異材質加上特殊廓形做出造型感。做到如此程度,才可以自稱為一位**真正的程式開發者**。(**REAL Programmer**, aka)
## 還是讓我們進入正題吧
[Figma](https://www.figma.com/) 是我經常使用的向量設計工具,優點是全 web 跨平臺,更支援多人即時協作(同時看到大家的遊標搖來晃去),重點是還免費。你甚至能自己製作並發佈擴充功能,擴充功能 API 還是 React,對前端開發者相當友善。儘管我並沒有自己實作就是了...(扶額(歪頭
這樣一個優質設計軟體竟然沒有暗黑模式,著實令人遺憾。推特下面有推文提到 [Dark Figma](https://darkfigma.com/) 這個軟體可以把你的 Figma 暗黑化,不過需要兩歐元,又沒有開源,[_沒有開源的程式碼,我可是不用的噢_](https://www.youtube.com/watch?v=scuO8jftdqw)。
身為免費仔,趕忙在 GitHub 上搜尋 「[figma dark](https://github.com/search?q=figma+dark)」關鍵字,發現其實過去滿多前人都有實作過了,有兩種方法:
* [Figma Plugin](https://github.com/PaperTiger/figma-dark-ui/issues/21)
* [CSS 複寫](https://github.com/Mart1M/FigmaDarkUINative/blob/main/assets/css/content.css)
* [Figma Dark Theme - Microsoft Edge Addons](https://microsoftedge.microsoft.com/addons/detail/figma-dark-theme/pniljokeankpoomopaaekblacciihnpp)
第一種 Figma Plugin 方式已經失效,但 CSS 複寫的方式用網頁版本的 Figma 測試後,效果也不是很好,只能改操作元件,對於畫布(canvas)的背景完全沒有影響。看了看 [Dark Figma](https://darkfigma.com/) 的截圖,畫布背景也被改成了暗色,完成度相當高啊。
對於免費仔來說,是可忍,孰不可忍,而且 Dark Figma 改的不是瀏覽器而是 Figma 桌面版,桌面版的 Figma 是 Electron 做的.....看來有跡可循...!
## [就說,這裡沒有要教如何解包 Electron App,要講幾次](https://www.youtube.com/watch?v=3UvgV71ZnfY&feature=emb_title)
```bash
npm i -g asar
cd /Applications/Figma\ Beta.app/Contents/Resources/
asar e app.asar app
```
令人非常開心的,Figma 的並沒有對 Electron 原始碼做模糊處裡,看起來過個 babel 就直接輸出了。翻了翻原始碼就看到 `CSS_INJECTION` 這個關鍵字,用 VSCode Goto Definition 點了幾下來到這段程式碼附近:
```js
const CSS_INJECTION = (() => {
if (build_1.default.channel !== 'stable' && user_settings_1.default.cssInjection) {
try {
return fs.readFileSync(user_settings_1.default.cssInjection.path, 'utf8');
}
catch (_a) { }
}
return null;
})();
```
看了一下用法:
```js
if (typeof json.cssInjection === 'object' &&
typeof json.cssInjection.path === 'string' &&
typeof json.cssInjection.backgroundColor === 'string') {
settings.cssInjection = {
path: json.cssInjection.path,
backgroundColor: json.cssInjection.backgroundColor,
};
}
```
還有:
```js
case 'beta':
return {
name: 'Figma Beta',
channel: 'beta',
protocol: 'figma-beta',
settingsFile: '.figma_desktop_beta_settings.json',
profileDirectory: 'DesktopBeta',
updaterBaseURL: `https://desktop.figma.com/${updaterPlatform}/beta`,
};
```
喵嗚~~
## 結論
編輯家目錄底下的 `.figma_desktop_beta_settings.json` 並貼上以下內容:
```json
{
"cssInjection": {
"path": "/path/to/style.css",
"backgroundColor": "#111111"
}
}
```
css 就從 GitHub 上挑一個下載或自己改吧。
因為改出來的效果還是不盡理想,和當做寫完作業對答案一樣,我還是花了 2 歐買了 Figma Dark......然後發現他就是這樣做的啊,那幹嘛還包一個 Electron App 做這個寫入 JSON 的動作 (╯°Д°)╯ ┻━┻ (~~Any application that can be written in Electron, will eventually be written in Electron.~~)
沒關係啦我這篇用中文寫的,作者應該看不到的啦,沒有要斷你財路啦,哼。
最後同場加映 [Trello Electron 桌面版 Patch](https://yukai.dev/blog/2016/11/12/patching-trello-desktop-electron-app),想了想過了幾年我還是在幹同樣的事啊......
## 竟然還有另一個 figmadark.com
還要價 4 USD,看[推特評論](https://twitter.com/YarikBright/status/1419581179087527937)滿來路不明的,還好像 bug 一堆跑不起來,大家自己評估一下啊,反正這麼便宜,也沒比 NFT 貴,是可以丟點錢進去啦,~~平平都是進水溝~~
(完)