desktop/hyprland: refactor

Signed-off-by: unexplrd <unexplrd@linerds.us>
This commit is contained in:
2025-05-29 14:39:05 +03:00
parent 920c75e997
commit 08deff70bc
9 changed files with 1574 additions and 1162 deletions

View File

@ -0,0 +1,23 @@
{
osConfig,
config,
inputs,
pkgs,
lib,
...
}: let
inherit (lib) mkIf mkDefault getExe;
inherit (config.lib.stylix) colors;
inherit (osConfig.networking) hostName;
ifLaptop = mkIf (hostName != "dunamis");
in {
imports = with inputs; [
walker.homeManagerModules.default
];
options = config.desktop.hyprland.enable {
# programs.fuzzel = import ./fuzzel {inherit config mkDefault;};
programs.walker = import ./walker {inherit config inputs pkgs;};
programs.waybar = import ./waybar {inherit colors config getExe ifLaptop pkgs;};
programs.hyprlock = import ./hyprlock {inherit config pkgs;};
};
}

View File

@ -0,0 +1,23 @@
{
config,
mkDefault,
}: {
enable = true;
settings = {
main = {
terminal = "$TERMINAL -e";
fields = "filename,name,generic,keywords,categories,exec";
dpi-aware = false;
width = 20;
horizontal-pad = 12;
vertical-pad = 12;
show-actions = true;
match-mode = "fuzzy";
icon-theme = config.dconf.settings."org/gnome/desktop/interface".icon-theme;
};
border = mkDefault {
width = 3;
radius = 12;
};
};
}

View File

@ -0,0 +1,94 @@
{
config,
pkgs,
...
}: let
inherit (config.stylix) colors;
in {
enable = true;
settings = {
general = {
disable_loading_bar = true;
#grace = 300;
hide_cursor = true;
no_fade_in = false;
};
background = [
{
path = "screenshot";
blur_passes = 4;
blur_size = 8;
}
];
input-field = [
{
size = "274, 50";
rounding = 12;
outline_thickness = 3;
position = "0, 0";
monitor = "";
dots_center = true;
fade_on_empty = false;
font_family = "${config.stylix.fonts.serif.name}";
font_color = "rgb(${colors.base05})";
inner_color = "rgb(${colors.base00})";
outer_color = "rgb(${colors.base0D})";
check_color = "rgb(${colors.base0A})";
fail_color = "rgb(${colors.base08})";
placeholder_text = "locked...";
fail_text = "wrong";
shadow_passes = 0;
}
];
shape = [
{
rounding = 12;
#border_size = 3;
size = "274, 50";
color = "rgb(${colors.base00})";
border_color = "rgb(${colors.base0D})";
position = "0, 60";
halign = "center";
valign = "center";
}
{
rounding = 12;
#border_size = 3;
size = "274, 50";
color = "rgb(${colors.base00})";
border_color = "rgb(${colors.base0D})";
position = "0, -60";
halign = "center";
valign = "center";
}
];
label = [
{
monitor = "";
text = "$LAYOUT"; #"cmd[update:1000] ${pkgs.uutils-coreutils-noprefix}/bin/echo $(${pkgs.uutils-coreutils-noprefix}/bin/date +%H:%M:%S)";
text_align = "center";
font_size = 16;
font_family = "${config.stylix.fonts.serif.name}";
outer_color = "rgb(${colors.base00})";
color = "rgb(${colors.base05})";
position = "0, 60";
halign = "center";
valign = "center";
}
{
monitor = "";
text = "cmd[update:1000] ${pkgs.uutils-coreutils-noprefix}/bin/echo $(${pkgs.uutils-coreutils-noprefix}/bin/date +'%m/%d %a %T')";
text_align = "center";
font_size = 16;
font_family = "${config.stylix.fonts.serif.name}";
outer_color = "rgb(${colors.base00})";
color = "rgb(${colors.base05})";
position = "0, -60";
halign = "center";
valign = "center";
}
];
};
}

View File

@ -0,0 +1,307 @@
{
config,
pkgs,
...
}: {
enable = true;
package = pkgs.walker;
runAsService = true;
config = {
activation_mode.labels = "neiotsra";
as_window = false;
disabled = [
"bookmarks"
"clipboard"
"custom_commands"
"translation"
"websearch"
];
builtins = {
applications = {
actions.enabled = true;
context_aware = true;
name = "applications";
placeholder = "Applications";
prioritize_new = true;
refresh = true;
show_generic = true;
show_icon_when_single = true;
show_sub_when_single = true;
weight = 10;
};
calc = {
icon = "accessories-calculator";
min_chars = 4;
name = "calc";
placeholder = "Calculator";
weight = 5;
};
clipboard = {
image_height = 300;
max_entries = 10;
name = "clipboard";
placeholder = "Clipboard";
switcher_only = true;
weight = 5;
};
commands = {
icon = "utilities-terminal";
name = "commands";
placeholder = "Commands";
switcher_only = true;
weight = 8;
};
custom_commands = {
icon = "utilities-terminal";
name = "custom_commands";
placeholder = "Custom Commands";
weight = 5;
};
dmenu = {
name = "dmenu";
placeholder = "Dmenu";
switcher_only = true;
weight = 5;
};
emojis = {
history = true;
name = "emojis";
placeholder = "Emojis";
switcher_only = true;
typeahead = true;
weight = 5;
};
finder = {
concurrency = 8;
icon = "folder";
ignore_gitignore = true;
name = "finder";
placeholder = "Finder";
refresh = true;
switcher_only = true;
weight = 5;
};
runner = {
generic_entry = false;
history = true;
icon = "utilities-terminal";
name = "runner";
placeholder = "Runner";
refresh = true;
typeahead = true;
weight = 5;
};
ssh = {
history = true;
icon = "preferences-system-network";
name = "ssh";
placeholder = "SSH";
refresh = true;
switcher_only = true;
weight = 5;
};
switcher = {
name = "switcher";
placeholder = "Switcher";
prefix = "/";
weight = 5;
};
websearch = {
icon = "applications-internet";
name = "websearch";
placeholder = "Websearch";
weight = 5;
};
windows = {
icon = "view-restore";
name = "windows";
placeholder = "Windows";
weight = 10;
};
};
disable_click_to_close = false;
force_keyboard_focus = true;
list = {
max_entries = 50;
show_initial_entries = true;
single_click = true;
};
search = {
delay = 0;
force_keyboard_focus = true;
history = true;
placeholder = "Search...";
};
};
theme = {
layout = {
ui = {
anchors = {
bottom = false;
left = false;
right = false;
top = false;
};
window = {
h_align = "center";
v_align = "center";
box = {
width = 450;
h_align = "center";
v_align = "center";
# spacing = 12;
orientation = "vertical";
search = {
margins = {
start = 8;
top = 8;
end = 8;
bottom = 0;
};
h_align = "top";
};
scroll = {
overlay_scrolling = true;
list = {
margins = {
bottom = 8;
top = 4;
start = 8;
end = 8;
};
item = {
icon.theme = "${config.gtk.iconTheme.name}";
spacing = 4;
activation_label = {
x_align = 0.5;
y_align = 0.5;
width = 32;
};
text = {
h_align = "start";
h_expand = true;
revert = true;
wrap = true;
};
};
};
};
};
};
};
};
style = let
inherit (config.lib.stylix) colors;
in ''
@define-color base00 #${colors.base00};
@define-color base01 #${colors.base01};
@define-color base02 #${colors.base02};
@define-color base03 #${colors.base03};
@define-color base04 #${colors.base04};
@define-color base05 #${colors.base05};
@define-color base06 #${colors.base06};
@define-color base07 #${colors.base07};
@define-color base08 #${colors.base08};
@define-color base09 #${colors.base09};
@define-color base0A #${colors.base0A};
@define-color base0B #${colors.base0B};
@define-color base0C #${colors.base0C};
@define-color base0D #${colors.base0D};
@define-color base0E #${colors.base0E};
@define-color base0F #${colors.base0F};
#window,
#box,
#search,
#password,
#input,
#typeahead,
#spinner,
#list,
child,
scrollbar,
slider,
#item,
#text,
#label,
#sub,
#activationlabel {
all: unset;
}
#window {
background: @base00;
color: @base05;
border-radius: 20px;
border: 3px solid @base0D;
}
#box {
background: @base00;
}
#search {
background: @base01;
border-radius: 12px 12px 6px 6px;
padding: 8px;
}
#password,
#input,
#typeahead {
background: none;
box-shadow: none;
border-radius: 12px;
}
#input > *:first-child,
#typeahead > *:first-child {
margin-right: 12px;
border-radius: 0px;
}
#typeahead {
color: @base05;
}
#input placeholder {
opacity: 0.5;
}
#list {
padding: 8px;
border-radius: 6px 6px 12px 12px;
background: @base01;
}
child {
box-shadow: none;
}
child:selected,
child:hover {
box-shadow: none;
border-radius: 8px;
background: @base02;
}
#item {
padding: 4px;
}
#sub {
font-size: smaller;
opacity: 0.5;
}
#activationlabel {
opacity: 0.5;
}
.activation #activationlabel {
opacity: 1;
color: @base05;
}
'';
};
}

View File

@ -0,0 +1,331 @@
{
colors,
config,
getExe,
ifLaptop,
pkgs,
...
}: {
enable = true;
systemd = {
enable = true;
target = "graphical-session.target";
};
settings = {
bar-0 = {
# layer = "top";
position = "bottom";
height = 24;
spacing = 6;
# margin-left = 33 + 3;
# margin-right = 33 + 3;
margin-left = 8;
margin-right = 8;
margin-bottom = 8;
reload_style_on_change = true;
modules-left = [
"hyprland/language"
"hyprland/workspaces"
"wlr/taskbar"
];
modules-center = ["clock"];
modules-right = [
(ifLaptop "group/laptop")
"wireplumber"
"tray"
"privacy"
(ifLaptop "power-profiles-daemon")
"idle_inhibitor"
"custom/notification"
];
"niri/workspaces" = {
format = "{icon}";
format-icons = {
"1" = "";
"2" = "";
"3" = "";
"4" = "";
"5" = "";
"6" = "";
"7" = "";
"8" = "";
"9" = "";
"10" = "";
general = "󰘧";
web = "󰖟";
chat = "󰻞";
code = "󰅩";
uni = "󱆀";
games = "󰺶";
system = "󰢻";
media = "󱜐";
tray = "󱊖";
};
};
"niri/language" = {
format = "{}";
format-en = "🇺🇸";
format-uk = "🇺🇦";
};
"custom/separator" = {
format = "󰝠";
interval = "once";
tooltip = false;
};
"group/laptop" = {
orientation = "inherit";
modules = [
"battery"
"backlight"
];
};
"backlight" = {
format = "{icon} {percent}%";
format-icons = [
"󰃚"
"󰃛"
"󰃜"
"󰃝"
"󰃞"
"󰃟"
"󰃠"
];
};
"idle_inhibitor" = {
format = "{icon}";
format-icons = {
activated = "󰅶";
deactivated = "󰾪";
};
};
"tray" = {
icon-size = 20;
spacing = 6;
};
"clock" = {
interval = 1;
format = "{:%H:%M:%S}";
tooltip-format = "{:%d.%m.%Y}";
};
battery = {
states = {
good = 95;
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-full = "󱟢 {capacity}%";
format-charging = "󰂄 {capacity}%";
format-plugged = "󰚥 {capacity}%";
format-alt = "{icon} {time}";
format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
};
mpris = {
format = "{player_icon} {dynamic}";
format-paused = "{status_icon} <i>{dynamic}</i>";
playing-len = 30;
playing-paused = 30;
player-icons = {
default = "";
mpv = "🎵";
};
status-icons = {paused = "";};
};
"upower" = {
icon-size = 16;
format = "{percentage}";
hide-if-empty = true;
tooltip = true;
tooltip-spacing = 20;
};
"power-profiles-daemon" = {
format = "{icon}";
tooltip-format = "Power profile: {profile}\nDriver: {driver}";
tooltip = true;
format-icons = {
default = "󱡮";
performance = "󱡮";
balanced = "";
power-saver = "";
};
};
"wireplumber" = {
scroll-step = 3;
format = "{icon} {volume}%";
format-muted = "󰖁";
format-icons = ["󰕿" "󰖀" "󰕾"];
on-click = getExe pkgs.pwvucontrol;
on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle";
};
"custom/notification" = {
tooltip = false;
format = "{icon}";
format-icons = {
notification = "󱅫";
none = "󰂚";
dnd-notification = "󰂛";
dnd-none = "󰂛";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-click = "swaync-client -t -sw";
on-click-right = "swaync-client -d -sw";
escape = true;
};
"privacy" = {
icon-spacing = 2;
icon-size = 16;
transition-duration = 250;
screenshare = {
type = "screenshare";
tooltip = true;
tooltip-icon-size = 24;
};
audio-in = {
type = "audio-in";
tooltip = true;
tooltip-icon-size = 24;
};
};
"wlr/taskbar" = {
format = "{icon}";
icon-size = 20;
icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}";
tooltip-format = "{title}";
on-click = "activate";
};
};
};
style = ''
@define-color base00 #${colors.base00};
@define-color base01 #${colors.base01};
@define-color base02 #${colors.base02};
@define-color base03 #${colors.base03};
@define-color base04 #${colors.base04};
@define-color base05 #${colors.base05};
@define-color base06 #${colors.base06};
@define-color base07 #${colors.base07};
@define-color base08 #${colors.base08};
@define-color base09 #${colors.base09};
@define-color base0A #${colors.base0A};
@define-color base0B #${colors.base0B};
@define-color base0C #${colors.base0C};
@define-color base0D #${colors.base0D};
@define-color base0E #${colors.base0E};
@define-color base0F #${colors.base0F};
* {
font-family: ${config.stylix.fonts.sansSerif.name}, FontAwesome;
font-weight: 500;
font-size: 100%;
}
window#waybar {
background-color: transparent;
color: @base05;
}
.modules-center {
background-color: transparent;
}
.mpris.stopped {
background-color: transparent;
}
.modules-left,
.modules-center,
.modules-right {
/* border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
border-top-left-radius: 0px;
border-top-right-radius: 0px; */
background-color: @base00;
border-radius: 24px;
border: 3px solid @base0D;
color: @base05;
padding: 0 0.4em;
}
tooltip {
background: @base01;
border: 1px solid @base0E;
}
tooltip label {
color: @base05;
}
button {
box-shadow: inset 0 -3px transparent;
border-radius: 16px;
}
button:hover {
background: inherit;
box-shadow: inset 0 -3px transparent;
}
#mode {
background-color: rgba(0, 0, 0, 0.2);
box-shadow: inset 0 -3px @base05;
}
#battery,
#backlight,
/* #workspaces,
#taskbar,
#privacy, */
#taskbar button,
#language,
#clock,
#battery,
#backlight,
#wireplumber,
#workspaces button,
#custom-notification,
#idle_inhibitor,
#power-profiles-daemon,
#privacy-item,
#custom-separator {
padding: 0 0.3em;
}
#tray button {
padding: 0 0.3em;
margin: 0 0.2em;
}
#workspaces button.active {
color: @base0D;
}
#taskbar button:hover {
box-shadow: transparent;
}
#taskbar.empty,
window#empty {
background-color: transparent;
}
#battery.critical:not(.charging) {
color: @base09;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: steps(12);
animation-iteration-count: infinite;
animation-direction: alternate;
}
#power-profiles-daemon.performance {
color: @base0D;
}
#power-profiles-daemon.balanced {
color: @base0B;
}
#power-profiles-daemon.power-saver {
color: @base0A;
}
label:focus {
background-color: #000000;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: @base08;
}
#privacy-item.screenshare {
color: @base0C;
}
#privacy-item.audio-in {
color: @base0E;
}
'';
}