mirror of
https://github.com/scorpion-26/gBar.git
synced 2024-11-22 03:02:49 +00:00
Add configuration system
The config file format could still be improved though...
This commit is contained in:
parent
d1b062bad9
commit
6621e3abc2
3 changed files with 79 additions and 28 deletions
19
README.md
19
README.md
|
@ -77,8 +77,17 @@ Bar:
|
||||||
Audio Flyin:
|
Audio Flyin:
|
||||||
- Audio control
|
- Audio control
|
||||||
|
|
||||||
|
## Configuration for your system
|
||||||
|
Copy my personal config(found under data/config) into ~/.config/gBar/config and modify it to your needs(Mine will 100% not work, since it is dependant on my dotfiles).
|
||||||
|
The config must be *exactly* formatted the following way(Don't forget the space between the variable and the data!):
|
||||||
|
```
|
||||||
|
[Variable]: [value]
|
||||||
|
[Variable]: [value]
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
## Plugins
|
## Plugins
|
||||||
gBar utilizes a plugin system for custom widgets.
|
gBar utilizes a plugin system for custom widgets anyone can create without modifying the source code.
|
||||||
Plugins are native shared-libraries, which need to be placed inside ```~/.local/lib/gBar```, ```/usr/lib/gBar``` or ```/usr/local/lib/gBar```.
|
Plugins are native shared-libraries, which need to be placed inside ```~/.local/lib/gBar```, ```/usr/lib/gBar``` or ```/usr/local/lib/gBar```.
|
||||||
Inside example/ there is an example plugin setup. To build and run it, run the following commands inside the example directory:
|
Inside example/ there is an example plugin setup. To build and run it, run the following commands inside the example directory:
|
||||||
|
|
||||||
|
@ -133,12 +142,8 @@ First, find where the data is located for gBar. Possible locations:
|
||||||
Delete /tmp/gBar__audio.
|
Delete /tmp/gBar__audio.
|
||||||
This happens, when you kill the widget before it closes automatically after a few seconds.
|
This happens, when you kill the widget before it closes automatically after a few seconds.
|
||||||
|
|
||||||
### CPU Temperature is wrong/Lock doesn't work
|
### CPU Temperature is wrong / Lock doesn't work / Exiting WM does not work
|
||||||
*This is caused by the way my system and/or Linux is setup.*
|
See *Configuration for your system*
|
||||||
|
|
||||||
Temperature: Edit the variable ```tempFilePath``` in ```src/System.cpp``` to the correct thermal zone file and recompile. The one for my system is *very* likely wrong.
|
|
||||||
|
|
||||||
Lock: There is no generic way to lock a system. So please, implement it to suit your needs (Replace XXX by a shell command in ```src/System.cpp```)
|
|
||||||
|
|
||||||
### The icons are not showing!
|
### The icons are not showing!
|
||||||
Please install a Nerd Font from https://www.nerdfonts.com (I use Caskaydia Cove NF), and change style.css/style.scss accordingly (Refer to 'I want to customize the colors' for that)
|
Please install a Nerd Font from https://www.nerdfonts.com (I use Caskaydia Cove NF), and change style.css/style.scss accordingly (Refer to 'I want to customize the colors' for that)
|
||||||
|
|
4
data/config
Normal file
4
data/config
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
CPUThermalZone: /sys/devices/pci0000:00/0000:00:18.3/hwmon/hwmon2/temp1_input
|
||||||
|
SuspendCommand: ~/.config/scripts/sys.sh suspend
|
||||||
|
LockCommand: ~/.config/scripts/sys.sh lock
|
||||||
|
ExitCommand: killall Hyprland
|
|
@ -21,6 +21,63 @@
|
||||||
|
|
||||||
namespace System
|
namespace System
|
||||||
{
|
{
|
||||||
|
struct Config
|
||||||
|
{
|
||||||
|
std::string cpuThermalZone = ""; // idk, no standard way of doing this.
|
||||||
|
std::string suspendCommand = "systemctl suspend";
|
||||||
|
std::string lockCommand = ""; // idk, no standard way of doing this.
|
||||||
|
std::string exitCommand = ""; // idk, no standard way of doing this.
|
||||||
|
};
|
||||||
|
|
||||||
|
static Config config;
|
||||||
|
|
||||||
|
void LoadConfig()
|
||||||
|
{
|
||||||
|
const char* xdgConfigHome = getenv("XDG_CONFIG_HOME");
|
||||||
|
std::ifstream file;
|
||||||
|
if (xdgConfigHome)
|
||||||
|
{
|
||||||
|
file = std::ifstream(std::string(xdgConfigHome) + "/gBar/config");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::string home = getenv("HOME");
|
||||||
|
file = std::ifstream(home + "/.config/gBar/config");
|
||||||
|
}
|
||||||
|
if (!file.is_open())
|
||||||
|
{
|
||||||
|
LOG("Failed opening config!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
std::string line;
|
||||||
|
while (std::getline(file, line))
|
||||||
|
{
|
||||||
|
std::string* prop = nullptr;
|
||||||
|
if (line.find("CPUThermalZone: ") != std::string::npos)
|
||||||
|
{
|
||||||
|
prop = &config.cpuThermalZone;
|
||||||
|
}
|
||||||
|
else if (line.find("SuspendCommand: ") != std::string::npos)
|
||||||
|
{
|
||||||
|
prop = &config.suspendCommand;
|
||||||
|
}
|
||||||
|
else if (line.find("LockCommand: ") != std::string::npos)
|
||||||
|
{
|
||||||
|
prop = &config.lockCommand;
|
||||||
|
}
|
||||||
|
else if (line.find("ExitCommand: ") != std::string::npos)
|
||||||
|
{
|
||||||
|
prop = &config.exitCommand;
|
||||||
|
}
|
||||||
|
if (prop == nullptr)
|
||||||
|
{
|
||||||
|
LOG("Warning: unknown config var: " << line);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
*prop = line.substr(line.find(' ') + 1); // Everything after space is data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct CPUTimestamp
|
struct CPUTimestamp
|
||||||
{
|
{
|
||||||
size_t total = 0;
|
size_t total = 0;
|
||||||
|
@ -72,8 +129,7 @@ namespace System
|
||||||
|
|
||||||
double GetCPUTemp()
|
double GetCPUTemp()
|
||||||
{
|
{
|
||||||
constexpr const char* tempFilePath = "/sys/devices/pci0000:00/0000:00:18.3/hwmon/hwmon2/temp1_input";
|
std::ifstream tempFile(config.cpuThermalZone);
|
||||||
std::ifstream tempFile(tempFilePath);
|
|
||||||
if (!tempFile.is_open())
|
if (!tempFile.is_open())
|
||||||
{
|
{
|
||||||
return 0.f;
|
return 0.f;
|
||||||
|
@ -141,7 +197,7 @@ namespace System
|
||||||
struct statvfs stat;
|
struct statvfs stat;
|
||||||
int err = statvfs("/", &stat);
|
int err = statvfs("/", &stat);
|
||||||
ASSERT(err == 0, "Cannot stat root!");
|
ASSERT(err == 0, "Cannot stat root!");
|
||||||
|
|
||||||
DiskInfo out{};
|
DiskInfo out{};
|
||||||
out.totalGiB = (double)(stat.f_blocks * stat.f_frsize) / (1024 * 1024 * 1024);
|
out.totalGiB = (double)(stat.f_blocks * stat.f_frsize) / (1024 * 1024 * 1024);
|
||||||
out.usedGiB = (double)((stat.f_blocks - stat.f_bfree) * stat.f_frsize) / (1024 * 1024 * 1024);
|
out.usedGiB = (double)((stat.f_blocks - stat.f_bfree) * stat.f_frsize) / (1024 * 1024 * 1024);
|
||||||
|
@ -396,36 +452,22 @@ namespace System
|
||||||
|
|
||||||
void ExitWM()
|
void ExitWM()
|
||||||
{
|
{
|
||||||
#ifdef HAS_HYPRLAND
|
system(config.exitCommand.c_str());
|
||||||
system("killall Hyprland");
|
|
||||||
#else
|
|
||||||
LOG("Implement me!");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Lock()
|
void Lock()
|
||||||
{
|
{
|
||||||
#ifdef HAS_SYS
|
system(config.lockCommand.c_str());
|
||||||
// My personal lock script
|
|
||||||
system("~/.config/scripts/sys.sh lock");
|
|
||||||
#else
|
|
||||||
LOG("Lock not implemented! Please implement me below!");
|
|
||||||
// system("XXX");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Suspend()
|
void Suspend()
|
||||||
{
|
{
|
||||||
#ifdef HAS_SYS
|
system(config.suspendCommand.c_str());
|
||||||
// My personal suspend script
|
|
||||||
system("~/.config/scripts/sys.sh suspend");
|
|
||||||
#else
|
|
||||||
system("systemctl suspend");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
|
LoadConfig();
|
||||||
#ifdef HAS_NVIDIA
|
#ifdef HAS_NVIDIA
|
||||||
NvidiaGPU::Init();
|
NvidiaGPU::Init();
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue