diff --git a/hosts/Emitter.nix b/hosts/Emitter.nix new file mode 100644 index 0000000..65336ee --- /dev/null +++ b/hosts/Emitter.nix @@ -0,0 +1,40 @@ +{ config, pkgs, ... }: +{ + imports = [ + ./gitea.nix + ]; + + boot.loader.grub.enable = true; + boot.loader.grub.version = 2; + boot.loader.grub.device = "/dev/vda"; + + networking.hostName = "Emitter"; + + networking.useDHCP = false; + networking.interfaces.ens3.useDHCP = true; + + i18n.defaultLocale = "de_DE.UTF-8"; + console.keyMap = "de"; + + services.openssh.ports = [ 8248 ]; + networking.firewall.allowedTCPPorts = [ 8248 ]; + + nix.settings.trusted-users = [ "fruchti" ]; + security.sudo.wheelNeedsPassword = false; + + security.acme = { + defaults = { + email = config.email.adminEmail; + }; + acceptTerms = true; + }; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It’s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "21.11"; # Did you read the comment? +} + diff --git a/hosts/gitea-custom/public/css/fonts.css b/hosts/gitea-custom/public/css/fonts.css new file mode 100644 index 0000000..7102a47 --- /dev/null +++ b/hosts/gitea-custom/public/css/fonts.css @@ -0,0 +1,121 @@ +/* vollkorn-regular - latin-ext_latin_greek_cyrillic */ +@font-face { + font-family: 'Vollkorn'; + font-style: normal; + font-weight: 400; + src: url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.eot'); /* IE9 Compat Modes */ + src: local(''), + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.woff') format('woff'), /* Modern Browsers */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.svg#Vollkorn') format('svg'); /* Legacy iOS */ +} + +/* vollkorn-700 - latin-ext_latin_greek_cyrillic */ +@font-face { + font-family: 'Vollkorn'; + font-style: normal; + font-weight: 700; + src: url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.eot'); /* IE9 Compat Modes */ + src: local(''), + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.woff') format('woff'), /* Modern Browsers */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.svg#Vollkorn') format('svg'); /* Legacy iOS */ +} + +/* vollkorn-italic - latin-ext_latin_greek_cyrillic */ +@font-face { + font-family: 'Vollkorn'; + font-style: italic; + font-weight: 400; + src: url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.eot'); /* IE9 Compat Modes */ + src: local(''), + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.woff') format('woff'), /* Modern Browsers */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.svg#Vollkorn') format('svg'); /* Legacy iOS */ +} + +/* vollkorn-700italic - latin-ext_latin_greek_cyrillic */ +@font-face { + font-family: 'Vollkorn'; + font-style: italic; + font-weight: 700; + src: url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.eot'); /* IE9 Compat Modes */ + src: local(''), + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.woff') format('woff'), /* Modern Browsers */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.svg#Vollkorn') format('svg'); /* Legacy iOS */ +} + + +/* fira-code-regular - latin-ext_latin_greek_cyrillic */ +@font-face { + font-family: 'Fira Code'; + font-style: normal; + font-weight: 400; + src: url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.eot'); /* IE9 Compat Modes */ + src: local(''), + url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.woff') format('woff'), /* Modern Browsers */ + url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.svg#FiraCode') format('svg'); /* Legacy iOS */ +} + +/* fira-code-700 - latin-ext_latin_greek_cyrillic */ +@font-face { + font-family: 'Fira Code'; + font-style: normal; + font-weight: 700; + src: url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.eot'); /* IE9 Compat Modes */ + src: local(''), + url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.woff') format('woff'), /* Modern Browsers */ + url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.svg#FiraCode') format('svg'); /* Legacy iOS */ +} + +/* hammersmith-one-regular - latin */ +@font-face { + font-family: 'Hammersmith One'; + font-style: normal; + font-weight: 400; + src: url('../fonts/hammersmith-one-v17-latin-regular.eot'); /* IE9 Compat Modes */ + src: local(''), + url('../fonts/hammersmith-one-v17-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/hammersmith-one-v17-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/hammersmith-one-v17-latin-regular.woff') format('woff'), /* Modern Browsers */ + url('../fonts/hammersmith-one-v17-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/hammersmith-one-v17-latin-regular.svg#HammersmithOne') format('svg'); /* Legacy iOS */ +} + +:root { + --fonts-proportional: 'Vollkorn'; + --fonts-monospace: 'Fira Code'; +} + +body { + font-feature-settings: "liga", "calt", "onum"; + text-rendering: optimizeLegibility; +} + +h1, h2, h3, h4 { + font-family: 'Hammersmith One', sans-serif; + font-weight: 400; +} + +.markup h1, .markup h2 { + padding-bottom: 0.1em; +} + +a:hover { + text-underline-offset: 0.3ex; +} diff --git a/hosts/gitea-custom/public/css/jupyter.css b/hosts/gitea-custom/public/css/jupyter.css new file mode 100644 index 0000000..645eba6 --- /dev/null +++ b/hosts/gitea-custom/public/css/jupyter.css @@ -0,0 +1,1030 @@ +/* Manually compiled from the output styles of jupyter-nbconvert based on what seemed relevant, prefixing .markup.jupyter. Might not be complete, e.g. some things could be rendered incorrectly. */ + +.markup.jupyter pre { + line-height: 125%; +} +.markup.jupyter td.linenos .normal { + color: inherit; + background-color: transparent; + padding-left: 5px; + padding-right: 5px; +} +.markup.jupyter span.linenos { + color: inherit; + background-color: transparent; + padding-left: 5px; + padding-right: 5px; +} +.markup.jupyter td.linenos .special { + color: #000000; + background-color: #ffffc0; + padding-left: 5px; + padding-right: 5px; +} +.markup.jupyter span.linenos.special { + color: #000000; + background-color: #ffffc0; + padding-left: 5px; + padding-right: 5px; +} +.markup.jupyter .highlight .hll { + background-color: #ffffcc; +} +.markup.jupyter .highlight { + background: #f8f8f8; +} +.markup.jupyter .highlight .c { + color: #3D7B7B; + font-style: italic; +} +.markup.jupyter .highlight .err { + border: 1px solid #FF0000; +} +.markup.jupyter .highlight .k { + color: #008000; + font-weight: bold; +} +.markup.jupyter .highlight .o { + color: #666666; +} +.markup.jupyter .highlight .ch { + color: #3D7B7B; + font-style: italic; +} +.markup.jupyter .highlight .cm { + color: #3D7B7B; + font-style: italic; +} +.markup.jupyter .highlight .cp { + color: #9C6500; +} +.markup.jupyter .highlight .cpf { + color: #3D7B7B; + font-style: italic; +} +.markup.jupyter .highlight .c1 { + color: #3D7B7B; + font-style: italic; +} +.markup.jupyter .highlight .cs { + color: #3D7B7B; + font-style: italic; +} +.markup.jupyter .highlight .gd { + color: #A00000; +} +.markup.jupyter .highlight .ge { + font-style: italic; +} +.markup.jupyter .highlight .gr { + color: #E40000; +} +.markup.jupyter .highlight .gh { + color: #000080; + font-weight: bold; +} +.markup.jupyter .highlight .gi { + color: #008400; +} +.markup.jupyter .highlight .go { + color: #717171; +} +.markup.jupyter .highlight .gp { + color: #000080; + font-weight: bold; +} +.markup.jupyter .highlight .gs { + font-weight: bold; +} +.markup.jupyter .highlight .gu { + color: #800080; + font-weight: bold; +} +.markup.jupyter .highlight .gt { + color: #0044DD; +} +.markup.jupyter .highlight .kc { + color: #008000; + font-weight: bold; +} +.markup.jupyter .highlight .kd { + color: #008000; + font-weight: bold; +} +.markup.jupyter .highlight .kn { + color: #008000; + font-weight: bold; +} +.markup.jupyter .highlight .kp { + color: #008000; +} +.markup.jupyter .highlight .kr { + color: #008000; + font-weight: bold; +} +.markup.jupyter .highlight .kt { + color: #B00040; +} +.markup.jupyter .highlight .m { + color: #666666; +} +.markup.jupyter .highlight .s { + color: #BA2121; +} +.markup.jupyter .highlight .na { + color: #687822; +} +.markup.jupyter .highlight .nb { + color: #008000; +} +.markup.jupyter .highlight .nc { + color: #0000FF; + font-weight: bold; +} +.markup.jupyter .highlight .no { + color: #880000; +} +.markup.jupyter .highlight .nd { + color: #AA22FF; +} +.markup.jupyter .highlight .ni { + color: #717171; + font-weight: bold; +} +.markup.jupyter .highlight .ne { + color: #CB3F38; + font-weight: bold; +} +.markup.jupyter .highlight .nf { + color: #0000FF; +} +.markup.jupyter .highlight .nl { + color: #767600; +} +.markup.jupyter .highlight .nn { + color: #0000FF; + font-weight: bold; +} +.markup.jupyter .highlight .nt { + color: #008000; + font-weight: bold; +} +.markup.jupyter .highlight .nv { + color: #19177C; +} +.markup.jupyter .highlight .ow { + color: #AA22FF; + font-weight: bold; +} +.markup.jupyter .highlight .w { + color: #bbbbbb; +} +.markup.jupyter .highlight .mb { + color: #666666; +} +.markup.jupyter .highlight .mf { + color: #666666; +} +.markup.jupyter .highlight .mh { + color: #666666; +} +.markup.jupyter .highlight .mi { + color: #666666; +} +.markup.jupyter .highlight .mo { + color: #666666; +} +.markup.jupyter .highlight .sa { + color: #BA2121; +} +.markup.jupyter .highlight .sb { + color: #BA2121; +} +.markup.jupyter .highlight .sc { + color: #BA2121; +} +.markup.jupyter .highlight .dl { + color: #BA2121; +} +.markup.jupyter .highlight .sd { + color: #BA2121; + font-style: italic; +} +.markup.jupyter .highlight .s2 { + color: #BA2121; +} +.markup.jupyter .highlight .se { + color: #AA5D1F; + font-weight: bold; +} +.markup.jupyter .highlight .sh { + color: #BA2121; +} +.markup.jupyter .highlight .si { + color: #A45A77; + font-weight: bold; +} +.markup.jupyter .highlight .sx { + color: #008000; +} +.markup.jupyter .highlight .sr { + color: #A45A77; +} +.markup.jupyter .highlight .s1 { + color: #BA2121; +} +.markup.jupyter .highlight .ss { + color: #19177C; +} +.markup.jupyter .highlight .bp { + color: #008000; +} +.markup.jupyter .highlight .fm { + color: #0000FF; +} +.markup.jupyter .highlight .vc { + color: #19177C; +} +.markup.jupyter .highlight .vg { + color: #19177C; +} +.markup.jupyter .highlight .vi { + color: #19177C; +} +.markup.jupyter .highlight .vm { + color: #19177C; +} +.markup.jupyter .highlight .il { + color: #666666; +} +.markup.jupyter .border-box-sizing { + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} +.markup.jupyter div.output_wrapper { + position: relative; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-box-align: stretch; + display: -moz-box; + -moz-box-orient: vertical; + -moz-box-align: stretch; + display: box; + box-orient: vertical; + box-align: stretch; + display: flex; + flex-direction: column; + align-items: stretch; + z-index: 1; +} +.markup.jupyter div.output_scroll { + height: 24em; + width: 100%; + overflow: auto; + border-radius: 2px; + -webkit-box-shadow: inset 0 2px 8px rgba(0,0,0,0.8); + box-shadow: inset 0 2px 8px rgba(0,0,0,0.8); + display: block; +} +.markup.jupyter div.output_collapsed { + margin: 0px; + padding: 0px; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-box-align: stretch; + display: -moz-box; + -moz-box-orient: vertical; + -moz-box-align: stretch; + display: box; + box-orient: vertical; + box-align: stretch; + display: flex; + flex-direction: column; + align-items: stretch; +} +.markup.jupyter div.out_prompt_overlay { + height: 100%; + padding: 0px 0.4em; + position: absolute; + border-radius: 2px; +} +.markup.jupyter div.out_prompt_overlay:hover { + -webkit-box-shadow: inset 0 0 1px #000; + box-shadow: inset 0 0 1px #000; + background: rgba(240,240,240,0.5); +} +.markup.jupyter div.output_prompt { + color: #D84315; +} +.markup.jupyter div.output_area { + padding: 0px; + page-break-inside: avoid; + display: -webkit-box; + -webkit-box-orient: horizontal; + -webkit-box-align: stretch; + display: -moz-box; + -moz-box-orient: horizontal; + -moz-box-align: stretch; + display: box; + box-orient: horizontal; + box-align: stretch; + display: flex; + flex-direction: row; + align-items: stretch; +} +.markup.jupyter div.output_area .MathJax_Display { + text-align: left !important; +} +.markup.jupyter div.output_area .rendered_html table { + margin-left: 0; + margin-right: 0; +} +.markup.jupyter div.output_area .rendered_html img { + margin-left: 0; + margin-right: 0; +} +.markup.jupyter div.output_area img, +.markup.jupyter div.output_area svg { + max-width: 100%; + height: auto; +} +.markup.jupyter div.output_area img.unconfined, +.markup.jupyter div.output_area svg.unconfined { + max-width: none; +} +.markup.jupyter div.output_area .mglyph > img { + max-width: none; +} +.markup.jupyter .output { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-box-align: stretch; + display: -moz-box; + -moz-box-orient: vertical; + -moz-box-align: stretch; + display: box; + box-orient: vertical; + box-align: stretch; + display: flex; + flex-direction: column; + align-items: stretch; +} +@media (max-width: 540px) { + .markup.jupyter div.output_area { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-box-align: stretch; + display: -moz-box; + -moz-box-orient: vertical; + -moz-box-align: stretch; + display: box; + box-orient: vertical; + box-align: stretch; + display: flex; + flex-direction: column; + align-items: stretch; + } +} +.markup.jupyter div.output_area pre { + margin: 0; + padding: 1px 0 1px 0; + border: 0; + vertical-align: baseline; + color: black; + background-color: transparent; + border-radius: 0; +} +.markup.jupyter div.output_subarea { + overflow-x: auto; + padding: 0.4em; + -webkit-box-flex: 1; + -moz-box-flex: 1; + box-flex: 1; + flex: 1; + max-width: calc(86%); +} +.markup.jupyter div.output_scroll div.output_subarea { + overflow-x: visible; +} +.markup.jupyter div.output_text { + text-align: left; + color: #000; + line-height: 1.21429em; +} +.markup.jupyter div.output_stderr { + background: #fdd; +} +.markup.jupyter div.output_latex { + text-align: left; +} +.markup.jupyter div.output_javascript:empty { + padding: 0; +} +.markup.jupyter .js-error { + color: darkred; +} +.markup.jupyter div.raw_input_container { + line-height: 1.21429em; + padding-top: 5px; +} +.markup.jupyter input.raw_input { + font-family: 12px var(--fonts-monospace); + font-size: inherit; + color: inherit; + width: auto; + vertical-align: baseline; + padding: 0em 0.25em; + margin: 0em 0.25em; +} +.markup.jupyter input.raw_input:focus { + box-shadow: none; +} +.markup.jupyter p.p-space { + margin-bottom: 10px; +} +.markup.jupyter div.output_unrecognized { + padding: 5px; + font-weight: bold; + color: red; +} +.markup.jupyter div.output_unrecognized a { + color: inherit; + text-decoration: none; +} +.markup.jupyter div.output_unrecognized a:hover { + color: inherit; + text-decoration: none; +} +.markup.jupyter .rendered_html { + color: #000; +} +.markup.jupyter .rendered_html em { + font-style: italic; +} +.markup.jupyter .rendered_html strong { + font-weight: bold; +} +.markup.jupyter .rendered_html u { + text-decoration: underline; +} +.markup.jupyter .rendered_html :link { + text-decoration: underline; +} +.markup.jupyter .rendered_html :visited { + text-decoration: underline; +} +.markup.jupyter .rendered_html h1 { + font-size: 185.7%; + margin: 1.08em 0 0 0; + font-weight: bold; + line-height: 1.0; +} +.markup.jupyter .rendered_html h2 { + font-size: 157.1%; + margin: 1.27em 0 0 0; + font-weight: bold; + line-height: 1.0; +} +.markup.jupyter .rendered_html h3 { + font-size: 128.6%; + margin: 1.55em 0 0 0; + font-weight: bold; + line-height: 1.0; +} +.markup.jupyter .rendered_html h4 { + font-size: 100%; + margin: 2em 0 0 0; + font-weight: bold; + line-height: 1.0; +} +.markup.jupyter .rendered_html h5 { + font-size: 100%; + margin: 2em 0 0 0; + font-weight: bold; + line-height: 1.0; + font-style: italic; +} +.markup.jupyter .rendered_html h6 { + font-size: 100%; + margin: 2em 0 0 0; + font-weight: bold; + line-height: 1.0; + font-style: italic; +} +.markup.jupyter .rendered_html h1:first-child { + margin-top: 0.538em; +} +.markup.jupyter .rendered_html h2:first-child { + margin-top: 0.636em; +} +.markup.jupyter .rendered_html h3:first-child { + margin-top: 0.777em; +} +.markup.jupyter .rendered_html h4:first-child { + margin-top: 1em; +} +.markup.jupyter .rendered_html h5:first-child { + margin-top: 1em; +} +.markup.jupyter .rendered_html h6:first-child { + margin-top: 1em; +} +.markup.jupyter .rendered_html ul:not(.list-inline), +.markup.jupyter .rendered_html ol:not(.list-inline) { + padding-left: 2em; +} +.markup.jupyter .rendered_html ul { + list-style: disc; +} +.markup.jupyter .rendered_html ul ul { + list-style: square; + margin-top: 0; +} +.markup.jupyter .rendered_html ul ul ul { + list-style: circle; +} +.markup.jupyter .rendered_html ol { + list-style: decimal; +} +.markup.jupyter .rendered_html ol ol { + list-style: upper-alpha; + margin-top: 0; +} +.markup.jupyter .rendered_html ol ol ol { + list-style: lower-alpha; +} +.markup.jupyter .rendered_html ol ol ol ol { + list-style: lower-roman; +} +.markup.jupyter .rendered_html ol ol ol ol ol { + list-style: decimal; +} +.markup.jupyter .rendered_html * ul { + margin-top: 1em; +} +.markup.jupyter .rendered_html * ol { + margin-top: 1em; +} +.markup.jupyter .rendered_html hr { + color: black; + background-color: black; +} +.markup.jupyter .rendered_html pre { + margin: 1em 2em; + padding: 0px; + background-color: #fff; +} +.markup.jupyter .rendered_html code { + background-color: #eff0f1; +} +.markup.jupyter .rendered_html p code { + padding: 1px 5px; +} +.markup.jupyter .rendered_html pre code { + background-color: #fff; +} +.markup.jupyter .rendered_html pre, +.markup.jupyter .rendered_html code { + border: 0; + color: #000; + font-size: 100%; +} +.markup.jupyter .rendered_html blockquote { + margin: 1em 2em; +} +.markup.jupyter .rendered_html table { + margin-left: auto; + margin-right: auto; + border: none; + border-collapse: collapse; + border-spacing: 0; + color: black; + font-size: 12px; + table-layout: fixed; +} +.markup.jupyter .rendered_html thead { + border-bottom: 1px solid black; + vertical-align: bottom; +} +.markup.jupyter .rendered_html tr, +.markup.jupyter .rendered_html th, +.markup.jupyter .rendered_html td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} +.markup.jupyter .rendered_html th { + font-weight: bold; +} +.markup.jupyter .rendered_html tbody tr:nth-child(odd) { + background: #f5f5f5; +} +.markup.jupyter .rendered_html tbody tr:hover { + background: rgba(66,165,245,0.2); +} +.markup.jupyter .rendered_html * table { + margin-top: 1em; +} +.markup.jupyter .rendered_html p { + text-align: left; +} +.markup.jupyter .rendered_html * p { + margin-top: 1em; +} +.markup.jupyter .rendered_html img { + display: block; + margin-left: auto; + margin-right: auto; +} +.markup.jupyter .rendered_html * img { + margin-top: 1em; +} +.markup.jupyter .rendered_html img, +.markup.jupyter .rendered_html svg { + max-width: 100%; + height: auto; +} +.markup.jupyter .rendered_html img.unconfined, +.markup.jupyter .rendered_html svg.unconfined { + max-width: none; +} +.markup.jupyter .rendered_html .alert { + margin-bottom: initial; +} +.markup.jupyter .rendered_html * .alert { + margin-top: 1em; +} +.markup.jupyter [dir="rtl"] .rendered_html p { + text-align: right; +} +.markup.jupyter div.text_cell { + display: -webkit-box; + -webkit-box-orient: horizontal; + -webkit-box-align: stretch; + display: -moz-box; + -moz-box-orient: horizontal; + -moz-box-align: stretch; + display: box; + box-orient: horizontal; + box-align: stretch; + display: flex; + flex-direction: row; + align-items: stretch; +} +@media (max-width: 540px) { + .markup.jupyter div.text_cell > div.prompt { + display: none; + } +} +.markup.jupyter div.text_cell_render { + outline: none; + resize: none; + width: inherit; + border-style: none; + padding: 0.5em 0.5em 0.5em 0.4em; + color: #000; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} +.markup.jupyter a.anchor-link:link { + text-decoration: none; + padding: 0px 20px; + visibility: hidden; +} +.markup.jupyter h1:hover .anchor-link, +.markup.jupyter h2:hover .anchor-link, +.markup.jupyter h3:hover .anchor-link, +.markup.jupyter h4:hover .anchor-link, +.markup.jupyter h5:hover .anchor-link, +.markup.jupyter h6:hover .anchor-link { + visibility: visible; +} +.markup.jupyter .text_cell.rendered .input_area { + display: none; +} +.markup.jupyter .text_cell.rendered .rendered_html { + overflow-x: auto; + overflow-y: hidden; +} +.markup.jupyter .text_cell.rendered .rendered_html tr, +.markup.jupyter .text_cell.rendered .rendered_html th, +.markup.jupyter .text_cell.rendered .rendered_html td { + max-width: none; +} +.markup.jupyter .text_cell.unrendered .text_cell_render { + display: none; +} +.markup.jupyter .text_cell .dropzone .input_area { + border: 2px dashed #bababa; + margin: -1px; +} +.markup.jupyter .cm-header-1, +.markup.jupyter .cm-header-2, +.markup.jupyter .cm-header-3, +.markup.jupyter .cm-header-4, +.markup.jupyter .cm-header-5, +.markup.jupyter .cm-header-6 { + font-weight: bold; + font-family: var(--fonts-regular); +} +.markup.jupyter .cm-header-1 { + font-size: 185.7%; +} +.markup.jupyter .cm-header-2 { + font-size: 157.1%; +} +.markup.jupyter .cm-header-3 { + font-size: 128.6%; +} +.markup.jupyter .cm-header-4 { + font-size: 110%; +} +.markup.jupyter .cm-header-5 { + font-size: 100%; + font-style: italic; +} +.markup.jupyter .cm-header-6 { + font-size: 100%; + font-style: italic; +} +@media (max-width: 767px) { + .markup.jupyter .notebook_app { + padding-left: 0px; + padding-right: 0px; + } +} +.markup.jupyter #ipython-main-app { + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + height: 100%; +} +.markup.jupyter div#notebook_panel { + margin: 0px; + padding: 0px; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + height: 100%; +} +.markup.jupyter div#notebook { + font-size: 14px; + line-height: 20px; + overflow-y: hidden; + overflow-x: auto; + width: 100%; + padding-top: 20px; + margin: 0px; + outline: none; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + min-height: 100%; +} +@media not print { + .markup.jupyter #notebook-container { + padding: 15px; + background-color: #fff; + min-height: 0; + -webkit-box-shadow: 0px 0px 12px 1px rgba(87,87,87,0.2); + box-shadow: 0px 0px 12px 1px rgba(87,87,87,0.2); + } +} +@media print { + .markup.jupyter #notebook-container { + width: 100%; + } +} +.markup.jupyter .prompt { + min-width: 14ex; + padding: 0.4em; + margin: 0px; + font-family: 12px var(--fonts-monospace); + text-align: right; + line-height: 1.21429em; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: default; +} +@media (max-width: 540px) { + .markup.jupyter .prompt { + text-align: left; + } +} +.markup.jupyter div.inner_cell { + min-width: 0; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-box-align: stretch; + display: -moz-box; + -moz-box-orient: vertical; + -moz-box-align: stretch; + display: box; + box-orient: vertical; + box-align: stretch; + display: flex; + flex-direction: column; + align-items: stretch; + -webkit-box-flex: 1; + -moz-box-flex: 1; + box-flex: 1; + flex: 1; +} +.markup.jupyter div.input_area { + border: 1px solid #cfcfcf; + border-radius: 2px; + background: #f7f7f7; + line-height: 1.21429em; +} +.markup.jupyter div.prompt:empty { + padding-top: 0; + padding-bottom: 0; +} +.markup.jupyter div.unrecognized_cell { + padding: 5px 5px 5px 0px; + display: -webkit-box; + -webkit-box-orient: horizontal; + -webkit-box-align: stretch; + display: -moz-box; + -moz-box-orient: horizontal; + -moz-box-align: stretch; + display: box; + box-orient: horizontal; + box-align: stretch; + display: flex; + flex-direction: row; + align-items: stretch; +} +.markup.jupyter div.unrecognized_cell .inner_cell { + border-radius: 2px; + padding: 5px; + font-weight: bold; + color: red; + border: 1px solid #cfcfcf; + background: #eaeaea; +} +.markup.jupyter div.unrecognized_cell .inner_cell a { + color: inherit; + text-decoration: none; +} +.markup.jupyter div.unrecognized_cell .inner_cell a:hover { + color: inherit; + text-decoration: none; +} +@media (max-width: 540px) { + .markup.jupyter div.unrecognized_cell > div.prompt { + display: none; + } +} +@media print { + .markup.jupyter div.code_cell { + page-break-inside: avoid; + } +} +.markup.jupyter div.input { + page-break-inside: avoid; + display: -webkit-box; + -webkit-box-orient: horizontal; + -webkit-box-align: stretch; + display: -moz-box; + -moz-box-orient: horizontal; + -moz-box-align: stretch; + display: box; + box-orient: horizontal; + box-align: stretch; + display: flex; + flex-direction: row; + align-items: stretch; +} +@media (max-width: 540px) { + .markup.jupyter div.input { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-box-align: stretch; + display: -moz-box; + -moz-box-orient: vertical; + -moz-box-align: stretch; + display: box; + box-orient: vertical; + box-align: stretch; + display: flex; + flex-direction: column; + align-items: stretch; + } +} +.markup.jupyter div.input_prompt { + color: #303F9F; + border-top: 1px solid transparent; +} +.markup.jupyter div.input_area > div.highlight { + margin: 0.4em; + border: none; + padding: 0px; + background-color: transparent; +} +.markup.jupyter div.input_area > div.highlight > pre { + margin: 0px; + border: none; + padding: 0px; + background-color: transparent; +} +.markup.jupyter div.cell { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-box-align: stretch; + display: -moz-box; + -moz-box-orient: vertical; + -moz-box-align: stretch; + display: box; + box-orient: vertical; + box-align: stretch; + display: flex; + flex-direction: column; + align-items: stretch; + border-radius: 2px; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: transparent; + width: 100%; + padding: 5px; + margin: 0px; + outline: none; + position: relative; + overflow: visible; +} +.markup.jupyter div.cell:before { + position: absolute; + display: block; + top: -1px; + left: -1px; + width: 5px; + height: calc(100% 2px); + content: ''; + background: transparent; +} +.markup.jupyter div.cell.jupyter-soft-selected { + border-left-color: #E3F2FD; + border-left-width: 1px; + padding-left: 5px; + border-right-color: #E3F2FD; + border-right-width: 1px; + background: #E3F2FD; +} +@media print { + .markup.jupyter div.cell.jupyter-soft-selected { + border-color: transparent; + } +} +.markup.jupyter div.cell.selected, +.markup.jupyter div.cell.selected.jupyter-soft-selected { + border-color: #ababab; +} +.markup.jupyter div.cell.selected:before, +.markup.jupyter div.cell.selected.jupyter-soft-selected:before { + position: absolute; + display: block; + top: -1px; + left: -1px; + width: 5px; + height: calc(100% 2px); + content: ''; + background: #42A5F5; +} +@media print { + .markup.jupyter div.cell.selected, + .markup.jupyter div.cell.selected.jupyter-soft-selected { + border-color: transparent; + } +} +.markup.jupyter .edit_mode div.cell.selected { + border-color: #66BB6A; +} +.markup.jupyter .edit_mode div.cell.selected:before { + position: absolute; + display: block; + top: -1px; + left: -1px; + width: 5px; + height: calc(100% 2px); + content: ''; + background: #66BB6A; +} +@media print { + .markup.jupyter .edit_mode div.cell.selected { + border-color: transparent; + } +} + diff --git a/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.eot b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.eot new file mode 100644 index 0000000..da17e97 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.eot differ diff --git a/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.svg b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.svg new file mode 100644 index 0000000..7319714 --- /dev/null +++ b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.ttf b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.ttf new file mode 100644 index 0000000..837f379 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.ttf differ diff --git a/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.woff b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.woff new file mode 100644 index 0000000..895022d Binary files /dev/null and b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.woff differ diff --git a/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.woff2 b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.woff2 new file mode 100644 index 0000000..a6ce68d Binary files /dev/null and b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-700.woff2 differ diff --git a/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.eot b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.eot new file mode 100644 index 0000000..121abd6 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.eot differ diff --git a/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.svg b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.svg new file mode 100644 index 0000000..a3ee87d --- /dev/null +++ b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.svg @@ -0,0 +1,342 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.ttf b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.ttf new file mode 100644 index 0000000..f6d4e0b Binary files /dev/null and b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.ttf differ diff --git a/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.woff b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.woff new file mode 100644 index 0000000..e01da65 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.woff differ diff --git a/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.woff2 b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.woff2 new file mode 100644 index 0000000..00290e0 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/fira-code-v21-latin-ext_latin_greek_cyrillic-regular.woff2 differ diff --git a/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.eot b/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.eot new file mode 100644 index 0000000..009503e Binary files /dev/null and b/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.eot differ diff --git a/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.svg b/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.svg new file mode 100644 index 0000000..e9fb33b --- /dev/null +++ b/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.svg @@ -0,0 +1,396 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.ttf b/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.ttf new file mode 100644 index 0000000..d6fe56c Binary files /dev/null and b/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.ttf differ diff --git a/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.woff b/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.woff new file mode 100644 index 0000000..4242cc3 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.woff differ diff --git a/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.woff2 b/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.woff2 new file mode 100644 index 0000000..cec9ea9 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/hammersmith-one-v17-latin-regular.woff2 differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.eot b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.eot new file mode 100644 index 0000000..17c1635 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.eot differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.svg b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.svg new file mode 100644 index 0000000..aa69403 --- /dev/null +++ b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.svg @@ -0,0 +1,537 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.ttf b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.ttf new file mode 100644 index 0000000..415247c Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.ttf differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.woff b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.woff new file mode 100644 index 0000000..7ee8d1f Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.woff differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.woff2 b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.woff2 new file mode 100644 index 0000000..16a55e3 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700.woff2 differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.eot b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.eot new file mode 100644 index 0000000..b6f53fb Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.eot differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.svg b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.svg new file mode 100644 index 0000000..1efb819 --- /dev/null +++ b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.svg @@ -0,0 +1,528 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.ttf b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.ttf new file mode 100644 index 0000000..7058a78 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.ttf differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.woff b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.woff new file mode 100644 index 0000000..701dd72 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.woff differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.woff2 b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.woff2 new file mode 100644 index 0000000..9fffc8b Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-700italic.woff2 differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.eot b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.eot new file mode 100644 index 0000000..5a55cfc Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.eot differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.svg b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.svg new file mode 100644 index 0000000..ddc6d87 --- /dev/null +++ b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.svg @@ -0,0 +1,523 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.ttf b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.ttf new file mode 100644 index 0000000..78afd93 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.ttf differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.woff b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.woff new file mode 100644 index 0000000..1f175cf Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.woff differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.woff2 b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.woff2 new file mode 100644 index 0000000..82eecc3 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-italic.woff2 differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.eot b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.eot new file mode 100644 index 0000000..c34db64 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.eot differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.svg b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.svg new file mode 100644 index 0000000..6cd0eda --- /dev/null +++ b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.svg @@ -0,0 +1,534 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.ttf b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.ttf new file mode 100644 index 0000000..5e22e10 Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.ttf differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.woff b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.woff new file mode 100644 index 0000000..a66c81e Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.woff differ diff --git a/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.woff2 b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.woff2 new file mode 100644 index 0000000..b3d9cdf Binary files /dev/null and b/hosts/gitea-custom/public/fonts/vollkorn-v21-latin-ext_latin_greek_cyrillic-regular.woff2 differ diff --git a/hosts/gitea-custom/public/img/apple-touch-icon.png b/hosts/gitea-custom/public/img/apple-touch-icon.png new file mode 100644 index 0000000..cb2b080 Binary files /dev/null and b/hosts/gitea-custom/public/img/apple-touch-icon.png differ diff --git a/hosts/gitea-custom/public/img/avatar_default.png b/hosts/gitea-custom/public/img/avatar_default.png new file mode 100644 index 0000000..59dc97c Binary files /dev/null and b/hosts/gitea-custom/public/img/avatar_default.png differ diff --git a/hosts/gitea-custom/public/img/favicon.png b/hosts/gitea-custom/public/img/favicon.png new file mode 100644 index 0000000..bf48182 Binary files /dev/null and b/hosts/gitea-custom/public/img/favicon.png differ diff --git a/hosts/gitea-custom/public/img/favicon.svg b/hosts/gitea-custom/public/img/favicon.svg new file mode 100644 index 0000000..8b9c778 --- /dev/null +++ b/hosts/gitea-custom/public/img/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hosts/gitea-custom/public/img/logo.png b/hosts/gitea-custom/public/img/logo.png new file mode 100644 index 0000000..0af0e01 Binary files /dev/null and b/hosts/gitea-custom/public/img/logo.png differ diff --git a/hosts/gitea-custom/public/img/logo.svg b/hosts/gitea-custom/public/img/logo.svg new file mode 100644 index 0000000..8b9c778 --- /dev/null +++ b/hosts/gitea-custom/public/img/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hosts/gitea-custom/templates/custom/extra_links_footer.tmpl b/hosts/gitea-custom/templates/custom/extra_links_footer.tmpl new file mode 100644 index 0000000..c56a95e --- /dev/null +++ b/hosts/gitea-custom/templates/custom/extra_links_footer.tmpl @@ -0,0 +1,7 @@ +{{if eq .locale.Lang "de-DE"}} + Datenschutz + Impressum +{{else}} + Privacy + Imprint +{{end}} diff --git a/hosts/gitea-custom/templates/custom/header.tmpl b/hosts/gitea-custom/templates/custom/header.tmpl new file mode 100644 index 0000000..29c0bc5 --- /dev/null +++ b/hosts/gitea-custom/templates/custom/header.tmpl @@ -0,0 +1,2 @@ + + diff --git a/hosts/gitea-custom/templates/home.tmpl b/hosts/gitea-custom/templates/home.tmpl new file mode 100644 index 0000000..60711f8 --- /dev/null +++ b/hosts/gitea-custom/templates/home.tmpl @@ -0,0 +1,17 @@ +{{template "base/head" .}} +
+
+
+
+ +
+
+

+ {{AppName}} +

+

{{.locale.Tr "startpage.app_desc"}}

+
+
+
+
+{{template "base/footer" .}} diff --git a/hosts/gitea.nix b/hosts/gitea.nix new file mode 100644 index 0000000..d87655f --- /dev/null +++ b/hosts/gitea.nix @@ -0,0 +1,137 @@ +{ config, pkgs, lib, ... }: + +let + domain = "git.25120.org"; + giteaCustom = pkgs.callPackage ../packages/directory.nix { + name = "gitea-custom"; + source = ./gitea-custom; + }; +in +{ + services.gitea = { + enable = true; + appName = "${domain}"; + database = { + type = "postgres"; + passwordFile = "/secrets/gitea_db_password"; + createDatabase = false; + }; + domain = "${domain}"; + rootUrl = "https://${domain}/"; + httpPort = 3001; + repositoryRoot = "/data/git/repositories"; + lfs = { + enable = true; + contentDir = "/data/git/data/lfs"; + }; + settings = let + docutils = + pkgs.python310.withPackages (ps: with ps; [ + docutils # Provides rendering of ReStructured Text files + pygments # Provides syntax highlighting + ]); + nbconvert = + pkgs.python310.withPackages (ps: with ps; [ + jupyter + nbconvert + ]); + max_cached_jupyter_notebooks = 200; + cached_jupyter_preview = pkgs.writeScript "cache_preview" '' + #!${pkgs.bash}/bin/bash + + set -eu + + input_file="$1" + + command="${nbconvert}/bin/jupyter nbconvert --stdout --to html --template basic" + cache_directory="${config.services.gitea.stateDir}/markup_cache/jupyter" + max_cache_file_count="${toString max_cached_jupyter_notebooks}" + + cache_file="$cache_directory/$(md5sum "$input_file" | cut -d' ' -f1)" + + if [ -e "$cache_file" ] ; then + >&2 echo "Using cached file $cache_file" + touch "$cache_file" + else + ( + if cd "$cache_directory" ; then + ls -t | tail -n "+$max_cache_file_count" | xargs -r rm + else + mkdir -p "$cache_directory" + fi + ) + eval "$command \"$input_file\" > \"$cache_file\"" + fi + + cat "$cache_file" + ''; + in + { + server.SSH_PORT = lib.head config.services.openssh.ports; + service.DISABLE_REGISTRATION = true; + session.COOKIE_SECURE = true; + "markup.restructuredtext" = { + ENABLED = true; + FILE_EXTENSIONS = ".rst"; + RENDER_COMMAND = "${docutils}/bin/rst2html.py"; + IS_INPUT_FILE = false; + }; + "markup.jupyter" = { + ENABLED = true; + FILE_EXTENSIONS = ".ipynb"; + #RENDER_COMMAND = "\"${nbconvert}/bin/jupyter nbconvert --stdout --to html --template basic \""; + RENDER_COMMAND = "\"${cached_jupyter_preview} \""; + IS_INPUT_FILE = true; + # RENDER_CONTENT_MODE = "iframe"; + }; + "markup.sanitizer.jupyter.div" = { ELEMENT = "div"; ALLOW_ATTR = "class"; REGEXP = ""; }; + "markup.sanitizer.jupyter.span" = { ELEMENT = "span"; ALLOW_ATTR = "class"; REGEXP = ""; }; + "markup.sanitizer.jupyter.img" = { ELEMENT = "img"; ALLOW_ATTR = "class"; REGEXP = ""; ALLOW_DATA_URI_IMAGES = "true"; }; + "markup.sanitizer.jupyter.svg.width" = { ELEMENT = "svg"; ALLOW_ATTR = "width"; REGEXP = ""; }; + "markup.sanitizer.jupyter.svg.height" = { ELEMENT = "svg"; ALLOW_ATTR = "height"; REGEXP = ""; }; + "markup.sanitizer.jupyter.svg.viewbox" = { ELEMENT = "svg"; ALLOW_ATTR = "viewbox"; REGEXP = ""; }; + "markup.sanitizer.jupyter.svg.use" = { ELEMENT = "use"; ALLOW_ATTR = "transform"; REGEXP = ""; }; + "markup.sanitizer.jupyter.svg.g" = { ELEMENT = "g"; ALLOW_ATTR = "class"; REGEXP = ""; }; + "markup.sanitizer.jupyter.svg.path.style" = { ELEMENT = "path"; ALLOW_ATTR = "style"; REGEXP = ""; }; + "markup.sanitizer.jupyter.svg.path.d" = { ELEMENT = "path"; ALLOW_ATTR = "d"; REGEXP = ""; }; + "markup.sanitizer.jupyter.svg.path.transform" = { ELEMENT = "path"; ALLOW_ATTR = "transform"; REGEXP = ""; }; + }; + }; + + services.postgresql = { + enable = true; + authentication = '' + local gitea all ident map=gitea-users + ''; + # Map the gitea user to postgresql + identMap = '' + gitea-users gitea gitea + ''; + }; + + services.nginx = { + enable = true; + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedProxySettings = true; + recommendedTlsSettings = true; + virtualHosts."${domain}" = { + enableACME = true; + forceSSL = true; + locations."/".proxyPass = "http://localhost:3001/"; + }; + }; + + # users.users.gitea.extraGroups = [ "keys" ]; + systemd.services.gitea = { + serviceConfig = { + ReadOnlyPaths = [ "/secrets" ]; + }; + preStart = '' + cp -frT "${giteaCustom}/" "${config.services.gitea.stateDir}/custom/" + find "${config.services.gitea.stateDir}/custom/" -type d -exec chmod 0750 '{}' + -or -type f -exec chmod 0640 '{}' + + ''; + }; + + networking.firewall.allowedTCPPorts = [ 80 443 ]; +} diff --git a/packages/directory.nix b/packages/directory.nix new file mode 100644 index 0000000..e20fbfb --- /dev/null +++ b/packages/directory.nix @@ -0,0 +1,8 @@ +{ stdenv, name, source }: +stdenv.mkDerivation rec { + inherit name; + phases = [ "installPhase" ]; + installPhase = '' + cp -R ${source} $out + ''; +}