Monorepo for Tangled tangled.org

appview: inline all chroma styles into input.css

takes advantage of our existing cache-busting logic now

Changed files
+166 -68
appview
pages
templates
repo
cmd
syntax
-1
appview/pages/templates/repo/blob.html
··· 59 59 </p> 60 60 {{ else }} 61 61 <div class="overflow-auto relative"> 62 - <link rel="stylesheet" href="/static/syntax.css"> 63 62 {{ if .ShowRendered }} 64 63 <div id="blob-contents" class="prose dark:prose-invert">{{ .RenderedContents }}</div> 65 64 {{ else }}
-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
··· 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
··· 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 +