From 2e02e22e28ee1541171708cbe8f6a294cac8f43b Mon Sep 17 00:00:00 2001 From: Aguirre Matteo Date: Thu, 4 Dec 2025 22:49:50 -0300 Subject: [PATCH] hyprlauncher: add module --- modules/services/hyprlauncher.nix | 86 +++++++++++++++++++ .../modules/services/hyprlauncher/default.nix | 5 ++ .../services/hyprlauncher/hyprlauncher.conf | 16 ++++ .../services/hyprlauncher/settings.nix | 20 +++++ 4 files changed, 127 insertions(+) create mode 100644 modules/services/hyprlauncher.nix create mode 100644 tests/modules/services/hyprlauncher/default.nix create mode 100644 tests/modules/services/hyprlauncher/hyprlauncher.conf create mode 100644 tests/modules/services/hyprlauncher/settings.nix diff --git a/modules/services/hyprlauncher.nix b/modules/services/hyprlauncher.nix new file mode 100644 index 000000000..1fcc6b538 --- /dev/null +++ b/modules/services/hyprlauncher.nix @@ -0,0 +1,86 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + mkIf + mkEnableOption + mkPackageOption + mkOption + ; + + cfg = config.services.hyprlauncher; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + + options.services.hyprlauncher = { + enable = mkEnableOption "hyprlauncher"; + package = mkPackageOption pkgs "hyprlauncher" { nullable = true; }; + settings = mkOption { + type = + with lib.types; + let + valueType = + nullOr (oneOf [ + bool + int + float + str + path + (attrsOf valueType) + (listOf valueType) + ]) + // { + description = "Hyprland configuration value"; + }; + in + valueType; + default = { }; + example = { + general.grab_focus = true; + cache.enabled = true; + ui.window_size = "400 260"; + finders = { + math_prefix = "="; + desktop_icons = true; + }; + }; + description = '' + Configuration settings for hyprlauncher. All the available options can be found here: + + ''; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "services.hyprlauncher" pkgs lib.platforms.linux) + ]; + + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + xdg.configFile."hypr/hyprlauncher.conf" = mkIf (cfg.settings != { }) { + text = lib.hm.generators.toHyprconf { attrs = cfg.settings; }; + }; + systemd.user.services.hyprlauncher = mkIf (cfg.package != null) { + Install.WantedBy = [ config.wayland.systemd.target ]; + Unit = { + Description = "hyprlauncher"; + After = [ config.wayland.systemd.target ]; + PartOf = [ config.wayland.systemd.target ]; + X-Restart-Triggers = lib.mkIf (cfg.settings != { }) [ + "${config.xdg.configFile."hypr/hyprlauncher.conf".source}" + ]; + }; + + Service = { + ExecStart = "${lib.getExe cfg.package} -d"; + Restart = "always"; + RestartSec = "10"; + }; + }; + }; +} diff --git a/tests/modules/services/hyprlauncher/default.nix b/tests/modules/services/hyprlauncher/default.nix new file mode 100644 index 000000000..8b221b45d --- /dev/null +++ b/tests/modules/services/hyprlauncher/default.nix @@ -0,0 +1,5 @@ +{ lib, pkgs, ... }: + +lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux { + hyprlauncher-settings = ./settings.nix; +} diff --git a/tests/modules/services/hyprlauncher/hyprlauncher.conf b/tests/modules/services/hyprlauncher/hyprlauncher.conf new file mode 100644 index 000000000..6d6239e17 --- /dev/null +++ b/tests/modules/services/hyprlauncher/hyprlauncher.conf @@ -0,0 +1,16 @@ +cache { + enabled=true +} + +finders { + desktop_icons=true + math_prefix== +} + +general { + grab_focus=true +} + +ui { + window_size=400 260 +} diff --git a/tests/modules/services/hyprlauncher/settings.nix b/tests/modules/services/hyprlauncher/settings.nix new file mode 100644 index 000000000..92db74d8b --- /dev/null +++ b/tests/modules/services/hyprlauncher/settings.nix @@ -0,0 +1,20 @@ +{ + services.hyprlauncher = { + enable = true; + settings = { + general.grab_focus = true; + cache.enabled = true; + ui.window_size = "400 260"; + finders = { + math_prefix = "="; + desktop_icons = true; + }; + }; + }; + + nmt.script = '' + assertFileExists home-files/.config/hypr/hyprlauncher.conf + assertFileContent home-files/.config/hypr/hyprlauncher.conf \ + ${./hyprlauncher.conf} + ''; +}