From 0d47ab58f584c959ce317113f3c4a7afa9331d14 Mon Sep 17 00:00:00 2001 From: Nickolaj Jepsen Date: Tue, 15 Apr 2025 23:48:15 +0200 Subject: [PATCH] feat: implement hyprlock and hypridle --- flake.lock | 12 ++-- modules/desktop/hyprland/default.nix | 9 ++- modules/desktop/hyprland/hypridle.nix | 34 +++++++++ modules/desktop/hyprland/hyprlock.nix | 99 +++++++++++++++++++++++++++ 4 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 modules/desktop/hyprland/hypridle.nix create mode 100644 modules/desktop/hyprland/hyprlock.nix diff --git a/flake.lock b/flake.lock index b3fe408..66170fb 100644 --- a/flake.lock +++ b/flake.lock @@ -448,11 +448,11 @@ ] }, "locked": { - "lastModified": 1744117652, - "narHash": "sha256-t7dFCDl4vIOOUMhEZnJF15aAzkpaup9x4ZRGToDFYWI=", + "lastModified": 1744743431, + "narHash": "sha256-iyn/WBYDc7OtjSawbegINDe/gIkok888kQxk3aVnkgg=", "owner": "nix-community", "repo": "home-manager", - "rev": "b4e98224ad1336751a2ac7493967a4c9f6d9cb3f", + "rev": "c61bfe3ae692f42ce688b5865fac9e0de58e1387", "type": "github" }, "original": { @@ -984,11 +984,11 @@ "treefmt-nix": "treefmt-nix_3" }, "locked": { - "lastModified": 1744739247, - "narHash": "sha256-UAtagy5rLeiUMrGV+6VkXKyhKXf/NHRmKSJ2OobrocM=", + "lastModified": 1744745313, + "narHash": "sha256-eSaXmBxjQSeHiBOxA7jcuwvumBsKI8YL1iMs8LX8dZM=", "owner": "nix-community", "repo": "NUR", - "rev": "6f7e7406290a793d1c9bff22d79d1b2b83d13084", + "rev": "e667247df0a6f9cf0e19e991939ce87ada422ffe", "type": "github" }, "original": { diff --git a/modules/desktop/hyprland/default.nix b/modules/desktop/hyprland/default.nix index 059c999..018c9ec 100644 --- a/modules/desktop/hyprland/default.nix +++ b/modules/desktop/hyprland/default.nix @@ -65,6 +65,8 @@ in { imports = [ ./hyprpolkitagent.nix ./hyprpaper.nix + ./hyprlock.nix + ./hypridle.nix ]; config = { @@ -132,7 +134,10 @@ in { ) config.monitors; - exec = ["systemctl --user start hyprpaper"]; + exec = [ + "systemctl --user start hyprpaper" + "systemctl --user start hypridle" + ]; input = { # Most unknown keyboards will be of the DK layout, we set known keyboards to eu in `devices` @@ -247,7 +252,7 @@ in { "SUPER, BACKSPACE, killactive" "SUPER, SPACE, exec, astal launcher" "SUPER, semicolon, exec, astal launcher .e" - "SUPER, p, exec, ${getExe config.programs.uwsm.package} app -- loginctl lock-session" + "SUPER, p, exec, ${getExe config.programs.uwsm.package} app -- ${pkgs.systemd}/bin/loginctl lock-session" ", Print, exec, ${lib.getExe pkgs.grimblast} save area - | ${lib.getExe pkgs.satty} -f -" "SHIFT, Print, exec, ${lib.getExe pkgs.grimblast} --freeze save area - | ${lib.getExe pkgs.satty} -f -" diff --git a/modules/desktop/hyprland/hypridle.nix b/modules/desktop/hyprland/hypridle.nix new file mode 100644 index 0000000..079c54f --- /dev/null +++ b/modules/desktop/hyprland/hypridle.nix @@ -0,0 +1,34 @@ +{ + config, + pkgs, + ... +}: +let +sleep_cmd = "${config.programs.hyprland.package}/bin/hyprctl dispatch dpms off"; +wake_cmd = "${config.programs.hyprland.package}/bin/hyprctl dispatch dpms on"; +lock_cmd = "pidof ${pkgs.hyprlock}/bin/hyprlock || ${pkgs.hyprlock}/bin/hyprlock"; +in { + config = { + fireproof.home-manager.services.hypridle = { + enable = true; + settings = { + general = { + inherit lock_cmd; + before_sleep_cmd = "${pkgs.systemd}/bin/loginctl lock-session"; + after_sleep_cmd = sleep_cmd; + }; + listener = [ + { + timeout = 60 * 5; + on-timeout = lock_cmd; + } + { + timeout = 60 * 15; + on-timeout = sleep_cmd; + on-resume = wake_cmd; + } + ]; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/desktop/hyprland/hyprlock.nix b/modules/desktop/hyprland/hyprlock.nix new file mode 100644 index 0000000..5084936 --- /dev/null +++ b/modules/desktop/hyprland/hyprlock.nix @@ -0,0 +1,99 @@ +{ + lib, + config, + inputs, + pkgs, + ... +}: +let + background = pkgs.stdenvNoCC.mkDerivation { + pname = "desktop-background"; + version = "0.2"; + + src = lib.fileset.toSource { + root = ./.; + fileset = lib.fileset.unions [ + ./backgrounds/unknown.svg + ]; + }; + + nativeBuildInputs = [pkgs.inkscape]; + + buildPhase = '' + inkscape -w 3840 -h 2160 backgrounds/unknown.svg -o unknown.png + ''; + + installPhase = '' + mkdir -p $out/share/backgrounds + cp *.svg *.png $out/share/backgrounds + ''; + }; + + # Re-use the same color scheme as in the main Hyprland config + color = { + bg = "rgb(28, 27, 26)"; + ui = "rgb(52, 51, 49)"; + fg = "rgb(218, 216, 206)"; + transparent = "rgba(0, 0, 0, 0)"; + }; +in { + config = { + fireproof.home-manager.programs.hyprlock = { + enable = true; + settings = { + general = { + disable_loading_bar = false; + grace = 0; + no_fade_in = false; + }; + background = { + monitor = ""; + color = color.bg; + path = background + "/share/backgrounds/unknown.png"; + }; + input-field = { + monitor = ""; + size = "250, 60"; + outline_thickness = 2; + dots_size = 0.2; + dots_spacing = 0.2; + dots_center = true; + outer_color = color.transparent; + inner_color = color.ui; + font_color = color.fg; + fade_on_empty = false; + font_family = "Hack Nerd Font"; + placeholder_text = ""; + hide_input = false; + position = "0, -35"; + halign = "center"; + valign = "center"; + rounding = 8; + }; + shape = [ + { + monitor = ""; + color = color.ui; + halign = "center"; + valign = "center"; + size = "150, 60"; + position = "0, 35"; + rounding = 8; + } + ]; + label = [ + { + monitor = ""; + text = "cmd[update:1000] echo \"$(date +\"%H:%M\")\""; + color = color.fg; + font_size = 30; + font_family = "Hack Nerd Font"; + position = "0, 35"; + halign = "center"; + valign = "center"; + } + ]; + }; + }; + }; +} \ No newline at end of file