about summary refs log blame commit diff stats
path: root/modules/by-name/ya/yambar/settings/default.nix
blob: 52c3d1f77344d071b9720666645e380d7db45097 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11









                                                                                         
               










                                      
                        





                                          



                           
                                                         



                           



















































                                                                   
              
               
              
                     
                
              
                      







                              
                              












                                                                        
                                







                                                                                   
                                      








                                                                             
                                









                                                                           
                                






























                                                                                     
                           
                                                
                                    





















































































































                                                         
                                
















































                                                               
# 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;
                      };
                    }
                  ];
                };
              }
            ];
          };
        }
      ];
  };
}