Bifrost to paleta barw projektu Nine Realms: grimdarkowe zestawienie ze styku mitologii nordyckiej i Warhammera 40K, żelazna noc, święte złoto, ofiarna krew, szron i patyna. Ma dwa warianty: Void (ciemny) i Snow (jasny); przełącznik w prawym górnym rogu pokazuje oba. Nazwy tokenów opisują barwę i rolę (violet, teal-light, success), a nazwy mitologiczne są zarezerwowane dla modułów i motywów. Kolory na tej stronie są pokazane próbkami, bez wartości liczbowych.

Akcent interfejsu

Żaden pojedynczy kolor nie czyta się dobrze jednocześnie na Void i Snow, więc akcent interfejsu ma osobny ton w każdym wariancie: jaśniejszy fiolet na Void, ciemniejszy na Snow. Fiolet zamiast błękitu wybrano świadomie: większość interfejsów prowadzi błękit, a fiolet od razu odróżnia projekt i nie koliduje z kolorowaniem kodu.

Przyciski, fokus, kursorTekst na wypełnieniu akcentu jest zawsze czytelny w obu wariantach.
PodświetleniaPółprzezroczyste tło pod aktywną zakładką, plakietką albo wierszem.

Dziesięć akcentów

Barwy bazowe palety. Wartość akcentu to ciemniejszy ton jego rampy (dla pink jaśniejszy). Każdy ma przypisaną rolę w interfejsie albo w kolorowaniu kodu.

violetWiodący akcent interfejsu: przyciski, fokus, kursor, plakietki, aktywne karty. Odpowiednik systemowego błękitu w Windows i macOS. Nie koloruje kodu.
goldRzadki, szczególny akcent: deklaracje klas i nagłówki. Nie jest domyślnym kolorem interfejsu.
redZmienne, tagi, stałe nazwane (SCREAMING_SNAKE_CASE).
steelFunkcje i metody, linki, informacje.
purpleSłowa kluczowe, storage, sterowanie przepływem.
pinkLiczby, stałe znakowe.
tealTypy i referencje, klasy bazowe, przestrzenie nazw.
indigoFunkcje wbudowane i globalne, self, cls, super.
oliveStałe językowe (True, False, None) i stałe nazwane.
slateWyblakłe i nieaktywne: deprecated, ghost text, code lens.

Rampy tonalne

Siedemnaście barw po cztery tony: lightest, light, dark, darkest. Dwa środkowe to zwykłe wartości ciemnego motywu, ton najjaśniejszy służy stanom hover i podświetleniom, a najciemniejszy daje czytelny wariant tego samego akcentu na jasnym tle.

red · czerwieńJaśniejszy ton to funkcjonalny kolor błędu na Void.
orange · pomarańcz, miedźCiemniejszy ton to funkcjonalny kolor ostrzeżenia.
gold · złotoJaśniejszy ton to złoto plakietek i nagłówków.
olive · oliwkowa zieleńStałe i niezmienność.
green · zieleń, patynaCiemniejszy ton to funkcjonalny kolor sukcesu.
teal · morskiTypy, klasy bazowe, przestrzenie nazw.
jade · jasny morskiParametry typów, elementy enum, generyki.
cyan · szaroniebieskiRegex, znaki ucieczki, operatory logiczne.
steel · stalowy błękitCiemniejszy ton to funkcjonalny kolor informacji.
blue · głęboki błękitGłębokie niebieskie wypełnienia; dobrany tak, by odróżniał się od violet i indigo także przy zaburzeniach widzenia barw.
indigo · indygoself, cls, funkcje wbudowane.
violet · fiolet wiodącyWiodący akcent interfejsu.
purple · fioletSłowa kluczowe.
magenta · fiolet-różDekoratory, makra, wiązania zdarzeń.
pink · różBazą jest ton jasny; ciemne tony służą jasnemu motywowi.
slate · łupekWyblakłe i nieaktywne elementy.
indigo-muted · przygaszone indygoPrzygaszone niebieskie wypełnienia.

Stany funkcjonalne

Sukces, ostrzeżenie, błąd i informacja, każdy wzięty z jednej z ramp i z osobną wartością dla Void i Snow.

Sukces · successZ rampy green. Stonowana, brązowawa zieleń, spójna z resztą ciemnego interfejsu.
Ostrzeżenie · warningZ rampy orange. Przyziemna miedź zamiast krzykliwego bursztynu.
Błąd · errorZ rampy red. Żywa, dobrze widoczna czerwień alarmowa: bezpieczniejszy wybór pod kątem dostępności.
Informacja · infoZ rampy steel. Funkcje, linki, tekst informacyjny.

Violet: dwanaście odcieni

Rozwinięcie fioletu do ogólnego użytku: włosy i stroje postaci, kolor czcionki, barwy drużyn, ikony i efekty. Cztery wykończenia, od matu przez satynę i połysk po metal, po trzy tony w każdym. Każdy odcień ma bazę oraz ton światła i cienia, więc od razu nadaje się do cieniowania; próbki pokazują gradient wykończenia. Drużyny przeciwne rozróżniaj przede wszystkim jasnością, bo wszystkie odcienie mają ten sam fioletowy ton.

Mat · Rozproszone światło bez blików: pastele, popiół, wełna, skóra.

violet-mat-lightPopielate, pastelowe włosy. Tło kart i dymków, tekst na Void.
violet-mat-midPrzygaszone włosy i tkaniny, drugorzędny tekst na Void.
violet-mat-darkTekst na Snow bez twardej czerni. Wełna, skóra, matowe stroje.

Satyna · Szeroki, miękki połysk jak na jedwabiu, piórach i zadbanych włosach.

violet-satin-lightLawendowe włosy, jedwab i pióra. Jasna barwa drużyny, tekst na Void.
violet-satin-midSzaty i sztandary, barwa drużyny. Tekst i linki na Snow.
violet-satin-darkCiemne, satynowe włosy i płaszcze. Tekst na Snow.

Połysk · Nasycony kolor pod wąskim, niemal białym blikiem: szkło, lakier, mokre włosy, klejnoty.

violet-gloss-lightŻywe, fantastyczne włosy, szkło, kryształy i efekty magii. Tekst na Void.
violet-gloss-midKlejnoty, lakier, mocno nasycona barwa drużyny. Tekst na Snow.
violet-gloss-darkKruczoczarne włosy z fioletowym połyskiem. Tekst na Snow.

Metal · Blik barwiony kolorem samego metalu i ostre pasma odbić.

violet-metal-lightSrebrno-liliowe włosy, zbroje, obramowania i ramki. Tekst na Void.
violet-metal-midAnodowana stal: broń, okucia, ramki interfejsu, tytuły. Tekst na Void.
violet-metal-darkHartowana stal z nalotem: ostrza, rury wydechowe, opalizujące włosy. Tekst na Snow.

Fimbulvetr, „zima przed zmierzchem bogów”, to motyw dla VS Code i Zed zbudowany z palety Bifrost: żelazna noc, święte złoto, ofiarna krew, szron i patyna. Interfejs prowadzi fiolet, kod dostaje piętnaście akcentów edytora, a każdy kolor tekstu w kodzie ma kontrast co najmniej 4,5:1 wobec tła edytora. Dwa warianty: Void (ciemny) i Snow (jasny). Przełącznik w prawym górnym rogu przełącza także podgląd kodu na tej stronie.

Fimbulvetr Void · ciemnyTło edytora i akcent interfejsu.
Fimbulvetr Snow · jasnyTło edytora i akcent interfejsu.

Kolorowanie składni

Każda rola ma osobną wartość dla Void i Snow, bo kod na niemal czarnym tle potrzebuje jaśniejszych i bardziej nasyconych barw niż na jasnym. Lewa połowa próbki to Void, prawa to Snow. Styl pisma (kursywa, pogrubienie) jest częścią motywu.

Słowa kluczowe · purpleSterowanie przepływem, storage i modyfikatory, selektory CSS, nawiasy interpolacji w łańcuchach.
Funkcje i metody · steelWywołania zwykłe, deklaracje pogrubione. Także słowa kluczowe importu i linki.
Funkcje wbudowane · indigoBiblioteka standardowa, self, cls i this (kursywą), zmienne i wbudowane powłoki.
Deklaracje klas · goldRzadki, szczególny akcent, zawsze pogrubiony: klasy, interfejsy, komponenty, nagłówki Markdown, sekcje TOML i INI.
Typy · tealKursywą: typy i referencje, klasy bazowe, przestrzenie nazw i pakiety, kotwice YAML, kolory w CSS.
Parametry typów · jadeGeneryki i ich nawiasy, elementy enum.
Zmienne · redZmienne i właściwości, tagi HTML, klucze YAML, TOML i JSON, aliasy YAML.
Parametry · orangeKursywą: parametry funkcji, atrybuty HTML, czasy życia i atrybuty w Rust, kod w linii w Markdown.
Łańcuchy znaków · greenŁańcuchy, szablony i wartości YAML; docstringi kursywą.
Liczby · pinkLiczby, stałe znakowe, jednostki CSS, symbole formatu w łańcuchach.
Stałe językowe · olivetrue, false, nil i None, stałe nazwane SCREAMING_SNAKE_CASE, zmienne tylko do odczytu.
Regex i logika · cyanWyrażenia regularne, znaki ucieczki, operatory logiczne i porównania, stałe JSON, nazwy właściwości CSS.
Dekoratory · magentaKursywą: dekoratory, adnotacje, makra, wiązania zdarzeń.
Komentarze · commentKursywą. Ten sam ton mają numery linii.
Interpunkcja · text-secondaryOperatory, nawiasy poza parami, przecinki, średniki, znaczniki Markdown.
Wyblakłe · slateDeprecated i przekreślenia, ghost text, etykiety. Jedyny kolor poniżej progu kontrastu, celowo.

Interfejs edytora

Kolory okna poza kodem. Każda para próbek to Void i Snow.

Tło edytoraTło edytora i terminala, panel dolny, pola tekstowe i lista poleceń.
Panele i kartyPasek boczny, pasek aktywności, nieaktywne karty, belka tytułu, pasek stanu, podpowiedzi. Ten sam ton podświetla bieżącą linię.
HoverNajechanie na kartę albo element paska stanu, prowadnice wcięć.
ObramowaniaLinie między obszarami okna i obwódki widżetów.
Tekst podstawowyKod bez tokenu, aktywna karta, tekst w terminalu.
Tekst drugorzędnyNieaktywne karty, ścieżka nad edytorem, pasek stanu.
AkcentKursor, fokus, krawędź aktywnej karty, przyciski, plakietki, numer bieżącej linii, dopasowany nawias.
ZaznaczenieAkcent z kryciem 25% na Void i 30% na Snow, pokazany tak, jak wygląda na tle edytora.
WyszukiwanieTrafienia w miedzi z kryciem 33%, bieżące trafienie z fioletową obwódką.
GitDodane w zieleni, zmienione w miedzi, usunięte w czerwieni, nieśledzone w morskim.
DiagnostykaBłąd, ostrzeżenie i informacja: falki pod kodem, ikony w pasku stanu, panel problemów.
NawiasySześć poziomów par nawiasów: morski, fiolet, złoto, czerwień, stal, oliwka.
Terminal: szesnaście kolorów ANSI

Zwykłe kolory to akcenty edytora, jasne to ich żywsze odpowiedniki z ramp: żółty jest miedzią, a jasny żółty złotem. Paleta podąża za motywem strony.

Podgląd kodu

Te same role w siedmiu gramatykach, w bieżącym motywie strony.

1package bifrost
2
3import "fmt"
4
5// Guardian strzeże mostu między światami.
6type Guardian struct {
7    Name  string
8    awake bool
9}
10const MaxRealms = 9
11
12func (g *Guardian) Watch(realms []Realm) error {
13    for _, r := range realms {
14        if !r.Reachable() {
15            return fmt.Errorf("realm %q is dark", r.Name)
16        }
17    }
18    g.awake = true
19    return nil
20}
1#[derive(Debug, Clone)]
2pub struct Realm<'a> {
3    name: &'a str,
4    frost: f32,
5}
6
7impl<'a> Realm<'a> {
8    /// Trzy zimy bez lata.
9    pub fn freeze(&mut self, winters: u8) -> Result<(), String> {
10        if winters < 3 {
11            return Err(format!("{} needs 3 winters", self.name));
12        }
13        self.frost = winters as f32 * 0.5;
14        println!("{:?}", self);
15        Ok(())
16    }
17}
1from dataclasses import dataclass, field
2import re
3
4RUNE = re.compile(r"[ᚠ-᛿]+")
5
6@dataclass(frozen=True)
7class Edda(Saga):
8    """Zbiór pieśni o końcu świata."""
9
10    title: str
11    verses: list[str] = field(default_factory=list)
12
13    def runes(self, text: str) -> int:
14        """Policz runy w tekście."""
15        count = len(RUNE.findall(text))
16        if count == 0 and self.verses is not None:
17            print(f"{self.title}: brak run")
18        return count
1-- Światy osiągalne przed długą zimą
2WITH frozen AS (
3    SELECT realm_id, MAX(frost) AS frost
4    FROM weather
5    WHERE recorded_at >= DATE '2026-10-01'
6    GROUP BY realm_id
7)
8SELECT r.name, f.frost,
9    CASE WHEN f.frost > 0.5 THEN 'zima' ELSE 'odwilż' END AS season
10FROM realms r
11JOIN frozen f ON f.realm_id = r.id
12WHERE r.reachable IS TRUE
13ORDER BY f.frost DESC
14LIMIT 9;
1# Fimbulvetr
2
3Trzy zimy bez lata, **zanim** nadejdzie *Ragnarök*.
4
5## Instalacja
6
71. Pobierz `fimbulvetr_theme_1.0.1.vsix`
82. Uruchom `code --install-extension`
9
10> Zima nadchodzi z północy.
11
12- [Bifrost](https://codeheim.dev/#bifrost)
13- ~~Draupnir~~ Fimbulvetr
14
15| Wariant | Tło    |
16|---------|--------|
17| Void    | ciemne |
1# Fimbulvetr: zima przed zmierzchem bogów
2name: fimbulvetr
3version: "1.0.1"
4winters: 3
5summer: false
6realms:
7  - name: Midgard
8    frost: 0.8
9    reachable: true
10  - name: Niflheim
11    frost: 1.0
12    reachable: ~
13defaults: &defaults
14  retries: 3
15jotunheim:
16  <<: *defaults
17  message: "Śnieg \"z północy\""
1#!/usr/bin/env bash
2set -euo pipefail
3
4THEME_DIR="${HOME}/.vscode/extensions"
5VERSION="1.0.1"
6
7install_theme() {
8  local vsix="fimbulvetr_theme_${VERSION}.vsix"
9  if [[ ! -f "$vsix" ]]; then
10    echo "brak pliku: $vsix" >&2
11    return 1
12  fi
13  code --install-extension "$vsix"
14  echo "zainstalowano $(basename "$vsix")"
15}
16
17for realm in midgard asgard; do
18  install_theme || exit $?
19done

Gleipnir to lina, którymi bogowie związali wilka Fenrira: cienkie jak jedwabna wstęga, a mocniejsze od każdego łańcucha. Tutaj to motyw znaku zachęty dla oh-my-posh, zbudowany z palety Bifrost: jedna linia, która wiąże powłokę z katalogiem, repozytorium i narzędziami projektu. Segmenty mają kształt zaokrąglonych diamentów, każdy z własną parą tła i tekstu oraz ikoną w żywszym tonie tej samej rampy. Dwa warianty, Void (ciemny) i Snow (jasny), wybiera zmienna środowiskowa NINE_REALMS; przełącznik w prawym górnym rogu przełącza także podgląd na tej stronie.

Gleipnir Void · ciemnyTło segmentu ścieżki i akcent znaku zachęty. Paleta domyślna, gdy zmienna nie jest ustawiona.
Gleipnir Snow · jasnyTe same role w odwróconych tonach: jasne tło segmentu, ciemny tekst, akcent z ciemniejszego końca rampy.

Segmenty

Lewa strona linii idzie od uprawnień przez katalog do stanu repozytorium; prawa, dosunięta do krawędzi, pokazuje kontekst narzędzi i znika na wąskich oknach. Każdy segment ma trójkę barw: tło, tekst i ikonę. Lewa połowa próbki to Void, prawa to Snow; pokazane jest tło segmentu.

Root · goldTylko w sesji z podniesionymi uprawnieniami: „root” na Linuksie i macOS, „admin” w Windows. Złoto jest zarezerwowane dla tego stanu, więc od razu rzuca się w oczy.
Ścieżka · violetStyl agnoster z katalogiem repozytorium pogrubionym. Ikona zależy od miejsca: dom, repozytorium, katalog projektów, dokumenty, pobrane, pulpit, kłódka, gdy brak prawa zapisu. Rozumie polskie i angielskie nazwy katalogów oraz OneDrive.
Git: czyste · greenGałąź zgodna ze zdalną. Nazwa gałęzi jest skracana do 20, 24 albo 40 znaków zależnie od szerokości okna.
Git: zmiany · orangeMiedź, gdy coś czeka w katalogu roboczym albo w poczekalni. Liczniki zmian i schowka dochodzą za separatorem.
Git: do wysłania · steelStal, gdy gałąź jest przed zdalną albo za nią, ale nie jedno i drugie. Strzałki pokazują liczbę commitów.
Git: rozjazd · redCzerwień, gdy lokalna i zdalna gałąź rozeszły się w obie strony. Ten sam ton ma segment statusu.
Czas wykonania · tealPojawia się po poleceniu dłuższym niż dwie sekundy, w formacie austin (3.4s, 1m 12s).
Status · redTylko po błędzie: kod wyjścia i jego nazwa, gdy jest znana. Sukces nie zajmuje miejsca.
Kontekst · surfacePrawa strona linii: wyciszone segmenty na powierzchni paneli, od siebie różnią się tylko ikoną. Widoczne od 100 kolumn.
Ikony kontekstuPython (błękit, z wersją i nazwą środowiska), Go (jadeit), Rust (miedź), Docker (szaroniebieski, z kontekstem innym niż domyślny), projekt (fiolet, z nazwą i wersją z pliku manifestu).
Znak zachętyPojedynczy szewron w drugiej linii: fiolet na co dzień, czerwień po błędzie, złoto w sesji root.
Tło i historiaWypełniacz między lewą a prawą stroną w najcichszym tonie. Wykonane polecenia zwijają się do nazwy katalogu i szewronu (transient prompt), więc historia nie zaśmieca okna.

Ścieżki

Segment ścieżki rozpoznaje, gdzie jesteś, i zmienia ikonę. Rozumie polskie i angielskie nazwy katalogów użytkownika, także pod OneDrive, i rozróżnia wielkość liter dopiero po ich zrównaniu. Gdy pasuje kilka reguł, wygrywa pierwsza z poniższej kolejności: kłódka przed domem, dom przed repozytorium, repozytorium przed wszystkim innym.

/usrlibBez prawa zapisuKłódka ma pierwszeństwo przed każdą inną ikoną: ostrzega, zanim polecenie zawiedzie.
~DomSam katalog domowy, zapisany tyldą.
~RepositoriescodeheimRepozytoriumWewnątrz repozytorium git, w dowolnym miejscu dysku. Katalog główny repozytorium jest pogrubiony.
…codeheimsrcassetsprojectsSkróconaPonad limit szerokości (32, 40 albo 60 znaków zależnie od GLEIPNIR_COLS) początek zwija się do wielokropka; koniec ścieżki zostaje.
~RepozytoriaKatalog repozytoriówrepos, repositories, repozytoria, src, dev, code, developer: miejsce na kod, ale jeszcze nie w repozytorium.
~ProjektyNine RealmsProjektyprojects, projekty.
~OneDriveDokumentyDokumentydocuments, dokumenty; także wewnątrz katalogu OneDrive, jak tu.
~PobranePobranedownloads, pobrane.
~PulpitPulpitdesktop, pulpit.
~MuzykaWardrunaMuzykamusic, muzyka.
~Obrazy2026Obrazypictures, obrazy.
~WideoWideovideos, movies, wideo.
~binSkryptyscripts, skrypty, bin.
~.configgleipnirKonfiguracja.config na Linuksie, AppData w Windows, Library na macOS.
C:WindowsSystem32Poza domemKażda ścieżka, która nie zaczyna się od tyldy: dysk systemowy, inne woluminy, katalogi innych użytkowników.
~GryValheimInny katalogZwykły folder, gdy żadna reguła nie pasuje.
~Projekty 2Stos katalogówPo pushd na końcu segmentu pojawia się liczba odłożonych katalogów.

Podgląd znaku zachęty

Sześć stanów tej samej sesji w bieżącym motywie strony. Pierwsza linia każdego panelu to zwinięty poprzedni znak zachęty, poniżej wynik polecenia i pełny znak zachęty dla nowego stanu. Ikony są przybliżeniem glifów Nerd Font.

Drobiazgi

Zwinięty znak zachęty zostawia tylko nazwę katalogu i szewron, czerwony po błędzie, z „^C” po przerwaniu. Druga linia wielowierszowego polecenia dostaje trzy kropki w najcichszym tonie, a błędy składni powłoki wypisuje linia błędu w czerwieni. Tytuł okna terminala to nazwa katalogu i gałąź w nawiasie.