mirror of
https://github.com/traxys/Nixfiles.git
synced 2026-03-17 18:10:33 +01:00
personal-gui: Allow a more powerful customisation of waybar per machine
This commit is contained in:
parent
6f20e7f76a
commit
f8cc6cf4fa
1 changed files with 307 additions and 158 deletions
|
|
@ -21,173 +21,322 @@ with builtins; let
|
|||
|
||||
startup = startupNotifications ++ cfg.startup;
|
||||
in {
|
||||
config = mkIf (cfg.enable && cfg.kind == "sway") {
|
||||
home.packages = with pkgs;
|
||||
[
|
||||
sway
|
||||
]
|
||||
++ (
|
||||
if cfg.wallpaper != null
|
||||
then [pkgs.swaybg]
|
||||
else []
|
||||
);
|
||||
options = {
|
||||
traxys.waybar = with lib.types; let
|
||||
jsonFormat = pkgs.formats.json {};
|
||||
|
||||
home.sessionVariables = {
|
||||
MOZ_ENABLE_WAYLAND = "1";
|
||||
XDG_CURRENT_DESKTOP = "sway";
|
||||
LIBSEAT_BACKEND = "logind";
|
||||
_JAVA_AWT_WM_NONREPARENTING = 1;
|
||||
};
|
||||
modulesListOpt = mkOption {
|
||||
type = listOf (submodule {
|
||||
options = {
|
||||
name = mkOption {type = str;};
|
||||
priority = mkOption {
|
||||
type = types.int;
|
||||
};
|
||||
};
|
||||
});
|
||||
default = [];
|
||||
apply = opt:
|
||||
builtins.map (v: v.name) (
|
||||
lib.sortOn (v: v.priority) opt
|
||||
);
|
||||
};
|
||||
in {
|
||||
modules-left = modulesListOpt;
|
||||
modules-center = modulesListOpt;
|
||||
modules-right = modulesListOpt;
|
||||
|
||||
programs.rofi.package = pkgs.rofi-wayland;
|
||||
|
||||
services.mako = mkIf cfg.notifications.enable {
|
||||
enable = true;
|
||||
font = cfg.notifications.font;
|
||||
margin = "20,20,5,5";
|
||||
defaultTimeout = cfg.notifications.defaultTimeout;
|
||||
extraConfig = ''
|
||||
[mode=do-not-disturb]
|
||||
invisible=1
|
||||
'';
|
||||
};
|
||||
|
||||
programs = {
|
||||
waybar = {
|
||||
enable = true;
|
||||
style = builtins.readFile ./waybar.css;
|
||||
settings = [
|
||||
modules = let
|
||||
moduleOpt = {
|
||||
side ? "right",
|
||||
enable ? true,
|
||||
priority,
|
||||
extraOpts ? {},
|
||||
settings,
|
||||
}:
|
||||
{
|
||||
layer = "top";
|
||||
position = "bottom";
|
||||
modules-left = [
|
||||
"network#wifi"
|
||||
"sway/workspaces"
|
||||
"sway/mode"
|
||||
];
|
||||
modules-center = ["sway/window"];
|
||||
modules-right = [
|
||||
"cpu"
|
||||
"memory"
|
||||
"disk#home"
|
||||
"disk#root"
|
||||
"battery"
|
||||
"clock"
|
||||
"tray"
|
||||
"pulseaudio"
|
||||
];
|
||||
modules = let
|
||||
is = "<span font='20' rise='-3000' line_height='0.7'>";
|
||||
ie = "</span>";
|
||||
in {
|
||||
"custom/khal" = {
|
||||
format = "{}";
|
||||
tooltip = true;
|
||||
interval = 300;
|
||||
format-icons = {
|
||||
default = "";
|
||||
};
|
||||
exec = "${lib.getExe pkgs.python3} ${./waybar-khal.py}";
|
||||
return-type = "json";
|
||||
};
|
||||
"sway/workspaces" = {
|
||||
persistent_workspaces = {
|
||||
"" = [];
|
||||
"" = [];
|
||||
"1:" = [];
|
||||
};
|
||||
numeric-first = true;
|
||||
};
|
||||
"network#wifi" = {
|
||||
interface = "wlp1s0";
|
||||
format-wifi = "{essid} ({signalStrength}%) ";
|
||||
};
|
||||
cpu = {
|
||||
format = "${is}${ie} {load}";
|
||||
};
|
||||
memory = {
|
||||
format = "${is}${ie} {used:.0f}G/{total:.0f}G";
|
||||
};
|
||||
"sway/window" = {
|
||||
max-length = 50;
|
||||
};
|
||||
"disk#home" = {
|
||||
path = "/home";
|
||||
format = "${is}${ie} {free}";
|
||||
};
|
||||
"disk#root" = {
|
||||
path = "/";
|
||||
format = " {percentage_free}%";
|
||||
};
|
||||
"battery" = {
|
||||
format = "{capacity}% ${is}{icon}${ie}";
|
||||
format-icons = ["" "" "" "" ""];
|
||||
};
|
||||
"clock" = {
|
||||
format-alt = "{:%a, %d. %b %H:%M}";
|
||||
};
|
||||
enable = mkOption {
|
||||
type = bool;
|
||||
default = enable;
|
||||
};
|
||||
|
||||
side = mkOption {
|
||||
type = enum ["left" "center" "right"];
|
||||
default = side;
|
||||
};
|
||||
priority = mkOption {
|
||||
type = int;
|
||||
default = priority;
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
inherit (jsonFormat) type;
|
||||
default = settings;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
// extraOpts;
|
||||
|
||||
wm.printScreen.command = mkDefault "${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" - | ${pkgs.wl-clipboard}/bin/wl-copy -t image/png";
|
||||
wm.exit.command = mkDefault "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'";
|
||||
is = "<span font='20' rise='-3000' line_height='0.7'>";
|
||||
ie = "</span>";
|
||||
in {
|
||||
/*
|
||||
Left
|
||||
*/
|
||||
|
||||
wayland.windowManager.sway = {
|
||||
enable = true;
|
||||
extraConfig = mkIf (cfg.wallpaper != null) ''
|
||||
output "*" bg ${cfg.wallpaper} fill
|
||||
'';
|
||||
config = {
|
||||
inherit startup;
|
||||
modifier = cfg.modifier;
|
||||
bars = [
|
||||
{
|
||||
command = "waybar";
|
||||
}
|
||||
];
|
||||
input = let
|
||||
inputs = config.extraInfo.inputs;
|
||||
inputsCfg = [
|
||||
(
|
||||
if inputs.touchpad != null
|
||||
then {
|
||||
name = inputs.touchpad;
|
||||
value = {dwt = "disable";};
|
||||
}
|
||||
else null
|
||||
)
|
||||
{
|
||||
name = "type:keyboard";
|
||||
value = {
|
||||
xkb_layout = "us(dvp),us";
|
||||
xkb_options = "compose:102";
|
||||
};
|
||||
}
|
||||
];
|
||||
in
|
||||
builtins.listToAttrs (builtins.filter (s: s != null) inputsCfg);
|
||||
output = config.extraInfo.outputs;
|
||||
fonts = common.mkFont cfg.font;
|
||||
window = {
|
||||
titlebar = true;
|
||||
commands = [
|
||||
{
|
||||
criteria.class = "davmail-DavGateway";
|
||||
command = "floating enable";
|
||||
}
|
||||
{
|
||||
criteria.window_type = "menu";
|
||||
command = "floating enable";
|
||||
}
|
||||
];
|
||||
"network#wifi" = moduleOpt {
|
||||
side = "left";
|
||||
enable = false;
|
||||
priority = 10;
|
||||
extraOpts = {
|
||||
interface = mkOption {
|
||||
type = str;
|
||||
};
|
||||
};
|
||||
settings = {
|
||||
inherit (config.traxys.waybar.modules."network#wifi") interface;
|
||||
format-wifi = "{essid} ({signalStrength}%) ";
|
||||
};
|
||||
};
|
||||
|
||||
"sway/workspaces" = moduleOpt {
|
||||
side = "left";
|
||||
priority = 20;
|
||||
settings = {
|
||||
persistent-workspaces = {
|
||||
"" = [];
|
||||
"" = [];
|
||||
"1:" = [];
|
||||
};
|
||||
numeric-first = true;
|
||||
};
|
||||
};
|
||||
|
||||
"sway/mode" = moduleOpt {
|
||||
side = "left";
|
||||
priority = 30;
|
||||
settings = {};
|
||||
};
|
||||
|
||||
/*
|
||||
Center
|
||||
*/
|
||||
|
||||
"sway/window" = moduleOpt {
|
||||
side = "center";
|
||||
priority = 10;
|
||||
settings = {
|
||||
max-length = 50;
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
Right
|
||||
*/
|
||||
|
||||
"cpu" = moduleOpt {
|
||||
priority = 10;
|
||||
settings = {
|
||||
format = "${is}${ie} {load}";
|
||||
};
|
||||
};
|
||||
|
||||
"memory" = moduleOpt {
|
||||
priority = 20;
|
||||
settings = {
|
||||
format = "${is}${ie} {used:.0f}G/{total:.0f}G";
|
||||
};
|
||||
};
|
||||
|
||||
"disk#home" = moduleOpt {
|
||||
priority = 30;
|
||||
settings = {
|
||||
path = "/home";
|
||||
format = "${is}${ie} {free}";
|
||||
};
|
||||
};
|
||||
|
||||
"disk#root" = moduleOpt {
|
||||
priority = 40;
|
||||
settings = {
|
||||
path = "/";
|
||||
format = " {percentage_free}%";
|
||||
};
|
||||
};
|
||||
|
||||
"battery" = moduleOpt {
|
||||
enable = false;
|
||||
priority = 50;
|
||||
settings = {
|
||||
format = "{capacity}% ${is}{icon}${ie}";
|
||||
format-icons = ["" "" "" "" ""];
|
||||
};
|
||||
};
|
||||
|
||||
"custom/khal" = moduleOpt {
|
||||
enable = false;
|
||||
priority = 55;
|
||||
settings = {
|
||||
format = "{}";
|
||||
tooltip = true;
|
||||
interval = 300;
|
||||
format-icons = {
|
||||
default = "";
|
||||
};
|
||||
exec = "${lib.getExe pkgs.python3} ${./waybar-khal.py}";
|
||||
return-type = "json";
|
||||
};
|
||||
};
|
||||
|
||||
"clock" = moduleOpt {
|
||||
priority = 60;
|
||||
settings = {
|
||||
format-alt = "{:%a, %d. %b %H:%M}";
|
||||
};
|
||||
};
|
||||
|
||||
"tray" = moduleOpt {
|
||||
priority = 70;
|
||||
settings = {};
|
||||
};
|
||||
|
||||
"pulseaudio" = moduleOpt {
|
||||
priority = 80;
|
||||
settings = {};
|
||||
};
|
||||
keybindings = common.keybindings;
|
||||
workspaceOutputAssign = common.workspaceOutputAssign;
|
||||
assigns = common.assigns;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = let
|
||||
addKey = key: value: attrs: attrs // {${key} = attrs.${key} // value;};
|
||||
modulesList =
|
||||
lib.foldlAttrs
|
||||
(acc: name: mod: addKey mod.side {${name} = mod;} acc)
|
||||
{
|
||||
center = {};
|
||||
left = {};
|
||||
right = {};
|
||||
}
|
||||
config.traxys.waybar.modules;
|
||||
enabledModulesSide = side: lib.filterAttrs (_: v: v.enable) modulesList.${side};
|
||||
moduleListSide = side:
|
||||
lib.mapAttrsToList (name: v: {
|
||||
inherit name;
|
||||
inherit (v) priority;
|
||||
}) (enabledModulesSide side);
|
||||
in
|
||||
mkIf (cfg.enable && cfg.kind == "sway") {
|
||||
traxys.waybar.modules-left = moduleListSide "left";
|
||||
traxys.waybar.modules-center = moduleListSide "center";
|
||||
traxys.waybar.modules-right = moduleListSide "right";
|
||||
|
||||
home.packages = with pkgs;
|
||||
[
|
||||
sway
|
||||
]
|
||||
++ (
|
||||
if cfg.wallpaper != null
|
||||
then [pkgs.swaybg]
|
||||
else []
|
||||
);
|
||||
|
||||
home.sessionVariables = {
|
||||
MOZ_ENABLE_WAYLAND = "1";
|
||||
XDG_CURRENT_DESKTOP = "sway";
|
||||
LIBSEAT_BACKEND = "logind";
|
||||
_JAVA_AWT_WM_NONREPARENTING = 1;
|
||||
};
|
||||
|
||||
programs.rofi.package = pkgs.rofi-wayland;
|
||||
|
||||
services.mako = mkIf cfg.notifications.enable {
|
||||
enable = true;
|
||||
font = cfg.notifications.font;
|
||||
margin = "20,20,5,5";
|
||||
defaultTimeout = cfg.notifications.defaultTimeout;
|
||||
extraConfig = ''
|
||||
[mode=do-not-disturb]
|
||||
invisible=1
|
||||
'';
|
||||
};
|
||||
|
||||
programs = {
|
||||
waybar = {
|
||||
enable = true;
|
||||
style = builtins.readFile ./waybar.css;
|
||||
settings = [
|
||||
(
|
||||
{
|
||||
layer = "top";
|
||||
position = "bottom";
|
||||
inherit (config.traxys.waybar) modules-left;
|
||||
inherit (config.traxys.waybar) modules-center;
|
||||
inherit (config.traxys.waybar) modules-right;
|
||||
}
|
||||
// (
|
||||
builtins.mapAttrs (_: v: v.settings)
|
||||
(lib.filterAttrs (_: v: v.enable) config.traxys.waybar.modules)
|
||||
)
|
||||
)
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
wm.printScreen.command = mkDefault "${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" - | ${pkgs.wl-clipboard}/bin/wl-copy -t image/png";
|
||||
wm.exit.command = mkDefault "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'";
|
||||
|
||||
wayland.windowManager.sway = {
|
||||
enable = true;
|
||||
extraConfig = mkIf (cfg.wallpaper != null) ''
|
||||
output "*" bg ${cfg.wallpaper} fill
|
||||
'';
|
||||
config = {
|
||||
inherit startup;
|
||||
modifier = cfg.modifier;
|
||||
bars = [
|
||||
{
|
||||
command = "waybar";
|
||||
}
|
||||
];
|
||||
input = let
|
||||
inputs = config.extraInfo.inputs;
|
||||
inputsCfg = [
|
||||
(
|
||||
if inputs.touchpad != null
|
||||
then {
|
||||
name = inputs.touchpad;
|
||||
value = {dwt = "disable";};
|
||||
}
|
||||
else null
|
||||
)
|
||||
{
|
||||
name = "type:keyboard";
|
||||
value = {
|
||||
xkb_layout = "us(dvp),us";
|
||||
xkb_options = "compose:102";
|
||||
};
|
||||
}
|
||||
];
|
||||
in
|
||||
builtins.listToAttrs (builtins.filter (s: s != null) inputsCfg);
|
||||
output = config.extraInfo.outputs;
|
||||
fonts = common.mkFont cfg.font;
|
||||
window = {
|
||||
titlebar = true;
|
||||
commands = [
|
||||
{
|
||||
criteria.class = "davmail-DavGateway";
|
||||
command = "floating enable";
|
||||
}
|
||||
{
|
||||
criteria.window_type = "menu";
|
||||
command = "floating enable";
|
||||
}
|
||||
];
|
||||
};
|
||||
keybindings = common.keybindings;
|
||||
workspaceOutputAssign = common.workspaceOutputAssign;
|
||||
assigns = common.assigns;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue