blob: 52c3d1f77344d071b9720666645e380d7db45097 (
plain) (
tree)
|
|
# TODO: This should not do something depending on whether the host is a laptop or not. It
# should instead match on monitor-width or scale factor. <2024-11-29>
{
lib,
laptop ? false,
laptopBacklightName ? null,
scripts,
}: let
mkUnderline = color: {
underline = {
inherit color;
size = 3;
};
};
shellExec = cmd: ''sh -c "${cmd}"'';
values = {
foreground = {
blue = "99d1dbff";
focus = "e78284ff";
green = "a6e3a1dd";
lavendar = "b4befedd";
mauve = "cba6f7dd";
none = "00000000";
normal = "c6ceefff";
peach = "fab387dd";
sapphire = "74c7ecdd";
teal = "94e2d5dd";
};
font = {
main = "Source Code Pro:pixelsize=${
builtins.toString (
if laptop
then 22
else 26
)
}";
aws = "Font Awesome 5 Free:style=solid:pixelsize=${
builtins.toString (
if laptop
then 20
else 23
)
}";
};
background = {
normal = "303446ff";
tag = "585b70ff";
tag2 = "45475aff";
urgent = "e78284ff";
};
backgroundBlock = {
normal = {background = {color = values.background.normal;};};
urgent = {background = {color = values.background.urgent;};};
};
underline = {
battery = mkUnderline values.foreground.sapphire;
clock = mkUnderline values.foreground.teal;
focused = mkUnderline values.foreground.focus;
resources = mkUnderline values.foreground.green;
title = mkUnderline values.background.tag;
urgent = mkUnderline values.foreground.blue;
utils = mkUnderline values.foreground.peach;
weather = mkUnderline values.foreground.lavendar;
};
combination = {
battery.stack = [
values.backgroundBlock.normal
values.underline.battery
];
clock.stack = [
values.backgroundBlock.normal
values.underline.clock
];
resources.stack = [
values.backgroundBlock.normal
values.underline.resources
];
utils.stack = [
values.backgroundBlock.normal
values.underline.utils
];
weather.stack = [
values.backgroundBlock.normal
values.underline.weather
];
};
};
in {
bar = {
background = values.foreground.none;
foreground = values.foreground.normal;
font = values.font.main;
height =
if laptop
then 25
else 45;
margin =
if laptop
then 5
else 10;
location = "top";
layer = "bottom";
spacing = 0;
border = {
margin = 0;
top-margin = 10;
};
left = [
{
river = let
tag_base_setting = {
map = let
normal = {
string = {
margin = 10;
text = "{id}";
};
};
in {
default = normal;
conditions = {
"state == focused" = {
string = {
deco = {
stack = [
{background = {color = values.background.tag;};}
values.underline.focused
];
};
margin = 10;
text = "{id}";
};
};
"state == invisible" = {
map = {
conditions = {
occupied = {
string = {
deco = {background = {color = values.background.tag2;};};
margin = 10;
text = "{id}";
};
};
"~occupied" = normal;
};
};
};
"state == unfocused" = {
string = {
deco = {background = {color = values.background.tag2;};};
margin = 10;
text = "{id}";
};
};
"state == urgent" = {
string = {
deco = {
stack = [
{background = {color = values.background.urgent;};}
values.underline.urgent
];
};
margin = 10;
text = "{id}";
};
};
};
};
};
in {
content = {
map = {
conditions = {
"id == 1" = tag_base_setting;
"id == 2" = tag_base_setting;
"id == 3" = tag_base_setting;
"id == 4" = tag_base_setting;
"id == 5" = tag_base_setting;
"id == 6" = tag_base_setting;
"id == 7" = tag_base_setting;
"id == 8" = tag_base_setting;
"id == 9" = tag_base_setting;
};
on-click = {
left = shellExec "riverctl set-focused-tags $((1 << ({id} - 1)))";
middle = shellExec "riverctl toggle-view-tags $((1 << ({id} -1)))";
right = shellExec "riverctl toggle-focused-tags $((1 << ({id} -1)))";
};
};
};
title = {
map = {
conditions = {"title == \"\"" = {string = {text = "";};};};
default = {
string = {
max = 35;
deco = values.underline.title;
left-margin = 12;
right-margin = 12;
text = "{title}";
};
};
};
};
};
}
];
center = [
{
clock = {
date-format = "%d/%m/%y (%a)";
time-format = "%H:%M:%S %Z";
foreground = values.foreground.blue;
content = {
string = {
deco = values.combination.clock;
text = " {date} {time} ";
};
};
};
}
];
right =
[
{
script = {
path = scripts.mpd_song_name_script;
content.map.conditions = {
playing = {
string = {
deco = values.combination.weather;
text = "{song} ";
};
};
"~playing" = {
string = {
deco = values.combination.weather;
text = "";
};
};
};
};
}
{
script = {
path = scripts.volume_script;
content.map = {
on-click = shellExec "pavucontrol";
conditions = {
muted = {
string = {
deco = values.backgroundBlock.urgent;
text = " ";
};
};
"~muted" = {
string = {
deco = values.combination.utils;
text = " {volume}% ";
};
};
};
};
};
}
{
script = {
path = scripts.cpu_script;
content.string = {
deco = values.combination.resources;
text = " {cpu}% ";
};
};
}
{
script = {
path = scripts.memory_script;
content.map.conditions = {
swapstate = {
string = {
deco = values.combination.resources;
text = " {memperc}%({swapperc}%) ";
};
};
"~swapstate" = {
string = {
deco = values.combination.resources;
text = " {memperc}% ";
};
};
};
};
}
{
script = {
path = scripts.disk_script;
content.string = {
deco = values.combination.resources;
text = " {diskspace}({diskperc})";
};
};
}
]
++ lib.optionals laptop [
{
backlight = {
name = laptopBacklightName;
content.string = {
text = " {percent}% ";
deco = values.combination.utils;
};
};
}
{
battery = {
name = "BAT0";
poll-interval = 300;
content.list.items = [
{
ramp = {
tag = "capacity";
items = let
stack = [
values.backgroundBlock.normal
values.underline.battery
];
in [
{
string = {
text = " {capacity}%({estimate}) ";
deco =
values.backgroundBlock.urgent;
};
}
{
string = {
text = " {capacity}%({estimate}) ";
deco.stack = stack;
};
}
{
string = {
text = " {capacity}%({estimate}) ";
deco.stack = stack;
};
}
{
string = {
text = " {capacity}%({estimate}) ";
deco.stack = stack;
};
}
{
string = {
text = " {capacity}%({estimate}) ";
deco.stack = stack;
};
}
];
};
}
];
};
}
];
};
}
|