Skip to content
PentSecPublic

Repository files navigation

IRcP

image image

A Vencord theme that turns Discord into a terminal IRC client: one log line per message, a clock gutter, monospace type, dim metadata and translucent panels over a wallpaper.

13:38 <PentSec> one line per message, with the clock, the nick and the text
13:38 <PentSec> sharing a single baseline

Requirements

  • Vencord (or Vesktop) on Discord desktop.
  • Optional: the RoleColorEverywhere plugin, if you want the member-list role headers painted with each role's own colour. Discord does not expose that colour otherwise.

Install

Online (recommended)

  1. Open Discord → Vencord → Settings → Themes.

  2. Paste this URL into Online Themes, one per line:

    https://jeff.is-a.dev/IRcP/irc.theme.css
    
  3. Leave the field. The theme applies immediately.

The theme is served by GitHub Pages (.css as text/css). Its imports point at the same deployment, so a downloaded irc.theme.css works on its own. Do not use raw.githubusercontent.com: it serves .css as text/plain with nosniff, and the browser refuses it as a stylesheet.

Local

  1. Download irc.theme.css. The single file is enough: its two imports point at the hosted body, so the layout loads from the same deployment.
  2. Drop it into your Vencord themes directory (Vencord → Themes → Open Themes Folder).
  3. Enable it in the Local Themes list.

To change the layout itself, do not edit the downloaded file — clone the repository and use bun run dev (see below).

Upgrading from 2.0.0-irc.57 or older

Those versions loaded their layout from irc/01-status.css, irc/02-ui.css, irc/03-fonts.css and irc/05-messages.css. Those files are no longer published: the layout now ships as irc.css and fonts.css. An old irc.theme.css left in place will load the metadata and the variables but no layout. Delete it and install again.

Development

The repository holds sources, not the built theme. deploy is generated by CI.

bun install          # once
bun run dev          # one self-contained irc.theme.css in your Vencord themes folder
bun run build        # dist/: irc.theme.css, irc.css, fonts.css, wallpapers, licenses, .nojekyll
bun run reroll       # update Discord's hashed class names in src/**/_*.scss
bun run verify:cascade  # fail if a rule moved past a rule it can fight with
bun run format       # Prettier

bun is the only package manager used here; bun.lock is committed.

src/root.scss              metadata lives in bd-scss.config.js; this file is the variables
src/main.scss              body entry: @use order = cascade order
src/theme/_tokens.scss     internal custom properties shared by everything
src/theme/app/             background, titlebar, toolbar, window controls
src/theme/serverlist/      guild rail: folders, items, unread pill, icons
src/theme/sidebar/         channel and DM lists, user panel
src/theme/chat/            message area, composer, dividers, notices, mentions
src/theme/members/         member list: column, rows, role groups
src/theme/popouts/         server and channel popouts
src/theme/messages/        one-line rows: row, clock, runs, reply, nick, avatar
src/theme/forum/           forum posts as log lines
src/theme/status/          presence rings, glow, avatar exceptions
src/theme/_wiring.scss     maps --irc-font onto the variables Discord reads
src/addons/_fonts.scss     Cascadia subsets, base64 (separate file: 163 KB)
src/assets/*.png, *.jpg    wallpapers, published next to the theme
scripts/postbuild.mjs      asset copy, deploy URL, @name, minify, .nojekyll
scripts/minify-css.mjs     compacts irc.css; the build fails if the result is not equivalent
scripts/dev.mjs            initial build + watcher (bd-scss skips the first one)

Each folder has an index.scss that @forwards its partials in cascade order. Adding a file means adding its @forward in the right position: the order is the cascade, not alphabetical.

bun run dev builds once and then rebuilds on every save: a single file with the fonts and the body inlined, dropped in your client's themes folder (~/.config/Vencord/themes on Linux; use it by enabling Local Themes). bun run build splits it instead: the entry imports irc.css and fonts.css from the deployed URL.

The wrapper in scripts/dev.mjs exists because bd-scss dev starts the watcher but never compiles on startup — it waits for the first file change.

Configuration

Everything worth touching is in the :root block of src/root.scss, which compiles into the top of irc.theme.css. Edit it, run the build, publish.

Renamed in 2.0.0-irc.100: --accent is now --primary, --accent-text is now --primary-text. A snippet that still sets --accent changes nothing.

Variable What it does Default
--primary Main colour: glow, mentions, pills, selected channel, focus rings #1efcf9
--primary-text Text drawn on a --primary fill (buttons, badges) hsl(0 0 0%)
--secondary Neutral colour: unread rings, icon masks, text on a tinted row #ffffff
--bg-primary App panels; its alpha follows --opacity hsl(0 0% 10% / 0.83)
--bg-secondary Chat column and cards hsl(0 0% 10% / 0.855)
--bg-solid Opaque panel colour, used where an alpha would show through hsl(0 0% 10%)
--bg-border Hairline between panels hsl(0 0% 5% / 0.75)
--scrim Black wash: feeds the shadows and the presence-ring cutout hsl(0 0% 0% / 0.5)
--glow-intensity Strength of every glow; 0 disables them 1
--background-image Wallpaper; none leaves the app transparent none
--background-gradient var(--gradient) paints the radial wash instead of the wallpaper var(--gradient)
--gradient The wash itself: black centre, palette edge, editable stops see the file
--background-blur Blur applied to the background image 8px
--opacity Opacity of the app panels 0.78
--irc-line-height Line height of a message row 1.25
--irc-ts-width Clock column width (8ch for a 12-hour clock, 5ch for 24-hour) 8ch
--irc-avatar-size Avatar box in a message row; above 1em the row grows 1.2em
--irc-nick-glow / --irc-nick-glow-size Nickname halo strength and blur 1 / 6px
--irc-forum-stamp Width of the forum thumbnail column 3.4em
--irc-forum-row-pad Vertical padding of a forum log row 2px
--irc-category-background Channel-category background strength; 0 removes it 0
--irc-status-members-width Member-list avatar box the ring is drawn around 30px
--irc-status-self-speaking-colour Ring colour while your own voice transmits #57d39b
--irc-status-* Avatar ring sizes and colours see the file
--members-width, --server-icon-size Sidebar geometry; the icon size is the server list's scale see the file
--guilds-width Width of the server list column 80px
--irc-guilds-visible 1 shows the server list, 0 hides it and gives the column back 1

Wallpapers

The top of src/root.scss picks one by number:

$irc-background: 6;

$irc-backgrounds: (
  1: 'bg1.png',
  2: 'bg2.jpg',
  3: 'bg3.jpg',
  4: 'bg4.jpg',
  5: 'bg5.jpg',
  6: 'bg6.png',
  7: 'bg7.jpg'
);

Drop a file in src/assets/, add its number, rebuild. 1 is the file the body stylesheet already loads; every other entry is written into the theme file, so that file has to be published next to it (both scripts copy every src/assets/*.png and *.jpg). An entry may also be an absolute URL.

Replacing a wallpaper in place keeps its URL, so the renderer can serve the old bytes from memory: reload it (Ctrl+R) or restart Discord. Switching to a different number changes the URL.

Published changes reach clients without a restart: the entry file is re-fetched on a theme toggle, and the body is a normal cached HTTP resource with a ten-minute lifetime.

Notes

  • The font (Cascadia Mono) is embedded as base64 subsets, so no font is fetched.
  • Forum channels, the Friends tab and the member list are themed as well. Discord moves these class hashes between builds, so a layout touch-up may be needed after a large Discord update.
  • The chat toolbar icons are Tabler outline icons drawn as CSS masks.

Credits and license

The theme's own code and modifications are by PentSec, MIT (see LICENSE). It reuses work under these licenses:

  • SoftX, Copyright (c) 2021 DiscordStyles, MIT
  • RadialStatus, Copyright (c) 2020 DiscordStyles, MIT
  • Cascadia Mono, Copyright (c) 2023 Microsoft Corporation, SIL OFL 1.1
  • Font Awesome Free icons, Copyright Fonticons, Inc., CC BY 4.0

The MIT and OFL texts are reproduced in THIRD-PARTY-NOTICES.md; the rest are linked there.