-
Notifications
You must be signed in to change notification settings - Fork 5
Theming
Marc Andre Herpers edited this page Nov 23, 2024
·
1 revision
To create a new theme, follow these steps:
-
Create the Theme Directory:
- In the main directory, create a new directory named
themes/
. - Inside the
themes/
directory, create another directory with the name of your theme in lowercase (e.g.,onl
).
- In the main directory, create a new directory named
-
Define the Theme Metadata:
-
Inside the theme directory, create a
theme.yml
file with the following content:name: onl fullname: OsuNoLimits Modern author: halfmoon.css & osuNoLimits included: false screenshot: https://assets.osunolimits.dev/shiina/onl.png
-
Important: Ensure that the
name
matches the directory name and thatincluded
is set tofalse
.
-
-
Create the Style File:
-
Inside the theme directory, create a
style.yml
file with the following content:/*! * ---------------------------------------------------------------------------- * Halfmoon CSS - Modern theme * Copyright (c) 2023, Tahmid Khan | MIT License | https://www.gethalfmoon.com * ---------------------------------------------------------------------------- * The above notice must be included in its entirety when this file is used. */ [data-bs-core=onl] { /* Gray */ --bs-slate-hue: 216; --bs-slate-saturation: 20%; /* Light gray */ --bs-lightgray-hue: var(--bs-slate-hue); --bs-lightgray-saturation: var(--bs-slate-saturation); /* Sable (almost black) */ --bs-sable-hue: var(--bs-darkgray-hue); --bs-sable-saturation: var(--bs-darkgray-saturation); --bs-sable-100-hsl: var(--bs-sable-hue), var(--bs-sable-saturation), 31%; --bs-sable-200-hsl: var(--bs-sable-hue), var(--bs-sable-saturation), 29%; --bs-sable-300-hsl: var(--bs-sable-hue), var(--bs-sable-saturation), 27%; --bs-sable-400-hsl: var(--bs-sable-hue), var(--bs-sable-saturation), 25%; --bs-sable-500-hsl: var(--bs-sable-hue), var(--bs-sable-saturation), 23%; --bs-sable-600-hsl: var(--bs-sable-hue), var(--bs-sable-saturation), 21%; --bs-sable-700-hsl: var(--bs-sable-hue), var(--bs-sable-saturation), 19%; --bs-sable-800-hsl: var(--bs-sable-hue), var(--bs-sable-saturation), 17%; --bs-sable-900-hsl: var(--bs-sable-hue), var(--bs-sable-saturation), 15%; --bs-sable-100: hsl(var(--bs-sable-100-hsl)); --bs-sable-200: hsl(var(--bs-sable-200-hsl)); --bs-sable-300: hsl(var(--bs-sable-300-hsl)); --bs-sable-400: hsl(var(--bs-sable-400-hsl)); --bs-sable-500: hsl(var(--bs-sable-500-hsl)); --bs-sable-600: hsl(var(--bs-sable-600-hsl)); --bs-sable-700: hsl(var(--bs-sable-700-hsl)); --bs-sable-800: hsl(var(--bs-sable-800-hsl)); --bs-sable-900: hsl(var(--bs-sable-900-hsl)); --bs-sable-hsl: var(--bs-sable-500-hsl); --bs-sable: hsl(var(--bs-sable-hsl)); --bs-sable-foreground-hsl: var(--bs-white-hsl); --bs-sable-foreground: hsl(var(--bs-sable-foreground-hsl)); --bs-sable-text-emphasis-hsl: var(--bs-sable-600-hsl); --bs-sable-text-emphasis: hsl(var(--bs-sable-text-emphasis-hsl)); --bs-sable-hover-bg: var(--bs-sable-600); --bs-sable-active-bg: var(--bs-sable-700); --bs-sable-bg-subtle: hsl(var(--bs-sable-hue), var(--bs-sable-saturation), 70%); --bs-sable-border-subtle: var(--bs-sable-400); --bs-sable-checkbox-svg: var(--bs-checkbox-svg-light); --bs-sable-dash-svg: var(--bs-dash-svg-light); --bs-sable-radio-svg: var(--bs-radio-svg-light); --bs-sable-switch-svg: var(--bs-switch-svg-light); /* Primary */ --bs-primary-hue: var(--bs-navy-hue); --bs-primary-saturation: var(--bs-navy-saturation); --bs-primary-100-hsl: var(--bs-navy-100-hsl); --bs-primary-200-hsl: var(--bs-navy-200-hsl); --bs-primary-300-hsl: var(--bs-navy-300-hsl); --bs-primary-400-hsl: var(--bs-navy-400-hsl); --bs-primary-500-hsl: var(--bs-navy-500-hsl); --bs-primary-600-hsl: var(--bs-navy-600-hsl); --bs-primary-700-hsl: var(--bs-navy-700-hsl); --bs-primary-800-hsl: var(--bs-navy-800-hsl); --bs-primary-900-hsl: var(--bs-navy-900-hsl); --bs-primary-100: var(--bs-navy-100); --bs-primary-200: var(--bs-navy-200); --bs-primary-300: var(--bs-navy-300); --bs-primary-400: var(--bs-navy-400); --bs-primary-500: var(--bs-navy-500); --bs-primary-600: var(--bs-navy-600); --bs-primary-700: var(--bs-navy-700); --bs-primary-800: var(--bs-navy-800); --bs-primary-900: var(--bs-navy-900); --bs-primary-hsl: var(--bs-navy-hsl); --bs-primary: var(--bs-navy); --bs-primary-foreground-hsl: var(--bs-navy-foreground-hsl); --bs-primary-foreground: var(--bs-navy-foreground); --bs-primary-text-emphasis-hsl: var(--bs-navy-text-emphasis-hsl); --bs-primary-text-emphasis: var(--bs-navy-text-emphasis); --bs-primary-hover-bg: var(--bs-navy-hover-bg); --bs-primary-active-bg: var(--bs-navy-active-bg); --bs-primary-bg-subtle: var(--bs-navy-bg-subtle); --bs-primary-border-subtle: var(--bs-navy-border-subtle); --bs-primary-checkbox-svg: var(--bs-navy-checkbox-svg); --bs-primary-dash-svg: var(--bs-navy-dash-svg); --bs-primary-radio-svg: var(--bs-navy-radio-svg); --bs-primary-switch-svg: var(--bs-navy-switch-svg); /* Info */ --bs-info-hue: var(--bs-blue-hue); --bs-info-saturation: var(--bs-blue-saturation); --bs-info-100-hsl: var(--bs-blue-100-hsl); --bs-info-200-hsl: var(--bs-blue-200-hsl); --bs-info-300-hsl: var(--bs-blue-300-hsl); --bs-info-400-hsl: var(--bs-blue-400-hsl); --bs-info-500-hsl: var(--bs-blue-500-hsl); --bs-info-600-hsl: var(--bs-blue-600-hsl); --bs-info-700-hsl: var(--bs-blue-700-hsl); --bs-info-800-hsl: var(--bs-blue-800-hsl); --bs-info-900-hsl: var(--bs-blue-900-hsl); --bs-info-100: var(--bs-blue-100); --bs-info-200: var(--bs-blue-200); --bs-info-300: var(--bs-blue-300); --bs-info-400: var(--bs-blue-400); --bs-info-500: var(--bs-blue-500); --bs-info-600: var(--bs-blue-600); --bs-info-700: var(--bs-blue-700); --bs-info-800: var(--bs-blue-800); --bs-info-900: var(--bs-blue-900); --bs-info-hsl: var(--bs-blue-hsl); --bs-info: var(--bs-blue); --bs-info-foreground-hsl: var(--bs-blue-foreground-hsl); --bs-info-foreground: var(--bs-blue-foreground); --bs-info-text-emphasis-hsl: var(--bs-blue-text-emphasis-hsl); --bs-info-text-emphasis: var(--bs-blue-text-emphasis); --bs-info-hover-bg: var(--bs-blue-hover-bg); --bs-info-active-bg: var(--bs-blue-active-bg); --bs-info-bg-subtle: var(--bs-blue-bg-subtle); --bs-info-border-subtle: var(--bs-blue-border-subtle); --bs-info-checkbox-svg: var(--bs-blue-checkbox-svg); --bs-info-dash-svg: var(--bs-blue-dash-svg); --bs-info-radio-svg: var(--bs-blue-radio-svg); --bs-info-switch-svg: var(--bs-blue-switch-svg); } [data-bs-core=onl][data-bs-theme=dark] { /* Dark gray */ --bs-darkgray-text-emphasis-hsl: var(--bs-darkgray-200-hsl); --bs-darkgray-text-emphasis: hsl(var(--bs-darkgray-text-emphasis-hsl)); /* Sable (black) */ --bs-sable-text-emphasis-hsl: var(--bs-sable-400-hsl); --bs-sable-text-emphasis: hsl(var(--bs-sable-text-emphasis-hsl)); --bs-sable-bg-subtle: hsl(var(--bs-sable-hue), var(--bs-sable-saturation), 14%); --bs-sable-border-subtle: var(--bs-sable-600); /* Blue */ --bs-blue-text-emphasis-hsl: var(--bs-blue-300-hsl); --bs-blue-text-emphasis: hsl(var(--bs-blue-text-emphasis-hsl)); /* Primary */ --bs-primary-hue: var(--bs-sky-hue); --bs-primary-saturation: var(--bs-sky-saturation); --bs-primary-100-hsl: var(--bs-sky-100-hsl); --bs-primary-200-hsl: var(--bs-sky-200-hsl); --bs-primary-300-hsl: var(--bs-sky-300-hsl); --bs-primary-400-hsl: var(--bs-sky-400-hsl); --bs-primary-500-hsl: var(--bs-sky-500-hsl); --bs-primary-600-hsl: var(--bs-sky-600-hsl); --bs-primary-700-hsl: var(--bs-sky-700-hsl); --bs-primary-800-hsl: var(--bs-sky-800-hsl); --bs-primary-900-hsl: var(--bs-sky-900-hsl); --bs-primary-100: var(--bs-sky-100); --bs-primary-200: var(--bs-sky-200); --bs-primary-300: var(--bs-sky-300); --bs-primary-400: var(--bs-sky-400); --bs-primary-500: var(--bs-sky-500); --bs-primary-600: var(--bs-sky-600); --bs-primary-700: var(--bs-sky-700); --bs-primary-800: var(--bs-sky-800); --bs-primary-900: var(--bs-sky-900); --bs-primary-hsl: var(--bs-sky-hsl); --bs-primary: var(--bs-sky); --bs-primary-foreground-hsl: var(--bs-sky-foreground-hsl); --bs-primary-foreground: var(--bs-sky-foreground); --bs-primary-text-emphasis-hsl: var(--bs-sky-text-emphasis-hsl); --bs-primary-text-emphasis: var(--bs-sky-text-emphasis); --bs-primary-hover-bg: var(--bs-sky-hover-bg); --bs-primary-active-bg: var(--bs-sky-active-bg); --bs-primary-bg-subtle: var(--bs-sky-bg-subtle); --bs-primary-border-subtle: var(--bs-sky-border-subtle); --bs-primary-checkbox-svg: var(--bs-sky-checkbox-svg); --bs-primary-dash-svg: var(--bs-sky-dash-svg); --bs-primary-radio-svg: var(--bs-sky-radio-svg); --bs-primary-switch-svg: var(--bs-sky-switch-svg); /* Info */ --bs-info-text-emphasis-hsl: var(--bs-blue-text-emphasis-hsl); --bs-info-text-emphasis: var(--bs-blue-text-emphasis); --bs-info-bg-subtle: var(--bs-blue-bg-subtle); --bs-info-border-subtle: var(--bs-blue-border-subtle); } /* Variables */ [data-bs-core=onl] { /* Link */ --bs-link-color-hsl: var(--bs-info-text-emphasis-hsl); --bs-link-hover-color-hsl: var(--bs-info-hsl); /* Content (used as needed in cards, panels, menus, etc.) */ --bs-content-bg-hsl: var(--bs-body-bg-hsl); --bs-content-border-color: var(--bs-border-color); /* Form */ --bs-form-focus-border-color: var(--bs-info-border-subtle); --bs-form-focus-shadow-hsl: var(--bs-info-hsl); --bs-form-check-focus-border-color: var(--bs-info-border-subtle); } [data-bs-core=modern]:not([data-bs-theme=dark]) { /* Background */ --bs-body-bg-hsl: var(--bs-white-hsl); --bs-secondary-bg-hsl: var(--bs-lightgray-hue), var(--bs-lightgray-saturation), 98.75%; --bs-tertiary-bg-hsl: var(--bs-lightgray-hue), var(--bs-lightgray-saturation), 97.5%; /* Border */ --bs-border-color: var(--bs-lightgray-700); --bs-border-color-light: var(--bs-lightgray-500); } [data-bs-core=onl][data-bs-theme=dark] { /* Background */ --bs-body-bg-hsl: var(--bs-sable-900-hsl); --bs-secondary-bg-hsl: var(--bs-sable-800-hsl); --bs-tertiary-bg-hsl: var(--bs-sable-700-hsl); /* Border */ --bs-border-color: var(--bs-gray-900); /* Content (used as needed in cards, panels, menus, etc.) */ --bs-content-floating-bg-hsl: var(--bs-sable-hue), var(--bs-sable-saturation), 16.5%; /* Action (used as needed in buttons, inputs, menu items, page links, etc.) */ --bs-action-border-color: var(--bs-border-color); /* Contextual buttons */ --bs-ctx-btn-border-color: transparent; --bs-ctx-btn-bg-clip: border-box; /* Action bar (used as needed in range, progress, etc.) */ --bs-actionbar-border-color: hsla(var(--bs-white-hsl), 0.075); --bs-progresstrack-border-width: 0; --bs-progresstrack-box-shadow: inset 0 0 0 var(--bs-border-width) var(--bs-actionbar-border-color); --bs-progresstrack-bg-clip: border-box; } /* Sidebar */ [data-bs-core=onl] .sidebar { --bs-sidebar-item-padding-x: 1rem; --bs-sidebar-item-padding-y: 0.25rem; --bs-sidebar-header-font-weight: var(--bs-font-weight-bold); --bs-sidebar-divider-bg: var(--bs-sidebar-bg); } [data-bs-core=onl] .sidebar-nav .nav-link { border-left: var(--bs-border-width) solid var(--bs-border-color-light); } [data-bs-core=onl] .sidebar-nav .nav-link.active, [data-bs-core=onl] .sidebar-nav .nav-link.show { font-weight: var(--bs-font-weight-bold); border-color: currentColor; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
-
-
Customize Elements:
-
Replace
onl
with your theme name in the CSS selectors to style specific elements on your site. For example:[data-bs-core=your-theme-name] .shiina-search-input { padding: 10px; }
-
By following these steps, you can create and customize a new theme for your project.