feat: Add some more themeing
This commit is contained in:
180
.config/WallRizz/themeExtensionScripts/btop@5hubham5ingh.js
Normal file
180
.config/WallRizz/themeExtensionScripts/btop@5hubham5ingh.js
Normal file
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
For: Btop, https://github.com/aristocratos/btop
|
||||
Author: https://github.com/5hubham5ingh
|
||||
Version: 0.0.1
|
||||
Prerequisite: Edit the ~/.config/btop/btop.conf file to add this line-
|
||||
color_theme = "WallRizz.theme"
|
||||
|
||||
Note: The theme only takes effect after restarting btop.
|
||||
*/
|
||||
|
||||
function generateTheme(colors, isDark) {
|
||||
const sortedColors = colors.sort((a, b) => {
|
||||
const la = Color(a).getLuminance();
|
||||
const lb = Color(b).getLuminance();
|
||||
return isDark ? la - lb : lb - la;
|
||||
});
|
||||
|
||||
const background = sortedColors[0];
|
||||
const foreground = sortedColors[colors.length - 1];
|
||||
|
||||
const midIndex = Math.floor(sortedColors.length / 2);
|
||||
const selection = sortedColors[midIndex];
|
||||
const cursor = isDark
|
||||
? sortedColors[Math.floor(midIndex / 2)]
|
||||
: sortedColors[Math.floor(midIndex * 1.5)];
|
||||
|
||||
const black = isDark
|
||||
? sortedColors[1]
|
||||
: sortedColors[sortedColors.length - 2];
|
||||
const white = isDark
|
||||
? sortedColors[sortedColors.length - 2]
|
||||
: sortedColors[1];
|
||||
|
||||
return Object.assign(
|
||||
{
|
||||
background,
|
||||
foreground,
|
||||
selection,
|
||||
cursor,
|
||||
black,
|
||||
white,
|
||||
},
|
||||
...sortedColors.filter(
|
||||
(color) =>
|
||||
color !== selection ||
|
||||
color !== cursor,
|
||||
)
|
||||
.map((color, i) => ({
|
||||
[`color${i + 1}`]: adjustColorForReadability(background, color),
|
||||
})),
|
||||
);
|
||||
}
|
||||
|
||||
function adjustColorForReadability(background, foreground) {
|
||||
const fg = Color(foreground);
|
||||
while (!Color.isReadable(background, foreground)) {
|
||||
fg.brighten(1).saturate(1);
|
||||
const hex = fg.toHex();
|
||||
if (hex === "000000" || hex === "ffffff") {
|
||||
return Color(foreground).brighten().saturate().toHexString();
|
||||
}
|
||||
}
|
||||
|
||||
return fg.toHexString();
|
||||
}
|
||||
|
||||
function generateBtopConfig(theme) {
|
||||
const config = `
|
||||
# Main background
|
||||
theme[main_bg]="${theme.background}"
|
||||
|
||||
# Main text color
|
||||
theme[main_fg]="${theme.foreground}"
|
||||
|
||||
# Title color for boxes
|
||||
theme[title]="${theme.foreground}"
|
||||
|
||||
# Highlight color for keyboard shortcuts
|
||||
theme[hi_fg]="${theme.color1}"
|
||||
|
||||
# Background color of selected items
|
||||
theme[selected_bg]="${theme.selection}"
|
||||
|
||||
# Foreground color of selected items
|
||||
theme[selected_fg]="${theme.color3}"
|
||||
|
||||
# Color of inactive/disabled text
|
||||
theme[inactive_fg]="${theme.black}"
|
||||
|
||||
# Color of text appearing on top of graphs
|
||||
theme[graph_text]="${theme.foreground}"
|
||||
|
||||
# Misc colors for processes box
|
||||
theme[proc_misc]="${theme.color2}"
|
||||
|
||||
# CPU box outline color
|
||||
theme[cpu_box]="${theme.selection}"
|
||||
|
||||
# Memory/disks box outline color
|
||||
theme[mem_box]="${theme.selection}"
|
||||
|
||||
# Network up/down box outline color
|
||||
theme[net_box]="${theme.selection}"
|
||||
|
||||
# Processes box outline color
|
||||
theme[proc_box]="${theme.selection}"
|
||||
|
||||
# Box divider lines and small box borders
|
||||
theme[div_line]="${theme.selection}"
|
||||
|
||||
# Temperature graph colors
|
||||
theme[temp_start]="${theme.color2}"
|
||||
theme[temp_mid]="${theme.color3}"
|
||||
theme[temp_end]="${theme.color1}"
|
||||
|
||||
# CPU graph colors
|
||||
theme[cpu_start]="${theme.color2}"
|
||||
theme[cpu_mid]="${theme.color3}"
|
||||
theme[cpu_end]="${theme.color1}"
|
||||
|
||||
# Mem/Disk free meter
|
||||
theme[free_start]="${theme.color1}"
|
||||
theme[free_mid]="${theme.color3}"
|
||||
theme[free_end]="${theme.color2}"
|
||||
|
||||
# Mem/Disk cached meter
|
||||
theme[cached_start]="${theme.color6}"
|
||||
theme[cached_mid]="${theme.color2}"
|
||||
theme[cached_end]="${theme.color3}"
|
||||
|
||||
# Mem/Disk available meter
|
||||
theme[available_start]="${theme.color1}"
|
||||
theme[available_mid]="${theme.color3}"
|
||||
theme[available_end]="${theme.color2}"
|
||||
|
||||
# Mem/Disk used meter
|
||||
theme[used_start]="${theme.color2}"
|
||||
theme[used_mid]="${theme.color3}"
|
||||
theme[used_end]="${theme.color1}"
|
||||
|
||||
# Download graph colors
|
||||
theme[download_start]="${theme.color2}"
|
||||
theme[download_mid]="${theme.color6}"
|
||||
theme[download_end]="${theme.color4}"
|
||||
|
||||
# Upload graph colors
|
||||
theme[upload_start]="${theme.color3}"
|
||||
theme[upload_mid]="${theme.color5}"
|
||||
theme[upload_end]="${theme.color1}"
|
||||
|
||||
# Process box color gradient for threads, mem and cpu usage
|
||||
theme[process_start]="${theme.color2}"
|
||||
theme[process_mid]="${theme.color1}"
|
||||
theme[process_end]="${theme.color4}"
|
||||
`.trim();
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
function getDarkThemeConf(colors) {
|
||||
const theme = generateTheme(colors, true);
|
||||
return generateBtopConfig(theme, true);
|
||||
}
|
||||
|
||||
function getLightThemeConf(colors) {
|
||||
const theme = generateTheme(colors, false);
|
||||
return generateBtopConfig(theme, false);
|
||||
}
|
||||
|
||||
function setTheme(themeConfPath) {
|
||||
const btopThemeConf = STD.open(
|
||||
HOME_DIR.concat("/.config/btop/themes/WallRizz.theme"),
|
||||
"w+",
|
||||
);
|
||||
const conf = STD.loadFile(themeConfPath);
|
||||
btopThemeConf.puts(conf);
|
||||
btopThemeConf.close();
|
||||
}
|
||||
|
||||
export { getDarkThemeConf, getLightThemeConf, setTheme };
|
||||
Reference in New Issue
Block a user