qtile gives me more than dwm. I will try to live with it's quirks.
This commit is contained in:
parent
35ccb08948
commit
75517d5ad3
35 changed files with 9 additions and 9 deletions
7
_unused/dwmblocks/LICENSE
Normal file
7
_unused/dwmblocks/LICENSE
Normal file
|
@ -0,0 +1,7 @@
|
|||
ISC License (ISC)
|
||||
|
||||
Copyright 2020 torrinfail
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
17
_unused/dwmblocks/Makefile
Normal file
17
_unused/dwmblocks/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
PREFIX ?= /usr/local
|
||||
CC ?= cc
|
||||
LDFLAGS = -lX11
|
||||
|
||||
output: dwmblocks.c blocks.def.h blocks.h
|
||||
${CC} dwmblocks.c $(LDFLAGS) -o dwmblocks
|
||||
blocks.h:
|
||||
cp blocks.def.h $@
|
||||
|
||||
|
||||
clean:
|
||||
rm -f *.o *.gch dwmblocks
|
||||
install: output
|
||||
mkdir -p $(DESTDIR)$(PREFIX)/bin
|
||||
install -m 0755 dwmblocks $(DESTDIR)$(PREFIX)/bin/dwmblocks
|
||||
uninstall:
|
||||
rm -f $(DESTDIR)$(PREFIX)/bin/dwmblocks
|
17
_unused/dwmblocks/_scripts/sb-battery
Executable file
17
_unused/dwmblocks/_scripts/sb-battery
Executable file
|
@ -0,0 +1,17 @@
|
|||
#!/bin/bash
|
||||
|
||||
for battery in /sys/class/power_supply/BAT?*; do
|
||||
# If non-first battery, print a space separator.
|
||||
[ -n "${capacity+x}" ] && printf " "
|
||||
# Sets up the status and capacity
|
||||
case "$(cat "$battery/status")" in
|
||||
"Full") status="\uf102" ;;
|
||||
"Discharging") status="\uf078" ;;
|
||||
"Charging") status="\uf077" ;;
|
||||
"Not charging") status="\uf444" ;;
|
||||
"Unknown") status="\uf128" ;;
|
||||
esac
|
||||
capacity=$(cat "$battery/capacity")
|
||||
# Will make a warn variable if discharging and low
|
||||
[ "$capacity" -le 20 ] && printf "^c#ffffff^^b#770000^${status} ${capacity}%%^d^" || printf "${status} ${capacity}%%"
|
||||
done && exit 0
|
3
_unused/dwmblocks/_scripts/sb-emerge
Executable file
3
_unused/dwmblocks/_scripts/sb-emerge
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
[ $(pgrep -x emerge) ] && printf "\ue20f ^c#ffffff^^b#9a37ff^emerge^d^" || printf ""
|
3
_unused/dwmblocks/_scripts/sb-mail
Executable file
3
_unused/dwmblocks/_scripts/sb-mail
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
printf "\uf7aa configure your way to check mail!"
|
9
_unused/dwmblocks/_scripts/sb-network
Executable file
9
_unused/dwmblocks/_scripts/sb-network
Executable file
|
@ -0,0 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
case "$(cat /sys/class/net/w*/operstate 2>/dev/null)" in
|
||||
down) printf "^c#ffffff^^b#770000^no wifi^d^" ;;
|
||||
up)
|
||||
[ -n "$(ip address show dev wlan0 | grep 'inet ')" ] \
|
||||
&& printf "$(iw dev wlan0 info | grep 'ssid ' | cut -d' ' -f2-)" \
|
||||
|| printf "^c#ffffff^^b#770000^no ip^d^" ;;
|
||||
esac
|
17
_unused/dwmblocks/_scripts/sb-vol-in
Executable file
17
_unused/dwmblocks/_scripts/sb-vol-in
Executable file
|
@ -0,0 +1,17 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ "${1}" = "micmute" ]; then
|
||||
state=$(pactl get-source-mute @DEFAULT_SOURCE@ | awk -F': ' '{print $2}')
|
||||
case ${state} in
|
||||
yes)
|
||||
echo 0 | doas tee /sys/devices/platform/thinkpad_acpi/leds/platform::micmute/brightness
|
||||
pactl set-source-mute @DEFAULT_SOURCE@ 0 ;;
|
||||
no)
|
||||
echo 1 | doas tee /sys/devices/platform/thinkpad_acpi/leds/platform::micmute/brightness
|
||||
pactl set-source-mute @DEFAULT_SOURCE@ 1 ;;
|
||||
esac
|
||||
kill -44 $(pidof dwmblocks)
|
||||
else
|
||||
mic=$(pactl get-source-volume @DEFAULT_SOURCE@ | awk -F' / ' '{print $2}' | tr -d '%')
|
||||
[ $(pactl get-source-mute @DEFAULT_SOURCE@ | awk -F': ' '{print $2}') = yes ] || [ "$mic" -eq 0 ] && printf "^c#ffffff^^b#770000^ \uf131 ^d^"
|
||||
fi
|
4
_unused/dwmblocks/_scripts/sb-vol-out
Executable file
4
_unused/dwmblocks/_scripts/sb-vol-out
Executable file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
|
||||
vol=$(pactl get-sink-volume @DEFAULT_SINK@ | awk -F' / ' '{print $2}' | tr -d '%')
|
||||
[ $(pactl get-sink-mute @DEFAULT_SINK@ | awk -F': ' '{print $2}') = yes ] || [ "$vol" -eq 0 ] && printf "^c#ffffff^^b#770000^mute^d^" || printf "${vol}%%"
|
11
_unused/dwmblocks/blocks.def.h
Normal file
11
_unused/dwmblocks/blocks.def.h
Normal file
|
@ -0,0 +1,11 @@
|
|||
//Modify this file to change what commands output to your statusbar, and recompile using the make command.
|
||||
static const Block blocks[] = {
|
||||
/*Icon*/ /*Command*/ /*Update Interval*/ /*Update Signal*/
|
||||
{"Mem:", "free -h | awk '/^Mem/ { print $3\"/\"$2 }' | sed s/i//g", 30, 0},
|
||||
|
||||
{"", "date '+%b %d (%a) %I:%M%p'", 5, 0},
|
||||
};
|
||||
|
||||
//sets delimeter between status commands. NULL character ('\0') means no delimeter.
|
||||
static char delim[] = " | ";
|
||||
static unsigned int delimLen = 5;
|
15
_unused/dwmblocks/blocks.h
Normal file
15
_unused/dwmblocks/blocks.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
//Modify this file to change what commands output to your statusbar, and recompile using the make command.
|
||||
static const Block blocks[] = {
|
||||
/*Icon*/ /*Command*/ /*Update Interval*/ /*Update Signal*/
|
||||
{"", "sb-emerge", 1, 0 },
|
||||
{"", "sb-mail", 1, 0 },
|
||||
{"", "sb-vol-in", 1, 10 },
|
||||
{"\uf028 ", "sb-vol-out", 1, 12 },
|
||||
{"\uf1eb ", "sb-network", 1, 0 },
|
||||
{"\uf241 ", "sb-battery", 3, 0 },
|
||||
{"\uf073 ", "date '+[%d] %I:%M:%S %p |'", 1, 0 },
|
||||
};
|
||||
|
||||
//sets delimeter between status commands. NULL character ('\0') means no delimeter.
|
||||
static char delim[] = " ";
|
||||
static unsigned int delimLen = 3;
|
213
_unused/dwmblocks/dwmblocks.c
Normal file
213
_unused/dwmblocks/dwmblocks.c
Normal file
|
@ -0,0 +1,213 @@
|
|||
#include<stdlib.h>
|
||||
#include<stdio.h>
|
||||
#include<string.h>
|
||||
#include<unistd.h>
|
||||
#include<signal.h>
|
||||
#ifndef NO_X
|
||||
#include<X11/Xlib.h>
|
||||
#endif
|
||||
#ifdef __OpenBSD__
|
||||
#define SIGPLUS SIGUSR1+1
|
||||
#define SIGMINUS SIGUSR1-1
|
||||
#else
|
||||
#define SIGPLUS SIGRTMIN
|
||||
#define SIGMINUS SIGRTMIN
|
||||
#endif
|
||||
#define LENGTH(X) (sizeof(X) / sizeof (X[0]))
|
||||
#define CMDLENGTH 50
|
||||
#define MIN( a, b ) ( ( a < b) ? a : b )
|
||||
#define STATUSLENGTH (LENGTH(blocks) * CMDLENGTH + 1)
|
||||
|
||||
typedef struct {
|
||||
char* icon;
|
||||
char* command;
|
||||
unsigned int interval;
|
||||
unsigned int signal;
|
||||
} Block;
|
||||
#ifndef __OpenBSD__
|
||||
void dummysighandler(int num);
|
||||
#endif
|
||||
void sighandler(int num);
|
||||
void getcmds(int time);
|
||||
void getsigcmds(unsigned int signal);
|
||||
void setupsignals();
|
||||
void sighandler(int signum);
|
||||
int getstatus(char *str, char *last);
|
||||
void statusloop();
|
||||
void termhandler();
|
||||
void pstdout();
|
||||
#ifndef NO_X
|
||||
void setroot();
|
||||
static void (*writestatus) () = setroot;
|
||||
static int setupX();
|
||||
static Display *dpy;
|
||||
static int screen;
|
||||
static Window root;
|
||||
#else
|
||||
static void (*writestatus) () = pstdout;
|
||||
#endif
|
||||
|
||||
|
||||
#include "blocks.h"
|
||||
|
||||
static char statusbar[LENGTH(blocks)][CMDLENGTH] = {0};
|
||||
static char statusstr[2][STATUSLENGTH];
|
||||
static int statusContinue = 1;
|
||||
static int returnStatus = 0;
|
||||
|
||||
//opens process *cmd and stores output in *output
|
||||
void getcmd(const Block *block, char *output)
|
||||
{
|
||||
strcpy(output, block->icon);
|
||||
FILE *cmdf = popen(block->command, "r");
|
||||
if (!cmdf)
|
||||
return;
|
||||
int i = strlen(block->icon);
|
||||
fgets(output+i, CMDLENGTH-i-delimLen, cmdf);
|
||||
i = strlen(output);
|
||||
if (i == 0) {
|
||||
//return if block and command output are both empty
|
||||
pclose(cmdf);
|
||||
return;
|
||||
}
|
||||
if (delim[0] != '\0') {
|
||||
//only chop off newline if one is present at the end
|
||||
i = output[i-1] == '\n' ? i-1 : i;
|
||||
strncpy(output+i, delim, delimLen);
|
||||
}
|
||||
else
|
||||
output[i++] = '\0';
|
||||
pclose(cmdf);
|
||||
}
|
||||
|
||||
void getcmds(int time)
|
||||
{
|
||||
const Block* current;
|
||||
for (unsigned int i = 0; i < LENGTH(blocks); i++) {
|
||||
current = blocks + i;
|
||||
if ((current->interval != 0 && time % current->interval == 0) || time == -1)
|
||||
getcmd(current,statusbar[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void getsigcmds(unsigned int signal)
|
||||
{
|
||||
const Block *current;
|
||||
for (unsigned int i = 0; i < LENGTH(blocks); i++) {
|
||||
current = blocks + i;
|
||||
if (current->signal == signal)
|
||||
getcmd(current,statusbar[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void setupsignals()
|
||||
{
|
||||
#ifndef __OpenBSD__
|
||||
/* initialize all real time signals with dummy handler */
|
||||
for (int i = SIGRTMIN; i <= SIGRTMAX; i++)
|
||||
signal(i, dummysighandler);
|
||||
#endif
|
||||
|
||||
for (unsigned int i = 0; i < LENGTH(blocks); i++) {
|
||||
if (blocks[i].signal > 0)
|
||||
signal(SIGMINUS+blocks[i].signal, sighandler);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int getstatus(char *str, char *last)
|
||||
{
|
||||
strcpy(last, str);
|
||||
str[0] = '\0';
|
||||
for (unsigned int i = 0; i < LENGTH(blocks); i++)
|
||||
strcat(str, statusbar[i]);
|
||||
str[strlen(str)-strlen(delim)] = '\0';
|
||||
return strcmp(str, last);//0 if they are the same
|
||||
}
|
||||
|
||||
#ifndef NO_X
|
||||
void setroot()
|
||||
{
|
||||
if (!getstatus(statusstr[0], statusstr[1]))//Only set root if text has changed.
|
||||
return;
|
||||
XStoreName(dpy, root, statusstr[0]);
|
||||
XFlush(dpy);
|
||||
}
|
||||
|
||||
int setupX()
|
||||
{
|
||||
dpy = XOpenDisplay(NULL);
|
||||
if (!dpy) {
|
||||
fprintf(stderr, "dwmblocks: Failed to open display\n");
|
||||
return 0;
|
||||
}
|
||||
screen = DefaultScreen(dpy);
|
||||
root = RootWindow(dpy, screen);
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
void pstdout()
|
||||
{
|
||||
if (!getstatus(statusstr[0], statusstr[1]))//Only write out if text has changed.
|
||||
return;
|
||||
printf("%s\n",statusstr[0]);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
|
||||
void statusloop()
|
||||
{
|
||||
setupsignals();
|
||||
int i = 0;
|
||||
getcmds(-1);
|
||||
while (1) {
|
||||
getcmds(i++);
|
||||
writestatus();
|
||||
if (!statusContinue)
|
||||
break;
|
||||
sleep(1.0);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef __OpenBSD__
|
||||
/* this signal handler should do nothing */
|
||||
void dummysighandler(int signum)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
void sighandler(int signum)
|
||||
{
|
||||
getsigcmds(signum-SIGPLUS);
|
||||
writestatus();
|
||||
}
|
||||
|
||||
void termhandler()
|
||||
{
|
||||
statusContinue = 0;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
for (int i = 0; i < argc; i++) {//Handle command line arguments
|
||||
if (!strcmp("-d",argv[i]))
|
||||
strncpy(delim, argv[++i], delimLen);
|
||||
else if (!strcmp("-p",argv[i]))
|
||||
writestatus = pstdout;
|
||||
}
|
||||
#ifndef NO_X
|
||||
if (!setupX())
|
||||
return 1;
|
||||
#endif
|
||||
delimLen = MIN(delimLen, strlen(delim));
|
||||
delim[delimLen++] = '\0';
|
||||
signal(SIGTERM, termhandler);
|
||||
signal(SIGINT, termhandler);
|
||||
statusloop();
|
||||
#ifndef NO_X
|
||||
XCloseDisplay(dpy);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
7
_unused/dwmblocks/install-scripts.sh
Normal file
7
_unused/dwmblocks/install-scripts.sh
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
mkdir -p ~/.local/bin
|
||||
|
||||
for i in _scripts/*; do
|
||||
ln -sf $(pwd)/$i ~/.local/bin
|
||||
done
|
Loading…
Add table
Add a link
Reference in a new issue