feat: simplify configuration
This commit is contained in:
@@ -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
47
abaduh/adguard.nix
Normal 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
5
abaduh/default.nix
Normal file
@@ -0,0 +1,5 @@
|
||||
{...}: {
|
||||
imports = [
|
||||
./adguard.nix
|
||||
];
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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
66
capytal/forgejo.nix
Normal 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.
Binary file not shown.
Binary file not shown.
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 |
@@ -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 |
@@ -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;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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" .}}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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];
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
@@ -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}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{...}: {
|
||||
imports = [
|
||||
./adguardhome.nix
|
||||
./tailscale.nix
|
||||
];
|
||||
}
|
||||
18
common/tailscale.nix
Normal file
18
common/tailscale.nix
Normal 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;
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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}" = {};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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";
|
||||
};
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{...}: {
|
||||
imports = [
|
||||
./adguardhome.nix
|
||||
./anubis
|
||||
./forgejo
|
||||
./locales.nix
|
||||
./medama.nix
|
||||
./nh
|
||||
./tailscale.nix
|
||||
];
|
||||
}
|
||||
@@ -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;
|
||||
# };
|
||||
# };
|
||||
# };
|
||||
# };
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -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
|
||||
@@ -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);
|
||||
};
|
||||
}
|
||||
@@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{...}: {
|
||||
imports = [
|
||||
../modules/tailscale.nix
|
||||
];
|
||||
services.tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "both";
|
||||
exitNode = true;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user