refactor(fastfetch): merge the mac and kde configs into common
One Fastfetch package now serves both platforms. The logo is sent inline through the kitty graphics protocol from a pre-encoded albedo.kitty, which works in Ghostty and Kwi alike, so the separate kitty-direct (mac) and Konsole (kde) variants are no longer needed.
This commit is contained in:
1 parent
84e96f175c
commit
fa77bc2514
15 files changed
+62
-183
No files matched your search
+2
-4
@@ -9,14 +9,13 @@ From the repository root, install all KDE packages:
|
||||
Or choose individual packages:
|
||||
|
||||
```sh
|
||||
stow -d kde -t "$HOME" spectacle fastfetch
|
||||
stow -d kde -t "$HOME" spectacle helium
|
||||
```
|
||||
|
||||
| Package | Details |
|
||||
| ---------------------------------- | -------------------------------------------------------- |
|
||||
| [theme](theme/README.md) | Darwin Breeze KDE colors and generated app themes |
|
||||
| [helium](helium/README.md) | Browser flags; colors come from GTK |
|
||||
| [fastfetch](fastfetch/README.md) | Konsole configuration and a pre-scaled inline image logo |
|
||||
| [spectacle](spectacle/README.md) | Screenshots to clipboard with a notification, no preview |
|
||||
| [tray-icons](tray-icons/README.md) | Ngó Sen and qBittorrent tray icons |
|
||||
|
||||
@@ -33,5 +32,4 @@ The apply scripts require a running KDE Plasma 6 session. Ngó Sen icons need
|
||||
an additional install step described in the tray-icons README.
|
||||
|
||||
Packages can be selected independently; Helium follows the Darwin Breeze
|
||||
colors only when the theme is applied. Choose either `kde/fastfetch` or
|
||||
`mac/fastfetch`; both own `~/.config/fastfetch/`.
|
||||
colors only when the theme is applied.
|
||||
@@ -1 +0,0 @@
|
||||
_Ga=T,f=100,t=d,c=20,r=10,q=2,m=1;iVBORw0KGgoAAAANSUhEUgAAAKAAAACqCAYAAAAqVERLAAAAtGVYSWZJSSoACAAAAAYAEgEDAAEAAAABAAAAGgEFAAEAAABWAAAAGwEFAAEAAABeAAAAKAEDAAEAAAACAAAAEwIDAAEAAAABAAAAaYcEAAEAAABmAAAAAAAAAL4nCQDoAwAAvicJAOgDAAAGAACQBwAEAAAAMDIxMAGRBwAEAAAAAQIDAACgBwAEAAAAMDEwMAGgAwABAAAA//8AAAKgBAABAAAAoAAAAAOgBAABAAAAqgAAAAAAAAC3q+GLAAAACXBIWXMAAFxGAABcRgEUlENBAAAgAElEQVR4nOy9BXhUR/s+3KIt7nF3d3dPIAJJkOCBQCleoFihxVqghdLiLW6F4u7uxd3dieBu9/c8c87ZnA2L9P29/6/lJXNdc+1md7N7zsw996PzzCeffMQNQFHqRVR/V6CeSH0w9bWvXr268PLlyyf0/CX1B/T3Jfp7Cz0fQb0edQPV/xbh7/tn7qSwfVCNgPKpGiz03Jf6OOo3ILVXeHtT3r9DfTb1CNV3Mag//WfurLD965ua9ejRi/pSmeGUxs+fEdu9kJ+/UoHupfz6c/lRDcZ1DGT5e4uombWwFTbRFNajx7LUf2EgqUD3vAAQQSADiVxN57+5F2BCDRjlx2HUS6l/r7AVNjX4vKkfVwHmuRpUDLTnz5+LR52ylz7L77948aLg6y9UrLiPup36dwvbR9wIBMXkx0bUH8sgea4SnwJQBUF1//59nD17BocOHcKJEyeQm5uLgmAt8D+vVKyaSz1K/t1CEH6sTZl8AkoXHUylAZECrBMnjqNf/74IDQuGvr4eSpb8DCVKlKBeEhUrVoCHhxs6dGiPnTt3av5H/f8qcPN3PyO2rKW+jsL2ETVl0gkcHVXA0MhWNevt2bMbSUmJKFasKJmwJaBfxRpujuEI9k1BeGBthPqnwss1BmZGziherAz464NDgrBp0ybNd6nFtgxyRuVT6sHy9RQaJh9LQ77OF6MChAYhrMdxu3PnDr74oqUAVJlSVRDglYia8a2QVqMtaia0RnLcF0iKbUmPLen1L5FKr6dWb02gTEel8kbi/1q0bIEHDx5ogFiQCem3t/2zo1HY/rFG879FBUAt8P3111+wsDQnEBVHoHciAauNAFv1qGbUM+VH6tHN8p/Lr/Pn0hLbCob85JOicHCwx6mTpzRivQATcouQr6dQFP+vN+T7+dxUrPdKzVDz5s0j/a4EKpbXR0JkE9Qi8NUiZmPWS4zJ0gCtRnRznZ3fS4jMREpcK8GOFcsbolLlikI3LABCxSjpJV9TsX92dArb//OmEr8ZahZSwDdhwgQhOj/99FN8/llpFClSlP6m5yUrws7KD7HhDYWoTYr9QgCxRvTbgJgpHtMS26FaZXPY2tloGFY2TBQADpevqRCA/+sN+W6X5moWUgD4zTffoEWLFtiyZQsZH3vE44SJE5DZrClMTIwFOCuUM0BYQBqJ5bYyI74dhDUTviQjJQ4WFuZ49OixLgAOVV9bYfsfbioGrC5PvkYeFnCXoODrjx49wqLFixATEy2AWLmCEWLDGhIIW7wRhPx6ao02sDb3go+Pt+b7CgDwO/maCgH4v94gJwPQowGBIE+tAyr6mRLNULryN2NGASMzo4+PF4oVK4mokAwkEQh1iWNmQBbBVSqaI712GtRsi3xLuIV8TYVGyMfQVCw4VgbC03exoPKeOtTGYHV2cYKNubfQC3WxIL/GBkyxIqUwePBACXXPFeLTsG9hVORjaioW1KN+ugAY3tkYiM+ePRPPA4P8YWnq8QYANhPiOTqkPooWKYYdO3ZogIt81r1P3Uy+nkJn9MfSkO+OsSdA7VKw9b4A5MYgtLS0gIt9GGoltH4NgCx+2YVja+mrywJWAL9HtSAKcwU/lgZVljI9+lHPfl8QKn68S5cuoXz58gjyqSmiIq8DkMQvWcAsfr/9rrf4H5X4VZ78LF9Dofj9WBry48Dl6Plw5OuA78WAig64cdNGFPm0GOIjmwh3TEHwpcR/CR/3OJQrVw4XLlzQAi8K9b+Ps6lYjzOeT6jAoJ1NWiDhVEk6VbPYsF9+Jt3uc8Fyb2K/4kVLo+NXHQqynwI+zj38DIVZ0v/7TZ7k4vLzJOoPVaJQK/ePgfIma5jfe/pUIsx6GXVRuYKpcLMoUQ/uCVFNRezY3toPhoYGuHkzWwNq+VHxw/SRr0dZFFoboQrb/0BTJhX5Rgc7oJ9KOHg990/9d05Ojkg2PXLkMC5fuYwnT55o3ufPsmHhaBMoDA2FARmIrA9GBNUWzuoZf8zQfF5NsPJvXKaHP6nXp15Zdc2FjPihNxTYgUbPHal/R6C7VUAMauXrHT9+HN26dYWnp7tIMi1WrDiKFi2G0qVLieyY2nXSsXbtGgLlEZQsURJhAelIjm0pXC4MvqTYFqgRkynixy1bttAFvoJNoVqmyTHU3QrcQyEQP6RWgO2KUU+hvgr5hoaWvqeAg1PqW7TIIrAVIb2uJEwMnESSKSebhhPI/L1qiGSE0p9XRpEiRVC1WmVUqqgvW7+ZMvhaivSsIp+WREREOJ4+eaqJpqh1SFUTG57UTAxJJZhH3V11P4UGyr+9QbWfV35eC9IGIIVllD0Zr4Fv165dMDExIrosDj/PBBG54EQDtmI5nYqBlUJAY1HLyagxYQ1gUM0KlSrokaitIz7HqVdx4Y2IFcugRmJ1PHsqOarVoOPnio6pA5AFd9/x89HUK8n3xIup0E/4b2zQ9ul5Ul+fP+eafR6a2eaJVwwJTjwtU6Y09KtaEsAISPGt3pl0ytENjnxw5rORgTU8nCMQ7FcTxYuVRNmyZTBs2DBMmjwREydOEMkLnAd49epVTfREgzjdu+zU18ztIvV4+d4KQfhvayrglaCJHECPz+RZ1NpgpI7jKhN+5cpVYaUaG9jJlmwzLWv2zV1KOGXdj8HoYOMr9MTPSpZG+bJV6HlxoQN+8kkRTS9TtrQwWtLSUvHrr78IHVINPB077woydl/5PpndC/XCf0NTgc+a+va3AU8t7m7cuIGlS5cgJCQIZUtXESJXYbh3g0/b1yf5+9oQC4bDzNheAJLFtiS6WxBQmyIqpB78PBJgY+6F8mX0BSB5g5MHGTqDBw/C5ctXNNdacAMT8kUzt1nUP5fvuRCE/2RDfmJpPKR9toAOHU+ZzCdkECxYsADJyYkoV76scJEwU7G7RNnr8XfAp+4JHPOVQWhl7ip0QoVJOUIidEgS7YoOyeAM8asFY30HAcZSpT9HkyaNcOzYMY1o1sGGCrNvoIfy8r0XgvCfaCrma4Z8qzY/zKCaQAbe77//DhsbKwG6cmX04OMeTwBIIavWi8DQ6j3F7jtASEzHIHSw8YOjrT9qxrcWr+Xrjs001jJ/nq1n1iNT4r8gazuajJeywgJv3fpL5OVJnqICzK0BIaTNVIUg/CcaCuznLbilUs16K1asgIODnQCemZET4iIaiQhFemIHuDuFI8A7UWcSwX/alfivmYmjcNswIBOjs0QXhowqYbV6dL6+mSK2dLaBL4npTz8pJvTSVatW6QIhVCBcpxLHhYbJ/x9NJXbbvUnkcuOyGZmZTQXwDKpZy6GxtnLqfKbWrjZFRP53QNhMfF98RBMY6lkiwKc6okLrIZ6YkDOmxe8LEL4eN5bA20rsOzY1dBTXPmBAf819FSj7obD9n/J4fFoIwv/HDbp3s2lm5flziRgOHDgIKysL4dNjJzLrXMpWSu2Jl/bv8uaiIJ9ksmj/O0woheJaIdAnCRUqVoGTky+cnfzh4xUrjBFmwxrRujcyKUDka/bziBMgbJrZhACYnxChgwl/Uo9PYft/0JAf2eC8vYcFEjo1WSZsZBQvURR6VcyFbsXild0lbwILA5AdyWbGDpooxn9DFEtGSWs4WPuQOLWAs3MA7Ow8Ye/gDS+PSOHIfttGJr5m/n8GLN92WlqahgULOLaVLaUN5fEpBOF/uyE/W7ga5PR5XZUMJk+eLCbL3spHMIjCKO9iKy6pYWPpSUaJlFT6tn2+f79nQa+aGRlA7sSE/tT9BCO6ugYgIiRdiNuk\_Gm=1;2CzUiM53eKtBKKIrpLeyTzEjo54ifjUgpOfqaqxO8jgVGiX/zaZiv5kqvU+SQXJkYerUqQJ8bk6hBL52goHe22igSfbziCfL1U+A8b9pkDCguZ5MtWrGcHcPISB6wdTUCXr61qhS1Rz2toGIDGqAGlFZwkXD+4cTY/IXjiLOeTM831+7dm21Fl2BxbgZUkSoUB/8bzWV3tdEXvGvMd+K5SvE5Lg6hgi3xttErq7O+mFsWCNYmDoTAzUv4DbR7n+PHaXP107qKAyh0qXLw9HBCdUTYpDZpB6aZ9ZH3TopiAyPgJuzn9g34ukcj7jwTGGps69QKvHRVBgnHPbj+xw+fPhrIFQtyh7yeBUvBOH/salErz6t8qvyAL9UxBC348dPoHyFcrCx8JCYjybrP2Eq1v9sLN0RHZqB9MR2mjow7MvjRyk5obWUavXe39mCgN0E5sZuSEtNxoK543Ht4l48fXCeqJtu5/lVvHx6GfdvncTp45sxb/ZvaNemOXy9Auh+fIk5U4mdvxTxaV5UzM5erlEoUvRTsSdZ1v00RCg/chkuJW5cWBD9/9KQ73IZqV7liv7z+PETeHl7okpFY3lL5N93JitAqZvSCa4OoQQWD3g4xcLO0o9A4AVbKy/xaGflD3vrELKY676zFIfCqjGhjeDjGYgFc8YJsL14fAkP75zBnZzjuHXzGPWjot/JPYFHd8/i1VMC5YvruHFlP2ZMHY60Wsn0+x5wc4ghADanhdBKLA5jA3tYWVvi9u3bUI+HDELFKf+TAsBCnfA/aMhPnXeHnL2srHJl1Xfu0lmUPpOUeEXk/T3gsd4V7FubAOdPYtATdWun4MeBvTBn1hisXTUTmzfLine truncated
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 138 KiB |
@@ -1,80 +0,0 @@
|
||||
{
|
||||
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/master/doc/json_schema.json",
|
||||
"display": {
|
||||
"key": {
|
||||
"width": 10
|
||||
},
|
||||
"size": {
|
||||
"binaryPrefix": "jedec"
|
||||
},
|
||||
"separator": ""
|
||||
},
|
||||
"logo": {
|
||||
"type": "raw",
|
||||
"source": "~/.config/fastfetch/albedo-konsole.kitty",
|
||||
"width": 20,
|
||||
"height": 10
|
||||
},
|
||||
"modules": [
|
||||
"break",
|
||||
{
|
||||
"type": "os",
|
||||
"key": "os",
|
||||
"keyColor": "yellow",
|
||||
"format": "{name}"
|
||||
},
|
||||
{
|
||||
"type": "kernel",
|
||||
"key": "ker",
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "packages",
|
||||
"key": "pkgs",
|
||||
"keyColor": "cyan"
|
||||
},
|
||||
{
|
||||
"type": "shell",
|
||||
"key": "sh",
|
||||
"keyColor": "blue",
|
||||
"format": "{pretty-name}"
|
||||
},
|
||||
{
|
||||
"type": "wm",
|
||||
"key": "wm",
|
||||
"keyColor": "red",
|
||||
"format": "{pretty-name}"
|
||||
},
|
||||
{
|
||||
"type": "uptime",
|
||||
"key": "up",
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "cpu",
|
||||
"key": "cpu",
|
||||
"keyColor": "red",
|
||||
"format": "{name}"
|
||||
},
|
||||
{
|
||||
"type": "memory",
|
||||
"key": "ram",
|
||||
"keyColor": "yellow",
|
||||
"format": "{used} / {total}"
|
||||
},
|
||||
{
|
||||
"type": "disk",
|
||||
"key": "disk",
|
||||
"keyColor": "cyan",
|
||||
"folders": [
|
||||
"/"
|
||||
],
|
||||
"format": "{size-used} / {size-total}"
|
||||
},
|
||||
"break",
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[33m \u001b[32m \u001b[34m \u001b[31m \u001b[36m \u001b[35m \u001b[37m \u001b[97m"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
^/README.*
|
||||
^/build\.py
|
||||
__pycache__
|
||||
@@ -1,26 +0,0 @@
|
||||
# Fastfetch for Konsole
|
||||
|
||||
From the repository root:
|
||||
|
||||
```sh
|
||||
stow -d kde -t "$HOME" fastfetch
|
||||
```
|
||||
|
||||
The configuration, source PNG, and generated logo live in
|
||||
`kde/fastfetch/.config/fastfetch/`. The generated logo is included, so a new
|
||||
machine does not need to run the build script.
|
||||
|
||||
Choose either this package or `mac/fastfetch`; both own `~/.config/fastfetch/`.
|
||||
|
||||
Konsole needs inline image data instead of the original `kitty-direct` file
|
||||
transfer. The committed `albedo-konsole.kitty` logo is pre-scaled to 20 × 10
|
||||
cells to avoid grainy terminal scaling.
|
||||
|
||||
After changing `albedo.png`, the logo dimensions, or Konsole's font, update
|
||||
the cell size in `build.py` and regenerate the logo from the repository root:
|
||||
|
||||
```sh
|
||||
python3 kde/fastfetch/build.py
|
||||
```
|
||||
|
||||
The build script requires `vipsthumbnail` from libvips.
|
||||
@@ -1,57 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Encode albedo.png as kitty graphics escapes for fastfetch's "raw" logo.
|
||||
|
||||
fastfetch's "kitty-direct" logo sends the terminal a file path (t=f). Konsole
|
||||
only accepts inline data (t=d) and answers t=f with ENOTSUPPORTED, which lands
|
||||
on the prompt as typed input. These files carry the PNG inline instead, with
|
||||
q=2 so the terminal never answers at all.
|
||||
|
||||
.config/fastfetch/albedo-konsole.kitty pre-scaled for Konsole
|
||||
|
||||
Konsole stretches the image to the c x r cell box with nearest-neighbour
|
||||
scaling, at logical (not device) pixel size, so a 512px source turns grainy.
|
||||
The Konsole copy is resized with Lanczos to exactly that box, which leaves
|
||||
Konsole nothing to scale. Rerun after changing the image, the logo size or the
|
||||
Konsole font.
|
||||
"""
|
||||
|
||||
import base64
|
||||
import subprocess
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
PKG = Path(__file__).resolve().parent
|
||||
DIR = PKG / ".config/fastfetch"
|
||||
SOURCE = DIR / "albedo.png"
|
||||
# Logo size in cells; keep in sync with "width" and "height" in config.jsonc.
|
||||
COLS, ROWS = 20, 10
|
||||
# Konsole's cell size in logical pixels for JetBrainsMono Nerd Font 10pt
|
||||
# (QFontMetrics: average advance of Konsole's REPCHAR, and height()).
|
||||
KONSOLE_CELL = 8, 17
|
||||
|
||||
|
||||
def encode(png: bytes, dst: Path) -> None:
|
||||
data = base64.b64encode(png)
|
||||
chunks = [data[i : i + 4096] for i in range(0, len(data), 4096)]
|
||||
out = bytearray()
|
||||
for n, chunk in enumerate(chunks):
|
||||
more = int(n < len(chunks) - 1)
|
||||
if n == 0:
|
||||
keys = b"a=T,f=100,t=d,c=%d,r=%d,q=2,m=%d" % (COLS, ROWS, more)
|
||||
else:
|
||||
keys = b"m=%d" % more
|
||||
out += b"\x1b_G" + keys + b";" + chunk + b"\x1b\\"
|
||||
dst.write_bytes(out)
|
||||
|
||||
|
||||
def resize(width: int, height: int) -> bytes:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
out = Path(tmp) / "out.png"
|
||||
subprocess.run(
|
||||
["vipsthumbnail", SOURCE, "--size", f"{width}x{height}!", "-o", out],
|
||||
check=True,
|
||||
)
|
||||
return out.read_bytes()
|
||||
|
||||
|
||||
encode(resize(COLS * KONSOLE_CELL[0], ROWS * KONSOLE_CELL[1]), DIR / "albedo-konsole.kitty")
|
||||
Reference in new issue
Block a user