update: system update & refactor

# Breaking Changes
- sops location movod to "system/dev/<dev-name>/sops/sops-conf.nix"
- flake devices declaration changes
- whole flake update
This commit is contained in:
danny 2025-10-14 16:49:03 +08:00
parent 321f740af0
commit 6a71b601f5
116 changed files with 2576 additions and 3634 deletions

View file

@ -1,14 +1,15 @@
{ mainMod }:
{
mainMod,
osConfig,
config,
nvidia-offload-enabled,
lib,
pkgs,
monitors ? [ ],
...
}:
with builtins;
let
inherit (lib) optionalString;
inherit (osConfig.systemConf.hyprland) monitors;
nvidia-offload-enabled = osConfig.hardware.nvidia.prime.offload.enableOffloadCmd;
notransTag = "notrans";
@ -41,85 +42,87 @@ let
in
toString (if (monitorsNum == 0) then 1 else monitorsNum);
in
[
''${mainMod}, F, exec, ${browser}''
''${mainMod}, RETURN, exec, ${terminal}''
''CTRL ALT, T, exec, ${terminal}''
''${mainMod}, Q, killactive, ''
{
wayland.windowManager.hyprland.settings.bind = [
''${mainMod}, F, exec, ${browser}''
''${mainMod}, RETURN, exec, ${terminal}''
''CTRL ALT, T, exec, ${terminal}''
''${mainMod}, Q, killactive, ''
''${mainMod}, M, exec, ${toggleWlogout}''
''${mainMod}, E, exec, ${filemanager}''
''${mainMod}, V, togglefloating, ''
''ALT, SPACE, exec, rofi -config ~/.config/rofi/apps.rasi -show drun''
''${mainMod}, W, exec, ${rofiWall}''
''${mainMod}, P, pseudo, # dwindle''
''${mainMod}, S, togglesplit, # dwindle''
''CTRL ${mainMod} SHIFT, L, exec, hyprlock''
''${mainMod}, M, exec, ${toggleWlogout}''
''${mainMod}, E, exec, ${filemanager}''
''${mainMod}, V, togglefloating, ''
''ALT, SPACE, exec, rofi -config ~/.config/rofi/apps.rasi -show drun''
''${mainMod}, W, exec, ${rofiWall}''
''${mainMod}, P, pseudo, # dwindle''
''${mainMod}, S, togglesplit, # dwindle''
''CTRL ${mainMod} SHIFT, L, exec, hyprlock''
# Toggle transparent
''${mainMod}, n, tagwindow, ${notransTag}''
# Toggle transparent
''${mainMod}, n, tagwindow, ${notransTag}''
# Bitwarden Selector
''CTRL ${mainMod}, P, exec, ${rbwSelector}''
# Bitwarden Selector
''CTRL ${mainMod}, P, exec, ${rbwSelector}''
# Screenshot
''${mainMod} SHIFT, s, exec, hyprshot -m region ${clipboardOnly}''
''CTRL SHIFT, s, exec, hyprshot -m window ${clipboardOnly}''
''CTRL SHIFT ${mainMod}, s, exec, hyprshot -m output ${clipboardOnly}''
''CTRL ALT, s, exec, hyprshot -m active -m window ${clipboardOnly}''
# Screenshot
''${mainMod} SHIFT, s, exec, hyprshot -m region ${clipboardOnly}''
''CTRL SHIFT, s, exec, hyprshot -m window ${clipboardOnly}''
''CTRL SHIFT ${mainMod}, s, exec, hyprshot -m output ${clipboardOnly}''
''CTRL ALT, s, exec, hyprshot -m active -m window ${clipboardOnly}''
''${mainMod}, PERIOD, exec, rofi -modi emoji -show emoji''
''CTRL ${mainMod}, c, exec, rofi -show calc -modi calc -no-show-match -no-sort''
''${mainMod}, X, exec, sleep 0.1 && swaync-client -t -sw''
''${mainMod} SHIFT, C, centerwindow''
'',F11, fullscreen''
''${mainMod}, C, exec, code''
''${mainMod}, PERIOD, exec, rofi -modi emoji -show emoji''
''CTRL ${mainMod}, c, exec, rofi -show calc -modi calc -no-show-match -no-sort''
''${mainMod}, X, exec, sleep 0.1 && swaync-client -t -sw''
''${mainMod} SHIFT, C, centerwindow''
'',F11, fullscreen''
''${mainMod}, C, exec, code''
# Color Picker
''${mainMod} SHIFT, P, exec, hyprpicker -f hex -a -z''
# Color Picker
''${mainMod} SHIFT, P, exec, hyprpicker -f hex -a -z''
# Cycle windows
''ALT, TAB, cyclenext''
''ALT, TAB, bringactivetotop''
# Cycle windows
''ALT, TAB, cyclenext''
''ALT, TAB, bringactivetotop''
''${mainMod}, h, movefocus, l''
''${mainMod}, l, movefocus, r''
''${mainMod}, k, movefocus, u''
''${mainMod}, j, movefocus, d''
''${mainMod}, h, movefocus, l''
''${mainMod}, l, movefocus, r''
''${mainMod}, k, movefocus, u''
''${mainMod}, j, movefocus, d''
''${mainMod}, mouse_down, workspace, e-${scrollStep}''
''${mainMod}, mouse_up, workspace, e+${scrollStep}''
''${mainMod}, mouse_down, workspace, e-${scrollStep}''
''${mainMod}, mouse_up, workspace, e+${scrollStep}''
''${mainMod} SHIFT, l, movewindow, r''
''${mainMod} SHIFT, h, movewindow, l''
''${mainMod} SHIFT, k, movewindow, u''
''${mainMod} SHIFT, j, movewindow, d''
''${mainMod} SHIFT, l, movewindow, r''
''${mainMod} SHIFT, h, movewindow, l''
''${mainMod} SHIFT, k, movewindow, u''
''${mainMod} SHIFT, j, movewindow, d''
# Media
'',XF86AudioPrev, exec, playerctl previous''
'',XF86AudioNext, exec, playerctl next''
''${mainMod} CTRL, COMMA, exec, playerctl previous''
''${mainMod} CTRL, PERIOD, exec, playerctl next''
'',XF86AudioPlay, exec, playerctl play-pause''
'',XF86AudioStop, exec, playerctl stop''
'',XF86AudioMute, exec, wpctl set-mute @DEFAULT_SINK@ toggle''
# Media
'',XF86AudioPrev, exec, playerctl previous''
'',XF86AudioNext, exec, playerctl next''
''${mainMod} CTRL, COMMA, exec, playerctl previous''
''${mainMod} CTRL, PERIOD, exec, playerctl next''
'',XF86AudioPlay, exec, playerctl play-pause''
'',XF86AudioStop, exec, playerctl stop''
'',XF86AudioMute, exec, wpctl set-mute @DEFAULT_SINK@ toggle''
''${mainMod}, G, workspace, ${toString gamingWorkspace}''
''${mainMod} SHIFT, G, movetoworkspace, ${toString gamingWorkspace}''
]
++ (
# workspaces
# binds $mainMod + [shift +] {1..9} to [move to] workspace {1..9}
builtins.concatLists (
builtins.genList (
i:
let
ws = i + 1;
in
[
"${mainMod}, code:1${toString i}, workspace, ${toString ws}"
"${mainMod} SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}"
]
) 9
)
)
''${mainMod}, G, workspace, ${toString gamingWorkspace}''
''${mainMod} SHIFT, G, movetoworkspace, ${toString gamingWorkspace}''
]
++ (
# workspaces
# binds $mainMod + [shift +] {1..9} to [move to] workspace {1..9}
builtins.concatLists (
builtins.genList (
i:
let
ws = i + 1;
in
[
"${mainMod}, code:1${toString i}, workspace, ${toString ws}"
"${mainMod} SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}"
]
) 9
)
);
}

View file

@ -1,35 +1,37 @@
{ ... }:
{
input = {
kb_layout = "us";
wayland.windowManager.hyprland.settings = {
input = {
kb_layout = "us";
kb_variant = "";
kb_model = "";
kb_rules = "";
kb_variant = "";
kb_model = "";
kb_rules = "";
repeat_delay = 250;
repeat_rate = 35;
repeat_delay = 250;
repeat_rate = 35;
follow_mouse = 1;
accel_profile = "flat";
follow_mouse = 1;
accel_profile = "flat";
kb_options = [ "caps:escape" ];
kb_options = [ "caps:escape" ];
touchpad = {
natural_scroll = true;
touchpad = {
natural_scroll = true;
};
sensitivity = -0.1; # -1.0 - 1.0, 0 means no modification.
};
binds = {
scroll_event_delay = 0;
};
sensitivity = -0.1; # -1.0 - 1.0, 0 means no modification.
};
binds = {
scroll_event_delay = 0;
};
cursor = {
no_hardware_cursors = true;
};
cursor = {
no_hardware_cursors = true;
};
gestures = {
workspace_swipe = true;
workspace_swipe_fingers = 3;
gesture = [
"3, horizontal, workspace"
];
};
}

View file

@ -1,77 +1,74 @@
{ lib }:
{ lib, ... }:
{
xwayland = {
force_zero_scaling = true;
};
general = {
gaps_in = 5;
gaps_out = 10;
border_size = 2;
"col.active_border" = lib.mkForce "rgb(EBDBB2) rgb(24273A) rgb(24273A) rgb(EBDBB2) 45deg";
"col.inactive_border" = lib.mkForce "rgb(24273A) rgb(24273A) rgb(24273A) rgb(24273A) 45deg";
layout = "dwindle";
};
decoration = {
rounding = 10;
blur = {
enabled = true;
size = 5;
passes = 3;
new_optimizations = true;
ignore_opacity = "on";
xray = false;
wayland.windowManager.hyprland.settings = {
xwayland = {
force_zero_scaling = true;
};
active_opacity = 0.8;
inactive_opacity = 0.8;
fullscreen_opacity = 1.0;
};
animations = {
enabled = true;
bezier = [
"linear, 0, 0, 1, 1"
"md3_standard, 0.2, 0, 0, 1"
"md3_decel, 0.05, 0.7, 0.1, 1"
"md3_accel, 0.3, 0, 0.8, 0.15"
"overshot, 0.05, 0.9, 0.1, 1.1"
"crazyshot, 0.1, 1.5, 0.76, 0.92"
"hyprnostretch, 0.05, 0.9, 0.1, 1.0"
"menu_decel, 0.1, 1, 0, 1"
"menu_accel, 0.38, 0.04, 1, 0.07"
"easeInOutCirc, 0.85, 0, 0.15, 1"
"easeOutCirc, 0, 0.55, 0.45, 1"
"easeOutExpo, 0.16, 1, 0.3, 1"
"softAcDecel, 0.26, 0.26, 0.15, 1"
"md2, 0.4, 0, 0.2, 1"
];
animation = [
"windows, 1, 3, md3_decel, popin 60%"
"windowsIn, 1, 3, md3_decel, popin 60%"
"windowsOut, 1, 3, md3_accel, popin 60%"
"border, 1, 10, default"
"fade, 1, 3, md3_decel"
"workspaces, 1, 7, menu_decel, slide"
"specialWorkspace, 1, 3, md3_decel, slidevert"
];
};
general = {
gaps_in = 5;
gaps_out = 10;
border_size = 2;
"col.active_border" = lib.mkForce "rgb(EBDBB2) rgb(24273A) rgb(24273A) rgb(EBDBB2) 45deg";
"col.inactive_border" = lib.mkForce "rgb(24273A) rgb(24273A) rgb(24273A) rgb(24273A) 45deg";
layout = "dwindle";
};
dwindle = {
pseudotile = true;
preserve_split = true;
};
decoration = {
rounding = 10;
blur = {
enabled = true;
size = 5;
passes = 3;
new_optimizations = true;
ignore_opacity = "on";
xray = false;
};
active_opacity = 0.8;
inactive_opacity = 0.8;
fullscreen_opacity = 1.0;
};
master = {
new_on_top = true;
};
animations = {
enabled = true;
bezier = [
"linear, 0, 0, 1, 1"
"md3_standard, 0.2, 0, 0, 1"
"md3_decel, 0.05, 0.7, 0.1, 1"
"md3_accel, 0.3, 0, 0.8, 0.15"
"overshot, 0.05, 0.9, 0.1, 1.1"
"crazyshot, 0.1, 1.5, 0.76, 0.92"
"hyprnostretch, 0.05, 0.9, 0.1, 1.0"
"menu_decel, 0.1, 1, 0, 1"
"menu_accel, 0.38, 0.04, 1, 0.07"
"easeInOutCirc, 0.85, 0, 0.15, 1"
"easeOutCirc, 0, 0.55, 0.45, 1"
"easeOutExpo, 0.16, 1, 0.3, 1"
"softAcDecel, 0.26, 0.26, 0.15, 1"
"md2, 0.4, 0, 0.2, 1"
];
animation = [
"windows, 1, 3, md3_decel, popin 60%"
"windowsIn, 1, 3, md3_decel, popin 60%"
"windowsOut, 1, 3, md3_accel, popin 60%"
"border, 1, 10, default"
"fade, 1, 3, md3_decel"
"workspaces, 1, 7, menu_decel, slide"
"specialWorkspace, 1, 3, md3_decel, slidevert"
];
};
gestures = {
workspace_swipe = true;
workspace_swipe_cancel_ratio = 0.15;
};
dwindle = {
pseudotile = true;
preserve_split = true;
};
misc = {
force_default_wallpaper = 0;
master = {
new_on_top = true;
};
misc = {
force_default_wallpaper = 0;
};
};
}

View file

@ -1,125 +1,123 @@
{ ... }:
let
inherit (builtins) map concatLists;
top = "60";
right = "100%-w-10";
notransTag = "notrans";
in
{
windowrule = [
"pseudo, class:(org.fcitx.)"
"float, class:file_progress"
"float, class:confirm"
"float, class:dialog"
"float, class:download"
"float, class:notification"
"float, class:error"
"float, class:splash"
"float, class:confirmreset"
"float, title:Open File"
"float, title:branchdialog"
"float, class:pavucontrol-qt"
"float, class:pavucontrol"
"float, class:file-roller"
"fullscreen, title:wlogout"
"float, title:wlogout"
"fullscreen, title:wlogout"
wayland.windowManager.hyprland.settings = {
windowrule = [
"pseudo, class:(org.fcitx.)"
"float, class:file_progress"
"float, class:confirm"
"float, class:dialog"
"float, class:download"
"float, class:notification"
"float, class:error"
"float, class:splash"
"float, class:confirmreset"
"float, title:Open File"
"float, title:branchdialog"
"float, class:pavucontrol-qt"
"float, class:pavucontrol"
"float, class:file-roller"
"fullscreen, title:wlogout"
"float, title:wlogout"
"fullscreen, title:wlogout"
"float, title:^(Media viewer)$"
"float, title:^(File Operation Progress)$"
"float, class:^(it.mijorus.smile)"
"float, class:^(xdg-desktop-portal-gtk)$"
"float, title:^(Steam Settings)$"
"float, title:^(Media viewer)$"
"float, title:^(File Operation Progress)$"
"float, class:^(it.mijorus.smile)"
"float, class:^(xdg-desktop-portal-gtk)$"
"float, title:^(Steam Settings)$"
"fullscreen, initialClass:^(cs2)$"
"fullscreen, initialClass:^(cs2)$"
# Zen browser
"opacity 0.9999 override, initialClass:^(zen)(.*)"
# Zen browser
"opacity 0.9999 override, initialClass:^(zen)(.*)"
# Ghostty
"opacity 0.9999 override, initialClass:^(com.mitchellh.ghostty)$"
# Ghostty
"opacity 0.9999 override, initialClass:^(com.mitchellh.ghostty)$"
# Picture in picture windows
"float, title:^(Picture-in-Picture)$"
"pin, title:^(Picture-in-Picture)$"
"float, class:^(vesktop)$,title:^(Discord Popout)$"
"pin, class:^(vesktop)$,title:^(Discord Popout)$"
"float, class:^(steam)$,title:^(Friends List)$"
# Picture in picture windows
"float, title:^(Picture-in-Picture)$"
"pin, title:^(Picture-in-Picture)$"
"float, class:^(vesktop)$,title:^(Discord Popout)$"
"pin, class:^(vesktop)$,title:^(Discord Popout)$"
"float, class:^(steam)$,title:^(Friends List)$"
# Meidia control
"move ${right} ${top}, class: ^(org.pulseaudio.pavucontrol)$"
"size 30% 33%, class: ^(org.pulseaudio.pavucontrol)$"
# Meidia control
"move ${right} ${top}, class: ^(org.pulseaudio.pavucontrol)$"
"size 30% 33%, class: ^(org.pulseaudio.pavucontrol)$"
# Local Send (File Sharing)
"move ${right} 8%, class: ^(localsend_app)$"
"size 20% 80%, class: ^(localsend_app)$"
# Local Send (File Sharing)
"move ${right} 8%, class: ^(localsend_app)$"
"size 20% 80%, class: ^(localsend_app)$"
# Bluetooth
"move ${right} ${top}, class: ^(blueberry.py)$"
"size 25% 45%, class: ^(blueberry.py)$"
# Bluetooth
"move ${right} ${top}, class: ^(blueberry.py)$"
"size 25% 45%, class: ^(blueberry.py)$"
# Media Control
"float, class: ^(org.pulseaudio.pavucontrol)$"
"pin, class: ^(org.pulseaudio.pavucontrol)$"
"animation slide top 20%, class: ^(org.pulseaudio.pavucontrol)$"
# Media Control
"float, class: ^(org.pulseaudio.pavucontrol)$"
"pin, class: ^(org.pulseaudio.pavucontrol)$"
"animation slide top 20%, class: ^(org.pulseaudio.pavucontrol)$"
# Local Send (File Sharing)
"float, class: ^(localsend_app)$"
"pin, class: ^(localsend_app)$"
"animation slide right 20%, class: ^(localsend_app)$"
# Local Send (File Sharing)
"float, class: ^(localsend_app)$"
"pin, class: ^(localsend_app)$"
"animation slide right 20%, class: ^(localsend_app)$"
# Airplay
"move ${right} 10%, class: ^(GStreamer)$"
"size 21% 80%, class: ^(GStreamer)$"
"pin, class: ^(GStreamer)$"
"float, class: ^(GStreamer)$"
"opacity 1.0 override 1.0 override, class: ^(GStreamer)$"
"noblur, class: ^(GStreamer)$"
"animation slide right 20%, class: ^(GStreamer)$"
"keepaspectratio, class: ^(GStreamer)$"
# Airplay
"move ${right} 10%, class: ^(GStreamer)$"
"size 21% 80%, class: ^(GStreamer)$"
"pin, class: ^(GStreamer)$"
"float, class: ^(GStreamer)$"
"opacity 1.0 override 1.0 override, class: ^(GStreamer)$"
"noblur, class: ^(GStreamer)$"
"animation slide right 20%, class: ^(GStreamer)$"
"keepaspectratio, class: ^(GStreamer)$"
# Bluetooth
"float, class: ^(blueberry.py)$"
"pin, class: ^(blueberry.py)$"
"animation slide top 20%, class: ^(blueberry.py)$"
# Bluetooth
"float, class: ^(blueberry.py)$"
"pin, class: ^(blueberry.py)$"
"animation slide top 20%, class: ^(blueberry.py)$"
# Steam
"workspace: 7 silent, class: ^(steam)$"
"workspace: unset, class: ^(steam)$, floating: 1"
# Steam
"workspace 7 silent, class: ^(steam)$"
"workspace unset, class: ^(steam)$, floating: 1"
# steam game
"workspace: 7 silent, class: ^(steam_app_)(.*)"
# steam game
"workspace 7 silent, class: ^(steam_app_)(.*)"
# Line
"workspace: 2, initialTitle: ^(LINE)$"
"float, initialTitle: ^(LINE)$"
# VLC
"workspace 3, initialClass: ^(vlc), floating: 0"
# VLC
"workspace: 3, initialClass: ^(vlc), floating: 0"
# discord
"workspace 4 silent, initialClass: ^(discord), floating: 0"
# discord
"workspace: 4 silent, initialClass: ^(discord), floating: 0"
# Davinci resolve
"center 1, initialClass: ^(resolve), floating: 1"
# Davinci resolve
"center 1, initialClass: ^(resolve), floating: 1"
# Disable Tansparent
"opacity 1.0 override 1.0 override, tag:${notransTag}"
"noblur, tag: ^(${notransTag})$"
];
# Disable Tansparent
"opacity 1.0 override 1.0 override, tag:${notransTag}"
"noblur, tag: ^(${notransTag})$"
];
layerrule = [
"blur, waybar"
"blur, logout_dialog"
"unset, rofi"
"blur, rofi"
"ignorezero, rofi"
"unset, swaync-control-center"
"unset, swaync-notification-window"
"blur, swaync-control-center"
"blur, swaync-notification-window"
"ignorezero, swaync-control-center"
"ignorezero, swaync-notification-window"
"ignorealpha 0.1, swaync-control-center"
"ignorealpha 0.1, swaync-notification-window"
];
layerrule = [
"blur, waybar"
"blur, logout_dialog"
"unset, rofi"
"blur, rofi"
"ignorezero, rofi"
"unset, swaync-control-center"
"unset, swaync-notification-window"
"blur, swaync-control-center"
"blur, swaync-notification-window"
"ignorezero, swaync-control-center"
"ignorezero, swaync-notification-window"
"ignorealpha 0.1, swaync-control-center"
"ignorealpha 0.1, swaync-notification-window"
];
};
}

View file

@ -1,5 +1,6 @@
{ monitors }:
{ osConfig, ... }:
let
inherit (osConfig.systemConf.hyprland) monitors;
inherit (builtins)
length
genList
@ -14,7 +15,9 @@ let
currentNum = index - (monitorNum * (index / monitorNum));
default = if index < monitorNum then "true" else "false";
in
"${toString (index + 1)}, monitor:${elemAt monitors currentNum}, default:${default}"
"${toString (index + 1)}, monitor:desc:${(elemAt monitors currentNum).desc}, default:${default}"
) workspaceNum;
in
if (monitorNum > 0) then workspaceList else [ ]
{
wayland.windowManager.hyprland.settings.workspace = if (monitorNum > 0) then workspaceList else [ ];
}

View file

@ -1,16 +1,13 @@
{
monitors ? [ ],
}:
{
pkgs,
lib,
config,
inputs,
system,
osConfig,
...
}:
let
inherit (osConfig.systemConf.hyprland) monitors;
terminal = "ghostty";
execOnceScript = pkgs.writeShellScript "hyprlandExecOnce" ''
@ -40,6 +37,14 @@ in
sunsetr
];
imports = [
(import ./hypr/bind.nix { inherit mainMod; })
./hypr/workspace.nix
./hypr/window.nix
./hypr/windowrule.nix
./hypr/input.nix
];
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
@ -60,22 +65,12 @@ in
settings = {
"$mainMod" = mainMod;
debug = {
disable_logs = true;
};
bind = (
import ./hypr/bind.nix {
inherit
mainMod
pkgs
monitors
config
lib
;
nvidia-offload-enabled = osConfig.hardware.nvidia.prime.offload.enableOffloadCmd;
}
);
ecosystem.no_update_news = true;
bindm = [
# Move/resize windows with mainMod + LMB/RMB and dragging
@ -102,7 +97,8 @@ in
monitor = [
", prefered, 0x0, 1"
];
]
++ (map (x: "desc:${x.desc},${x.props}") osConfig.systemConf.hyprland.monitors);
plugin = {
hyprwinrap = {
@ -128,16 +124,12 @@ in
''GDK_PIXBUF_MODULE_FILE, ${pkgs.librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache''
];
workspace = (import ./hypr/workspace.nix { inherit monitors; });
misc = {
disable_hyprland_logo = true;
force_default_wallpaper = 0;
disable_splash_rendering = true;
};
}
// (import ./hypr/window.nix { inherit lib; })
// (import ./hypr/windowrule.nix)
// (import ./hypr/input.nix);
};
};
# === Swww === #
@ -161,7 +153,8 @@ in
let
font = "CaskaydiaCove Nerd Font";
font2 = "SF Pro Display Bold";
mainMonitor = if ((builtins.length monitors) > 0) then builtins.elemAt monitors 0 else "";
mainMonitor =
if ((builtins.length monitors) > 0) then "desc:${(builtins.elemAt monitors 0).desc}" else "";
in
{
background = {
@ -270,7 +263,6 @@ in
valign = "center";
}
];
};
};
@ -546,10 +538,10 @@ in
# === rofi === #
programs.rofi = {
enable = true;
package = pkgs.rofi-wayland;
package = pkgs.rofi;
plugins = with pkgs; [
rofi-emoji-wayland
(rofi-calc.override { rofi-unwrapped = rofi-wayland-unwrapped; })
rofi-emoji
rofi-calc
];
};