diff --git a/i3/config b/i3/config index 24292c5a310f4c7f674cad3ee586ac2a8ca8f465..76036a25b00cdbe7d7de500dbb0bcb4dda142d09 100644 --- a/i3/config +++ b/i3/config @@ -204,7 +204,7 @@ bindsym $mod+r mode "resize" # Start i3bar to display a workspace bar (plus the system information i3status # finds out, if available) bar { - status_command "~/.config/i3/status.out" + status_command "~/.config/i3/status.out 2>~/.status.log" } exec --no-startup-id synclient HorizEdgeScroll=1 VertEdgeScroll=1 VertScrollDelta=-111 @@ -333,6 +333,8 @@ mode "System modifikator" bindsym bracketright exec "notify-send \\"$(lsblk)\\"" bindsym Shift+bracketright mode "default"; exec "gksudo -g gparted" bindsym Ctrl+bracketright mode "default"; exec "gksudo -g gnome-disks" + + bindcode 94 exec --no-startup-id "osdd-run & sleep 0.1;osdc --color=red RESTART" } bindcode 121 exec "echo $(( 1 - $(cat ~/.config/micloop/mute) )) > ~/.config/micloop/mute;pacmd set-sink-input-mute $(cat ~/.config/micloop/id) $(cat ~/.config/micloop/mute) ; notify-send 'loopmic mute' $(cat ~/.config/micloop/mute) -h string:x-canonical-private-synchronous:anything" @@ -377,4 +379,10 @@ bindsym $mod+Shift+o exec --no-startup-id killall -3 mate-session; exec --no-sta exec "setxkbmap us,cz -variant ,ucw -option grp:caps_switch" -exec "osdd-run" +exec "osd-run" + +bindcode 94 exec "osdc --duration=1 \\"\\"" +bindcode Shift+94 exec "osdc --skip=1 --log=0 --duration=1 \\"\\"" +bindcode Ctrl+94 exec "osd-clock" +bindcode Ctrl+Shift+94 exec "terminal -e bash -i -c \\"cat ~/.osdd_log;read\\"" +bindcode $mod+94 exec "terminal" diff --git a/i3/i3status.conf b/i3/i3status.conf new file mode 100644 index 0000000000000000000000000000000000000000..67073ec001be9ce0662160c0803f3bc0ef1384f4 --- /dev/null +++ b/i3/i3status.conf @@ -0,0 +1,52 @@ +# i3status configuration file. +# see "man i3status" for documentation. + +# It is important that this file is edited as UTF-8. +# The following line should contain a sharp s: +# ß +# If the above line is not correctly displayed, fix your editor first! + +general { + output_format = "i3bar" + colors = true + interval = 1 +} + +order += "wireless _first_" +order += "ethernet _first_" +order += "battery all" +order += "load" +order += "memory" +order += "tztime local" + +wireless _first_ { + format_up = "W: (%quality at %essid) %ip" + format_down = "W: down" +} + +ethernet _first_ { + format_up = "E: %ip (%speed)" + format_down = "E: down" +} + +battery all { + format = "%status %percentage %remaining" +} + +disk "/" { + format = "%avail" +} + +load { + format = "%1min L" +} + +memory { + format = "%used X %available" + threshold_degraded = "1G" + format_degraded = "MEMORY < %available" +} + +tztime local { + format = "%Y-%m-%d %H:%M:%S" +} diff --git a/i3/init.sh b/i3/init.sh index 78e10c8c6e85d96f5d91f3284fe6e65a2cd5e4e2..9ab41e59c89386fd22ed4c65f2168d66c0381d09 100755 --- a/i3/init.sh +++ b/i3/init.sh @@ -5,7 +5,9 @@ mkdir -p ~/.config/i3 ln -sr config ~/.config/i3/config ln -sr toggle-border ~/.config/i3/i3-toggle-border ln -sr kill ~/.config/i3/i3-kill +ln -sr i3status.conf ~/.config/i3/ chmod o+x ~/.config/i3/i3-* +g++ status.cpp -o ~/.config/i3/status.out if [ "$1" == "mint" ]; then diff --git a/i3/status.cpp b/i3/status.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4c0c77c64956b80e41e3f2687cbcc0d52f8ebce9 --- /dev/null +++ b/i3/status.cpp @@ -0,0 +1,100 @@ +#include<bits/stdc++.h> +#include<unistd.h> +using namespace std; +#ifdef DEB +#define D if(1) +#else +#define D if(0) +#endif + +#define fo(a,b) for(int a=0;a<(b);++a) +using ll = long long; + +const int LEN = 5000; +ll t; + +#define TIME_P "%lld%s" +#define TIME(a) ((a)<180?a:(a)/60<180?a/60:a/60/60),((a)<180?"s":(a)/60<180?"min":"h") + +#define ERR(a,b) {sprintf(out,"{\"name\":\"error\",\"color\":\"#FF0000\",\"full_text\":\"%s\"}" b,a);return;} +void loadOsdd(char * out) +{ + *out=0; + static char color[LEN],line[LEN]; + FILE * f = fopen(".osdd_last","r"); + if(!f) ERR("Open f",","); + ll ti; + fscanf(f,"%lld",&ti); + ti = t-ti; + for(int i=0;fscanf(f," %s%[^\n]",color,line)==2;i++) + { + if(line[1]) + { + out+=sprintf(out,"{\"name\":\"osdd%d\",\"color\":\"#%s\",\"full_text\":\"",i,color); + if(!i) + out+=sprintf(out,"[" TIME_P "] ",TIME(ti)); + out+=sprintf(out,"%s\"},",line+1); + } + + } + fclose(f); +} +void loadMail(char * out) +{ + out[0]=0; + FILE * f = fopen(".cm","r"); + if(!f) ERR("Open f",); + ll lastUpTime=0; + int newMails=0; + if(fscanf(f,"%lld%d",&lastUpTime,&newMails)!=2) return; + ll delay = t-lastUpTime; + if(-5 < delay && delay > 30) + if(newMails) + sprintf(out,"{\"name\":\"mail\",\"color\":\"#%s\",\"full_text\":\"NO CONNECTION " TIME_P " [%d]\"}",t%2?"FF0000":"3333FF",TIME(delay),newMails); + else + sprintf(out,"{\"name\":\"mail\",\"color\":\"#FF0000\",\"full_text\":\"NO CONNECTION " TIME_P "\"}",TIME(delay)); + else + if(newMails) + sprintf(out,"{\"name\":\"mail\",\"color\":\"#%s\",\"full_text\":\"[%d NEW]\"}",t%2?"FF7000":"3333FF",newMails); + else + sprintf(out,"{\"name\":\"mail\",\"color\":\"#00FF00\",\"full_text\":\"OK\"}"); + fclose(f); + +} +char i3status_aloc[LEN]; +char mail[LEN]; +char osdd[LEN]; + +int main() +{ + assert(chdir(getenv("HOME"))==0); + FILE * f = popen("i3status -c ~/.config/i3/i3status.conf","r"); + char * i3status; + while(fgets(i3status=i3status_aloc,LEN-2,f)) + { + { + ll lastt = t; + t=time(0); + if(t==lastt) t++; + + } + if(!memcmp(i3status,"{\"ver",sizeof("{\"ver")-1)||!strcmp(i3status,"[\n")||!strcmp(i3status,"]\n")) + { + printf("%s",i3status); + fprintf(stderr,"%s",i3status); + } + else + { + if(i3status[0]==',') {putc(*i3status,stderr);putchar(i3status++[0]);} + if(i3status[0]=='[') {putc(*i3status,stderr);putchar(i3status++[0]);} + loadMail(mail); + loadOsdd(osdd); + printf("%s%s,%s",osdd,mail,i3status); + fprintf(stderr,"%s%s,%s",osdd,mail,i3status); + } + fflush(stdout); + fflush(stderr); + } + return 0; +} +