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
+ }
+ '';
};
}