diff --git a/machines/terra/modules.nix b/machines/terra/modules.nix index 2b9fe00..9ae4f24 100644 --- a/machines/terra/modules.nix +++ b/machines/terra/modules.nix @@ -27,20 +27,24 @@ wm.hyprland = { enable = true; - config.monitors = { - displays = [ - { - output = "DP-2"; - x = 0; - y = 0; - } - { - output = "DP-3"; - x = -1440; - y = 0; - transform = 1; - } - ]; + config = { + monitors = { + displays = [ + { + output = "DP-2"; + x = 0; + y = 0; + wallpaper = ../../misc/landscape.png; + } + { + output = "DP-3"; + x = -1440; + y = 0; + transform = 1; + wallpaper = ../../misc/portrait.png; + } + ]; + }; }; }; diff --git a/misc/landscape.png b/misc/landscape.png new file mode 100644 index 0000000..650c9dc Binary files /dev/null and b/misc/landscape.png differ diff --git a/misc/portrait.png b/misc/portrait.png new file mode 100644 index 0000000..034fc6f Binary files /dev/null and b/misc/portrait.png differ diff --git a/modules/wm/gnome/default.nix b/modules/wm/gnome/default.nix index 787da70..0051133 100644 --- a/modules/wm/gnome/default.nix +++ b/modules/wm/gnome/default.nix @@ -8,6 +8,7 @@ }: let inherit (lib) mkEnableOption mkIf mkOption types; cfg = config.horseman.wm.gnome; + homeCfg = config.horseman; in { options = { horseman.wm.gnome = { @@ -39,7 +40,7 @@ in { gnome-text-editor ]; - home-manager.users.horseman = { + home-manager.users.${homeCfg.username} = { imports = [./config.nix]; }; }; diff --git a/modules/wm/hyprland/config/hypr/hypridle.conf b/modules/wm/hyprland/config/hypr/hypridle.conf deleted file mode 100644 index 5f297e9..0000000 --- a/modules/wm/hyprland/config/hypr/hypridle.conf +++ /dev/null @@ -1,16 +0,0 @@ -general { - lock_cmd = pidof hyprlock || hyprlock -} - -# Turn off screen -listener { - timeout = 300 - on-timeout = hyprctl dispatch dpms off - on-resume = hyprctl dispatch dpms on -} - -# Lock screen ten seconds later -listener { - timeout = 310 - on-timeout = loginctl lock-session -} diff --git a/modules/wm/hyprland/config/hypr/hyprland.conf b/modules/wm/hyprland/config/hypr/hyprland.conf deleted file mode 100644 index 724fdf6..0000000 --- a/modules/wm/hyprland/config/hypr/hyprland.conf +++ /dev/null @@ -1,208 +0,0 @@ -source = ./monitors.conf -source = ./keybinds.conf - -$nix = /home/horseman/nix-config - -################# -### AUTOSTART ### -################# - -exec-once = hyprpaper -exec-once = eww daemon -exec-once = hypridle -exec-once = systemctl --user start hyprpolkitagent -exec-once = hyprpaper -exec-once = swaync - -# Autostart necessary processes (like notifications daemons, status bars, etc.) -# Or execute your favorite apps at launch like this: - -# exec-once = $terminal -# exec-once = nm-applet & -# exec-once = waybar & hyprpaper & firefox - - -############################# -### ENVIRONMENT VARIABLES ### -############################# - -# See https://wiki.hyprland.org/Configuring/Environment-variables/ - -env = XCURSOR_SIZE,24 -env = HYPRCURSOR_SIZE,24 - - -##################### -### LOOK AND FEEL ### -##################### - -# Refer to https://wiki.hyprland.org/Configuring/Variables/ - -# https://wiki.hyprland.org/Configuring/Variables/#general -general { - gaps_in = 5 - gaps_out = 5 - - border_size = 2 - - # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors - col.active_border = rgba(b7bdf8ff) - col.inactive_border = rgba(b7bdf840) - - resize_on_border = true - - # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on - allow_tearing = false - - layout = dwindle -} - -# https://wiki.hyprland.org/Configuring/Variables/#decoration -decoration { - rounding = 10 - - # Change transparency of focused and unfocused windows - active_opacity = 1.0 - inactive_opacity = 1.0 - - shadow { - enabled = true - range = 4 - render_power = 3 - color = rgba(1a1a1aee) - } - - # https://wiki.hyprland.org/Configuring/Variables/#blur - blur { - enabled = true - size = 3 - passes = 3 - - vibrancy = 0.1696 - } -} - -# https://wiki.hyprland.org/Configuring/Variables/#animations -animations { - enabled = yes, please :) - - # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - - bezier = easeOutQuint,0.23,1,0.32,1 - bezier = easeInOutCubic,0.65,0.05,0.36,1 - bezier = linear,0,0,1,1 - bezier = almostLinear,0.5,0.5,0.75,1.0 - bezier = quick,0.15,0,0.1,1 - - animation = global, 1, 10, default - animation = border, 1, 5.39, easeOutQuint - animation = windows, 1, 4.79, easeOutQuint - animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% - animation = windowsOut, 1, 1.49, linear, popin 87% - animation = fadeIn, 1, 1.73, almostLinear - animation = fadeOut, 1, 1.46, almostLinear - animation = fade, 1, 3.03, quick - animation = layers, 1, 3.81, easeOutQuint - animation = layersIn, 1, 4, easeOutQuint, fade - animation = layersOut, 1, 1.5, linear, fade - animation = fadeLayersIn, 1, 1.79, almostLinear - animation = fadeLayersOut, 1, 1.39, almostLinear - animation = workspaces, 1, 1.94, almostLinear, fade - animation = workspacesIn, 1, 1.21, almostLinear, fade - animation = workspacesOut, 1, 1.94, almostLinear, fade -} - -# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ -# "Smart gaps" / "No gaps when only" -# uncomment all if you wish to use that. -# workspace = w[tv1], gapsout:0, gapsin:0 -# workspace = f[1], gapsout:0, gapsin:0 -# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1] -# windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1] -# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1] -# windowrulev2 = rounding 0, floating:0, onworkspace:f[1] - -# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more -dwindle { - pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = true # You probably want this -} - -# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more -master { - new_status = master -} - -# https://wiki.hyprland.org/Configuring/Variables/#misc -misc { - force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers - disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :( -} - - -############# -### INPUT ### -############# - -# https://wiki.hyprland.org/Configuring/Variables/#input -input { - kb_layout = us - kb_variant = - kb_model = - kb_options = - kb_rules = - - repeat_rate = 50 - repeat_delay = 300 - - follow_mouse = 1 - - sensitivity = 0 # -1.0 - 1.0, 0 means no modification. - - touchpad { - natural_scroll = true - } -} - -# https://wiki.hyprland.org/Configuring/Variables/#gestures -gestures { - workspace_swipe = false -} - -# Example per-device config -# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more -device { - name = epic-mouse-v1 - sensitivity = -0.5 -} - -############################## -### WINDOWS AND WORKSPACES ### -############################## - -# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules - -# Example windowrule v1 -# windowrule = float, ^(kitty)$ - -# Example windowrule v2 -# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ - -# Ignore maximize requests from apps. You'll probably like this. -windowrulev2 = suppressevent maximize, class:.* - -# Fix some dragging issues with XWayland -windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 - -# No gaps when only one tiled window on workspace -workspace = w[t1], gapsout:0, gapsin:0 -windowrule = rounding 0, floating:0 onworkspace:w[t1] -windowrule = bordersize 0, floating:0 onworkspace:w[t1] - -# Make firefox miniplayer float -windowrule = float, initialTitle:^Picture-in-Picture$ -windowrule = center, initialTitle:^Picture-in-Picture$ -windowrule = size 33% 33%, initialTitle:^Picture-in-Picture$ - -windowrule = float, initialClass:CImg diff --git a/modules/wm/hyprland/config/hypr/hyprlock.conf b/modules/wm/hyprland/config/hypr/hyprlock.conf deleted file mode 100644 index 0a4d96f..0000000 --- a/modules/wm/hyprland/config/hypr/hyprlock.conf +++ /dev/null @@ -1,74 +0,0 @@ -# GENERAL -general { - disable_loading_bar = true - hide_cursor = true - ignore_empty_input = true -} - -# BACKGROUND -background { - path = screenshot - blur_size = 2 - blur_passes = 1 -} - -# INPUT FIELD -input-field { - monitor = - outline_thickness = 0 - dots_size = 0.2 - dots_spacing = 0.5 - dots_center = true - dots_rounding = -1 - inner_color = rgb(36, 39, 58) - font_color = rgb(202, 211, 245) - fade_on_empty = true - fade_timeout = 1000 - placeholder_text = - hide_input = false - rounding = -1 - check_color = rgb(245, 169, 127) - fail_color = rgb(237, 135, 150) - fail_text = $FAIL ($ATTEMPTS) - fail_timeout = 2000 - fail_transition = 300 - capslock_color = -1 - numlock_color = -1 - bothlock_color = -1 - invert_numlock = true - swap_font_color = true - - size = 800, 50 - position = 0, 200 - valign = bottom -} - -# CLOCK -label { - monitor = - text = cmd[update:1000] echo " $(date +"%H:%M") " - color = rgb(183, 189, 248) - font_size = 94 - font_family = JetBrains Mono Nerd Font 10 - - position = 0, -100 - halign = center - valign = top - - shadow_size = 5 - shadow_passes = 1 - shadow_color = rgb(0,0,0) -} - -# USERNAME -label { - monitor = - text = $USER - color = rgb(198, 160, 246) - font_size = 18 - font_family = JetBrains Mono Nerd Font 10 - - position = 0, -250 - halign = center - valign = top -} diff --git a/modules/wm/hyprland/config/hypr/hyprpaper.conf b/modules/wm/hyprland/config/hypr/hyprpaper.conf deleted file mode 100644 index ed3c001..0000000 --- a/modules/wm/hyprland/config/hypr/hyprpaper.conf +++ /dev/null @@ -1,2 +0,0 @@ -preload = /home/horseman/nix-config/misc/wallpaper.jpg -wallpaper = , /home/horseman/nix-config/misc/wallpaper.jpg diff --git a/modules/wm/hyprland/config/hypr/keybinds.conf b/modules/wm/hyprland/config/hypr/keybinds.conf deleted file mode 100644 index 0f08015..0000000 --- a/modules/wm/hyprland/config/hypr/keybinds.conf +++ /dev/null @@ -1,81 +0,0 @@ -$mainMod = SUPER -$terminal = kitty -$launcher = (eww close-all && pkill wofi) || (~/.config/eww/scripts/open.sh; wofi --show drun; eww close-all) - -bind = SUPER, SPACE, exec, $launcher - -bind = $mainMod, RETURN, exec, $terminal - -bind = $mainMod, Q, killactive - -bindo = $mainMod, ESCAPE, submap, disable-all -submap = disable-all -bindo = $mainMod, ESCAPE, submap, reset -submap = reset - -bind = , F11, fullscreen -bindo = $mainMod, L, exec, hyprlock -bind = $mainMod, F, togglefloating -bind = $mainMod, P, pin -bind = $mainMod&SHIFT, S, exec, hyprshot -m region --clipboard-only - -bind = $mainMod, H, movefocus, l -bind = $mainMod, L, movefocus, r -bind = $mainMod, K, movefocus, u -bind = $mainMod, J, movefocus, d - -bind = $mainMod&SHIFT, H, movewindow, l -bind = $mainMod&SHIFT, L, movewindow, r -bind = $mainMod&SHIFT, K, movewindow, u -bind = $mainMod&SHIFT, J, movewindow, d - -binde = $mainMod, Left, moveactive, -50 0 -binde = $mainMod, Right, moveactive, 50 0 -binde = $mainMod, Up, moveactive, 0 -50 -binde = $mainMod, Down, moveactive, 0 50 - -binde = $mainMod&SHIFT, Left, resizeactive, -50 0 -binde = $mainMod&SHIFT, Right, resizeactive, 50 0 -binde = $mainMod&SHIFT, Up, resizeactive, 0 -50 -binde = $mainMod&SHIFT, Down, resizeactive, 0 50 - -bind = $mainMod, 1, workspace, 1 -bind = $mainMod, 2, workspace, 2 -bind = $mainMod, 3, workspace, 3 -bind = $mainMod, 4, workspace, 4 -bind = $mainMod, 5, workspace, 5 -bind = $mainMod, 6, workspace, 6 -bind = $mainMod, 7, workspace, 7 -bind = $mainMod, 8, workspace, 8 -bind = $mainMod, 9, workspace, 9 -bind = $mainMod, 0, workspace, 10 - -bind = $mainMod SHIFT, 1, movetoworkspace, 1 -bind = $mainMod SHIFT, 2, movetoworkspace, 2 -bind = $mainMod SHIFT, 3, movetoworkspace, 3 -bind = $mainMod SHIFT, 4, movetoworkspace, 4 -bind = $mainMod SHIFT, 5, movetoworkspace, 5 -bind = $mainMod SHIFT, 6, movetoworkspace, 6 -bind = $mainMod SHIFT, 7, movetoworkspace, 7 -bind = $mainMod SHIFT, 8, movetoworkspace, 8 -bind = $mainMod SHIFT, 9, movetoworkspace, 9 -bind = $mainMod SHIFT, 0, movetoworkspace, 10 - -bind = CONTROL&$mainMod, right, workspace, e+1 -bind = CONTROL&$mainMod, left, workspace, e-1 - -bindm = $mainMod,mouse:272, movewindow -bindm = $mainMod SHIFT,mouse:272, resizewindow - -bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+ -bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%- -bindel = SHIFT,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+ -bindel = SHIFT,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%- -bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle -bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle -bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+ -bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%- -bindl = , XF86AudioNext, exec, playerctl next -bindl = , XF86AudioPause, exec, playerctl play-pause -bindl = , XF86AudioPlay, exec, playerctl play-pause -bindl = , XF86AudioPrev, exec, playerctl previous diff --git a/modules/wm/hyprland/config/hypr/monitors.conf b/modules/wm/hyprland/config/hypr/monitors.conf deleted file mode 100644 index 6179f3d..0000000 --- a/modules/wm/hyprland/config/hypr/monitors.conf +++ /dev/null @@ -1,10 +0,0 @@ -# luna monitors -monitor = eDP-1, 1920x1080@60, 0x0, 1 - -# terra monitors -monitor = DP-2, 2560x1440@165, 0x0, 1, transform, 0 -monitor = DP-3, 2560x1440@165, -1440x0, 1, transform, 1 - -# default monitor config -monitor=,preferred,auto,auto - diff --git a/modules/wm/hyprland/default.nix b/modules/wm/hyprland/default.nix index aee2d30..2e5f56c 100644 --- a/modules/wm/hyprland/default.nix +++ b/modules/wm/hyprland/default.nix @@ -4,7 +4,7 @@ pkgs, ... }: let - inherit (lib) mkIf; + inherit (lib) mkIf mkEnableOption; cfg = config.horseman.wm.hyprland; in { imports = [ @@ -12,6 +12,10 @@ in { ./keybindings.nix ]; + options = { + horseman.wm.hyprland.enable = mkEnableOption "Hyprland"; + }; + config = mkIf cfg.enable { programs.hyprland = { enable = true; @@ -47,6 +51,7 @@ in { "hypridle" "hyprpaper" "swaync" + "systemctl --user start hyprpolkitagent" ]; env = [ @@ -261,6 +266,7 @@ in { misc = { forceDefaultWallpaper = 0; + keyPressEnablesDPMS = true; }; input = { @@ -280,6 +286,22 @@ in { monitors = { defaultMonitor = true; }; + + sleep = { + lockCommand = "pidof hyprlock || hyprlock"; + + listeners = [ + { + timeout = 300; + onTimeout = "hyprctl dispatch dpms off"; + onResume = "hyprctl dispatch dpms on"; + } + { + timeout = 310; + onTimeout = "loginctl lock-session"; + } + ]; + }; }; services.logind.extraConfig = '' diff --git a/modules/wm/hyprland/keybindings.nix b/modules/wm/hyprland/keybindings.nix index 0bfce32..af860aa 100644 --- a/modules/wm/hyprland/keybindings.nix +++ b/modules/wm/hyprland/keybindings.nix @@ -7,439 +7,459 @@ cfg = config.horseman.wm.hyprland; in { config = mkIf cfg.enable { - horseman.wm.hyprland.config.keybindings = [ - { - flags = []; - mods = ["SUPER"]; - key = "SPACE"; - dispatcher = "exec"; - params = "(eww close-all && pkill wofi) || (~/.config/eww/scripts/open.sh; wofi --show drun; eww close-all)"; - } + horseman.wm.hyprland.config.keybindings = { + submaps = [ + { + name = "disable-all"; + enterBind = { + flags = ["o"]; + mods = ["SUPER"]; + key = "ESCAPE"; + }; + exitBind = { + flags = ["o"]; + mods = ["SUPER"]; + key = "ESCAPE"; + }; - { - flags = []; - mods = ["SUPER"]; - key = "RETURN"; - dispatcher = "exec"; - params = "kitty"; - } + binds = []; + } + ]; - { - flags = []; - mods = ["SUPER"]; - key = "Q"; - dispatcher = "killactive"; - params = ""; - } + binds = [ + { + flags = []; + mods = ["SUPER"]; + key = "SPACE"; + dispatcher = "exec"; + params = "(eww close-all && pkill wofi) || (~/.config/eww/scripts/open.sh; wofi --show drun; eww close-all)"; + } - { - flags = []; - mods = []; - key = "F11"; - dispatcher = "fullscreen"; - params = ""; - } - { - flags = ["o"]; - mods = ["SUPER"]; - key = "L"; - dispatcher = "exec"; - params = "hyprlock"; - } - { - flags = []; - mods = ["SUPER"]; - key = "F"; - dispatcher = "togglefloating"; - params = ""; - } - { - flags = []; - mods = ["SUPER"]; - key = "P"; - dispatcher = "pin"; - params = ""; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "S"; - dispatcher = "exec"; - params = "hyprshot -m region --clipboard-only"; - } + { + flags = []; + mods = ["SUPER"]; + key = "RETURN"; + dispatcher = "exec"; + params = "kitty"; + } - { - flags = []; - mods = ["SUPER"]; - key = "H"; - dispatcher = "movefocus"; - params = "l"; - } - { - flags = []; - mods = ["SUPER"]; - key = "L"; - dispatcher = "movefocus"; - params = "r"; - } - { - flags = []; - mods = ["SUPER"]; - key = "K"; - dispatcher = "movefocus"; - params = "u"; - } - { - flags = []; - mods = ["SUPER"]; - key = "J"; - dispatcher = "movefocus"; - params = "d"; - } + { + flags = []; + mods = ["SUPER"]; + key = "Q"; + dispatcher = "killactive"; + params = ""; + } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "H"; - dispatcher = "movewindow"; - params = "l"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "L"; - dispatcher = "movewindow"; - params = "r"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "K"; - dispatcher = "movewindow"; - params = "u"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "J"; - dispatcher = "movewindow"; - params = "d"; - } + { + flags = []; + mods = []; + key = "F11"; + dispatcher = "fullscreen"; + params = ""; + } + { + flags = ["o"]; + mods = ["SUPER"]; + key = "L"; + dispatcher = "exec"; + params = "hyprlock"; + } + { + flags = []; + mods = ["SUPER"]; + key = "F"; + dispatcher = "togglefloating"; + params = ""; + } + { + flags = []; + mods = ["SUPER"]; + key = "P"; + dispatcher = "pin"; + params = ""; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "S"; + dispatcher = "exec"; + params = "hyprshot -m region --clipboard-only"; + } - { - flags = ["e"]; - mods = ["SUPER"]; - key = "Left"; - dispatcher = "moveactive"; - params = "-50 0"; - } - { - flags = ["e"]; - mods = ["SUPER"]; - key = "Right"; - dispatcher = "moveactive"; - params = "50 0"; - } - { - flags = ["e"]; - mods = ["SUPER"]; - key = "Up"; - dispatcher = "moveactive"; - params = "0 -50"; - } - { - flags = ["e"]; - mods = ["SUPER"]; - key = "Down"; - dispatcher = "moveactive"; - params = "0 50"; - } + { + flags = []; + mods = ["SUPER"]; + key = "H"; + dispatcher = "movefocus"; + params = "l"; + } + { + flags = []; + mods = ["SUPER"]; + key = "L"; + dispatcher = "movefocus"; + params = "r"; + } + { + flags = []; + mods = ["SUPER"]; + key = "K"; + dispatcher = "movefocus"; + params = "u"; + } + { + flags = []; + mods = ["SUPER"]; + key = "J"; + dispatcher = "movefocus"; + params = "d"; + } - { - flags = ["e"]; - mods = ["SUPER" "SHIFT"]; - key = "Left"; - dispatcher = "resizeactive"; - params = "-50 0"; - } - { - flags = ["e"]; - mods = ["SUPER" "SHIFT"]; - key = "Right"; - dispatcher = "resizeactive"; - params = "50 0"; - } - { - flags = ["e"]; - mods = ["SUPER" "SHIFT"]; - key = "Up"; - dispatcher = "resizeactive"; - params = "0 -50"; - } - { - flags = ["e"]; - mods = ["SUPER" "SHIFT"]; - key = "Down"; - dispatcher = "resizeactive"; - params = "0 50"; - } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "H"; + dispatcher = "movewindow"; + params = "l"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "L"; + dispatcher = "movewindow"; + params = "r"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "K"; + dispatcher = "movewindow"; + params = "u"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "J"; + dispatcher = "movewindow"; + params = "d"; + } - { - flags = []; - mods = ["SUPER"]; - key = "1"; - dispatcher = "workspace"; - params = "1"; - } - { - flags = []; - mods = ["SUPER"]; - key = "2"; - dispatcher = "workspace"; - params = "2"; - } - { - flags = []; - mods = ["SUPER"]; - key = "3"; - dispatcher = "workspace"; - params = "3"; - } - { - flags = []; - mods = ["SUPER"]; - key = "4"; - dispatcher = "workspace"; - params = "4"; - } - { - flags = []; - mods = ["SUPER"]; - key = "5"; - dispatcher = "workspace"; - params = "5"; - } - { - flags = []; - mods = ["SUPER"]; - key = "6"; - dispatcher = "workspace"; - params = "6"; - } - { - flags = []; - mods = ["SUPER"]; - key = "7"; - dispatcher = "workspace"; - params = "7"; - } - { - flags = []; - mods = ["SUPER"]; - key = "8"; - dispatcher = "workspace"; - params = "8"; - } - { - flags = []; - mods = ["SUPER"]; - key = "9"; - dispatcher = "workspace"; - params = "9"; - } - { - flags = []; - mods = ["SUPER"]; - key = "0"; - dispatcher = "workspace"; - params = "10"; - } + { + flags = ["e"]; + mods = ["SUPER"]; + key = "Left"; + dispatcher = "moveactive"; + params = "-50 0"; + } + { + flags = ["e"]; + mods = ["SUPER"]; + key = "Right"; + dispatcher = "moveactive"; + params = "50 0"; + } + { + flags = ["e"]; + mods = ["SUPER"]; + key = "Up"; + dispatcher = "moveactive"; + params = "0 -50"; + } + { + flags = ["e"]; + mods = ["SUPER"]; + key = "Down"; + dispatcher = "moveactive"; + params = "0 50"; + } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "1"; - dispatcher = "movetoworkspace"; - params = "1"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "2"; - dispatcher = "movetoworkspace"; - params = "2"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "3"; - dispatcher = "movetoworkspace"; - params = "3"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "4"; - dispatcher = "movetoworkspace"; - params = "4"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "5"; - dispatcher = "movetoworkspace"; - params = "5"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "6"; - dispatcher = "movetoworkspace"; - params = "6"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "7"; - dispatcher = "movetoworkspace"; - params = "7"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "8"; - dispatcher = "movetoworkspace"; - params = "8"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "9"; - dispatcher = "movetoworkspace"; - params = "9"; - } - { - flags = []; - mods = ["SUPER" "SHIFT"]; - key = "0"; - dispatcher = "movetoworkspace"; - params = "10"; - } + { + flags = ["e"]; + mods = ["SUPER" "SHIFT"]; + key = "Left"; + dispatcher = "resizeactive"; + params = "-50 0"; + } + { + flags = ["e"]; + mods = ["SUPER" "SHIFT"]; + key = "Right"; + dispatcher = "resizeactive"; + params = "50 0"; + } + { + flags = ["e"]; + mods = ["SUPER" "SHIFT"]; + key = "Up"; + dispatcher = "resizeactive"; + params = "0 -50"; + } + { + flags = ["e"]; + mods = ["SUPER" "SHIFT"]; + key = "Down"; + dispatcher = "resizeactive"; + params = "0 50"; + } - { - flags = []; - mods = ["SUPER" "CONTROL"]; - key = "Right"; - dispatcher = "workspace"; - params = "e+1"; - } - { - flags = []; - mods = ["SUPER" "CONTROL"]; - key = "Left"; - dispatcher = "workspace"; - params = "e-1"; - } + { + flags = []; + mods = ["SUPER"]; + key = "1"; + dispatcher = "workspace"; + params = "1"; + } + { + flags = []; + mods = ["SUPER"]; + key = "2"; + dispatcher = "workspace"; + params = "2"; + } + { + flags = []; + mods = ["SUPER"]; + key = "3"; + dispatcher = "workspace"; + params = "3"; + } + { + flags = []; + mods = ["SUPER"]; + key = "4"; + dispatcher = "workspace"; + params = "4"; + } + { + flags = []; + mods = ["SUPER"]; + key = "5"; + dispatcher = "workspace"; + params = "5"; + } + { + flags = []; + mods = ["SUPER"]; + key = "6"; + dispatcher = "workspace"; + params = "6"; + } + { + flags = []; + mods = ["SUPER"]; + key = "7"; + dispatcher = "workspace"; + params = "7"; + } + { + flags = []; + mods = ["SUPER"]; + key = "8"; + dispatcher = "workspace"; + params = "8"; + } + { + flags = []; + mods = ["SUPER"]; + key = "9"; + dispatcher = "workspace"; + params = "9"; + } + { + flags = []; + mods = ["SUPER"]; + key = "0"; + dispatcher = "workspace"; + params = "10"; + } - { - flags = ["m"]; - mods = ["SUPER"]; - key = "mouse:272"; - dispatcher = "movewindow"; - params = ""; - } - { - flags = ["m"]; - mods = ["SUPER" "SHIFT"]; - key = "mouse:272"; - dispatcher = "resizewindow"; - params = ""; - } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "1"; + dispatcher = "movetoworkspace"; + params = "1"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "2"; + dispatcher = "movetoworkspace"; + params = "2"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "3"; + dispatcher = "movetoworkspace"; + params = "3"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "4"; + dispatcher = "movetoworkspace"; + params = "4"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "5"; + dispatcher = "movetoworkspace"; + params = "5"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "6"; + dispatcher = "movetoworkspace"; + params = "6"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "7"; + dispatcher = "movetoworkspace"; + params = "7"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "8"; + dispatcher = "movetoworkspace"; + params = "8"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "9"; + dispatcher = "movetoworkspace"; + params = "9"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "0"; + dispatcher = "movetoworkspace"; + params = "10"; + } - { - flags = ["e" "l"]; - mods = []; - key = "XF86AudioRaiseVolume"; - dispatcher = "exec"; - params = "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+"; - } - { - flags = ["e" "l"]; - mods = []; - key = "XF86AudioLowerVolume"; - dispatcher = "exec"; - params = "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%-"; - } - { - flags = ["e" "l"]; - mods = ["SHIFT"]; - key = "XF86AudioRaiseVolume"; - dispatcher = "exec"; - params = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+"; - } - { - flags = ["e" "l"]; - mods = ["SHIFT"]; - key = "XF86AudioLowerVolume"; - dispatcher = "exec"; - params = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-"; - } - { - flags = ["e" "l"]; - mods = []; - key = "XF86AudioMute"; - dispatcher = "exec"; - params = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; - } - { - flags = ["e" "l"]; - mods = []; - key = "XF86AudioMicMute"; - dispatcher = "exec"; - params = "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; - } - { - flags = ["e" "l"]; - mods = []; - key = "XF86MonBrightnessUp"; - dispatcher = "exec"; - params = "brightnessctl s 10%+"; - } - { - flags = ["e" "l"]; - mods = []; - key = "XF86MonBrightnessDown"; - dispatcher = "exec"; - params = "brightnessctl s 10%-"; - } - { - flags = ["l"]; - mods = []; - key = "XF86AudioNext"; - dispatcher = "exec"; - params = "playerctl next"; - } - { - flags = ["l"]; - mods = []; - key = "XF86AudioPause"; - dispatcher = "exec"; - params = "playerctl play-pause"; - } - { - flags = ["l"]; - mods = []; - key = "XF86AudioPlay"; - dispatcher = "exec"; - params = "playerctl play-pause"; - } - { - flags = ["l"]; - mods = []; - key = "XF86AudioPrev"; - dispatcher = "exec"; - params = "playerctl previous"; - } - ]; + { + flags = []; + mods = ["SUPER" "CONTROL"]; + key = "Right"; + dispatcher = "workspace"; + params = "e+1"; + } + { + flags = []; + mods = ["SUPER" "CONTROL"]; + key = "Left"; + dispatcher = "workspace"; + params = "e-1"; + } + + { + flags = ["m"]; + mods = ["SUPER"]; + key = "mouse:272"; + dispatcher = "movewindow"; + params = ""; + } + { + flags = ["m"]; + mods = ["SUPER" "SHIFT"]; + key = "mouse:272"; + dispatcher = "resizewindow"; + params = ""; + } + + { + flags = ["e" "l"]; + mods = []; + key = "XF86AudioRaiseVolume"; + dispatcher = "exec"; + params = "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+"; + } + { + flags = ["e" "l"]; + mods = []; + key = "XF86AudioLowerVolume"; + dispatcher = "exec"; + params = "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%-"; + } + { + flags = ["e" "l"]; + mods = ["SHIFT"]; + key = "XF86AudioRaiseVolume"; + dispatcher = "exec"; + params = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+"; + } + { + flags = ["e" "l"]; + mods = ["SHIFT"]; + key = "XF86AudioLowerVolume"; + dispatcher = "exec"; + params = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-"; + } + { + flags = ["e" "l"]; + mods = []; + key = "XF86AudioMute"; + dispatcher = "exec"; + params = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; + } + { + flags = ["e" "l"]; + mods = []; + key = "XF86AudioMicMute"; + dispatcher = "exec"; + params = "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; + } + { + flags = ["e" "l"]; + mods = []; + key = "XF86MonBrightnessUp"; + dispatcher = "exec"; + params = "brightnessctl s 10%+"; + } + { + flags = ["e" "l"]; + mods = []; + key = "XF86MonBrightnessDown"; + dispatcher = "exec"; + params = "brightnessctl s 10%-"; + } + { + flags = ["l"]; + mods = []; + key = "XF86AudioNext"; + dispatcher = "exec"; + params = "playerctl next"; + } + { + flags = ["l"]; + mods = []; + key = "XF86AudioPause"; + dispatcher = "exec"; + params = "playerctl play-pause"; + } + { + flags = ["l"]; + mods = []; + key = "XF86AudioPlay"; + dispatcher = "exec"; + params = "playerctl play-pause"; + } + { + flags = ["l"]; + mods = []; + key = "XF86AudioPrev"; + dispatcher = "exec"; + params = "playerctl previous"; + } + ]; + }; }; } diff --git a/modules/wm/hyprland/options.nix b/modules/wm/hyprland/options.nix index 6e541de..c0e3ba7 100644 --- a/modules/wm/hyprland/options.nix +++ b/modules/wm/hyprland/options.nix @@ -1,12 +1,12 @@ { lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkOption mkIf types trivial strings replaceStrings; + inherit (lib) mkOption mkIf types trivial strings replaceStrings; inherit (builtins) concatStringsSep elem; cfg = config.horseman.wm.hyprland; + homeCfg = config.horseman; keybinding = types.submodule { options = { flags = mkOption { @@ -30,193 +30,240 @@ }; }; }; + submapKeybinding = types.submodule { + options = { + flags = mkOption { + type = types.listOf (types.enum ["l" "r" "c" "g" "o" "e" "m" "t" "i" "s" "d" "p"]); + }; + + mods = mkOption { + type = types.listOf types.str; + }; + + key = mkOption { + type = types.str; + }; + }; + }; in { options = { - horseman.wm.hyprland = { - enable = mkEnableOption "Hyprland"; + horseman.wm.hyprland.config = { + execOnce = mkOption {type = types.listOf types.str;}; + env = mkOption {type = types.listOf types.str;}; + windowrules = mkOption {type = types.listOf types.str;}; - config = { - execOnce = mkOption {type = types.listOf types.str;}; - env = mkOption {type = types.listOf types.str;}; - windowrules = mkOption {type = types.listOf types.str;}; + workspaces = mkOption { + type = types.listOf types.str; + }; - workspaces = mkOption { - type = types.listOf types.str; + general = { + gapsIn = mkOption {type = types.int;}; + gapsOut = mkOption {type = types.int;}; + borderSize = mkOption {type = types.int;}; + col.activeBorder = mkOption {type = types.str;}; + col.inactiveBorder = mkOption {type = types.str;}; + resizeOnBorder = mkOption {type = types.bool;}; + allowTearing = mkOption {type = types.bool;}; + layout = mkOption {type = types.enum ["dwindle" "master"];}; + }; + + decoration = { + rounding = mkOption {type = types.int;}; + activeOpacity = mkOption {type = types.float;}; + inactiveOpacity = mkOption {type = types.float;}; + + shadow = { + enabled = mkOption {type = types.bool;}; + range = mkOption {type = types.int;}; + renderPower = mkOption {type = types.int;}; + color = mkOption {type = types.str;}; }; - general = { - gapsIn = mkOption {type = types.int;}; - gapsOut = mkOption {type = types.int;}; - borderSize = mkOption {type = types.int;}; - col.activeBorder = mkOption {type = types.str;}; - col.inactiveBorder = mkOption {type = types.str;}; - resizeOnBorder = mkOption {type = types.bool;}; - allowTearing = mkOption {type = types.bool;}; - layout = mkOption {type = types.enum ["dwindle" "master"];}; - }; - - decoration = { - rounding = mkOption {type = types.int;}; - activeOpacity = mkOption {type = types.float;}; - inactiveOpacity = mkOption {type = types.float;}; - - shadow = { - enabled = mkOption {type = types.bool;}; - range = mkOption {type = types.int;}; - renderPower = mkOption {type = types.int;}; - color = mkOption {type = types.str;}; - }; - - blur = { - enabled = mkOption {type = types.bool;}; - size = mkOption {type = types.int;}; - passes = mkOption {type = types.int;}; - vibrancy = mkOption {type = types.float;}; - }; - }; - - animations = { - enabled = mkOption { - type = types.bool; - }; - - beziers = mkOption { - type = types.listOf (types.submodule { - options = { - name = mkOption {type = types.str;}; - startX = mkOption {type = types.number;}; - startY = mkOption {type = types.number;}; - endX = mkOption {type = types.number;}; - endY = mkOption {type = types.number;}; - }; - }); - }; - - animations = mkOption { - type = types.listOf (types.submodule { - options = { - name = mkOption {type = types.str;}; - on = mkOption {type = types.bool;}; - speed = mkOption { - type = types.number; - default = 0; - }; - curve = mkOption { - type = types.str; - default = ""; - }; - style = mkOption { - type = types.str; - default = ""; - }; - }; - }); - }; - }; - - dwindle = { - pseudotile = mkOption { - type = types.bool; - }; - - preserveSplit = mkOption { - type = types.bool; - }; - }; - - master = { - newStatus = mkOption { - type = types.enum ["master" "slave" "inherit"]; - }; - }; - - misc = { - forceDefaultWallpaper = mkOption { - type = types.enum [0 1 2 (-1)]; - }; - }; - - input = { - kbLayout = mkOption { - type = types.str; - }; - - repeatRate = mkOption { - type = types.int; - }; - - repeatDelay = mkOption { - type = types.int; - }; - - followMouse = mkOption { - type = types.enum [0 1 2 3]; - }; - - sensitivity = mkOption { - type = types.numbers.between (-1.0) 1.0; - }; - - numlockByDefault = mkOption { - type = types.bool; - }; - - touchpad = { - naturalScroll = mkOption { - type = types.bool; - }; - }; - }; - - gestures = { - workspaceSwipe = mkOption { - type = types.bool; - }; - }; - - monitors = { - defaultMonitor = mkOption { - type = types.bool; - }; - - displays = mkOption { - type = types.listOf (types.submodule { - options = { - output = mkOption {type = types.str;}; - resolution = mkOption { - type = types.str; - default = "highres"; - }; - refreshRate = mkOption { - type = types.str; - default = "highrr"; - }; - x = mkOption {type = types.int;}; - y = mkOption {type = types.int;}; - scale = mkOption { - type = types.number; - default = 1; - }; - transform = mkOption { - type = types.enum [0 1 2 3 4 5 6 7]; - default = 0; - }; - }; - }); - }; - }; - - keybindings = mkOption { - type = types.listOf keybinding; + blur = { + enabled = mkOption {type = types.bool;}; + size = mkOption {type = types.int;}; + passes = mkOption {type = types.int;}; + vibrancy = mkOption {type = types.float;}; }; }; + + animations = { + enabled = mkOption { + type = types.bool; + }; + + beziers = mkOption { + type = types.listOf (types.submodule { + options = { + name = mkOption {type = types.str;}; + startX = mkOption {type = types.number;}; + startY = mkOption {type = types.number;}; + endX = mkOption {type = types.number;}; + endY = mkOption {type = types.number;}; + }; + }); + }; + + animations = mkOption { + type = types.listOf (types.submodule { + options = { + name = mkOption {type = types.str;}; + on = mkOption {type = types.bool;}; + speed = mkOption { + type = types.number; + default = 0; + }; + curve = mkOption { + type = types.str; + default = ""; + }; + style = mkOption { + type = types.str; + default = ""; + }; + }; + }); + }; + }; + + dwindle = { + pseudotile = mkOption {type = types.bool;}; + preserveSplit = mkOption {type = types.bool;}; + }; + + master = { + newStatus = mkOption {type = types.enum ["master" "slave" "inherit"];}; + }; + + misc = { + forceDefaultWallpaper = mkOption {type = types.enum [0 1 2 (-1)];}; + keyPressEnablesDPMS = mkOption {type = types.bool;}; + }; + + input = { + kbLayout = mkOption {type = types.str;}; + repeatRate = mkOption {type = types.int;}; + repeatDelay = mkOption {type = types.int;}; + followMouse = mkOption {type = types.enum [0 1 2 3];}; + sensitivity = mkOption {type = types.numbers.between (-1.0) 1.0;}; + numlockByDefault = mkOption {type = types.bool;}; + touchpad = { + naturalScroll = mkOption {type = types.bool;}; + }; + }; + + gestures = { + workspaceSwipe = mkOption {type = types.bool;}; + }; + + monitors = { + defaultMonitor = mkOption {type = types.bool;}; + + displays = mkOption { + type = types.listOf (types.submodule { + options = { + output = mkOption {type = types.str;}; + resolution = mkOption { + type = types.str; + default = "highres"; + }; + refreshRate = mkOption { + type = types.str; + default = "highrr"; + }; + x = mkOption {type = types.int;}; + y = mkOption {type = types.int;}; + scale = mkOption { + type = types.number; + default = 1; + }; + transform = mkOption { + type = types.enum [0 1 2 3 4 5 6 7]; + default = 0; + }; + wallpaper = mkOption { + type = types.nullOr types.path; + default = null; + }; + }; + }); + }; + }; + + keybindings = { + binds = mkOption {type = types.listOf keybinding;}; + + submaps = mkOption { + type = types.listOf (types.submodule { + options = { + name = mkOption {type = types.str;}; + enterBind = mkOption {type = submapKeybinding;}; + exitBind = mkOption {type = submapKeybinding;}; + binds = mkOption {type = types.listOf keybinding;}; + }; + }); + }; + }; + + sleep = { + lockCommand = mkOption {type = types.str;}; + + listeners = mkOption { + type = types.listOf (types.submodule { + options = { + timeout = mkOption {type = types.ints.positive;}; + onTimeout = mkOption {type = types.str;}; + onResume = mkOption { + type = types.str; + default = ""; + }; + ignoreInhibit = mkOption { + type = types.bool; + default = false; + }; + }; + }); + }; + }; + + }; }; config = mkIf cfg.enable { - generatedHyprlandConf = pkgs.writeTextFile { - name = "hyprland.conf"; - text = '' + home-manager.users.${homeCfg.username} = { + xdg.configFile."hypr/hypridle.conf".text = '' + # This file has been auto-generated. + general { + lock_cmd = ${cfg.config.sleep.lockCommand} + } + + ${concatStringsSep "\n\n" (map (lis: '' + listener { + timeout = ${toString lis.timeout} + on-timeout = ${lis.onTimeout} + on-resume = ${lis.onResume} + } + '') + cfg.config.sleep.listeners)} + ''; + + xdg.configFile."hypr/hyprpaper.conf".text = '' + # This file has been auto-generated. + ${concatStringsSep "\n" (map (dis: + if dis.wallpaper != null + then '' + preload = ${dis.wallpaper} + wallpaper = ${dis.output}, ${dis.wallpaper} + '' + else "") + cfg.config.monitors.displays)} + + preload = /home/horseman/nix-config/misc/wallpaper.jpg + wallpaper = , /home/horseman/nix-config/misc/wallpaper.jpg + ''; + + xdg.configFile."hypr/hyprland.conf".text = '' # This file has been auto-generated. ${concatStringsSep "\n" (map (kb: "bind${concatStringsSep "" kb.flags} = ${concatStringsSep " " kb.mods}, ${kb.key}, ${kb.dispatcher}${ @@ -224,7 +271,23 @@ in { then "" else ", ${replaceStrings ["%"] ["%%"] kb.params}" }") - cfg.config.keybindings)} + cfg.config.keybindings.binds)} + + ${concatStringsSep "\n\n" (map (sm: '' + bind${concatStringsSep "" sm.enterBind.flags} = ${concatStringsSep " " sm.enterBind.mods}, ${sm.enterBind.key}, submap, ${sm.name} + submap = ${sm.name} + + ${concatStringsSep "\n" (map (kb: "bind${concatStringsSep "" kb.flags} = ${concatStringsSep " " kb.mods}, ${kb.key}, ${kb.dispatcher}${ + if (elem "m" kb.flags) # Mouse binds take one argument less + then "" + else ", ${replaceStrings ["%"] ["%%"] kb.params}" + }") + sm.binds)} + + bind${concatStringsSep "" sm.exitBind.flags} = ${concatStringsSep " " sm.exitBind.mods}, ${sm.exitBind.key}, submap, reset + submap = reset + '') + cfg.config.keybindings.submaps)} ${concatStringsSep "\n" (map (x: "exec-once = " + x) cfg.config.execOnce)} @@ -281,6 +344,7 @@ in { misc { force_default_wallpaper = ${toString cfg.config.misc.forceDefaultWallpaper} + key_press_enables_dpms = ${trivial.boolToString cfg.config.misc.keyPressEnablesDPMS} } input { @@ -313,5 +377,63 @@ in { ${concatStringsSep "\n" (map (wr: "windowrule = " + replaceStrings ["%"] ["%%"] wr) cfg.config.windowrules)} ''; }; + + xdg.configFile."hypr/hyprlock.conf".text = '' + $font = Monospace + + general { + hide_cursor = false + } + + animations { + enabled = true + bezier = linear, 1, 1, 0, 0 + animation = fadeIn, 1, 5, linear + animation = fadeOut, 1, 5, linear + animation = inputFieldDots, 1, 2, linear + } + + background { + monitor = + path = screenshot + blur_passes = 3 + } + + input-field { + monitor = + size = 20%, 5% + outline_thickness = 3 + inner_color = rgba(0, 0, 0, 0.0) # no fill + + outer_color = rgba(33ccffee) rgba(00ff99ee) 45deg + check_color = rgba(00ff99ee) rgba(ff6633ee) 120deg + fail_color = rgba(ff6633ee) rgba(ff0066ee) 40deg + + font_color = rgb(143, 143, 143) + fade_on_empty = false + rounding = 15 + + font_family = $font + placeholder_text = Input password... + fail_text = $PAMFAIL + + dots_spacing = 0.3 + + position = 0, -20 + halign = center + valign = center + } + + label { + monitor = + text = $TIME + font_size = 90 + font_family = $font + + position = 0, -50 + halign = center + valign = top + } + ''; }; }