691 lines
19 KiB
Nix
691 lines
19 KiB
Nix
{
|
|
pkgs,
|
|
lib,
|
|
config,
|
|
host,
|
|
...
|
|
}: let
|
|
niri = lib.getExe pkgs.c.niri;
|
|
jq = lib.getExe pkgs.jq;
|
|
workspaces_script = pkgs.writeShellScript "workspaces.sh" ''
|
|
workspaces_num () {
|
|
IFS=$'\n'
|
|
local r=$(${niri} msg -j workspaces | ${jq} '.[].idx' | sort -nr | head -n1)
|
|
echo $r
|
|
}
|
|
|
|
get_idx () {
|
|
local r=$(${niri} msg -j workspaces)
|
|
for (( i=0; i<$(workspaces_num); i+=1 ))
|
|
do
|
|
local act=$(echo $r | ${jq} .[$i].id)
|
|
if [ $act -eq $1 ]; then
|
|
local idx=$(echo $r | ${jq} .[$i].idx)
|
|
echo $idx
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
get_before () {
|
|
if [ $1 -eq "1" ]; then
|
|
echo ""
|
|
else
|
|
a=
|
|
for (( i=1; i<$1; i++ )) do
|
|
a="$a $i"
|
|
done
|
|
echo $a
|
|
fi
|
|
}
|
|
|
|
get_after () {
|
|
if [ $1 -eq $2 ]; then
|
|
echo ""
|
|
else
|
|
a=
|
|
for (( i=$1+1; i<=$2; i++ )) do
|
|
a="$a $i"
|
|
done
|
|
echo $a
|
|
fi
|
|
}
|
|
|
|
ret_add () {
|
|
echo "before|string|$(get_before $1)"
|
|
echo "after|string|$(get_after $1 $2)"
|
|
}
|
|
|
|
bnum=$(workspaces_num)
|
|
echo "number|int|$bnum"
|
|
|
|
beg=$(${niri} msg -j workspaces)
|
|
|
|
cf () {
|
|
for (( i=0; i<$2; i+=1 ))
|
|
do
|
|
bact=$(echo $1 | ${jq} .[$i].is_active)
|
|
if [[ "$bact" == "true" ]]; then
|
|
bf=$(echo $1 | ${jq} .[$i].idx)
|
|
echo "$bf"
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
sf=`cf "$beg" "$bnum"`
|
|
echo "focused|int|$sf"
|
|
ret_add $sf $bnum
|
|
|
|
echo ""
|
|
|
|
${niri} msg -j event-stream | while read -r line; do
|
|
current=$(echo $line | ${jq} .WorkspaceActivated.id)
|
|
if [[ "$current" != "null" ]]; then
|
|
cn=$(workspaces_num)
|
|
idx=$(get_idx $current)
|
|
echo "number|int|$cn"
|
|
echo "focused|int|$idx"
|
|
ret_add $idx $cn
|
|
echo ""
|
|
fi
|
|
|
|
current=$(echo $line | ${jq} .WorkspacesChanged.workspaces)
|
|
if [[ "$current" != "null" ]]; then
|
|
cn=$(workspaces_num)
|
|
c=$(cf "$current" "$cn")
|
|
idx=$c
|
|
echo "number|int|$cn"
|
|
echo "focused|int|$idx"
|
|
ret_add $c $cn
|
|
echo ""
|
|
fi
|
|
done
|
|
'';
|
|
|
|
lang_script = pkgs.writeShellScript "current_layout.sh" ''
|
|
startl=$(${niri} msg -j keyboard-layouts | ${jq} .current_idx)
|
|
echo "lang|int|$startl"
|
|
echo ""
|
|
|
|
${niri} msg -j event-stream | while read -r line; do
|
|
|
|
current=$(echo $line | ${jq} .KeyboardLayoutSwitched.idx)
|
|
if [[ "$current" != "null" ]]; then
|
|
echo "lang|string|$current"
|
|
echo ""
|
|
fi
|
|
done
|
|
'';
|
|
in {
|
|
hm.programs.yambar = {
|
|
enable = true;
|
|
settings.bar = let
|
|
# std_underline = {
|
|
# underline = {
|
|
# size = 2;
|
|
# color = "ff0000ff";
|
|
# };
|
|
# };
|
|
red = config.lib.stylix.colors.base08 + "ff";
|
|
orange = config.lib.stylix.colors.base09 + "ff";
|
|
yellow = config.lib.stylix.colors.base0A + "ff";
|
|
white = config.lib.stylix.colors.base05 + "ff";
|
|
grey = "999999ff";
|
|
|
|
awesome = "Font Awesome 6 Free:style=solid:pixelsize=14";
|
|
in {
|
|
font = "FiraCode Nerd Font:pixelsize=12";
|
|
height = 26;
|
|
location = "top";
|
|
spacing = 8;
|
|
margin = 7;
|
|
foreground = white;
|
|
background = config.lib.stylix.colors.base00 + "cc";
|
|
left = [
|
|
{
|
|
script = {
|
|
path = workspaces_script;
|
|
args = [
|
|
];
|
|
content = [
|
|
{
|
|
string = {
|
|
text = "{before}";
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = " {focused} ";
|
|
foreground = orange;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "{after}";
|
|
};
|
|
}
|
|
];
|
|
};
|
|
}
|
|
{
|
|
foreign-toplevel = {
|
|
content = {
|
|
map = {
|
|
conditions = {
|
|
"~activated" = {
|
|
empty = {
|
|
};
|
|
};
|
|
activated = [
|
|
{
|
|
string = {
|
|
text = "{app-id}";
|
|
foreground = orange;
|
|
};
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|
|
];
|
|
|
|
center = [
|
|
{
|
|
clock = {
|
|
time-format = "%H:%M";
|
|
content = [
|
|
{
|
|
string = {
|
|
text = "{time}";
|
|
on-click = "${lib.getExe pkgs.playerctl} play-pause";
|
|
};
|
|
}
|
|
];
|
|
};
|
|
}
|
|
];
|
|
|
|
right = [
|
|
{
|
|
network = {
|
|
content = {
|
|
map = {
|
|
default = {
|
|
empty = {
|
|
};
|
|
};
|
|
conditions = {
|
|
"name == enp2s0" = {
|
|
map = {
|
|
conditions = {
|
|
"~carrier" = {
|
|
empty = {
|
|
};
|
|
};
|
|
carrier = {
|
|
map = {
|
|
default = {
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
foreground = white;
|
|
};
|
|
};
|
|
conditions = {
|
|
"state == up && ipv4 != \"\"" = {
|
|
string = {
|
|
text = "";
|
|
foreground = red;
|
|
font = awesome;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|
|
{
|
|
network = {
|
|
poll-interval = 1000;
|
|
content = {
|
|
map = {
|
|
default = {
|
|
empty = {
|
|
};
|
|
};
|
|
conditions = {
|
|
"name == wlan0" = {
|
|
map = {
|
|
default = {
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
foreground = white;
|
|
};
|
|
};
|
|
conditions = {
|
|
"state == down" = {
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
foreground = red;
|
|
};
|
|
};
|
|
"state == up" = {
|
|
map = {
|
|
default = [
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
};
|
|
}
|
|
];
|
|
conditions = {
|
|
"ipv4 == \"\"" = [
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
foreground = red;
|
|
};
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|
|
{
|
|
pipewire = let
|
|
volume.conditions = {
|
|
muted = {
|
|
string = {
|
|
text = "{cubic_volume}%";
|
|
foreground = "999999ff";
|
|
};
|
|
};
|
|
"~muted" = {
|
|
string = {
|
|
text = "{cubic_volume}%";
|
|
};
|
|
};
|
|
};
|
|
in {
|
|
content.list.items = [
|
|
{
|
|
map.conditions = {
|
|
"type == \"sink\"".map.conditions = {
|
|
"bus == \"bluetooth\"" = {
|
|
string = {
|
|
text = " ";
|
|
font = awesome;
|
|
};
|
|
};
|
|
muted = {
|
|
string = {
|
|
text = " ";
|
|
font = awesome;
|
|
foreground = grey;
|
|
};
|
|
};
|
|
"~muted" = [
|
|
{
|
|
ramp = {
|
|
tag = "cubic_volume";
|
|
items = [
|
|
{
|
|
string = {
|
|
text = " ";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = " ";
|
|
font = awesome;
|
|
};
|
|
}
|
|
];
|
|
};
|
|
}
|
|
];
|
|
};
|
|
"type == \"source\"" = {
|
|
map.conditions = {
|
|
muted = {
|
|
string = {
|
|
text = " ";
|
|
font = awesome;
|
|
foreground = grey;
|
|
};
|
|
};
|
|
"~muted" = {
|
|
string = {
|
|
text = " 🎙";
|
|
font = awesome;
|
|
foreground = yellow;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|
|
{map."<<" = volume;}
|
|
];
|
|
};
|
|
}
|
|
{
|
|
backlight = {
|
|
name = "amdgpu_bl2";
|
|
content = [
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "{percent}%";
|
|
};
|
|
}
|
|
];
|
|
};
|
|
}
|
|
{
|
|
battery = let
|
|
discharging = {
|
|
list = {
|
|
items = [
|
|
{
|
|
ramp = {
|
|
tag = "capacity";
|
|
items = [
|
|
{
|
|
string = {
|
|
text = "";
|
|
foreground = "ff0000ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "";
|
|
foreground = "ff0000ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "";
|
|
foreground = "ffa600ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "";
|
|
foreground = "00ff00ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
];
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "{capacity}%";
|
|
};
|
|
}
|
|
];
|
|
};
|
|
};
|
|
in {
|
|
name = if host == "tureis" then "BAT1" else "BAT0";
|
|
poll-interval = 250;
|
|
content = {
|
|
map = {
|
|
conditions = {
|
|
"state == unknown" = {
|
|
"<<" = discharging;
|
|
};
|
|
"state == discharging" = {
|
|
"<<" = discharging;
|
|
};
|
|
"state == charging" = [
|
|
{
|
|
string = {
|
|
text = "";
|
|
foreground = "00ff00ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "{capacity}%";
|
|
};
|
|
}
|
|
];
|
|
"state == full" = [
|
|
{
|
|
string = {
|
|
text = "";
|
|
foreground = "00ff00ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "{capacity}%";
|
|
};
|
|
}
|
|
];
|
|
"state == \"not charging\"" = [
|
|
{
|
|
ramp = {
|
|
tag = "capacity";
|
|
items = [
|
|
{
|
|
string = {
|
|
text = " ";
|
|
foreground = "ff0000ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = " ";
|
|
foreground = "ffa600ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = " ";
|
|
foreground = "00ff00ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = " ";
|
|
foreground = "00ff00ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = " ";
|
|
foreground = "00ff00ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = " ";
|
|
foreground = "00ff00ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = " ";
|
|
foreground = "00ff00ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = " ";
|
|
foreground = "00ff00ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = " ";
|
|
foreground = "00ff00ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = " ";
|
|
foreground = "00ff00ff";
|
|
font = awesome;
|
|
};
|
|
}
|
|
];
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "{capacity}%";
|
|
};
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|
|
{
|
|
clock = {
|
|
date-format = "%d %B, %A";
|
|
content = [
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "{date}";
|
|
right-margin = 5;
|
|
};
|
|
}
|
|
];
|
|
};
|
|
}
|
|
{
|
|
script = {
|
|
path = lang_script;
|
|
args = [
|
|
];
|
|
content = {
|
|
map = {
|
|
default = {
|
|
string = {
|
|
text = "{lang}";
|
|
};
|
|
};
|
|
conditions = {
|
|
"lang == 0" = [
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "en";
|
|
};
|
|
}
|
|
];
|
|
"lang == 1" = [
|
|
{
|
|
string = {
|
|
text = "";
|
|
font = awesome;
|
|
};
|
|
}
|
|
{
|
|
string = {
|
|
text = "ru";
|
|
};
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|
|
];
|
|
};
|
|
};
|
|
}
|