182 lines
4.5 KiB
JavaScript
182 lines
4.5 KiB
JavaScript
/*
|
|
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 };
|