mirror of
https://github.com/elwrcl/copnix.git
synced 2026-10-31 14:28:02 +03:00
150 lines
5.8 KiB
Nix
150 lines
5.8 KiB
Nix
{ ... }:
|
|
{
|
|
# auto-generated
|
|
flake.homeModules.home-theme-discord =
|
|
{ config, lib, ... }:
|
|
let
|
|
p = config.elars.theme.palette.withHashtag;
|
|
lighten = c: pct: "color-mix(in oklab, white ${toString pct}%, ${c})";
|
|
darken = c: pct: "color-mix(in oklab, black ${toString pct}%, ${c})";
|
|
ramp =
|
|
indent: name: base:
|
|
lib.concatMapStringsSep "\n${indent}" (x: x) [
|
|
"--${name}-1: ${lighten base 12};"
|
|
"--${name}-2: ${base};"
|
|
"--${name}-3: ${darken base 8};"
|
|
"--${name}-4: ${darken base 16};"
|
|
"--${name}-5: ${darken base 24};"
|
|
];
|
|
|
|
rgb = hex: builtins.concatStringsSep " " (map toString (config.elars.theme.hexToRgb hex));
|
|
accentRgb = rgb (config.elars.theme.palette.accent or config.elars.theme.palette.base06);
|
|
textRgb = rgb config.elars.theme.palette.base05;
|
|
light = {
|
|
surface = "#d4c1a8";
|
|
surfaceVariant = "#c5b29a";
|
|
outline = "#a89682";
|
|
onSurface = "#262524";
|
|
secondary = "#736c5f";
|
|
tertiary = "#594f46";
|
|
error = "#bc4747";
|
|
};
|
|
|
|
colors = ''
|
|
/* ── generated from elars.theme.palette ─────────────────────── */
|
|
:root {
|
|
color-scheme: dark;
|
|
--colors: on;
|
|
|
|
/* text colors */
|
|
--text-0: var(--bg-4);
|
|
--text-1: ${p.base05};
|
|
--text-2: ${darken p.base05 6};
|
|
--text-3: ${p.base06};
|
|
--text-4: ${lighten p.base04 18};
|
|
--text-5: ${p.base04};
|
|
|
|
/* background colors */
|
|
--bg-1: ${lighten p.base02 8};
|
|
--bg-2: ${p.base02};
|
|
--bg-3: ${p.base01};
|
|
--bg-4: ${p.base00};
|
|
--hover: rgb(${accentRgb} / 0.1);
|
|
--active: rgb(${accentRgb} / 0.2);
|
|
--active-2: rgb(${accentRgb} / 0.3);
|
|
--message-hover: var(--hover);
|
|
|
|
/* accent colors */
|
|
--accent-1: var(--accent-c-1);
|
|
--accent-2: var(--accent-c-2);
|
|
--accent-3: var(--accent-c-3);
|
|
--accent-4: var(--accent-c-4);
|
|
--accent-5: var(--accent-c-5);
|
|
--accent-new: var(--red-2);
|
|
--mention: linear-gradient(to right, color-mix(in hsl, var(--accent-2), transparent 90%) 40%, transparent);
|
|
--mention-hover: linear-gradient(to right, color-mix(in hsl, var(--accent-2), transparent 95%) 40%, transparent);
|
|
--reply: linear-gradient(to right, color-mix(in hsl, var(--text-3), transparent 90%) 40%, transparent);
|
|
--reply-hover: linear-gradient(to right, color-mix(in hsl, var(--text-3), transparent 95%) 40%, transparent);
|
|
|
|
/* status indicators */
|
|
--online: var(--green-2);
|
|
--dnd: var(--red-2);
|
|
--idle: var(--yellow-2);
|
|
--streaming: var(--purple-2);
|
|
--offline: var(--text-4);
|
|
|
|
/* borders */
|
|
--border-light: var(--hover);
|
|
--border: var(--active);
|
|
--border-hover: var(--accent-2);
|
|
--button-border: rgb(${textRgb} / 0.1);
|
|
|
|
/* base ramps */
|
|
${ramp " " "accent-c" (p.accent or p.base06)}
|
|
${ramp " " "red" p.base08}
|
|
${ramp " " "green" p.base0B}
|
|
${ramp " " "blue" p.base0D}
|
|
${ramp " " "yellow" p.base0A}
|
|
${ramp " " "purple" p.base0E}
|
|
${ramp " " "cyan" p.base0C}
|
|
}
|
|
|
|
@media (prefers-color-scheme: light) {
|
|
:root {
|
|
color-scheme: light;
|
|
|
|
--text-0: var(--bg-4);
|
|
--text-1: ${light.onSurface};
|
|
--text-2: ${lighten light.onSurface 6};
|
|
--text-3: ${lighten light.onSurface 12};
|
|
--text-4: ${light.secondary};
|
|
--text-5: ${lighten light.secondary 12};
|
|
|
|
--bg-1: ${light.outline};
|
|
--bg-2: ${darken light.surfaceVariant 6};
|
|
--bg-3: ${light.surfaceVariant};
|
|
--bg-4: ${light.surface};
|
|
--hover: rgb(38 37 36 / 0.08);
|
|
--active: rgb(38 37 36 / 0.16);
|
|
--active-2: rgb(38 37 36 / 0.24);
|
|
--message-hover: var(--hover);
|
|
|
|
${ramp " " "accent-c" light.tertiary}
|
|
--accent-1: var(--accent-c-2);
|
|
--accent-2: var(--accent-c-2);
|
|
--accent-3: var(--accent-c-2);
|
|
--accent-4: var(--accent-c-3);
|
|
--accent-5: var(--accent-c-4);
|
|
--border-hover: var(--accent-c-2);
|
|
--button-border: rgb(38 37 36 / 0.12);
|
|
--mention: linear-gradient(to right, color-mix(in hsl, var(--accent-2), transparent 85%) 40%, transparent);
|
|
--mention-hover: linear-gradient(to right, color-mix(in hsl, var(--accent-2), transparent 92%) 40%, transparent);
|
|
|
|
${ramp " " "red" light.error}
|
|
${ramp " " "green" (darken p.base0B 28)}
|
|
${ramp " " "yellow" (darken p.base0A 28)}
|
|
${ramp " " "purple" (darken p.base0E 28)}
|
|
${ramp " " "blue" (darken p.base0D 28)}
|
|
|
|
--online: var(--green-3);
|
|
--dnd: var(--red-3);
|
|
--idle: var(--yellow-3);
|
|
--streaming: var(--purple-3);
|
|
--offline: var(--text-5);
|
|
}
|
|
}
|
|
'';
|
|
in
|
|
{
|
|
# nixcord owns the client's settings.json, so a theme enabled from the
|
|
# UI is lost on restart; enable it here instead.
|
|
programs.nixcord.config = {
|
|
themes.kemuri-system24 = ''
|
|
${builtins.readFile ./discord-system24.css}
|
|
${colors}
|
|
'';
|
|
enabledThemes = [ "kemuri-system24.css" ];
|
|
};
|
|
};
|
|
}
|