diff --git a/home/programs/desktop/communication/discord/default.nix b/home/programs/desktop/communication/discord/default.nix index f68c6a0..1cf2784 100644 --- a/home/programs/desktop/communication/discord/default.nix +++ b/home/programs/desktop/communication/discord/default.nix @@ -1,11 +1,149 @@ -{ lib, config, pkgs, ... }: +{ config, lib, pkgs, ... }: let cfg = config.programs.desktop.communication.discord; + inherit (config.colorscheme) colors; in { config = lib.mkIf cfg.enable { - home.packages = with pkgs; [ vesktop ]; + home.packages = [ pkgs.vesktop ]; + + xdg.configFile."vesktop/theme/nix.css".text = /* css */ '' + /* + * @name nix-colors-minimal + * @author aoku + * @description minimal theme designed with nix colors + */ + + :root { + --nix-bg1: #${colors.base00}; /*base00*/ + --nix-bg2: #${colors.base01}; /*base01*/ + --nix-bg3: #${colors.base02}; /*base02*/ + + --nix-fg1: #${colors.base05}; /*base05*/ + --nix-fg2: #${colors.base07}; /*base07*/ + --nix-fg3: #${colors.base03}; /*base03*/ + --nix-link: #${colors.base0D}; /*base0D*/ + + --nix-accent: #${colors.base08}; /*base08*/ + --nix-hi: #${colors.base0B}; /*base0B*/ + + --font-mono: ${config.fontProfiles.monospace.family}, monospace; + --font-regular: ${config.fontProfiles.regular.family}, sans serif; + + /* server collapse */ + --sb-collapsed-width: 12px; + --sb-transition-duration: 0s; + } + + .theme-dark { + --background-primary: var(--nix-bg1); + --background-secondary: var(--nix-bg1); + --background-secondary-alt: var(--nix-bg1); + --background-accent: var(--nix-accent); /*base08*/ + --background-tertiary: var(--nix-bg2); /*base01*/ + --background-floating: var(--nix-bg1); /*base00*/ + --background-mentioned: var(--nix-bg2); + --background-mentioned-hover: var(--nix-bg1); + --background-mobile: var(--nix-bg1); + --background-mobile-secondary: var(--nix-bg2); + --background-modifier-selected: var(--nix-bg1); + --channeltextarea-background:var(--nix-bg1); + --background-modifier-hover:var(--nix-bg1); + --activity-card-background: var(--nix-bg2); + + --header-primary: var(--nix-fg2); + --header-secondary: var(--nix-fg1); + + --text-normal: var(--nix-fg1); + --text-muted: var(--nix-fg1); + --text-link: var(--nix-link); + --text-warning: var(--nix-accent); + --font-primary: var(--font-mono); + --font-headline: var(--font-mono); + --font-display: var(--font-mono); + + --interactive-normal: var(--nix-fg1); /*base05*/ + --interactive-hover: var(--nix-hi); /*base0B*/ + --interactive-active: var(--nix-fg2); + --interactive-muted: var(--nix-fg3); /*base03*/ + --channels-default: var(--nix-fg1); + + --scrollbar-thin-thun: var(--nix-hi); + --scrollbar-auto-thumb: var(--nix-fg1); + --scrollbar-auto-track:var(--nix-bg2); + --scrollbar-auto-scrollbar-color-thumb: var(--nix-accent); + } + + .messagesWrapper_ea2b0b { + font-family: var(--font-regular); + } + + .titleWrapper__482dc { + font-family: var(--font-mono); + } + + .link__95dc0 /* text channel*/{ + border-radius: 0px; + margin-left: -10px; + font-family: var(--font-mono); + } + + .container_ca50b9 .avatar_f8541f { /*avatar*/ + display: none; + } + + .form__13a2c /* text input box resize */ { + height: 50px; + font-family: var(--font-regular); + } + + .containerDefault__3187b .wrapper__7bcde:before /* text channel */{ + content: ""; + display:inline-block; + background: var(--nix-hi); + height: 100%; + position: absolute; + left: 0; + } + + + /* server collapse */ + .guilds__2b93a /* servers */{ + overflow: hidden !important; + width: var(--sb-collapsed-width, 75px); + transition: width var(--sb-transition-duration); + } + .guilds__2b93a:hover /* expand server bar on hover */{ + width: 70px; + overflow: visible !important; + animation: server-bar-overflow 0s linear 0ms forwards + } + .guilds__2b93a ~ .base__3e6af /* friends list, chat */{ + position: absolute; + left: var(--sb-collapsed-left, var(--sb-collapsed-width)); + top: var(--sb-collapsed-top, 0px); + bottom: var(--sb-collapsed-bottom, 0px); + right: var(--sb-collapsed-right, 0px); + transition-property: var(--sb-transition-property, left); + transition-duration: var(--sb-transition-duration); + } + .guilds__2b93a:hover ~ .base__3e6af /* friends list, chat */{ + position: absolute; + left: var(--sb-left, 70px); + top: var(--sb-top, 0px); + bottom: var(--sb-bottom, 0px); + right: var(--sb-right, 0px); + } + @keyframes server-bar-overflow{ + from{ + overflow: hidden; + } + to{ + overflow: visible; + } + } + ''; }; } diff --git a/home/programs/desktop/communication/discord/theme.css b/home/programs/desktop/communication/discord/theme.css new file mode 100644 index 0000000..0d71186 --- /dev/null +++ b/home/programs/desktop/communication/discord/theme.css @@ -0,0 +1,102 @@ +:root { + --nix-bg1: #32302f; /*base00*/ + --nix-bg2: #3c3836; /*base01*/ + --nix-bg3: #504945; /*base02*/ + + --nix-fg1: #d5c4a1; /*base05*/ + --nix-fg2: #fbf1c7; /*base07*/ + --nix-fg3: #665c54; /*base03*/ + --nix-link: #83a598; /*base0D*/ + + --nix-accent: #fb4934; /*base08*/ + --nix-hi: #b8bb26; /*base0B*/ + + /* server collapse */ + --sb-collapsed-width: 12px; + --sb-transition-duration: 0.15s; +} + +.theme-dark { + --background-primary: var(--nix-bg1); + --background-secondary: var(--nix-bg2); + --background-secondary-alt: var(--nix-bg3); + --header-primary: var(--nix-fg1); + --header-secondary: var(--nix-hi); + --text-normal: var(--nix-fg1); + --text-muted: var(--nix-fg1); + --text-link: var(--nix-link); + --background-accent: var(--nix-accent); /*base08*/ + --background-tertiary: var(--nix-bg2); /*base01*/ + --background-floating: var(--nix-bg1); /*base00*/ + --background-mentioned: var(--nix-hi); + --background-mentioned: var(--nix-hi); + --interactive-normal: var(--nix-fg1); /*base05*/ + --interactive-hover: var(--nix-hi); /*base0B*/ + --interactive-active: var(--nix-fg2); + --interactive-muted: var(--nix-fg3); /*base03*/ + --channels-default: var(--nix-fg1); + --background-mobile: var(--nix-bg1); + --background-mobile-secondary: var(--nix-bg2); + --background-modifier-selected: var(--nix-bg1); + --scrollbar-thin-thun: var(--nix-hi); + --scrollbar-auto-thumb: var(--nix-fg1); + --scrollbar-auto-track: var(--nix-bg2); + --channeltextarea-background: var(--nix-bg2); + --background-modifier-hover: var(--nix-bg1); + --activity-card-background: var(--nix-bg2); + --text-warning: var(--nix-accent); +} + +.link__95dc0 /* text channel*/ { + border-radius: 0px; + margin-left: var(--csu-init-margin); + font-family: JetBrains Mono Nerd Font; + transition: + margin-left var(--csu-anim-duration) var(--csu-anim-transition), + background-color var(--csu-anim-duration); +} + +.containerDefault__3187b .wrapper__7bcde:before /* text channel */ { + content: ""; + display: inline-block; + background: var(--nix-hi); + height: 100%; + position: absolute; + left: 0; +} + +/* server collapse */ +.guilds__2b93a /* servers */ { + overflow: hidden !important; + width: var(--sb-collapsed-width, 75px); + transition: width var(--sb-transition-duration); +} +.guilds__2b93a:hover /* expand server bar on hover */ { + width: 72px; + overflow: visible !important; + animation: server-bar-overflow 0s linear 0ms forwards; +} +.guilds__2b93a ~ .base__3e6af /* friends list, chat */ { + position: absolute; + left: var(--sb-collapsed-left, var(--sb-collapsed-width)); + top: var(--sb-collapsed-top, 0px); + bottom: var(--sb-collapsed-bottom, 0px); + right: var(--sb-collapsed-right, 0px); + transition-property: var(--sb-transition-property, left); + transition-duration: var(--sb-transition-duration); +} +.guilds__2b93a:hover ~ .base__3e6af /* friends list, chat */ { + position: absolute; + left: var(--sb-left, 60px); + top: var(--sb-top, 0px); + bottom: var(--sb-bottom, 0px); + right: var(--sb-right, 0px); +} +@keyframes server-bar-overflow { + from { + overflow: hidden; + } + to { + overflow: visible; + } +} diff --git a/modules/home-manager/vesktop.nix b/modules/home-manager/vesktop.nix new file mode 100644 index 0000000..98a5fb6 --- /dev/null +++ b/modules/home-manager/vesktop.nix @@ -0,0 +1,33 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.programs.vesktop; + package = pkgs.vesktop; +in { + + options = { + programs.vesktop = { + enable = mkEnableOption + "vesktop, a custom client for discord"; + + theme = mkOption { + type = types.str; + default = ""; + description = "Custom css theme for vesktop"; + }; + + settings = mkOption { + type = types.attrs; + default = {}; + description = "Vesktop settings."; + }; + }; + + config = mkIf cfg.enable { + home.pakages = [ package ]; + xdg.configFile."vesktop/theme/custom.css".text = cfg.theme; + }; + }; +}