-1
appview/pages/templates/repo/blob.html
-1
appview/pages/templates/repo/blob.html
-57
cmd/syntax/chroma.go
-57
cmd/syntax/chroma.go
···
1
-
package main
2
-
3
-
import (
4
-
"flag"
5
-
"fmt"
6
-
"os"
7
-
8
-
"github.com/alecthomas/chroma/v2/formatters/html"
9
-
"github.com/alecthomas/chroma/v2/styles"
10
-
)
11
-
12
-
var (
13
-
lightTheme = "catppuccin-latte"
14
-
darkTheme = "catppuccin-macchiato"
15
-
)
16
-
17
-
const (
18
-
targetHl = `
19
-
.chroma .line:has(.ln:target) {
20
-
background-color: rgba(140, 143, 161, 0.3);
21
-
}
22
-
23
-
@media (prefers-color-scheme: dark) {
24
-
.chroma .line:has(.ln:target) {
25
-
background-color: rgba(128, 135, 162, 0.3);
26
-
}
27
-
}
28
-
`
29
-
)
30
-
31
-
func main() {
32
-
outFile := flag.String("out", "", "css output file path")
33
-
flag.Parse()
34
-
35
-
if *outFile == "" {
36
-
fmt.Println("error: output file path is required")
37
-
flag.Usage()
38
-
os.Exit(1)
39
-
}
40
-
41
-
file, err := os.Create(*outFile)
42
-
if err != nil {
43
-
fmt.Printf("error creating file: %v\n", err)
44
-
os.Exit(1)
45
-
}
46
-
defer file.Close()
47
-
48
-
formatter := html.New(html.WithClasses(true))
49
-
50
-
formatter.WriteCSS(file, styles.Get(lightTheme))
51
-
52
-
file.WriteString("\n@media (prefers-color-scheme: dark) {\n")
53
-
formatter.WriteCSS(file, styles.Get(darkTheme))
54
-
file.WriteString("}\n")
55
-
56
-
file.WriteString(targetHl)
57
-
}
-10
flake.nix
-10
flake.nix
···
69
69
doCheck = false;
70
70
};
71
71
72
-
syntax-chroma = final.buildGoModule {
73
-
pname = "chroma";
74
-
version = "0.1.0";
75
-
src = gitignoreSource ./.;
76
-
subPackages = ["cmd/syntax/chroma.go"];
77
-
vendorHash = goModHash;
78
-
CGO_ENABLED = 1;
79
-
};
80
-
81
72
appview = with final;
82
73
final.pkgsStatic.buildGoModule {
83
74
pname = "appview";
···
91
82
cp -f ${inter-fonts-src}/web/InterVariable*.woff2 appview/pages/static/fonts/
92
83
cp -f ${inter-fonts-src}/web/InterDisplay*.woff2 appview/pages/static/fonts/
93
84
cp -f ${ibm-plex-mono-src}/fonts/complete/woff2/IBMPlexMono-Regular.woff2 appview/pages/static/fonts/
94
-
${pkgs.syntax-chroma}/bin/chroma -out appview/pages/static/syntax.css
95
85
${pkgs.tailwindcss}/bin/tailwindcss -i input.css -o appview/pages/static/tw.css
96
86
popd
97
87
'';
+166
input.css
+166
input.css
···
90
90
}
91
91
}
92
92
}
93
+
94
+
/* Background */ .bg { color: #4c4f69; background-color: #eff1f5; }
95
+
/* PreWrapper */ .chroma { color: #4c4f69; background-color: #eff1f5; }
96
+
/* Error */ .chroma .err { color: #d20f39 }
97
+
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
98
+
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
99
+
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
100
+
/* LineHighlight */ .chroma .hl { background-color: #bcc0cc }
101
+
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #8c8fa1 }
102
+
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #8c8fa1 }
103
+
/* Line */ .chroma .line { display: flex; }
104
+
/* Keyword */ .chroma .k { color: #8839ef }
105
+
/* KeywordConstant */ .chroma .kc { color: #fe640b }
106
+
/* KeywordDeclaration */ .chroma .kd { color: #d20f39 }
107
+
/* KeywordNamespace */ .chroma .kn { color: #179299 }
108
+
/* KeywordPseudo */ .chroma .kp { color: #8839ef }
109
+
/* KeywordReserved */ .chroma .kr { color: #8839ef }
110
+
/* KeywordType */ .chroma .kt { color: #d20f39 }
111
+
/* NameAttribute */ .chroma .na { color: #1e66f5 }
112
+
/* NameBuiltin */ .chroma .nb { color: #04a5e5 }
113
+
/* NameBuiltinPseudo */ .chroma .bp { color: #04a5e5 }
114
+
/* NameClass */ .chroma .nc { color: #df8e1d }
115
+
/* NameConstant */ .chroma .no { color: #df8e1d }
116
+
/* NameDecorator */ .chroma .nd { color: #1e66f5; font-weight: bold }
117
+
/* NameEntity */ .chroma .ni { color: #179299 }
118
+
/* NameException */ .chroma .ne { color: #fe640b }
119
+
/* NameFunction */ .chroma .nf { color: #1e66f5 }
120
+
/* NameFunctionMagic */ .chroma .fm { color: #1e66f5 }
121
+
/* NameLabel */ .chroma .nl { color: #04a5e5 }
122
+
/* NameNamespace */ .chroma .nn { color: #fe640b }
123
+
/* NameProperty */ .chroma .py { color: #fe640b }
124
+
/* NameTag */ .chroma .nt { color: #8839ef }
125
+
/* NameVariable */ .chroma .nv { color: #dc8a78 }
126
+
/* NameVariableClass */ .chroma .vc { color: #dc8a78 }
127
+
/* NameVariableGlobal */ .chroma .vg { color: #dc8a78 }
128
+
/* NameVariableInstance */ .chroma .vi { color: #dc8a78 }
129
+
/* NameVariableMagic */ .chroma .vm { color: #dc8a78 }
130
+
/* LiteralString */ .chroma .s { color: #40a02b }
131
+
/* LiteralStringAffix */ .chroma .sa { color: #d20f39 }
132
+
/* LiteralStringBacktick */ .chroma .sb { color: #40a02b }
133
+
/* LiteralStringChar */ .chroma .sc { color: #40a02b }
134
+
/* LiteralStringDelimiter */ .chroma .dl { color: #1e66f5 }
135
+
/* LiteralStringDoc */ .chroma .sd { color: #9ca0b0 }
136
+
/* LiteralStringDouble */ .chroma .s2 { color: #40a02b }
137
+
/* LiteralStringEscape */ .chroma .se { color: #1e66f5 }
138
+
/* LiteralStringHeredoc */ .chroma .sh { color: #9ca0b0 }
139
+
/* LiteralStringInterpol */ .chroma .si { color: #40a02b }
140
+
/* LiteralStringOther */ .chroma .sx { color: #40a02b }
141
+
/* LiteralStringRegex */ .chroma .sr { color: #179299 }
142
+
/* LiteralStringSingle */ .chroma .s1 { color: #40a02b }
143
+
/* LiteralStringSymbol */ .chroma .ss { color: #40a02b }
144
+
/* LiteralNumber */ .chroma .m { color: #fe640b }
145
+
/* LiteralNumberBin */ .chroma .mb { color: #fe640b }
146
+
/* LiteralNumberFloat */ .chroma .mf { color: #fe640b }
147
+
/* LiteralNumberHex */ .chroma .mh { color: #fe640b }
148
+
/* LiteralNumberInteger */ .chroma .mi { color: #fe640b }
149
+
/* LiteralNumberIntegerLong */ .chroma .il { color: #fe640b }
150
+
/* LiteralNumberOct */ .chroma .mo { color: #fe640b }
151
+
/* Operator */ .chroma .o { color: #04a5e5; font-weight: bold }
152
+
/* OperatorWord */ .chroma .ow { color: #04a5e5; font-weight: bold }
153
+
/* Comment */ .chroma .c { color: #9ca0b0; font-style: italic }
154
+
/* CommentHashbang */ .chroma .ch { color: #9ca0b0; font-style: italic }
155
+
/* CommentMultiline */ .chroma .cm { color: #9ca0b0; font-style: italic }
156
+
/* CommentSingle */ .chroma .c1 { color: #9ca0b0; font-style: italic }
157
+
/* CommentSpecial */ .chroma .cs { color: #9ca0b0; font-style: italic }
158
+
/* CommentPreproc */ .chroma .cp { color: #9ca0b0; font-style: italic }
159
+
/* CommentPreprocFile */ .chroma .cpf { color: #9ca0b0; font-weight: bold; font-style: italic }
160
+
/* GenericDeleted */ .chroma .gd { color: #d20f39; background-color: #ccd0da }
161
+
/* GenericEmph */ .chroma .ge { font-style: italic }
162
+
/* GenericError */ .chroma .gr { color: #d20f39 }
163
+
/* GenericHeading */ .chroma .gh { color: #fe640b; font-weight: bold }
164
+
/* GenericInserted */ .chroma .gi { color: #40a02b; background-color: #ccd0da }
165
+
/* GenericStrong */ .chroma .gs { font-weight: bold }
166
+
/* GenericSubheading */ .chroma .gu { color: #fe640b; font-weight: bold }
167
+
/* GenericTraceback */ .chroma .gt { color: #d20f39 }
168
+
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
169
+
170
+
@media (prefers-color-scheme: dark) {
171
+
/* Background */ .bg { color: #cad3f5; background-color: #24273a; }
172
+
/* PreWrapper */ .chroma { color: #cad3f5; background-color: #24273a; }
173
+
/* Error */ .chroma .err { color: #ed8796 }
174
+
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
175
+
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
176
+
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
177
+
/* LineHighlight */ .chroma .hl { background-color: #494d64 }
178
+
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #8087a2 }
179
+
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #8087a2 }
180
+
/* Line */ .chroma .line { display: flex; }
181
+
/* Keyword */ .chroma .k { color: #c6a0f6 }
182
+
/* KeywordConstant */ .chroma .kc { color: #f5a97f }
183
+
/* KeywordDeclaration */ .chroma .kd { color: #ed8796 }
184
+
/* KeywordNamespace */ .chroma .kn { color: #8bd5ca }
185
+
/* KeywordPseudo */ .chroma .kp { color: #c6a0f6 }
186
+
/* KeywordReserved */ .chroma .kr { color: #c6a0f6 }
187
+
/* KeywordType */ .chroma .kt { color: #ed8796 }
188
+
/* NameAttribute */ .chroma .na { color: #8aadf4 }
189
+
/* NameBuiltin */ .chroma .nb { color: #91d7e3 }
190
+
/* NameBuiltinPseudo */ .chroma .bp { color: #91d7e3 }
191
+
/* NameClass */ .chroma .nc { color: #eed49f }
192
+
/* NameConstant */ .chroma .no { color: #eed49f }
193
+
/* NameDecorator */ .chroma .nd { color: #8aadf4; font-weight: bold }
194
+
/* NameEntity */ .chroma .ni { color: #8bd5ca }
195
+
/* NameException */ .chroma .ne { color: #f5a97f }
196
+
/* NameFunction */ .chroma .nf { color: #8aadf4 }
197
+
/* NameFunctionMagic */ .chroma .fm { color: #8aadf4 }
198
+
/* NameLabel */ .chroma .nl { color: #91d7e3 }
199
+
/* NameNamespace */ .chroma .nn { color: #f5a97f }
200
+
/* NameProperty */ .chroma .py { color: #f5a97f }
201
+
/* NameTag */ .chroma .nt { color: #c6a0f6 }
202
+
/* NameVariable */ .chroma .nv { color: #f4dbd6 }
203
+
/* NameVariableClass */ .chroma .vc { color: #f4dbd6 }
204
+
/* NameVariableGlobal */ .chroma .vg { color: #f4dbd6 }
205
+
/* NameVariableInstance */ .chroma .vi { color: #f4dbd6 }
206
+
/* NameVariableMagic */ .chroma .vm { color: #f4dbd6 }
207
+
/* LiteralString */ .chroma .s { color: #a6da95 }
208
+
/* LiteralStringAffix */ .chroma .sa { color: #ed8796 }
209
+
/* LiteralStringBacktick */ .chroma .sb { color: #a6da95 }
210
+
/* LiteralStringChar */ .chroma .sc { color: #a6da95 }
211
+
/* LiteralStringDelimiter */ .chroma .dl { color: #8aadf4 }
212
+
/* LiteralStringDoc */ .chroma .sd { color: #6e738d }
213
+
/* LiteralStringDouble */ .chroma .s2 { color: #a6da95 }
214
+
/* LiteralStringEscape */ .chroma .se { color: #8aadf4 }
215
+
/* LiteralStringHeredoc */ .chroma .sh { color: #6e738d }
216
+
/* LiteralStringInterpol */ .chroma .si { color: #a6da95 }
217
+
/* LiteralStringOther */ .chroma .sx { color: #a6da95 }
218
+
/* LiteralStringRegex */ .chroma .sr { color: #8bd5ca }
219
+
/* LiteralStringSingle */ .chroma .s1 { color: #a6da95 }
220
+
/* LiteralStringSymbol */ .chroma .ss { color: #a6da95 }
221
+
/* LiteralNumber */ .chroma .m { color: #f5a97f }
222
+
/* LiteralNumberBin */ .chroma .mb { color: #f5a97f }
223
+
/* LiteralNumberFloat */ .chroma .mf { color: #f5a97f }
224
+
/* LiteralNumberHex */ .chroma .mh { color: #f5a97f }
225
+
/* LiteralNumberInteger */ .chroma .mi { color: #f5a97f }
226
+
/* LiteralNumberIntegerLong */ .chroma .il { color: #f5a97f }
227
+
/* LiteralNumberOct */ .chroma .mo { color: #f5a97f }
228
+
/* Operator */ .chroma .o { color: #91d7e3; font-weight: bold }
229
+
/* OperatorWord */ .chroma .ow { color: #91d7e3; font-weight: bold }
230
+
/* Comment */ .chroma .c { color: #6e738d; font-style: italic }
231
+
/* CommentHashbang */ .chroma .ch { color: #6e738d; font-style: italic }
232
+
/* CommentMultiline */ .chroma .cm { color: #6e738d; font-style: italic }
233
+
/* CommentSingle */ .chroma .c1 { color: #6e738d; font-style: italic }
234
+
/* CommentSpecial */ .chroma .cs { color: #6e738d; font-style: italic }
235
+
/* CommentPreproc */ .chroma .cp { color: #6e738d; font-style: italic }
236
+
/* CommentPreprocFile */ .chroma .cpf { color: #6e738d; font-weight: bold; font-style: italic }
237
+
/* GenericDeleted */ .chroma .gd { color: #ed8796; background-color: #363a4f }
238
+
/* GenericEmph */ .chroma .ge { font-style: italic }
239
+
/* GenericError */ .chroma .gr { color: #ed8796 }
240
+
/* GenericHeading */ .chroma .gh { color: #f5a97f; font-weight: bold }
241
+
/* GenericInserted */ .chroma .gi { color: #a6da95; background-color: #363a4f }
242
+
/* GenericStrong */ .chroma .gs { font-weight: bold }
243
+
/* GenericSubheading */ .chroma .gu { color: #f5a97f; font-weight: bold }
244
+
/* GenericTraceback */ .chroma .gt { color: #ed8796 }
245
+
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
246
+
}
247
+
248
+
.chroma .line:has(.ln:target) {
249
+
background-color: rgba(140, 143, 161, 0.2);
250
+
}
251
+
252
+
@media (prefers-color-scheme: dark) {
253
+
.chroma .line:has(.ln:target) {
254
+
background-color: rgba(128, 135, 162, 0.2);
255
+
}
256
+
}
257
+
258
+