diff --git a/flake.lock b/flake.lock index 3f31354..df1cfb1 100644 --- a/flake.lock +++ b/flake.lock @@ -451,10 +451,31 @@ "type": "github" } }, + "hypridle": { + "inputs": { + "hyprlang": "hyprlang", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708453550, + "narHash": "sha256-KAjPEGjulric1CscaleMJmfsyR7s08j4gzYc6p23K1U=", + "owner": "hyprwm", + "repo": "hypridle", + "rev": "158c52c4a76cff7a1635be8ec1a4a369bc8674ed", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hypridle", + "type": "github" + } + }, "hyprland": { "inputs": { "hyprland-protocols": "hyprland-protocols", - "hyprlang": "hyprlang", + "hyprlang": "hyprlang_2", "nixpkgs": [ "nixpkgs" ], @@ -502,6 +523,27 @@ } }, "hyprlang": { + "inputs": { + "nixpkgs": [ + "hypridle", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708212860, + "narHash": "sha256-nW3Zrhh9RJcMTvOcXAaKADnJM/g6tDf3121lJtTHnYo=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "11d5ccda071c153dfdc18ef65338956a51cef96a", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprlang_2": { "inputs": { "nixpkgs": [ "hyprland", @@ -522,7 +564,7 @@ "type": "github" } }, - "hyprlang_2": { + "hyprlang_3": { "inputs": { "nixpkgs": [ "hyprland", @@ -1249,6 +1291,7 @@ "home-manager": "home-manager", "hycov": "hycov", "hyprgrass": "hyprgrass", + "hypridle": "hypridle", "hyprland": "hyprland", "modernx-src": "modernx-src", "nh": "nh", @@ -1489,7 +1532,7 @@ "hyprland", "hyprland-protocols" ], - "hyprlang": "hyprlang_2", + "hyprlang": "hyprlang_3", "nixpkgs": [ "hyprland", "nixpkgs" diff --git a/flake.nix b/flake.nix index 3750ace..7a2b142 100644 --- a/flake.nix +++ b/flake.nix @@ -189,6 +189,13 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + hypridle = { + type = "github"; + owner = "hyprwm"; + repo = "hypridle"; + + inputs.nixpkgs.follows = "nixpkgs"; + }; # FIXME: https://github.com/horriblename/hyprgrass/issues/76 hyprgrass = { diff --git a/modules/hyprland/security.nix b/modules/hyprland/security.nix index 74df395..4fbd806 100644 --- a/modules/hyprland/security.nix +++ b/modules/hyprland/security.nix @@ -1,10 +1,11 @@ { config, + hypridle, lib, pkgs, ... }: let - inherit (lib) optionals; + inherit (lib) mkIf; inherit (config.vars) mainUser; isLaptop = config.services.logind.lidSwitch == "lock"; @@ -16,26 +17,41 @@ in { security.pam.services.swaylock = {}; services.gnome.gnome-keyring.enable = true; - home-manager.users.${mainUser} = { + home-manager.users.${mainUser} = let + hmCfg = config.home-manager.users.${mainUser}; + lockPkg = pkgs.writeShellApplication { + name = "lock"; + runtimeInputs = [ + hmCfg.programs.ags.finalPackage + hmCfg.programs.swaylock.package + ]; + text = '' + ags -r 'Tablet.setLaptopMode()' + swaylock -C ${hmCfg.xdg.configHome}/swaylock/config + ''; + }; + in { imports = [ ../../home/swaylock.nix + hypridle.homeManagerModules.default ]; - home.packages = with pkgs; ([ - gnome.seahorse - ] - ++ optionals isLaptop [ - swayidle - ]); + home.packages = with pkgs; [ + gnome.seahorse + ]; + + services.hypridle = mkIf isLaptop { + enable = true; + listeners = []; + lockCmd = "${lockPkg}/bin/lock"; + }; wayland.windowManager.hyprland = { settings = { - exec-once = - [ - "gnome-keyring-daemon --start --components=secrets" - "${pkgs.plasma5Packages.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1" - ] - ++ optionals isLaptop ["swayidle -w lock lock"]; + exec-once = [ + "gnome-keyring-daemon --start --components=secrets" + "${pkgs.plasma5Packages.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1" + ]; windowrule = [ "float,^(org.kde.polkit-kde-authentication-agent-1)$" @@ -48,7 +64,7 @@ in { ]; bind = [ - "$mainMod, L, exec, lock" + "$mainMod, L, exec, ${lockPkg}/bin/lock" ]; }; }; diff --git a/home/swaylock.nix b/modules/hyprland/swaylock.nix similarity index 92% rename from home/swaylock.nix rename to modules/hyprland/swaylock.nix index ff2be04..68dd2a3 100644 --- a/home/swaylock.nix +++ b/modules/hyprland/swaylock.nix @@ -1,11 +1,4 @@ {pkgs, ...}: { - home.packages = [ - (pkgs.writeShellScriptBin "lock" '' - ags -r 'Tablet.setLaptopMode()' - swaylock - '') - ]; - programs.swaylock = { enable = true; package = pkgs.swaylock-effects;