Archived
1
0

feat: simplify configuration

This commit is contained in:
Guz
2025-09-13 11:28:42 -03:00
parent c05c137e90
commit 40b0e0af69
41 changed files with 265 additions and 3685 deletions

View File

@@ -1,11 +1,7 @@
keys:
- &primary age1sseqwwa7fc0ftry8njyuagdg28fkmtdwmj6m7p3etjsj83suee3shfzjyz
creation_rules:
- path_regex: secrets/spacestation.yaml$
- path_regex: secrets.yaml$
key_groups:
- age:
- *primary
- path_regex: secrets/spacestation.lesser.json$
key_groups:
- age:
- *primary
- *primary

47
abaduh/adguard.nix Normal file
View File

@@ -0,0 +1,47 @@
{lib, ...}: {
services.adguardhome = {
enable = true;
openFirewall = true;
port = 8753;
settings = {
filters =
lib.mapAttrsToList (n: v: {
enabled = true;
id = n;
name = n;
url = v;
}) {
"Hagezi's Multi PRO" = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/pro.txt";
"Hagezi's Badware Hoster" = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/hoster.txt";
"Hagezi's DNS Bypass blocking" = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/doh-vpn-proxy-bypass.txt";
"Hagezi's Dynamic DNS blocking" = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/dyndns.txt";
"Hagezi's Gambling" = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/gambling.txt";
"Hagezi's Native - LG webOS" = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/native.lgwebos.txt";
"Hagezi's Native - Tiktok (Agressive)" = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/hosts/native.tiktok.extended.txt";
"Hagezi's Native - Microsoft/Windows" = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/native.winoffice.txt";
"Hagezi's Pop-up Ads" = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/popupads.txt";
"Hagezi's TIF" = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/tif.txt";
};
user_rules = [
"@@||tumblr.com^$important"
"@@||wordpress.com^$important"
"@@||tailscale.com^$important"
"@@||torproject.org^$important"
"@@||neocities.org^$important"
];
};
};
# Ports needed to access the DNS resolver
networking.firewall.allowedTCPPorts = [53];
networking.firewall.allowedUDPPorts = [53 51820];
}

5
abaduh/default.nix Normal file
View File

@@ -0,0 +1,5 @@
{...}: {
imports = [
./adguard.nix
];
}

View File

@@ -1,28 +1,40 @@
{config, ...}: let
port = config.services.medama.port;
{
config,
self,
...
}: let
cfg = config.services.medama;
in {
imports = [
self.nixosModules.medama
];
services.medama.enable = true;
services.medama.port = 6010;
services.medama.port = 9840;
services.medama.cors = [
"capytal.cc"
"forge.capytal.company"
];
services.caddy.virtualHosts.":${toString (port + 1)}" = {
extraConfig = ''
reverse_proxy /api/* http://localhost:${toString port}
services.anubis.instances."medama" = {
settings = {
BIND = ":${toString (cfg.port + 2)}";
BIND_NETWORK = "tcp";
METRICS_BIND = ":${toString (cfg.port + 3)}";
METRICS_BIND_NETWORK = "tcp";
SERVE_ROBOTS_TXT = true;
TARGET = "http://localhost:${toString cfg.port}";
ED25519_PRIVATE_KEY_HEX_FILE = config.sops.secrets."medama/anubis/hexFile".path;
};
};
reverse_proxy http://localhost:${toString (port + 2)} {
services.caddy.virtualHosts.":${toString (cfg.port + 1)}" = {
extraConfig = ''
reverse_proxy /api/* http://localhost:${toString cfg.port}
reverse_proxy http://localhost:${toString (cfg.port + 2)} {
header_up X-Real-Ip {remote_host}
}
'';
};
services.anubis.instances."medama" = {
bind = ":${toString (port + 2)}";
metricsBind = ":${toString (port + 3)}";
serveRobotsTxt = true;
target = "http://localhost:${toString port}";
ed25519PrivateKeyHexFile = config.sops.secrets."medama/anubis/hexFile".path;
};
}

View File

@@ -1,11 +1,28 @@
{...}: {
{config, ...}: {
imports = [
./analytics.nix
./network.nix
./forgejo.nix
./websites.nix
./forgejo
./garage.nix
./sqld.nix
];
services.caddy.enable = true;
virtualisation.oci-containers.containers.cloudflare-tunnel = {
image = "cloudflare/cloudflared:latest";
autoStart = true;
extraOptions = [
"--network=host"
];
cmd = [
"tunnel"
"--no-autoupdate"
"run"
];
environmentFiles = [
config.sops.secrets."cloudflared/tunnel-env".path
];
};
# Caddy Ports
networking.firewall.allowedTCPPorts = [80 433];
}

66
capytal/forgejo.nix Normal file
View File

@@ -0,0 +1,66 @@
{
config,
lib,
pkgs-unstable,
...
}: let
cfg = config.services.forgejo;
in {
services.forgejo = {
enable = true;
package = pkgs-unstable.forgejo;
settings = let
initList = l: (lib.strings.concatStringsSep "," l);
in {
DEFAULT = {
APP_NAME = "Capytal Code";
};
server = rec {
HTTP_PORT = 9960;
DOMAIN = "forge.capytal.company";
ROOT_URL = "https://${DOMAIN}";
};
repository = {
DEFAULT_REPO_UNITS = initList [
"repo.code"
"repo.issues"
"repo.pulls"
];
};
admin = {
DISABLE_REGULAR_ORG_CREATION = true;
USER_DISABLED_FEATURES = "deletion manage_ssh_keys manage_gpg_keys";
EXTERNAL_USER_DISABLED_FEATURES = "deletion manage_ssh_keys manage_gpg_keys";
};
service = {
DISABLE_REGISTRATION = true;
};
security = {
REVERSE_PROXY_TRUSTED_PROXIES = "127.0.0.0/8,::1/128";
};
ui = {
# DEFAULT_THEME = "capytal-dark";
};
};
};
services.anubis.instances."forgejo" = {
settings = {
BIND = ":${toString (cfg.settings.server.HTTP_PORT + 2)}";
BIND_NETWORK = "tcp";
METRICS_BIND = ":${toString (cfg.settings.server.HTTP_PORT + 3)}";
METRICS_BIND_NETWORK = "tcp";
SERVE_ROBOTS_TXT = true;
TARGET = "http://localhost:${toString cfg.settings.server.HTTP_PORT}";
ED25519_PRIVATE_KEY_HEX_FILE = config.sops.secrets."forgejo/anubis/hexFile".path;
};
};
services.caddy.virtualHosts.":${toString (cfg.settings.server.HTTP_PORT + 1)}" = {
extraConfig = ''
reverse_proxy http://localhost${config.services.anubis.instances."forgejo".settings.BIND} {
header_up X-Real-Ip {remote_host}
}
'';
};
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 200 KiB

View File

@@ -1,69 +0,0 @@
const CAPYTAL_THEME_NAME = "capytal-dark";
(() => {
let version = document.querySelector('div.left-links > a[href="/admin/config"]')?.textContent
if (!version) {
console.warn(`${CAPYTAL_THEME_NAME}: unable to find Forgejo instance version!`)
return
}
console.debug(`${CAPYTAL_THEME_NAME}: version found ${version}`)
let style = document.querySelector(`link[href="/assets/css/theme-${CAPYTAL_THEME_NAME}.css?v=${version}"`)
if (!style) {
console.warn(`${CAPYTAL_THEME_NAME}: capytal theme not selected, skipping!`)
return
}
console.log(`${CAPYTAL_THEME_NAME}: starting to apply theme modifications`)
labelStyles()
})()
function labelStyles() {
/** @type {Element[]} */
let labels = [];
document.querySelectorAll('.labels-list').forEach(e => labels = labels.concat(...e.children))
document.querySelectorAll('ul.issue-label-list').forEach(e => labels = labels.concat(...e.children))
document.querySelectorAll('div.filter.menu.ugc-labels').forEach(e => {
for (let c of e.children) {
let label = c.querySelector('span.ui.label.scope-parent') ?? c.querySelector('div.ui.label')
if (label) {
labels.push(label)
}
}
})
for (let label of labels) {
console.log(label)
let left = label.querySelector('.scope-left')
let right = label.querySelector('.scope-right')
if (!left && !right) {
label = (label.querySelector('div.ui.label')?? label)
let color = label.getAttribute('style')?.split(' ')?.at(-2)
label.setAttribute('style', `color: ${color} !important;`+
`border: solid 1px ${color} !important;`+
`background-color: ${color.slice(0, -2) + '22'} !important;`)
}
if (left) {
let color = left.getAttribute('style')?.split(' ')?.at(-2)
left.setAttribute('style', `color: ${color} !important;`+
`border: solid 1px ${color} !important;`+
`border-right: solid 0px !important;`+
`background-color: transparent !important;`)
}
if (right) {
let color = right.getAttribute('style')?.split(' ')?.at(-2)
right.setAttribute('style', `color: ${color} !important;`+
`border: solid 1px ${color} !important;`+
`border-left: solid 0px !important;`+
`background-color: ${color.slice(0, -2) + '22'} !important;`)
}
}
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 54 KiB

View File

@@ -1,110 +0,0 @@
{...}: {
services.forgejo.customization = {
assets = ./assets;
templates = ./templates;
theme = {
"capytal-dark" = ./themes/theme-capytal-dark.css;
"bthree-dark" = ./themes/theme-bthree-dark.css;
};
options.label."Default" = {
"scope/a11y" = {
color = "d4b3a5";
description = "Accessibility issues and improvements";
exclusive = true;
};
"scope/i18n" = {
color = "dbb594";
description = "Internationalization issues and improvements";
exclusive = true;
};
"scope/security" = {
color = "ff977d";
description = "Test suite changes";
exclusive = true;
};
"scope/documentation" = {
color = "e796f3";
description = "Documentation changes";
exclusive = true;
};
"scope/testing" = {
color = "ff949d";
description = "Test suite changes";
exclusive = true;
};
"kind/enhancement" = {
color = "4ccce6";
description = "Improvement on existing functionality";
exclusive = true;
};
"kind/bug" = {
color = "70b8ff";
description = "Something isn't working";
exclusive = true;
};
"kind/feature" = {
color = "9eb1ff";
description = "New functionality";
exclusive = true;
};
"priority/low" = {
color = "bde56c";
description = "The priority is low";
exclusive = true;
priority = "low";
};
"priority/medium" = {
color = "f5e147";
description = "The priority is medium";
exclusive = true;
priority = "medium";
};
"priority/high" = {
color = "ff9592";
description = "The priority is high";
exclusive = true;
priority = "high";
};
"priority/critical" = {
color = "ff977d";
description = "The priority is high";
exclusive = true;
priority = "critical";
};
"BREAKING-CHANGE" = {
color = "b4b4b4";
description = "This change breaks existing functionality";
};
"status/to-do" = {
color = "71d083";
description = "This is confirmed and needs work";
exclusive = true;
};
"status/in-progress" = {
color = "f5e147";
description = "This is being worked on";
exclusive = true;
};
"status/needs-info" = {
color = "ffa057";
description = "This needs more information to continue";
exclusive = true;
};
"status/blocked" = {
color = "ff977d";
description = "This is blocked due to something";
exclusive = true;
};
"status/abandoned" = {
color = "b6ecf7";
description = "This is in hiatus/abandoned until further notice";
exclusive = true;
};
"status/wont-fix" = {
color = "b5b3ad";
description = "This issue won't be fixed";
exclusive = true;
};
};
};
}

View File

@@ -1,69 +0,0 @@
{
config,
pkgs-unstable,
...
}: let
secrets = config.spacestation-secrets.lesser;
forgejoCfg = secrets.capytal.services.forgejo;
in {
imports = [
../../modules/forgejo
./customization.nix
];
services.forgejo = {
enable = true;
package = pkgs-unstable.forgejo;
actions = {
enable = true;
token = forgejoCfg.actions.token;
url = "https://forge.capytal.company";
labels = forgejoCfg.actions.labels;
};
users = {
enable = true;
users = {
user1 = {
name = /. + config.sops.secrets."forgejo/user1/name".path;
password = /. + config.sops.secrets."forgejo/user1/password".path;
email = /. + config.sops.secrets."forgejo/user1/email".path;
admin = true;
};
};
};
settings = {
DEFAULT = {
APP_NAME = "Capytal Code";
};
server = rec {
HTTP_PORT = forgejoCfg.port;
DOMAIN = "forge.capytal.company";
ROOT_URL = "https://${DOMAIN}";
};
project = {
PROJECT_BOARD_BASIC_KANBAN_TYPE = [
];
};
repository = {
DEFAULT_REPO_UNITS = [
"repo.code"
"repo.issues"
"repo.pulls"
];
};
admin = {
DISABLE_REGULAR_ORG_CREATION = true;
USER_DISABLED_FEATURES = "deletion manage_ssh_keys manage_gpg_keys";
EXTERNAL_USER_DISABLED_FEATURES = "deletion manage_ssh_keys manage_gpg_keys";
};
service = {
DISABLE_REGISTRATION = true;
};
security = {
REVERSE_PROXY_TRUSTED_PROXIES = "127.0.0.0/8,::1/128";
};
ui = {
DEFAULT_THEME = "capytal-dark";
};
};
};
}

View File

@@ -1,718 +0,0 @@
<style>
/* This style block is copied across all sites using the developer navbar.
* For custom styling on this website, add a <style> block after this one. */
/* Variables. */
.nav-global {
-webkit-font-smoothing: antialiased;
--nav-global-color-bg: var(--color-primary-dark-2);
--nav-global-color-text: var(--color-text-light-2);
--nav-global-color-text-secondary: var(--color-text-light-3);
--nav-global-color-text-highlight: var(--color-text-light-1);
--nav-global-color-text-hover: white;
--nav-global-color-text-active: white;
--nav-global-color-primary: hsl(204, 98%, 54%);
--nav-global-color-primary-bg: hsla(204, 100%, 46%, .1);
--nav-global-color-button-bg-hover: hsl(213, 10%, 24%);
--nav-global-color-button-text: var(--nav-global-color-text);
--nav-global-color-menu-bg: var(--nav-global-color-bg);
--nav-global-color-menu-border: hsl(213, 10%, 18%);
--nav-global-color-menu-zindex: 1040;
--nav-global-box-shadow-menu: 0px 5px 15px -2px rgba(0, 0, 0, 0.33), 0px 5px 15px -5px rgba(0, 0, 0, 0.33);
--nav-global-box-shadow-menu-item: 0px 1px 4px 0px rgba(0, 0, 0, 0.05), 0px 15px 20px -1px rgba(0, 0, 0, 0.025);
--nav-global-navbar-height: var(--navbar-primary-height, 56px);
--nav-global-spacer: 15px;
--nav-global-spacer-sm: 10px;
--nav-global-spacer-xs: 5px;
--nav-global-border-radius: 6px;
--nav-global-border-radius-lg: 10px;
--nav-global-button-height: 35px;
--nav-global-link-padding-x: var(--nav-global-spacer);
--nav-global-link-padding-y: var(--nav-global-spacer-sm);
--nav-global-font-size: 14px;
--nav-global-transition-speed: 150ms;
}
/* Reset. */
@namespace svg "http://www.w3.org/2000/svg";
.nav-global :not(svg|*),
.nav-global *::before,
.nav-global *::after {
-webkit-box-sizing: border-box;
all: unset;
display: revert;
box-sizing: border-box;
}
.nav-global [default-styles] {
all: revert;
}
.nav-global * {
-webkit-text-size-adjust: 100%;
font-family: 'Heebo', -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-variation-settings: 'wght' 400;
font-weight: normal;
}
.nav-global {
background-color: var(--nav-global-color-bg);
color: var(--nav-global-color-text);
display: flex;
position: relative;
z-index: var(--zindex-fixed);
}
.nav-global h3,
.nav-global h4,
.nav-global strong {
font-variation-settings: 'wght' 500;
}
.nav-global figure,
.nav-global section {
display: block;
}
.nav-global svg:not(:root) {
overflow: hidden;
vertical-align: middle;
}
.nav-global .nav-global-container {
flex: 1;
margin: 0 10px;
}
/* Navigation. */
.nav-global nav {
align-items: center;
display: flex;
line-height: var(--nav-global-font-size);
font-size: var(--nav-global-font-size);
height: var(--nav-global-navbar-height);
margin: 0 auto;
padding: 0 var(--nav-global-spacer);
position: relative;
}
/* Links. */
.nav-global a:not(.dropdown-item) {
color: inherit;
cursor: pointer;
text-decoration: none;
transition: background-color var(--nav-global-transition-speed) ease-out, color var(--nav-global-transition-speed) ease-out;
}
.nav-global a:not(.dropdown-item):hover {
color: var(--nav-global-color-text-hover);
}
/* Navigation items. */
.nav-global nav > ul {
list-style: none;
margin: 0;
padding: 0;
}
.nav-global nav > ul,
.nav-global nav > ul > li,
.nav-global nav > ul > li > a,
.nav-global-apps-dropdown-container {
align-items: center;
display: inline-flex;
height: 100%;
}
.nav-global-apps-dropdown-container {
position: relative;
}
.nav-global nav > ul > li > a {
padding: var(--nav-global-link-padding-y) var(--nav-global-link-padding-x);
}
.nav-global nav > a.is-active,
.nav-global nav > a.is-active svg,
.nav-global nav > ul > li > a.is-active,
.nav-global .nav-global-link-active,
.nav-global .nav-global-link-active svg {
color: var(--nav-global-color-text-active) !important;
fill: var(--nav-global-color-text-active);
font-variation-settings: 'wght' 500;
}
.nav-global .nav-global-links-right {
margin-left: auto;
}
/* Logo. */
.nav-global a.nav-global-logo {
margin-right: var(--nav-global-spacer);
position: relative;
top: 2px;
}
.nav-global a.nav-global-logo strong {
margin-inline: var(--nav-global-spacer-sm);
font-size: 18px;
}
.nav-global .nav-global-logo svg {
height: 21px;
}
.nav-global a.nav-global-logo svg {
position: relative;
top: -4px;
}
.nav-global svg {
fill: var(--nav-global-color-text);
transition: fill var(--nav-global-transition-speed) ease-out;
}
.nav-global .nav-global-logo:hover svg {
fill: white;
}
/* Apps button. */
.nav-global button,
.nav-global .nav-global-btn {
-webkit-appearance: button;
align-items: center;
background-color: transparent;
border-radius: var(--nav-global-border-radius);
border: 0;
color: var(--nav-global-color-button-text);
cursor: pointer;
display: inline-flex;
font: inherit;
height: var(--nav-global-button-height);
margin: 0;
outline: 0;
overflow: visible;
padding: var(--nav-global-spacer-xs) var(--nav-global-spacer);
text-transform: none;
transition: background-color var(--nav-global-transition-speed) ease-out, color var(--nav-global-transition-speed) ease-out, transform var(--nav-global-transition-speed) ease-out;
white-space: nowrap;
}
.nav-global button span,
.nav-global .nav-global-btn span {
white-space: nowrap;
}
.nav-global button:hover,
.nav-global .nav-global-btn:hover {
background-color: var(--nav-global-color-button-bg-hover);
color: var(--nav-global-color-text-hover);
cursor: pointer;
}
.nav-global button.nav-global-btn-active,
.nav-global .nav-global-btn.nav-global-btn-active {
background-color: var(--nav-global-color-primary-bg);
color: var(--nav-global-color-primary);
}
.nav-global button.nav-global-btn-active svg,
.nav-global .nav-global-btn.nav-global-btn-active svg {
fill: var(--nav-global-color-primary);
}
.nav-global .nav-global-icon {
height: 20px;
pointer-events: none;
width: 20px;
}
.nav-global-icon-dropdown-toggle {
margin-left: var(--nav-global-spacer-xs);
}
.nav-global button:hover svg,
.nav-global .nav-global-btn:hover svg {
fill: white;
}
/* Apps dropdown menu. */
.nav-global .nav-global-apps-menu {
background-color: var(--nav-global-color-menu-bg);
border-radius: var(--nav-global-border-radius-lg);
border: thin solid var(--nav-global-color-menu-border);
box-shadow: var(--nav-global-box-shadow-menu);
display: none;
padding: var(--nav-global-spacer-sm);
position: absolute;
right: 0;
top: calc(100% + 15px);
visibility: hidden;
width: 90vw;
max-width: 640px;
z-index: var(--nav-global-color-menu-zindex);
}
.nav-global .nav-global-dropdown.is-visible {
display: block;
visibility: visible;
}
/* Tiny triangle in the corner. */
.nav-global .nav-global-apps-menu::before {
background-color: var(--nav-global-color-menu-bg);
border-radius: 3px;
border: 2px var(--nav-global-color-menu-bg) solid;
content: '';
display: block;
height: .85rem;
position: absolute;
right: .85rem;
top: -0.25rem;
transform: rotate(45deg);
width: 1rem;
z-index: -1;
}
.nav-global .nav-global-apps-menu ul {
border-bottom: 2px solid rgba(255, 255, 255, .05);
display: grid;
gap: var(--nav-global-spacer-sm);
grid-template-columns: repeat(2, 1fr);
list-style: none;
margin: 0 0 var(--nav-global-spacer-xs) 0;
padding: var(--nav-global-spacer-xs) 0 var(--nav-global-spacer-sm) 0;
}
.nav-global .nav-global-apps-menu ul>li>a {
border-radius: var(--nav-global-border-radius-lg);
display: flex;
flex: 1;
height: 100%;
}
.nav-global .nav-global-apps-menu ul>li>a:hover {
background-color: rgba(255, 255, 255, .05);
color: var(--nav-global-color-text-active);
box-shadow: var(--nav-global-box-shadow-menu-item);
}
.nav-global .nav-global-apps-menu ul>li>a:hover h4,
.nav-global .nav-global-apps-menu ul>li>a:hover svg {
color: var(--nav-global-color-primary);
fill: var(--nav-global-color-primary);
}
.nav-global .nav-global-apps-menu h3 {
color: white;
display: inline-block;
font-size: 13px;
line-height: 18px;
margin: 0;
opacity: .3;
padding-left: var(--nav-global-spacer);
}
.nav-global .nav-global-apps-menu h4 {
color: var(--nav-global-color-text-highlight);
font-size: 17px;
line-height: 18px;
margin: var(--nav-global-spacer-xs) 0 0;
padding: var(--nav-global-spacer-sm) var(--nav-global-spacer) 0;
transition: color var(--nav-global-transition-speed) ease-out;
}
.nav-global .nav-global-apps-menu p {
font-size: 15px;
line-height: 20px;
margin: 0;
opacity: .8;
padding: var(--nav-global-spacer-xs) var(--nav-global-spacer) var(--nav-global-spacer-sm);
}
.nav-global .nav-global-apps-menu figure {
margin: var(--nav-global-spacer) 0 0 var(--nav-global-spacer);
}
.nav-global .nav-global-apps-menu ul>li>a svg {
position: relative;
top: -2px;
}
/* Donate section of the menu. */
.nav-global .nav-global-apps-menu-section-donate ul {
border: none;
margin-bottom: 0;
padding-bottom: 0;
}
.nav-global .nav-global-apps-menu-section-donate a svg {
fill: hsl(352, 90%, 62%) !important;
transition: transform var(--nav-global-transition-speed) ease-out;
}
.nav-global .nav-global-apps-menu-section-donate ul>li:first-child>a {
background-color: hsla(352deg, 90%, 42%, .2);
}
.nav-global .nav-global-apps-menu-section-donate ul>li:first-child>a:hover {
background-color: hsla(352deg, 90%, 42%, .5);
}
.nav-global .nav-global-apps-menu-section-donate ul>li:first-child>a:hover svg {
fill: hsl(352, 90%, 72%) !important;
transform: scale(1.2);
}
.nav-global .nav-global-apps-menu-section-donate ul>li:first-child>a:hover h4 {
color: white;
}
/* Mobile. */
.nav-global button.nav-global-logo {
display: none;
visibility: hidden;
}
@media (max-width: 767px) {
.nav-global a.nav-global-logo {
display: none;
}
.nav-global button.nav-global-logo {
display: block;
visibility: visible;
}
.nav-global .nav-global-nav-links {
align-items: flex-start;
background-color: var(--nav-global-color-menu-bg);
border-radius: var(--nav-global-border-radius-lg);
display: none;
flex-direction: column;
left: 1rem;
padding: 0 var(--nav-global-spacer-sm);
position: absolute;
top: calc(100% + .5rem);
visibility: visible;
width: 10rem;
z-index: var(--nav-global-color-menu-zindex);
}
.nav-global .nav-global-nav-links.is-visible {
display: flex;
}
.nav-global .nav-global-nav-links::before {
background-color: var(--nav-global-color-menu-bg);
border-radius: 3px;
border: 2px var(--nav-global-color-menu-bg) solid;
content: '';
display: block;
height: 0.8rem;
position: absolute;
left: 1.5rem;
top: -0.133rem;
transform: rotate(45deg);
width: 1rem;
z-index: -1;
}
.nav-global nav>ul {
height: initial;
}
.nav-global .nav-global-nav-links>li {
border-bottom: 2px solid rgba(255, 255, 255, .05);
width: 100%;
}
.nav-global .nav-global-nav-links>li:last-child {
border: none;
}
.nav-global .nav-global-nav-links>li>a {
padding-inline: 0;
width: 100%;
}
}
</style>
<style>
/* Custom styling for projects.blender.org */
/* Make sure to start every line with ".nav-global"
* so changes affect the developer navbar only. */
/* Limit navbar width on large screens. */
@media (min-width: 1200px) {
[role="main"] > .dashboard-navbar,
.full.height > .menu.bar > [role="navigation"],
.nav-global .nav-global-container {
max-width: 100%;
}
}
/* Override Gitea's default navbar height. */
#navbar {
min-height: 46px;
}
/* Hide the site logo. */
/* Seems to be breaking the sign-in button currently.
#navbar .item:first-child {
display: none;
}
*/
/* Fix alignment of text in dropdown items. */
.ui.dropdown>.text {
position: relative;
top: -2px;
}
body > div.full.height {
padding-bottom: 0;
}
</style>
<div class="nav-global">
<div class="nav-global-container">
<nav>
<a href="https://capytal.company" class="nav-global-logo">
<img src="/assets/light-asset.svg" style="width:127px;"/>
</a>
<button class="nav-global-logo js-dropdown-toggle" data-toggle-menu-id="nav-global-nav-links">
<img src="/assets/light-asset.svg" style="width:127px;"/>
</button>
<ul class="nav-global-nav-links nav-global-dropdown js-dropdown-menu" id="nav-global-nav-links">
<li>
<a href="/capytalcode">Code</a>
</li>
<li>
<a href="/capytalcreators">Creators</a>
</li>
<li>
<a href="/loreddev">Lored</a>
</li>
</ul>
<ul class="nav-global-links-right">
<li>
<div class="nav-global-apps-dropdown-container">
<button class="js-dropdown-toggle" data-toggle-menu-id="nav-global-apps-menu">
<svg class="nav-global-icon" height="100px" width="100px" viewBox="0 0 1000 1000">
<path
d="m 150.5,899 a 50,50 0 0 1 -49,-50 V 749 a 50,50 0 0 1 49,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 749 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 749 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m -598,-299 a 50,50 0 0 1 -49,-50 V 450 a 50,50 0 0 1 49,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 450 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 450 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m -598,-299 a 50,50 0 0 1 -49,-50 V 151 a 50,50 0 0 1 49,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 151 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 151 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z"/>
</svg>
</button>
<div class="nav-global-apps-menu nav-global-dropdown js-dropdown-menu" id="nav-global-apps-menu">
<a href="https://capytal.company" target="_blank">
<h3>CAPYTAL</h3>
</a>
<ul>
<li>
<a href="https://capytal.company/about" target="_blank">
<figure>
<!--
Icon "square-academic-cap-2-line-duotone" provided by Solar Icon Pack, from 480 Design.
Licensed under CC BY 4.0; https://www.figma.com/community/file/1166831539721848736/solar-icons-set
-->
<svg class="nav-global-icon" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24">
<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="1.5">
<path d="M3.092 6.637L9.782 3.5a5.17 5.17 0 0 1 4.435 0l6.691 3.137c1.456.682 1.456 3.044 0 3.726l-6.69 3.137a5.17 5.17 0 0 1-4.435 0L5 11.258"/>
<path stroke-linejoin="round" d="M2.5 15v-2.862c0-1.28 0-1.92.33-2.42c.33-.501.919-.753 2.094-1.257L6 8" opacity=".5"/>
<path d="M19 11.5v5.125c0 1.008-.503 1.952-1.385 2.44C16.146 19.88 13.796 21 12 21s-4.146-1.121-5.615-1.934C5.504 18.577 5 17.633 5 16.626V11.5" opacity=".5"/>
</g>
</svg>
</figure>
<div>
<h4>About</h4>
<p>Read about the Capytal brand and it's projects.</p>
</div>
</a>
</li>
<li>
<a href="https://blog.capytal.company" target="_blank">
<div>
<h4>Blog</h4>
<p>Stay up-to-date with new updates from projects and the organization.</p>
</div>
</a>
</li>
</ul>
<!-- TODO: UPDATE LINKS
<a href="/" target="_blank">
<h3>CONTRIBUITING</h3>
</a>
<ul>
<li>
<a href="/" target="_blank">
<figure>
<!-
Icon "open-source-full" provided by Remix Icon Collection, from Remix Design.
Licensed under Apache 2.0; https://github.com/Remix-Design/RemixIcon
The icon is the Open Source Initiative trademarked icon. Capytal is not afiliated
with or endorsed by the Open Source Initiative in any way, shape, or form. It's use
here is merely intended as a visual representation of "Open Source".
->
<svg class="nav-global-icon" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24">
<path fill="currentColor" d="M12.001 2c5.523 0 10 4.477 10 10c0 4.13-2.504 7.676-6.077 9.201l-2.518-6.55A3 3 0 0 0 12 9a3 3 0 0 0-1.404 5.652l-2.518 6.55A10 10 0 0 1 2 12C2 6.477 6.477 2 12 2"/>
</svg>
</figure>
<div>
<h4>How we do Open-Source</h4>
<p>See how and where to contribute to our projects.</p>
</div>
</a>
</li>
<li>
<a href="/" target="_blank">
<div>
<h4>Code Of Conduct</h4>
<p>The code of conduct we follow.</p>
</div>
</a>
</li>
</ul>
<!- TODO: UPDATE LINKS ->
<a href="/" target="_blank">
<h3>DEVELOPMENT</h3>
</a>
<ul>
<li>
<a href="https://code.blender.org/?utm_medium=nav-global" target="_blank">
<figure>
<!-
Icon "code-line-duotone" provided by Solar Icon Pack, from 480 Design.
Licensed under CC BY 4.0; https://www.figma.com/community/file/1166831539721848736/solar-icons-set
->
<svg class="nav-global-icon" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="1.5"><path d="m17 7.83l1.697 1.526c1.542 1.389 2.313 2.083 2.313 2.974c0 .89-.771 1.585-2.314 2.973L17 16.83"/><path d="m13.987 5l-3.974 14.83" opacity=".5"/><path d="M7 7.83L5.304 9.356C3.76 10.745 2.99 11.44 2.99 12.33s.771 1.585 2.314 2.973L7 16.83"/></g></svg>
</svg>
</figure>
<div>
<h4>Dev-To-Devs</h4>
<p>Updates and posts from developers to developers on our blog.</p>
</div>
</a>
</li>
<li>
<a href="." target="_blank">
<div>
<h4>Roadmaps</h4>
<p>Features and plans for the projects.</p>
</div>
</a>
</li>
</ul>
<!--
TODO: UPDATE LINKS
<div class="nav-global-apps-menu-section-donate">
<a href="https://fund.blender.org/?utm_medium=nav-global" target="_blank">
<h3>DONATE</h3>
</a>
<ul>
<li>
<a href="https://fund.blender.org/?utm_medium=nav-global" target="_blank">
<figure>
<svg class="nav-global-icon" height="100px" width="100px" viewbox="0 0 1000 1000">
<path d="M 273.67169,58.416076 C 201.59785,62.59427 135.79129,94.975269 86.697523,145.11359 37.603742,194.20736 4.1781939,260.01391 0,332.08775 -4.1781926,403.11704 22.980065,480.41362 86.697523,545.17562 l 45.960127,45.96013 339.47823,338.43367 a 43.871033,43.871033 0 0 0 61.62835,0 L 872.1979,591.13575 918.15804,545.17562 c 109.67766,-110.72213 109.67766,-290.38445 0,-400.06203 -110.72213,-110.722127 -290.38445,-110.722127 -400.06204,0 l -15.66822,14.62368 -15.66822,-14.62368 C 423.04211,80.351592 345.74553,53.193334 273.67169,58.416076 Z m 5.22274,86.697514 c 48.04922,-3.13365 98.18754,12.53458 146.23677,60.5838 l 47.00468,47.00468 a 43.871033,43.871033 0 0 0 61.62835,0 l 45.96013,-47.00468 c 76.25204,-76.25203 199.50874,-76.25203 276.80532,0 77.29658,77.29658 77.29658,200.5533 0,277.84988 L 810.56956,529.50739 502.42778,837.64917 194.286,529.50739 148.32588,483.54727 C 100.27665,434.45349 84.608431,384.31516 86.697523,336.26594 c 3.133646,-47.00467 26.113717,-95.0539 61.628357,-130.56855 35.51464,-35.51464 82.51932,-58.49471 130.56855,-60.5838 z" style="stroke-width:1.04455"></path>
</svg>
</figure>
<div>
<h4>Development Fund</h4>
<p>Support core development with a monthly contribution.</p>
</div>
</a>
</li>
<li>
<a href="https://www.blender.org/about/donations/?utm_medium=nav-global" target="_blank">
<div>
<h4>One-time Donations</h4>
<p>Perform a single donation with more payment options available.</p>
</div>
</a>
</li>
</ul>
</div>
</div> -->
</div>
</li>
</ul>
</nav>
</div>
</div>
<script>
const dropdownToggles = document.getElementsByClassName("js-dropdown-toggle");
const btnActiveClass = 'nav-global-btn-active';
const isVisibleClass = 'is-visible';
/* Hide all dropdowns. */
function dropdownHideAll() {
const dropdownMenus = document.getElementsByClassName("js-dropdown-menu");
if (dropdownMenus) {
for (let i = 0; i < dropdownMenus.length; i++) {
dropdownMenus[i].classList.remove(isVisibleClass);
}
}
/* Remove styling from all dropdown toggles. */
for (let i = 0; i < dropdownToggles.length; i++) {
dropdownToggles[i].classList.remove(btnActiveClass);
}
}
for (let i = 0; i < dropdownToggles.length; i++) {
dropdownToggles[i].addEventListener("click", function (e) {
e.stopPropagation();
const dropdownId = this.getAttribute('data-toggle-menu-id');
const el = document.getElementById(dropdownId);
if (el) {
/* If the button is already active, remove styling. */
if (el.classList.contains(isVisibleClass)) {
dropdownHideAll();
} else {
/* Style button as active and show menu. */
this.classList.add(btnActiveClass);
el.classList.add(isVisibleClass);
}
}
});
}
/* Hide all dropdowns when clicking anywhere except menus. */
document.body.addEventListener("click", function (e) {
if (!e.target.classList.contains("js-dropdown-menu")) {
dropdownHideAll();
}
});
/* Hide all dropdowns when pressing Esc. */
window.addEventListener('keydown', function (event) {
if (event.key === 'Escape') {
dropdownHideAll();
}
});
</script>

View File

@@ -1,27 +0,0 @@
<link rel="preconnect" href="https://fonts.bunny.net">
<link href="https://fonts.bunny.net/css?family=red-hat-display:300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i|roboto:100" rel="stylesheet" />
<script src="/assets/js/capytal-theme.js" defer=""></script>
<script defer src="https://analytics.capytal.company/script.js" hx-head="re-eval"></script>
<style type="text/css">
:root * {
--fonts-proportional: "Red Hat Display", "Noto Sans", "Liberation Sans", sans-serif, var(--fonts-emoji) !important;
}
@font-face {
font-family: "Cal Sans";
src:
url('assets/fonts/CalSans.woff2') format('woff2'),
url('assets/fonts/CalSans.woff') format('woff'),
url('assets/fonts/CalSans.ttf') format('truetype'),
local("Red Hat Display"), local("Noto Sans");
}
a#navbar-logo {
display: none !important;
width: 0 !important;
height: 0 !important;
}
div.org-title {
font-family: "Cal Sans";
}
</style>

View File

@@ -1,51 +0,0 @@
{{template "base/head" .}}
<div role="main" aria-label="{{if .IsSigned}}{{ctx.Locale.Tr "dashboard"}}{{else}}{{ctx.Locale.Tr "home"}}{{end}}" class="page-content home">
<div class="tw-mb-8 tw-px-8">
<div class="center">
<img class="logo" style="max-width:70%;max-height:100%;" src="{{AssetUrlPrefix}}/img/home-logo.svg" alt="{{ctx.Locale.Tr "logo"}}">
<div class="hero">
<!-- <h1 class="ui icon header title cal-sans">
{{AppDisplayName}}
</h1> -->
<h2 style="font-family:'Cal Sans';">From dreams, to code.</h2>
</div>
</div>
</div>
<!-- <div class="ui stackable middle very relaxed page grid">
<div class="eight wide center column">
<h1 class="hero ui icon header">
{{svg "octicon-flame"}} {{ctx.Locale.Tr "startpage.install"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.install_desc" "https://forgejo.org/download/#installation-from-binary" "https://forgejo.org/download/#container-image" "https://forgejo.org/download"}}
</p>
</div>
<div class="eight wide center column">
<h1 class="hero ui icon header">
{{svg "octicon-device-desktop"}} {{ctx.Locale.Tr "startpage.platform"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.platform_desc" "https://go.dev/"}}
</p>
</div>
</div>
<div class="ui stackable middle very relaxed page grid">
<div class="eight wide center column">
<h1 class="hero ui icon header">
{{svg "octicon-rocket"}} {{ctx.Locale.Tr "startpage.lightweight"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.lightweight_desc"}}
</p>
</div>
<div class="eight wide center column">
<h1 class="hero ui icon header">
{{svg "octicon-code"}} {{ctx.Locale.Tr "startpage.license"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.license_desc" "https://forgejo.org/download" "https://codeberg.org/forgejo/forgejo"}}
</p>
</div>
</div> -->
</div>
{{template "base/footer" .}}

View File

@@ -1,519 +0,0 @@
/* bthree dark theme */
:root {
--is-dark-theme: true;
/* Colors. */
/* Some colors must be set as HEX, due to the monaco-editor no supporting
* conversion of non-hex colors. https: //github.com/microsoft/monaco-editor/issues/1815 */
color-scheme: dark;
--color-primary: hsl(204deg, 90%, 60%);
--color-primary-hover: hsl(204deg, 90%, 50%);
--color-primary-bg: hsla(204deg, 100%, 36%, .6);
--color-primary-text: hsl(204deg, 90%, 72%);
--color-primary-contrast: hsl(0, 0%, 100%);
--color-primary-dark-1: #14a1ff;
--color-primary-dark-2: #47b6ff;
--color-primary-dark-3: #66c2ff;
--color-primary-dark-4: #8fd2ff;
--color-primary-dark-5: #addeff;
--color-primary-dark-6: #c7e9ff;
--color-primary-dark-7: #e0f3ff;
--color-primary-light-1: #007acc;
--color-primary-light-2: #006eb8;
--color-primary-light-3: #005c99;
--color-primary-light-4: #005085;
--color-primary-light-5: #003d66;
--color-primary-light-6: #003152;
--color-primary-light-7: #001f33;
--color-primary-alpha-10: #008deb1a;
--color-primary-alpha-20: #008deb33;
--color-primary-alpha-30: #008deb4d;
--color-primary-alpha-40: #008deb66;
--color-primary-alpha-50: #008deb80;
--color-primary-alpha-60: #008deb99;
--color-primary-alpha-70: #008debb3;
--color-primary-alpha-80: #008debcc;
--color-primary-alpha-90: #008debe6;
--color-secondary: hsl(213, 12%, 30%);
--color-secondary-bg: hsl(213, 16%, 20%);
--color-secondary-dark-1: hsl(213, 12%, 35%);
--color-secondary-dark-2: hsl(213, 12%, 40%);
--color-secondary-dark-3: hsl(213, 12%, 50%);
--color-secondary-dark-4: hsl(213, 12%, 55%);
--color-secondary-dark-5: hsl(213, 12%, 60%);
--color-secondary-dark-6: #9aa3af;
--color-secondary-dark-7: hsl(213, 12%, 69%);
--color-secondary-dark-8: hsl(213, 12%, 74%);
--color-secondary-dark-9: hsl(213, 11%, 79%);
--color-secondary-dark-10: hsl(213, 11%, 84%);
--color-secondary-dark-11: hsl(213, 12%, 89%);
--color-secondary-dark-12: hsl(213, 12%, 94%);
--color-secondary-dark-13: hsl(213, 14%, 98%);
--color-secondary-light-1: hsl(213, 12%, 24%);
--color-secondary-light-2: hsl(213, 12%, 18%);
--color-secondary-light-3: hsl(213, 11%, 12%);
--color-secondary-light-4: hsl(213, 8%, 6%);
--color-secondary-alpha-10: hsla(213, 12%, 31%, 0.1);
--color-secondary-alpha-20: hsla(213, 12%, 31%, 0.2);
--color-secondary-alpha-30: hsla(213, 12%, 31%, 0.3);
--color-secondary-alpha-40: hsla(213, 12%, 31%, 0.4);
--color-secondary-alpha-50: hsla(213, 12%, 31%, 0.5);
--color-secondary-alpha-60: hsla(213, 12%, 31%, 0.6);
--color-secondary-alpha-70: hsla(213, 12%, 31%, 0.7);
--color-secondary-alpha-80: hsla(213, 12%, 31%, 0.8);
--color-secondary-alpha-90: hsla(213, 12%, 31%, 0.9);
/* Colors for buttons, labels, etc. */
--color-red: hsl(0, 56.4%, 54.1%);
--color-red-light: hsl(0, 56.5%, 48.6%);
--color-red-dark-1: hsl(3deg, 75%, 59%);
--color-orange: hsl(23.8, 89%, 42.4%);
--color-orange-light: hsl(23.6, 88.7%, 38%);
--color-yellow: hsl(44.8, 97%, 40.6%);
--color-yellow-light: hsl(44.8, 96.8%, 37%);
--color-olive: hsl(67.5, 79.1%, 36%);
--color-olive-light: hsl(67.4, 79.3%, 32%);
--color-green: hsl(124deg 41% 35%);
--color-green-light: hsl(124deg 41% 45%);
--color-teal: hsl(177, 100%, 28.4%);
--color-teal-light: hsl(176.8, 100%, 26%);
--color-blue: hsl(206, 56%, 50.2%);
--color-blue-light: hsl(206, 55%, 45.3%);
--color-blue-dark-1: hsl(213deg, 89%, 64%);
--color-blue-dark-bg: hsla(213deg, 89%, 64%, .15);
--color-violet: hsl(259.2, 66.5%, 65%);
--color-violet-light: hsl(259.1, 66.2%, 58%);
--color-violet-dark-1: hsl(262deg, 66%, 66%);
--color-violet-dark-bg: hsla(262deg, 66%, 66%, .15);
--color-purple: hsl(285, 55.9%, 58%);
--color-purple-light: hsl(285, 55.6%, 52%);
--color-pink: hsl(326, 64.6%, 50.2%);
--color-pink-light: hsl(326, 64.5%, 45%);
--color-brown: hsl(23.4, 33%, 48%);
--color-brown-light: hsl(23.5, 33%, 43%);
--color-grey: hsl(213, 12%, 30%);
--color-grey-light: hsl(213, 12%, 40%);
--color-black: hsl(213, 21%, 15%);
--color-black-light: hsl(223, 20%, 13%);
--color-gold: hsl(47, 50%, 46.3%);
--color-white: #ffffff;
/* Color: diff */
--color-diff-added-word-bg: hsl(120, 25.5%, 32%);
--color-diff-removed-word-bg: hsl(0, 37%, 32%);
--color-diff-added-row-bg: hsla(123, 36%, 43%, 0.1);
--color-diff-added-row-linesnum-bg: hsla(123, 36%, 40%, 0.2);
--color-diff-added-row-border: hsl(134.4, 20%, 24%);
--color-diff-removed-row-bg: hsl(0, 20%, 20%);
--color-diff-removed-row-linesnum-bg: hsl(0, 25%, 23%);
--color-diff-removed-row-border: hsl(0, 19%, 33%);
--color-diff-moved-row-bg: hsl(59, 31%, 38.6%);
--color-diff-moved-row-border: hsl(69.2, 46%, 61%);
--color-diff-inactive: hsl(229, 14%, 13%);
/* Color: messages and status. */
--color-error-border: hsl(0, 42%, 44.1%);
--color-error-bg: hsl(0, 42.9%, 23%);
--color-error-bg-active: hsl(0, 27.3%, 37%);
--color-error-bg-hover: hsl(0, 33.3%, 30%);
--color-error-text: hsl(0, 79.3%, 88.6%);
--color-success-border: hsl(136, 33.3%, 40.6%);
--color-success-bg: hsl(150, 23%, 20%);
--color-success-text: hsl(116, 46%, 58.4%);
--color-warning-border: hsl(50, 100%, 37%);
--color-warning-bg: hsl(60, 9.4%, 20.8%);
--color-warning-text: hsl(44.7, 96.8%, 50.8%);
--color-info-border: hsl(210, 50%, 37.6%);
--color-info-bg: hsl(216.3, 33.3%, 22.4%);
--color-info-text: hsl(213deg, 89%, 64%);
--color-body: #202327;
--color-box-header: hsl(213, 12%, 22%);
--color-box-body: hsl(213, 12%, 18%);
--color-box-body-highlight: hsla(204deg, 60%, 15%, .15);
--color-text: #bbc0ca;
--color-text-dark: hsl(220, 26%, 89%);
--color-text-light: hsl(224, 9.2%, 68%);
--color-text-light-1: hsl(224, 7.8%, 62%);
--color-text-light-2: hsl(224, 6.8%, 57%);
--color-text-light-3: hsl(224.3, 9.3%, 48.4%);
/* "color-light" is actually a subtle black in dark themes, to darken an element.
* against different backgrounds. */
--color-light: hsla(0, 0%, 0%, 0.2);
--color-light-mimic-enabled: rgba(0, 0, 0, calc(40 / 255 * 222 / 255 / var(--opacity-disabled)));
--color-light-border: hsla(0, 0%, 100%, 0.2);
--color-hover: hsla(213, 18%, 90%, .05);
--color-active: hsla(213, 18%, 90%, .1);
--color-menu: hsl(213, 12%, 21%);
--color-card: transparent;
--color-markup-table-row: hsla(0, 0%, 100%, 0);
--color-markup-code-block: hsla(0, 0%, 100%, 0.1);
--color-markup-code-inline: hsla(0, 0%, 100%, 0.1);
--color-code-bg: #1e2329;
--color-code-line-bg-hover: hsl(213, 16%, 16%);
--color-code-sidebar-bg: hsl(213, 15%, 21%);
--color-tooltip-text: #fbfdff;
--color-tooltip-bg: #000017f0;
/* Navbar. */
--color-navbar: hsl(213, 10%, 18%);
--color-nav-bg: hsl(213, 10%, 18%);
--color-nav-hover-bg: hsla(213, 18%, 90%, .05);
--color-header-wrapper: hsl(213, 10%, 18%);
--color-navbar-transparent: hsla(213, 10%, 14%, 0);
--color-header-bar: hsl(213, 10%, 18%);
/* Inputs. */
--color-input-text: #d6dbe6;
--color-input-background: #17191c;
--color-input-toggle-background: #454d57;
--color-input-border: #454d57;
--color-input-border-hover: #505668;
--color-placeholder-text: #6a737d;
--color-editor-line-highlight: var(--color-primary-light-5);
--color-project-board-bg: var(--color-secondary-light-2);
--color-highlight-fg: #87651e;
--color-highlight-bg: #352c1c;
--color-overlay-backdrop: #080808c0;
--color-button: #282d33;
--color-caret: var(--color-text);
--color-border: var(--color-secondary-alpha-40);
--color-reaction-bg: hsla(0, 0%, 100%, 0.1);
--color-reaction-active-bg: var(--color-primary-alpha-30);
--color-small-accent: var(--color-primary-light-5);
--color-active-line: hsl(53.6, 50.9%, 22%);
/* Labels. e.g. issues count indicator in repo tabs. */
--color-label-text: var(--color-text-light);
--color-label-bg: var(--color-secondary-alpha-60);
--color-label-active-bg: hsl(220, 10.6%, 33.3%);
/* Footer. */
--color-footer: hsl(213, 14.8%, 21%);
--color-footer-text: var(--color-text-light-3);
--color-footer-links: var(--color-text-light-1);
}
/* Custom styling of individual elements.
* Using !important is bad, but unfortunately gitea does it already in _base.less. */
/* Primary button. */
.ui.primary.button,
.ui.primary.buttons .button {
background-color: var(--color-primary-bg) !important;
border-color: var(--color-primary-bg) !important;
color: var(--color-primary-text) !important;
}
a.ui.primary.label:hover,
.ui.primary.button:hover,
.ui.primary.buttons .button:hover {
background-color: var(--color-primary-hover) !important;
color: var(--color-primary-contrast) !important;
}
.ui.primary.label {
background-color: var(--color-primary-bg) !important;
border-color: var(--color-primary-bg) !important;
color: var(--color-primary) !important;
}
/* (from arc-green)
* invert emojis that are hard to read otherwise */
.emoji[aria-label="check mark"],
.emoji[aria-label="currency exchange"],
.emoji[aria-label="TOP arrow"],
.emoji[aria-label="END arrow"],
.emoji[aria-label="ON! arrow"],
.emoji[aria-label="SOON arrow"],
.emoji[aria-label="heavy dollar sign"],
.emoji[aria-label="copyright"],
.emoji[aria-label="registered"],
.emoji[aria-label="trade mark"],
.emoji[aria-label="multiply"],
.emoji[aria-label="plus"],
.emoji[aria-label="minus"],
.emoji[aria-label="divide"],
.emoji[aria-label="curly loop"],
.emoji[aria-label="double curly loop"],
.emoji[aria-label="wavy dash"],
.emoji[aria-label="paw prints"],
.emoji[aria-label="musical note"],
.emoji[aria-label="musical notes"] {
filter: invert(100%) hue-rotate(180deg);
}
/* Code syntax highlighting. */
.tag-code .code-inner {
opacity: .5;
}
.same-code .lines-num.lines-num-old,
.same-code .lines-num.lines-num-new {
color: var(--color-text-light-3) !important;
}
.add-code .lines-num.lines-num-old,
.add-code .lines-num.lines-num-new {
background-color: var(--color-diff-added-row-linesnum-bg);
color: var(--color-text-dark-2) !important;
}
.del-code .lines-num.lines-num-old,
.diff-unified .del-code .lines-num.lines-num-old,
.del-code .lines-num.lines-num-new {
background-color: var(--color-diff-removed-row-linesnum-bg);
color: var(--color-text-dark-2) !important;
}
.repository .diff-file-box .file-body.file-code table tbody tr.add-code:hover .lines-num,
.repository .diff-file-box .file-body.file-code table tbody tr.del-code:hover .lines-num,
.repository .diff-file-box .file-body.file-code table tbody tr.same-code:hover .lines-num,
.repository .diff-file-box .file-body.file-code table tbody .diff-unified tr:hover .del-code .lines-num {
color: var(--color-text-dark) !important;
}
.repository .diff-file-box .file-body.file-code table tbody tr.same-code:hover .lines-num {
color: var(--color-text-dark-2) !important;
}
.repository .diff-file-box .file-body.file-code table tbody tr.same-code:hover .lines-code,
.repository .diff-file-box .file-body.file-code table tbody tr.same-code:hover .lines-num,
.repository .diff-file-box .file-body.file-code table tbody tr.same-code:hover .lines-type-marker {
background-color: var(--color-code-line-bg-hover) !important;
}
/* From web_src/less/themes/chroma/dark.less */
:root {
--color-syntax-NameBuiltinPseudo: #fabd2f;
--color-syntax-Comment: #777e94;
--color-syntax-CommentSingle: #777e94;
--color-syntax-CommentHashbang: #777e94;
--color-syntax-CommentMultiline: #777e94;
--color-syntax-CommentPreproc: #8ec07c;
--color-syntax-CommentPreprocFile: #649bc4;
--color-syntax-CommentSpecial: #9075cd;
--color-syntax-LiteralStringDelimiter: #649bc4;
--color-syntax-GenericDeleted-text: #fff;
--color-syntax-GenericDeleted-bg: #5f3737;
--color-syntax-GenericEmph: #ddee30;
--color-syntax-GenericHeading: #ffaa10;
--color-syntax-GenericInserted-text: #fff;
--color-syntax-GenericInserted-bg: #3a523a;
--color-syntax-GenericOutput: #777e94;
--color-syntax-GenericPrompt: #ebdbb2;
--color-syntax-GenericError: #ff4433;
--color-syntax-GenericStrong: #ebdbb2;
--color-syntax-GenericTraceback: #ff7540;
--color-syntax-GenericSubheading: #b8bb26;
--color-syntax-LineHighlight: #3f424d;
--color-syntax-LiteralNumberIntegerLong: #649bc4;
--color-syntax-Keyword: #f47067;
--color-syntax-KeywordConstant: #649bc4;
--color-syntax-KeywordDeclaration: #ff7540;
--color-syntax-KeywordNamespace: #ffaa10;
--color-syntax-KeywordPseudo: #5f8700;
--color-syntax-KeywordReserved: #ff7540;
--color-syntax-KeywordType: #fabd2f;
--color-syntax-LineNumbers: #7f8699;
--color-syntax-LineNumbersTable: #7f8699;
--color-syntax-LiteralNumber: #649bc4;
--color-syntax-LiteralNumberBin: #649bc4;
--color-syntax-LiteralNumberFloat: #649bc4;
--color-syntax-LiteralNumberHex: #649bc4;
--color-syntax-LiteralNumberInteger: #649bc4;
--color-syntax-LiteralNumberOct: #649bc4;
--color-syntax-Name: #adbac7;
--color-syntax-NameAttribute: #b8bb26;
--color-syntax-NameBuiltin: #fabd2f;
--color-syntax-NameClass: #f69d50;
--color-syntax-NameDecorator: #dcbdfb;
--color-syntax-NameException: #ff7540;
--color-syntax-NameFunction: #dcbdfb;
--color-syntax-NameEntity: #fabd2f;
--color-syntax-NameLabel: #ff7540;
--color-syntax-NameNamespace: #ffaa10;
--color-syntax-NameConstant: #649bc4;
--color-syntax-NameTag: #ff7540;
--color-syntax-NameVariable: #ebdbb2;
--color-syntax-NameOther: #b6bac5;
--color-syntax-Operator: #6cb6ff;
--color-syntax-OperatorWord: #6cb6ff;
--color-syntax-Punctuation: #d2d4db;
--color-syntax-LiteralString: #b8bb26;
--color-syntax-LiteralStringSingle: #96d0ff;
--color-syntax-LiteralStringDouble: #96d0ff;
--color-syntax-LiteralStringAffix: #649bc4;
--color-syntax-LiteralStringBacktick: #b8bb26;
--color-syntax-LiteralStringChar: #649bc4;
--color-syntax-LiteralStringDoc: #777e94;
--color-syntax-LiteralStringEscape: #ff7540;
--color-syntax-LiteralStringHeredoc: #649bc4;
--color-syntax-LiteralStringInterpol: #ffaa10;
--color-syntax-LiteralStringRegex: #9075cd;
--color-syntax-LiteralStringSymbol: #ff7540;
--color-syntax-LiteralStringOther: #ffaa10;
--color-syntax-NameVariableClass: #ff7540;
--color-syntax-NameVariableGlobal: #ffaa10;
--color-syntax-NameVariableInstance: #ffaa10;
--color-syntax-TextWhitespace: #7f8699;
}
.chroma .bp { color: var(--color-syntax-NameBuiltinPseudo) } /* NameBuiltinPseudo */
.chroma .c { color: var(--color-syntax-Comment) } /* Comment */
.chroma .c1 { color: var(--color-syntax-CommentSingle) } /* CommentSingle */
.chroma .ch { color: var(--color-syntax-CommentHashbang) } /* CommentHashbang */
.chroma .cm { color: var(--color-syntax-CommentMultiline) } /* CommentMultiline */
.chroma .cp { color: var(--color-syntax-CommentPreproc) } /* CommentPreproc */
.chroma .cpf { color: var(--color-syntax-CommentPreprocFile) } /* CommentPreprocFile */
.chroma .cs { color: var(--color-syntax-CommentSpecial) } /* CommentSpecial */
.chroma .dl { color: var(--color-syntax-LiteralStringDelimiter) } /* LiteralStringDelimiter */
.chroma .gd { color: var(--color-syntax-GenericDeleted-text); background-color: var(--color-syntax-GenericDeleted-bg); } /* GenericDeleted */
.chroma .ge { color: var(--color-syntax-GenericEmph); } /* GenericEmph */
.chroma .gh { color: var(--color-syntax-GenericHeading); } /* GenericHeading */
.chroma .gi { color: var(--color-syntax-GenericInserted-text); background-color: var(--color-syntax-GenericInserted-bg); } /* GenericInserted */
.chroma .go { color: var(--color-syntax-GenericOutput); } /* GenericOutput */
.chroma .gp { color: var(--color-syntax-GenericPrompt); } /* GenericPrompt */
.chroma .gr { color: var(--color-syntax-GenericError); } /* GenericError */
.chroma .gs { color: var(--color-syntax-GenericStrong); } /* GenericStrong */
.chroma .gt { color: var(--color-syntax-GenericTraceback); } /* GenericTraceback */
.chroma .gu { color: var(--color-syntax-GenericSubheading); } /* GenericSubheading */
.chroma .hl { background-color: var(--color-syntax-LineHighlight); } /* LineHighlight */
.chroma .il { color: var(--color-syntax-LiteralNumberIntegerLong); } /* LiteralNumberIntegerLong */
.chroma .k { color: var(--color-syntax-Keyword); } /* Keyword */
.chroma .kc { color: var(--color-syntax-KeywordConstant); } /* KeywordConstant */
.chroma .kd { color: var(--color-syntax-KeywordDeclaration); } /* KeywordDeclaration */
.chroma .kn { color: var(--color-syntax-KeywordNamespace); } /* KeywordNamespace */
.chroma .kp { color: var(--color-syntax-KeywordPseudo); } /* KeywordPseudo */
.chroma .kr { color: var(--color-syntax-KeywordReserved); } /* KeywordReserved */
.chroma .kt { color: var(--color-syntax-KeywordType); } /* KeywordType */
.chroma .ln { color: var(--color-syntax-LineNumbers); } /* LineNumbers */
.chroma .lnt { color: var(--color-syntax-LineNumbersTable); } /* LineNumbersTable */
.chroma .m { color: var(--color-syntax-LiteralNumber); } /* LiteralNumber */
.chroma .mb { color: var(--color-syntax-LiteralNumberBin); } /* LiteralNumberBin */
.chroma .mf { color: var(--color-syntax-LiteralNumberFloat); } /* LiteralNumberFloat */
.chroma .mh { color: var(--color-syntax-LiteralNumberHex); } /* LiteralNumberHex */
.chroma .mi { color: var(--color-syntax-LiteralNumberInteger); } /* LiteralNumberInteger */
.chroma .mo { color: var(--color-syntax-LiteralNumberOct); } /* LiteralNumberOct */
.chroma .n { color: var(--color-syntax-Name); } /* Name */
.chroma .na { color: var(--color-syntax-NameAttribute); } /* NameAttribute */
.chroma .nb { color: var(--color-syntax-NameBuiltin); } /* NameBuiltin */
.chroma .nc { color: var(--color-syntax-NameClass); } /* NameClass */
.chroma .nd { color: var(--color-syntax-NameDecorator); } /* NameDecorator */
.chroma .ne { color: var(--color-syntax-NameException); } /* NameException */
.chroma .nf { color: var(--color-syntax-NameFunction); } /* NameFunction */
.chroma .ni { color: var(--color-syntax-NameEntity); } /* NameEntity */
.chroma .nl { color: var(--color-syntax-NameLabel); } /* NameLabel */
.chroma .nn { color: var(--color-syntax-NameNamespace); } /* NameNamespace */
.chroma .no { color: var(--color-syntax-NameConstant); } /* NameConstant */
.chroma .nt { color: var(--color-syntax-NameTag); } /* NameTag */
.chroma .nv { color: var(--color-syntax-NameVariable); } /* NameVariable */
.chroma .nx { color: var(--color-syntax-NameOther); } /* NameOther */
.chroma .o { color: var(--color-syntax-Operator); } /* Operator */
.chroma .ow { color: var(--color-syntax-OperatorWord); } /* OperatorWord */
.chroma .p { color: var(--color-syntax-Punctuation); } /* Punctuation */
.chroma .s { color: var(--color-syntax-LiteralString); } /* LiteralString */
.chroma .s1 { color: var(--color-syntax-LiteralStringSingle); } /* LiteralStringSingle */
.chroma .s2 { color: var(--color-syntax-LiteralStringDouble); } /* LiteralStringDouble */
.chroma .sa { color: var(--color-syntax-LiteralStringAffix); } /* LiteralStringAffix */
.chroma .sb { color: var(--color-syntax-LiteralStringBacktick); } /* LiteralStringBacktick */
.chroma .sc { color: var(--color-syntax-LiteralStringChar); } /* LiteralStringChar */
.chroma .sd { color: var(--color-syntax-LiteralStringDoc); } /* LiteralStringDoc */
.chroma .se { color: var(--color-syntax-LiteralStringEscape); } /* LiteralStringEscape */
.chroma .sh { color: var(--color-syntax-LiteralStringHeredoc); } /* LiteralStringHeredoc */
.chroma .si { color: var(--color-syntax-LiteralStringInterpol); } /* LiteralStringInterpol */
.chroma .sr { color: var(--color-syntax-LiteralStringRegex); } /* LiteralStringRegex */
.chroma .ss { color: var(--color-syntax-LiteralStringSymbol); } /* LiteralStringSymbol */
.chroma .sx { color: var(--color-syntax-LiteralStringOther); } /* LiteralStringOther */
.chroma .vc { color: var(--color-syntax-NameVariableClass); } /* NameVariableClass */
.chroma .vg { color: var(--color-syntax-NameVariableGlobal); } /* NameVariableGlobal */
.chroma .vi { color: var(--color-syntax-NameVariableInstance); } /* NameVariableInstance */
.chroma .w { color: var(--color-syntax-TextWhitespace); } /* TextWhitespace */
/* From web_src/less/codemirror/dark.less */
.CodeMirror.cm-s-default .cm-property, .CodeMirror.cm-s-paper .cm-property {
color: #a0cc75;
}
.CodeMirror.cm-s-default .cm-header, .CodeMirror.cm-s-paper .cm-header {
color: #9daccc;
}
.CodeMirror.cm-s-default .cm-quote, .CodeMirror.cm-s-paper .cm-quote {
color: #009900;
}
.CodeMirror.cm-s-default .cm-keyword, .CodeMirror.cm-s-paper .cm-keyword {
color: #cc8a61;
}
.CodeMirror.cm-s-default .cm-atom, .CodeMirror.cm-s-paper .cm-atom {
color: #ef5e77;
}
.CodeMirror.cm-s-default .cm-number, .CodeMirror.cm-s-paper .cm-number {
color: #ff5656;
}
.CodeMirror.cm-s-default .cm-def, .CodeMirror.cm-s-paper .cm-def {
color: #e4e4e4;
}
.CodeMirror.cm-s-default .cm-variable-2, .CodeMirror.cm-s-paper .cm-variable-2 {
color: #00bdbf;
}
.CodeMirror.cm-s-default .cm-variable-3, .CodeMirror.cm-s-paper .cm-variable-3 {
color: #008855;
}
.CodeMirror.cm-s-default .cm-comment, .CodeMirror.cm-s-paper .cm-comment {
color: #8e9ab3;
}
.CodeMirror.cm-s-default .cm-string, .CodeMirror.cm-s-paper .cm-string {
color: #a77272;
}
.CodeMirror.cm-s-default .cm-string-2, .CodeMirror.cm-s-paper .cm-string-2 {
color: #ff5500;
}
.CodeMirror.cm-s-default .cm-meta, .CodeMirror.cm-s-default .cm-qualifier, .CodeMirror.cm-s-paper .cm-meta, .CodeMirror.cm-s-paper .cm-qualifier {
color: #ffb176;
}
.CodeMirror.cm-s-default .cm-builtin, .CodeMirror.cm-s-paper .cm-builtin {
color: #b7c951;
}
.CodeMirror.cm-s-default .cm-bracket, .CodeMirror.cm-s-paper .cm-bracket {
color: #999977;
}
.CodeMirror.cm-s-default .cm-tag, .CodeMirror.cm-s-paper .cm-tag {
color: #f1d273;
}
.CodeMirror.cm-s-default .cm-attribute, .CodeMirror.cm-s-paper .cm-attribute {
color: #bfcc70;
}
.CodeMirror.cm-s-default .cm-hr, .CodeMirror.cm-s-paper .cm-hr {
color: #999999;
}
.CodeMirror.cm-s-default .cm-url, .CodeMirror.cm-s-paper .cm-url {
color: #c5cfd0;
}
.CodeMirror.cm-s-default .cm-link, .CodeMirror.cm-s-paper .cm-link {
color: #d8c792;
}
.CodeMirror.cm-s-default .cm-error, .CodeMirror.cm-s-paper .cm-error {
color: #dbdbeb;
}

View File

@@ -1,606 +0,0 @@
/* capytal dark theme */
:root * {
--is-dark-theme: true;
/* Colors. */
/* Some colors must be set as HEX, due to the monaco-editor no supporting
* conversion of non-hex colors. https: //github.com/microsoft/monaco-editor/issues/1815 */
color-scheme: dark;
--color-primary: var(--color-text-light);
--color-primary-hover: var(--color-text-light);
--color-primary-bg: var(--color-box-header);
--color-primary-text: var(--color-text);
--color-primary-contrast: #191919;
--color-primary-dark-1: #111111;
--color-primary-dark-2: #191919;
--color-primary-dark-3: #222222;
--color-primary-dark-4: #2a2a2a;
--color-primary-dark-5: #313131;
--color-primary-dark-6: #3a3a3a;
--color-primary-dark-7: #484848;
--color-primary-light-1: #eeeeee;
--color-primary-light-2: #b4b4b4;
--color-primary-light-3: #7b7b7b;
--color-primary-light-4: #6e6e6e;
--color-primary-light-5: #606060;
--color-primary-light-6: #484848;
--color-primary-light-7: #3a3a3a;
--color-primary-alpha-10: #eeeeee1a;
--color-primary-alpha-20: #eeeeee33;
--color-primary-alpha-30: #eeeeee4d;
--color-primary-alpha-40: #eeeeee66;
--color-primary-alpha-50: #eeeeee80;
--color-primary-alpha-60: #eeeeee99;
--color-primary-alpha-70: #eeeeeeb3;
--color-primary-alpha-80: #eeeeeecc;
--color-primary-alpha-90: #eeeeeee6;
--color-secondary: #2a2a2a00;
--color-secondary-bg: hsl(213, 16%, 20%);
--color-secondary-dark-1: hsl(213, 12%, 35%);
--color-secondary-dark-2: hsl(213, 12%, 40%);
--color-secondary-dark-3: hsl(213, 12%, 50%);
--color-secondary-dark-4: hsl(213, 12%, 55%);
--color-secondary-dark-5: hsl(213, 12%, 60%);
--color-secondary-dark-6: #9aa3af;
--color-secondary-dark-7: hsl(213, 12%, 69%);
--color-secondary-dark-8: hsl(213, 12%, 74%);
--color-secondary-dark-9: hsl(213, 11%, 79%);
--color-secondary-dark-10: hsl(213, 11%, 84%);
--color-secondary-dark-11: hsl(213, 12%, 89%);
--color-secondary-dark-12: hsl(213, 12%, 94%);
--color-secondary-dark-13: hsl(213, 14%, 98%);
--color-secondary-light-1: hsl(213, 12%, 24%);
--color-secondary-light-2: hsl(213, 12%, 18%);
--color-secondary-light-3: hsl(213, 11%, 12%);
--color-secondary-light-4: hsl(213, 8%, 6%);
--color-secondary-alpha-10: hsla(213, 12%, 31%, 0.1);
--color-secondary-alpha-20: hsla(213, 12%, 31%, 0.2);
--color-secondary-alpha-30: hsla(213, 12%, 31%, 0.3);
--color-secondary-alpha-40: hsla(213, 12%, 31%, 0.4);
--color-secondary-alpha-50: hsla(213, 12%, 31%, 0.5);
--color-secondary-alpha-60: hsla(213, 12%, 31%, 0.6);
--color-secondary-alpha-70: hsla(213, 12%, 31%, 0.7);
--color-secondary-alpha-80: hsla(213, 12%, 31%, 0.8);
--color-secondary-alpha-90: hsla(213, 12%, 31%, 0.9);
/* Colors for buttons, labels, etc. */
--color-red: hsl(0, 56.4%, 54.1%);
--color-red-light: hsl(0, 56.5%, 48.6%);
--color-red-dark-1: hsl(3deg, 75%, 59%);
--color-orange: hsl(23.8, 89%, 42.4%);
--color-orange-light: hsl(23.6, 88.7%, 38%);
--color-yellow: hsl(44.8, 97%, 40.6%);
--color-yellow-light: hsl(44.8, 96.8%, 37%);
--color-olive: hsl(67.5, 79.1%, 36%);
--color-olive-light: hsl(67.4, 79.3%, 32%);
--color-green: hsl(124deg 41% 35%);
--color-green-light: hsl(124deg 41% 45%);
--color-teal: hsl(177, 100%, 28.4%);
--color-teal-light: hsl(176.8, 100%, 26%);
--color-blue: hsl(206, 56%, 50.2%);
--color-blue-light: hsl(206, 55%, 45.3%);
--color-blue-dark-1: hsl(213deg, 89%, 64%);
--color-blue-dark-bg: hsla(213deg, 89%, 64%, .15);
--color-violet: hsl(259.2, 66.5%, 65%);
--color-violet-light: hsl(259.1, 66.2%, 58%);
--color-violet-dark-1: hsl(262deg, 66%, 66%);
--color-violet-dark-bg: hsla(262deg, 66%, 66%, .15);
--color-purple: hsl(285, 55.9%, 58%);
--color-purple-light: hsl(285, 55.6%, 52%);
--color-pink: hsl(326, 64.6%, 50.2%);
--color-pink-light: hsl(326, 64.5%, 45%);
--color-brown: hsl(23.4, 33%, 48%);
--color-brown-light: hsl(23.5, 33%, 43%);
--color-grey: hsl(213, 12%, 30%);
--color-grey-light: hsl(213, 12%, 40%);
--color-black: hsl(213, 21%, 15%);
--color-black-light: hsl(223, 20%, 13%);
--color-gold: hsl(47, 50%, 46.3%);
--color-white: #ffffff;
/* Color: diff */
--color-diff-added-word-bg: hsl(120, 25.5%, 32%);
--color-diff-removed-word-bg: hsl(0, 37%, 32%);
--color-diff-added-row-bg: hsla(123, 36%, 43%, 0.1);
--color-diff-added-row-linesnum-bg: hsla(123, 36%, 40%, 0.2);
--color-diff-added-row-border: hsl(134.4, 20%, 24%);
--color-diff-removed-row-bg: hsl(0, 20%, 20%);
--color-diff-removed-row-linesnum-bg: hsl(0, 25%, 23%);
--color-diff-removed-row-border: hsl(0, 19%, 33%);
--color-diff-moved-row-bg: hsl(59, 31%, 38.6%);
--color-diff-moved-row-border: hsl(69.2, 46%, 61%);
--color-diff-inactive: hsl(229, 14%, 13%);
/* Color: messages and status. */
--color-error-border: hsl(0, 42%, 44.1%);
--color-error-bg: hsl(0, 42.9%, 23%);
--color-error-bg-active: hsl(0, 27.3%, 37%);
--color-error-bg-hover: hsl(0, 33.3%, 30%);
--color-error-text: hsl(0, 79.3%, 88.6%);
--color-success-border: var(--color-success-text);
--color-success-bg: #0e1512;
--color-success-text: #3dd68c;
--color-warning-border: hsl(50, 100%, 37%);
--color-warning-bg: hsl(60, 9.4%, 20.8%);
--color-warning-text: hsl(44.7, 96.8%, 50.8%);
--color-info-border: hsl(210, 50%, 37.6%);
--color-info-bg: hsl(216.3, 33.3%, 22.4%);
--color-info-text: hsl(213deg, 89%, 64%);
--color-body: #090909;
--color-box-header: #121212;
--color-box-body: #101010;
--color-box-body-highlight: #111111;
--color-text: #b4b4b4;
--color-text-dark: #191919;
--color-text-light: #eeeeee;
--color-text-light-1: #eeeeee;
--color-text-light-2: #b4b4b4;
--color-text-light-3: #7b7b7b;
/* "color-light" is actually a subtle black in dark themes, to darken an element.
* against different backgrounds. */
--color-light: hsla(0, 0%, 0%, 0.2);
--color-light-mimic-enabled: rgba(0, 0, 0, calc(40 / 255 * 222 / 255 / var(--opacity-disabled)));
--color-light-border: hsla(0, 0%, 100%, 0.2);
--color-hover: hsla(213, 18%, 90%, .05);
--color-active: hsla(213, 18%, 90%, .1);
--color-menu: var(--color-box-body);
--color-card: transparent;
--color-markup-table-row: hsla(0, 0%, 100%, 0);
--color-markup-code-block: hsla(0, 0%, 100%, 0.1);
--color-markup-code-inline: hsla(0, 0%, 100%, 0.1);
/* --color-code-bg: var(--color-box-body); */
--color-code-line-bg-hover: hsl(213, 16%, 16%);
--color-code-sidebar-bg: hsl(213, 15%, 21%);
--color-tooltip-text: #fbfdff;
--color-tooltip-bg: #000017f0;
/* Navbar. */
--color-navbar: var(--color-box-header);
--color-nav-bg: var(--color-navbar);
--color-nav-hover-bg: hsla(0, 0%, 10%, .05); /* #191919 */
--color-header-wrapper: var(--color-navbar);
--color-navbar-transparent: hsla(213, 10%, 14%, 0);
--color-header-bar: var(--color-navbar);
/* Inputs. */
--color-input-text: var(--color-text-light);
--color-input-background: var(--color-box-header);
--color-input-toggle-background: var(--color-box-header);
--color-input-border: var(--color-text-dark);
--color-input-border-hover: var(--color-text-light-3);
--color-placeholder-text: var(--color-text-light-3);
--color-editor-line-highlight: var(--color-primary-light-5);
--color-project-board-bg: var(--color-secondary-light-2);
--color-highlight-fg: #87651e;
--color-highlight-bg: #352c1c;
--color-overlay-backdrop: #080808c0;
--color-button: #282d3;
--color-caret: var(--color-text);
--color-border: var(--color-secondary-alpha-40);
--color-reaction-bg: hsla(0, 0%, 100%, 0.1);
--color-reaction-active-bg: var(--color-primary-alpha-30);
--color-small-accent: var(--color-primary-light-5);
--color-active-line: hsl(53.6, 50.9%, 22%);
/* Labels. e.g. issues count indicator in repo tabs. */
--color-label-text: var(--color-text-light);
--color-label-bg: var(--color-secondary-alpha-60);
--color-label-active-bg: hsl(220, 10.6%, 33.3%);
/* Footer. */
--color-footer: var(--color-nav-bg);
--color-footer-text: var(--color-text-light-3);
--color-footer-links: var(--color-text-light-1);
}
:root {
--icon-check-square-bold: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cpath fill='currentColor' fill-rule='evenodd' d='M12 22c-4.714 0-7.071 0-8.536-1.465C2 19.072 2 16.714 2 12s0-7.071 1.464-8.536C4.93 2 7.286 2 12 2s7.071 0 8.535 1.464C22 4.93 22 7.286 22 12s0 7.071-1.465 8.535C19.072 22 16.714 22 12 22m4.03-13.03a.75.75 0 0 1 0 1.06l-5 5a.75.75 0 0 1-1.06 0l-2-2a.75.75 0 1 1 1.06-1.06l1.47 1.47l4.47-4.47a.75.75 0 0 1 1.06 0' clip-rule='evenodd'/%3E%3C/svg%3E");
--icon-minus-quare-line-duotone: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='currentColor' stroke-width='1.5'%3E%3Cpath d='M2 12c0-4.714 0-7.071 1.464-8.536C4.93 2 7.286 2 12 2s7.071 0 8.535 1.464C22 4.93 22 7.286 22 12s0 7.071-1.465 8.535C19.072 22 16.714 22 12 22s-7.071 0-8.536-1.465C2 19.072 2 16.714 2 12Z' opacity='.5'/%3E%3Cpath stroke-linecap='round' d='M15 12H9'/%3E%3C/g%3E%3C/svg%3E");
--icon-stop-circle-bold: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cpath fill='currentColor' fill-rule='evenodd' d='M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2S2 6.477 2 12s4.477 10 10 10M8.586 8.586C8 9.172 8 10.114 8 12s0 2.828.586 3.414S10.114 16 12 16s2.828 0 3.414-.586S16 13.886 16 12s0-2.828-.586-3.414S13.886 8 12 8s-2.828 0-3.414.586' clip-rule='evenodd'/%3E%3C/svg%3E");
--icon-stop-circle-line-duotone: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='currentColor' stroke-width='1.5'%3E%3Ccircle cx='12' cy='12' r='10' opacity='.5'/%3E%3Cpath d='M8 12c0-1.886 0-2.828.586-3.414S10.114 8 12 8s2.828 0 3.414.586S16 10.114 16 12s0 2.828-.586 3.414S13.886 16 12 16s-2.828 0-3.414-.586S8 13.886 8 12Z'/%3E%3C/g%3E%3C/svg%3E");
}
/* Custom styling of individual elements.
* Using !important is bad, but unfortunately gitea does it already in _base.less. */
/* Primary button. */
.ui.primary.button,
.ui.primary.buttons .button {
background-color: var(--color-primary-bg) !important;
border-color: var(--color-primary-text) !important;
color: var(--color-primary-text) !important;
}
a.ui.primary.label:hover,
.ui.primary.button:hover,
.ui.primary.buttons .button:hover {
background-color: var(--color-primary-hover) !important;
color: var(--color-primary-contrast) !important;
}
.ui.primary.label {
background-color: var(--color-primary-bg) !important;
border-color: var(--color-primary-bg) !important;
color: var(--color-primary) !important;
}
/* Primary Checkboxes */
.ui.checkbox input[type="checkbox"] {
display: none
}
.ui.checkbox input[type="checkbox"] + label::before {
content: "";
width: 1.4rem;
height: 1.4rem;
top: -0.1rem;
left: -2.1rem;
-webkit-mask: var(--icon-minus-quare-line-duotone) no-repeat;
mask: var(--icon-minus-quare-line-duotone) no-repeat;
-webkit-mask-size: 100% 100%;
mask-size: 100% 100%;
background-color: currentColor;
color: var(--color-primary-text);
position: absolute;
}
.ui.checkbox input[type="checkbox"]:checked + label::before {
-webkit-mask: var(--icon-check-square-bold) no-repeat;
mask: var(--icon-check-square-bold) no-repeat;
}
.ui.radio input[type="radio"] {
display: none
}
.ui.radio input[type="radio"] + label::before {
content: "";
width: 1.4rem;
height: 1.4rem;
top: -0.1rem;
left: -2.1rem;
-webkit-mask: var(--icon-stop-circle-line-duotone) no-repeat;
mask: var(--icon-stop-circle-line-duotone) no-repeat;
-webkit-mask-size: 100% 100%;
mask-size: 100% 100%;
background-color: currentColor;
color: var(--color-primary-text);
position: absolute;
}
.ui.radio input[type="radio"]:checked + label::before {
-webkit-mask: var(--icon-stop-circle-bold) no-repeat;
mask: var(--icon-stop-circle-bold) no-repeat;
}
.markup input[type="checkbox"] {
width: 1.1rem;
height: 1.1rem;
-webkit-mask: var(--icon-minus-quare-line-duotone) no-repeat;
mask: var(--icon-minus-quare-line-duotone) no-repeat;
-webkit-mask-size: 100% 100%;
mask-size: 100% 100%;
background-color: currentColor;
color: var(--color-primary-text);
position: absolute;
margin-top: 0.25rem !important;
}
.markup input[type="checkbox"]:checked {
-webkit-mask: var(--icon-check-square-bold) no-repeat;
mask: var(--icon-check-square-bold) no-repeat;
}
/* Tabs */
.ui.secondary.pointing.menu .active.item,
.ui.secondary.pointing.menu .active.item:hover,
.ui.secondary.pointing.menu .active.item:focus,
.ui.secondary.pointing.menu .dropdown.item:hover,
.ui.secondary.pointing.menu .dropdown.item:focus {
color: var(--color-primary-text);
}
/* (from arc-green)
* invert emojis that are hard to read otherwise */
.emoji[aria-label="check mark"],
.emoji[aria-label="currency exchange"],
.emoji[aria-label="TOP arrow"],
.emoji[aria-label="END arrow"],
.emoji[aria-label="ON! arrow"],
.emoji[aria-label="SOON arrow"],
.emoji[aria-label="heavy dollar sign"],
.emoji[aria-label="copyright"],
.emoji[aria-label="registered"],
.emoji[aria-label="trade mark"],
.emoji[aria-label="multiply"],
.emoji[aria-label="plus"],
.emoji[aria-label="minus"],
.emoji[aria-label="divide"],
.emoji[aria-label="curly loop"],
.emoji[aria-label="double curly loop"],
.emoji[aria-label="wavy dash"],
.emoji[aria-label="paw prints"],
.emoji[aria-label="musical note"],
.emoji[aria-label="musical notes"] {
filter: invert(100%) hue-rotate(180deg);
}
/* Code syntax highlighting. */
::selection {
background: var(--color-dark-3) !important;
color: var(--color-light-1) !important;
}
.tag-code .code-inner {
opacity: .5;
}
.same-code .lines-num.lines-num-old,
.same-code .lines-num.lines-num-new {
color: var(--color-text-light-3) !important;
}
.add-code .lines-num.lines-num-old,
.add-code .lines-num.lines-num-new {
background-color: var(--color-diff-added-row-linesnum-bg);
color: var(--color-text-dark-2) !important;
}
.del-code .lines-num.lines-num-old,
.diff-unified .del-code .lines-num.lines-num-old,
.del-code .lines-num.lines-num-new {
background-color: var(--color-diff-removed-row-linesnum-bg);
color: var(--color-text-dark-2) !important;
}
.repository .diff-file-box .file-body.file-code table tbody tr.add-code:hover .lines-num,
.repository .diff-file-box .file-body.file-code table tbody tr.del-code:hover .lines-num,
.repository .diff-file-box .file-body.file-code table tbody tr.same-code:hover .lines-num,
.repository .diff-file-box .file-body.file-code table tbody .diff-unified tr:hover .del-code .lines-num {
color: var(--color-text-dark) !important;
}
.repository .diff-file-box .file-body.file-code table tbody tr.same-code:hover .lines-num {
color: var(--color-text-dark-2) !important;
}
.repository .diff-file-box .file-body.file-code table tbody tr.same-code:hover .lines-code,
.repository .diff-file-box .file-body.file-code table tbody tr.same-code:hover .lines-num,
.repository .diff-file-box .file-body.file-code table tbody tr.same-code:hover .lines-type-marker {
background-color: var(--color-code-line-bg-hover) !important;
}
/* From web_src/less/themes/chroma/dark.less */
:root {
--color-syntax-NameBuiltinPseudo: #fabd2f;
--color-syntax-Comment: #777e94;
--color-syntax-CommentSingle: #777e94;
--color-syntax-CommentHashbang: #777e94;
--color-syntax-CommentMultiline: #777e94;
--color-syntax-CommentPreproc: #8ec07c;
--color-syntax-CommentPreprocFile: #649bc4;
--color-syntax-CommentSpecial: #9075cd;
--color-syntax-LiteralStringDelimiter: #649bc4;
--color-syntax-GenericDeleted-text: #fff;
--color-syntax-GenericDeleted-bg: #5f3737;
--color-syntax-GenericEmph: #ddee30;
--color-syntax-GenericHeading: #ffaa10;
--color-syntax-GenericInserted-text: #fff;
--color-syntax-GenericInserted-bg: #3a523a;
--color-syntax-GenericOutput: #777e94;
--color-syntax-GenericPrompt: #ebdbb2;
--color-syntax-GenericError: #ff4433;
--color-syntax-GenericStrong: #ebdbb2;
--color-syntax-GenericTraceback: #ff7540;
--color-syntax-GenericSubheading: #b8bb26;
--color-syntax-LineHighlight: #3f424d;
--color-syntax-LiteralNumberIntegerLong: #649bc4;
--color-syntax-Keyword: #f47067;
--color-syntax-KeywordConstant: #649bc4;
--color-syntax-KeywordDeclaration: #ff7540;
--color-syntax-KeywordNamespace: #ffaa10;
--color-syntax-KeywordPseudo: #5f8700;
--color-syntax-KeywordReserved: #ff7540;
--color-syntax-KeywordType: #fabd2f;
--color-syntax-LineNumbers: #7f8699;
--color-syntax-LineNumbersTable: #7f8699;
--color-syntax-LiteralNumber: #649bc4;
--color-syntax-LiteralNumberBin: #649bc4;
--color-syntax-LiteralNumberFloat: #649bc4;
--color-syntax-LiteralNumberHex: #649bc4;
--color-syntax-LiteralNumberInteger: #649bc4;
--color-syntax-LiteralNumberOct: #649bc4;
--color-syntax-Name: #adbac7;
--color-syntax-NameAttribute: #b8bb26;
--color-syntax-NameBuiltin: #fabd2f;
--color-syntax-NameClass: #f69d50;
--color-syntax-NameDecorator: #dcbdfb;
--color-syntax-NameException: #ff7540;
--color-syntax-NameFunction: #dcbdfb;
--color-syntax-NameEntity: #fabd2f;
--color-syntax-NameLabel: #ff7540;
--color-syntax-NameNamespace: #ffaa10;
--color-syntax-NameConstant: #649bc4;
--color-syntax-NameTag: #ff7540;
--color-syntax-NameVariable: #ebdbb2;
--color-syntax-NameOther: #b6bac5;
--color-syntax-Operator: #6cb6ff;
--color-syntax-OperatorWord: #6cb6ff;
--color-syntax-Punctuation: #d2d4db;
--color-syntax-LiteralString: #b8bb26;
--color-syntax-LiteralStringSingle: #96d0ff;
--color-syntax-LiteralStringDouble: #96d0ff;
--color-syntax-LiteralStringAffix: #649bc4;
--color-syntax-LiteralStringBacktick: #b8bb26;
--color-syntax-LiteralStringChar: #649bc4;
--color-syntax-LiteralStringDoc: #777e94;
--color-syntax-LiteralStringEscape: #ff7540;
--color-syntax-LiteralStringHeredoc: #649bc4;
--color-syntax-LiteralStringInterpol: #ffaa10;
--color-syntax-LiteralStringRegex: #9075cd;
--color-syntax-LiteralStringSymbol: #ff7540;
--color-syntax-LiteralStringOther: #ffaa10;
--color-syntax-NameVariableClass: #ff7540;
--color-syntax-NameVariableGlobal: #ffaa10;
--color-syntax-NameVariableInstance: #ffaa10;
--color-syntax-TextWhitespace: #7f8699;
}
.chroma .bp { color: var(--color-syntax-NameBuiltinPseudo) } /* NameBuiltinPseudo */
.chroma .c { color: var(--color-syntax-Comment) } /* Comment */
.chroma .c1 { color: var(--color-syntax-CommentSingle) } /* CommentSingle */
.chroma .ch { color: var(--color-syntax-CommentHashbang) } /* CommentHashbang */
.chroma .cm { color: var(--color-syntax-CommentMultiline) } /* CommentMultiline */
.chroma .cp { color: var(--color-syntax-CommentPreproc) } /* CommentPreproc */
.chroma .cpf { color: var(--color-syntax-CommentPreprocFile) } /* CommentPreprocFile */
.chroma .cs { color: var(--color-syntax-CommentSpecial) } /* CommentSpecial */
.chroma .dl { color: var(--color-syntax-LiteralStringDelimiter) } /* LiteralStringDelimiter */
.chroma .gd { color: var(--color-syntax-GenericDeleted-text); background-color: var(--color-syntax-GenericDeleted-bg); } /* GenericDeleted */
.chroma .ge { color: var(--color-syntax-GenericEmph); } /* GenericEmph */
.chroma .gh { color: var(--color-syntax-GenericHeading); } /* GenericHeading */
.chroma .gi { color: var(--color-syntax-GenericInserted-text); background-color: var(--color-syntax-GenericInserted-bg); } /* GenericInserted */
.chroma .go { color: var(--color-syntax-GenericOutput); } /* GenericOutput */
.chroma .gp { color: var(--color-syntax-GenericPrompt); } /* GenericPrompt */
.chroma .gr { color: var(--color-syntax-GenericError); } /* GenericError */
.chroma .gs { color: var(--color-syntax-GenericStrong); } /* GenericStrong */
.chroma .gt { color: var(--color-syntax-GenericTraceback); } /* GenericTraceback */
.chroma .gu { color: var(--color-syntax-GenericSubheading); } /* GenericSubheading */
.chroma .hl { background-color: var(--color-syntax-LineHighlight); } /* LineHighlight */
.chroma .il { color: var(--color-syntax-LiteralNumberIntegerLong); } /* LiteralNumberIntegerLong */
.chroma .k { color: var(--color-syntax-Keyword); } /* Keyword */
.chroma .kc { color: var(--color-syntax-KeywordConstant); } /* KeywordConstant */
.chroma .kd { color: var(--color-syntax-KeywordDeclaration); } /* KeywordDeclaration */
.chroma .kn { color: var(--color-syntax-KeywordNamespace); } /* KeywordNamespace */
.chroma .kp { color: var(--color-syntax-KeywordPseudo); } /* KeywordPseudo */
.chroma .kr { color: var(--color-syntax-KeywordReserved); } /* KeywordReserved */
.chroma .kt { color: var(--color-syntax-KeywordType); } /* KeywordType */
.chroma .ln { color: var(--color-syntax-LineNumbers); } /* LineNumbers */
.chroma .lnt { color: var(--color-syntax-LineNumbersTable); } /* LineNumbersTable */
.chroma .m { color: var(--color-syntax-LiteralNumber); } /* LiteralNumber */
.chroma .mb { color: var(--color-syntax-LiteralNumberBin); } /* LiteralNumberBin */
.chroma .mf { color: var(--color-syntax-LiteralNumberFloat); } /* LiteralNumberFloat */
.chroma .mh { color: var(--color-syntax-LiteralNumberHex); } /* LiteralNumberHex */
.chroma .mi { color: var(--color-syntax-LiteralNumberInteger); } /* LiteralNumberInteger */
.chroma .mo { color: var(--color-syntax-LiteralNumberOct); } /* LiteralNumberOct */
.chroma .n { color: var(--color-syntax-Name); } /* Name */
.chroma .na { color: var(--color-syntax-NameAttribute); } /* NameAttribute */
.chroma .nb { color: var(--color-syntax-NameBuiltin); } /* NameBuiltin */
.chroma .nc { color: var(--color-syntax-NameClass); } /* NameClass */
.chroma .nd { color: var(--color-syntax-NameDecorator); } /* NameDecorator */
.chroma .ne { color: var(--color-syntax-NameException); } /* NameException */
.chroma .nf { color: var(--color-syntax-NameFunction); } /* NameFunction */
.chroma .ni { color: var(--color-syntax-NameEntity); } /* NameEntity */
.chroma .nl { color: var(--color-syntax-NameLabel); } /* NameLabel */
.chroma .nn { color: var(--color-syntax-NameNamespace); } /* NameNamespace */
.chroma .no { color: var(--color-syntax-NameConstant); } /* NameConstant */
.chroma .nt { color: var(--color-syntax-NameTag); } /* NameTag */
.chroma .nv { color: var(--color-syntax-NameVariable); } /* NameVariable */
.chroma .nx { color: var(--color-syntax-NameOther); } /* NameOther */
.chroma .o { color: var(--color-syntax-Operator); } /* Operator */
.chroma .ow { color: var(--color-syntax-OperatorWord); } /* OperatorWord */
.chroma .p { color: var(--color-syntax-Punctuation); } /* Punctuation */
.chroma .s { color: var(--color-syntax-LiteralString); } /* LiteralString */
.chroma .s1 { color: var(--color-syntax-LiteralStringSingle); } /* LiteralStringSingle */
.chroma .s2 { color: var(--color-syntax-LiteralStringDouble); } /* LiteralStringDouble */
.chroma .sa { color: var(--color-syntax-LiteralStringAffix); } /* LiteralStringAffix */
.chroma .sb { color: var(--color-syntax-LiteralStringBacktick); } /* LiteralStringBacktick */
.chroma .sc { color: var(--color-syntax-LiteralStringChar); } /* LiteralStringChar */
.chroma .sd { color: var(--color-syntax-LiteralStringDoc); } /* LiteralStringDoc */
.chroma .se { color: var(--color-syntax-LiteralStringEscape); } /* LiteralStringEscape */
.chroma .sh { color: var(--color-syntax-LiteralStringHeredoc); } /* LiteralStringHeredoc */
.chroma .si { color: var(--color-syntax-LiteralStringInterpol); } /* LiteralStringInterpol */
.chroma .sr { color: var(--color-syntax-LiteralStringRegex); } /* LiteralStringRegex */
.chroma .ss { color: var(--color-syntax-LiteralStringSymbol); } /* LiteralStringSymbol */
.chroma .sx { color: var(--color-syntax-LiteralStringOther); } /* LiteralStringOther */
.chroma .vc { color: var(--color-syntax-NameVariableClass); } /* NameVariableClass */
.chroma .vg { color: var(--color-syntax-NameVariableGlobal); } /* NameVariableGlobal */
.chroma .vi { color: var(--color-syntax-NameVariableInstance); } /* NameVariableInstance */
.chroma .w { color: var(--color-syntax-TextWhitespace); } /* TextWhitespace */
/* From web_src/less/codemirror/dark.less */
.CodeMirror.cm-s-default .cm-property, .CodeMirror.cm-s-paper .cm-property {
color: #a0cc75;
}
.CodeMirror.cm-s-default .cm-header, .CodeMirror.cm-s-paper .cm-header {
color: #9daccc;
}
.CodeMirror.cm-s-default .cm-quote, .CodeMirror.cm-s-paper .cm-quote {
color: #009900;
}
.CodeMirror.cm-s-default .cm-keyword, .CodeMirror.cm-s-paper .cm-keyword {
color: #cc8a61;
}
.CodeMirror.cm-s-default .cm-atom, .CodeMirror.cm-s-paper .cm-atom {
color: #ef5e77;
}
.CodeMirror.cm-s-default .cm-number, .CodeMirror.cm-s-paper .cm-number {
color: #ff5656;
}
.CodeMirror.cm-s-default .cm-def, .CodeMirror.cm-s-paper .cm-def {
color: #e4e4e4;
}
.CodeMirror.cm-s-default .cm-variable-2, .CodeMirror.cm-s-paper .cm-variable-2 {
color: #00bdbf;
}
.CodeMirror.cm-s-default .cm-variable-3, .CodeMirror.cm-s-paper .cm-variable-3 {
color: #008855;
}
.CodeMirror.cm-s-default .cm-comment, .CodeMirror.cm-s-paper .cm-comment {
color: #8e9ab3;
}
.CodeMirror.cm-s-default .cm-string, .CodeMirror.cm-s-paper .cm-string {
color: #a77272;
}
.CodeMirror.cm-s-default .cm-string-2, .CodeMirror.cm-s-paper .cm-string-2 {
color: #ff5500;
}
.CodeMirror.cm-s-default .cm-meta, .CodeMirror.cm-s-default .cm-qualifier, .CodeMirror.cm-s-paper .cm-meta, .CodeMirror.cm-s-paper .cm-qualifier {
color: #ffb176;
}
.CodeMirror.cm-s-default .cm-builtin, .CodeMirror.cm-s-paper .cm-builtin {
color: #b7c951;
}
.CodeMirror.cm-s-default .cm-bracket, .CodeMirror.cm-s-paper .cm-bracket {
color: #999977;
}
.CodeMirror.cm-s-default .cm-tag, .CodeMirror.cm-s-paper .cm-tag {
color: #f1d273;
}
.CodeMirror.cm-s-default .cm-attribute, .CodeMirror.cm-s-paper .cm-attribute {
color: #bfcc70;
}
.CodeMirror.cm-s-default .cm-hr, .CodeMirror.cm-s-paper .cm-hr {
color: #999999;
}
.CodeMirror.cm-s-default .cm-url, .CodeMirror.cm-s-paper .cm-url {
color: #c5cfd0;
}
.CodeMirror.cm-s-default .cm-link, .CodeMirror.cm-s-paper .cm-link {
color: #d8c792;
}
.CodeMirror.cm-s-default .cm-error, .CodeMirror.cm-s-paper .cm-error {
color: #dbdbeb;
}

View File

@@ -1,54 +0,0 @@
{
config,
pkgs,
...
}: let
secrets = config.spacestation-secrets.lesser;
garageCfg = secrets.capytal.services.garage;
in {
imports = [];
services.garage.enable = true;
services.garage.package = pkgs.garage_1_x;
services.garage.settings = {
db_engine = "sqlite";
replication_factor = 1;
rpc_bind_addr = "[::]:${toString garageCfg.rpc.port}";
rpc_public_addr = "127.0.0.1:${toString garageCfg.rpc.port}";
rpc_secret = garageCfg.rpc.token;
s3_api = {
s3_region = "garage";
api_bind_addr = "[::]:${toString garageCfg.api.port}";
root_domain = ".s3.garage.localhost";
};
s3_web = {
bind_addr = "[::]:${toString garageCfg.web.port}";
root_domain = ".web.garage.localhost";
index = "index.html";
};
k2v_api = {
api_bind_addr = "[::]:${toString garageCfg.k2v.port}";
};
admin = {
api_bind_addr = "[::]:${toString garageCfg.admin.port}";
admin_token = garageCfg.admin.token;
metrics_token = garageCfg.admin.metrics_token;
};
};
networking.firewall.allowedTCPPorts = [
garageCfg.rpc.port
garageCfg.api.port
garageCfg.web.port
garageCfg.k2v.port
garageCfg.admin.port
];
environment.systemPackages = with pkgs; [awscli2];
}

View File

@@ -1,50 +0,0 @@
{config, ...}: {
imports = [];
services.caddy.enable = true;
services.caddy.virtualHosts = let
forgejo-port = config.services.forgejo.settings.server.HTTP_PORT;
in {
":${toString (forgejo-port + 10)}" = {
extraConfig = ''
reverse_proxy http://localhost${config.services.anubis.instances."forgejo".bind} {
header_up X-Real-Ip {remote_host}
}
'';
};
};
services.anubis.enable = true;
services.anubis.instances = {
"forgejo" = let
forgejo-port = config.services.forgejo.settings.server.HTTP_PORT;
in {
bind = ":${toString (forgejo-port + 20)}";
metricsBind = ":${toString (forgejo-port + 30)}";
serveRobotsTxt = true;
target = "http://localhost:${toString forgejo-port}";
ed25519PrivateKeyHexFile = config.sops.secrets."forgejo/anubis/hexFile".path;
};
};
virtualisation.oci-containers.containers.cloudflare-tunnel = {
image = "cloudflare/cloudflared:latest";
autoStart = true;
extraOptions = [
"--network=host"
];
cmd = [
"tunnel"
"--no-autoupdate"
"run"
];
environmentFiles = [
config.sops.secrets."cloudflared/tunnel-env".path
];
};
networking.firewall.allowedTCPPorts = [
80
433
];
}

View File

@@ -1,30 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
secrets = config.spacestation-secrets.lesser;
sqldCfg = secrets.capytal.services.sqld;
in {
imports = [];
environment.systemPackages = [
pkgs.sqld
];
systemd.services.sqld = with lib; let
sqld = escapeShellArg (getExe' pkgs.sqld "sqld");
in {
after = ["network.target" "network-online.target"];
wants = ["network.target" "network-online.target"];
wantedBy = ["multi-user.target"];
serviceConfig = {
ExecStart = "${sqld} --http-listen-addr ${secrets.device-ip}:${toString sqldCfg.http-port} --grpc-listen-addr ${secrets.device-ip}:${toString sqldCfg.grpc-port}";
};
};
networking.firewall.allowedTCPPorts = [
8080
];
}

View File

@@ -2,7 +2,10 @@
config,
inputs,
...
}: {
}: let
cfg-capytal = config.services.capytalcc.web;
cfg-keikos = config.services.keikos.web;
in {
imports = [
inputs.capytalcc.nixosModules.default
inputs.keikoswork.nixosModules.default
@@ -10,22 +13,22 @@
services.capytalcc.web = {
enable = true;
port = 7010;
port = 9900;
};
services.caddy.virtualHosts.":${toString (config.services.capytalcc.web.port + 1)}" = {
services.caddy.virtualHosts.":${toString (cfg-capytal.port + 1)}" = {
extraConfig = ''
reverse_proxy http://localhost:${toString config.services.capytalcc.web.port}
reverse_proxy http://localhost:${toString cfg-capytal.port}
'';
};
services.keikos.web = {
enable = true;
port = 7030;
port = 9910;
envFile = config.sops.secrets."keiko/env-file".path;
};
services.caddy.virtualHosts.":${toString (config.services.keikos.web.port + 1)}" = {
services.caddy.virtualHosts.":${toString (cfg-keikos.port + 1)}" = {
extraConfig = ''
reverse_proxy http://localhost:${toString config.services.keikos.web.port}
reverse_proxy http://localhost:${toString cfg-keikos.port}
'';
};
}

View File

@@ -1,6 +1,5 @@
{...}: {
imports = [
./adguardhome.nix
./tailscale.nix
];
}

18
common/tailscale.nix Normal file
View File

@@ -0,0 +1,18 @@
{
config,
lib,
...
}:
with lib; {
services.tailscale = {
enable = true;
extraUpFlags = [
"--advertise-exit-node"
];
useRoutingFeatures = "both";
permitCertUid = mkIf config.services.caddy.enable "caddy";
};
boot.kernel.sysctl."net.ipv4.ip_forward" = mkDefault 1;
boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = mkDefault 1;
}

View File

@@ -1,26 +1,22 @@
{
inputs,
config,
pkgs,
...
}: {
imports = [
./hardware-configuration.nix
./services
./modules
./secrets.nix
./capytal
./abaduh
./common
./secrets.nix
./hardware-configuration.nix
];
programs.nh.enable = true;
programs.nh.flake = "/home/guz/nix";
profiles.locale.enable = true;
# User settings
programs.zsh.enable = true;
programs.mosh.enable = true;
programs.mosh.openFirewall = true;
users.users."guz" = {
shell = pkgs.zsh;
hashedPasswordFile = builtins.toString config.sops.secrets."guz/password".path;
@@ -30,8 +26,20 @@
openssh.authorizedKeys.keyFiles = [
./.ssh/guz.pub
];
packages = with pkgs;
[
libinput
]
++ (with inputs.dot013-nix.packages.${pkgs.system}.devkit; [
git
lazygit
starship
zellij
zsh
]);
};
# GnuPG
programs.gnupg.agent = {
enable = true;
pinentryPackage = pkgs.pinentry-gnome3;
@@ -40,41 +48,62 @@
};
};
environment.systemPackages = with pkgs; [
git
libinput
];
security.rtkit.enable = true;
# Nix commands
nix.settings.experimental-features = ["nix-command" "flakes"];
nix.package = pkgs.nixVersions.nix_2_21;
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 10d";
};
programs.nh.enable = true;
programs.nh.flake = "/home/guz/nix";
# Locale settings
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = rec {
LC_ADDRESS = "pt_BR.UTF-8";
LC_IDENTIFICATION = LC_ADDRESS;
LC_MEASUREMENT = LC_ADDRESS;
LC_MONETARY = LC_ADDRESS;
LC_NAME = LC_ADDRESS;
LC_NUMERIC = LC_ADDRESS;
LC_PAPER = LC_ADDRESS;
LC_TELEPHONE = LC_ADDRESS;
LC_TIME = LC_ADDRESS;
};
console.keyMap = "br-abnt2";
time.timeZone = "America/Sao_Paulo";
# Networking
networking = {
networkmanager.enable = true;
hostName = "spacestation";
wireless.enable = false;
dhcpcd.enable = true;
defaultGateway = "${config.spacestation-secrets.lesser.devices.defaultGateway}";
defaultGateway = "192.168.0.1";
interfaces."eno1".ipv4.addresses = [
{
address = "${config.spacestation-secrets.lesser.devices.spacestation}";
address = "192.168.0.110";
prefixLength = 24;
}
];
nameservers = ["9.9.9.9"];
};
# SSH/Mosh configuration
services.openssh.enable = true;
services.openssh.settings = {
PasswordAuthentication = false;
PermitRootLogin = "forced-commands-only";
};
security.rtkit.enable = true;
programs.mosh.enable = true;
programs.mosh.openFirewall = true;
# Bootloader.
boot.loader.systemd-boot.enable = true;

View File

@@ -1,61 +0,0 @@
{
config,
lib,
...
}: let
cfg = config.services.adguardhome;
in {
imports = [];
options.services.adguardhome = with lib;
with lib.types; {
dns.filters = mkOption {
type = attrsOf (submodule ({lib, ...}: {
options = {
name = mkOption {
type = nullOr str;
default = null;
};
url = mkOption {
type = str;
};
enabled = mkOption {
type = bool;
default = true;
};
};
}));
default = {};
};
dns.rewrites = mkOption {
type = attrsOf str;
default = {};
};
};
config = with lib;
mkIf cfg.enable {
networking.firewall.allowedTCPPorts = [53];
networking.firewall.allowedUDPPorts = [53 51820];
services.adguardhome = {
settings = {
filtering.rewrites = builtins.attrValues (builtins.mapAttrs
(from: to: {
domain = from;
answer = to;
})
cfg.dns.rewrites);
filters = attrValues (mapAttrs
(id: list: {
name =
if isNull list.name
then id
else list.name;
ID = id;
url = list.url;
enabled = list.enabled;
})
cfg.dns.filters);
};
};
};
}

View File

@@ -1,155 +0,0 @@
{
config,
lib,
pkgs-unstable,
...
}: let
cfg = config.services.anubis;
in {
options.services.anubis = with lib; {
enable = mkEnableOption "Enable anubis systemd services";
user = mkOption {
type = with types; str;
default = "anubis";
};
group = mkOption {
type = with types; str;
default = cfg.user;
};
package = mkOption {
type = with types; package;
default = pkgs-unstable.callPackage ./derivation.nix {}; # it uses Golang 1.24.1
};
instances = mkOption {
type = with types;
attrsOf (submodule ({
config,
lib,
...
}: {
options = with lib; {
user = mkOption {
type = with types; str;
default = cfg.user;
};
group = mkOption {
type = with types; str;
default = cfg.group;
};
bind = mkOption {
type = with types; str;
default = ":8923";
};
bindNetwork = mkOption {
type = with types; (enum ["tcp" "tcp4" "tcp6" "unix" "unixpacket"]);
default = "tcp";
};
cookieDomain = mkOption {
type = with types; str;
default = "";
};
cookiePartitioned = mkOption {
type = with types; bool;
default = false;
};
difficulty = mkOption {
type = with types; ints.unsigned;
default = 5;
};
ed25519PrivateKeyHex = mkOption {
type = with types; str;
default = "";
};
ed25519PrivateKeyHexFile = mkOption {
type = with types; (either str path);
default = "";
};
metricsBind = mkOption {
type = with types; str;
default = ":9090";
};
metricsBindNetwork = mkOption {
type = with types; (enum ["tcp" "tcp4" "tcp6" "unix" "unixpacket"]);
default = "tcp";
};
socketMode = mkOption {
type = with types; nullOr ints.unsigned;
default = null;
};
policyFName = mkOption {
type = with types; str;
default = "";
};
serveRobotsTxt = mkOption {
type = with types; bool;
default = false;
};
target = mkOption {
type = with types; str;
default = "http://localhost:3923";
};
useRemoteAddress = mkOption {
type = with types; bool;
default = false;
};
};
}));
default = {};
};
};
config = lib.mkIf cfg.enable {
systemd.services = with lib;
with lib.attrsets;
mapAttrs' (n: v:
nameValuePair "anubis-${n}" {
after = ["network.target"];
wantedBy = ["multi-user.target"];
environment = {
BIND = toString v.bind;
BIND_NETWORK = toString v.bindNetwork;
COOKIE_DOMAIN = toString v.cookieDomain;
COOKIE_PARTITIONED = toString v.cookiePartitioned;
DIFFICULTY = toString v.difficulty;
ED25519_PRIVATE_KEY_HEX = toString v.ed25519PrivateKeyHex;
ED25519_PRIVATE_KEY_HEX_FILE = toString v.ed25519PrivateKeyHexFile;
METRICS_BIND = toString v.metricsBind;
METRICS_BIND_NETWORK = toString v.metricsBindNetwork;
SOCKET_MODE = mkIf (!isNull v.socketMode) (toString v.socketMode);
POLICY_FNAME = toString v.policyFName;
SERVE_ROBOTS_TXT = toString v.serveRobotsTxt;
TARGET = toString v.target;
USE_REMOTE_ADDRESS = toString v.useRemoteAddress;
};
serviceConfig = {
Type = "simple";
User = v.user;
Group = v.user;
ExecStart = "${escapeShellArg (getExe cfg.package)}";
Restart = "on-success";
};
})
cfg.instances;
users.users = with lib.attrsets;
(mapAttrs' (n: v:
nameValuePair (v.user) {
isSystemUser = true;
group = v.group;
})
cfg.instances)
// {
"${cfg.user}" = {
isSystemUser = true;
group = cfg.group;
};
};
users.groups = with lib.attrsets;
(mapAttrs' (n: v:
nameValuePair (v.user) {})
cfg.instances)
// {
"${cfg.group}" = {};
};
};
}

View File

@@ -1,25 +0,0 @@
{
buildGoModule,
fetchFromGitHub,
...
}:
buildGoModule {
name = "Anubis";
pname = "anubis";
version = "1.15.2";
src = fetchFromGitHub {
owner = "TecharoHQ";
repo = "anubis";
rev = "35e0a8179a70678708ceb90c9a285940f99b9774";
hash = "sha256-5OqpmuRTrM+hseIhR2sTb+K01Co6X+Rhb6mN+U54NAI=";
};
vendorHash = "sha256-Rcra5cu7zxGm2LhL2x9Kd3j/uQaEb8OOh/j5Rhh8S1k=";
doCheck = false;
meta = {
mainProgram = "anubis";
};
}

View File

@@ -1,11 +0,0 @@
{...}: {
imports = [
./adguardhome.nix
./anubis
./forgejo
./locales.nix
./medama.nix
./nh
./tailscale.nix
];
}

View File

@@ -154,23 +154,23 @@ in {
virtualisation.docker.enable = mkIf cfg.actions.enable (mkDefault true);
virtualisation.oci-containers.backend = mkIf cfg.actions.enable (mkDefault "docker");
services.gitea-actions-runner = mkIf cfg.actions.enable {
package =
if config.services.gitea.enable
then pkgs.gitea-actions-runner
else pkgs.forgejo-actions-runner;
instances."forgejo${toString cfg.settings.server.HTTP_PORT}" = {
enable = mkDefault true;
token = mkDefault cfg.actions.token;
name = mkDefault "${cfg.settings.DEFAULT.APP_NAME} - Actions";
url = cfg.actions.url;
labels = mkDefault cfg.actions.labels;
settings = {
runner = {
insecure = true;
};
};
};
};
# services.gitea-actions-runner = mkIf cfg.actions.enable {
# package =
# if config.services.gitea.enable
# then pkgs.gitea-actions-runner
# else pkgs.forgejo-actions-runner;
# instances."forgejo${toString cfg.settings.server.HTTP_PORT}" = {
# enable = mkDefault true;
# token = mkDefault cfg.actions.token;
# name = mkDefault "${cfg.settings.DEFAULT.APP_NAME} - Actions";
# url = cfg.actions.url;
# labels = mkDefault cfg.actions.labels;
# settings = {
# runner = {
# insecure = true;
# };
# };
# };
# };
};
}

View File

@@ -1,64 +0,0 @@
{
config,
lib,
...
}: let
cfg = config.profiles.locale;
in {
imports = [];
options.profiles.locale = with lib;
with lib.types; {
enable = mkEnableOption "";
locale = mkOption {
type = str;
default = "en_US.UTF-8";
};
extraLocales = mkOption {
type = attrsOf str;
default = rec {
LC_ADDRESS = "pt_BR.UTF-8";
LC_IDENTIFICATION = LC_ADDRESS;
LC_MEASUREMENT = LC_ADDRESS;
LC_MONETARY = LC_ADDRESS;
LC_NAME = LC_ADDRESS;
LC_NUMERIC = LC_ADDRESS;
LC_PAPER = LC_ADDRESS;
LC_TELEPHONE = LC_ADDRESS;
LC_TIME = LC_ADDRESS;
};
};
keymap.layout = mkOption {
type = str;
default = "br";
};
keymap.variant = mkOption {
type = str;
default = "";
};
keymap.console = mkOption {
type = str;
default = "br-abnt2";
};
timeZone = mkOption {
type = str;
default = "America/Sao_Paulo";
};
};
config = {
i18n = {
defaultLocale = cfg.locale;
extraLocaleSettings = cfg.extraLocales;
};
services.xserver = {
xkb.layout = cfg.keymap.layout;
xkb.variant = cfg.keymap.variant;
};
console.keyMap = cfg.keymap.console;
time = {
timeZone = cfg.timeZone;
};
};
}

View File

@@ -1,26 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.programs.nh;
wrapper = pkgs.writeShellScriptBin "nh" ''
function alejandra() { ${pkgs.alejandra}/bin/alejandra "$@"; }
function git() { ${pkgs.git}/bin/git "$@"; }
function lazygit() { ${pkgs.lazygit}/bin/lazygit "$@"; }
function nh() { ${pkgs.nh}/bin/nh "$@"; }
function shellharden() { ${pkgs.shellharden}/bin/shellharden "$@"; }
FLAKE_DIR=${toString cfg.flake}
${builtins.readFile ./wrapper.sh}
'';
in {
options.programs.nh = with lib; with lib.types; {};
config = with lib;
mkIf cfg.enable {
programs.nh.package = wrapper;
# programs.nh.clean.enable = mkDefault true;
};
}

View File

@@ -1,154 +0,0 @@
function set_colors() {
COLOR_CYAN='\033[0;35m'
COLOR_RED='\033[0;31m'
COLOR_YELLOW='\033[1;33m'
COLOR_NC='\033[0m'
}
function set_labels() {
set_colors
function echo_info() {
if [ -t 1 ]; then
echo -e "${COLOR_CYAN}INFO:${COLOR_NC} $@";
else
echo -e "INFO: $@";
fi
}
function echo_warn() {
if [ -t 1 ]; then
echo -e "${COLOR_YELLOW}WARN:${COLOR_NC} $@";
else
echo -e "WARN: $@";
fi
}
function echo_error() {
if [ -t 1 ]; then
echo -e "${COLOR_RED}ERRO:${COLOR_NC} $@";
else
echo -e "ERRO: $@";
fi
}
}
set_labels
function decrypt_lesser_secrets() {
set -e
pushd "$FLAKE_DIR" > /dev/null
for f in ./secrets/*.lesser.*; do
local filename="$(basename -- "$f")"
local extension="${filename##*.}"
local filename="${filename%.*}"
local subextenstion="${filename##*.}"
if [[ "$subextenstion" == "decrypted" ]]; then
echo_warn "$PREFIX - File already decrypted! file=$f"
else
echo_info "$PREFIX - Decrypting lesser secret file. file=$f"
sops --output "./secrets/$filename.decrypted.$extension" -d "$f"
fi
done
echo_info "$PREFIX - Adding decrypted secret files"
git add ./secrets/*.decrypted.*
popd > /dev/null
}
function remove_decrypted_secrets() {
set -e
pushd "$FLAKE_DIR" > /dev/null
echo_info "$PREFIX - Removing descrypted files"
for f in "$FLAKE_DIR"/secrets/*.decrypted.*; do
echo_info "$PREFIX - Removing descrypted files. file=$f"
git reset "$f"
rm "$f"
done
popd > /dev/null
}
function format_files() {
set -e
pushd "$FLAKE_DIR" > /dev/null
echo_info "$PREFIX - Formatting *.nix files"
alejandra . &>/dev/null \
|| (alejandra . ; \
echo_error - "$PREFIX - Failed to format files" \
&& exit 1)
echo_info "$PREFIX - Formatting *.sh files"
find "$FLAKE_DIR" -type f -name "*.sh" -execdir shellharden --replace {} \;
popd > /dev/null
}
function build_os() {
set -e
pushd "$FLAKE_DIR" > /dev/null
echo_info "$PREFIX - Building NixOS"
nh os switch "$@" "$FLAKE_DIR" \
|| (echo_error "$PREFIX - Failed to build NixOS" \
&& remove_decrypted_secrets \
&& exit 1)
popd > /dev/null
}
case "$1" in
"os")
case "$2" in
"switch")
PREFIX="nh os switch"
decrypt_lesser_secrets
format_files
shift 2
build_os "$@"
remove_decrypted_secrets
;;
*) echo_error "\"$2\" subcommand does not exist"
;;
esac
;;
"edit")
pushd "$FLAKE_DIR" > /dev/null
"$EDITOR" .
popd > /dev/null
;;
"sync")
pushd "$FLAKE_DIR" > /dev/null
lazygit
popd > /dev/null
;;
"secrets")
PREFIX="nh secrets"
case "$2" in
"-d"|"--decrypt") decrypt_lesser_secrets
;;
"-r"|"--remove") remove_decrypted_secrets
;;
esac
;;
"format")
pushd "$FLAKE_DIR" > /dev/null
format_files
popd > /dev/null
;;
"--")
shift 1
nh "$@"
;;
*) echo_error "\"$1\" command does not exist"
;;
esac

View File

@@ -1,47 +0,0 @@
{
config,
lib,
...
}: let
cfg = config.services.tailscale;
in {
imports = [];
options.services.tailscale = with lib;
with lib.types; {
exitNode = mkOption {
type = bool;
default = false;
};
};
config = with lib;
mkIf cfg.enable {
services.tailscale = {
extraUpFlags = [
(
if cfg.exitNode
then "--advertise-exit-node"
else null
)
(
if cfg.exitNode
then "--exit-node"
else null
)
];
useRoutingFeatures = mkDefault (
if cfg.exitNode
then "server"
else "client"
);
};
systemd.services."tailscaled" = mkIf config.services.caddy.enable (mkDefault {
serviceConfig = {
Environment = ["TS_PERMIT_CERT_UID=caddy"];
};
});
boot.kernel.sysctl."net.ipv4.ip_forward" = mkIf cfg.exitNode (mkDefault 1);
boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = mkIf cfg.exitNode (mkDefault 1);
};
}

View File

@@ -1,52 +0,0 @@
{config, ...}: let
secrets = config.spacestation-secrets.lesser;
adguardCfg = secrets.guz.services.adguard;
in {
imports = [
../modules/adguardhome.nix
];
services.adguardhome = {
enable = true;
openFirewall = true;
port = adguardCfg.port;
dns.filters = {
"Hagezi's Multi PRO" = {
url = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/pro.txt";
};
"Hagezi's Badware Hoster" = {
url = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/hoster.txt";
};
"Hagezi's DNS Bypass blocking" = {
url = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/doh-vpn-proxy-bypass.txt";
};
"Hagezi's Dynamic DNS blocking" = {
url = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/dyndns.txt";
};
"Hagezi's Gambling" = {
url = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/gambling.txt";
};
"Hagezi's Native - LG webOS" = {
url = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/native.lgwebos.txt";
};
"Hagezi's Native - Tiktok (Agressive)" = {
url = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/hosts/native.tiktok.extended.txt";
};
"Hagezi's Native - Microsoft/Windows" = {
url = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/native.winoffice.txt";
};
"Hagezi's Pop-up Ads" = {
url = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/popupads.txt";
};
"Hagezi's TIF" = {
url = "https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/tif.txt";
};
};
settings.user_rules = [
"@@||tumblr.com^$important"
"@@||wordpress.com^$important"
"@@||tailscale.com^$important"
"@@||torproject.org^$important"
"@@||neocities.org^$important"
];
};
}

View File

@@ -1,10 +0,0 @@
{...}: {
imports = [
../modules/tailscale.nix
];
services.tailscale = {
enable = true;
useRoutingFeatures = "both";
exitNode = true;
};
}