From f3a6e51d92895e13427884cb473edb128b8647d6 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Wed, 17 Jul 2024 17:21:50 +0300 Subject: [PATCH] Config: use hyprutils helper (#183) * config: use hyprutils helper CMake: add version, add hyprutils * Nix: add hyprutils dep flake.lock: update * Nix: add hyprwayland-scanner dep --- CMakeLists.txt | 3 +- flake.lock | 79 +++++++++++++++++++++++------------- flake.nix | 45 ++++++++++++++------ nix/default.nix | 12 ++++-- src/config/ConfigManager.cpp | 12 +++--- 5 files changed, 97 insertions(+), 54 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bddd18d..b8746fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_minimum_required(VERSION 3.4) project(hyprpaper DESCRIPTION "A blazing fast wayland wallpaper utility" + VERSION 0.7.0 ) set(CMAKE_MESSAGE_LOG_LEVEL "STATUS") @@ -71,7 +72,7 @@ add_compile_options(-Wall -Wextra -Wno-unused-parameter -Wno-unused-value -Wno-m find_package(Threads REQUIRED) find_package(PkgConfig REQUIRED) -pkg_check_modules(deps REQUIRED IMPORTED_TARGET wayland-client wayland-protocols cairo pango pangocairo libjpeg libwebp hyprlang>=0.2.0) +pkg_check_modules(deps REQUIRED IMPORTED_TARGET wayland-client wayland-protocols cairo pango pangocairo libjpeg libwebp hyprlang>=0.2.0 hyprutils>=0.2.0) file(GLOB_RECURSE SRCFILES "src/*.cpp") diff --git a/flake.lock b/flake.lock index 6cb2fcb..f41ffb9 100644 --- a/flake.lock +++ b/flake.lock @@ -2,8 +2,12 @@ "nodes": { "hyprlang": { "inputs": { - "nixpkgs": "nixpkgs", - "systems": "systems" + "nixpkgs": [ + "nixpkgs" + ], + "systems": [ + "systems" + ] }, "locked": { "lastModified": 1713121246, @@ -19,23 +23,53 @@ "type": "github" } }, - "nixpkgs": { + "hyprutils": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "systems": [ + "systems" + ] + }, "locked": { - "lastModified": 1708475490, - "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "0e74ca98a74bc7270d28838369593635a5db3260", + "lastModified": 1721071737, + "narHash": "sha256-qmC9jGfbE4+EIBbbSAkrfR/p49wShjpv4/KztgE/P54=", + "owner": "hyprwm", + "repo": "hyprutils", + "rev": "eb1ceff2b87f6820789249f63faa8e9dcb54d05f", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", + "owner": "hyprwm", + "repo": "hyprutils", "type": "github" } }, - "nixpkgs_2": { + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "systems": [ + "systems" + ] + }, + "locked": { + "lastModified": 1720215857, + "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, + "nixpkgs": { "locked": { "lastModified": 1712963716, "narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=", @@ -54,8 +88,10 @@ "root": { "inputs": { "hyprlang": "hyprlang", - "nixpkgs": "nixpkgs_2", - "systems": "systems_2" + "hyprutils": "hyprutils", + "hyprwayland-scanner": "hyprwayland-scanner", + "nixpkgs": "nixpkgs", + "systems": "systems" } }, "systems": { @@ -72,21 +108,6 @@ "repo": "default-linux", "type": "github" } - }, - "systems_2": { - "locked": { - "lastModified": 1689347949, - "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", - "owner": "nix-systems", - "repo": "default-linux", - "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default-linux", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 50e0dc9..22cf749 100644 --- a/flake.nix +++ b/flake.nix @@ -3,10 +3,26 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - - hyprlang.url = "github:hyprwm/hyprlang"; - systems.url = "github:nix-systems/default-linux"; + + hyprutils = { + url = "github:hyprwm/hyprutils"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.systems.follows = "systems"; + }; + + hyprlang = { + url = "github:hyprwm/hyprlang"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.systems.follows = "systems"; + inputs.hyprutils.follows = "hyprutils"; + }; + + hyprwayland-scanner = { + url = "github:hyprwm/hyprwayland-scanner"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.systems.follows = "systems"; + }; }; outputs = { @@ -31,16 +47,19 @@ in { overlays = { default = self.overlays.hyprpaper; - hyprpaper = final: prev: rec { - hyprpaper = final.callPackage ./nix/default.nix { - stdenv = final.gcc13Stdenv; - version = "0.pre" + "+date=" + (mkDate (self.lastModifiedDate or "19700101")) + "_" + (self.shortRev or "dirty"); - commit = self.rev or ""; - inherit (final.xorg) libXdmcp; - inherit (inputs.hyprlang.packages.${final.system}) hyprlang; - }; - hyprpaper-debug = hyprpaper.override {debug = true;}; - }; + hyprpaper = lib.composeManyExtensions [ + inputs.hyprlang.overlays.default + inputs.hyprutils.overlays.default + inputs.hyprwayland-scanner.overlays.default + (final: prev: rec { + hyprpaper = final.callPackage ./nix/default.nix { + stdenv = final.gcc13Stdenv; + version = "0.7.0" + "+date=" + (mkDate (self.lastModifiedDate or "19700101")) + "_" + (self.shortRev or "dirty"); + commit = self.rev or ""; + }; + hyprpaper-debug = hyprpaper.override {debug = true;}; + }) + ]; }; packages = eachSystem (system: { diff --git a/nix/default.nix b/nix/default.nix index 32b0eee..b52e2ad 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -8,6 +8,8 @@ file, fribidi, hyprlang, + hyprutils, + hyprwayland-scanner, libdatrie, libGL, libjpeg, @@ -22,7 +24,7 @@ wayland, wayland-protocols, wayland-scanner, - libXdmcp, + xorg, commit, debug ? false, version ? "git", @@ -45,6 +47,7 @@ stdenv.mkDerivation { nativeBuildInputs = [ cmake + hyprwayland-scanner pkg-config ]; @@ -54,6 +57,7 @@ stdenv.mkDerivation { file fribidi hyprlang + hyprutils libdatrie libGL libjpeg @@ -67,15 +71,15 @@ stdenv.mkDerivation { wayland wayland-protocols wayland-scanner - libXdmcp + xorg.libXdmcp util-linux ]; meta = with lib; { - homepage = "https://github.com/hyprwm/hyprpaper"; description = "A blazing fast wayland wallpaper utility with IPC controls"; + homepage = "https://github.com/hyprwm/hyprpaper"; license = licenses.bsd3; - platforms = platforms.linux; mainProgram = "hyprpaper"; + platforms = platforms.linux; }; } diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 86c3129..a407e57 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1,5 +1,6 @@ #include "ConfigManager.hpp" #include "../Hyprpaper.hpp" +#include static Hyprlang::CParseResult handleWallpaper(const char* C, const char* V) { const std::string COMMAND = C; @@ -196,14 +197,11 @@ std::string CConfigManager::getMainConfigPath() { if (!g_pHyprpaper->m_szExplicitConfigPath.empty()) return g_pHyprpaper->m_szExplicitConfigPath; - static const char* xdgConfigHome = getenv("XDG_CONFIG_HOME"); - std::string configPath; - if (!xdgConfigHome) - configPath = getenv("HOME") + std::string("/.config"); + static const auto paths = Hyprutils::Path::findConfig("hyprpaper"); + if (paths.first.has_value()) + return paths.first.value(); else - configPath = xdgConfigHome; - - return configPath + "/hypr/hyprpaper.conf"; + throw std::runtime_error("Could not find config in HOME, XDG_CONFIG_HOME, XDG_CONFIG_DIRS or /etc/hypr."); } // trim from both ends