diff --git a/.gitignore b/.gitignore index 726d2d6..3c81405 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ result .direnv +verify.sh diff --git a/home/services/hyprland.nix b/home/services/hyprland.nix index 674e82e..35d7c27 100644 --- a/home/services/hyprland.nix +++ b/home/services/hyprland.nix @@ -1,55 +1,146 @@ { - pkgs, device, + hl, lib, - inputs, + pkgs, ... -}: -# lib.optionalAttrs device.isNix -{ +}: let + mainMod = "SUPER"; + mainModShift = "SUPER + SHIFT"; + + # hl.dsp.dpms(state, monitor) ignores `state` in this Hyprland Lua + # build — it always toggles. Wrap with a state check so we only fire + # toggles on monitors whose dpms doesn't match the desired state. + hyprDpms = pkgs.writeShellApplication { + name = "hypr-dpms"; + runtimeInputs = [pkgs.hyprland pkgs.jq]; + text = '' + want="''${1:?usage: hypr-dpms on|off}" + case "$want" in on) target=true;; off) target=false;; *) exit 2;; esac + hyprctl monitors -j | jq -r '.[] | "\(.name) \(.dpmsStatus)"' \ + | while read -r name on; do + if [ "$on" != "$target" ]; then + hyprctl dispatch "hl.dsp.dpms(\"$want\", \"$name\")" + fi + done + ''; + }; + + mkDirBinds = mods: dsp: dirs: + lib.mapAttrs' + (key: direction: + lib.nameValuePair "${mods} + ${key}" { + inherit dsp; + args = {inherit direction;}; + }) + dirs; + + mkWorkspaceBinds = mods: dsp: + lib.listToAttrs (map (n: { + name = "${mods} + ${toString (lib.mod n 10)}"; + value = { + inherit dsp; + args = {workspace = toString n;}; + }; + }) (lib.range 1 10)); +in { + imports = [../../modules/home/hyprland-lua.nix]; + # services.hyprpolkitagent.enable = true; services.hypridle = { enable = device.is "ryu"; settings = { general = { - after_sleep_cmd = "hyprctl dispatch dpms on"; + after_sleep_cmd = "${lib.getExe hyprDpms} on"; }; listener = [ { timeout = 300; - on-timeout = "hyprctl dispatch dpms off"; - on-resume = "hyprctl dispatch dpms on"; + on-timeout = "${lib.getExe hyprDpms} off"; + on-resume = "${lib.getExe hyprDpms} on"; } ]; }; }; - # services.hyprsunset = { - # enable = device.is "ryu"; - # }; - # programs.hyprlock = { - # enable = device.is "ryu"; - # }; + # services.hyprsunset = { enable = device.is "ryu"; }; + # programs.hyprlock = { enable = device.is "ryu"; }; + + stylix.targets.hyprland.enable = false; + wayland.windowManager.hyprland = { enable = device.is "ryu"; - configType = "hyprlang"; + configType = "lua"; systemd.enable = true; - # package = pkgs.hyprland; - # portalPackage = pkgs.xdph; + + # exec_once equivalents — registered via hl.on("hyprland.start", …). + extraConfig = + /* + lua + */ + '' + hl.on("hyprland.start", function() + hl.exec_cmd("${pkgs.mate-polkit}/libexec/polkit-mate-authentication-agent-1") + end) + ''; + # -- hl.exec_cmd("${pkgs.swww}/bin/swww init") + # -- hl.exec_cmd("${pkgs.ironbar}/bin/ironbar") + # -- hl.exec_cmd("${pkgs.swayosd}/bin/swayosd-server") + # -- hl.exec_cmd("${pkgs.nextcloud-client}/bin/nextcloud --background") settings = { - # source = "${pkgs.catppuccinThemes.hyprland}/themes/mocha.conf"; - render = { - cm_enabled = true; - direct_scanout = 2; # 0 - off; 1 - on; 2 - auto based on `game` - # cm_fs_passthrough = 0; # 0 - off; 1 - always; 2 - hdr only (2 broken on nvidia) ( removed ) - send_content_type = true; # automatic monitor mode switch - cm_auto_hdr = 2; # 0 - off; 1 - switch to cm,hdr 2; 2 - switch to cm,hdredid - non_shader_cm = 2; + config = { + render = { + cm_enabled = true; + direct_scanout = 2; # 0 off | 1 on | 2 auto-by-`game` + send_content_type = true; + cm_auto_hdr = 2; # 0 off | 1 cm,hdr | 2 cm,hdredid + non_shader_cm = 2; + }; + + ecosystem = { + no_update_news = true; + }; + + input = { + kb_layout = "us"; + kb_options = "ctrl:nocaps"; + follow_mouse = 2; + touchpad = { + natural_scroll = true; + tap_to_click = true; + disable_while_typing = true; + }; + }; + + general = { + gaps_in = 5; + gaps_out = 20; + border_size = 2; + }; + + decoration = { + rounding = 10; + blur = { + enabled = true; + size = 3; + passes = 1; + }; + }; + + animations = { + enabled = true; + }; + + dwindle = { + preserve_split = true; + }; + + master = { + new_status = "master"; + }; }; - # experimental = { - # xx_color_management_v4 = true; - # }; - monitorv2 = [ + + monitor = [ { output = device.monitors.primary; mode = "2560x1440@360"; @@ -82,215 +173,196 @@ } ]; - input = { - kb_layout = "us"; - # kb_variant = ""; - # kb_model = ""; - kb_options = "ctrl:nocaps"; - # kb_rules = ""; - - follow_mouse = 2; - - touchpad = { - natural_scroll = true; - tap-to-click = true; - disable_while_typing = true; - }; + env = hl.envs { + XCURSOR_SIZE = "24"; + XDG_SESSION_TYPE = "wayland"; + MOZ_ENABLE_WAYLAND = "1"; + QT_QPA_PLATFORM = "wayland"; }; - general = { - gaps_in = 5; - gaps_out = 20; - border_size = 2; - # "col.active_border" = "$mauve $mauve 45deg"; - # "col.inactive_border" = "$crust"; - }; - - ecosystem = { - no_update_news = true; - }; - decoration = { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - - rounding = 10; - # drop_shadow = true; - # shadow_range = 4; - # shadow_render_power = 3; - # col.shadow = "rgba(1a1a1aee)"; - - blur = { - enabled = true; - size = 3; - passes = 1; + curve = hl.curves { + myBezier = { + type = "bezier"; + points = [[0.05 0.9] [0.1 1.05]]; }; }; - animations = { - enabled = true; - - # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - - bezier = "myBezier, 0.05, 0.9, 0.1, 1.05"; - - animation = [ - "windows, 1, 2, myBezier" - "windowsOut, 1, 2, default, popin 80%" - "border, 1, 10, default" - "borderangle, 1, 8, default" - "fade, 1, 2, default" - "workspaces, 1, 2, default" - ]; - }; - - dwindle = { - # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more - # pseudotile = true; # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = true; # you probably want this - }; - - master = { - # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more - new_status = "master"; - }; - - # Example per-device config - # See https://wiki.hyprland.org/Configuring/Keywords/#executing for more - # "device:epic-mouse-v1" = { sensitivity = -0.5; }; - - # Example windowrule v1 - # windowrule = float, ^(kitty)$ - # Example windowrule v2 - # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ - # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more - - windowrule = [ - # "match:title ^(Steam)$ float" - "match:title ^(Archetype.*)$ float" - "match:class (.*nextcloud.*) float" - "match:class org.kde.kdeconnect.app float" - ]; - - env = [ - "XCURSOR_SIZE,24" - "XDG_SESSION_TYPE,wayland" - "MOZ_ENABLE_WAYLAND,1" - "QT_QPA_PLATFORM,wayland" - ]; - - exec-once = [ - # "${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1" - "${pkgs.mate-polkit}/libexec/polkit-mate-authentication-agent-1" - # "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" - # "${pkgs.swww}/bin/swww init; swww img ~/.local/share/dotfiles/images/wallpaper.jpg" - # "${pkgs.ironbar}/bin/ironbar" - # "${pkgs.swayosd}/bin/swayosd-server" - # "${pkgs.nextcloud-client}/bin/nextcloud --background" + animation = hl.animations [ + { + leaf = "windows"; + enabled = true; + speed = 2; + bezier = "myBezier"; + } + { + leaf = "windowsOut"; + enabled = true; + speed = 2; + bezier = "default"; + style = "popin 80%"; + } + { + leaf = "border"; + enabled = true; + speed = 10; + bezier = "default"; + } + { + leaf = "borderangle"; + enabled = true; + speed = 8; + bezier = "default"; + } + { + leaf = "fade"; + enabled = true; + speed = 2; + bezier = "default"; + } + { + leaf = "workspaces"; + enabled = true; + speed = 2; + bezier = "default"; + } ]; - "$mainMod" = "SUPER"; - "$mainModShift" = "SUPER_SHIFT"; - - binde = [ - ",xf86audioraisevolume, exec, ${pkgs.swayosd}/bin/swayosd-client --output-volume raise" - ",xf86audiolowervolume, exec, ${pkgs.swayosd}/bin/swayosd-client --output-volume lower" + window_rule = hl.windowRules [ + { + match = {title = "^(Archetype.*)$";}; + float = true; + } + { + match = {class = "(.*nextcloud.*)";}; + float = true; + } + { + match = {class = "org.kde.kdeconnect.app";}; + float = true; + } ]; - bind = [ - # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more - "$mainMod, Return, exec, ${lib.getExe pkgs.kitty}" - "$mainModShift, Return, exec, ${lib.getExe pkgs.ghostty}" - # "$mainModShift, Return, exec, ${pkgs.foot}/bin/foot" - "$mainModShift, Q, killactive," - "$mainModShift, s, exec, ${lib.getExe pkgs.hyprshot} -m region -o ~/Pictures/Screenshots/" - # "$mainMod, M, exit," - "$mainModShift, f, togglefloating," - "$mainModShift, f, pin" - "$mainModShift, f, alterzorder, top" - "$mainMod, f, fullscreen," - "$mainMod, g, fullscreenstate,0,2" - "$mainMod, d, exec, ${lib.getExe pkgs.vicinae} toggle" - "$mainMod, Space, exec, ${lib.getExe pkgs.vicinae} toggle" - "$mainMod, p, pseudo, # dwindle" - "$mainMod, v, layoutmsg, togglesplit" - "$mainMod, a, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -t" - "$mainMod, Tab, cyclenext" - # Audio - ",xf86audiomute, exec, ${pkgs.swayosd}/bin/swayosd-client --output-volume mute-toggle" - # replace with later - # https://github.com/uttarayan21/mctl-rs - ",xf86audioprev, exec, ${lib.getExe pkgs.playerctl} previous" - ",xf86audionext, exec, ${lib.getExe pkgs.playerctl} next" - ",xf86audioplay, exec, ${lib.getExe pkgs.playerctl} play-pause" - ",xf86monbrightnessup, exec, ${lib.getExe pkgs.ddcbacklight} inc 10" - ",xf86monbrightnessdown, exec, ${lib.getExe pkgs.ddcbacklight} dec 10" - # Screenshot - ", Print, exec, ${lib.getExe pkgs.hyprshot} -m output -o ~/Pictures/Screenshots/" + workspace_rule = hl.workspaceRules ( + map (n: { + workspace = toString n; + monitor = device.monitors.primary; + }) [1 2 3 4] + ++ map (n: { + workspace = toString n; + monitor = device.monitors.secondary; + }) [5 6 7] + ++ map (n: { + workspace = toString n; + monitor = device.monitors.tertiary; + }) [8 9 10] + ); - # Move focus with mainMod + arrow keys - "$mainMod, left, movefocus, l" - "$mainMod, right, movefocus, r" - "$mainMod, up, movefocus, u" - "$mainMod, down, movefocus, d" + bind = hl.binds (lib.mergeAttrsList [ + # Terminals + utilities + { + "${mainMod} + Return" = "${lib.getExe pkgs.kitty}"; + "${mainModShift} + Return" = "${lib.getExe pkgs.ghostty}"; + "${mainModShift} + Q" = {dsp = "window.close";}; + "${mainModShift} + S" = "${lib.getExe pkgs.hyprshot} -m region -o ~/Pictures/Screenshots/"; + "${mainMod} + D" = "${lib.getExe pkgs.vicinae} toggle"; + "${mainMod} + Space" = "${lib.getExe pkgs.vicinae} toggle"; + "${mainMod} + A" = "${pkgs.swaynotificationcenter}/bin/swaync-client -t"; + "Print" = "${lib.getExe pkgs.hyprshot} -m output -o ~/Pictures/Screenshots/"; - "$mainMod, h, movefocus, l" - "$mainMod, j, movefocus, d" - "$mainMod, k, movefocus, u" - "$mainMod, l, movefocus, r" + # Window state (was: togglefloating + pin + alterzorder top on one key) + "${mainModShift} + F" = { + multi = [ + (hl.dsp.call "window.float" {action = "toggle";}) + (hl.dsp.call "window.pin" null) + (hl.dsp.call "window.alter_zorder" {mode = "top";}) + ]; + }; + "${mainMod} + F" = { + dsp = "window.fullscreen"; + args = {action = "toggle";}; + }; + "${mainMod} + G" = { + dsp = "window.fullscreen_state"; + args = { + internal = 0; + client = 2; + }; + }; + "${mainMod} + P" = { + dsp = "window.pseudo"; + args = {action = "toggle";}; + }; + "${mainMod} + V" = { + dsp = "layout"; + args = ["togglesplit"]; + }; + "${mainMod} + Tab" = {dsp = "window.cycle_next";}; - "$mainModShift, h, movewindow, l" - "$mainModShift, j, movewindow, d" - "$mainModShift, k, movewindow, u" - "$mainModShift, l, movewindow, r" + # Media keys + "XF86AudioMute" = "${pkgs.swayosd}/bin/swayosd-client --output-volume mute-toggle"; + "XF86AudioPrev" = "${lib.getExe pkgs.playerctl} previous"; + "XF86AudioNext" = "${lib.getExe pkgs.playerctl} next"; + "XF86AudioPlay" = "${lib.getExe pkgs.playerctl} play-pause"; + "XF86MonBrightnessUp" = "${lib.getExe pkgs.ddcbacklight} inc 10"; + "XF86MonBrightnessDown" = "${lib.getExe pkgs.ddcbacklight} dec 10"; - # Switch workspaces with mainMod + [0-9] - "$mainMod, 1, workspace, 1" - "$mainMod, 2, workspace, 2" - "$mainMod, 3, workspace, 3" - "$mainMod, 4, workspace, 4" - "$mainMod, 5, workspace, 5" - "$mainMod, 6, workspace, 6" - "$mainMod, 7, workspace, 7" - "$mainMod, 8, workspace, 8" - "$mainMod, 9, workspace, 9" - "$mainMod, 0, workspace, 10" + # Volume (originally `binde`, repeating) + "XF86AudioRaiseVolume" = { + exec = "${pkgs.swayosd}/bin/swayosd-client --output-volume raise"; + flags = {repeating = true;}; + }; + "XF86AudioLowerVolume" = { + exec = "${pkgs.swayosd}/bin/swayosd-client --output-volume lower"; + flags = {repeating = true;}; + }; - # Move active window to a workspace with mainMod + SHIFT + [0-9] - "$mainMod SHIFT, 1, movetoworkspace, 1" - "$mainMod SHIFT, 2, movetoworkspace, 2" - "$mainMod SHIFT, 3, movetoworkspace, 3" - "$mainMod SHIFT, 4, movetoworkspace, 4" - "$mainMod SHIFT, 5, movetoworkspace, 5" - "$mainMod SHIFT, 6, movetoworkspace, 6" - "$mainMod SHIFT, 7, movetoworkspace, 7" - "$mainMod SHIFT, 8, movetoworkspace, 8" - "$mainMod SHIFT, 9, movetoworkspace, 9" - "$mainMod SHIFT, 0, movetoworkspace, 10" + # Workspace scroll + "${mainMod} + mouse_down" = { + dsp = "focus"; + args = {workspace = "e+1";}; + }; + "${mainMod} + mouse_up" = { + dsp = "focus"; + args = {workspace = "e-1";}; + }; + } - # Scroll through existing workspaces with mainMod + scroll - "$mainMod, mouse_down, workspace, e+1" - "$mainMod, mouse_up, workspace, e-1" + # Focus directions: arrows + hjkl. + (mkDirBinds mainMod "focus" { + left = "l"; + right = "r"; + up = "u"; + down = "d"; + h = "l"; + j = "d"; + k = "u"; + l = "r"; + }) - "$mainMod, Tab, cyclenext, bind = ALT, Tab, bringactivetotop," - ]; + # Move window: hjkl only. + (mkDirBinds mainModShift "window.move" { + h = "l"; + j = "d"; + k = "u"; + l = "r"; + }) - # Move/resize windows with mainMod + LMB/RMB and dragging + # Workspace switch / move-to: 1..0 → ws 1..10. + (mkWorkspaceBinds mainMod "focus") + (mkWorkspaceBinds mainModShift "window.move") - bindm = [ - "$mainMod, mouse:272, movewindow" - "$mainMod, mouse:273, resizewindow" - ]; - workspace = [ - "1, monitor:${device.monitors.primary}" - "2, monitor:${device.monitors.primary}" - "3, monitor:${device.monitors.primary}" - "4, monitor:${device.monitors.primary}" - "5, monitor:${device.monitors.secondary}" - "6, monitor:${device.monitors.secondary}" - "7, monitor:${device.monitors.secondary}" - "8, monitor:${device.monitors.tertiary}" - "9, monitor:${device.monitors.tertiary}" - "10, monitor:${device.monitors.tertiary}" - ]; + # Mouse binds (was bindm). + { + "${mainMod} + mouse:272" = { + dsp = "window.drag"; + flags = {mouse = true;}; + }; + "${mainMod} + mouse:273" = { + dsp = "window.resize"; + flags = {mouse = true;}; + }; + } + ]); }; }; } diff --git a/modules/home/hyprland-lua.nix b/modules/home/hyprland-lua.nix new file mode 100644 index 0000000..06ed2b8 --- /dev/null +++ b/modules/home/hyprland-lua.nix @@ -0,0 +1,113 @@ +{ + config, + lib, + ... +}: let + cfg = config.wayland.windowManager.hyprland; + configName = + if cfg.configType == "lua" + then "hyprland.lua" + else "hyprland.conf"; + relPath = + lib.removePrefix "${config.home.homeDirectory}/" + "${config.xdg.configHome}/hypr/${configName}"; + + inherit (lib.generators) mkLuaInline; + toLua = lib.generators.toLua {}; + isInline = v: builtins.isAttrs v && (v._type or null) == "lua-inline"; + + hl = rec { + inherit mkLuaInline; + raw = mkLuaInline; + + # settings.env → `hl.env(name, value)`. + env = name: value: {_args = [name value];}; + envs = lib.mapAttrsToList env; + + # Dispatchers as raw lua expressions. + # `path`: dotted name after `hl.dsp.`, e.g. "window.float". + # `args`: null → no args; attrset → single table arg; list → positional. + dsp = { + exec_cmd = cmd: mkLuaInline "hl.dsp.exec_cmd(${toLua cmd})"; + call = path: args: let + rendered = + if args == null + then "" + else if builtins.isList args + then lib.concatMapStringsSep ", " toLua args + else toLua args; + in + mkLuaInline "hl.dsp.${path}(${rendered})"; + }; + + # Chain multiple dispatchers under one bind (replaces the hyprlang + # idiom of repeating the same key for several actions). + multi = dispatchers: + mkLuaInline ( + "function() " + + lib.concatMapStringsSep " " (d: "hl.dispatch(${d.expr});") dispatchers + + " end" + ); + + # Render one bind. Spec forms: + # "cmd" → exec_cmd shorthand + # → raw dispatcher + # { exec = "cmd"; flags? = {…}; } + # { dsp = "path"; args? = {…}|[…]; flags? = {…}; } + # { multi = [ ...]; flags? = {…}; } + # { dispatcher = ; flags? = {…}; } + bind = keys: spec: let + n = + if builtins.isString spec + then {dispatcher = dsp.exec_cmd spec;} + else if isInline spec + then {dispatcher = spec;} + else if spec ? exec + then { + dispatcher = dsp.exec_cmd spec.exec; + flags = spec.flags or {}; + } + else if spec ? dsp + then { + dispatcher = dsp.call spec.dsp (spec.args or null); + flags = spec.flags or {}; + } + else if spec ? multi + then { + dispatcher = multi spec.multi; + flags = spec.flags or {}; + } + else if spec ? dispatcher + then { + dispatcher = spec.dispatcher; + flags = spec.flags or {}; + } + else throw "hl.bind: unrecognized spec for `${keys}`"; + flags = n.flags or {}; + in { + _args = [keys n.dispatcher] ++ lib.optional (flags != {}) flags; + }; + + binds = lib.mapAttrsToList bind; + + # Generic helpers for list-shaped settings sections; each entry + # renders as `hl.({...})` (one call per entry). + singleArg = arg: {_args = [arg];}; + windowRules = map singleArg; + workspaceRules = map singleArg; + animations = map singleArg; + # curves: { name = { type = "bezier"; points = [...]; }; ... } + curves = lib.mapAttrsToList (name: spec: {_args = [name spec];}); + }; +in { + _module.args.hl = hl; + + home.activation.verifyHyprlandConfig = lib.mkIf (cfg.enable && cfg.finalPackage != null) ( + lib.hm.dag.entryBefore ["linkGeneration"] '' + configFile="$newGenPath/home-files/${relPath}" + if [[ -e "$configFile" ]]; then + run ${cfg.finalPackage}/bin/Hyprland --verify-config -c "$configFile" + fi + '' + ); +} -- 2.51.2 From 82a1558fefa8718cac1d7973ecdc16cbb275440f Mon Sep 17 00:00:00 2001 From: servius Date: Tue, 19 May 2026 20:17:45 +0530 Subject: [PATCH 2/3] fix: Use proper args for dispatch dpms --- home/services/hyprland.nix | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/home/services/hyprland.nix b/home/services/hyprland.nix index 35d7c27..47c6af0 100644 --- a/home/services/hyprland.nix +++ b/home/services/hyprland.nix @@ -11,20 +11,6 @@ # hl.dsp.dpms(state, monitor) ignores `state` in this Hyprland Lua # build — it always toggles. Wrap with a state check so we only fire # toggles on monitors whose dpms doesn't match the desired state. - hyprDpms = pkgs.writeShellApplication { - name = "hypr-dpms"; - runtimeInputs = [pkgs.hyprland pkgs.jq]; - text = '' - want="''${1:?usage: hypr-dpms on|off}" - case "$want" in on) target=true;; off) target=false;; *) exit 2;; esac - hyprctl monitors -j | jq -r '.[] | "\(.name) \(.dpmsStatus)"' \ - | while read -r name on; do - if [ "$on" != "$target" ]; then - hyprctl dispatch "hl.dsp.dpms(\"$want\", \"$name\")" - fi - done - ''; - }; mkDirBinds = mods: dsp: dirs: lib.mapAttrs' @@ -51,13 +37,13 @@ in { enable = device.is "ryu"; settings = { general = { - after_sleep_cmd = "${lib.getExe hyprDpms} on"; + after_sleep_cmd = ''hyprctl dispatch hl.dsp.dpms({ action = "disable"})''; }; listener = [ { timeout = 300; - on-timeout = "${lib.getExe hyprDpms} off"; - on-resume = "${lib.getExe hyprDpms} on"; + on-resume = ''hyprctl dispatch hl.dsp.dpms({ action = "enable"})''; + on-timeout = ''hyprctl dispatch hl.dsp.dpms({ action = "disable"})''; } ]; }; -- 2.51.2 From e0b6516da00b1025403d8329c9c3a7199dc899bb Mon Sep 17 00:00:00 2001 From: servius Date: Wed, 20 May 2026 11:52:47 +0530 Subject: [PATCH 3/3] feat: Update hyprmonitors to support hyprland 0.55 --- flake.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/flake.lock b/flake.lock index 0c876f8..aa29a2c 100644 --- a/flake.lock +++ b/flake.lock @@ -2183,11 +2183,11 @@ "rust-overlay": "rust-overlay_4" }, "locked": { - "lastModified": 1755360211, - "narHash": "sha256-ZdHdkhn8COBJxTLrbgIsxTJ7NT0hCegrOYeYZv9vUqg=", + "lastModified": 1779257760, + "narHash": "sha256-brasOBglL19s6F+Q1Z77Xz3qmgmtzQUm3oD4FIvJtLU=", "ref": "refs/heads/master", - "rev": "4714208a0b1c9e6702112518378fb4833cc092d9", - "revCount": 8, + "rev": "dd515e9885eebffe697549f991e60f7a5153d7ac", + "revCount": 9, "type": "git", "url": "https://git.darksailor.dev/servius/hyprmonitors" },