dusk theme changing

This commit is contained in:
2023-09-17 19:02:30 +02:00
parent 4e54d5f372
commit 3406fa27d9
12 changed files with 1292 additions and 4 deletions

277
dusk/.dusk/color-changer.c Normal file
View File

@@ -0,0 +1,277 @@
/*
Copyright 2021 Karl Ragnar Giese, karl@giese.no
This file is part of Dusk.
Dusk is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Dusk is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Dusk; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
char fg[8];
char bg[8];
char cursor[8];
char contrast[8];
char black1[8];
char black2[8];
char red1[8];
char red2[8];
char green1[8];
char green2[8];
char yellow1[8];
char yellow2[8];
char blue1[8];
char blue2[8];
char magenta1[8];
char magenta2[8];
char cyan1[8];
char cyan2[8];
char white1[8];
char white2[8];
char emacstheme[64];
char dwmtextbg[8];
char dwmtextfg[8];
char dwmborder[8];
char dwmbordersel[8];
char dwmtagbg[8];
char dwmtagfg[8];
char dwmtagselbg[8];
char dwmtagselfg[8];
char dwmtitlebg[8];
char dwmtitlefg[8];
char dwmtitleselbg[8];
char dwmtitleselfg[8];
char gtktheme[64];
void applypywal(){
FILE *pywalfile;
char buffer[64];
/* make JSON for pywal using cJSON */
cJSON *pywalcjson = cJSON_CreateObject();
cJSON_AddStringToObject(pywalcjson, "wallpaper", "None");
cJSON_AddStringToObject(pywalcjson, "alpha", "100");
cJSON *special = cJSON_AddObjectToObject(pywalcjson, "special");
cJSON_AddStringToObject(special, "background", bg);
cJSON_AddStringToObject(special, "foreground", fg);
cJSON_AddStringToObject(special, "cursor", cursor);
cJSON *colors = cJSON_AddObjectToObject(pywalcjson, "colors");
cJSON_AddStringToObject(colors, "color0", black1);
cJSON_AddStringToObject(colors, "color1", red1);
cJSON_AddStringToObject(colors, "color2", green1);
cJSON_AddStringToObject(colors, "color3", yellow1);
cJSON_AddStringToObject(colors, "color4", blue1);
cJSON_AddStringToObject(colors, "color5", magenta1);
cJSON_AddStringToObject(colors, "color6", cyan1);
cJSON_AddStringToObject(colors, "color7", white1);
cJSON_AddStringToObject(colors, "color8", black2);
cJSON_AddStringToObject(colors, "color9", red2);
cJSON_AddStringToObject(colors, "color10", green2);
cJSON_AddStringToObject(colors, "color11", yellow2);
cJSON_AddStringToObject(colors, "color12", blue2);
cJSON_AddStringToObject(colors, "color13", magenta2);
cJSON_AddStringToObject(colors, "color14", cyan2);
cJSON_AddStringToObject(colors, "color15", white2);
/* Write JSON */
sprintf(buffer, "%s/.cache/dusk/pywal", getenv("HOME"));
pywalfile=fopen(buffer, "w");
fputs(cJSON_Print(pywalcjson), pywalfile);
fclose(pywalfile);
/* Load JSON to pywal */
sprintf(buffer, "wal -q --theme %s/.cache/dusk/pywal", getenv("HOME"));
system(buffer);
cJSON_Delete(pywalcjson);
}
void applyemacs(){
char buffer[128];
sprintf(buffer, "emacsclient --eval \" (load-theme '%s)\"", emacstheme);
system(buffer);
}
void applydwm(){
FILE *xresources;
char buffer[512];
sprintf(buffer, "%s/.cache/dusk/xresources", getenv("HOME"));
xresources = fopen(buffer, "w");
/* Make xresources for DWM */
sprintf(buffer,
"dwm.normbgcolor: %s\n"
"dwm.normfgcolor: %s\n"
"dwm.normbordercolor: %s\n"
"dwm.selbordercolor: %s\n"
"dwm.tagsnormbgcolor: %s\n"
"dwm.tagsnormfgcolor: %s\n"
"dwm.tagsselbgcolor: %s\n"
"dwm.tagsselfgcolor: %s\n"
"dwm.titlenormbgcolor: %s\n"
"dwm.titlenormfgcolor: %s\n"
"dwm.titleselbgcolor: %s\n"
"dwm.titleselfgcolor: %s\n",
dwmtextbg,
dwmtextfg,
dwmborder,
dwmbordersel,
dwmtagbg,
dwmtagfg,
dwmtagselbg,
dwmtagselfg,
dwmtitlebg,
dwmtitlefg,
dwmtitleselbg,
dwmtitleselfg);
fprintf(xresources, buffer);
fclose(xresources);
/* Apply xresources with the xrdb patch and hte dwmc patch */
system("xrdb -merge ~/.cache/dusk/xresources");
system("~/src/dwm/patch/dwmc xrdb");
/* Change x root window color */
sprintf(buffer, "xsetroot -solid \"%s\"", bg);
system(buffer);
}
void applygtk(){
char buffer[128];
FILE *xsettings;
sprintf(buffer, "%s/.xsettingsd", getenv("HOME"));
xsettings = fopen(buffer, "w");
fprintf(xsettings, "Net/ThemeName \"%s\"", gtktheme);
fclose(xsettings);
system("killall -HUP xsettingsd");
}
void changescheme(int color){
char buffer[256];
/* make sure ~/.cache/dusk exists */
sprintf(buffer, "%s/.cache/dusk", getenv("HOME"));
mkdir(buffer, 0755);
/* Select colors from the macros in config.h depending on the color scheme */
switch (color) {
case 1: {
/* light mode */
strcpy(fg, LFG);
strcpy(bg, LBG);
strcpy(cursor, LCURSOR);
strcpy(contrast, LCONTRAST);
strcpy(black1, LBLACK1);
strcpy(black2, LBLACK2);
strcpy(red1, LRED1);
strcpy(red2, LRED2);
strcpy(green1, LGREEN1);
strcpy(green2, LGREEN2);
strcpy(yellow1, LYELLOW1);
strcpy(yellow2, LYELLOW2);
strcpy(blue1, LBLUE1);
strcpy(blue2, LBLUE2);
strcpy(magenta1, LMAGENTA1);
strcpy(magenta2, LMAGENTA2);
strcpy(cyan1, LCYAN1);
strcpy(cyan2, LCYAN2);
strcpy(white1, LWHITE1);
strcpy(white2, LWHITE2);
strcpy(emacstheme, LEMACS);
strcpy(dwmtextbg, LDWMTEXTBG);
strcpy(dwmtextfg, LDWMTEXTFG);
strcpy(dwmborder, LDWMBORDER);
strcpy(dwmbordersel, LDWMBORDERSEL);
strcpy(dwmtagbg, LDWMTAGBG);
strcpy(dwmtagfg, LDWMTAGFG);
strcpy(dwmtagselbg, LDWMTAGSELBG);
strcpy(dwmtagselfg, LDWMTAGSELFG);
strcpy(dwmtitlebg, LDWMTITLEBG);
strcpy(dwmtitlefg, LDWMTITLEFG);
strcpy(dwmtitleselbg, LDWMTITLESELBG);
strcpy(dwmtitleselfg, LDWMTITLESELFG);
strcpy(gtktheme, LGTKTHEME);
printf("%s\n", "light mode");
break;
}
case 0: {
/* dark mode */
strcpy(fg, DFG);
strcpy(bg, DBG);
strcpy(cursor, DCURSOR);
strcpy(contrast, DCONTRAST);
strcpy(black1, DBLACK1);
strcpy(black2, DBLACK2);
strcpy(red1, DRED1);
strcpy(red2, DRED2);
strcpy(green1, DGREEN1);
strcpy(green2, DGREEN2);
strcpy(yellow1, DYELLOW1);
strcpy(yellow2, DYELLOW2);
strcpy(blue1, DBLUE1);
strcpy(blue2, DBLUE2);
strcpy(magenta1, DMAGENTA1);
strcpy(magenta2, DMAGENTA2);
strcpy(cyan1, DCYAN1);
strcpy(cyan2, DCYAN2);
strcpy(white1, DWHITE1);
strcpy(white2, DWHITE2);
strcpy(emacstheme, DEMACS);
strcpy(dwmtextbg, DDWMTEXTBG);
strcpy(dwmtextfg, DDWMTEXTFG);
strcpy(dwmborder, DDWMBORDER);
strcpy(dwmbordersel, DDWMBORDERSEL);
strcpy(dwmtagbg, DDWMTAGBG);
strcpy(dwmtagfg, DDWMTAGFG);
strcpy(dwmtagselbg, DDWMTAGSELBG);
strcpy(dwmtagselfg, DDWMTAGSELFG);
strcpy(dwmtitlebg, DDWMTITLEBG);
strcpy(dwmtitlefg, DDWMTITLEFG);
strcpy(dwmtitleselbg, DDWMTITLESELBG);
strcpy(dwmtitleselfg, DDWMTITLESELFG);
strcpy(gtktheme, DGTKTHEME);
printf("%s\n", "dark mode");
break;
}
default:
fprintf(stderr, "color may only be 0 or 1");
break;
}
/* Apply colors when macros are set in config.h */
if (PYWAL) {
applypywal();
}
if (EMACS) {
applyemacs();
}
if (DWM) {
applydwm();
}
if (GTK) {
applygtk();
}
}