diff --git a/.config/ags/config.js b/.config/ags/config.js
index 73e57b57f..02f3132b5 100644
--- a/.config/ags/config.js
+++ b/.config/ags/config.js
@@ -12,6 +12,7 @@ import { startAutoDarkModeService } from './services/darkmode.js';
import { Bar, BarCornerTopleft, BarCornerTopright } from './modules/bar/main.js';
import Cheatsheet from './modules/cheatsheet/main.js';
// import DesktopBackground from './modules/desktopbackground/main.js';
+import Wallselect from './modules/wallselect/main.js'
import Dock from './modules/dock/main.js';
import Corner from './modules/screencorners/main.js';
import Crosshair from './modules/crosshair/main.js';
@@ -42,6 +43,7 @@ startBatteryWarningService().catch(print)
const Windows = () => [
// forMonitors(DesktopBackground),
forMonitors(Crosshair),
+ forMonitors(Wallselect),
Overview(),
forMonitors(Indicator),
forMonitors(Cheatsheet),
diff --git a/.config/ags/modules/.configuration/user_options.js b/.config/ags/modules/.configuration/user_options.js
index 6bb90255f..e0ffa4e5f 100644
--- a/.config/ags/modules/.configuration/user_options.js
+++ b/.config/ags/modules/.configuration/user_options.js
@@ -147,6 +147,12 @@ let configOptions = {
},
'workspaces': {
'shown': 10,
+ 'style': 'japanese'
+ },
+ 'wallselect': {
+ 'enabled': true,
+ 'wallpaperFolder': '/Pictures/Wallpapers',
+ 'wallpaperLimit': 100
},
'dock': {
'enabled': false,
diff --git a/.config/ags/modules/bar/normal/workspaces_hyprland.js b/.config/ags/modules/bar/normal/workspaces_hyprland.js
index 8e7e789bc..abbf6aeee 100644
--- a/.config/ags/modules/bar/normal/workspaces_hyprland.js
+++ b/.config/ags/modules/bar/normal/workspaces_hyprland.js
@@ -36,6 +36,22 @@ const getFontWeightName = (weight) => {
}
}
+// Number style conversion functions
+const numberStyles = {
+ 'normal': (n) => n.toString(),
+ 'thai': (n) => n.toString().replace(/[0-9]/g, d => '๐๑๒๓๔๕๖๗๘๙'[d]),
+ 'japanese': (n) => n.toString().replace(/[0-9]/g, d => '〇一二三四五六七八九'[d]),
+ 'chinese': (n) => n.toString().replace(/[0-9]/g, d => '零一二三四五六七八九'[d]),
+ 'korean': (n) => n.toString().replace(/[0-9]/g, d => '영일이삼사오육칠팔구'[d]),
+ 'devanagari': (n) => n.toString().replace(/[0-9]/g, d => '०१२३४५६७८९'[d]),
+ 'bengali': (n) => n.toString().replace(/[0-9]/g, d => '০১২৩৪৫৬৭৮৯'[d])
+};
+
+const convertNumber = (number, style = 'normal') => {
+ const converter = numberStyles[style] || numberStyles.normal;
+ return converter(number);
+};
+
// Font size = workspace id
const WorkspaceContents = (count = 10) => {
return DrawingArea({
@@ -165,7 +181,11 @@ const WorkspaceContents = (count = 10) => {
else
cr.setSourceRGBA(inactivecolors.red, inactivecolors.green, inactivecolors.blue, inactivecolors.alpha);
- layout.set_text(`${i + offset}`, -1);
+ // Convert number to selected style
+ const numberStyle = userOptions.workspaces.style || 'normal';
+ const displayNumber = convertNumber(i + offset, numberStyle);
+ layout.set_text(displayNumber, -1);
+
const [layoutWidth, layoutHeight] = layout.get_pixel_size();
const x = -workspaceRadius + (workspaceDiameter * i) - (layoutWidth / 2);
const y = (height - layoutHeight) / 2;
@@ -179,10 +199,11 @@ const WorkspaceContents = (count = 10) => {
}
export default () => EventBox({
- onScrollUp: () => Hyprland.messageAsync(`dispatch workspace r-1`).catch(print),
- onScrollDown: () => Hyprland.messageAsync(`dispatch workspace r+1`).catch(print),
+ // onScrollUp: () => Hyprland.messageAsync(`dispatch workspace -1`).catch(print),
+ // onScrollDown: () => Hyprland.messageAsync(`dispatch workspace +1`).catch(print),
onMiddleClick: () => toggleWindowOnAllMonitors('osk'),
onSecondaryClick: () => App.toggleWindow('overview'),
+ hexpand:true,
attribute: {
clicked: false,
ws_group: 0,
@@ -190,9 +211,11 @@ export default () => EventBox({
child: Box({
homogeneous: true,
className: 'bar-group-margin',
+ hexpand:true,
children: [Box({
className: 'bar-group bar-group-standalone bar-group-pad',
css: 'min-width: 2px;',
+ hexpand:true,
children: [WorkspaceContents(userOptions.workspaces.shown)],
})]
}),
diff --git a/.config/ags/modules/indicators/colorscheme.js b/.config/ags/modules/indicators/colorscheme.js
index bb00558ef..ff4b36ee5 100644
--- a/.config/ags/modules/indicators/colorscheme.js
+++ b/.config/ags/modules/indicators/colorscheme.js
@@ -78,8 +78,8 @@ function calculateSchemeInitIndex(optionsArr, searchValue = 'vibrant') {
const schemeOptionsArr = [
[
- { name: getString('Tonal Spot'), value: 'tonalspot' },
- { name: getString('Fruit Salad'), value: 'fruitsalad' },
+ { name: getString('Tonal Spot'), value: 'tonal-spot' },
+ { name: getString('Fruit Salad'), value: 'fruit-salad' },
{ name: getString('Fidelity'), value: 'fidelity' },
{ name: getString('Rainbow'), value: 'rainbow' },
],
@@ -87,14 +87,14 @@ const schemeOptionsArr = [
{ name: getString('Neutral'), value: 'neutral' },
{ name: getString('Monochrome'), value: 'monochrome' },
{ name: getString('Expressive'), value: 'expressive' },
- { name: getString('Vibrant'), value: 'vibrant' },
+ // { name: getString('Vibrant'), value: 'content' },
+ { name: getString('Content'), value: 'content' },
],
[
- { name: getString('Vibrant+'), value: 'morevibrant' },
+ // { name: getString('Vibrant+'), value: 'morevibrant' },
],
- //[
- // { name: getString('Content'), value: 'content' },
- //]
+ [
+ ]
];
const LIGHTDARK_FILE_LOCATION = `${GLib.get_user_state_dir()}/ags/user/colormode.txt`;
@@ -133,43 +133,18 @@ const ColorSchemeSettings = () => Widget.Box({
ConfigToggle({
icon: 'border_clear',
name: getString('Transparency'),
- desc: getString('Make shell elements transparent'),
+ desc: getString('Make Everything transparent'),
initValue: initTransparencyVal,
- onChange: (self, newValue) => {
- let transparency = newValue == 0 ? "opaque" : "transparent";
- execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_state_dir()}/ags/user && sed -i "2s/.*/${transparency}/" ${GLib.get_user_state_dir()}/ags/user/colormode.txt`])
- .then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchcolor.sh`]))
- .catch(print);
+ onChange: async (self, newValue) => {
+ try {
+ const transparency = newValue == 0 ? "opaque" : "transparent";
+ await execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_state_dir()}/ags/user && sed -i "2s/.*/${transparency}/" ${GLib.get_user_state_dir()}/ags/user/colormode.txt`]);
+ await execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/applycolor.sh &`]);
+ } catch (error) {
+ console.error('Error changing transparency:', error);
+ }
},
- }),
- Widget.Box({
- tooltipText: getString('Theme GTK apps using accent color\n(drawback: dark/light mode switching requires restart)'),
- className: 'txt spacing-h-5 configtoggle-box',
- children: [
- MaterialIcon('imagesearch_roller', 'norm'),
- Widget.Label({
- className: 'txt txt-small',
- label: getString('Use Gradience'),
- }),
- Widget.Box({ hexpand: true }),
- ConfigMulipleSelection({
- hpack: 'center',
- vpack: 'center',
- optionsArr: [
- [{ name: 'Off', value: 0 }, { name: 'On', value: 1 }],
- ],
- initIndex: [-1, -1],
- onChange: (value, name) => {
- const ADWAITA_BLUE = "#3584E4";
- if (value) execAsync([`bash`, `-c`, `${App.configDir}/scripts/color_generation/switchcolor.sh - --yes-gradience`, `&`])
- .catch(print);
- else execAsync([`bash`, `-c`, `${App.configDir}/scripts/color_generation/switchcolor.sh "${ADWAITA_BLUE}" --no-gradience`, `&`])
- .catch(print);
-
- },
- }),
- ]
- }),
+ })
]
}),
Widget.Box({
diff --git a/.config/ags/modules/indicators/main.js b/.config/ags/modules/indicators/main.js
index 16741937f..2096aa25b 100644
--- a/.config/ags/modules/indicators/main.js
+++ b/.config/ags/modules/indicators/main.js
@@ -23,7 +23,7 @@ export default (monitor = 0) => Widget.Window({
css: 'min-height: 2px;',
children: [
IndicatorValues(monitor),
- MusicControls(),
+ // MusicControls(),
NotificationPopups(),
ColorScheme(),
]
diff --git a/.config/ags/modules/wallselect/main.js b/.config/ags/modules/wallselect/main.js
new file mode 100644
index 000000000..06746eea1
--- /dev/null
+++ b/.config/ags/modules/wallselect/main.js
@@ -0,0 +1,224 @@
+import Widget from "resource:///com/github/Aylur/ags/widget.js";
+import * as Utils from "resource:///com/github/Aylur/ags/utils.js";
+import App from "resource:///com/github/Aylur/ags/app.js";
+import userOptions from "../.configuration/user_options.js";
+import GLib from 'gi://GLib';
+import Gio from 'gi://Gio';
+const { Box, Label, EventBox, Scrollable, Button } = Widget;
+// Constants
+const CONFIG_DIR = GLib.get_home_dir() + '/.config/ags';
+const WALLPAPER_DIR = GLib.get_home_dir() + (userOptions.wallselect.wallpaperFolder || '/Pictures/wallpapers');
+const THUMBNAIL_DIR = GLib.build_filenamev([WALLPAPER_DIR, "thumbnails"]);
+
+// Cached Variables
+let wallpaperPathsPromise = null;
+let cachedContent = null;
+let fileMonitor = null;
+
+// Initialize file monitoring
+const initFileMonitor = () => {
+ if (fileMonitor) return;
+
+ const file = Gio.File.new_for_path(WALLPAPER_DIR);
+ fileMonitor = file.monitor_directory(Gio.FileMonitorFlags.NONE, null);
+
+ fileMonitor.connect('changed', (_, file, otherFile, eventType) => {
+ const path = file.get_path();
+ const ext = path.toLowerCase().split('.').pop();
+ const validExts = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'tga', 'tiff', 'bmp', 'ico'];
+
+ // Handle both file creation and deletion
+ if ((eventType === Gio.FileMonitorEvent.CREATED ||
+ eventType === Gio.FileMonitorEvent.DELETED) &&
+ validExts.includes(ext)) {
+
+ const action = eventType === Gio.FileMonitorEvent.CREATED ? 'added' : 'deleted';
+
+ if (eventType === Gio.FileMonitorEvent.DELETED) {
+ // Get the thumbnail path
+ const filename = path.split('/').pop();
+ const thumbnailPath = GLib.build_filenamev([THUMBNAIL_DIR, filename]);
+
+ // Delete the thumbnail if it exists
+ if (GLib.file_test(thumbnailPath, GLib.FileTest.EXISTS)) {
+ GLib.unlink(thumbnailPath);
+ }
+ }
+
+ // Regenerate thumbnails
+ Utils.execAsync([`bash`, `${CONFIG_DIR}/scripts/generate_thumbnails.sh`])
+ .then(() => {
+ // Reset caches
+ wallpaperPathsPromise = null;
+ cachedContent = null;
+
+ // Refresh UI if visible
+ if (App.getWindow('wallselect')?.visible) {
+ App.closeWindow('wallselect');
+ App.openWindow('wallselect');
+ }
+ });
+ }
+ });
+};
+
+
+// Wallpaper Button
+const WallpaperButton = (path) =>
+ Widget.Button({
+ child: Box({ className: "preview-box", css: `background-image: url("${path}");` }),
+ onClicked: () => {
+ Utils.execAsync(['sh', `${CONFIG_DIR}/scripts/color_generation/switchwall.sh`, path.replace("thumbnails", "")]);
+ App.closeWindow("wallselect");
+ },
+ });
+
+// Get Wallpaper Paths
+const getWallpaperPaths = () => {
+ if (wallpaperPathsPromise) return wallpaperPathsPromise;
+ wallpaperPathsPromise = Utils.execAsync(
+ `find ${GLib.shell_quote(THUMBNAIL_DIR)} -type f \\( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" -o -iname "*.webp" -o -iname "*.tga" -o -iname "*.tiff" -o -iname "*.bmp" -o -iname "*.ico" \\)`
+ ).then(files => files.split("\n").filter(Boolean));
+ return wallpaperPathsPromise;
+};
+
+// Create Content
+const createContent = async () => {
+ if (cachedContent) return cachedContent;
+
+ try {
+ const wallpaperPaths = await getWallpaperPaths();
+
+ if (wallpaperPaths.length === 0) {
+ return createPlaceholder();
+ }
+
+ cachedContent = EventBox({
+ onPrimaryClick: () => App.closeWindow("wallselect"),
+ onSecondaryClick: () => App.closeWindow("wallselect"),
+ onMiddleClick: () => App.closeWindow("wallselect"),
+ child: Scrollable({
+ hexpand: true,
+ vexpand: false,
+ hscroll: "always",
+ vscroll: "never",
+ child: Box({
+ className: "wallpaper-list",
+ children: wallpaperPaths.map(WallpaperButton),
+ }),
+ }),
+ });
+
+ return cachedContent;
+
+ } catch (error) {
+ return Box({
+ className: "wallpaper-error",
+ vexpand: true,
+ hexpand: true,
+ children: [
+ Label({ label: "Error loading wallpapers.", className: "txt-large txt-error", }),
+ ],
+ });
+ }
+};
+
+// Placeholder content when no wallpapers found
+const createPlaceholder = () => Box({
+ className: 'wallpaper-placeholder',
+ vertical: true,
+ vexpand: true,
+ hexpand: true,
+ spacing: 10,
+ children: [
+ Box({
+ vertical: true,
+ vpack: 'center',
+ hpack: 'center',
+ vexpand: true,
+ children: [
+ Label({ label: 'No wallpapers found.', className: 'txt-norm onSurfaceVariant', }),
+ Label({ label: 'Generate thumbnails to get started.',opacity:0.8, className: 'txt-small onSurfaceVariant', }),
+ ],
+ }),
+ ],
+});
+
+// Generate Thumbnails Button
+const GenerateButton = () => Widget.Button({
+ className: 'button-accent generate-thumbnails',
+ child: Box({
+ spacing:8,
+ children: [
+ Widget.Icon({ icon: 'view-refresh-symbolic', size: 16, }),
+ Widget.Label({ className:"txt-small onSurfaceVariant",label: 'Generate Thumbnails', }),
+ ],
+ }),
+ tooltipText: 'Regenerate all wallpaper thumbnails',
+ onClicked: () => {
+ Utils.execAsync([`bash`, `${CONFIG_DIR}/scripts/generate_thumbnails.sh`])
+ .then(() => {
+ cachedContent = null; // Invalidate cache
+ App.closeWindow('wallselect');
+ App.openWindow('wallselect');
+ });
+ },
+});
+
+// Toggle Wallselect Window
+const toggleWindow = () => {
+ const win = App.getWindow('wallselect');
+ if (!win) return;
+ win.visible = !win.visible;
+};
+export { toggleWindow };
+
+// Initialize monitoring when the module loads
+initFileMonitor();
+
+// Main Window
+export default () => Widget.Window({
+ name: "wallselect",
+ anchor: ['top', 'bottom', 'right', 'left'],
+ layer: 'overlay',
+ visible: false,
+ child: Widget.Overlay({
+ child: EventBox({
+ onPrimaryClick: () => App.closeWindow("wallselect"),
+ onSecondaryClick: () => App.closeWindow("wallselect"),
+ onMiddleClick: () => App.closeWindow("wallselect"),
+ child: Box({ css: 'min-height: 1000px;', }),
+ }),
+ overlays: [
+ Box({
+ vertical: true,
+ className: "sidebar-right spacing-v-15",
+ vpack: 'start',
+ children: [
+ Box({
+ className: "wallselect-header",
+ children: [
+ Box({ hexpand: true }),
+ GenerateButton(),
+ ],
+ }),
+ Box({
+ vertical: true,
+ className: "sidebar-module",
+ setup: (self) =>
+ self.hook(
+ App,
+ async (_, name, visible) => {
+ if (name === "wallselect" && visible) {
+ const content = await createContent();
+ self.children = [content];
+ }
+ },
+ "window-toggled",
+ ),
+ }),
+ ],
+ }),
+ ],
+ }),
+});
\ No newline at end of file
diff --git a/.config/ags/scripts/color_generation/applycolor.sh b/.config/ags/scripts/color_generation/applycolor.sh
index 6c371f40c..9971b9810 100755
--- a/.config/ags/scripts/color_generation/applycolor.sh
+++ b/.config/ags/scripts/color_generation/applycolor.sh
@@ -6,11 +6,10 @@ XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
CONFIG_DIR="$XDG_CONFIG_HOME/ags"
CACHE_DIR="$XDG_CACHE_HOME/ags"
STATE_DIR="$XDG_STATE_HOME/ags"
+colormodefile="$STATE_DIR/user/colormode.txt"
-term_alpha=100 #Set this to < 100 make all your terminals transparent
-# sleep 0 # idk i wanted some delay or colors dont get applied properly
if [ ! -d "$CACHE_DIR"/user/generated ]; then
- mkdir -p "$CACHE_DIR"/user/generated
+ mkdir -p "$CACHE_DIR"/user/generated
fi
cd "$CONFIG_DIR" || exit
@@ -19,11 +18,26 @@ colorstrings=''
colorlist=()
colorvalues=()
-# wallpath=$(swww query | head -1 | awk -F 'image: ' '{print $2}')
-# wallpath_png="$CACHE_DIR/user/generated/hypr/lockscreen.png"
-# convert "$wallpath" "$wallpath_png"
-# wallpath_png=$(echo "$wallpath_png" | sed 's/\//\\\//g')
-# wallpath_png=$(sed 's/\//\\\\\//g' <<< "$wallpath_png")
+
+# Fetch second line from color mode file
+secondline=$(sed -n '2p' "$colormodefile")
+
+# Determine terminal opacity based on the second line
+if [[ "$secondline" == *"transparent"* ]]; then # Set for transparent background
+ term_transparency=0.83
+ ags_transparency=True
+ hypr_opacity=0.9
+ hypr_value=1
+ rofi_alpha=#00000090
+ rofi_alpha_element=#00000025
+else #Opaque Stuff
+ hypr_value=0
+ term_transparency=1
+ ags_transparency=False
+ hypr_opacity=1
+ rofi_alpha="var(surface)"
+ rofi_alpha_element="var(surface)"
+fi
transparentize() {
local hex="$1"
@@ -38,152 +52,41 @@ transparentize() {
}
get_light_dark() {
- lightdark=""
- if [ ! -f "$STATE_DIR/user/colormode.txt" ]; then
- echo "" >"$STATE_DIR/user/colormode.txt"
- else
- lightdark=$(sed -n '1p' "$STATE_DIR/user/colormode.txt")
- fi
- echo "$lightdark"
-}
-
-apply_fuzzel() {
- # Check if scripts/templates/fuzzel/fuzzel.ini exists
- if [ ! -f "scripts/templates/fuzzel/fuzzel.ini" ]; then
- echo "Template file not found for Fuzzel. Skipping that."
- return
- fi
- # Copy template
- mkdir -p "$CACHE_DIR"/user/generated/fuzzel
- cp "scripts/templates/fuzzel/fuzzel.ini" "$CACHE_DIR"/user/generated/fuzzel/fuzzel.ini
- # Apply colors
- for i in "${!colorlist[@]}"; do
- sed -i "s/{{ ${colorlist[$i]} }}/${colorvalues[$i]#\#}/g" "$CACHE_DIR"/user/generated/fuzzel/fuzzel.ini
- done
-
- cp "$CACHE_DIR"/user/generated/fuzzel/fuzzel.ini "$XDG_CONFIG_HOME"/fuzzel/fuzzel.ini
-}
-
-apply_term() {
- # Check if terminal escape sequence template exists
- if [ ! -f "scripts/templates/terminal/sequences.txt" ]; then
- echo "Template file not found for Terminal. Skipping that."
- return
- fi
- # Copy template
- mkdir -p "$CACHE_DIR"/user/generated/terminal
- cp "scripts/templates/terminal/sequences.txt" "$CACHE_DIR"/user/generated/terminal/sequences.txt
- # Apply colors
- for i in "${!colorlist[@]}"; do
- sed -i "s/${colorlist[$i]} #/${colorvalues[$i]#\#}/g" "$CACHE_DIR"/user/generated/terminal/sequences.txt
- done
-
- sed -i "s/\$alpha/$term_alpha/g" "$CACHE_DIR/user/generated/terminal/sequences.txt"
-
- for file in /dev/pts/*; do
- if [[ $file =~ ^/dev/pts/[0-9]+$ ]]; then
- cat "$CACHE_DIR"/user/generated/terminal/sequences.txt >"$file"
+ lightdark=""
+ if [ ! -f "$STATE_DIR/user/colormode.txt" ]; then
+ echo "" > "$STATE_DIR/user/colormode.txt"
+ else
+ lightdark=$(sed -n '1p' "$STATE_DIR/user/colormode.txt")
fi
- done
-}
-
-apply_hyprland() {
- # Check if scripts/templates/hypr/hyprland/colors.conf exists
- if [ ! -f "scripts/templates/hypr/hyprland/colors.conf" ]; then
- echo "Template file not found for Hyprland colors. Skipping that."
- return
- fi
- # Copy template
- mkdir -p "$CACHE_DIR"/user/generated/hypr/hyprland
- cp "scripts/templates/hypr/hyprland/colors.conf" "$CACHE_DIR"/user/generated/hypr/hyprland/colors.conf
- # Apply colors
- for i in "${!colorlist[@]}"; do
- sed -i "s/{{ ${colorlist[$i]} }}/${colorvalues[$i]#\#}/g" "$CACHE_DIR"/user/generated/hypr/hyprland/colors.conf
- done
-
- cp "$CACHE_DIR"/user/generated/hypr/hyprland/colors.conf "$XDG_CONFIG_HOME"/hypr/hyprland/colors.conf
+ echo "$lightdark"
}
-
-apply_hyprlock() {
- # Check if scripts/templates/hypr/hyprlock.conf exists
- if [ ! -f "scripts/templates/hypr/hyprlock.conf" ]; then
- echo "Template file not found for hyprlock. Skipping that."
- return
- fi
- # Copy template
- mkdir -p "$CACHE_DIR"/user/generated/hypr/
- cp "scripts/templates/hypr/hyprlock.conf" "$CACHE_DIR"/user/generated/hypr/hyprlock.conf
- # Apply colors
- # sed -i "s/{{ SWWW_WALL }}/${wallpath_png}/g" "$CACHE_DIR"/user/generated/hypr/hyprlock.conf
- for i in "${!colorlist[@]}"; do
- sed -i "s/{{ ${colorlist[$i]} }}/${colorvalues[$i]#\#}/g" "$CACHE_DIR"/user/generated/hypr/hyprlock.conf
- done
-
- cp "$CACHE_DIR"/user/generated/hypr/hyprlock.conf "$XDG_CONFIG_HOME"/hypr/hyprlock.conf
-}
-
apply_lightdark() {
- lightdark=$(get_light_dark)
- if [ "$lightdark" = "light" ]; then
- gsettings set org.gnome.desktop.interface color-scheme 'prefer-light'
- else
- gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
- fi
-}
-
-apply_gtk() { # Using gradience-cli
- usegradience=$(sed -n '4p' "$STATE_DIR/user/colormode.txt")
- if [[ "$usegradience" = "nogradience" ]]; then
- rm "$XDG_CONFIG_HOME/gtk-3.0/gtk.css"
- rm "$XDG_CONFIG_HOME/gtk-4.0/gtk.css"
- return
- fi
-
- # Copy template
- mkdir -p "$CACHE_DIR"/user/generated/gradience
- cp "scripts/templates/gradience/preset.json" "$CACHE_DIR"/user/generated/gradience/preset.json
-
- # Apply colors
- for i in "${!colorlist[@]}"; do
- sed -i "s/{{ ${colorlist[$i]} }}/${colorvalues[$i]}/g" "$CACHE_DIR"/user/generated/gradience/preset.json
- done
-
- mkdir -p "$XDG_CONFIG_HOME/presets" # create gradience presets folder
- source $(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate
- gradience-cli apply -p "$CACHE_DIR"/user/generated/gradience/preset.json --gtk both
- deactivate
-
- # And set GTK theme manually as Gradience defaults to light adw-gtk3
- # (which is unreadable when broken when you use dark mode)
- lightdark=$(get_light_dark)
- if [ "$lightdark" = "light" ]; then
- gsettings set org.gnome.desktop.interface gtk-theme 'adw-gtk3'
- else
- gsettings set org.gnome.desktop.interface gtk-theme adw-gtk3-dark
- fi
-}
-
-apply_ags() {
- agsv1 run-js "handleStyles(false);"
- agsv1 run-js 'openColorScheme.value = true; Utils.timeout(2000, () => openColorScheme.value = false);'
+ lightdark=$(get_light_dark)
+ if [ "$lightdark" = "light" ]; then
+ gsettings set org.gnome.desktop.interface color-scheme 'prefer-light'
+ else
+ gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
+ fi
}
-apply_qt() {
- sh "$CONFIG_DIR/scripts/kvantum/materialQT.sh" # generate kvantum theme
- python "$CONFIG_DIR/scripts/kvantum/changeAdwColors.py" # apply config colors
+apply_transparency() {
+ # Ags
+ sed -i "s/$transparent:.*;/$transparent:$ags_transparency;/" ~/.config/ags/scss/mode.scss
+ agsv1 run-js "handleStyles(false);"
+ # Rofi
+ sed -i "s/wbg:.*;/wbg:$rofi_alpha;/" ~/.config/rofi/config.rasi
+ sed -i "s/element-bg:.*;/element-bg:$rofi_alpha_element;/" ~/.config/rofi/config.rasi
+ # Hyprland
+ sed -i "s/windowrule = opacity .*\ override/windowrule = opacity $hypr_opacity override/" ~/.config/hypr/hyprland/rules/default.conf
+ # Terminal
+ sed -i "s/background_opacity .*\ override/background_opacity $term_transparency override/" ~/.config/kitty/kitty.conf
}
colornames=$(cat $STATE_DIR/scss/_material.scss | cut -d: -f1)
colorstrings=$(cat $STATE_DIR/scss/_material.scss | cut -d: -f2 | cut -d ' ' -f2 | cut -d ";" -f1)
IFS=$'\n'
-colorlist=($colornames) # Array of color names
-colorvalues=($colorstrings) # Array of color values
+colorlist=( $colornames ) # Array of color names
+colorvalues=( $colorstrings ) # Array of color values
-apply_ags &
-apply_hyprland &
-apply_hyprlock &
apply_lightdark &
-apply_gtk &
-apply_qt &
-apply_fuzzel &
-apply_term &
+apply_transparency &
diff --git a/.config/ags/scripts/color_generation/colorgen.sh b/.config/ags/scripts/color_generation/colorgen.sh
index b4ab6d009..be3684777 100755
--- a/.config/ags/scripts/color_generation/colorgen.sh
+++ b/.config/ags/scripts/color_generation/colorgen.sh
@@ -4,6 +4,7 @@ XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
CONFIG_DIR="$XDG_CONFIG_HOME/ags"
+SCRIPTS_DIR="$XDG_CONFIG_HOME/ags/scripts"
CACHE_DIR="$XDG_CACHE_HOME/ags"
STATE_DIR="$XDG_STATE_HOME/ags"
@@ -15,88 +16,45 @@ fi
# check if the file $STATE_DIR/user/colormode.txt exists. if not, create it. else, read it to $lightdark
colormodefile="$STATE_DIR/user/colormode.txt"
-lightdark="dark"
-transparency="opaque"
-materialscheme="vibrant"
-terminalscheme="$XDG_CONFIG_HOME/ags/scripts/templates/terminal/scheme-base.json"
+lightdark=""
+transparency=""
+materialscheme=""
if [ ! -f $colormodefile ]; then
echo "dark" > $colormodefile
echo "opaque" >> $colormodefile
- echo "vibrant" >> $colormodefile
-elif [[ $(wc -l < $colormodefile) -ne 4 || $(wc -w < $colormodefile) -ne 4 ]]; then
+ echo "content" >> $colormodefile
+elif [[ $(wc -l < $colormodefile) -ne 3 || $(wc -w < $colormodefile) -ne 3 ]]; then
echo "dark" > $colormodefile
echo "opaque" >> $colormodefile
- echo "vibrant" >> $colormodefile
- echo "yesgradience" >> $colormodefile
+ echo "content" >> $colormodefile
else
lightdark=$(sed -n '1p' $colormodefile)
transparency=$(sed -n '2p' $colormodefile)
materialscheme=$(sed -n '3p' $colormodefile)
- if [ "$materialscheme" = "monochrome" ]; then
- terminalscheme="$XDG_CONFIG_HOME/ags/scripts/templates/terminal/scheme-monochrome.json"
- fi
-fi
-backend="material" # color generator backend
-if [ ! -f "$STATE_DIR/user/colorbackend.txt" ]; then
- echo "material" > "$STATE_DIR/user/colorbackend.txt"
-else
- backend=$(cat "$STATE_DIR/user/colorbackend.txt")
fi
-cd "$CONFIG_DIR/scripts/" || exit
-if [[ "$1" = "#"* ]]; then # this is a color
- color_generation/generate_colors_material.py --color "$1" \
- --mode "$lightdark" --scheme "$materialscheme" --transparency "$transparency" \
- --termscheme $terminalscheme --blend_bg_fg \
- > "$CACHE_DIR"/user/generated/material_colors.scss
- if [ "$2" = "--apply" ]; then
- cp "$CACHE_DIR"/user/generated/material_colors.scss "$STATE_DIR/scss/_material.scss"
- color_generation/applycolor.sh
- fi
-elif [ "$backend" = "material" ]; then
- smartflag=''
- if [ "$3" = "--smart" ]; then
- smartflag='--smart'
+# Get the color mode
+COLORMODE_FILE_DIR="/tmp/ags/colormode"
+if [ -f "$COLORMODE_FILE_DIR" ]; then
+ colormode=$(sed -n '1p' "$COLORMODE_FILE_DIR")
+ if [[ "$colormode" == "light" ]]; then
+ lightdark="light"
+ else
+ lightdark="dark"
fi
- source $(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate
- python color_generation/generate_colors_material.py --path "$(eval echo $1)" \
- --mode "$lightdark" --scheme "$materialscheme" --transparency "$transparency" \
- --termscheme $terminalscheme --blend_bg_fg \
- --cache "$STATE_DIR/user/color.txt" $smartflag \
- > "$CACHE_DIR"/user/generated/material_colors.scss
- deactivate
- if [ "$2" = "--apply" ]; then
- cp "$CACHE_DIR"/user/generated/material_colors.scss "$STATE_DIR/scss/_material.scss"
- color_generation/applycolor.sh
- fi
-elif [ "$backend" = "pywal" ]; then
- # clear and generate
- source $(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate
- wal -c
- wal -i "$1" -n $lightdark -q
- deactivate
- # copy scss
- cp "$XDG_CACHE_HOME/wal/colors.scss" "$CACHE_DIR"/user/generated/material_colors.scss
+fi
- cat color_generation/pywal_to_material.scss >> "$CACHE_DIR"/user/generated/material_colors.scss
- if [ "$2" = "--apply" ]; then
- sass -I "$STATE_DIR/scss" -I "$CONFIG_DIR/scss/fallback" "$CACHE_DIR"/user/generated/material_colors.scss "$CACHE_DIR"/user/generated/colors_classes.scss --style compressed
- # sed -i "s/ { color//g" "$CACHE_DIR"/user/generated/colors_classes.scss
- # sed -i "s/\./$/g" "$CACHE_DIR"/user/generated/colors_classes.scss
- # sed -i "s/}//g" "$CACHE_DIR"/user/generated/colors_classes.scss
- sed -i "s/{color//g" "$CACHE_DIR"/user/generated/colors_classes.scss
- sed -i "s/\./$/g" "$CACHE_DIR"/user/generated/colors_classes.scss
- sed -i "s/\:/: /g" "$CACHE_DIR"/user/generated/colors_classes.scss
- sed -i "s/}/;\n/g" "$CACHE_DIR"/user/generated/colors_classes.scss
- if [ "$lightdark" = "light" ]; then
- printf "\n""\$darkmode: false;""\n" >> "$CACHE_DIR"/user/generated/colors_classes.scss
- else
- printf "\n""\$darkmode: true;""\n" >> "$CACHE_DIR"/user/generated/colors_classes.scss
- fi
+cd "$CONFIG_DIR/scripts/" || exit
- cp "$CACHE_DIR"/user/generated/colors_classes.scss "$STATE_DIR/scss/_material.scss"
+# Store the image source if it's an image
+if [[ ! "$1" = "#"* ]]; then # this is an image
+ # Store the image path
+ echo "$1" > "$STATE_DIR/user/current_wallpaper.txt"
+fi
- color_generation/applycolor.sh
- fi
+matugen image "$1" --mode "$lightdark" -t "scheme-$materialscheme"
+# Apply the generated colors if --apply flag is set
+if [ "$2" = "" ]; then
+exit
fi
diff --git a/.config/ags/scripts/color_generation/generate_colors_material.py b/.config/ags/scripts/color_generation/generate_colors_material.py
deleted file mode 100755
index 5c2c8c71a..000000000
--- a/.config/ags/scripts/color_generation/generate_colors_material.py
+++ /dev/null
@@ -1,184 +0,0 @@
-#!/usr/bin/env -S\_/bin/sh\_-xc\_"source\_\$(eval\_echo\_\$ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate&&exec\_python\_-E\_"\$0"\_"\$@""
-import argparse
-import math
-import json
-from PIL import Image
-from materialyoucolor.quantize import QuantizeCelebi
-from materialyoucolor.score.score import Score
-from materialyoucolor.hct import Hct
-from materialyoucolor.dynamiccolor.material_dynamic_colors import MaterialDynamicColors
-from materialyoucolor.utils.color_utils import (rgba_from_argb, argb_from_rgb, argb_from_rgba)
-from materialyoucolor.utils.math_utils import (sanitize_degrees_double, difference_degrees, rotation_direction)
-
-parser = argparse.ArgumentParser(description='Color generation script')
-parser.add_argument('--path', type=str, default=None, help='generate colorscheme from image')
-parser.add_argument('--size', type=int , default=128 , help='bitmap image size')
-parser.add_argument('--color', type=str, default=None, help='generate colorscheme from color')
-parser.add_argument('--mode', type=str, choices=['dark', 'light'], default='dark', help='dark or light mode')
-parser.add_argument('--scheme', type=str, default='vibrant', help='material scheme to use')
-parser.add_argument('--smart', action='store_true', default=False, help='decide scheme type based on image color')
-parser.add_argument('--transparency', type=str, choices=['opaque', 'transparent'], default='opaque', help='enable transparency')
-parser.add_argument('--termscheme', type=str, default=None, help='JSON file containg the terminal scheme for generating term colors')
-parser.add_argument('--harmony', type=float , default=0.8, help='(0-1) Color hue shift towards accent')
-parser.add_argument('--harmonize_threshold', type=float , default=100, help='(0-180) Max threshold angle to limit color hue shift')
-parser.add_argument('--term_fg_boost', type=float , default=0.35, help='Make terminal foreground more different from the background')
-parser.add_argument('--blend_bg_fg', action='store_true', default=False, help='Shift terminal background or foreground towards accent')
-parser.add_argument('--cache', type=str, default=None, help='file path to store the generated color')
-parser.add_argument('--debug', action='store_true', default=False, help='debug mode')
-args = parser.parse_args()
-
-rgba_to_hex = lambda rgba: "#{:02X}{:02X}{:02X}".format(rgba[0], rgba[1], rgba[2])
-argb_to_hex = lambda argb: "#{:02X}{:02X}{:02X}".format(*map(round, rgba_from_argb(argb)))
-hex_to_argb = lambda hex_code: argb_from_rgb(int(hex_code[1:3], 16), int(hex_code[3:5], 16), int(hex_code[5:], 16))
-display_color = lambda rgba : "\x1B[38;2;{};{};{}m{}\x1B[0m".format(rgba[0], rgba[1], rgba[2], "\x1b[7m \x1b[7m")
-
-def calculate_optimal_size (width: int, height: int, bitmap_size: int) -> (int, int):
- image_area = width * height;
- bitmap_area = bitmap_size ** 2
- scale = math.sqrt(bitmap_area/image_area) if image_area > bitmap_area else 1
- new_width = round(width * scale)
- new_height = round(height * scale)
- if new_width == 0:
- new_width = 1
- if new_height == 0:
- new_height = 1
- return new_width, new_height
-
-def harmonize (design_color: int, source_color: int, threshold: float = 35, harmony: float = 0.5) -> int:
- from_hct = Hct.from_int(design_color)
- to_hct = Hct.from_int(source_color)
- difference_degrees_ = difference_degrees(from_hct.hue, to_hct.hue)
- rotation_degrees = min(difference_degrees_ * harmony, threshold)
- output_hue = sanitize_degrees_double(
- from_hct.hue + rotation_degrees * rotation_direction(from_hct.hue, to_hct.hue)
- )
- return Hct.from_hct(output_hue, from_hct.chroma, from_hct.tone).to_int()
-
-def boost_chroma_tone (argb: int, chroma: float = 1, tone: float = 1) -> int:
- hct = Hct.from_int(argb)
- return Hct.from_hct(hct.hue, hct.chroma * chroma, hct.tone * tone).to_int()
-
-darkmode = (args.mode == 'dark')
-transparent = (args.transparency == 'transparent')
-
-if args.path is not None:
- image = Image.open(args.path)
-
- if image.format == "GIF":
- image.seek(1)
-
- if image.mode in ["L", "P"]:
- image = image.convert('RGB')
- wsize, hsize = image.size
- wsize_new, hsize_new = calculate_optimal_size(wsize, hsize, args.size)
- if wsize_new < wsize or hsize_new < hsize:
- image = image.resize((wsize_new, hsize_new), Image.Resampling.BICUBIC)
- colors = QuantizeCelebi(list(image.getdata()), 128)
- argb = Score.score(colors)[0]
-
- if args.cache is not None:
- with open(args.cache, 'w') as file:
- file.write(argb_to_hex(argb))
- hct = Hct.from_int(argb)
- if(args.smart):
- if(hct.chroma < 20):
- args.scheme = 'neutral'
- if(hct.tone > 60):
- darkmode = False
-elif args.color is not None:
- argb = hex_to_argb(args.color)
- hct = Hct.from_int(argb)
-
-if args.scheme == 'fruitsalad':
- from materialyoucolor.scheme.scheme_fruit_salad import SchemeFruitSalad as Scheme
-elif args.scheme == 'expressive':
- from materialyoucolor.scheme.scheme_expressive import SchemeExpressive as Scheme
-elif args.scheme == 'monochrome':
- from materialyoucolor.scheme.scheme_monochrome import SchemeMonochrome as Scheme
-elif args.scheme == 'rainbow':
- from materialyoucolor.scheme.scheme_rainbow import SchemeRainbow as Scheme
-elif args.scheme == 'tonalspot':
- from materialyoucolor.scheme.scheme_tonal_spot import SchemeTonalSpot as Scheme
-elif args.scheme == 'neutral':
- from materialyoucolor.scheme.scheme_neutral import SchemeNeutral as Scheme
-elif args.scheme == 'fidelity':
- from materialyoucolor.scheme.scheme_fidelity import SchemeFidelity as Scheme
-elif args.scheme == 'content':
- from materialyoucolor.scheme.scheme_content import SchemeContent as Scheme
-elif args.scheme == 'vibrant':
- from materialyoucolor.scheme.scheme_vibrant import SchemeVibrant as Scheme
-else:
- from schemes.scheme_morevibrant import SchemeMoreVibrant as Scheme
-
-# Generate
-scheme = Scheme(hct, darkmode, 0.0)
-
-material_colors = {}
-term_colors = {}
-
-for color in vars(MaterialDynamicColors).keys():
- color_name = getattr(MaterialDynamicColors, color)
- if hasattr(color_name, "get_hct"):
- rgba = color_name.get_hct(scheme).to_rgba()
- material_colors[color] = rgba_to_hex(rgba)
-
-# Extended material
-if darkmode == True:
- material_colors['success'] = '#B5CCBA'
- material_colors['onSuccess'] = '#213528'
- material_colors['successContainer'] = '#374B3E'
- material_colors['onSuccessContainer'] = '#D1E9D6'
-else:
- material_colors['success'] = '#4F6354'
- material_colors['onSuccess'] = '#FFFFFF'
- material_colors['successContainer'] = '#D1E8D5'
- material_colors['onSuccessContainer'] = '#0C1F13'
-
-# Terminal Colors
-if args.termscheme is not None:
- with open(args.termscheme, 'r') as f:
- json_termscheme = f.read()
- term_source_colors = json.loads(json_termscheme)['dark' if darkmode else 'light']
-
- primary_color_argb = hex_to_argb(material_colors['primary_paletteKeyColor'])
- for color, val in term_source_colors.items():
- if(args.scheme == 'monochrome') :
- term_colors[color] = val
- continue
- if args.blend_bg_fg and color == "term0":
- harmonized = boost_chroma_tone(hex_to_argb(material_colors['surfaceContainerLow']), 1.2, 0.95)
- elif args.blend_bg_fg and color == "term15":
- harmonized = boost_chroma_tone(hex_to_argb(material_colors['onSurface']), 3, 1)
- else:
- harmonized = harmonize(hex_to_argb(val), primary_color_argb, args.harmonize_threshold, args.harmony)
- harmonized = boost_chroma_tone(harmonized, 1, 1 + (args.term_fg_boost * (1 if darkmode else -1)))
- term_colors[color] = argb_to_hex(harmonized)
-
-if args.debug == False:
- print(f"$darkmode: {darkmode};")
- print(f"$transparent: {transparent};")
- for color, code in material_colors.items():
- print(f"${color}: {code};")
- for color, code in term_colors.items():
- print(f"${color}: {code};")
-else:
- if args.path is not None:
- print('\n--------------Image properties-----------------')
- print(f"Image size: {wsize} x {hsize}")
- print(f"Resized image: {wsize_new} x {hsize_new}")
- print('\n---------------Selected color------------------')
- print(f"Dark mode: {darkmode}")
- print(f"Scheme: {args.scheme}")
- print(f"Accent color: {display_color(rgba_from_argb(argb))} {argb_to_hex(argb)}")
- print(f"HCT: {hct.hue:.2f} {hct.chroma:.2f} {hct.tone:.2f}")
- print('\n---------------Material colors-----------------')
- for color, code in material_colors.items():
- rgba = rgba_from_argb(hex_to_argb(code))
- print(f"{color.ljust(32)} : {display_color(rgba)} {code}")
- print('\n----------Harmonize terminal colors------------')
- for color, code in term_colors.items():
- rgba = rgba_from_argb(hex_to_argb(code))
- code_source = term_source_colors[color]
- rgba_source = rgba_from_argb(hex_to_argb(code_source))
- print(f"{color.ljust(6)} : {display_color(rgba_source)} {code_source} --> {display_color(rgba)} {code}")
- print('-----------------------------------------------')
diff --git a/.config/ags/scripts/color_generation/pywal.sh b/.config/ags/scripts/color_generation/pywal.sh
deleted file mode 100755
index ded45eee0..000000000
--- a/.config/ags/scripts/color_generation/pywal.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-# A wrapper for pywal inside the virtual env
-source $(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate
-#wal "$@"
-wal $*
-deactivate
diff --git a/.config/ags/scripts/color_generation/pywal_to_material.scss b/.config/ags/scripts/color_generation/pywal_to_material.scss
deleted file mode 100644
index ff049b219..000000000
--- a/.config/ags/scripts/color_generation/pywal_to_material.scss
+++ /dev/null
@@ -1,57 +0,0 @@
-$primary: lighten($color4, 20%);
-$onPrimary: darken($color2, 20%);
-$primaryContainer: darken($color2, 10%);
-$onPrimaryContainer: lighten($color4, 10%);
-$secondary: desaturate(lighten($color5, 20%), 20%);
-$onSecondary: desaturate(darken($color3, 20%), 20%);
-$secondaryContainer: desaturate(darken($color3, 20%), 20%);
-$onSecondaryContainer: desaturate(lighten($color5, 20%), 20%);
-$tertiary: adjust-hue(lighten($color4, 20%), 30deg);
-$onTertiary: adjust-hue(darken($color2, 20%), 30deg);
-$tertiaryContainer: adjust-hue(darken($color2, 10%), 30deg);
-$tertiaryContainer: adjust-hue(lighten($color4, 10%), 30deg);
-$error: #ffb4a9;
-$onError: #680003;
-$errorContainer: #930006;
-$onErrorContainer: #ffb4a9;
-$colorbarbg: $color0;
-$background: $color0;
-$onBackground: $color7;
-$surface: $color0;
-$onSurface: $color7;
-$surfaceVariant: $color1;
-$onSurfaceVariant: $color7;
-$outline: $color7;
-$shadow: #000000;
-$inverseSurface: invert($surface);
-$inverseOnSurface: invert($onSurface);
-$inversePrimary: invert($primary);
-
-.primary { color: $primary; }
-.onPrimary { color: $onPrimary; }
-.primaryContainer { color: $primaryContainer; }
-.onPrimaryContainer { color: $onPrimaryContainer; }
-.secondary { color: $secondary; }
-.onSecondary { color: $onSecondary; }
-.secondaryContainer { color: $secondaryContainer; }
-.onSecondaryContainer { color: $onSecondaryContainer; }
-.tertiary { color: $tertiary; }
-.onTertiary { color: $onTertiary; }
-.tertiaryContainer { color: $tertiaryContainer; }
-.onTertiaryContainer { color: $tertiaryContainer; }
-.error { color: $error; }
-.onError { color: $onError; }
-.errorContainer { color: $errorContainer; }
-.onErrorContainer { color: $onErrorContainer; }
-.colorbarbg { color: $colorbarbg; }
-.background { color: $background; }
-.onBackground { color: $onBackground; }
-.surface { color: $surface; }
-.onSurface { color: $onSurface; }
-.surfaceVariant { color: $surfaceVariant; }
-.onSurfaceVariant { color: $onSurfaceVariant; }
-.outline { color: $outline; }
-.shadow { color: $shadow; }
-.inverseSurface { color: $inverseSurface; }
-.inverseOnSurface { color: $inverseOnSurface; }
-.inversePrimary { color: $inversePrimary; }
diff --git a/.config/ags/scripts/color_generation/randomwall.sh b/.config/ags/scripts/color_generation/randomwall.sh
index f2b18b3fd..60fd26bf8 100755
--- a/.config/ags/scripts/color_generation/randomwall.sh
+++ b/.config/ags/scripts/color_generation/randomwall.sh
@@ -1,4 +1,22 @@
#!/usr/bin/env bash
-XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
-CONFIG_DIR="$XDG_CONFIG_HOME/ags"
-$CONFIG_DIR/scripts/color_generation/switchwall.sh "$(fd . $(xdg-user-dir PICTURES)/wallpapers/ -e .png -e .jpg -e .svg | xargs shuf -n1 -e)"
+
+WallSwitch="$HOME/.config/ags/scripts/color_generation/switchwall.sh"
+RecentWallpapersFile="$HOME/.config/ags/switched_wallpapers.txt"
+MaxRecentWallpapers=1 # Number of recent wallpapers to remember
+
+mkdir -p "$(dirname "$RecentWallpapersFile")"
+touch "$RecentWallpapersFile"
+cleanup_recent_wallpapers() {
+ if [ "$(wc -l < "$RecentWallpapersFile")" -gt "$MaxRecentWallpapers" ]; then
+ head -n -"$MaxRecentWallpapers" "$RecentWallpapersFile" > "$RecentWallpapersFile.tmp" && mv "$RecentWallpapersFile.tmp" "$RecentWallpapersFile"
+ fi
+}
+imgpath=$(find "$HOME/Pictures/Wallpapers/" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" \) ! -path "*/thumbnails/*" ! -path "$(grep -v '^#' "$RecentWallpapersFile" | tr '\n' '|' | sed 's/|$//')" -print0 | shuf -zn 1 | xargs -0 -I {} echo {})
+if [ -z "$imgpath" ]; then
+ echo "No new wallpapers available."
+ exit 1
+fi
+
+"$WallSwitch" "$imgpath"
+echo "$imgpath" >> "$RecentWallpapersFile"
+cleanup_recent_wallpapers
diff --git a/.config/ags/scripts/color_generation/schemes/scheme_morevibrant.py b/.config/ags/scripts/color_generation/schemes/scheme_morevibrant.py
deleted file mode 100644
index 2715021c5..000000000
--- a/.config/ags/scripts/color_generation/schemes/scheme_morevibrant.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from materialyoucolor.scheme.dynamic_scheme import DynamicSchemeOptions, DynamicScheme
-from materialyoucolor.scheme.variant import Variant
-from materialyoucolor.palettes.tonal_palette import TonalPalette
-
-
-class SchemeMoreVibrant(DynamicScheme):
- hues = [0.0, 41.0, 61.0, 101.0, 131.0, 181.0, 251.0, 301.0, 360.0]
- secondary_rotations = [18.0, 15.0, 10.0, 12.0, 15.0, 18.0, 15.0, 12.0, 12.0]
- tertiary_rotations = [35.0, 30.0, 20.0, 25.0, 30.0, 35.0, 30.0, 25.0, 25.0]
-
- def __init__(self, source_color_hct, is_dark, contrast_level):
- super().__init__(
- DynamicSchemeOptions(
- source_color_hct=source_color_hct,
- variant=Variant.VIBRANT,
- contrast_level=contrast_level,
- is_dark=is_dark,
- primary_palette=TonalPalette.from_hue_and_chroma(
- source_color_hct.hue, 200.0
- ),
- secondary_palette=TonalPalette.from_hue_and_chroma(
- DynamicScheme.get_rotated_hue(
- source_color_hct,
- SchemeMoreVibrant.hues,
- SchemeMoreVibrant.secondary_rotations,
- ),
- 32.0,
- ),
- tertiary_palette=TonalPalette.from_hue_and_chroma(
- DynamicScheme.get_rotated_hue(
- source_color_hct,
- SchemeMoreVibrant.hues,
- SchemeMoreVibrant.tertiary_rotations,
- ),
- 32.0,
- ),
- neutral_palette=TonalPalette.from_hue_and_chroma(
- source_color_hct.hue, 13.0
- ),
- neutral_variant_palette=TonalPalette.from_hue_and_chroma(
- source_color_hct.hue, 15.0
- ),
- )
- )
diff --git a/.config/ags/scripts/color_generation/specials/_material_badapple-l.scss b/.config/ags/scripts/color_generation/specials/_material_badapple-l.scss
deleted file mode 100644
index 12c047b0f..000000000
--- a/.config/ags/scripts/color_generation/specials/_material_badapple-l.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-$darkmode: false;
-$primary: #000000;
-$onPrimary: #FFFFFF ;
-$primaryContainer: #d4d4d4;
-$onPrimaryContainer: #000000;
-$secondary: #000000;
-$onSecondary: #FFFFFF ;
-$secondaryContainer: #bebebe;
-$onSecondaryContainer: #000000;
-$tertiary: #000000;
-$onTertiary: #FFFFFF ;
-$tertiaryContainer: #FFFFFF ;
-$onTertiaryContainer: #000000;
-$error: #000000;
-$onError: #FFFFFF ;
-$errorContainer: #FFFFFF ;
-$onErrorContainer: #000000;
-$colorbarbg: #FFFFFF ;
-$background: #FFFFFF ;
-$onBackground: #000000;
-$surface: #f0f0f0;
-$onSurface: #000000;
-$surfaceVariant: #dddddd;
-$onSurfaceVariant: #000000;
-$outline: #525252;
-$shadow: #000000 ;
-$inverseSurface: #000000;
-$inverseOnSurface: #FFFFFF;
-$inversePrimary: #000000;
diff --git a/.config/ags/scripts/color_generation/specials/_material_badapple.scss b/.config/ags/scripts/color_generation/specials/_material_badapple.scss
deleted file mode 100644
index 24dd73ff5..000000000
--- a/.config/ags/scripts/color_generation/specials/_material_badapple.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-$darkmode: true;
-$primary: #e2e2e2;
-$onPrimary: #000000;
-$primaryContainer: #6b6b6b;
-$onPrimaryContainer: #e2e2e2;
-$secondary: #e2e2e2;
-$onSecondary: #000000;
-$secondaryContainer: #313131;
-$onSecondaryContainer: #e2e2e2;
-$tertiary: #e2e2e2;
-$onTertiary: #000000;
-$tertiaryContainer: #000000;
-$onTertiaryContainer: #e2e2e2;
-$error: #e2e2e2;
-$onError: #000000;
-$errorContainer: #000000;
-$onErrorContainer: #e2e2e2;
-$colorbarbg: #000000;
-$background: #000000;
-$onBackground: #e2e2e2;
-$surface: #161616;
-$onSurface: #e2e2e2;
-$surfaceVariant: #242424;
-$onSurfaceVariant: #e2e2e2;
-$outline: #a1a1a1;
-$shadow: #000000;
-$inverseSurface: #e2e2e2;
-$inverseOnSurface: #000000;
-$inversePrimary: #e2e2e2;
diff --git a/.config/ags/scripts/color_generation/switchcolor.sh b/.config/ags/scripts/color_generation/switchcolor.sh
index 183efc7c9..9bb6b06aa 100755
--- a/.config/ags/scripts/color_generation/switchcolor.sh
+++ b/.config/ags/scripts/color_generation/switchcolor.sh
@@ -4,36 +4,7 @@ XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
CONFIG_DIR="$XDG_CONFIG_HOME/ags"
-CACHE_DIR="$XDG_CACHE_HOME/ags"
STATE_DIR="$XDG_STATE_HOME/ags"
-
COLORMODE_FILE_DIR="$STATE_DIR/user/colormode.txt"
-if [ "$1" == "--pick" ]; then
- color=$(hyprpicker --no-fancy)
-elif [[ "$1" = "#"* ]]; then # this is a color
- color=$1
-else
- color=$(cut -f1 "$STATE_DIR/user/color.txt")
-fi
-
-sed -i "1s/.*/$color/" "$STATE_DIR/user/color.txt"
-
-# Use Gradience?
-colormodelines=$(wc -l "$COLORMODE_FILE_DIR" | awk '{print $1}' )
-if [ "$2" == "--no-gradience" ]; then
- if [ "$colormodelines" == "3" ]; then
- echo 'nogradience' >> "$COLORMODE_FILE_DIR"
- else
- sed -i "4s/.*/nogradience/" "$COLORMODE_FILE_DIR"
- fi
-elif [ "$2" == "--yes-gradience" ]; then
- if [ "$colormodelines" == "3" ]; then
- echo 'yesgradience' >> "$COLORMODE_FILE_DIR"
- else
- sed -i "4s/.*/yesgradience/" "$COLORMODE_FILE_DIR"
- fi
-fi
-
-# Generate colors for ags n stuff
-"$CONFIG_DIR"/scripts/color_generation/colorgen.sh "${color}" --apply
+"$CONFIG_DIR"/scripts/color_generation/colorgen.sh "$(cat "$STATE_DIR/user/current_wallpaper.txt")" &
diff --git a/.config/ags/scripts/color_generation/switchwall.sh b/.config/ags/scripts/color_generation/switchwall.sh
index d1aef669e..7515df5dc 100755
--- a/.config/ags/scripts/color_generation/switchwall.sh
+++ b/.config/ags/scripts/color_generation/switchwall.sh
@@ -1,40 +1,24 @@
#!/usr/bin/env bash
-XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
-CONFIG_DIR="$XDG_CONFIG_HOME/ags"
+# Configuration
+CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ags"
+LAST_IMAGE="$HOME/.cache/last_wallpaper.txt"
+YAD="yad --width 1200 --height 800 --file --add-preview --large-preview --title='Choose wallpaper'"
-switch() {
- imgpath=$1
- read scale screenx screeny screensizey < <(hyprctl monitors -j | jq '.[] | select(.focused) | .scale, .x, .y, .height' | xargs)
- cursorposx=$(hyprctl cursorpos -j | jq '.x' 2>/dev/null) || cursorposx=960
- cursorposx=$(bc <<< "scale=0; ($cursorposx - $screenx) * $scale / 1")
- cursorposy=$(hyprctl cursorpos -j | jq '.y' 2>/dev/null) || cursorposy=540
- cursorposy=$(bc <<< "scale=0; ($cursorposy - $screeny) * $scale / 1")
- cursorposy_inverted=$((screensizey - cursorposy))
+# Ensure wallpaper directory exists
+mkdir -p "$HOME/Pictures/Wallpapers"
- if [ "$imgpath" == '' ]; then
- echo 'Aborted'
- exit 0
- fi
+# Validate and set wallpaper
+set_wallpaper() {
+ [[ -z "$1" || ! -f "$1" ]] && { echo "Invalid image path: $1" >&2; return 1; }
+ [[ -f "$LAST_IMAGE" && "$(cat "$LAST_IMAGE")" == "$1" ]] && { echo "Skipping: Same image as last selection."; return; }
- # agsv1 run-js "wallpaper.set('')"
- # sleep 0.1 && agsv1 run-js "wallpaper.set('${imgpath}')" &
- swww img "$imgpath" --transition-step 100 --transition-fps 120 \
- --transition-type grow --transition-angle 30 --transition-duration 1 \
- --transition-pos "$cursorposx, $cursorposy_inverted"
+ swww img "$1" --transition-fps 144 --transition-type wipe --transition-duration 1
+ "$CONFIG_DIR/scripts/color_generation/colorgen.sh" "$1"
+ echo "$1" > "$LAST_IMAGE"
}
-if [ "$1" == "--noswitch" ]; then
- imgpath=$(swww query | awk -F 'image: ' '{print $2}')
- # imgpath=$(agsv1 run-js 'wallpaper.get(0)')
-elif [[ "$1" ]]; then
- switch "$1"
-else
- # Select and set image (hyprland)
-
- cd "$(xdg-user-dir PICTURES)" || return 1
- switch "$(yad --width 1200 --height 800 --file --add-preview --large-preview --title='Choose wallpaper')"
-fi
-
-# Generate colors for ags n stuff
-"$CONFIG_DIR"/scripts/color_generation/colorgen.sh "${imgpath}" --apply --smart
+# Main
+img="$1"
+[[ -z "$img" ]] && img=$($YAD)
+[[ -n "$img" && -f "$img" ]] && set_wallpaper "$img" || exit 1
\ No newline at end of file
diff --git a/.config/ags/scss/main.scss b/.config/ags/scss/main.scss
index 57938e81a..c8a34300c 100644
--- a/.config/ags/scss/main.scss
+++ b/.config/ags/scss/main.scss
@@ -5,13 +5,13 @@
*:not(popover) { all: unset; }
// Colors
+@import './mode'; // Darkmode
@import 'material'; // Material colors
@import './colors'; // Global color definitions. Uses material colors as base.
@import './lib_mixins';
@import 'lib_mixins_overrides';
@import './lib_classes';
@import './common'; // Context menu n stuff
-
// Components
@import './bar';
@import './cheatsheet';
@@ -23,6 +23,7 @@
@import './sidebars';
@import './session';
@import './notifications';
+@import './wallselect';
// Music is put last as it might mess stuff up with pywal
@import './music'; // Everything related to music is here
diff --git a/.config/ags/scss/mode.scss b/.config/ags/scss/mode.scss
new file mode 100644
index 000000000..a19c42626
--- /dev/null
+++ b/.config/ags/scss/mode.scss
@@ -0,0 +1,2 @@
+$darkmode:False;
+$transparent:False;
\ No newline at end of file
diff --git a/.config/ags/scss/wallselect.scss b/.config/ags/scss/wallselect.scss
new file mode 100644
index 000000000..2f4e39a22
--- /dev/null
+++ b/.config/ags/scss/wallselect.scss
@@ -0,0 +1,50 @@
+.wallpaper-list {
+ .preview-box {
+ min-width: 9.375rem;
+ min-height: 5.625rem;
+ background-size: cover;
+ background-position: center;
+ border-radius: 0.5rem;
+ }
+
+ button {
+ padding: 0.25rem;
+ margin: 0.25rem;
+ }
+
+ .scroll-box {
+ min-height: 6.875rem;
+ }
+}
+
+.wallpaper-window {
+ @extend .sidebar-right;
+}
+
+.wallpaper-placeholder {
+ padding: 2rem;
+
+ .txt-large {
+ font-size: 1.2em;
+ }
+
+ .txt-subtext {
+ opacity: 0.8;
+ }
+}
+
+.generate-thumbnails {
+ padding: 0.5rem 1rem;
+ border-radius: 624.9375rem;
+ background-color: $secondaryContainer;
+ color: $onSecondaryContainer;
+ margin-right: 0.5rem;
+
+ &:hover {
+ background-color: mix($secondaryContainer, $onSecondaryContainer, 90%);
+ }
+
+ &:active {
+ background-color: mix($secondaryContainer, $onSecondaryContainer, 80%);
+ }
+}
\ No newline at end of file
diff --git a/.config/ags/switched_wallpapers.txt b/.config/ags/switched_wallpapers.txt
new file mode 100644
index 000000000..e69de29bb
diff --git a/.config/anyrun/style.css b/.config/anyrun/style.css
index ca45f260d..a8e5a6838 100644
--- a/.config/anyrun/style.css
+++ b/.config/anyrun/style.css
@@ -1,6 +1,6 @@
* {
all: unset;
- font-size: 1.3rem;
+ font-size: 1.4rem;
}
#window,
@@ -33,12 +33,12 @@
#match:selected,
#match:hover,
#plugin:hover {
- background: #2e3131;
+ background: #121318;
}
#entry {
- background: #0b0f10;
- border: 1px solid #0b0f10;
+ background: #121318;
+ /* border: 1px solid #8f9099; */
border-radius: 16px;
margin: 0.5rem;
padding: 0.3rem 1rem;
@@ -59,8 +59,9 @@ list > #plugin:hover {
}
box#main {
- background: #0b0f10;
- box-shadow: inset 0 0 0 1px #0b0f10, 0 0 0 1px #0b0f10;
- border-radius: 24px;
+ background: #121318;
+ /* box-shadow: inset 0 0 0 1px #000000, 0 0 0 1px; */
+ border-radius: 20px;
+ min-height:30px;
padding: 0.3rem;
}
diff --git a/.config/hypr/hyprland/keybinds.conf b/.config/hypr/hyprland/keybinds.conf
index f180a843f..bd9296b7e 100644
--- a/.config/hypr/hyprland/keybinds.conf
+++ b/.config/hypr/hyprland/keybinds.conf
@@ -160,6 +160,7 @@ bind = Super, B, exec, agsv1 -t 'sideleft' # Toggle left sidebar
bind = Super, A, exec, agsv1 -t 'sideleft' # [hidden]
bind = Super, O, exec, agsv1 -t 'sideleft' # [hidden]
bind = Super, N, exec, agsv1 -t 'sideright' # Toggle right sidebar
+bind = Super, Y, exec, agsv1 -t 'wallselect' # Toggle wallpaper selector
bind = Super, M, exec, agsv1 run-js 'openMusicControls.value = (!mpris.getPlayer() ? false : !openMusicControls.value);' # Toggle music controls
bind = Super, Comma, exec, agsv1 run-js 'openColorScheme.value = true; Utils.timeout(2000, () => openColorScheme.value = false);' # View color scheme and options
bind = Super, K, exec, for ((i=0; i<$(hyprctl monitors -j | jq length); i++)); do agsv1 -t "osk""$i"; done # Toggle on-screen keyboard
diff --git a/.config/matugen/config.toml b/.config/matugen/config.toml
new file mode 100644
index 000000000..6f3e20de5
--- /dev/null
+++ b/.config/matugen/config.toml
@@ -0,0 +1,75 @@
+[config.wallpaper]
+command = "swww"
+
+[templates.ags]
+input_path = '~/.config/matugen/templates/ags.scss'
+output_path = '~/.local/state/ags/scss/_material.scss'
+post_hook='agsv1 run-js "handleStyles(false);"'
+
+[templates.gradience]
+input_path = '~/.config/matugen/templates/gradience.json'
+output_path = '~/.cache/ags/user/generated/gradience/gradience.json'
+post_hook='rm -rf ~/.config/gtk-4.0 && gradience-cli apply -p ~/.cache/ags/user/generated/gradience/gradience.json --gtk both'
+[templates.hyprlock]
+input_path = '~/.config/matugen/templates/hyprlock.conf'
+output_path = '~/.config/hypr/hyprlock.conf'
+post_hook = 'hyprctl reload'
+
+[templates.hyprland]
+input_path = '~/.config/matugen/templates/hyprland-colors.conf'
+output_path = '~/.config/hypr/colors.conf'
+
+[templates.spicetify]
+input_path = '~/.config/matugen/templates/colors.ini'
+output_path = '~/.config/spicetify/Themes/Comfy/color.ini'
+
+[templates.qt5ct]
+input_path = '~/.config/matugen/templates/qtct-colors.conf'
+output_path = '~/.config/qt5ct/colors/matugen.conf'
+
+[templates.qt6ct]
+input_path = '~/.config/matugen/templates/qtct-colors.conf'
+output_path = '~/.config/qt6ct/colors/matugen.conf'
+
+[templates.starship]
+input_path = '~/.config/matugen/templates/starship-colors.toml'
+output_path = '~/.config/starship.toml'
+post_hook = 'starship init zsh > ~/.zshrc'
+
+[templates.obsidian]
+input_path = '~/.config/matugen/templates/obsidian.css'
+output_path = '/mnt/Data/General-Archive/obsidian/.obsidian/snippets/material-you.css'
+
+[templates.vscode]
+input_path = '~/.config/matugen/templates/vscode-color-theme.json'
+output_path = '~/.windsurf/extensions/theme-material-you/themes/vscode.json'
+post_hook = 'cp ~/.config/matugen/other/vscode-package.json ~/.windsurf/extensions/theme-material-you/package.json'
+
+[templates.pywalfox]
+input_path = '~/.config/matugen/templates/pywalfox-colors.json'
+output_path = '~/.cache/wal/colors.json'
+post_hook = 'pywalfox update'
+
+[templates.heroic]
+input_path = '~/.config/matugen/templates/heroic-theme.css'
+output_path = '~/.config/heroic/themes/material-you.css'
+
+[templates.discord]
+input_path = '~/.config/matugen/templates/discord.css'
+output_path = '~/.config/vesktop/themes/material-you.css'
+
+[templates.telegram]
+input_path = '~/.config/matugen/templates/telegram-colors.tdesktop-theme'
+output_path = '~/.config/telegram-desktop/themes/material-you.tdesktop-theme'
+
+[templates.kitty]
+input_path = '~/.config/matugen/templates/kitty-colors.conf'
+output_path = '~/.config/kitty/colors.conf'
+
+[templates.rofi]
+input_path = '~/.config/matugen/templates/rofi-colors.rasi'
+output_path = '~/.config/rofi/colors.rasi'
+
+[templates.anyrun]
+input_path = '~/.config/matugen/templates/anyrun.css'
+output_path = '~/.config/anyrun/style.css'
diff --git a/.config/matugen/other/vscode-package.json b/.config/matugen/other/vscode-package.json
new file mode 100644
index 000000000..484e50098
--- /dev/null
+++ b/.config/matugen/other/vscode-package.json
@@ -0,0 +1,20 @@
+{
+ "name": "material",
+ "displayName": "Generated Matugen Theme",
+ "description": "A VS Code theme inspired by Material You, designed to provide a calming and efficient coding environment.",
+ "version": "1.0.0",
+ "publisher": "Pharmaracist",
+ "engines": {
+ "vscode": "1.91.0"
+ },
+ "categories": ["Themes"],
+ "contributes": {
+ "themes": [
+ {
+ "label": "Generated Matugen Theme",
+ "uiTheme": "vs-dark",
+ "path": "./themes/vscode.json"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/.config/matugen/templates/ags.scss b/.config/matugen/templates/ags.scss
new file mode 100644
index 000000000..e3f8e8c98
--- /dev/null
+++ b/.config/matugen/templates/ags.scss
@@ -0,0 +1,72 @@
+// PreGenerated Matugen Template for AGS
+
+$primary: {{colors.primary.default.hex}};
+$onPrimary: {{colors.on_primary.default.hex}};
+$primaryContainer: {{colors.primary_container.default.hex}};
+$onPrimaryContainer: {{colors.on_primary_container.default.hex}};
+$secondary: {{colors.secondary.default.hex}};
+$onSecondary: {{colors.on_secondary.default.hex}};
+$secondaryContainer: {{colors.secondary_container.default.hex}};
+$onSecondaryContainer: {{colors.on_secondary_container.default.hex}};
+$tertiary: {{colors.tertiary.default.hex}};
+$onTertiary: {{colors.on_tertiary.default.hex}};
+$tertiaryContainer: {{colors.tertiary_container.default.hex}};
+$onTertiaryContainer: {{colors.on_tertiary_container.default.hex}};
+$error: {{colors.error.default.hex}};
+$onError: {{colors.on_error.default.hex}};
+$errorContainer: {{colors.error_container.default.hex}};
+$onErrorContainer: {{colors.on_error_container.default.hex}};
+$background: {{colors.background.default.hex}};
+$onBackground: {{colors.on_background.default.hex}};
+$surface: {{colors.surface.default.hex}};
+$onSurface: {{colors.on_surface.default.hex}};
+$surfaceVariant: {{colors.surface_variant.default.hex}};
+$onSurfaceVariant: {{colors.on_surface_variant.default.hex}};
+$surfaceDim: {{colors.surface_dim.default.hex}};
+$surfaceBright: {{colors.surface_bright.default.hex}};
+$surfaceContainerLowest: {{colors.surface_container_lowest.default.hex}};
+$surfaceContainerLow: {{colors.surface_container_low.default.hex}};
+$surfaceContainer: {{colors.surface_container.default.hex}};
+$surfaceContainerHigh: {{colors.surface_container_high.default.hex}};
+$surfaceContainerHighest: {{colors.surface_container_highest.default.hex}};
+$outline: {{colors.outline.default.hex}};
+$outlineVariant: {{colors.outline_variant.default.hex}};
+$shadow: {{colors.shadow.default.hex}};
+$scrim: {{colors.scrim.default.hex}};
+$inverseSurface: {{colors.inverse_surface.default.hex}};
+$inverseOnSurface: {{colors.inverse_on_surface.default.hex}};
+$inversePrimary: {{colors.inverse_primary.default.hex}};
+$surfaceTint: {{colors.surface_tint.default.hex}};
+$primaryFixed: {{colors.primary_fixed.default.hex}};
+$primaryFixedDim: {{colors.primary_fixed_dim.default.hex}};
+$onPrimaryFixed: {{colors.on_primary_fixed.default.hex}};
+$onPrimaryFixedVariant: {{colors.on_primary_fixed_variant.default.hex}};
+$secondaryFixed: {{colors.secondary_fixed.default.hex}};
+$secondaryFixedDim: {{colors.secondary_fixed_dim.default.hex}};
+$onSecondaryFixed: {{colors.on_secondary_fixed.default.hex}};
+$onSecondaryFixedVariant: {{colors.on_secondary_fixed_variant.default.hex}};
+$tertiaryFixed: {{colors.tertiary_fixed.default.hex}};
+$tertiaryFixedDim: {{colors.tertiary_fixed_dim.default.hex}};
+$onTertiaryFixed: {{colors.on_tertiary_fixed.default.hex}};
+$onTertiaryFixedVariant: {{colors.on_tertiary_fixed_variant.default.hex}};
+$success: {{colors.primary.default.hex}};
+$onSuccess: {{colors.on_primary.default.hex}};
+$successContainer: {{colors.primary_container.default.hex}};
+$onSuccessContainer: {{colors.on_primary_container.default.hex}};
+
+$term0: $background;
+$term1: $primary;
+$term2: $secondary;
+$term3: $tertiary;
+$term4: $error;
+$term5: $surface;
+$term6: $surfaceVariant;
+$term7: $surfaceDim;
+$term8: $inverseSurface;
+$term9: $onPrimary;
+$term10: $onSecondary;
+$term11: $onTertiary;
+$term12: $onError;
+$term13: $onBackground;
+$term14: $surfaceContainer;
+$term15: $surfaceContainerHighest;
diff --git a/.config/matugen/templates/alacritty.toml b/.config/matugen/templates/alacritty.toml
new file mode 100644
index 000000000..053e2ce87
--- /dev/null
+++ b/.config/matugen/templates/alacritty.toml
@@ -0,0 +1,68 @@
+[colors.primary]
+background = '{{colors.background.default.hex}}'
+foreground = '{{colors.on_surface.default.hex}}'
+
+[colors.cursor]
+text = '{{colors.on_surface.default.hex}}'
+cursor = '{{colors.on_surface_variant.default.hex}}'
+
+[colors.vi_mode_cursor]
+text = '{{colors.background.default.hex}}'
+cursor = '{{colors.primary.default.hex}}'
+
+[colors.search.matches]
+foreground = '{{colors.surface_variant.default.hex}}'
+background = '{{colors.tertiary.default.hex}}'
+
+[colors.search.focused_match]
+foreground = '{{colors.surface_variant.default.hex}}'
+background = '{{colors.primary.default.hex}}'
+
+[colors.footer_bar]
+foreground = '{{colors.surface_variant.default.hex}}'
+background = '{{colors.inverse_surface.default.hex}}'
+
+[colors.hints.start]
+foreground = '{{colors.surface_variant.default.hex}}'
+background = '{{colors.secondary.default.hex}}'
+
+[colors.hints.end]
+foreground = '{{colors.surface_variant.default.hex}}'
+background = '{{colors.secondary.default.hex}}'
+
+[colors.selection]
+text = '{{colors.background.default.hex}}'
+background = '{{colors.primary.default.hex}}'
+
+
+[colors.normal]
+black = '#181818'
+red = '{{colors.error.default.hex}}'
+green = '{{colors.primary.default.hex}}'
+yellow = '{{colors.inverse_primary.default.hex}}'
+blue = '{{colors.primary.default.hex}}'
+magenta = '{{colors.tertiary.default.hex}}'
+cyan = '{{colors.secondary.default.hex}}'
+white = '#BAC2DE'
+
+
+[colors.bright]
+black = '#585B70'
+red = '#F38BA8'
+green = '#A6E3A1'
+yellow = '#F9E2AF'
+blue = '#89B4FA'
+magenta = '#F5C2E7'
+cyan = '#94E2D5'
+white = '#A6ADC8'
+
+
+[colors.dim]
+black = '#45475A'
+red = '#F38BA8'
+green = '#A6E3A1'
+yellow = '#F9E2AF'
+blue = '#89B4FA'
+magenta = '#F5C2E7'
+cyan = '#94E2D5'
+white = '#BAC2DE'
diff --git a/.config/matugen/templates/anyrun.css b/.config/matugen/templates/anyrun.css
new file mode 100644
index 000000000..3238245a2
--- /dev/null
+++ b/.config/matugen/templates/anyrun.css
@@ -0,0 +1,67 @@
+* {
+ all: unset;
+ font-size: 1.4rem;
+}
+
+#window,
+#match,
+#entry,
+#plugin,
+#main {
+ background: transparent;
+}
+
+#match.activatable {
+ border-radius: 16px;
+ padding: 0.3rem 0.9rem;
+ margin-top: 0.01rem;
+}
+#match.activatable:first-child {
+ margin-top: 0.7rem;
+}
+#match.activatable:last-child {
+ margin-bottom: 0.6rem;
+}
+
+#plugin:hover #match.activatable {
+ border-radius: 10px;
+ padding: 0.3rem;
+ margin-top: 0.01rem;
+ margin-bottom: 0;
+}
+
+#match:selected,
+#match:hover,
+#plugin:hover {
+ background: {{colors.background.default.hex}};
+}
+
+#entry {
+ background: {{colors.background.default.hex}};
+ /* border: 1px solid {{colors.outline.default.hex}}; */
+ border-radius: 16px;
+ margin: 0.5rem;
+ padding: 0.3rem 1rem;
+}
+
+list > #plugin {
+ border-radius: 16px;
+ margin: 0 0.3rem;
+}
+list > #plugin:first-child {
+ margin-top: 0.3rem;
+}
+list > #plugin:last-child {
+ margin-bottom: 0.3rem;
+}
+list > #plugin:hover {
+ padding: 0.6rem;
+}
+
+box#main {
+ background: {{colors.background.default.hex}};
+ /* box-shadow: inset 0 0 0 1px {{colors.shadow.default.hex}}, 0 0 0 1px; */
+ border-radius: 20px;
+ min-height:30px;
+ padding: 0.3rem;
+}
diff --git a/.config/matugen/templates/colors.css b/.config/matugen/templates/colors.css
new file mode 100644
index 000000000..f246856f3
--- /dev/null
+++ b/.config/matugen/templates/colors.css
@@ -0,0 +1,7 @@
+/*
+* Css Colors
+* Generated with Matugen
+*/
+<* for name, value in colors *>
+ @define-color {{name}} {{value.default.hex}};
+<* endfor *>
diff --git a/.config/matugen/templates/colors.ini b/.config/matugen/templates/colors.ini
new file mode 100644
index 000000000..c624c5501
--- /dev/null
+++ b/.config/matugen/templates/colors.ini
@@ -0,0 +1,27 @@
+[Matugen]
+text = {{colors.on_surface_variant.default.hex_stripped}}
+subtext = {{colors.outline.default.hex_stripped}}
+main = {{colors.surface_dim.default.hex_stripped}}
+main-elevated = {{colors.surface_container_highest.default.hex_stripped}}
+main-transition = {{colors.inverse_surface.default.hex_stripped}}
+highlight = {{colors.tertiary_container.default.hex_stripped}}
+highlight-elevated = {{colors.secondary_container.default.hex_stripped}}
+sidebar = {{colors.surface_container_lowest.default.hex_stripped}}
+player = {{colors.surface_container_low.default.hex_stripped}}
+card = {{colors.surface_container_high.default.hex_stripped}}
+shadow = {{colors.scrim.default.hex_stripped}}
+selected-row = {{colors.primary_container.default.hex_stripped}}
+button = {{colors.secondary.default.hex_stripped}}
+button-active = {{colors.secondary_container.default.hex_stripped}}
+button-disabled = {{colors.surface_variant.default.hex_stripped}}
+tab-active = {{colors.inverse_on_surface.default.hex_stripped}}
+notification = {{colors.tertiary.default.hex_stripped}}
+notification-error = {{colors.error_container.default.hex_stripped}}
+misc = {{colors.outline_variant.default.hex_stripped}}
+play-button = {{colors.primary.default.hex_stripped}}
+play-button-active = {{colors.on_primary_container.default.hex_stripped}}
+progress-fg = {{colors.tertiary.default.hex_stripped}}
+progress-bg = {{colors.tertiary_container.default.hex_stripped}}
+heart = {{colors.error.default.hex_stripped}}
+pagelink-active = {{colors.inverse_primary.default.hex_stripped}}
+radio-btn-active = {{colors.on_tertiary_container.default.hex_stripped}}
diff --git a/.config/matugen/templates/discord.css b/.config/matugen/templates/discord.css
new file mode 100644
index 000000000..6d088a3f0
--- /dev/null
+++ b/.config/matugen/templates/discord.css
@@ -0,0 +1,108 @@
+/**
+ * @name Material Discord
+ * @version 3.0.5
+ * @description A theme based on Google's Material Design
+ * @author CapnKitten
+ *
+ * @website http://github.com/CapnKitten
+ * @source https://github.com/CapnKitten/BetterDiscord/blob/master/Themes/Material-Discord/css/source.css
+ * @donate https://paypal.me/capnkitten
+ * @invite jzJkA6Z
+ */
+
+ @import url(https://capnkitten.github.io/BetterDiscord/Themes/Material-Discord/css/source.css);
+
+ /* Material You addon */
+ @import url(https://capnkitten.github.io/BetterDiscord/Themes/Material-Discord/css/addons/material-you/source.css);
+
+ /* MATERIAL YOU DARK THEME SETTINGS */
+ .theme-dark {
+ --saturation-modifier: 0.31;
+ --lightness-modifier: 0.225;
+ --text-lightness-modifier: 1.0;
+ }
+
+ /* MATERIAL YOU LIGHT THEME SETTINGS */
+ .theme-light {
+ --saturation-modifier: 0.74;
+ --lightness-modifier: 2.125;
+ --text-lightness-modifier: 1.0;
+ }
+
+ :root {
+ /* ACCENT HSL AND TEXT COLOR SETTINGS */
+ --accent-hue: 227;
+ --accent-saturation: 71%;
+ --accent-lightness: 61%;
+ --accent-text-color: hsl(0,0%,100%); /* DOES NOTHING WITH MATERIAL YOU ENABLED */
+ --accent-button-action: hsl(0,0%,100%);
+
+ /* ALERT HSL AND TEXT COLOR SETTINGS */
+ --alert-hue: 0;
+ --alert-saturation: 85%;
+ --alert-lightness: 61%;
+ --alert-text-color: hsl(0,0%,100%); /* DOES NOTHING WITH MATERIAL YOU ENABLED */
+
+ /* WARNING HSL AND TEXT COLOR SETTINGS*/
+ --warning-hue: 40;
+ --warning-saturation: 86.4%;
+ --warning-lightness: 56.9%;
+ --warning-text-color: hsl(0,0%,100%); /* DOES NOTHING WITH MATERIAL YOU ENABLED */
+
+ /* MESSAGE SETTINGS */
+ --message-radius: 18px;
+ --message-padding-top: 8px;
+ --message-padding-side: 12px;
+
+ /* MESSAGE MEDIA SETTINGS */
+ --media-radius: 10px;
+
+ /* CARD SETTINGS */
+ --card-radius: 8px;
+ --card-radius-big: 18px;
+
+ /* BUTTON SETTINGS */
+ --button-height: 36px;
+ --button-padding: 0 24px;
+ --button-action-color: hsl(0,0%,100%);
+
+ /* INPUT SETTINGS */
+ --input-height: 36px;
+ --input-padding: 0 12px;
+
+ /* POPOUT AND MODAL SETTINGS */
+ --popout-radius: 8px;
+ --popout-radius-big: 18px;
+
+ /* TOOLTIP SETTINGS */
+ --tooltip-color: hsl(0,0%,38%,0.9);
+ --tooltip-text-color: hsl(0,0%,87%);
+ --tooltip-font-size: 12px;
+ --tooltip-padding: 8px;
+ --tooltip-radius: 8px;
+
+ /* SCROLLBAR SETTINGS */
+ --scrollbar-width: 10px;
+ --scrollbar-thin-width: 6px;
+ --app-bg: {{colors.surface.default.hex}};
+ --main-color: {{colors.surface.default.hex}};
+ --main-alt: {{colors.surface.default.hex}};
+ --status-picker-color: {{colors.primary_container.default.hex}};
+ --sidebar-panel-color: {{colors.primary_container.default.hex}};
+ --tooltip-color: {{colors.surface.default.hex}};
+ --tooltip-text-color: {{colors.on_surface.default.hex}};
+ --accent-text-color: {{colors.on_surface.default.hex}};
+ --card-color-filled: {{colors.primary_container.default.hex}};
+ --card-color-hover: {{colors.inverse_primary.default.hex}};
+ --card-color-active: {{colors.inverse_primary.default.hex}};
+ --card-header-text-color: {{colors.on_surface.default.hex}};
+ --input-text-color: {{colors.on_surface.default.hex}};
+ --message-color: {{colors.primary_container.default.hex}};
+ --message-color-hover: {{colors.inverse_primary.default.hex}};
+ --message-color-alt: {{colors.primary_container.default.hex}};
+ --attachment-color: {{colors.on_primary.default.hex}};
+ --main-textarea-color: {{colors.primary_container.default.hex}};
+ --card-border-color: {{colors.primary_container.default.hex}};
+ --switch-knob-color: {{colors.primary_container.default.hex}};
+ --accent-hue: {{colors.primary_container.default.hue}};
+ }
\ No newline at end of file
diff --git a/.config/matugen/templates/dunstrc-colors b/.config/matugen/templates/dunstrc-colors
new file mode 100644
index 000000000..6ead8f828
--- /dev/null
+++ b/.config/matugen/templates/dunstrc-colors
@@ -0,0 +1,90 @@
+[global]
+monitor = 0
+follow = none
+width = 380
+height = 95
+origin = top-right
+offset = 12x12
+scale = 0
+notification_limit = 0
+progress_bar = true
+progress_bar_height = 4
+progress_bar_frame_width = 0
+progress_bar_min_width = 150
+progress_bar_max_width = 300
+indicate_hidden = yes
+transparency = 3
+separator_height = 6
+padding = 12
+horizontal_padding = 12
+text_icon_padding = 12
+frame_width = 0
+sort = yes
+font = "Rubik 10"
+line_height = 3
+markup = full
+format = "%s\n%b"
+alignment = left
+vertical_alignment = center
+show_age_threshold = 60
+ellipsize = middle
+ignore_newline = no
+stack_duplicates = true
+hide_duplicate_count = false
+show_indicators = yes
+icon_position = left
+min_icon_size = 24
+max_icon_size = 32
+icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
+icon_path = /usr/share/icons/Papirus-Dark/48x48/actions/:/usr/share/icons/Papirus-Dark/48x48/apps/:/usr/share/icons/Papirus-Dark/48x48/devices/:/usr/share/icons/Papirus-Dark/48x48/emblems/:/usr/share/icons/Papirus-Dark/48x48/emotes/:/usr/share/icons/Papirus-Dark/48x48/mimetypes/:/usr/share/icons/Papirus-Dark/48x48/places/:/usr/share/icons/Papirus-Dark/48x48/status/
+sticky_history = yes
+history_length = 20
+browser = /usr/bin/xdg-open
+always_run_script = true
+title = Dunst
+class = Dunst
+corner_radius = 14
+ignore_dbusclose = false
+force_xwayland = false
+force_xinerama = false
+mouse_left_click = close_current
+mouse_middle_click = do_action, close_current
+mouse_right_click = close_all
+separator_color = frame
+frame_color = "{{colors.primary.default.hex}}"
+highlight = "{{colors.primary.default.hex}}"
+separator_color= "{{colors.outline.default.hex}}"
+gap_size = 8
+enable_posix_regex = true
+enable_recursive_icon_lookup = true
+enable_markup = true
+
+# Animation settings
+enable_animations = true
+animation_frame_interval = 8
+animation_time_in = 200
+animation_time_out = 200
+animation_time_delta = 200
+animation_easing_in = "ease-out"
+animation_easing_out = "ease-in"
+
+[experimental]
+per_monitor_dpi = false
+
+[urgency_low]
+timeout = 3
+background = "{{colors.surface.default.hex}}"
+foreground = "{{colors.on_surface.default.hex}}"
+highlight = "{{colors.primary_container.default.hex}}"
+
+[urgency_normal]
+timeout = 6
+background = "{{colors.surface.default.hex}}"
+foreground = "{{colors.on_surface.default.hex}}"
+highlight = "{{colors.primary_container.default.hex}}"
+
+[urgency_critical]
+timeout = 0
+background = "{{colors.surface.default.hex}}"
+foreground = "{{colors.on_surface.default.hex}}"
+highlight = "{{colors.error.default.hex}}"
\ No newline at end of file
diff --git a/.config/matugen/templates/foot.json b/.config/matugen/templates/foot.json
new file mode 100644
index 000000000..2b2e31541
--- /dev/null
+++ b/.config/matugen/templates/foot.json
@@ -0,0 +1,38 @@
+{
+ "dark": {
+ "term0": "{{colors.background.default.hex}}",
+ "term1": "{{colors.error.default.hex}}",
+ "term2": "{{colors.secondary.default.hex}}",
+ "term3": "{{colors.tertiary.default.hex}}",
+ "term4": "#458588",
+ "term5": "{{colors.primary.default.hex}}",
+ "term6": "#689D6A",
+ "term7": "{{colors.surface_variant.default.hex}}",
+ "term8": "{{colors.on_background.default.hex}}",
+ "term9": "{{colors.error.default.hex}}",
+ "term10": "{{colors.secondary.default.hex}}",
+ "term11": "{{colors.tertiary.default.hex}}",
+ "term12": "#83A598",
+ "term13": "{{colors.primary.default.hex}}",
+ "term14": "#8EC07C",
+ "term15": "{{colors.surface.default.hex}}"
+ },
+ "light": {
+ "term0": "{{colors.surface.default.hex}}",
+ "term1": "{{colors.error.default.hex}}",
+ "term2": "{{colors.secondary.default.hex}}",
+ "term3": "{{colors.tertiary.default.hex}}",
+ "term4": "#FFD866",
+ "term5": "{{colors.primary.default.hex}}",
+ "term6": "#78DCE8",
+ "term7": "{{colors.on_surface.default.hex}}",
+ "term8": "{{colors.background.default.hex}}",
+ "term9": "{{colors.error.default.hex}}",
+ "term10": "{{colors.secondary.default.hex}}",
+ "term11": "{{colors.tertiary.default.hex}}",
+ "term12": "#FFD866",
+ "term13": "{{colors.primary.default.hex}}",
+ "term14": "#78DCE8",
+ "term15": "{{colors.surface_variant.default.hex}}"
+ }
+ }
\ No newline at end of file
diff --git a/.config/matugen/templates/fuzzel.ini b/.config/matugen/templates/fuzzel.ini
new file mode 100644
index 000000000..8c674395b
--- /dev/null
+++ b/.config/matugen/templates/fuzzel.ini
@@ -0,0 +1,28 @@
+[main]
+font=Iosevka:size=10
+icon-theme=Papirus-Dark
+terminal=kitty
+width=30
+lines=12
+horizontal-pad=20
+vertical-pad=20
+inner-pad=8
+line-height=18
+letter-spacing=0
+anchor=bottom-right
+x-offset=-50
+y-offset=-50
+layer=overlay
+
+[colors]
+background="{{colors.surface.default.hex}}ff"
+text="{{colors.on_surface.default.hex}}ff"
+match="{{colors.primary.default.hex}}ff"
+selection="{{colors.secondary_container.default.hex}}ff"
+selection-text="{{colors.on_secondary_container.default.hex}}ff"
+selection-match="{{colors.primary.default.hex}}ff"
+border="{{colors.outline.default.hex}}ff"
+
+[border]
+width=0
+radius=12
diff --git a/.config/matugen/templates/gradience.json b/.config/matugen/templates/gradience.json
new file mode 100644
index 000000000..c27f52001
--- /dev/null
+++ b/.config/matugen/templates/gradience.json
@@ -0,0 +1,86 @@
+{
+ "name": "Pharmaracism Theme",
+ "variables": {
+ "theme_fg_color": "{{colors.on_surface.default.hex}}",
+ "theme_text_color": "{{colors.on_surface.default.hex}}",
+ "theme_bg_color": "{{colors.surface.default.hex}}",
+ "theme_base_color": "{{colors.surface.default.hex}}",
+ "theme_selected_bg_color": "{{colors.primary_container.default.hex}}",
+ "theme_selected_fg_color": "{{colors.on_primary_container.default.hex}}",
+ "insensitive_bg_color": "{{colors.surface.default.hex}}",
+ "insensitive_fg_color": "{{colors.on_surface_variant.default.hex}}",
+ "insensitive_base_color": "{{colors.surface_variant.default.hex}}",
+ "theme_unfocused_fg_color": "{{colors.on_surface_variant.default.hex}}",
+ "theme_unfocused_text_color": "{{colors.on_surface_variant.default.hex}}",
+ "theme_unfocused_bg_color": "{{colors.surface.default.hex}}",
+ "theme_unfocused_base_color": "{{colors.surface.default.hex}}",
+ "theme_unfocused_selected_bg_color": "{{colors.surface_variant.default.hex}}",
+ "theme_unfocused_selected_fg_color": "{{colors.on_surface_variant.default.hex}}",
+ "unfocused_insensitive_color": "{{colors.on_surface_variant.default.hex}}",
+ "borders": "{{colors.outline.default.hex}}",
+ "unfocused_borders": "{{colors.outline.default.hex}}",
+ "warning_color": "{{colors.error.default.hex}}",
+ "error_color": "{{colors.error.default.hex}}",
+ "success_color": "{{colors.primary.default.hex}}",
+ "wm_title": "{{colors.on_primary_container.default.hex}}",
+ "wm_unfocused_title": "{{colors.on_surface_variant.default.hex}}",
+ "wm_highlight": "{{colors.primary_container.default.hex}}",
+ "wm_bg": "{{colors.background.default.hex}}",
+ "wm_unfocused_bg": "{{colors.background.default.hex}}",
+ "wm_button_close_icon": "{{colors.on_secondary_container.default.hex}}",
+ "wm_button_close_hover_bg": "{{colors.secondary_container.default.hex}}",
+ "wm_button_close_active_bg": "{{colors.surface_variant.default.hex}}",
+ "content_view_bg": "{{colors.surface.default.hex}}",
+ "placeholder_text_color": "{{colors.on_surface_variant.default.hex}}",
+ "text_view_bg": "{{colors.surface_container.default.hex}}",
+ "budgie_tasklist_indicator_color": "{{colors.primary.default.hex}}",
+ "budgie_tasklist_indicator_color_active": "{{colors.primary.default.hex}}",
+ "budgie_tasklist_indicator_color_active_window": "{{colors.secondary.default.hex}}",
+ "budgie_tasklist_indicator_color_attention": "{{colors.error.default.hex}}",
+ "accent_bg_color": "{{colors.primary_container.default.hex}}",
+ "accent_fg_color": "{{colors.on_primary_container.default.hex}}",
+ "accent_color": "{{colors.primary.default.hex}}",
+ "destructive_bg_color": "{{colors.error_container.default.hex}}",
+ "destructive_fg_color": "{{colors.on_error_container.default.hex}}",
+ "destructive_color": "{{colors.error.default.hex}}",
+ "success_bg_color": "{{colors.primary_container.default.hex}}",
+ "success_fg_color": "{{colors.primary_container.default.hex}}",
+ "warning_bg_color": "{{colors.error_container.default.hex}}",
+ "warning_fg_color": "{{colors.on_primary_container.default.hex}}",
+ "error_bg_color": "{{colors.error_container.default.hex}}",
+ "error_fg_color": "{{colors.on_error_container.default.hex}}",
+ "window_bg_color": "{{colors.background.default.hex}}",
+ "window_fg_color": "{{colors.on_background.default.hex}}",
+ "view_bg_color": "{{colors.surface.default.hex}}",
+ "view_fg_color": "{{colors.on_surface.default.hex}}",
+ "headerbar_bg_color": "{{colors.surface_container_low.default.hex}}",
+ "headerbar_fg_color": "{{colors.on_surface.default.hex}}",
+ "headerbar_border_color": "{{colors.outline.default.hex}}",
+ "headerbar_backdrop_color": "{{colors.surface_container_low.default.hex}}",
+ "headerbar_shade_color": "rgba(0, 0, 0, 0.09)",
+ "card_bg_color": "{{colors.surface_container.default.hex}}",
+ "card_fg_color": "{{colors.on_surface.default.hex}}",
+ "card_shade_color": "rgba(0, 0, 0, 0.09)",
+ "dialog_bg_color": "{{colors.secondary_container.default.hex}}",
+ "dialog_fg_color": "{{colors.on_secondary_container.default.hex}}",
+ "popover_bg_color": "{{colors.secondary_container.default.hex}}",
+ "popover_fg_color": "{{colors.on_secondary_container.default.hex}}",
+ "thumbnail_bg_color": "{{colors.surface_container.default.hex}}",
+ "thumbnail_fg_color": "{{colors.on_surface.default.hex}}",
+ "shade_color": "rgba(0, 0, 0, 1)",
+ "scrollbar_outline_color": "rgba(0, 0, 0, 1)",
+ "sidebar_bg_color": "{{colors.secondary.default.hex}}",
+ "sidebar_fg_color": "{{colors.surface_variant.default.hex}}",
+ "sidebar_border_color": "{{colors.background.default.hex}}",
+ "sidebar_backdrop_color": "{{colors.background.default.hex}}"
+ },
+ "palette": {
+ "blue_": {},
+ "green_": {}
+ },
+ "custom_css": {
+ "gtk4": "",
+ "gtk3": ""
+ },
+ "plugins": {}
+ }
diff --git a/.config/matugen/templates/gtk-colors.css b/.config/matugen/templates/gtk-colors.css
new file mode 100644
index 000000000..2506fe1fb
--- /dev/null
+++ b/.config/matugen/templates/gtk-colors.css
@@ -0,0 +1,23 @@
+/*
+* GTK Colors
+* Generated with Matugen
+*/
+
+@define-color accent_color {{colors.primary_fixed_dim.default.hex}};
+@define-color accent_fg_color {{colors.on_primary_fixed.default.hex}};
+@define-color accent_bg_color {{colors.primary_fixed_dim.default.hex}};
+@define-color window_bg_color {{colors.surface_dim.default.hex}};
+@define-color window_fg_color {{colors.on_surface.default.hex}};
+@define-color headerbar_bg_color {{colors.surface_dim.default.hex}};
+@define-color headerbar_fg_color {{colors.on_surface.default.hex}};
+@define-color popover_bg_color {{colors.surface_dim.default.hex}};
+@define-color popover_fg_color {{colors.on_surface.default.hex}};
+@define-color view_bg_color {{colors.surface.default.hex}};
+@define-color view_fg_color {{colors.on_surface.default.hex}};
+@define-color card_bg_color {{colors.surface.default.hex}};
+@define-color card_fg_color {{colors.on_surface.default.hex}};
+@define-color sidebar_bg_color {{colors.secondary_container.default.hex}} ;
+@define-color sidebar_fg_color{{colors.on_primary.default.hex}} ;
+@define-color sidebar_border_color @window_bg_color;
+@define-color sidebar_backdrop_color @window_bg_color;
+
diff --git a/.config/matugen/templates/heroic-theme.css b/.config/matugen/templates/heroic-theme.css
new file mode 100644
index 000000000..b3b363dd7
--- /dev/null
+++ b/.config/matugen/templates/heroic-theme.css
@@ -0,0 +1,45 @@
+/* Material You theme for Heroic */
+/* Generated by matugen */
+
+body {
+ /* Base colors */
+ --accent: {{colors.primary.default.hex}};
+ --accent-overlay: {{colors.primary_container.default.hex}};
+ --navbar-accent: {{colors.secondary.default.hex}};
+
+ /* Surface colors - Using Material elevation tokens */
+ --background: {{colors.surface.default.hex}};
+ --body-background: {{colors.surface_container_low.default.hex}};
+ --background-darker: {{colors.surface_container.default.hex}};
+ --current-background: {{colors.surface_container.default.hex}};
+ --navbar-background: {{colors.surface_container.default.hex}};
+ --navbar-active-background: {{colors.surface_container_high.default.hex}};
+
+ /* Interactive elements */
+ --input-background: {{colors.surface_variant.default.hex}};
+ --modal-background: {{colors.surface_container_high.default.hex}};
+ --modal-border: {{colors.outline.default.hex}};
+
+ /* State colors */
+ --success: {{colors.tertiary.default.hex}};
+ --success-hover: {{colors.tertiary_container.default.hex}};
+ --primary: {{colors.primary.default.hex}};
+ --primary-hover: {{colors.primary_container.default.hex}};
+ --danger: {{colors.error.default.hex}};
+ --danger-hover: {{colors.error_container.default.hex}};
+
+ /* Status indicators */
+ --anticheat-denied: {{colors.error.default.hex}};
+ --anticheat-broken: {{colors.error_container.default.hex}};
+ --anticheat-running: {{colors.primary.default.hex}};
+ --anticheat-supported: {{colors.tertiary.default.hex}};
+ --anticheat-planned: {{colors.secondary.default.hex}};
+
+ /* Typography and icons */
+ --text-title: {{colors.on_surface.default.hex}};
+ --icons-background: {{colors.on_surface_variant.default.hex}};
+ --action-icon: {{colors.on_surface.default.hex}};
+ --action-icon-hover: {{colors.primary.default.hex}};
+ --action-icon-active: {{colors.primary_container.default.hex}};
+ --icon-disabled: {{colors.on_surface.default.hex}}38;
+}
diff --git a/.config/matugen/templates/hyprland-colors.conf b/.config/matugen/templates/hyprland-colors.conf
new file mode 100644
index 000000000..91897334b
--- /dev/null
+++ b/.config/matugen/templates/hyprland-colors.conf
@@ -0,0 +1,3 @@
+<* for name, value in colors *>
+${{name}} = rgb({{value.default.hex_stripped}})
+<* endfor *>
diff --git a/.config/matugen/templates/hyprlock.conf b/.config/matugen/templates/hyprlock.conf
new file mode 100644
index 000000000..2bc584d1e
--- /dev/null
+++ b/.config/matugen/templates/hyprlock.conf
@@ -0,0 +1,101 @@
+# BACKGROUND
+background {
+ monitor =
+ path = {{ image }}
+ blur_passes = 3
+ contrast = 0.8916
+ brightness = 0.8172
+ vibrancy = 0.1696
+ vibrancy_darkness = 0.0
+}
+
+# GENERAL
+general {
+ no_fade_in = false
+ grace = 0
+ disable_loading_bar = false
+}
+
+# Time-Hour
+label {
+ monitor =
+ text = cmd[update:1000] echo "$(date +"%I")"
+ color = {{ colors.primary.default.rgb }}
+ font_size = 125
+ font_family = StretchPro
+ position = -80, 190
+ halign = center
+ valign = center
+}
+
+# Time-Minute
+label {
+ monitor =
+ text = cmd[update:1000] echo "$(date +"%M")"
+ color = {{ colors.secondary.default.rgb }}
+ font_size = 125
+ font_family = StretchPro
+ position = 0, 70
+ halign = center
+ valign = center
+}
+
+# Day-Month-Date
+label {
+ monitor =
+ text = cmd[update:1000] echo -e "$(date +"%d %B, %a.")"
+ color = {{ colors.primary.default.rgb }}
+ font_size = 19
+ font_family = "Rubik Medium"
+ position = 20, -10
+ halign = center
+ valign = center
+}
+
+# USER
+label {
+ monitor =
+ text = $USER
+ color = {{ colors.primary.default.rgb }}
+ outline_thickness = 2
+ dots_size = 0.15 # Scale of input-field height, 0.2 - 0.8
+ dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
+ dots_center = true
+ font_size = 12
+ font_family = Rubik
+ position = 0, -300
+ halign = center
+ valign = center
+}
+
+# INPUT FIELD
+input-field {
+ monitor =
+ size = 210, 40
+ outline_thickness = 2
+ dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
+ dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
+ dots_center = true
+ outer_color = {{ colors.outline.default.rgb }}
+ inner_color = {{ colors.surface.default.rgb }}
+ font_color = {{ colors.primary.default.rgb }}
+ fade_on_empty = false
+ font_family = SF Pro Display
+ placeholder_text = Enter Password
+ hide_input = false
+ position = 0, -340
+ halign = center
+ valign = center
+}
+
+# # CURRENT SONG
+label {
+ monitor =
+ text =cmd[update:10] echo "$(~/.config/hypr/Scripts/songdetail.sh)"
+ color = {{ colors.secondary.default.rgb }}
+ font_size = 14
+ font_family = JetBrains Mono Nerd, SF Pro Display Bold
+ position = 0, 20
+ halign = center
+ valign = bottom
+}
diff --git a/.config/matugen/templates/kitty-colors.conf b/.config/matugen/templates/kitty-colors.conf
new file mode 100644
index 000000000..91b8e4be1
--- /dev/null
+++ b/.config/matugen/templates/kitty-colors.conf
@@ -0,0 +1,41 @@
+cursor {{colors.on_surface.default.hex}}
+cursor_text_color {{colors.on_surface_variant.default.hex}}
+
+foreground {{colors.on_surface.default.hex}}
+background {{colors.surface.default.hex}}
+selection_foreground {{colors.on_secondary.default.hex}}
+selection_background {{colors.secondary_fixed_dim.default.hex}}
+url_color {{colors.primary.default.hex}}
+
+# black
+color8 #262626
+color0 #4c4c4c
+
+# red
+color1 #ac8a8c
+color9 #c49ea0
+
+# green
+color2 #8aac8b
+color10 #9ec49f
+
+# yellow
+color3 #aca98a
+color11 #c4c19e
+
+# blue
+/* color4 #8f8aac */
+color4 {{colors.primary.default.hex}}
+color12 #a39ec4
+
+# magenta
+color5 #ac8aac
+color13 #c49ec4
+
+# cyan
+color6 #8aacab
+color14 #9ec3c4
+
+# white
+color15 #e7e7e7
+color7 #f0f0f0
diff --git a/.config/matugen/templates/midnight-discord.css b/.config/matugen/templates/midnight-discord.css
new file mode 100644
index 000000000..a796d94ea
--- /dev/null
+++ b/.config/matugen/templates/midnight-discord.css
@@ -0,0 +1,99 @@
+/**
+ * @name midnight
+ * @description A dark, rounded discord theme.
+ * @author refact0r
+ * @version 1.6.2
+ * @invite nz87hXyvcy
+ * @website https://github.com/refact0r/midnight-discord
+ * @source https://github.com/refact0r/midnight-discord/blob/master/midnight.theme.css
+ * @authorId 508863359777505290
+ * @authorLink https://www.refact0r.dev
+*/
+
+/* IMPORTANT: make sure to enable dark mode in discord settings for the theme to apply properly!!! */
+
+@import url('https://refact0r.github.io/midnight-discord/midnight.css');
+
+/* customize things here */
+:root {
+ /* font, change to 'gg sans' for default discord font*/
+ --font: 'figtree';
+
+ /* top left corner text */
+ --corner-text: 'Midnight';
+
+ /* color of status indicators and window controls */
+ --online-indicator: {{colors.inverse_primary.default.hex}}; /* change to #23a55a for default green */
+ --dnd-indicator: {{colors.error.default.hex}}; /* change to #f13f43 for default red */
+ --idle-indicator: {{colors.tertiary_container.default.hex}}; /* change to #f0b232 for default yellow */
+ --streaming-indicator: {{colors.on_primary.default.hex}}; /* change to #593695 for default purple */
+
+ /* accent colors */
+ --accent-1: {{colors.tertiary.default.hex}}; /* links */
+ --accent-2: {{colors.primary.default.hex}}; /* general unread/mention elements, some icons when active */
+ --accent-3: {{colors.primary.default.hex}}; /* accent buttons */
+ --accent-4: {{colors.surface_bright.default.hex}}; /* accent buttons when hovered */
+ --accent-5: {{colors.primary_fixed_dim.default.hex}}; /* accent buttons when clicked */
+ --mention: {{colors.surface.default.hex}}; /* mentions & mention messages */
+ --mention-hover: {{colors.surface_bright.default.hex}}; /* mentions & mention messages when hovered */
+
+ /* text colors */
+ --text-0: {{colors.surface.default.hex}}; /* text on colored elements */
+ --text-1: {{colors.on_surface.default.hex}}; /* other normally white text */
+ --text-2: {{colors.on_surface.default.hex}}; /* headings and important text */
+ --text-3: {{colors.on_surface_variant.default.hex}}; /* normal text */
+ --text-4: {{colors.on_surface_variant.default.hex}}; /* icon buttons and channels */
+ --text-5: {{colors.outline.default.hex}}; /* muted channels/chats and timestamps */
+
+ /* background and dark colors */
+ --bg-1: {{colors.primary.default.hex}}; /* dark buttons when clicked */
+ --bg-2: {{colors.surface_container_high.default.hex}}; /* dark buttons */
+ --bg-3: {{colors.surface_container_low.default.hex}}; /* spacing, secondary elements */
+ --bg-4: {{colors.surface.default.hex}}; /* main background color */
+ --hover: {{colors.surface_bright.default.hex}}; /* channels and buttons when hovered */
+ --active: {{colors.surface_bright.default.hex}}; /* channels and buttons when clicked or selected */
+ --message-hover: {{colors.surface_bright.default.hex}}; /* messages when hovered */
+
+ /* amount of spacing and padding */
+ --spacing: 12px;
+
+ /* animations */
+ /* ALL ANIMATIONS CAN BE DISABLED WITH REDUCED MOTION IN DISCORD SETTINGS */
+ --list-item-transition: 0.2s ease; /* channels/members/settings hover transition */
+ --unread-bar-transition: 0.2s ease; /* unread bar moving into view transition */
+ --moon-spin-transition: 0.4s ease; /* moon icon spin */
+ --icon-spin-transition: 1s ease; /* round icon button spin (settings, emoji, etc.) */
+
+ /* corner roundness (border-radius) */
+ --roundness-xl: 22px; /* roundness of big panel outer corners */
+ --roundness-l: 20px; /* popout panels */
+ --roundness-m: 16px; /* smaller panels, images, embeds */
+ --roundness-s: 12px; /* members, settings inputs */
+ --roundness-xs: 10px; /* channels, buttons */
+ --roundness-xxs: 8px; /* searchbar, small elements */
+
+ /* direct messages moon icon */
+ /* change to block to show, none to hide */
+ --discord-icon: none; /* discord icon */
+ --moon-icon: block; /* moon icon */
+ --moon-icon-url: url('https://upload.wikimedia.org/wikipedia/commons/c/c4/Font_Awesome_5_solid_moon.svg'); /* custom icon url */
+ --moon-icon-size: auto;
+
+ /* filter uncolorable elements to fit theme */
+ /* (just set to none, they're too much work to configure) */
+ --login-bg-filter: saturate(0.3) hue-rotate(-15deg) brightness(0.4); /* login background artwork */
+ --green-to-accent-3-filter: hue-rotate(56deg) saturate(1.43); /* add friend page explore icon */
+ --blurple-to-accent-3-filter: hue-rotate(304deg) saturate(0.84) brightness(1.2); /* add friend page school icon */
+}
+
+/* Selected chat/friend text */
+.selected_f5eb4b,
+.selected_f6f816 .link_d8bfb3 {
+ color: var(--text-0) !important;
+ background: var(--accent-3) !important;
+}
+
+.selected_f6f816 .link_d8bfb3 * {
+ color: var(--text-0) !important;
+ fill: var(--text-0) !important;
+}
diff --git a/.config/matugen/templates/obsidian.css b/.config/matugen/templates/obsidian.css
new file mode 100644
index 000000000..0d4ace786
--- /dev/null
+++ b/.config/matugen/templates/obsidian.css
@@ -0,0 +1,234 @@
+/* Material You theme for Obsidian */
+/* Generated by matugen */
+
+.theme-dark {
+ /* Keep soft backgrounds */
+ --background-primary: #{{colors.surface.default.hex_stripped}};
+ --background-primary-alt: #{{colors.surface_variant.default.hex_stripped}}40;
+ --background-secondary: #{{colors.surface_variant.default.hex_stripped}}20;
+ --background-secondary-alt: #{{colors.surface_variant.default.hex_stripped}}10;
+
+ /* Subtle borders and modifiers */
+ --background-modifier-border: #{{colors.outline.default.hex_stripped}}20;
+ --background-modifier-form-field: #{{colors.surface_variant.default.hex_stripped}}20;
+ --background-modifier-form-field-highlighted: #{{colors.surface_variant.default.hex_stripped}}30;
+ --background-modifier-box-shadow: rgba(0, 0, 0, 0.05);
+ --background-modifier-success: #{{colors.primary.default.hex_stripped}}40;
+ --background-modifier-error: #{{colors.error.default.hex_stripped}}40;
+ --background-modifier-error-hover: #{{colors.error_container.default.hex_stripped}}30;
+ --background-modifier-cover: rgba(0, 0, 0, 0.2);
+
+ /* 94% opacity text */
+ --text-normal: #{{colors.on_surface.default.hex_stripped}}f0;
+ --text-muted: #{{colors.on_surface_variant.default.hex_stripped}}f0;
+ --text-faint: #{{colors.on_surface_variant.default.hex_stripped}}f0;
+ --text-error: #{{colors.error.default.hex_stripped}}f0;
+ --text-error-hover: #{{colors.error.default.hex_stripped}}f0;
+
+ /* Subtle highlights */
+ --text-highlight-bg: #{{colors.primary.default.hex_stripped}}15;
+ --text-highlight-bg-active: #{{colors.primary.default.hex_stripped}}25;
+ --text-selection: #{{colors.primary.default.hex_stripped}}25;
+ --text-on-accent: #{{colors.on_primary.default.hex_stripped}}f0;
+
+ /* Clear interactive elements at 94% */
+ --interactive-normal: #{{colors.surface_variant.default.hex_stripped}}20;
+ --interactive-hover: #{{colors.surface_variant.default.hex_stripped}}30;
+ --interactive-accent: #{{colors.primary.default.hex_stripped}}f0;
+ --interactive-accent-hover: #{{colors.primary_container.default.hex_stripped}}f0;
+ --interactive-success: #{{colors.primary.default.hex_stripped}}f0;
+
+ /* Subtle scrollbars */
+ --scrollbar-bg: #{{colors.surface_variant.default.hex_stripped}}10;
+ --scrollbar-thumb-bg: #{{colors.primary.default.hex_stripped}}20;
+ --scrollbar-active-thumb-bg: #{{colors.primary.default.hex_stripped}}30;
+
+ /* Headings at 94% */
+ --text-title-h1: #{{colors.on_surface.default.hex_stripped}}f0;
+ --text-title-h2: #{{colors.on_surface_variant.default.hex_stripped}}f0;
+ --text-title-h3: #{{colors.on_surface_variant.default.hex_stripped}}f0;
+ --text-title-h4: #{{colors.on_surface_variant.default.hex_stripped}}f0;
+ --text-title-h5: #{{colors.on_surface_variant.default.hex_stripped}}f0;
+ --text-title-h6: #{{colors.on_surface_variant.default.hex_stripped}}f0;
+
+ /* Links at 94% */
+ --text-link: #{{colors.primary.default.hex_stripped}}f0;
+ --text-a: #{{colors.primary.default.hex_stripped}}f0;
+ --text-a-hover: #{{colors.primary.default.hex_stripped}}f0;
+
+ /* Tags at 94% with subtle backgrounds */
+ --tag-color: #{{colors.secondary.default.hex_stripped}}f0;
+ --tag-background: #{{colors.secondary.default.hex_stripped}}15;
+ --tag-background-hover: #{{colors.secondary.default.hex_stripped}}25;
+
+ --titlebar-text-color-focused: #{{colors.on_surface.default.hex_stripped}}f0;
+
+ /* Clear text on subtle backgrounds */
+ --inline-code-background: #{{colors.surface_variant.default.hex_stripped}}25;
+ --code-block-background: #{{colors.surface_variant.default.hex_stripped}}15;
+
+ /* Checkboxes at 94% */
+ --checkbox-color: #{{colors.primary.default.hex_stripped}}f0;
+ --checkbox-color-hover: #{{colors.primary_container.default.hex_stripped}}f0;
+ --checkbox-border-color: #{{colors.outline.default.hex_stripped}}f0;
+ --checkbox-border-color-hover: #{{colors.primary.default.hex_stripped}}f0;
+
+ /* Clear text on subtle backgrounds */
+ --table-header-background: #{{colors.surface_variant.default.hex_stripped}}25;
+ --table-header-background-hover: #{{colors.surface_variant.default.hex_stripped}}35;
+ --table-row-background-hover: #{{colors.surface_variant.default.hex_stripped}}15;
+
+ /* Graph colors at 94% */
+ --graph-line: #{{colors.outline.default.hex_stripped}}f0;
+ --graph-node: #{{colors.primary.default.hex_stripped}}f0;
+ --graph-node-unresolved: #{{colors.error.default.hex_stripped}}f0;
+ --graph-node-focused: #{{colors.secondary.default.hex_stripped}}f0;
+
+ --calendar-week-number: #{{colors.outline.default.hex_stripped}}f0;
+ --calendar-selected-day: #{{colors.primary.default.hex_stripped}}f0;
+
+ /* Navigation at 94% with subtle backgrounds */
+ --nav-item-color: #{{colors.on_surface.default.hex_stripped}}f0;
+ --nav-item-background-hover: #{{colors.surface_variant.default.hex_stripped}}25;
+ --nav-item-background-active: #{{colors.primary.default.hex_stripped}}15;
+ --nav-file-tag: #{{colors.secondary.default.hex_stripped}}f0;
+
+ /* Blockquotes at 94% */
+ --blockquote-border: #{{colors.primary.default.hex_stripped}}f0;
+ --blockquote-background: #{{colors.surface_variant.default.hex_stripped}}15;
+
+ /* Icons at 94% */
+ --icon-color: #{{colors.on_surface.default.hex_stripped}}f0;
+ --icon-color-hover: #{{colors.primary.default.hex_stripped}}f0;
+ --icon-color-active: #{{colors.primary.default.hex_stripped}}f0;
+
+ /* Tabs at 94% with subtle backgrounds */
+ --tab-text-color: #{{colors.on_surface.default.hex_stripped}}f0;
+ --tab-text-color-focused: #{{colors.primary.default.hex_stripped}}f0;
+ --tab-text-color-focused-active: #{{colors.on_primary.default.hex_stripped}}f0;
+ --tab-background-focused: #{{colors.primary.default.hex_stripped}}15;
+ --tab-background-focused-active: #{{colors.primary.default.hex_stripped}}25;
+}
+
+/* Custom styling */
+.theme-dark {
+ --font-text-theme: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Inter, Ubuntu, sans-serif;
+ --font-editor-theme: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Inter, Ubuntu, sans-serif;
+ --font-monospace-theme: 'Jetbrains Mono', 'Fira Code', Menlo, Monaco, Consolas, 'Courier New', monospace;
+}
+
+/* Headers */
+.markdown-preview-view h1,
+.markdown-source-view.mod-cm6 .HyperMD-header-1 {
+ color: var(--text-title-h1);
+ font-weight: 600;
+}
+
+.markdown-preview-view h2,
+.markdown-source-view.mod-cm6 .HyperMD-header-2 {
+ color: var(--text-title-h2);
+ font-weight: 600;
+}
+
+.markdown-preview-view h3,
+.markdown-source-view.mod-cm6 .HyperMD-header-3 {
+ color: var(--text-title-h3);
+ font-weight: 500;
+}
+
+.markdown-preview-view h4,
+.markdown-source-view.mod-cm6 .HyperMD-header-4 {
+ color: var(--text-title-h4);
+ font-weight: 500;
+}
+
+.markdown-preview-view h5,
+.markdown-source-view.mod-cm6 .HyperMD-header-5 {
+ color: var(--text-title-h5);
+ font-weight: 500;
+}
+
+.markdown-preview-view h6,
+.markdown-source-view.mod-cm6 .HyperMD-header-6 {
+ color: var(--text-title-h6);
+ font-weight: 500;
+}
+
+/* Links */
+.cm-hmd-internal-link,
+.internal-link {
+ color: var(--text-link);
+ text-decoration: none;
+}
+
+.cm-hmd-internal-link:hover,
+.internal-link:hover {
+ color: var(--text-a-hover);
+ text-decoration: underline;
+}
+
+/* Code blocks */
+.markdown-preview-view code,
+.cm-s-obsidian span.cm-inline-code {
+ color: var(--text-normal);
+ background-color: var(--inline-code-background);
+ padding: 0.2em 0.4em;
+ border-radius: 4px;
+}
+
+/* Blockquotes */
+.markdown-preview-view blockquote,
+.cm-s-obsidian .HyperMD-quote {
+ border-left: 4px solid var(--blockquote-border);
+ background-color: var(--blockquote-background);
+ padding: 1em;
+ margin: 1em 0;
+ border-radius: 0 4px 4px 0;
+}
+
+/* Checkboxes */
+input[type='checkbox'] {
+ border: 1px solid var(--checkbox-border-color);
+ background-color: transparent;
+ transition: all 0.2s ease;
+}
+
+input[type='checkbox']:hover {
+ border-color: var(--checkbox-border-color-hover);
+ background-color: var(--checkbox-color-hover);
+}
+
+input[type='checkbox']:checked {
+ background-color: var(--checkbox-color);
+ border-color: var(--checkbox-color);
+}
+
+/* Tables */
+th {
+ background-color: var(--table-header-background);
+ border-bottom: 2px solid var(--background-modifier-border);
+ font-weight: 600;
+}
+
+tr:nth-child(even) {
+ background-color: var(--background-secondary);
+}
+
+tr:hover {
+ background-color: var(--table-row-background-hover);
+}
+
+/* Tags */
+a.tag {
+ color: var(--tag-color);
+ background-color: var(--tag-background);
+ padding: 2px 8px;
+ border-radius: 4px;
+ text-decoration: none;
+ transition: all 0.2s ease;
+}
+
+a.tag:hover {
+ background-color: var(--tag-background-hover);
+ text-decoration: none;
+}
diff --git a/.config/matugen/templates/pywalfox-colors.json b/.config/matugen/templates/pywalfox-colors.json
new file mode 100644
index 000000000..9ddf17fac
--- /dev/null
+++ b/.config/matugen/templates/pywalfox-colors.json
@@ -0,0 +1,22 @@
+{
+ "wallpaper": "{{image}}",
+ "alpha": "100",
+ "colors": {
+ "color0": "{{colors.background.default.hex}}",
+ "color1": "",
+ "color2": "",
+ "color3": "",
+ "color4": "",
+ "color5": "",
+ "color6": "",
+ "color7": "",
+ "color8": "",
+ "color9": "",
+ "color10": "{{colors.primary.default.hex}}",
+ "color11": "",
+ "color12": "",
+ "color13": "{{colors.surface_bright.default.hex}}",
+ "color14": "",
+ "color15": "{{colors.on_surface.default.hex}}"
+ }
+}
diff --git a/.config/matugen/templates/qtct-colors.conf b/.config/matugen/templates/qtct-colors.conf
new file mode 100644
index 000000000..5d35cb46d
--- /dev/null
+++ b/.config/matugen/templates/qtct-colors.conf
@@ -0,0 +1,5 @@
+[ColorScheme]
+active_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface.default.hex}}, {{colors.scrim.default.hex}}, {{colors.surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.secondary.default.hex}}
+disabled_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface.default.hex}}, {{colors.scrim.default.hex}}, {{colors.surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.secondary.default.hex}}
+inactive_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface.default.hex}}, {{colors.scrim.default.hex}}, {{colors.surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.secondary.default.hex}}
+
diff --git a/.config/matugen/templates/rofi-colors.rasi b/.config/matugen/templates/rofi-colors.rasi
new file mode 100755
index 000000000..9f677bc75
--- /dev/null
+++ b/.config/matugen/templates/rofi-colors.rasi
@@ -0,0 +1,47 @@
+* {
+ primary: {{colors.primary.default.hex}};
+ primary-fixed: {{colors.primary_fixed.default.hex}};
+ primary-fixed-dim: {{colors.primary_fixed_dim.default.hex}};
+ on-primary: {{colors.on_primary.default.hex}};
+ on-primary-fixed: {{colors.on_primary_fixed.default.hex}};
+ on-primary-fixed-variant: {{colors.on_primary_fixed_variant.default.hex}};
+ primary-container: {{colors.primary_container.default.hex}};
+ on-primary-container: {{colors.on_primary_container.default.hex}};
+ secondary: {{colors.secondary.default.hex}};
+ secondary-fixed: {{colors.secondary_fixed.default.hex}};
+ secondary-fixed-dim: {{colors.secondary_fixed_dim.default.hex}};
+ on-secondary: {{colors.on_secondary.default.hex}};
+ on-secondary-fixed: {{colors.on_secondary_fixed.default.hex}};
+ on-secondary-fixed-variant: {{colors.on_secondary_fixed_variant.default.hex}};
+ secondary-container: {{colors.secondary_container.default.hex}};
+ on-secondary-container: {{colors.on_secondary_container.default.hex}};
+ tertiary: {{colors.tertiary.default.hex}};
+ tertiary-fixed: {{colors.tertiary_fixed.default.hex}};
+ tertiary-fixed-dim: {{colors.tertiary_fixed_dim.default.hex}};
+ on-tertiary: {{colors.on_tertiary.default.hex}};
+ on-tertiary-fixed: {{colors.on_tertiary_fixed.default.hex}};
+ on-tertiary-fixed-variant: {{colors.on_tertiary_fixed_variant.default.hex}};
+ tertiary-container: {{colors.tertiary_container.default.hex}};
+ on-tertiary-container: {{colors.on_tertiary_container.default.hex}};
+ error: {{colors.error.default.hex}};
+ on-error: {{colors.on_error.default.hex}};
+ error-container: {{colors.error_container.default.hex}};
+ on-error-container: {{colors.on_error_container.default.hex}};
+ surface: {{colors.surface.default.hex}};
+ on-surface: {{colors.on_surface.default.hex}};
+ on-surface-variant: {{colors.on_surface_variant.default.hex}};
+ outline: {{colors.outline.default.hex}};
+ outline-variant: {{colors.outline_variant.default.hex}};
+ shadow: {{colors.shadow.default.hex}};
+ scrim: {{colors.scrim.default.hex}};
+ inverse-surface: {{colors.inverse_surface.default.hex}};
+ inverse-on-surface: {{colors.inverse_on_surface.default.hex}};
+ inverse-primary: {{colors.inverse_primary.default.hex}};
+ surface-dim: {{colors.surface_dim.default.hex}};
+ surface-bright: {{colors.surface_bright.default.hex}};
+ surface-container-lowest: {{colors.surface_container_lowest.default.hex}};
+ surface-container-low: {{colors.surface_container_low.default.hex}};
+ surface-container: {{colors.surface_container.default.hex}};
+ surface-container-high: {{colors.surface_container_high.default.hex}};
+ surface-container-highest: {{colors.surface_container_highest.default.hex}};
+}
\ No newline at end of file
diff --git a/.config/matugen/templates/spicetify-colors.ini b/.config/matugen/templates/spicetify-colors.ini
new file mode 100644
index 000000000..6d079bcf6
--- /dev/null
+++ b/.config/matugen/templates/spicetify-colors.ini
@@ -0,0 +1,35 @@
+[Base]
+main_fg = ${on_surface}
+secondary_fg = ${on_surface_variant}
+main_bg = ${surface}
+sidebar_and_player_bg = ${surface_container}
+cover_overlay_and_shadow = 000000
+indicator_fg_and_button_bg = ${primary}
+pressing_fg = ${on_primary}
+slider_bg = ${surface_variant}
+sidebar_indicator_and_hover_button_bg = ${primary}
+scrollbar_fg_and_selected_row_bg = ${surface_variant}
+pressing_button_fg = ${on_primary}
+pressing_button_bg = ${primary}
+selected_button = ${primary}
+miscellaneous_bg = ${surface_container}
+miscellaneous_hover_bg = ${surface_container_high}
+preserve_1 = FFFFFF
+
+[Dark]
+main_fg = ${on_surface}
+secondary_fg = ${on_surface_variant}
+main_bg = ${surface}
+sidebar_and_player_bg = ${surface_container}
+cover_overlay_and_shadow = 000000
+indicator_fg_and_button_bg = ${primary}
+pressing_fg = ${on_primary}
+slider_bg = ${surface_variant}
+sidebar_indicator_and_hover_button_bg = ${primary}
+scrollbar_fg_and_selected_row_bg = ${surface_variant}
+pressing_button_fg = ${on_primary}
+pressing_button_bg = ${primary}
+selected_button = ${primary}
+miscellaneous_bg = ${surface_container}
+miscellaneous_hover_bg = ${surface_container_high}
+preserve_1 = FFFFFF
diff --git a/.config/matugen/templates/starship-colors.toml b/.config/matugen/templates/starship-colors.toml
new file mode 100644
index 000000000..49130d1c0
--- /dev/null
+++ b/.config/matugen/templates/starship-colors.toml
@@ -0,0 +1,46 @@
+format = '''
+$directory$git_branch$rust$python
+$character'''
+
+palette = 'colors'
+
+[palettes.colors]
+mustard = '#af8700' # example
+color1 = '{{colors.primary_fixed_dim.default.hex}}'
+color2 = '{{colors.on_primary.default.hex}}'
+color3 = '{{colors.on_surface_variant.default.hex}}'
+color4 = '{{colors.surface_container.default.hex}}'
+color5 = '{{colors.on_primary.default.hex}}'
+color6 = '{{colors.surface_dim.default.hex}}'
+color7 = '{{colors.surface.default.hex}}'
+color8 = '{{colors.primary.default.hex}}'
+color9 = '{{colors.tertiary.default.hex}}'
+
+# Prompt symbols
+[character]
+success_symbol = "[🞈](color9 bold)"
+error_symbol = "[🞈](@{error})"
+vicmd_symbol = "[🞈](#f9e2af)"
+
+[directory]
+format = "[](fg:color1 bg:color4)[](bg:color1 fg:color2)[ ](fg:color1 bg:color4)[$path ](fg:color3 bg:color4)[ ](fg:color4)"
+
+[directory.substitutions]
+"Documents" = " "
+"Downloads" = " "
+"Music" = " "
+"Pictures" = " "
+
+[git_branch]
+format = "[](fg:color8 bg:color4)[ ](bg:color8 fg:color5)[](fg:color8 bg:color4)[(bg:color8 fg:color5) $branch](fg:color3 bg:color4)[](fg:color4) "
+
+[time]
+format = "[](fg:color8 bg:color4)[ ](bg:color8 fg:color5)[](fg:color8 bg:color4)[(bg:color8 fg:color5) $time](fg:color3 bg:color4)[](fg:color4) "
+disabled = false
+time_format = "%R" # Hour:Minute Format
+
+[python]
+format = "[](fg:color8 bg:color4)[${symbol}${version}](bg:color8 fg:color5)[](fg:color8 bg:color4)[(bg:color8 fg:color5)( ${virtualenv})](fg:color3 bg:color4)[](fg:color4) "
+symbol = '🐍'
+# pyenv_version_name = true
+pyenv_prefix = 'venv'
diff --git a/.config/matugen/templates/telegram-colors.tdesktop-theme b/.config/matugen/templates/telegram-colors.tdesktop-theme
new file mode 100644
index 000000000..c40854143
--- /dev/null
+++ b/.config/matugen/templates/telegram-colors.tdesktop-theme
@@ -0,0 +1,118 @@
+// Material You theme for Telegram Desktop
+// Generated by matugen
+
+COLOR_GRAY: #{{colors.outline.default.hex_stripped}};
+COLOR_DARK: #{{colors.surface_variant.default.hex_stripped}};
+
+windowBg: #{{colors.background.default.hex_stripped}}; // Main background
+windowFg: #{{colors.on_background.default.hex_stripped}}; // Main text
+windowBgOver: #{{colors.surface_variant.default.hex_stripped}}; // Generic background on hover
+windowBgRipple: #{{colors.surface_variant.default.hex_stripped}}; // Ripple effect
+windowFgOver: #{{colors.on_surface_variant.default.hex_stripped}}; // Text on hover
+windowSubTextFg: #{{colors.outline.default.hex_stripped}}; // Minor text
+windowSubTextFgOver: #{{colors.outline.default.hex_stripped}}; // Minor text on hover
+windowBoldFg: #{{colors.on_background.default.hex_stripped}}; // Bold text
+windowBoldFgOver: #{{colors.on_surface_variant.default.hex_stripped}}; // Bold text on hover
+windowBgActive: #{{colors.primary.default.hex_stripped}}; // Active items background
+windowFgActive: #{{colors.on_primary.default.hex_stripped}}; // Active items text
+windowActiveTextFg: #{{colors.primary.default.hex_stripped}}; // Active items text
+windowShadowFg: #{{colors.shadow.default.hex_stripped}}; // Window shadow
+windowShadowFgFallback: #{{colors.shadow.default.hex_stripped}}; // Fallback for shadow
+
+shadowFg: #{{colors.shadow.default.hex_stripped}}; // General shadow
+slideFadeOutBg: #{{colors.background.default.hex_stripped}};
+slideFadeOutShadowFg: #{{colors.shadow.default.hex_stripped}};
+
+imageBg: #{{colors.surface.default.hex_stripped}};
+imageBgTransparent: #{{colors.surface.default.hex_stripped}};
+
+activeButtonBg: #{{colors.primary.default.hex_stripped}}; // Active button background
+activeButtonBgOver: #{{colors.primary_container.default.hex_stripped}}; // Active button hover background
+activeButtonBgRipple: #{{colors.on_primary_container.default.hex_stripped}}; // Active button ripple
+activeButtonFg: #{{colors.on_primary.default.hex_stripped}}; // Active button text
+activeButtonFgOver: #{{colors.on_primary_container.default.hex_stripped}}; // Active button hover text
+activeButtonSecondaryFg: #{{colors.on_primary.default.hex_stripped}}; // Active button secondary text
+activeButtonSecondaryFgOver: #{{colors.on_primary_container.default.hex_stripped}}; // Active button secondary hover text
+
+lightButtonBg: #{{colors.surface.default.hex_stripped}}; // Light button background
+lightButtonBgOver: #{{colors.surface_variant.default.hex_stripped}}; // Light button hover background
+lightButtonBgRipple: #{{colors.primary.default.hex_stripped}}; // Light button ripple
+lightButtonFg: #{{colors.on_surface.default.hex_stripped}}; // Light button text
+lightButtonFgOver: #{{colors.on_surface_variant.default.hex_stripped}}; // Light button hover text
+
+attentionButtonFg: #{{colors.error.default.hex_stripped}};
+attentionButtonFgOver: #{{colors.error.default.hex_stripped}};
+attentionButtonBgOver: #{{colors.error_container.default.hex_stripped}};
+attentionButtonBgRipple: #{{colors.on_error_container.default.hex_stripped}};
+
+outlineButtonBg: #{{colors.surface.default.hex_stripped}}; // Outline button background
+outlineButtonBgOver: #{{colors.surface_variant.default.hex_stripped}}; // Outline button hover background
+outlineButtonOutlineFg: #{{colors.primary.default.hex_stripped}}; // Outline button color
+outlineButtonBgRipple: #{{colors.primary.default.hex_stripped}}; // Outline button ripple
+
+menuBg: #{{colors.surface.default.hex_stripped}};
+menuBgOver: #{{colors.surface_variant.default.hex_stripped}};
+menuBgRipple: #{{colors.primary.default.hex_stripped}};
+menuIconFg: #{{colors.on_surface.default.hex_stripped}};
+menuIconFgOver: #{{colors.on_surface_variant.default.hex_stripped}};
+menuSubmenuArrowFg: #{{colors.outline.default.hex_stripped}};
+menuFgDisabled: #{{colors.outline.default.hex_stripped}};
+menuSeparatorFg: #{{colors.outline.default.hex_stripped}};
+
+scrollBarBg: #{{colors.primary.default.hex_stripped}}40; // Scroll bar background (40% opacity)
+scrollBarBgOver: #{{colors.primary.default.hex_stripped}}60; // Scroll bar hover background (60% opacity)
+scrollBg: #{{colors.surface_variant.default.hex_stripped}}40; // Scroll bar track (40% opacity)
+scrollBgOver: #{{colors.surface_variant.default.hex_stripped}}60; // Scroll bar track on hover (60% opacity)
+
+smallCloseIconFg: #{{colors.outline.default.hex_stripped}};
+smallCloseIconFgOver: #{{colors.on_surface_variant.default.hex_stripped}};
+
+radialFg: #{{colors.primary.default.hex_stripped}};
+radialBg: #{{colors.surface.default.hex_stripped}};
+
+placeholderFg: #{{colors.outline.default.hex_stripped}}; // Placeholder text
+placeholderFgActive: #{{colors.primary.default.hex_stripped}}; // Active placeholder text
+inputBorderFg: #{{colors.outline.default.hex_stripped}}; // Input border
+filterInputBorderFg: #{{colors.outline.default.hex_stripped}}; // Search input border
+filterInputInactiveBg: #{{colors.surface.default.hex_stripped}}; // Inactive search input background
+checkboxFg: #{{colors.primary.default.hex_stripped}}; // Checkbox color
+
+titleBg: #{{colors.surface.default.hex_stripped}}; // Window title background
+titleShadow: #{{colors.shadow.default.hex_stripped}};
+titleButtonFg: #{{colors.on_surface.default.hex_stripped}}; // Title button color
+titleButtonBgOver: #{{colors.surface_variant.default.hex_stripped}}; // Title button hover background
+titleButtonFgOver: #{{colors.on_surface_variant.default.hex_stripped}}; // Title button hover color
+titleButtonCloseBgOver: #{{colors.error.default.hex_stripped}};
+titleButtonCloseFgOver: #{{colors.on_error.default.hex_stripped}};
+titleFgActive: #{{colors.on_surface.default.hex_stripped}}; // Active title text
+titleFg: #{{colors.on_surface.default.hex_stripped}}; // Inactive title text
+
+trayCounterBg: #{{colors.error.default.hex_stripped}}; // Tray counter background
+trayCounterBgMute: #{{colors.outline.default.hex_stripped}}; // Muted tray counter background
+trayCounterFg: #{{colors.on_error.default.hex_stripped}}; // Tray counter text
+trayCounterBgMacInvert: #{{colors.error.default.hex_stripped}}; // Mac tray counter
+trayCounterFgMacInvert: #{{colors.on_error.default.hex_stripped}}; // Mac tray counter text
+
+layerBg: #{{colors.surface.default.hex_stripped}}99; // Layer background (60% opacity)
+
+cancelIconFg: #{{colors.error.default.hex_stripped}}; // Cancel icon
+cancelIconFgOver: #{{colors.error.default.hex_stripped}}; // Cancel icon on hover
+
+boxBg: #{{colors.surface.default.hex_stripped}}; // Box background
+boxTextFg: #{{colors.on_surface.default.hex_stripped}}; // Box text
+boxTextFgGood: #{{colors.primary.default.hex_stripped}}; // Box good text
+boxTextFgError: #{{colors.error.default.hex_stripped}}; // Box error text
+boxTitleFg: #{{colors.on_surface.default.hex_stripped}}; // Box title text
+boxSearchBg: #{{colors.surface.default.hex_stripped}}; // Box search field background
+boxSearchCancelIconFg: #{{colors.error.default.hex_stripped}}; // Box search cancel icon
+boxSearchCancelIconFgOver: #{{colors.error.default.hex_stripped}}; // Box search cancel icon on hover
+
+contactsBg: #{{colors.surface.default.hex_stripped}}; // Contacts background
+contactsBgOver: #{{colors.surface_variant.default.hex_stripped}}; // Contacts background on hover
+contactsNameFg: #{{colors.on_surface.default.hex_stripped}}; // Contact name
+contactsStatusFg: #{{colors.outline.default.hex_stripped}}; // Contact status
+contactsStatusFgOver: #{{colors.on_surface_variant.default.hex_stripped}}; // Contact status on hover
+contactsStatusFgOnline: #{{colors.primary.default.hex_stripped}}; // Online contact status
+
+photoCropFadeBg: #{{colors.surface.default.hex_stripped}}cc; // Photo crop fade background
+photoCropPointFg: #{{colors.primary.default.hex_stripped}}; // Photo crop points
diff --git a/.config/matugen/templates/vscode-color-theme.json b/.config/matugen/templates/vscode-color-theme.json
new file mode 100644
index 000000000..3281fcf97
--- /dev/null
+++ b/.config/matugen/templates/vscode-color-theme.json
@@ -0,0 +1,112 @@
+{
+ "name": "Material You",
+ "colors": {
+ "editor.background": "{{colors.background.default.hex}}",
+ "editor.foreground": "{{colors.on_background.default.hex}}",
+ "activityBar.background": "{{colors.surface.default.hex}}",
+ "activityBar.foreground": "{{colors.on_surface.default.hex}}",
+ "activityBar.inactiveForeground": "{{colors.outline.default.hex}}",
+ "activityBarBadge.background": "{{colors.primary.default.hex}}",
+ "activityBarBadge.foreground": "{{colors.on_primary.default.hex}}",
+ "badge.background": "{{colors.primary.default.hex}}",
+ "badge.foreground": "{{colors.on_primary.default.hex}}",
+ "button.background": "{{colors.primary.default.hex}}",
+ "button.foreground": "{{colors.on_primary.default.hex}}",
+ "button.hoverBackground": "{{colors.primary_container.default.hex}}",
+ "dropdown.background": "{{colors.surface.default.hex}}",
+ "dropdown.foreground": "{{colors.on_surface.default.hex}}",
+ "editor.lineHighlightBackground": "{{colors.surface_variant.default.hex}}40",
+ "editor.selectionBackground": "{{colors.primary.default.hex}}40",
+ "editor.wordHighlightBackground": "{{colors.secondary.default.hex}}40",
+ "editorCursor.foreground": "{{colors.primary.default.hex}}",
+ "editorGroup.border": "{{colors.outline.default.hex}}",
+ "editorGroupHeader.tabsBackground": "{{colors.background.default.hex}}",
+ "editorIndentGuide.background": "{{colors.outline.default.hex}}40",
+ "editorLineNumber.foreground": "{{colors.outline.default.hex}}",
+ "editorLineNumber.activeForeground": "{{colors.primary.default.hex}}",
+ "focusBorder": "{{colors.primary.default.hex}}",
+ "list.activeSelectionBackground": "{{colors.primary.default.hex}}40",
+ "list.activeSelectionForeground": "{{colors.on_surface.default.hex}}",
+ "list.hoverBackground": "{{colors.surface_variant.default.hex}}40",
+ "list.hoverForeground": "{{colors.on_surface_variant.default.hex}}",
+ "list.inactiveSelectionBackground": "{{colors.surface_variant.default.hex}}40",
+ "panel.background": "{{colors.surface.default.hex}}",
+ "panel.border": "{{colors.outline.default.hex}}",
+ "panelTitle.activeForeground": "{{colors.primary.default.hex}}",
+ "peekView.border": "{{colors.primary.default.hex}}",
+ "peekViewEditor.background": "{{colors.surface.default.hex}}",
+ "peekViewResult.background": "{{colors.surface_variant.default.hex}}",
+ "peekViewTitle.background": "{{colors.surface.default.hex}}",
+ "progressBar.background": "{{colors.primary.default.hex}}",
+ "scrollbar.shadow": "{{colors.background.default.hex}}00",
+ "scrollbarSlider.activeBackground": "{{colors.primary.default.hex}}80",
+ "scrollbarSlider.background": "{{colors.surface_variant.default.hex}}40",
+ "scrollbarSlider.hoverBackground": "{{colors.surface_variant.default.hex}}80",
+ "sideBar.background": "{{colors.surface.default.hex}}",
+ "sideBar.foreground": "{{colors.on_surface.default.hex}}",
+ "sideBarSectionHeader.background": "{{colors.surface_variant.default.hex}}",
+ "sideBarSectionHeader.foreground": "{{colors.on_surface_variant.default.hex}}",
+ "sideBarTitle.foreground": "{{colors.primary.default.hex}}",
+ "statusBar.background": "{{colors.surface_variant.default.hex}}",
+ "statusBar.foreground": "{{colors.on_surface_variant.default.hex}}",
+ "statusBar.debuggingBackground": "{{colors.tertiary.default.hex}}",
+ "statusBar.debuggingForeground": "{{colors.on_tertiary.default.hex}}",
+ "statusBar.noFolderBackground": "{{colors.surface.default.hex}}",
+ "statusBarItem.remoteBackground": "{{colors.primary.default.hex}}",
+ "statusBarItem.remoteForeground": "{{colors.on_primary.default.hex}}",
+ "tab.activeBackground": "{{colors.surface.default.hex}}",
+ "tab.activeForeground": "{{colors.primary.default.hex}}",
+ "tab.inactiveBackground": "{{colors.background.default.hex}}",
+ "tab.inactiveForeground": "{{colors.outline.default.hex}}",
+ "terminal.background": "{{colors.background.default.hex}}",
+ "terminal.foreground": "{{colors.on_background.default.hex}}",
+ "titleBar.activeBackground": "{{colors.surface.default.hex}}",
+ "titleBar.activeForeground": "{{colors.on_surface.default.hex}}",
+ "titleBar.inactiveBackground": "{{colors.surface_variant.default.hex}}",
+ "titleBar.inactiveForeground": "{{colors.on_surface_variant.default.hex}}"
+ },
+ "tokenColors": [
+ {
+ "scope": ["comment", "punctuation.definition.comment", "string.comment"],
+ "settings": {
+ "foreground": "{{colors.outline.default.hex}}"
+ }
+ },
+ {
+ "scope": ["constant", "entity.name.constant", "variable.other.constant", "variable.other.enummember"],
+ "settings": {
+ "foreground": "{{colors.primary.default.hex}}"
+ }
+ },
+ {
+ "scope": ["entity.name", "entity.other.attribute-name"],
+ "settings": {
+ "foreground": "{{colors.tertiary.default.hex}}"
+ }
+ },
+ {
+ "scope": ["entity.name.tag", "keyword", "storage.type", "storage.modifier"],
+ "settings": {
+ "foreground": "{{colors.primary.default.hex}}"
+ }
+ },
+ {
+ "scope": ["string", "string punctuation.section.embedded source"],
+ "settings": {
+ "foreground": "{{colors.secondary.default.hex}}"
+ }
+ },
+ {
+ "scope": ["variable", "variable.parameter.function"],
+ "settings": {
+ "foreground": "{{colors.on_background.default.hex}}"
+ }
+ },
+ {
+ "scope": ["support.function", "entity.name.function"],
+ "settings": {
+ "foreground": "{{colors.tertiary.default.hex}}"
+ }
+ }
+ ]
+}