Files
nixos-blueprint/modules/home/desktop/niri/default.nix
2025-02-07 13:31:41 +02:00

1471 lines
46 KiB
Nix

{
osConfig,
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.desktop.niri;
in {
options = {
desktop.niri.enable =
mkEnableOption "enable niri desktop";
};
config = mkIf cfg.enable {
stylix.targets = {
waybar.enable = false;
hyprlock.enable = false;
};
services = {
playerctld.enable = true;
network-manager-applet.enable = true;
copyq.enable = true;
gnome-keyring = {
enable = true;
components = ["secrets" "ssh"];
};
udiskie = {
enable = true;
automount = false;
notify = true;
tray = "auto";
};
wlsunset = {
enable = true;
latitude = "49.6";
longitude = "36.1";
temperature = {
day = 6500;
night = 3000;
};
systemdTarget = "graphical-session.target";
};
dunst = {
enable = true;
settings = {
global = {
width = 300;
height = 300;
icon_theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}";
corner_radius = 12;
#corners = "top-right,bottom-left";
offset = "16x16";
origin = "top-right";
timeout = 15;
frame_width = 3;
notification_limit = 5;
};
rule-telegram = {
"desktop_entry" = "org.telegram.desktop";
"urgency" = "normal";
};
};
};
hypridle = {
enable = true;
settings = {
general = {
before_sleep_cmd = "loginctl lock-session";
lock_cmd = "pidof hyprlock || hyprlock";
# unlock_cmd = "loginctl unlock-session";
};
listener = [
{
timeout = 600;
on-timeout = "pidof hyprlock || hyprlock";
}
{
timeout = 601;
on-timeout = "${pkgs.niri}/bin/niri msg action power-off-monitors";
}
];
};
};
};
programs.hyprlock = {
enable = true;
settings = {
general = {
disable_loading_bar = true;
#grace = 300;
hide_cursor = true;
no_fade_in = false;
};
background = [
{
path = "screenshot";
blur_passes = 3;
blur_size = 8;
}
];
input-field = [
{
size = "274, 50";
rounding = 12;
outline_thickness = 4;
position = "0, -30";
monitor = "";
dots_center = true;
fade_on_empty = false;
font_family = "${config.stylix.fonts.serif.name}";
font_color = "rgb(${config.lib.stylix.colors.base05})";
inner_color = "rgb(${config.lib.stylix.colors.base00})";
outer_color = "rgb(${config.lib.stylix.colors.base0D})";
check_color = "rgb(${config.lib.stylix.colors.base0A})";
fail_color = "rgb(${config.lib.stylix.colors.base08})";
placeholder_text = "locked...";
fail_text = "wrong";
shadow_passes = 0;
}
];
shape = [
{
rounding = 12;
size = "150, 50";
color = "rgb(${config.lib.stylix.colors.base00})";
border_color = "rgb(${config.lib.stylix.colors.base0D})";
position = "-62, 30";
halign = "center";
valign = "center";
}
{
rounding = 12;
size = "120, 50";
color = "rgb(${config.lib.stylix.colors.base00})";
border_color = "rgb(${config.lib.stylix.colors.base0D})";
position = "77, 28";
halign = "center";
valign = "center";
}
];
label = [
{
monitor = "";
text = "$LAYOUT";
text_align = "center";
font_size = 16;
font_family = "${config.stylix.fonts.serif.name}";
outer_color = "rgb(${config.lib.stylix.colors.base00})";
color = "rgb(${config.lib.stylix.colors.base05})";
position = "-62, 28";
halign = "center";
valign = "center";
}
{
monitor = "";
text = "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(${config.lib.stylix.colors.base00})";
color = "rgb(${config.lib.stylix.colors.base05})";
position = "77, 28";
halign = "center";
valign = "center";
}
];
};
};
xdg.configFile = {
niri = {
target = "niri/config.kdl";
text = let
cursor_size = toString config.stylix.cursor.size;
terminal = "ghostty";
launcher = "walker";
# clipboard = "copyq toggle";
left = "n";
down = "e";
up = "i";
right = "o";
in ''
environment {
DISPLAY ":123"
QT_QPA_PLATFORM "wayland"
// QT_STYLE_OVERRIDE "adwaita"
// QT_QPA_PLATFORMTHEME "qt5ct"
GDK_BACKEND "wayland"
MOZ_ENABLE_WAYLAND "1"
MOZ_WEBRENDER "1"
XDG_SESSION_TYPE "wayland"
CLUTTER_BACKEND "wayland"
SDL_VIDEODRIVER "wayland"
}
input {
keyboard {
xkb {
layout "us,ua"
// variant "colemak_dh,"
options "grp:menu_toggle"
}
repeat-delay 200
repeat-rate 50
track-layout "global"
}
touchpad {
// off
tap
// dwt
// dwtp
natural-scroll
accel-speed 0.2
accel-profile "flat"
// scroll-method "two-finger"
// disabled-on-external-mouse
}
mouse {
// off
// natural-scroll
accel-speed 0.0
accel-profile "flat"
// scroll-method "no-scroll"
}
/-touch {
off
}
warp-mouse-to-focus
// focus-follows-mouse
}
output "eDP-1" {
// off
scale 1.2
transform "normal"
// position x=1920 y=0
}
output "Samsung Electric Company S24R65x H4TMA03291" {
position x=0 y=0
variable-refresh-rate
}
output "Philips Consumer Electronics Company 27M2N5500 UK02418033254" {
mode "2560x1440@180.000"
variable-refresh-rate
position x=0 y=0
scale 1.25
}
output "PNP(AOC) 27V2G5 0x0000026C" {
position x=1920 y=0
mode "1920x1080@74.973"
variable-refresh-rate
}
cursor {
xcursor-theme "${config.stylix.cursor.name}"
xcursor-size ${cursor_size}
}
layout {
gaps 11
center-focused-column "never" // "on-overflow"
preset-column-widths {
proportion 0.33333
proportion 0.5
proportion 0.66667
}
// default-column-width { proportion 0.9; }
default-column-width {}
focus-ring {
//off
width 3
active-gradient from="#${config.lib.stylix.colors.base0D}" to="#${config.lib.stylix.colors.base04}" angle=40 relative-to="workspace-view"
inactive-color "#${config.lib.stylix.colors.base03}"
// inactive-gradient from="#1c1c1c" to="#4e4e4e" angle=60 relative-to="workspace-view"
}
// You can also add a border. It's similar to the focus ring, but always visible.
border {
// The settings are the same as for the focus ring.
// If you enable the border, you probably want to disable the focus ring.
off
width 4
// active-color "#ffc87f"
inactive-color "#${config.lib.stylix.colors.base00}"
// active-gradient from="#${config.lib.stylix.colors.base0D}" to="#${config.lib.stylix.colors.base0C}" angle=40 relative-to="workspace-view"
// inactive-gradient from="#1c1c1c" to="#4e4e4e" angle=60 relative-to="workspace-view"
// active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view"
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
}
struts {
left 52
right 52
}
}
prefer-no-csd
hotkey-overlay {
skip-at-startup
}
window-rule {
geometry-corner-radius 12
clip-to-geometry true
}
screenshot-path "~/pics/screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png"
// screenshot-path null
animations {
// off
slowdown 0.7
}
window-rule {
match app-id=r#"^org\.wezfurlong\.wezterm$"#
default-column-width { proportion 1.0; }
}
window-rule {
match app-id=r#"^re\.sonny\.Junction$"#
open-floating true
open-focused true
}
// window-rule {
// match app-id=r#"^com\.mitchellh\.ghostty$"#
// draw-border-with-background false
// }
window-rule {
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
match app-id=r#"^org\.telegram\.desktop$"#
match app-id=r#"^org\.gnome\.World\.Secrets$"#
match app-id=r#"^signal$"#
match app-id=r#"^Bitwarden$"#
// block-out-from "screen-capture"
block-out-from "screencast"
}
binds {
Mod+Shift+Slash { show-hotkey-overlay; }
Mod+Return repeat=false { spawn "${terminal}"; }
Mod+Space repeat=false { spawn "${launcher}"; }
Super+Alt+L repeat=false { spawn "hyprlock"; }
Super+Alt+B repeat=false { spawn "io.github.zen_browser.zen"; }
Super+Alt+V repeat=false { spawn "copyq" "toggle"; }
Super+Alt+D repeat=false { spawn "dunstctl" "set-paused" "toggle"; }
Super+Alt+C repeat=false { spawn "dunstctl" "close-all"; }
Super+Alt+X repeat=false { spawn "dunstctl" "history-pop"; }
Mod+Alt+Q { quit; }
Mod+Alt+P { power-off-monitors; }
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05+"; }
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05-"; }
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause"; }
XF86AudioPause allow-when-locked=true { spawn "playerctl" "pause"; }
XF86AudioPrev allow-when-locked=true { spawn "playerctl" "previous"; }
XF86AudioNext allow-when-locked=true { spawn "playerctl" "next"; }
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-"; }
Alt+XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+" "-d" "platform::kbd_backlight"; }
Alt+XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-" "-d" "platform::kbd_backlight"; }
Mod+Left { focus-column-left; }
Mod+Down { focus-window-or-workspace-down; }
Mod+Up { focus-window-or-workspace-up; }
Mod+Right { focus-column-right; }
Mod+${left} { focus-column-left; }
Mod+${down} { focus-window-or-workspace-down; }
Mod+${up} { focus-window-or-workspace-up; }
Mod+${right} { focus-column-right; }
Mod+Ctrl+Left { move-column-left; }
Mod+Ctrl+Down { move-window-down-or-to-workspace-down; }
Mod+Ctrl+Up { move-window-up-or-to-workspace-up; }
Mod+Ctrl+Right { move-column-right; }
Mod+Ctrl+${left} { move-column-left; }
Mod+Ctrl+${down} { move-window-down-or-to-workspace-down; }
Mod+Ctrl+${up} { move-window-up-or-to-workspace-up; }
Mod+Ctrl+${right} { move-column-right; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Ctrl+Home { move-column-to-first; }
Mod+Ctrl+End { move-column-to-last; }
Mod+Shift+Left { focus-monitor-left; }
Mod+Shift+Down { focus-monitor-down; }
Mod+Shift+Up { focus-monitor-up; }
Mod+Shift+Right { focus-monitor-right; }
Mod+Shift+${left} { focus-monitor-left; }
Mod+Shift+${down} { focus-monitor-down; }
Mod+Shift+${up} { focus-monitor-up; }
Mod+Shift+${right} { focus-monitor-right; }
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
Mod+Shift+Ctrl+${left} { move-column-to-monitor-left; }
Mod+Shift+Ctrl+${down} { move-column-to-monitor-down; }
Mod+Shift+Ctrl+${up} { move-column-to-monitor-up; }
Mod+Shift+Ctrl+${right} { move-column-to-monitor-right; }
// Mod+Page_Down { focus-workspace-down; }
// Mod+Page_Up { focus-workspace-up; }
// Mod+N { focus-workspace-down; }
// Mod+E { focus-workspace-up; }
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
// Mod+Ctrl+N { move-column-to-workspace-down; }
// Mod+Ctrl+U { move-column-to-workspace-up; }
Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+Page_Up { move-workspace-up; }
// Mod+Shift+N { move-workspace-down; }
// Mod+Shift+U { move-workspace-up; }
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+WheelScrollRight { focus-column-right; }
Mod+WheelScrollLeft { focus-column-left; }
Mod+Ctrl+WheelScrollRight { move-column-right; }
Mod+Ctrl+WheelScrollLeft { move-column-left; }
Mod+Shift+WheelScrollDown { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; }
Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; }
Mod+1 { focus-workspace 1; }
Mod+2 { focus-workspace 2; }
Mod+3 { focus-workspace 3; }
Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace 5; }
Mod+6 { focus-workspace 6; }
Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; }
Mod+Ctrl+1 { move-column-to-workspace 1; }
Mod+Ctrl+2 { move-column-to-workspace 2; }
Mod+Ctrl+3 { move-column-to-workspace 3; }
Mod+Ctrl+4 { move-column-to-workspace 4; }
Mod+Ctrl+5 { move-column-to-workspace 5; }
Mod+Ctrl+6 { move-column-to-workspace 6; }
Mod+Ctrl+7 { move-column-to-workspace 7; }
Mod+Ctrl+8 { move-column-to-workspace 8; }
Mod+Ctrl+9 { move-column-to-workspace 9; }
// Mod+Q { focus-workspace 1; }
// Mod+W { focus-workspace 2; }
// Mod+F { focus-workspace 3; }
// Mod+P { focus-workspace 4; }
// Mod+B { focus-workspace 5; }
// Mod+J { focus-workspace 6; }
// Mod+L { focus-workspace 7; }
// Mod+Y { focus-workspace 8; }
// Mod+Apostrophe { focus-workspace 9; }
// Mod+Ctrl+Q { move-column-to-workspace 1; }
// Mod+Ctrl+W { move-column-to-workspace 2; }
// Mod+Ctrl+F { move-column-to-workspace 3; }
// Mod+Ctrl+P { move-column-to-workspace 4; }
// Mod+Ctrl+B { move-column-to-workspace 5; }
// Mod+Ctrl+J { move-column-to-workspace 6; }
// Mod+Ctrl+L { move-column-to-workspace 7; }
// Mod+Ctrl+Y { move-column-to-workspace 8; }
// Mod+Ctrl+Apostrophe { move-column-to-workspace 9; }
// Mod+Ctrl+1 { move-window-to-workspace 1; }
Mod+Tab { focus-workspace-previous; }
Mod+Ctrl+Comma { consume-or-expel-window-left; }
Mod+Ctrl+Period { consume-or-expel-window-right; }
Mod+Comma { set-column-width "-10%"; }
Mod+Period { set-column-width "+10%"; }
Mod+T { switch-preset-column-width; }
Mod+Shift+Comma { set-window-height "-10%"; }
Mod+Shift+Period { set-window-height "+10%"; }
Mod+Shift+T { reset-window-height; }
Mod+M { maximize-column; }
Mod+Ctrl+M { fullscreen-window; }
Mod+C { center-column; }
Mod+Ctrl+Q { close-window; }
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }
Mod+Escape { switch-layout "next"; }
// Mod+Shift+Space { switch-layout "prev"; }
Print { screenshot; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
}
'';
};
};
programs.waybar = {
enable = true;
#package = pkgs.waybar-0.11.0";
systemd = {
enable = true;
target = "graphical-session.target";
};
settings = let
hostname = osConfig.networking.hostName;
in {
bar-0 = {
layer = "top";
position = "bottom";
height = 40;
spacing = 6;
margin-left = 8;
margin-right = 8;
margin-bottom = 8;
reload_style_on_change = true;
modules-left = [
#"custom/notification"
"clock"
"wlr/taskbar"
];
modules-center = ["group/niri" "privacy"];
modules-right = [
"tray"
"wireplumber"
(lib.mkIf (hostname != "dunamis")
"group/laptop")
"idle_inhibitor"
];
"niri/workspaces" = {
format = "{icon}";
format-icons = {
focused = "󰗝";
active = "󰻃";
default = "󰄰";
};
};
"niri/language" = {
format = "{}";
format-en = "🇺🇸";
format-uk = "🇺🇦";
};
"custom/separator" = {
format = "|";
interval = "once";
tooltip = false;
};
"custom/text" = {
format = "here will be workspaces";
interval = "once";
tooltip = false;
};
"group/niri" = {
orientation = "inherit";
modules = [
"niri/language"
"niri/workspaces"
];
};
"group/laptop" = {
orientation = "inherit";
drawer = {
transition-duration = 500;
children-class = "laptop";
transition-left-to-right = false;
};
modules = [
"battery"
"power-profiles-daemon"
"custom/separator"
"custom/kbd-backlight"
"custom/separator"
"backlight"
"custom/separator"
];
};
"idle_inhibitor" = {
format = "{icon}";
format-icons = {
activated = "󰈈";
deactivated = "󰈉";
};
};
"tray" = {
icon-size = 24;
spacing = 3;
};
"clock" = {
interval = 1;
format = "{:%H:%M:%S}";
tooltip-format = "{:%d.%m.%Y}";
};
# "backlight" = {
# device = "intel_backlight";
# format = "{percent}% {icon}";
# format-icons = ["󰃞" "󰃟" "󰃝" "󰃠"];
# on-scroll-up = "light -A 2%";
# on-scroll-down = "light -U 2%";
# };
"custom/backlight" = {
format = "{}% {icon}";
format-icons = ["󰃠"];
exec = "~/.local/bin/brightness.nu get-percentage";
on-scroll-up = "~/.local/bin/brightness.nu change 2";
on-scroll-down = "~/.local/bin/brightness.nu change 2";
interval = 1;
};
"custom/kbd-backlight" = {
format = "{}% {icon}";
format-icons = ["󰌌"];
exec = "~/.local/bin/keyboard-brightness.nu get-percentage";
on-scroll-up = "~/.local/bin/keyboard-brightness.nu change";
on-scroll-down = "~/.local/bin/keyboard-brightness.nu change -1";
interval = 1;
};
# "custom/kbd-backlight" = {
# exec = "cat /sys/class/leds/platform::kbd_backlight/brightness";
# interval = 1;
# format = "{}% {icon}";
# format-icons = ["󰌌"];
# on-scroll-up = "light -s sysfs/leds/platform::kbd_backlight -A 5%";
# on-scroll-down = "light -s sysfs/leds/platform::kbd_backlight -U 5%";
# };
battery = {
states = {
good = 95;
warning = 30;
critical = 15;
};
format = "{capacity}% {icon}";
format-full = "{capacity}% 󱟢";
format-charging = "{capacity}% 󰂄";
format-plugged = "{capacity}% 󰚥";
format-alt = "{icon} {time}";
format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
};
"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 = "{volume}% {icon}";
format-muted = "󰖁";
format-icons = ["󰕿" "󰖀" "󰕾"];
on-click = "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 = 4;
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 = 24;
icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}";
tooltip-format = "{title}";
on-click = "activate";
};
};
};
style = ''
@define-color base00 #${config.lib.stylix.colors.base00};
@define-color base01 #${config.lib.stylix.colors.base01};
@define-color base02 #${config.lib.stylix.colors.base02};
@define-color base03 #${config.lib.stylix.colors.base03};
@define-color base04 #${config.lib.stylix.colors.base04};
@define-color base05 #${config.lib.stylix.colors.base05};
@define-color base06 #${config.lib.stylix.colors.base06};
@define-color base07 #${config.lib.stylix.colors.base07};
@define-color base08 #${config.lib.stylix.colors.base08};
@define-color base09 #${config.lib.stylix.colors.base09};
@define-color base0A #${config.lib.stylix.colors.base0A};
@define-color base0B #${config.lib.stylix.colors.base0B};
@define-color base0C #${config.lib.stylix.colors.base0C};
@define-color base0D #${config.lib.stylix.colors.base0D};
@define-color base0E #${config.lib.stylix.colors.base0E};
@define-color base0F #${config.lib.stylix.colors.base0F};
* {
font-family: Iosevka Nerd Font Propo, FontAwesome;
font-size: 100%;
/* margin: 0px 2px 2px 2px; */
}
window#waybar {
background-color: transparent;
/* border-top: 3px solid @overlay0; */
color: @base05;
/* padding: 0px 2px 0px 0px; */
transition-property: background-color;
transition-duration: 0.5s;
}
.modules-right,
.modules-center,
.modules-left {
border-radius: 8px;
}
tooltip {
background: @base01;
border: 1px solid @base0E;
}
tooltip label {
color: @base05;
}
button {
box-shadow: inset 0 -3px transparent;
border-radius: 12px;
}
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
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;
}
#clock,
#battery,
#cpu,
#memory,
#disk,
#temperature,
#backlight,
#custom-kbd-backlight,
#workspaces,
#network,
#pulseaudio,
#wireplumber,
#custom-media,
#laptop,
#tray,
#mode,
#privacy
#privacy-item,
#idle_inhibitor,
#backlight-slider,
#custom-notification,
#scratchpad,
#power-profiles-daemon,
#taskbar,
#language,
#upower,
#mpris,
#mpd {
padding: 0 0.8em;
border-radius: 12px;
color: @base05;
background-color: @base00;
}
/* #upower, */
#battery,
#backlight,
#custom-kbd-backlight,
#backlight-slider,
#cpu,
#memory,
#disk,
#network,
#wireplumber,
#power-profiles-daemon {
padding-right: 0.8em;
}
#language {
padding-right: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
#workspaces {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
#taskbar,
#workspaces {
padding: 0 0.5em;
}
#taskbar button,
#workspaces button {
padding: 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) {
background-color: @base09;
color: @base00;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: steps(12);
animation-iteration-count: infinite;
animation-direction: alternate;
}
#power-profiles-daemon.performance {
background-color: @base00;
color: @base08;
}
#power-profiles-daemon.balanced {
background-color: @base00;
color: @base0E;
}
#power-profiles-daemon.power-saver {
background-color: @base00;
color: @base08;
}
label:focus {
background-color: #000000;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: #eb4d4b;
}
#idle_inhibitor {
padding: 0 0.9em;
}
#idle_inhibitor:hover {
box-shadow: inset 0 -3px @base05;
}
#idle_inhibitor.activated {
background-color: @base05;
color: @base00;
}
#idle_inhibitor.activated:hover {
box-shadow: inset 0 -3px @base00;
}
#laptop,
#privacy {
padding: 0em;
}
#privacy-item.screenshare {
background-color: @base00;
color: @base0C;
}
#privacy-item.audio-in {
background-color: @base00;
color: @base0E;
}
#privacy-item.audio-out {
background-color: @base;
}
'';
};
programs.walker = {
enable = true;
package = pkgs.walker;
runAsService = true;
config = {
activation_mode.labels = "neiotsra";
# theme = "stylix";
as_window = false;
builtins = {
applications = {
actions = {enabled = true;};
context_aware = true;
name = "applications";
placeholder = "Applications";
prioritize_new = true;
refresh = true;
show_generic = false;
show_icon_when_single = true;
show_sub_when_single = true;
weight = 5;
};
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 = 5;
};
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 = {
# engines = ["google"];
# icon = "applications-internet";
# name = "websearch";
# placeholder = "Websearch";
# weight = 5;
# };
windows = {
icon = "view-restore";
name = "windows";
placeholder = "Windows";
weight = 5;
};
};
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 = 500;
height = 300;
h_align = "center";
v_align = "center";
spacing = 12;
orientation = "vertical";
# margins = {
# bottom = 200;
# top = 200;
# start = 200;
# };
search = {
margins = {
# bottom = 0;
# top = 0;
start = 8;
end = 8;
};
spacing = 12;
# v_align = "baseline";
h_align = "top";
h_expand = true;
v_expand = true;
};
scroll = {
h_align = "fill";
v_align = "fill";
h_expand = false;
overlay_scrolling = true;
list = {
# max_height = 300;
margins = {
bottom = 8;
top = 0;
start = 8;
end = 8;
};
always_show = true;
v_align = "fill";
h_align = "bottom";
h_expand = false;
v_expand = true;
item = {
icon.theme = "${config.gtk.iconTheme.name}";
spacing = 4;
activation_label = {
h_align = "end";
# v_align = "bottom";
h_expand = false;
justify = "right";
spacing = 4;
margins.end = 12;
# x_align = 1;
};
text = {
h_align = "start";
h_expand = true;
revert = true;
wrap = true;
};
};
};
};
};
};
};
};
style = ''
@define-color base00 #${config.lib.stylix.colors.base00};
@define-color base01 #${config.lib.stylix.colors.base01};
@define-color base02 #${config.lib.stylix.colors.base02};
@define-color base03 #${config.lib.stylix.colors.base03};
@define-color base04 #${config.lib.stylix.colors.base04};
@define-color base05 #${config.lib.stylix.colors.base05};
@define-color base06 #${config.lib.stylix.colors.base06};
@define-color base07 #${config.lib.stylix.colors.base07};
@define-color base08 #${config.lib.stylix.colors.base08};
@define-color base09 #${config.lib.stylix.colors.base09};
@define-color base0A #${config.lib.stylix.colors.base0A};
@define-color base0B #${config.lib.stylix.colors.base0B};
@define-color base0C #${config.lib.stylix.colors.base0C};
@define-color base0D #${config.lib.stylix.colors.base0D};
@define-color base0E #${config.lib.stylix.colors.base0E};
@define-color base0F #${config.lib.stylix.colors.base0F};
#window,
#box,
#search,
#password,
#input,
#typeahead,
#spinner,
#list,
child,
scrollbar,
slider,
#item,
#text,
#label,
#sub,
#activationlabel {
all: unset;
}
#window {
background: none;
color: @base05;
}
#box {
border-radius: 20px;
border-width: 4px;
border-color: @base0D;
background: @base00;
}
#search {
background: @base01;
border-radius: 12px;
padding: 8px;
}
#password,
#input,
#typeahead {
background: none;
box-shadow: none;
border-radius: 12px;
}
#input > *:first-child,
#typeahead > *:first-child {
margin-right: 12px;
border-radius: 12px;
}
/* #spinner {
} */
#typeahead {
color: @base05;
}
#input placeholder {
opacity: 0.5;
}
#list {
padding: 8px;
border-radius: 12px;
background: @base01;
}
child {
box-shadow: none;
}
child:selected,
child:hover {
box-shadow: none;
border-radius: 8px;
background: @base02;
}
#item {
padding: 4px;
}
/* #icon {
}
#text {
}
#label {
} */
#sub {
font-size: smaller;
opacity: 0.5;
}
#activationlabel {
opacity: 0.5;
}
.activation #activationlabel {
opacity: 1;
color: @base05;
}
.activation #text,
.activation #icon,
.activation #search {
opacity: 0.5;
}
'';
};
};
programs.wpaperd.enable = true;
home.packages = with pkgs; [
niri
nautilus
helvum
loupe
evince
celluloid
junction
swayidle
swaylock-effects
libnotify
playerctl
wdisplays
pwvucontrol
wl-clipboard-rs
polkit_gnome
xwayland-satellite
];
gtk = {
enable = true;
iconTheme = {
name = "Papirus-Dark";
package = pkgs.papirus-icon-theme;
};
};
qt = {
enable = true;
# platformTheme.name = "gtk3";
};
dconf.settings = {
"org/gnome/desktop/interface" = {
icon-theme = "${config.gtk.iconTheme.name}";
};
};
xdg.mime.enable = true;
xdg.mimeApps = {
enable = true;
defaultApplications = let
file_manager = ["org.gnome.Nautilus.desktop"];
web_browser = ["re.sonny.Junction.desktop"];
image_viewer = ["org.gnome.Loupe.desktop"];
video_player = ["io.github.celluloid_player.Celluloid.desktop"];
pdf_reader = ["org.gnome.Evince.desktop"];
in {
"inode/directory" = file_manager;
"video/x-matroska" = video_player;
"video/mp4" = video_player;
"video/mpeg" = video_player;
"video/x-mpeg" = video_player;
"image/png" = image_viewer;
"image/jpeg" = image_viewer;
"application/pdf" = pdf_reader;
"text/html" = web_browser;
"x-scheme-handler/http" = web_browser;
"x-scheme-handler/https" = web_browser;
"x-scheme-handler/about" = web_browser;
"x-scheme-handler/unknown" = web_browser;
};
};
systemd.user.settings.Manager.DefaultEnvironment = {
# QT_QPA_PLATFORMTHEME = "gtk3";
QT_QPA_PLATFORM = "wayland";
DISPLAY = ":123";
};
systemd.user.targets.tray = {
# workaround for udiskie
Unit = {
Description = "Home Manager System Tray";
};
};
systemd.user.services = {
udiskie = {
Unit = {
PartOf = ["graphical-session.target"];
After = ["graphical-session.target"];
Requisite = ["graphical-session.target"];
};
Install = {
WantedBy = ["niri.service"];
};
};
waybar = {
Unit = {
PartOf = ["graphical-session.target"];
After = ["graphical-session.target"];
Requisite = ["graphical-session.target"];
};
Install = {
WantedBy = ["niri.service"];
};
};
copyq = {
Unit = {
PartOf = ["graphical-session.target"];
After = ["graphical-session.target"];
Requisite = ["graphical-session.target"];
};
Install = {
WantedBy = ["niri.service"];
};
Service = {
Environment = lib.mkForce "QT_QPA_PLATFORM=wayland";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
wpaperd = {
Unit = {
PartOf = ["graphical-session.target"];
After = ["graphical-session.target"];
Requisite = ["graphical-session.target"];
};
Install = {
WantedBy = ["niri.service"];
};
Service = {
Type = "simple";
ExecStart = "${pkgs.wpaperd}/bin/wpaperd";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
network-manager-applet = {
Unit = {
PartOf = ["graphical-session.target"];
After = ["graphical-session.target"];
Requisite = ["graphical-session.target"];
};
Install = {
WantedBy = ["niri.service"];
};
};
gnome-polkit-agent = {
Unit = {
PartOf = ["graphical-session.target"];
After = ["graphical-session.target"];
Requisite = ["graphical-session.target"];
};
Install = {
WantedBy = ["niri.service"];
};
Service = {
Type = "simple";
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
wlsunset = {
Unit = {
PartOf = ["graphical-session.target"];
After = ["graphical-session.target"];
Requisite = ["graphical-session.target"];
};
Install = {
WantedBy = ["niri.service"];
};
};
hypridle = {
Unit = {
PartOf = ["graphical-session.target"];
After = ["graphical-session.target"];
Requisite = ["graphical-session.target"];
};
Install = {
WantedBy = ["niri.service"];
};
};
xwayland-satellite = {
Unit = {
PartOf = ["graphical-session.target"];
After = ["graphical-session.target"];
Requisite = ["graphical-session.target"];
};
Install = {
WantedBy = ["niri.service"];
};
Service = {
Type = "simple";
ExecStart = "${pkgs.xwayland-satellite}/bin/xwayland-satellite :123";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
};
};
}