mirror of
https://github.com/frebib/dotfiles.git
synced 2024-06-14 12:57:23 +00:00
polybar: replace i3 bar with polybar
This commit is contained in:
parent
1a6c9dedc0
commit
51c91b4803
@ -33,7 +33,7 @@ alpha-step = 0.02; # XRender backend: Step size for alpha pictures. Increasin
|
||||
blur-method = "dual_kawase";
|
||||
blur-strength = 5;
|
||||
blur-background = true; # Blur background of transparent windows.
|
||||
blur-background-exclude = [ "class_g = 'Peek'", "class_g = 'Onboard'", "class_g = 'slop'" ];
|
||||
blur-background-exclude = [ "class_g = 'Peek'", "class_g = 'Onboard'", "class_g = 'slop'", "class_g = 'Polybar'" ];
|
||||
blur-background-frame = true; # Blur background of opaque windows with transparent
|
||||
# frames as well.
|
||||
blur-background-fixed = false; # Do not let blur radius adjust based on window opacity.
|
||||
|
@ -1,90 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Copyright (C) 2012 Stefan Breunig <stefan+measure-net-speed@mathphys.fsk.uni-heidelberg.de>
|
||||
# Copyright (C) 2014 kaueraal
|
||||
# Copyright (C) 2015 Thiago Perrotta <perrotta dot thiago at poli dot ufrj dot br>
|
||||
|
||||
# This program 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Use the provided interface, otherwise the device used for the default route.
|
||||
if [[ -n $BLOCK_INSTANCE ]]; then
|
||||
INTERFACE=$BLOCK_INSTANCE
|
||||
else
|
||||
INTERFACE=$(ip route | awk '/^default/ { print $5 ; exit }')
|
||||
fi
|
||||
|
||||
# Issue #36 compliant.
|
||||
if ! [ -e "/sys/class/net/${INTERFACE}/operstate" ] || ! [ "`cat /sys/class/net/${INTERFACE}/operstate`" = "up" ]
|
||||
then
|
||||
echo "$INTERFACE down"
|
||||
echo "$INTERFACE down"
|
||||
echo "#FF0000"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# path to store the old results in
|
||||
path="/dev/shm/$(basename $0)-${INTERFACE}"
|
||||
|
||||
# grabbing data for each adapter.
|
||||
read rx < "/sys/class/net/${INTERFACE}/statistics/rx_bytes"
|
||||
read tx < "/sys/class/net/${INTERFACE}/statistics/tx_bytes"
|
||||
|
||||
# get time
|
||||
time=$(date +%s)
|
||||
|
||||
# write current data if file does not exist. Do not exit, this will cause
|
||||
# problems if this file is sourced instead of executed as another process.
|
||||
if ! [[ -f "${path}" ]]; then
|
||||
echo "${time} ${rx} ${tx}" > "${path}"
|
||||
chmod 0666 "${path}"
|
||||
fi
|
||||
|
||||
# read previous state and update data storage
|
||||
read old < "${path}"
|
||||
echo "${time} ${rx} ${tx}" > "${path}"
|
||||
|
||||
# parse old data and calc time passed
|
||||
old=(${old//;/ })
|
||||
time_diff=$(( $time - ${old[0]} ))
|
||||
|
||||
# sanity check: has a positive amount of time passed
|
||||
[[ "${time_diff}" -gt 0 ]] || exit
|
||||
|
||||
# calc bytes transferred, and their rate in byte/s
|
||||
rx_diff=$(( $rx - ${old[1]} ))
|
||||
tx_diff=$(( $tx - ${old[2]} ))
|
||||
rx_rate=$(( $rx_diff / $time_diff ))
|
||||
tx_rate=$(( $tx_diff / $time_diff ))
|
||||
|
||||
# shift by 10 bytes to get KiB/s. If the value is larger than
|
||||
# 1024^2 = 1048576, then display MiB/s instead
|
||||
|
||||
# incoming
|
||||
echo -n " "
|
||||
rx_kib=$(( $rx_rate >> 10 ))
|
||||
if [[ "$rx_rate" -gt 1048576 ]]; then
|
||||
printf '%sk' "`echo "scale=1; $rx_kib / 1024" | bc`"
|
||||
else
|
||||
echo -n "${rx_kib}k"
|
||||
fi
|
||||
|
||||
echo -n " "
|
||||
|
||||
# outgoing
|
||||
echo -n " "
|
||||
tx_kib=$(( $tx_rate >> 10 ))
|
||||
if [[ "$tx_rate" -gt 1048576 ]]; then
|
||||
printf '%sm' "`echo "scale=1; $tx_kib / 1024" | bc`"
|
||||
else
|
||||
echo -n "${tx_kib}k"
|
||||
fi
|
@ -1,97 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# Copyright 2014 Pierre Mavro <deimos@deimos.fr>
|
||||
# Copyright 2014 Vivien Didelot <vivien@didelot.org>
|
||||
#
|
||||
# Licensed under the terms of the GNU GPL v3, or any later version.
|
||||
#
|
||||
# This script is meant to use with i3blocks. It parses the output of the "acpi"
|
||||
# command (often provided by a package of the same name) to read the status of
|
||||
# the battery, and eventually its remaining time (to full charge or discharge).
|
||||
#
|
||||
# The color will gradually change for a percentage below 85%, and the urgency
|
||||
# (exit code 33) is set if there is less that 5% remaining.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Switch;
|
||||
|
||||
my $acpi;
|
||||
my $status;
|
||||
my $percent;
|
||||
my $hours = -1;
|
||||
my $mins;
|
||||
my $full_text;
|
||||
my $short_text;
|
||||
my $bat_number = $ENV{BLOCK_INSTANCE} || 0;
|
||||
|
||||
# read the first line of the "acpi" command output
|
||||
open (ACPI, "acpi -b | grep 'Battery $bat_number' |") or die;
|
||||
$acpi = <ACPI>;
|
||||
close(ACPI);
|
||||
|
||||
# fail on unexpected output
|
||||
if ($acpi !~ /: (\w+), (\d+)%/) {
|
||||
die "$acpi\n";
|
||||
}
|
||||
$status = $1;
|
||||
$percent = $2;
|
||||
|
||||
if ($acpi =~ /, (\d+):(\d+)/) {
|
||||
$hours = $1;
|
||||
$mins = $2;
|
||||
}
|
||||
|
||||
if ($status eq 'Discharging') {
|
||||
if ($percent <= 10) {
|
||||
$full_text = "";
|
||||
} elsif ($percent <= 40) {
|
||||
$full_text = "";
|
||||
} elsif ($percent <= 75) {
|
||||
$full_text = "";
|
||||
} else {
|
||||
$full_text = "";
|
||||
}
|
||||
|
||||
} elsif ($status eq 'Charging') {
|
||||
$full_text = '';
|
||||
} else {
|
||||
$full_text = '';
|
||||
}
|
||||
|
||||
$full_text .= " $percent%";
|
||||
$short_text = $full_text;
|
||||
|
||||
switch($ENV{BLOCK_BUTTON} || 0) {
|
||||
case "1" {
|
||||
if ($hours lt 0) {
|
||||
$full_text .= " Charged";
|
||||
} else {
|
||||
$full_text .= " ($hours:$mins";
|
||||
if ($status eq 'Discharging') {
|
||||
$full_text .= ")";
|
||||
} else {
|
||||
$full_text .= " until full)";
|
||||
}
|
||||
}
|
||||
}
|
||||
case "4" { system("light -U -l 1") }
|
||||
case "5" { system("light -A -l 1") }
|
||||
}
|
||||
|
||||
|
||||
# print text
|
||||
print "$full_text\n";
|
||||
print "$short_text\n";
|
||||
|
||||
# consider color and urgent flag only on discharge
|
||||
if ($status eq 'Discharging') {
|
||||
|
||||
if ($percent < 20) {
|
||||
print "#FF0000\n";
|
||||
} elsif ($percent < 40) {
|
||||
print "#FFCB00\n";
|
||||
}
|
||||
}
|
||||
|
||||
exit(0);
|
@ -1,5 +0,0 @@
|
||||
case $BLOCK_BUTTON in
|
||||
1) printf " "$(date '+%d/%m/%y') ; exit ;;
|
||||
2|3) i3-sensible-terminal -r i3blocks-clock-term --geometry 68x35 -e "$SHELL -c \"cal -y $(date +'%Y');$SHELL\"" &>/dev/null & ;;
|
||||
*) printf " "$(date '+%H:%M')
|
||||
esac
|
@ -1,68 +0,0 @@
|
||||
# i3blocks config file
|
||||
#
|
||||
# Please see man i3blocks for a complete reference!
|
||||
# The man page is also hosted at http://vivien.github.io/i3blocks
|
||||
#
|
||||
# List of valid properties:
|
||||
#
|
||||
# align
|
||||
# color
|
||||
# command
|
||||
# full_text
|
||||
# instance
|
||||
# interval
|
||||
# label
|
||||
# min_width
|
||||
# name
|
||||
# separator
|
||||
# separator_block_width
|
||||
# short_text
|
||||
# signal
|
||||
# urgent
|
||||
|
||||
# Global properties
|
||||
#
|
||||
# The top properties below are applied to every block, but can be overridden.
|
||||
# Each block command defaults to the script name to avoid boilerplate.
|
||||
command=~/.config/i3/blocks/$BLOCK_NAME
|
||||
markup=none
|
||||
|
||||
#full_text=
|
||||
align=center
|
||||
color=#F3F4F5
|
||||
separator=false
|
||||
separator_block_width=14
|
||||
|
||||
[volume]
|
||||
interval=persist
|
||||
signal=10
|
||||
|
||||
[iface]
|
||||
label=
|
||||
interval=60
|
||||
signal=15
|
||||
|
||||
[updates]
|
||||
label=
|
||||
interval=600
|
||||
signal=5
|
||||
|
||||
[cpu_usage]
|
||||
label=
|
||||
interval=persist
|
||||
|
||||
[memory]
|
||||
label=
|
||||
interval=10
|
||||
|
||||
[temperature]
|
||||
label=
|
||||
interval=5
|
||||
|
||||
[keyboard]
|
||||
label=
|
||||
interval=30
|
||||
|
||||
[clock]
|
||||
interval=5
|
||||
min_width=" 00:00"
|
@ -1,31 +0,0 @@
|
||||
#!/bin/bash
|
||||
# by Paul Colby (http://colby.id.au), no rights reserved ;)
|
||||
# https://github.com/Leo-G/DevopsWiki/wiki/How-Linux-CPU-Usage-Time-and-Percentage-is-calculated
|
||||
|
||||
PREV_TOTAL=0
|
||||
PREV_IDLE=0
|
||||
|
||||
while true; do
|
||||
# Get the total CPU statistics, discarding the 'cpu ' prefix.
|
||||
CPU=(`sed -n 's/^cpu\s//p' /proc/stat`)
|
||||
IDLE=${CPU[3]} # Just the idle CPU time.
|
||||
|
||||
# Calculate the total CPU time.
|
||||
TOTAL=0
|
||||
for VALUE in "${CPU[@]}"; do
|
||||
let "TOTAL=$TOTAL+$VALUE"
|
||||
done
|
||||
|
||||
# Calculate the CPU usage since we last checked.
|
||||
let "DIFF_IDLE=$IDLE-$PREV_IDLE"
|
||||
let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
|
||||
let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
|
||||
echo -e "$DIFF_USAGE%\n$DIFF_USAGE%"
|
||||
|
||||
# Remember the total and idle CPU times for the next check.
|
||||
PREV_TOTAL="$TOTAL"
|
||||
PREV_IDLE="$IDLE"
|
||||
|
||||
# Wait before checking again.
|
||||
sleep 1
|
||||
done
|
@ -1,41 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
|
||||
|
||||
# This program 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
DIR="${BLOCK_INSTANCE:-$HOME}"
|
||||
ALERT_LOW="${1:-10}" # color will turn red under this value (default: 10%)
|
||||
|
||||
df -h -P -l "$DIR" | awk -v alert_low=$ALERT_LOW '
|
||||
/\/.*/ {
|
||||
# full text
|
||||
print $4
|
||||
|
||||
# short text
|
||||
print $4
|
||||
|
||||
use=$5
|
||||
|
||||
# no need to continue parsing
|
||||
exit 0
|
||||
}
|
||||
|
||||
END {
|
||||
gsub(/%$/,"",use)
|
||||
if (100 - use < alert_low) {
|
||||
# color
|
||||
print "#FF0000"
|
||||
}
|
||||
}
|
||||
'
|
@ -1,62 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
|
||||
# Copyright (C) 2014 Alexander Keller <github@nycroth.com>
|
||||
|
||||
# This program 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
# Use the provided interface, otherwise the device used for the default route.
|
||||
if [[ -n $BLOCK_INSTANCE ]]; then
|
||||
IF=$BLOCK_INSTANCE
|
||||
else
|
||||
IF=$(ip route | awk '/^default/ { print $5 ; exit }')
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
# As per #36 -- It is transparent: e.g. if the machine has no battery or wireless
|
||||
# connection (think desktop), the corresponding block should not be displayed.
|
||||
[[ ! -d /sys/class/net/${IF} ]] && exit
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
if [[ -z $IF ]] || [[ "$(cat /sys/class/net/$IF/operstate)" = 'down' ]]; then
|
||||
echo down # full text
|
||||
echo down # short text
|
||||
echo \#FF0000 # color
|
||||
exit
|
||||
fi
|
||||
|
||||
case $1 in
|
||||
-4) AF=inet ;;
|
||||
-6) AF=inet6 ;;
|
||||
*) AF=inet6? ;;
|
||||
esac
|
||||
|
||||
# if no interface is found, use the first device with a global scope
|
||||
LOCIP=$(ip addr show $IF | perl -n -e "/$AF ([^\/]+).* scope global/ && print \$1 and exit")
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
case $BLOCK_BUTTON in
|
||||
1) curl -s https://api.ipify.org;
|
||||
break;;
|
||||
2) curl -s https://api.ipify.org | tee >(xclip -i);
|
||||
break;;
|
||||
0|3) echo "$LOCIP" | tee >(xclip -i);
|
||||
break;;
|
||||
*) echo "$LOCIP"
|
||||
break;;
|
||||
esac
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
[[ $BLOCK_BUTTON -eq 1 ]] && `$DOTFILES/scripts/togglekeyboard`
|
||||
|
||||
layout=$(setxkbmap -query | grep 'layout:' | awk '{print $2}')
|
||||
variant=$(setxkbmap -query | grep 'variant:' | awk '{print $2}')
|
||||
|
||||
short=`([ "$variant" ] && echo $variant || echo $layout) | cut -c1-2`
|
||||
|
||||
echo -e "$short\n$short" | awk '{print toupper($0)}'
|
@ -1,70 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# Copyright 2014 Marcelo Cerri <mhcerri at gmail dot com>
|
||||
#
|
||||
# This program 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use Getopt::Long;
|
||||
use File::Basename;
|
||||
|
||||
# Default values
|
||||
my $indicator = $ENV{BLOCK_INSTANCE} || "CAPS";
|
||||
my $color_on = "#00FF00";
|
||||
my $color_off = "#222222";
|
||||
|
||||
sub help {
|
||||
my $program = basename($0);
|
||||
printf "Usage: %s [-c <color on>] [-C <color off>]\n", $program;
|
||||
printf " -c <color on>: hex color to use when indicator is on\n";
|
||||
printf " -C <color off>: hex color to use when indicator is off\n";
|
||||
printf "\n";
|
||||
printf "Note: environment variable \$BLOCK_INSTANCE should be one of:\n";
|
||||
printf " CAPS, NUM (default is CAPS).\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
Getopt::Long::config qw(no_ignore_case);
|
||||
GetOptions("help|h" => \&help,
|
||||
"c=s" => \$color_on,
|
||||
"C=s" => \$color_off) or exit 1;
|
||||
|
||||
# Key mapping
|
||||
my %indicators = (
|
||||
CAPS => 0x00000001,
|
||||
NUM => 0x00000002,
|
||||
);
|
||||
|
||||
# Retrieve key flags
|
||||
my $mask = 0;
|
||||
open(XSET, "xset -q |") or die;
|
||||
while (<XSET>) {
|
||||
if (/LED mask:\s*([0-9]+)/) {
|
||||
$mask = $1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
close(XSET);
|
||||
|
||||
# Output
|
||||
printf "%s\n", $indicator;
|
||||
printf "%s\n", $indicator;
|
||||
if (($indicators{$indicator} || 0) & $mask) {
|
||||
printf "%s\n", $color_on;
|
||||
} else {
|
||||
printf "%s\n", $color_off;
|
||||
}
|
||||
exit 0
|
@ -1,34 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
|
||||
|
||||
# This program 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
load="$(cut -d ' ' -f1 /proc/loadavg)"
|
||||
cpus="$(nproc)"
|
||||
|
||||
# full text
|
||||
echo "$load"
|
||||
|
||||
# short text
|
||||
echo "$load"
|
||||
|
||||
# color if load is too high
|
||||
awk -v cpus=$cpus -v cpuload=$load '
|
||||
BEGIN {
|
||||
if (cpus <= cpuload) {
|
||||
print "#FF0000";
|
||||
exit 33;
|
||||
}
|
||||
}
|
||||
'
|
@ -1,76 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
# Copyright (C) 2014 Tony Crisci <tony@dubstepdish.com>
|
||||
|
||||
# This program 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Requires playerctl binary to be in your path (except cmus)
|
||||
# See: https://github.com/acrisci/playerctl
|
||||
|
||||
# Set instance=NAME in the i3blocks configuration to specify a music player
|
||||
# (playerctl will attempt to connect to org.mpris.MediaPlayer2.[NAME] on your
|
||||
# DBus session).
|
||||
|
||||
use Env qw(BLOCK_INSTANCE);
|
||||
|
||||
my @metadata = ();
|
||||
my $player_arg = "";
|
||||
|
||||
if ($BLOCK_INSTANCE) {
|
||||
$player_arg = "--player='$BLOCK_INSTANCE'";
|
||||
}
|
||||
|
||||
if ($ENV{'BLOCK_BUTTON'} == 1) {
|
||||
system("playerctl $player_arg previous");
|
||||
} elsif ($ENV{'BLOCK_BUTTON'} == 2) {
|
||||
system("playerctl $player_arg play-pause");
|
||||
} elsif ($ENV{'BLOCK_BUTTON'} == 3) {
|
||||
system("playerctl $player_arg next");
|
||||
}
|
||||
|
||||
if ($player_arg eq '' or $player_arg =~ /cmus$/) {
|
||||
# try cmus first
|
||||
my @cmus = split /^/, qx(cmus-remote -Q);
|
||||
if ($? == 0) {
|
||||
foreach my $line (@cmus) {
|
||||
my @data = split /\s/, $line;
|
||||
if (shift @data eq 'tag') {
|
||||
my $key = shift @data;
|
||||
my $value = join ' ', @data;
|
||||
|
||||
@metadata[0] = $value if $key eq 'artist';
|
||||
@metadata[1] = $value if $key eq 'title';
|
||||
}
|
||||
}
|
||||
|
||||
if (@metadata) {
|
||||
# metadata found so we are done
|
||||
print(join ' - ', @metadata);
|
||||
exit 0;
|
||||
}
|
||||
}
|
||||
|
||||
# if cmus was given, we are done
|
||||
exit 0 unless $player_arg eq '';
|
||||
}
|
||||
|
||||
my $artist = qx(playerctl $player_arg metadata artist);
|
||||
# exit status will be nonzero when playerctl cannot find your player
|
||||
exit(0) if $?;
|
||||
push(@metadata, $artist) if $artist;
|
||||
|
||||
my $title = qx(playerctl $player_arg metadata title);
|
||||
exit(0) if $?;
|
||||
push(@metadata, $title) if $title;
|
||||
|
||||
print(join(" - ", @metadata)) if @metadata;
|
@ -1,65 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
|
||||
|
||||
# This program 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
TYPE="${BLOCK_INSTANCE:-mem}"
|
||||
|
||||
if [ ${BLOCK_BUTTON--1} -gt 0 ]; then
|
||||
i3-sensible-terminal -r floating-term --geometry 100x54 -e 'top -d 0.1'
|
||||
fi
|
||||
|
||||
awk -v type=$TYPE '
|
||||
BEGIN {
|
||||
swap_total=1
|
||||
mem_total=1
|
||||
}
|
||||
/^MemTotal:/ {
|
||||
mem_total=$2
|
||||
}
|
||||
/^MemFree:/ {
|
||||
mem_free=$2
|
||||
}
|
||||
/^Buffers:/ {
|
||||
mem_free+=$2
|
||||
}
|
||||
/^Cached:/ {
|
||||
mem_free+=$2
|
||||
}
|
||||
/^SwapTotal:/ {
|
||||
swap_total=$2
|
||||
}
|
||||
/^SwapFree:/ {
|
||||
swap_free=$2
|
||||
}
|
||||
END {
|
||||
if (type == "swap") {
|
||||
swap_perc = (swap_total - swap_free) / swap_total * 100
|
||||
printf("%.0f%\n", swap_perc)
|
||||
printf("%.0f%\n", swap_perc)
|
||||
perc = swap_perc
|
||||
}
|
||||
else{
|
||||
mem_perc = (mem_total - mem_free) / mem_total * 100
|
||||
printf("%.0f%\n", mem_perc)
|
||||
printf("%.0f%\n", mem_perc)
|
||||
perc = mem_perc
|
||||
}
|
||||
|
||||
if (perc > 80)
|
||||
print "#FFCB00"
|
||||
else if (perc > 60)
|
||||
print "#FFCB00"
|
||||
}
|
||||
' /proc/meminfo
|
@ -1,149 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
# Made by Pierre Mavro/Deimosfr <deimos@deimos.fr>
|
||||
# Licensed under the terms of the GNU GPL v3, or any later version.
|
||||
# Version: 0.2
|
||||
|
||||
# Usage:
|
||||
# 1. The configuration name of OpenVPN should be familiar for you (home,work...)
|
||||
# 2. The device name in your configuration file should be fully named (tun0,tap1...not only tun or tap)
|
||||
# 3. When you launch one or multiple OpenVPN connexion, be sure the PID file is written in the correct folder (ex: --writepid /run/openvpn/home.pid)
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use Getopt::Long;
|
||||
|
||||
my $openvpn_enabled='/dev/shm/openvpn_i3blocks_enabled';
|
||||
my $openvpn_disabled='/dev/shm/openvpn_i3blocks_disabled';
|
||||
|
||||
# Print output
|
||||
sub print_output {
|
||||
my $ref_pid_files = shift;
|
||||
my @pid_files = @$ref_pid_files;
|
||||
my $change=0;
|
||||
|
||||
# Total pid files
|
||||
my $total_pid = @pid_files;
|
||||
if ($total_pid == 0) {
|
||||
print "VPN: down\n"x2;
|
||||
# Delete OpenVPN i3blocks temp files
|
||||
if (-f $openvpn_enabled) {
|
||||
unlink $openvpn_enabled or die "Can't delete $openvpn_enabled\n";
|
||||
# Colorize if VPN has just went down
|
||||
print '#FF0000\n';
|
||||
}
|
||||
unless (-f $openvpn_disabled) {
|
||||
open(my $shm, '>', $openvpn_disabled) or die "Can't write $openvpn_disabled\n";
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
# Check if interface device is present
|
||||
my $vpn_found=0;
|
||||
my $pid;
|
||||
my $cmd_line;
|
||||
my @config_name;
|
||||
my @config_path;
|
||||
my $interface;
|
||||
my $current_config_path;
|
||||
my $current_config_name;
|
||||
foreach (@pid_files) {
|
||||
# Get current PID
|
||||
$pid=0;
|
||||
open(PID, '<', $_);
|
||||
while(<PID>) {
|
||||
chomp $_;
|
||||
$pid = $_;
|
||||
}
|
||||
close(PID);
|
||||
# Check if PID has been found
|
||||
if ($pid ==0) {
|
||||
print "Can't get PID $_: $!\n";
|
||||
}
|
||||
|
||||
# Check if PID is still alive
|
||||
$cmd_line='/proc/'.$pid.'/cmdline';
|
||||
if (-f $cmd_line) {
|
||||
# Get config name
|
||||
open(CMD_LINE, '<', $cmd_line);
|
||||
while(<CMD_LINE>) {
|
||||
chomp $_;
|
||||
if ($_ =~ /--config\s*(.*\.conf)/) {
|
||||
# Get interface from config file
|
||||
$current_config_path = $1;
|
||||
# Remove unwanted escape chars
|
||||
$current_config_path =~ s/\x{00}//g;
|
||||
$interface = 'null';
|
||||
# Get configuration name
|
||||
if ($current_config_path =~ /(\w+).conf/) {
|
||||
$current_config_name=$1;
|
||||
} else {
|
||||
$current_config_name='unknow';
|
||||
}
|
||||
# Get OpenVPN interface device name
|
||||
open(CONFIG, '<', $current_config_path) or die "Can't read config file '$current_config_path': $!\n";
|
||||
while(<CONFIG>) {
|
||||
chomp $_;
|
||||
if ($_ =~ /dev\s+(\w+)/) {
|
||||
$interface=$1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
close(CONFIG);
|
||||
# check if interface exist
|
||||
unless ($interface eq 'null') {
|
||||
if (-d "/sys/class/net/$interface") {
|
||||
push @config_name, $current_config_name;
|
||||
$vpn_found=1;
|
||||
# Write enabled file
|
||||
unless (-f $openvpn_enabled) {
|
||||
open(my $shm, '>', $openvpn_enabled) or die "Can't write $openvpn_enabled\n";
|
||||
$change=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
close(CMD_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
# Check if PID found
|
||||
my $names;
|
||||
my $short_status;
|
||||
if ($vpn_found == 1) {
|
||||
$names = join('/', @config_name);
|
||||
$short_status='up';
|
||||
} else {
|
||||
$short_status='down';
|
||||
$names = $short_status;
|
||||
}
|
||||
|
||||
print "VPN: $names\n";
|
||||
print "VPN: $short_status\n";
|
||||
|
||||
# Print color if there were changes
|
||||
print "#00FF00\n" if ($change == 1);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
sub check_opts {
|
||||
# Vars
|
||||
my @pid_file=glob '/run/openvpn/*.pid';
|
||||
|
||||
# Set options
|
||||
GetOptions( "help|h" => \&help,
|
||||
"p=s" => \@pid_file);
|
||||
|
||||
print_output(\@pid_file);
|
||||
}
|
||||
|
||||
sub help {
|
||||
print "Usage: openvpn [-d pid folder files]\n";
|
||||
print "-d : pid folder files (default /run/openvpn/*.pid)\n";
|
||||
print "Note: devices in configuration file should be named with their number (ex: tun0, tap1)\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
&check_opts;
|
@ -1,69 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
# Copyright 2014 Pierre Mavro <deimos@deimos.fr>
|
||||
# Copyright 2014 Vivien Didelot <vivien@didelot.org>
|
||||
# Copyright 2014 Andreas Guldstrand <andreas.guldstrand@gmail.com>
|
||||
# Copyright 2014 Benjamin Chretien <chretien at lirmm dot fr>
|
||||
|
||||
# This program 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use Getopt::Long;
|
||||
|
||||
binmode(STDOUT, ":utf8");
|
||||
|
||||
# default values
|
||||
my $t_warn = 70;
|
||||
my $t_crit = 90;
|
||||
my $chip = "coretemp-isa-0000";
|
||||
my $temperature = -9999;
|
||||
|
||||
sub help {
|
||||
print "Usage: temperature [-w <warning>] [-c <critical>] [--chip <chip>]\n";
|
||||
print "-w <percent>: warning threshold to become yellow\n";
|
||||
print "-c <percent>: critical threshold to become red\n";
|
||||
print "--chip <chip>: sensor chip\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
GetOptions("help|h" => \&help,
|
||||
"w=i" => \$t_warn,
|
||||
"c=i" => \$t_crit,
|
||||
"chip=s" => \$chip);
|
||||
|
||||
# Get chip temperature
|
||||
open (SENSORS, "sensors -u $chip |") or die;
|
||||
while (<SENSORS>) {
|
||||
if (/^\s+temp1_input:\s+[\+]*([\-]*\d+\.\d)/) {
|
||||
$temperature = $1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
close(SENSORS);
|
||||
|
||||
$temperature eq -9999 and die 'Cannot find temperature';
|
||||
|
||||
# Print short_text, full_text
|
||||
print int($temperature)."°c\n" x2;
|
||||
|
||||
# Print color, if needed
|
||||
if ($temperature >= $t_crit) {
|
||||
print "#FF0000\n";
|
||||
exit 33;
|
||||
} elsif ($temperature >= $t_warn) {
|
||||
print "#FFFC00\n";
|
||||
}
|
||||
|
||||
exit 0;
|
@ -1,27 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
CARDS=$(pacmd list-cards | grep -e index: -e alsa.card_name | xargs -n5 | awk '{print $2}')
|
||||
|
||||
if [[ ${#CARDS} != 3 ]]; # there is a space
|
||||
then
|
||||
echo "This script works only with 2 outputs, and you have ..."
|
||||
pacmd list-cards | grep -e index: -e alsa.card_name | xargs -n5
|
||||
exit
|
||||
fi
|
||||
|
||||
i=1
|
||||
for card_index in $CARDS ;
|
||||
do
|
||||
eval CARD$i=$card_index
|
||||
let i+=1
|
||||
|
||||
done
|
||||
|
||||
LAST_SINK_LINE=$(pacmd list-sink-inputs | grep -e index: -e sink: | xargs -n5 | tail -n1)
|
||||
last_sink_app_index=$( echo $LAST_SINK_LINE | awk '{print $2}' )
|
||||
last_sink_out_index=$( echo $LAST_SINK_LINE | awk '{print $4}' )
|
||||
[[ ${last_sink_out_index} == ${CARD1} ]] && new_sink_out=$CARD2 || new_sink_out=$CARD1
|
||||
|
||||
#echo "$last_sink_app_index > $last_sink_out_index > ${new_sink_out}"
|
||||
|
||||
pacmd move-sink-input ${last_sink_app_index} ${new_sink_out}
|
@ -1,31 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
for p in trizen pacaur yaourt pacman; do
|
||||
if $p --version &>/dev/null; then
|
||||
PAC="$p"
|
||||
break;
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "$PAC" ]; then
|
||||
>&2 echo "Error: No Arch package manager found?"
|
||||
fi
|
||||
|
||||
if [ "$BLOCK_BUTTON" == 1 ]; then
|
||||
nohup i3-sensible-terminal -r i3blocks-update-term -e "sh -c '$PAC -Syu || exec zsh; pkill -RTMIN+5 i3blocks'" &>/dev/null &
|
||||
disown
|
||||
fi
|
||||
|
||||
if [ $p = "pacman" ]; then
|
||||
exec 3< <(checkupdates)
|
||||
else
|
||||
exec 3< <({ checkupdates & cower -u & })
|
||||
fi
|
||||
|
||||
count="$(wc -l <&3)"
|
||||
|
||||
if [ -n "$count" -a "$count" -gt 0 ]; then
|
||||
echo $count
|
||||
echo $count
|
||||
fi
|
@ -1,182 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Displays the default device, volume, and mute status for i3blocks
|
||||
|
||||
AUDIO_HIGH_SYMBOL=' '
|
||||
|
||||
AUDIO_MED_THRESH=59
|
||||
AUDIO_MED_SYMBOL=' '
|
||||
|
||||
AUDIO_LOW_THRESH=0
|
||||
AUDIO_LOW_SYMBOL=' '
|
||||
|
||||
AUDIO_MUTED_SYMBOL=''
|
||||
|
||||
AUDIO_INTERVAL=5
|
||||
|
||||
DEFAULT_COLOR="#ffffff"
|
||||
MUTED_COLOR="#a0a0a0"
|
||||
|
||||
LONG_FORMAT=0
|
||||
SHORT_FORMAT=3
|
||||
USE_PERCENT=0
|
||||
USE_ALSA_NAME=0
|
||||
USE_DESCRIPTION=0
|
||||
|
||||
SUBSCRIBE=1
|
||||
|
||||
while getopts F:Sf:padH:M:L:X:T:t:C:c:i:m:s:h opt; do
|
||||
case "$opt" in
|
||||
S) SUBSCRIBE=1 ;;
|
||||
F) LONG_FORMAT="$OPTARG" ;;
|
||||
f) SHORT_FORMAT="$OPTARG" ;;
|
||||
p) USE_PERCENT=0 ;;
|
||||
a) USE_ALSA_NAME=1 ;;
|
||||
d) USE_DESCRIPTION=1 ;;
|
||||
H) AUDIO_HIGH_SYMBOL="$OPTARG" ;;
|
||||
M) AUDIO_MED_SYMBOL="$OPTARG" ;;
|
||||
L) AUDIO_LOW_SYMBOL="$OPTARG" ;;
|
||||
X) AUDIO_MUTED_SYMBOL="$OPTARG" ;;
|
||||
T) AUDIO_MED_THRESH="$OPTARG" ;;
|
||||
t) AUDIO_LOW_THRESH="$OPTARG" ;;
|
||||
C) DEFAULT_COLOR="$OPTARG" ;;
|
||||
c) MUTED_COLOR="$OPTARG" ;;
|
||||
i) AUDIO_INTERVAL="$OPTARG" ;;
|
||||
m) MIXER="$OPTARG" ;;
|
||||
s) SCONTROL="$OPTARG" ;;
|
||||
h) printf \
|
||||
"Usage: volume-pulseaudio [-S] [-F format] [-f format] [-p] [-a|-d] [-H symb] [-M symb]
|
||||
[-L symb] [-X symb] [-T thresh] [-t thresh] [-C color] [-c color] [-i inter]
|
||||
[-m mixer] [-s scontrol] [-h]
|
||||
Options:
|
||||
-F, -f\tOutput format (-F long format, -f short format) to use, amongst:
|
||||
\t0\t symb vol [index:name]\t (default long)
|
||||
\t1\t symb vol [name]
|
||||
\t2\t symb vol [index]\t (default short)
|
||||
\t3\t symb vol
|
||||
-S\tSubscribe to volume events (requires persistent block, always uses long format)
|
||||
-p\tOmit the percent sign (%%) in volume
|
||||
-a\tUse ALSA name if possible
|
||||
-d\tUse device description instead of name if possible
|
||||
-H\tSymbol to use when audio level is high. Default: '$AUDIO_HIGH_SYMBOL'
|
||||
-M\tSymbol to use when audio level is medium. Default: '$AUDIO_MED_SYMBOL'
|
||||
-L\tSymbol to use when audio level is low. Default: '$AUDIO_LOW_SYMBOL'
|
||||
-X\tSymbol to use when audio is muted. Default: '$AUDIO_MUTED_SYMBOL'
|
||||
-T\tThreshold for medium audio level. Default: $AUDIO_MED_THRESH
|
||||
-t\tThreshold for low audio level. Default: $AUDIO_LOW_THRESH
|
||||
-C\tColor for non-muted audio. Default: $DEFAULT_COLOR
|
||||
-c\tColor for muted audio. Default: $MUTED_COLOR
|
||||
-i\tInterval size of volume increase/decrease. Default: $AUDIO_INTERVAL
|
||||
-m\tUse the given mixer.
|
||||
-s\tUse the given scontrol.
|
||||
-h\tShow this help text
|
||||
" && exit 0;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "$MIXER" ]] ; then
|
||||
MIXER="default"
|
||||
if amixer -D pulse info >/dev/null 2>&1 ; then
|
||||
MIXER="pulse"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -z "$SCONTROL" ]] ; then
|
||||
SCONTROL=$(amixer -D "$MIXER" scontrols | sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" | head -n1)
|
||||
fi
|
||||
|
||||
CAPABILITY=$(amixer -D $MIXER get $SCONTROL | sed -n "s/ Capabilities:.*cvolume.*/Capture/p")
|
||||
|
||||
|
||||
function move_sinks_to_new_default {
|
||||
DEFAULT_SINK=$1
|
||||
pacmd list-sink-inputs | grep index: | grep -o '[0-9]\+' | while read SINK
|
||||
do
|
||||
pacmd move-sink-input $SINK $DEFAULT_SINK
|
||||
done
|
||||
}
|
||||
|
||||
function set_default_playback_device_next {
|
||||
inc=${1:-1}
|
||||
num_devices=$(pacmd list-sinks | grep -c index:)
|
||||
sink_arr=($(pacmd list-sinks | grep index: | grep -o '[0-9]\+'))
|
||||
default_sink_index=$(( $(pacmd list-sinks | grep index: | grep -no '*' | grep -o '^[0-9]\+') - 1 ))
|
||||
default_sink_index=$(( ($default_sink_index + $num_devices + $inc) % $num_devices ))
|
||||
default_sink=${sink_arr[$default_sink_index]}
|
||||
pacmd set-default-sink $default_sink
|
||||
move_sinks_to_new_default $default_sink
|
||||
}
|
||||
|
||||
case "$BLOCK_BUTTON" in
|
||||
1) set_default_playback_device_next ;;
|
||||
2) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY toggle ;;
|
||||
3) set_default_playback_device_next -1 ;;
|
||||
4) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY $AUDIO_INTERVAL%+ ;;
|
||||
5) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY $AUDIO_INTERVAL%- ;;
|
||||
esac
|
||||
|
||||
function print_format {
|
||||
PERCENT="%"
|
||||
[[ $USE_PERCENT == 0 ]] && PERCENT=""
|
||||
case "$1" in
|
||||
1) echo "$SYMBOL$VOL$PERCENT [$NAME]" ;;
|
||||
2) echo "$SYMBOL$VOL$PERCENT [$INDEX]";;
|
||||
3) echo "$SYMBOL$VOL$PERCENT" ;;
|
||||
*) echo "$SYMBOL$VOL$PERCENT [$INDEX:$NAME]" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
function print_block {
|
||||
for name in INDEX NAME VOL MUTED; do
|
||||
read $name
|
||||
done < <(pacmd list-sinks | grep "index:\|name:\|volume: front\|muted:" | grep -A3 '*')
|
||||
INDEX=$(echo "$INDEX" | grep -o '[0-9]\+')
|
||||
VOL=$(echo "$VOL" | grep -o "[0-9]*%" | head -1 )
|
||||
VOL="${VOL%?}"
|
||||
|
||||
NAME=$(echo "$NAME" | sed \
|
||||
's/.*<.*\.\(.*\)>.*/\1/; t;'\
|
||||
's/.*<\(.*\)>.*/\1/; t;'\
|
||||
's/.*/unknown/')
|
||||
|
||||
if [[ $USE_ALSA_NAME == 1 ]] ; then
|
||||
ALSA_NAME=$(pacmd list-sinks |\
|
||||
awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\
|
||||
grep "alsa.name\|alsa.mixer_name" |\
|
||||
head -n1 |\
|
||||
sed 's/.*= "\(.*\)".*/\1/')
|
||||
NAME=${ALSA_NAME:-$NAME}
|
||||
elif [[ $USE_DESCRIPTION == 1 ]] ; then
|
||||
DESCRIPTION=$(pacmd list-sinks |\
|
||||
awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\
|
||||
grep "device.description" |\
|
||||
head -n1 |\
|
||||
sed 's/.*= "\(.*\)".*/\1/')
|
||||
NAME=${DESCRIPTION:-$NAME}
|
||||
fi
|
||||
|
||||
if [[ $MUTED =~ "no" ]] ; then
|
||||
SYMBOL=$AUDIO_HIGH_SYMBOL
|
||||
[[ $VOL -le $AUDIO_MED_THRESH ]] && SYMBOL=$AUDIO_MED_SYMBOL
|
||||
[[ $VOL -le $AUDIO_LOW_THRESH ]] && SYMBOL=$AUDIO_LOW_SYMBOL
|
||||
COLOR=$DEFAULT_COLOR
|
||||
else
|
||||
SYMBOL=$AUDIO_MUTED_SYMBOL
|
||||
COLOR=$MUTED_COLOR
|
||||
VOL=""
|
||||
fi
|
||||
|
||||
# if [[ $SUBSCRIBE == 1 ]] ; then
|
||||
# print_format "$LONG_FORMAT"
|
||||
# else
|
||||
# print_format "$LONG_FORMAT"
|
||||
print_format "$SHORT_FORMAT"
|
||||
# echo "$COLOR"
|
||||
# fi
|
||||
}
|
||||
|
||||
print_block
|
||||
if [[ $SUBSCRIBE == 1 ]] ; then
|
||||
while read -r EVENT; do
|
||||
print_block
|
||||
done < <(pactl subscribe | stdbuf -oL grep change)
|
||||
fi
|
@ -1,46 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Copyright (C) 2014 Alexander Keller <github@nycroth.com>
|
||||
|
||||
# This program 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
INTERFACE="${BLOCK_INSTANCE:-wlan0}"
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
# As per #36 -- It is transparent: e.g. if the machine has no battery or wireless
|
||||
# connection (think desktop), the corresponding block should not be displayed.
|
||||
[[ ! -d /sys/class/net/${INTERFACE}/wireless ]] ||
|
||||
[[ "$(cat /sys/class/net/$INTERFACE/operstate)" = 'down' ]] && exit
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
QUALITY=$(grep $INTERFACE /proc/net/wireless | awk '{ print int($3 * 100 / 70) }')
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
echo $QUALITY% # full text
|
||||
echo $QUALITY% # short text
|
||||
|
||||
# color
|
||||
if [[ $QUALITY -ge 80 ]]; then
|
||||
echo "#00FF00"
|
||||
elif [[ $QUALITY -lt 80 ]]; then
|
||||
echo "#FFF600"
|
||||
elif [[ $QUALITY -lt 60 ]]; then
|
||||
echo "#FFAE00"
|
||||
elif [[ $QUALITY -lt 40 ]]; then
|
||||
echo "#FF0000"
|
||||
fi
|
@ -107,29 +107,7 @@ client.unfocused $inactive-bg-color $inactive-bg-color $inactive-text-co
|
||||
client.focused_inactive $inactive-bg-color $inactive-bg-color $inactive-text-color $bg-color
|
||||
client.urgent $urgent-bg-color $urgent-bg-color $text-color $bg-color
|
||||
|
||||
bar {
|
||||
status_command i3blocks -c ~/.config/i3/blocks/config
|
||||
|
||||
workspace_buttons yes
|
||||
strip_workspace_numbers yes
|
||||
tray_output primary
|
||||
tray_padding 4
|
||||
height 24
|
||||
|
||||
output $bl
|
||||
output $br
|
||||
output primary
|
||||
position bottom
|
||||
|
||||
colors {
|
||||
separator #757575
|
||||
background #2f343f
|
||||
# border background text
|
||||
focused_workspace $bg-color $bg-color $text-color
|
||||
inactive_workspace $inactive-bg-color $inactive-bg-color $inactive-text-color
|
||||
urgent_workspace $urgent-bg-color $urgent-bg-color $text-color
|
||||
}
|
||||
}
|
||||
exec_always --no-startup-id killall -q polybar; while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done; exec polybar -r i3bar
|
||||
|
||||
# Window rules
|
||||
for_window [class="Pinentry"] floating enable
|
||||
@ -185,7 +163,6 @@ bindsym XF86MonBrightnessDown exec xbacklight -dec 5 && pkill -RTMIN+12 i3bloc
|
||||
|
||||
# app launch shortcuts
|
||||
exec --no-startup-id ~/.config/i3/disable-standby-fs.py
|
||||
exec --no-startup-id "ip monitor | while read; do pkill -RTMIN+15 i3blocks; done"
|
||||
exec --no-startup-id feh --no-fehbg --no-xinerama --bg-fill ~/pictures/lakesidesunrise.jpg
|
||||
exec --no-startup-id xautolock -time 5 -locker 'dm-tool lock' -nocloseout -nocloseerr
|
||||
|
||||
|
311
.config/polybar/config
Normal file
311
.config/polybar/config
Normal file
@ -0,0 +1,311 @@
|
||||
[colours]
|
||||
background = transparent
|
||||
text = #eceff1
|
||||
icon = #147a82
|
||||
warning = #bd2c40
|
||||
critical = #bd2c40
|
||||
|
||||
[settings]
|
||||
format-foreground = ${colours.text}
|
||||
format-background = ${colours.background}
|
||||
format-spacing = 0
|
||||
format-margin = 2.5
|
||||
format-offset = 0
|
||||
|
||||
[bar/i3bar]
|
||||
monitor = ${env:MONITOR:HDMI-0}
|
||||
dpi = ${xrdb:Xft.dpi:96}
|
||||
fixed-center = false
|
||||
enable-ipc = true
|
||||
|
||||
width = 100%
|
||||
height = 32
|
||||
bottom = true
|
||||
radius = 0
|
||||
|
||||
foreground = ${colours.text}
|
||||
background = ${colours.background}
|
||||
|
||||
line-size = 0
|
||||
line-colour = #f00
|
||||
padding-left = 2
|
||||
padding-right = 2
|
||||
module-margin-left = 0
|
||||
module-margin-right = 1
|
||||
|
||||
font-0 = sans:pixelsize=9;1
|
||||
font-1 = FontAwesome5Pro:pixelsize=10;2
|
||||
|
||||
modules-left = i3
|
||||
modules-center =
|
||||
# modules-right = volume updates weather xkeyboard wlan eth memory cpu xbacklight battery temperature date
|
||||
modules-right = volume updates weather wlan eth memory cpu xbacklight battery temperature date
|
||||
|
||||
tray-position = right
|
||||
tray-detached = false
|
||||
tray-background = ${root.background}
|
||||
tray-offset-x = -4
|
||||
tray-offset-y = 0
|
||||
tray-maxsize = 16
|
||||
tray-padding = 2
|
||||
tray-scale = 1.0
|
||||
|
||||
cursor-click = pointer
|
||||
cursor-scroll = ns-resize
|
||||
|
||||
|
||||
[module/updates]
|
||||
type = custom/script
|
||||
exec = $XDG_CONFIG_HOME/polybar/update.sh
|
||||
tail = true
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colours.icon}
|
||||
click-left = i3-msg exec -- i3-sensible-terminal -r i3blocks-update-term -e "yay && kill -USR1 %pid% || kill --USR1 %pid%"
|
||||
|
||||
[module/weather]
|
||||
type = custom/script
|
||||
exec = $XDG_CONFIG_HOME/polybar/weather.sh
|
||||
interval = 120
|
||||
click-left = i3-msg exec "i3-sensible-terminal -r floating-term -e 'sh -c \"xdotool getactivewindow windowsize 910 680 && curl wttr.in && sleep infinity\"'"
|
||||
|
||||
[module/xkeyboard]
|
||||
type = internal/xkeyboard
|
||||
|
||||
format = <label-layout> <label-indicator>
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colours.icon}
|
||||
format-prefix-underline = ${colours.background}
|
||||
|
||||
label-layout = %name%
|
||||
label-indicator = %name%
|
||||
|
||||
|
||||
[module/i3]
|
||||
type = internal/i3
|
||||
format = <label-state> <label-mode>
|
||||
index-sort = true
|
||||
wrapping-scroll = false
|
||||
|
||||
; Only show workspaces on the same output as the bar
|
||||
; pin-workspaces = true
|
||||
|
||||
label-mode-padding = 2
|
||||
label-mode-foreground = ${colours.text}
|
||||
label-mode-background = ${colours.background}
|
||||
|
||||
; focused = Active workspace on focused monitor
|
||||
label-focused = %index%
|
||||
label-focused-padding = ${self.label-mode-padding}
|
||||
label-focused-foreground = ${colours.text}
|
||||
label-focused-background = ${colours.background}
|
||||
label-focused-underline = ${colours.background}
|
||||
|
||||
; unfocused = Inactive workspace on any monitor
|
||||
label-unfocused = ${self.label-focused}
|
||||
label-unfocused-padding = ${self.label-focused-padding}
|
||||
label-unfocused-foreground= ${colours.icon}
|
||||
label-unfocused-underline = ${self.label-focused-underline}
|
||||
|
||||
; visible = Active workspace on unfocused monitor
|
||||
label-visible = ${self.label-focused}
|
||||
label-visible-foreground= ${colours.icon}
|
||||
label-visible-padding = ${self.label-focused-padding}
|
||||
label-visible-background = ${self.label-focused-background}
|
||||
label-visible-underline = ${self.label-focused-underline}
|
||||
|
||||
; urgent = Workspace with urgency hint set
|
||||
label-urgent = ${self.label-focused}
|
||||
label-urgent-foreground = ${colours.warning}
|
||||
label-urgent-padding = ${self.label-focused-padding}
|
||||
|
||||
|
||||
[module/xbacklight]
|
||||
type = internal/xbacklight
|
||||
|
||||
label = %percentage%
|
||||
format = <label>
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colours.icon}
|
||||
|
||||
|
||||
[module/backlight-acpi]
|
||||
inherit = module/xbacklight
|
||||
type = internal/backlight
|
||||
card = intel_backlight
|
||||
|
||||
|
||||
[module/cpu]
|
||||
type = internal/cpu
|
||||
interval = 2
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colours.icon}
|
||||
format-underline = ${colours.background}
|
||||
label = %percentage%%
|
||||
|
||||
|
||||
[module/memory]
|
||||
type = internal/memory
|
||||
interval = 2
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colours.icon}
|
||||
label = %percentage_used%%
|
||||
|
||||
|
||||
[module/wlan]
|
||||
type = internal/network
|
||||
interface = wlp1s0
|
||||
interval = 3.0
|
||||
|
||||
format-connected = <ramp-signal> <label-connected>
|
||||
format-connected-underline = ${colours.background}
|
||||
label-connected = %essid%
|
||||
|
||||
format-disconnected =
|
||||
;format-disconnected = <label-disconnected>
|
||||
;format-disconnected-underline = ${self.format-connected-underline}
|
||||
;label-disconnected = %ifname% disconnected
|
||||
;label-disconnected-foreground = ${colours.icon}
|
||||
|
||||
ramp-signal-0 =
|
||||
ramp-signal-1 =
|
||||
ramp-signal-2 =
|
||||
ramp-signal-foreground = ${colours.icon}
|
||||
|
||||
|
||||
[module/eth]
|
||||
type = internal/network
|
||||
interface = eth0
|
||||
interval = 3.0
|
||||
|
||||
label-connected = %local_ip%
|
||||
format-connected-prefix = " "
|
||||
format-connected-prefix-foreground = ${colours.icon}
|
||||
format-connected-underline = ${colours.background}
|
||||
|
||||
;format-disconnected = RIP
|
||||
;format-disconnected = <label-disconnected>
|
||||
;format-disconnected-underline = ${self.format-connected-underline}
|
||||
;label-disconnected = %ifname% disconnected
|
||||
label-disconnected-foreground = ${colours.critical}
|
||||
|
||||
|
||||
[module/date]
|
||||
type = internal/date
|
||||
interval = 1
|
||||
|
||||
label = %{A3:i3-sensible-terminal -r i3blocks-clock-term -e "sh -c \"xdotool getactivewindow windowsize 500 600; cal -y $(date +%Y); stty -echo; exec sleep infinity\"" &:}%date% %time%%{A}
|
||||
|
||||
time = %H:%M
|
||||
time-alt = %a %e %b %Y %H:%M:%S
|
||||
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colours.icon}
|
||||
|
||||
|
||||
[module/volume]
|
||||
type = internal/pulseaudio
|
||||
|
||||
label-volume = %percentage%
|
||||
format-volume = %{A3:pavucontrol:}<ramp-volume> <label-volume>%{A}
|
||||
format-muted = %{A3:pavucontrol:}<label-muted>%{A}
|
||||
|
||||
label-volume-foreground = ${root.foreground}
|
||||
format-muted-foreground = ${colours.icon}
|
||||
ramp-volume-foreground = ${colours.icon}
|
||||
|
||||
label-muted = ""
|
||||
ramp-volume-0 = ""
|
||||
ramp-volume-1 = ""
|
||||
ramp-volume-2 = ""
|
||||
ramp-volume-3 = ""
|
||||
ramp-volume-4 = ""
|
||||
ramp-volume-5 = ""
|
||||
|
||||
|
||||
[module/battery]
|
||||
type = internal/battery
|
||||
battery = BAT0
|
||||
adapter = AC0
|
||||
full-at = 95
|
||||
|
||||
format-full = <label-full>
|
||||
format-charging = <label-charging>
|
||||
format-discharging = <ramp-capacity> <label-discharging>
|
||||
|
||||
format-full-underline = ${self.format-charging-underline}
|
||||
format-charging-underline = ${colours.background}
|
||||
format-discharging-underline = ${self.format-charging-underline}
|
||||
|
||||
format-full-prefix = " "
|
||||
format-charging-prefix = " "
|
||||
|
||||
ramp-capacity-0 =
|
||||
ramp-capacity-1 =
|
||||
ramp-capacity-2 =
|
||||
ramp-capacity-3 =
|
||||
ramp-capacity-4 =
|
||||
|
||||
format-full-prefix-foreground = ${colours.icon}
|
||||
format-charging-prefix-foreground = ${colours.icon}
|
||||
ramp-capacity-foreground = ${colours.icon}
|
||||
ramp-capacity-0-foreground = ${colours.critical}
|
||||
ramp-capacity-1-foreground = ${colours.warning}
|
||||
|
||||
|
||||
[module/temperature]
|
||||
type = internal/temperature
|
||||
thermal-zone = 2
|
||||
warn-temperature = 70
|
||||
|
||||
format = <ramp> <label>
|
||||
format-warn = <ramp> <label-warn>
|
||||
|
||||
label = %temperature-c%
|
||||
label-warn = %temperature-c%
|
||||
label-warn-foreground = ${colours.background}
|
||||
|
||||
ramp-0 =
|
||||
ramp-1 =
|
||||
ramp-2 =
|
||||
ramp-3 =
|
||||
ramp-4 =
|
||||
ramp-5 =
|
||||
ramp-foreground = ${colours.icon}
|
||||
|
||||
|
||||
[module/powermenu]
|
||||
type = custom/menu
|
||||
|
||||
expand-right = true
|
||||
|
||||
label-open =
|
||||
label-close = cancel
|
||||
label-separator = |
|
||||
label-open-foreground = ${colours.icon}
|
||||
label-close-foreground = ${colours.background}
|
||||
label-separator-foreground = ${colours.icon}
|
||||
|
||||
menu-0-0 = reboot
|
||||
menu-0-0-exec = menu-open-1
|
||||
menu-0-1 = power off
|
||||
menu-0-1-exec = menu-open-2
|
||||
|
||||
menu-1-0 = cancel
|
||||
menu-1-0-exec = menu-open-0
|
||||
menu-1-1 = reboot
|
||||
menu-1-1-exec = sudo reboot
|
||||
|
||||
menu-2-0 = power off
|
||||
menu-2-0-exec = sudo poweroff
|
||||
menu-2-1 = cancel
|
||||
menu-2-1-exec = menu-open-0
|
||||
|
||||
|
||||
[settings]
|
||||
screenchange-reload = true
|
||||
;compositing-background = xor
|
||||
;compositing-background = screen
|
||||
;compositing-foreground = source
|
||||
;compositing-border = over
|
||||
|
||||
; vim:ft=dosini
|
11
.config/polybar/update.sh
Executable file
11
.config/polybar/update.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
dothething() { count=$( (checkupdates & yay -Qum) 2>/dev/null | wc -l); test $count -gt 0 && echo $count || echo; }
|
||||
|
||||
trap 'true' HUP USR1
|
||||
|
||||
while true; do
|
||||
dothething
|
||||
sleep 120 &
|
||||
wait
|
||||
done
|
141
.config/polybar/weather.sh
Executable file
141
.config/polybar/weather.sh
Executable file
@ -0,0 +1,141 @@
|
||||
#!/bin/sh
|
||||
|
||||
get_icon_day() {
|
||||
case $1 in
|
||||
210) echo ;; # light thunderstorm
|
||||
211) echo ;; # thunderstorm
|
||||
500) echo ;; # light rain
|
||||
721) echo ;; # haze
|
||||
800) echo ;; # clear sky
|
||||
801) echo ;; # few clouds
|
||||
802) echo ;; # scattered clouds
|
||||
803) echo ;; # broken clouds
|
||||
804) echo ;; # overcast clouds
|
||||
*) return 1;;
|
||||
esac
|
||||
}
|
||||
|
||||
get_icon_night() {
|
||||
case $1 in
|
||||
210) echo ;; # light thunderstorm
|
||||
211) echo ;; # thunderstorm
|
||||
500) echo ;; # light rain
|
||||
800) echo ;; # clear sky
|
||||
801) echo ;; # few clouds
|
||||
802) echo ;; # scattered clouds
|
||||
803) echo ;; # broken clouds
|
||||
804) echo ;; # overcast clouds
|
||||
*) return 1;;
|
||||
esac
|
||||
|
||||
}
|
||||
|
||||
get_icon() {
|
||||
case $1 in
|
||||
d) fn=get_icon_day;;
|
||||
n) fn=get_icon_night;;
|
||||
esac
|
||||
|
||||
if $fn $2; then
|
||||
return
|
||||
fi
|
||||
|
||||
case $2 in
|
||||
200) echo ;; # thunderstorm with light rain
|
||||
201) echo ;; # thunderstorm with rain
|
||||
202) echo ;; # thunderstorm with heavy rain
|
||||
210) echo ;; # light thunderstorm
|
||||
211) echo ;; # thunderstorm
|
||||
212) echo ;; # heavy thunderstorm
|
||||
221) echo ;; # ragged thunderstorm
|
||||
230) echo ;; # thunderstorm with light drizzle
|
||||
231) echo ;; # thunderstorm with drizzle
|
||||
232) echo ;; # thunderstorm with heavy drizzle
|
||||
300) echo ;; # light intensity drizzle
|
||||
301) echo ;; # drizzle
|
||||
302) echo ;; # heavy intensity drizzle
|
||||
310) echo ;; # light intensity drizzle rain
|
||||
311) echo ;; # drizzle rain
|
||||
312) echo ;; # heavy intensity drizzle rain
|
||||
313) echo ;; # shower rain and drizzle
|
||||
314) echo ;; # heavy shower rain and drizzle
|
||||
321) echo ;; # shower drizzle
|
||||
500) echo ;; # light rain
|
||||
501) echo ;; # moderate rain
|
||||
502) echo ;; # heavy intensity rain
|
||||
503) echo ;; # very heavy rain
|
||||
504) echo ;; # extreme rain
|
||||
511) echo ;; # freezing rain
|
||||
520) echo ;; # light intensity shower rain
|
||||
521) echo ;; # shower rain
|
||||
522) echo ;; # heavy intensity shower rain
|
||||
531) echo ;; # ragged shower rain
|
||||
600) echo ;; # light snow
|
||||
601) echo ;; # snow
|
||||
602) echo ;; # heavy snow
|
||||
611) echo ;; # sleet
|
||||
612) echo ;; # shower sleet
|
||||
615) echo ;; # light rain and snow
|
||||
616) echo ;; # rain and snow
|
||||
620) echo ;; # light shower snow
|
||||
621) echo ;; # shower snow
|
||||
622) echo ;; # heavy shower snow
|
||||
701) echo ;; # mist
|
||||
711) echo ;; # smoke
|
||||
721) echo ;; # haze
|
||||
741) echo ;; # fog
|
||||
762) echo ;; # volcanic ash
|
||||
781) echo ;; # tornado
|
||||
800) echo ;; # clear sky
|
||||
801) echo ;; # few clouds
|
||||
802) echo ;; # scattered clouds
|
||||
803) echo ;; # broken clouds
|
||||
804) echo ;; # overcast clouds
|
||||
# 731) echo ;; # sand, dust whirls
|
||||
# 751) echo ;; # sand
|
||||
# 761) echo ;; # dust
|
||||
# 771) echo ;; # squalls
|
||||
*) echo ;;
|
||||
esac
|
||||
}
|
||||
|
||||
KEY="$OPENWEATHERMAP_API_KEY"
|
||||
CITY=""
|
||||
UNITS="metric"
|
||||
|
||||
SYMBOL="°"
|
||||
ICON_COL="147a82"
|
||||
|
||||
API="https://api.openweathermap.org/data/2.5"
|
||||
|
||||
if [ ! -z $CITY ]; then
|
||||
if [ "$CITY" -eq "$CITY" ] 2>/dev/null; then
|
||||
CITY_PARAM="id=$CITY"
|
||||
else
|
||||
CITY_PARAM="q=$CITY"
|
||||
fi
|
||||
|
||||
weather=$(curl -sf "$API/weather?appid=$KEY&$CITY_PARAM&units=$UNITS")
|
||||
else
|
||||
location=$(curl -sf https://location.services.mozilla.com/v1/geolocate?key=geoclue)
|
||||
|
||||
if [ ! -z "$location" ]; then
|
||||
location_lat="$(echo "$location" | jq '.location.lat')"
|
||||
location_lon="$(echo "$location" | jq '.location.lng')"
|
||||
|
||||
weather=$(curl -sf "$API/weather?appid=$KEY&lat=$location_lat&lon=$location_lon&units=$UNITS")
|
||||
else
|
||||
echo "%{F#$ICON_COL}%{F-}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -z "$weather" ]; then
|
||||
# weather_desc=$(echo "$weather" | jq -r ".weather[0].description")
|
||||
weather_temp=$(echo "$weather" | jq '.main.temp' | cut -d "." -f 1)
|
||||
weather_code=$(echo "$weather" | jq -r '.weather[0].id')
|
||||
time_of_day=$(echo "$weather" | jq -r '.weather[0].icon | split("") | last')
|
||||
|
||||
icon=$(get_icon "$time_of_day" "$weather_code")
|
||||
|
||||
echo "%{F#$ICON_COL}$icon%{F-} $weather_temp$SYMBOL"
|
||||
fi
|
Loading…
Reference in New Issue
Block a user