Da ich ja mit meinem eigenen Mastodon Server im Fediverse unterwegs bin und auch wann immer möglich alles anpassen/verändern will, habe ich natürlich auch hier versucht das Design anzupassen.
Eigentlich wollte ich gar nicht so viel anpassen, nur die Farben und die Schrift.

Basics

Als erstes habe ich einen Ordner für mein Theme in ~/live/app/javascript/styles erstellt.
In meinem Fall pmj

mkdir ~/live/app/javascript/styles/pmj

Danach habe ich eine pmj.scss auf Basis der application.scss erstellt

cp ~/live/app/javascript/styles/application.scss ~/live/app/javascript/styles/pmj.scss

In dieser habe ich nun die Zeile @import 'mastodon/variables'; zu @import 'pmj/variables'; geändert.
Zusätzlich habe ich noch die Zeile @import 'pmj/font'; nach der Zeile @import 'fonts/roboto-mono'; für mneine eigene Schriftartendefinition eingefügt.
Das ganze sieht dann wie folgt aus:

@import 'mastodon/mixins';
@import 'pmj/variables';
@import 'fonts/roboto';
@import 'fonts/roboto-mono';
@import 'pmj/font';

@import 'mastodon/reset';
@import 'mastodon/basics';
@import 'mastodon/branding';
@import 'mastodon/containers';
@import 'mastodon/lists';
@import 'mastodon/widgets';
@import 'mastodon/forms';
@import 'mastodon/accounts';
@import 'mastodon/statuses';
@import 'mastodon/boost';
@import 'mastodon/components';
@import 'mastodon/polls';
@import 'mastodon/modal';
@import 'mastodon/emoji_picker';
@import 'mastodon/about';
@import 'mastodon/tables';
@import 'mastodon/admin';
@import 'mastodon/dashboard';
@import 'mastodon/rtl';
@import 'mastodon/accessibility';
@import 'mastodon/rich_text';

Nun erstelle ich die pmj/variables.scss auf Basis der mastodon/variables.scss

cp ~/live/app/javascript/styles/mastodon/variables.scss ~/live/app/javascript/styles/pmj/variables.scss

In dieser kann ich nun die einzelnen scss-Variablen nach meinem Gusto anpassen.

Dies sind einfach die Basics, natürlich kann man auch alle anderen SCSS Dateien anpassen.

Fonts

Um eigene Schriftarten einzubinden musste ich erst ziemlich herum experimentieren.
Nach gefühlt 100 mal RAILS_ENV=production bundle exec rails assets:precompile bin ich dann auf folgende Lösung gekommen.

Die Schriftarten werden in ~/live/app/javascript/styles/pmj/fonts gespeichert und dann wie folgt in der pmj/fonts.scss deklariert (ich benutze die Schriftarten Aclonica und Adamina).

@font-face {
    font-family: 'Aclonica';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src:
        local('Aclonica Regular'),
        url('../styles/pmj/fonts/aclonica/aclonica.woff2') format('woff2'),
        url('../styles/pmj/fonts/aclonica/aclonica.woff') format('woff'),
        url('../styles/pmj/fonts/aclonica/aclonica.ttf') format('truetype'),
        url('../styles/pmj/fonts/aclonica/aclonica.svg#Aclonica') format('svg')
}
@font-face {
    font-family:'Adamina';
    font-style:normal;
    font-weight:400;
    font-display: swap;
    src:
        local('Adamina Regular'),
        url('../styles/pmj/fonts/adamina/adamina.woff2') format('woff2'),
        url('../styles/pmj/fonts/adamina/adamina.woff') format('woff'),
        url('../styles/pmj/fonts/adamina/adamina.ttf') format('truetype'),
        url('../styles/pmj/fonts/adamina/adamina.svg#Adamina') format('svg')
    
}

Deklaration

Nun muss ich mein Theme natürlich noch in Mastodon verfügbar machen.
Dazu muss ich einige Dateien anpassen

Die erste Datei die ich anpassen muss ist ~/live/config/themes.yml

Nach den Core-Definitionen von Mastodon selbst füge ich einfach mein Theme ein.
Das Ganze sieht dann so aus:

default: styles/application.scss
contrast: styles/contrast.scss
mastodon-light: styles/mastodon-light.scss
pmj: styles/pmj.scss

Damit das Ganze dann auch noch im Adminbereich auswählbar ist muss man auch noch die entsprechenden Sprachdateien anpassen.
Diese befinden sich im Ordner ~/live/config/locales/ in der Hauptdatei der entsprechenden Sprache z.b. en.yml, de.yml, etc.

Dann sucht man in der entsprechenden Datei nach themes und fügt das eigene Theme dort ein.
zum Beispiel en.yml

[..]
  themes:
    contrast: Mastodon (High contrast)
    default: Mastodon (Dark)
    mastodon-light: Mastodon (Light)
    pmj: PMJ
[..]

Achtung: die Einrückung beachten! Die ist sehr wichtig bei YAML Dateien.

Kompilieren

Nachdem ich das alles angepasst habe muss ich das ganze Kompilieren

cd ~/live
RAILS_ENV=production bundle exec rails assets:precompile

Das war's!
Anschliessend kann man das Theme im Adminbereich auswählen