mirror of
https://github.com/traxys/Nixfiles.git
synced 2026-04-10 06:57:10 +02:00
waybar: Move from wm module
This commit is contained in:
parent
bc3e90b9e7
commit
68431ecb32
8 changed files with 357 additions and 324 deletions
|
|
@ -159,6 +159,7 @@
|
|||
wayland-pipewire-idle-inhibit = inputs.wayland-pipewire-idle-inhibit.homeModules.default;
|
||||
};
|
||||
wm = import ./wm/hm.nix;
|
||||
waybar = import ./waybar/hm.nix;
|
||||
de = import ./de/hm.nix;
|
||||
personal-gui = import ./personal-gui/hm.nix;
|
||||
gaming = import ./gaming/hm.nix;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
personal-cli
|
||||
gui
|
||||
wm
|
||||
waybar
|
||||
gaming
|
||||
];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
personal-cli
|
||||
gui
|
||||
wm
|
||||
waybar
|
||||
personal-gui
|
||||
];
|
||||
unfreePackages = [
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
minimal
|
||||
personal-cli
|
||||
gui
|
||||
waybar
|
||||
wm
|
||||
];
|
||||
};
|
||||
|
|
@ -37,6 +38,7 @@
|
|||
work
|
||||
personal-cli
|
||||
gui
|
||||
waybar
|
||||
wm
|
||||
])
|
||||
++ [
|
||||
|
|
|
|||
263
waybar/hm.nix
Normal file
263
waybar/hm.nix
Normal file
|
|
@ -0,0 +1,263 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
{
|
||||
options.traxys.waybar =
|
||||
let
|
||||
jsonFormat = pkgs.formats.json { };
|
||||
|
||||
modulesListOpt = lib.mkOption {
|
||||
type = lib.types.listOf (
|
||||
lib.types.submodule {
|
||||
options = {
|
||||
name = lib.mkOption { type = lib.types.str; };
|
||||
priority = lib.mkOption { type = lib.types.int; };
|
||||
};
|
||||
}
|
||||
);
|
||||
default = [ ];
|
||||
apply = opt: builtins.map (v: v.name) (lib.sortOn (v: v.priority) opt);
|
||||
};
|
||||
in
|
||||
{
|
||||
enable = lib.mkEnableOption "waybar configuration";
|
||||
|
||||
mkIcon = lib.mkOption {
|
||||
type = lib.types.functionTo lib.types.str;
|
||||
readOnly = true;
|
||||
default = icon: "<span font='20' rise='-3000' line_height='0.7'>${icon}</span>";
|
||||
};
|
||||
|
||||
modules-left = modulesListOpt;
|
||||
modules-center = modulesListOpt;
|
||||
modules-right = modulesListOpt;
|
||||
|
||||
modules =
|
||||
let
|
||||
moduleOpt =
|
||||
{
|
||||
side ? "right",
|
||||
enable ? true,
|
||||
priority,
|
||||
extraOpts ? { },
|
||||
settings,
|
||||
}:
|
||||
{
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = enable;
|
||||
};
|
||||
|
||||
side = lib.mkOption {
|
||||
type = lib.types.enum [
|
||||
"left"
|
||||
"center"
|
||||
"right"
|
||||
];
|
||||
default = side;
|
||||
};
|
||||
|
||||
priority = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = priority;
|
||||
};
|
||||
|
||||
settings = lib.mkOption {
|
||||
inherit (jsonFormat) type;
|
||||
default = settings;
|
||||
};
|
||||
}
|
||||
// extraOpts;
|
||||
|
||||
inherit (config.traxys.waybar) mkIcon;
|
||||
in
|
||||
{
|
||||
#
|
||||
# Left
|
||||
#
|
||||
|
||||
"custom/khal" = moduleOpt {
|
||||
enable = false;
|
||||
side = "left";
|
||||
priority = 5;
|
||||
settings = {
|
||||
format = "{}";
|
||||
tooltip = true;
|
||||
interval = 300;
|
||||
format-icons = {
|
||||
default = "";
|
||||
};
|
||||
exec = "${lib.getExe pkgs.python3} ${./waybar-khal.py}";
|
||||
return-type = "json";
|
||||
};
|
||||
};
|
||||
|
||||
"network#wifi" = moduleOpt {
|
||||
enable = false;
|
||||
side = "left";
|
||||
priority = 10;
|
||||
extraOpts = {
|
||||
interface = lib.mkOption { type = lib.types.str; };
|
||||
};
|
||||
settings = {
|
||||
inherit (config.traxys.waybar.modules."network#wifi") interface;
|
||||
format-wifi = "{essid} ({signalStrength}%) ";
|
||||
format-disconnected = "";
|
||||
};
|
||||
};
|
||||
|
||||
"sway/workspaces" = moduleOpt {
|
||||
enable = false;
|
||||
side = "left";
|
||||
priority = 20;
|
||||
settings = {
|
||||
persistent-workspaces = {
|
||||
"" = [ ];
|
||||
"" = [ ];
|
||||
"1:" = [ ];
|
||||
};
|
||||
numeric-first = true;
|
||||
};
|
||||
};
|
||||
|
||||
"sway/mode" = moduleOpt {
|
||||
enable = false;
|
||||
side = "left";
|
||||
priority = 30;
|
||||
settings = { };
|
||||
};
|
||||
|
||||
#
|
||||
# Center
|
||||
#
|
||||
|
||||
"sway/window" = moduleOpt {
|
||||
enable = false;
|
||||
side = "center";
|
||||
priority = 10;
|
||||
settings = {
|
||||
max-length = 50;
|
||||
};
|
||||
};
|
||||
|
||||
#
|
||||
# Right
|
||||
#
|
||||
|
||||
"cpu" = moduleOpt {
|
||||
priority = 10;
|
||||
settings = {
|
||||
format = "${mkIcon ""} {load}";
|
||||
};
|
||||
};
|
||||
|
||||
"memory" = moduleOpt {
|
||||
priority = 20;
|
||||
settings = {
|
||||
format = "${mkIcon ""} {used:.0f}G/{total:.0f}G";
|
||||
};
|
||||
};
|
||||
|
||||
"disk#home" = moduleOpt {
|
||||
priority = 30;
|
||||
settings = {
|
||||
path = "/home";
|
||||
format = "${mkIcon ""} {free}";
|
||||
};
|
||||
};
|
||||
|
||||
"disk#root" = moduleOpt {
|
||||
priority = 40;
|
||||
settings = {
|
||||
path = "/";
|
||||
format = " {percentage_free}%";
|
||||
};
|
||||
};
|
||||
|
||||
"battery" = moduleOpt {
|
||||
enable = false;
|
||||
priority = 50;
|
||||
settings = {
|
||||
format = "{capacity}% ${mkIcon "{icon}"}";
|
||||
format-icons = [
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
"clock" = moduleOpt {
|
||||
priority = 60;
|
||||
settings = {
|
||||
format-alt = "{:%a, %d. %b %H:%M}";
|
||||
};
|
||||
};
|
||||
|
||||
"tray" = moduleOpt {
|
||||
priority = 70;
|
||||
settings = { };
|
||||
};
|
||||
|
||||
"pulseaudio" = moduleOpt {
|
||||
priority = 80;
|
||||
settings = { };
|
||||
};
|
||||
};
|
||||
};
|
||||
config =
|
||||
let
|
||||
cfg = config.traxys.waybar;
|
||||
|
||||
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
|
||||
lib.mkIf cfg.enable {
|
||||
traxys.waybar.modules-left = moduleListSide "left";
|
||||
traxys.waybar.modules-center = moduleListSide "center";
|
||||
traxys.waybar.modules-right = moduleListSide "right";
|
||||
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
style = builtins.readFile ./waybar.css;
|
||||
settings = [
|
||||
(
|
||||
{
|
||||
layer = "top";
|
||||
position = "bottom";
|
||||
inherit (cfg) modules-left;
|
||||
inherit (cfg) modules-center;
|
||||
inherit (cfg) modules-right;
|
||||
}
|
||||
// (builtins.mapAttrs (_: v: v.settings) (lib.filterAttrs (_: v: v.enable) cfg.modules))
|
||||
)
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
413
wm/sway.nix
413
wm/sway.nix
|
|
@ -24,334 +24,99 @@ let
|
|||
startup = startupNotifications ++ cfg.startup;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
traxys.waybar =
|
||||
with lib.types;
|
||||
let
|
||||
jsonFormat = pkgs.formats.json { };
|
||||
config = mkIf (cfg.enable && cfg.kind == "sway") {
|
||||
home.packages = with pkgs; [ sway ] ++ (if cfg.wallpaper != null then [ pkgs.swaybg ] else [ ]);
|
||||
|
||||
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;
|
||||
home.sessionVariables = {
|
||||
MOZ_ENABLE_WAYLAND = "1";
|
||||
XDG_CURRENT_DESKTOP = "sway";
|
||||
LIBSEAT_BACKEND = "logind";
|
||||
_JAVA_AWT_WM_NONREPARENTING = 1;
|
||||
};
|
||||
|
||||
modules =
|
||||
let
|
||||
moduleOpt =
|
||||
{
|
||||
side ? "right",
|
||||
enable ? true,
|
||||
priority,
|
||||
extraOpts ? { },
|
||||
settings,
|
||||
}:
|
||||
{
|
||||
enable = mkOption {
|
||||
type = bool;
|
||||
default = enable;
|
||||
};
|
||||
programs.rofi.package = pkgs.rofi-wayland;
|
||||
|
||||
side = mkOption {
|
||||
type = enum [
|
||||
"left"
|
||||
"center"
|
||||
"right"
|
||||
];
|
||||
default = side;
|
||||
};
|
||||
priority = mkOption {
|
||||
type = int;
|
||||
default = priority;
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
inherit (jsonFormat) type;
|
||||
default = settings;
|
||||
};
|
||||
}
|
||||
// extraOpts;
|
||||
|
||||
is = "<span font='20' rise='-3000' line_height='0.7'>";
|
||||
ie = "</span>";
|
||||
in
|
||||
{
|
||||
# Left
|
||||
|
||||
"custom/khal" = moduleOpt {
|
||||
enable = false;
|
||||
side = "left";
|
||||
priority = 5;
|
||||
settings = {
|
||||
format = "{}";
|
||||
tooltip = true;
|
||||
interval = 300;
|
||||
format-icons = {
|
||||
default = "";
|
||||
};
|
||||
exec = "${lib.getExe pkgs.python3} ${./waybar-khal.py}";
|
||||
return-type = "json";
|
||||
};
|
||||
};
|
||||
|
||||
"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}%) ";
|
||||
format-disconnected = "";
|
||||
};
|
||||
};
|
||||
|
||||
"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 = [
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
"clock" = moduleOpt {
|
||||
priority = 60;
|
||||
settings = {
|
||||
format-alt = "{:%a, %d. %b %H:%M}";
|
||||
};
|
||||
};
|
||||
|
||||
"tray" = moduleOpt {
|
||||
priority = 70;
|
||||
settings = { };
|
||||
};
|
||||
|
||||
"pulseaudio" = moduleOpt {
|
||||
priority = 80;
|
||||
settings = { };
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
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;
|
||||
settings = {
|
||||
inherit (cfg.notifications) font;
|
||||
margin = "20,20,5,5";
|
||||
default-timeout = cfg.notifications.defaultTimeout;
|
||||
"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 = mkMerge [
|
||||
(mkIf (cfg.wallpaper != null) ''
|
||||
output "*" bg ${cfg.wallpaper} fill
|
||||
'')
|
||||
''
|
||||
for_window [app_id="discord"] border none
|
||||
''
|
||||
];
|
||||
config = {
|
||||
inherit startup;
|
||||
inherit (cfg) modifier;
|
||||
bars = [ { command = "waybar"; } ];
|
||||
input =
|
||||
let
|
||||
inherit (config.extraInfo) inputs;
|
||||
inputsCfg = [
|
||||
(
|
||||
if inputs.touchpad != null then
|
||||
{
|
||||
name = inputs.touchpad;
|
||||
value = {
|
||||
dwt = "disable";
|
||||
};
|
||||
}
|
||||
else
|
||||
null
|
||||
)
|
||||
{
|
||||
name = "type:keyboard";
|
||||
value = {
|
||||
xkb_layout = "fr(ergol),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";
|
||||
}
|
||||
];
|
||||
};
|
||||
inherit (common) keybindings;
|
||||
inherit (common) workspaceOutputAssign;
|
||||
inherit (common) assigns;
|
||||
seat."*" = {
|
||||
xcursor_theme = "${config.home.pointerCursor.name} ${toString config.home.pointerCursor.size}";
|
||||
};
|
||||
services.mako = mkIf cfg.notifications.enable {
|
||||
enable = true;
|
||||
settings = {
|
||||
inherit (cfg.notifications) font;
|
||||
margin = "20,20,5,5";
|
||||
default-timeout = cfg.notifications.defaultTimeout;
|
||||
"mode=do-not-disturb" = {
|
||||
invisible = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
traxys.waybar.enable = true;
|
||||
traxys.waybar.modules."sway/workspaces".enable = true;
|
||||
traxys.waybar.modules."sway/mode".enable = true;
|
||||
traxys.waybar.modules."sway/window".enable = true;
|
||||
|
||||
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 = mkMerge [
|
||||
(mkIf (cfg.wallpaper != null) ''
|
||||
output "*" bg ${cfg.wallpaper} fill
|
||||
'')
|
||||
''
|
||||
for_window [app_id="discord"] border none
|
||||
''
|
||||
];
|
||||
config = {
|
||||
inherit startup;
|
||||
inherit (cfg) modifier;
|
||||
bars = [ { command = "waybar"; } ];
|
||||
input =
|
||||
let
|
||||
inherit (config.extraInfo) inputs;
|
||||
inputsCfg = [
|
||||
(
|
||||
if inputs.touchpad != null then
|
||||
{
|
||||
name = inputs.touchpad;
|
||||
value = {
|
||||
dwt = "disable";
|
||||
};
|
||||
}
|
||||
else
|
||||
null
|
||||
)
|
||||
{
|
||||
name = "type:keyboard";
|
||||
value = {
|
||||
xkb_layout = "fr(ergol),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";
|
||||
}
|
||||
];
|
||||
};
|
||||
inherit (common) keybindings;
|
||||
inherit (common) workspaceOutputAssign;
|
||||
inherit (common) assigns;
|
||||
seat."*" = {
|
||||
xcursor_theme = "${config.home.pointerCursor.name} ${toString config.home.pointerCursor.size}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue