diff --git a/modules/ryan-packages/hyprland.scm b/modules/ryan-packages/hyprland.scm new file mode 100644 index 0000000..04a9292 --- /dev/null +++ b/modules/ryan-packages/hyprland.scm @@ -0,0 +1,497 @@ +(define-module (ryan-packages hyprland) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix build-system cmake) + #:use-module (guix build-system gnu) + #:use-module (guix build-system meson) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module (guix packages) + #:use-module (gnu packages autotools) + #:use-module (gnu packages admin) + #:use-module (gnu packages base) + #:use-module (gnu packages compression) + #:use-module (gnu packages cpp) + #:use-module (gnu packages cmake) + #:use-module (gnu packages check) + #:use-module (gnu packages gcc) + #:use-module (gnu packages gtk) + #:use-module (gnu packages gnome) + #:use-module (gnu packages freedesktop) + #:use-module (gnu packages pciutils) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages xml) + #:use-module (gnu packages xorg) + #:use-module (gnu packages web) + #:use-module (gnu packages wm) + #:use-module (gnu packages gl) + #:use-module (ryan-packages gl) + #:use-module (guix utils)) + +; hyprland deps +(define-public libseat-0.8.0 + (package + (inherit libseat) + (name "libseat") + (version "0.8.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://git.sr.ht/~kennylevinsen/seatd") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "02wzrgp8di6hqmicnm2fim6jnvbn62wy248ikvdvrhiywrb7i931")))))) + +(define-public libinput-minimal-1.26.1 + (package + (inherit libinput-minimal) + (name "libinput-minimal") + (version "1.26.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.freedesktop.org/libinput/libinput.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "094k23i10jjmgdzhv5lj7xpc3fgkwi9afcihf0l2fjj71ym8l9fy")))) + (native-inputs + (modify-inputs (package-native-inputs libinput) + (append python-minimal-wrapper python-pytest))))) + +(define-public cmake-minimal-3.27.0 + (package + (inherit cmake-minimal) + (name "cmake-minimal") + (version "3.27.0") + (source (origin + (inherit (package-source cmake-minimal)) + (method url-fetch) + (uri (string-append "https://cmake.org/files/v" + (version-major+minor version) + "/cmake-" version ".tar.gz")) + (sha256 + (base32 + "1f1w9mb868q38nzy145b6q9mc5waf8yi521cwfkd14xr51mxpvda")))) + (arguments + (substitute-keyword-arguments (package-arguments cmake-minimal) + ((#:configure-flags flags ''()) + #~(append (list "-DCMake_ENABLE_DEBUGGER=false") #$flags)) + ((#:phases phases) + #~(modify-phases #$phases + (delete 'delete-help-documentation) + (delete 'check))))))) + +; hypr suite + +(define hyprutils + (package + (name "hyprutils") + (version "0.2.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hyprwm/hyprutils") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0nxx5yb5k9726x95n8gi27xyxyzwb0ma0nj3czpb51sda1k0hz0g")))) + (build-system cmake-build-system) + ;(arguments (list #:tests? #f)) + (native-inputs (list pkg-config gcc-13)) + (inputs (list pixman)) + (home-page "https://hyprland.org/") + (synopsis "Small C++ library for utilities used across the Hypr* ecosystem") + (description "C++ library for utilities in the Hypr ecosystem") + (license license:bsd-3))) + +(define-public libliftoff + (package + (name "libliftoff") + (version "0.1.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/emersion/libliftoff" + "/archive/refs/tags/v" version ".tar.gz")) + (sha256 + (base32 + "17ssbjbv8njgvfha8zsx4nixpi5xxl1rwvk0lcacgqk0nmjyb23s")))) + (build-system meson-build-system) + (native-inputs (list gcc-13 + pkg-config + cmake-minimal + libdrm)) + (home-page "https://github.com/emersion/libliftoff") + (synopsis "Lightweight KMS plane library") + (description "") + (license license:expat))) + +(define udis86 + (let ((revision "186") + (commit "5336633af70f3917760a6d441ff02d93477b0c86")) + (package + (name "udis86") + (version (git-version "1.7.2" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/canihavesomecoffee/udis86") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0y5z1169wff578jylpafsww4px4y6gickhcs885a9c660d8xs9qy")))) + (build-system gnu-build-system) + (native-inputs (list autoconf automake libtool python-minimal-wrapper)) + (home-page "https://github.com/canihavesomecoffee/udis86") + (synopsis "Disassembler Library for x86 and x86-64") + (description + "Udis86 is a disassembler for the x86 and x86-64 class of instruction +set architectures. It consists of a C library called @code{libudis86} and a +command line tool called @code{udcli} that incorporates the library.") + (license license:bsd-2)))) + +(define hyprlang + (package + (name "hyprlang") + (version "0.5.2") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hyprwm/hyprlang") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "17i0372yv0fcwnyki36crz7afw8c5f3j985m083p7rjbh4fn3br6")))) + (build-system cmake-build-system) + (native-inputs (list gcc-13)) + (home-page "https://hyprland.org/hyprlang/") + (synopsis "Official implementation library for hypr config language") + (description + "This package provides the official implementation for hypr configuration +language used in @code{hyprland}.") + (license license:gpl3+))) + +(define-public hyprcursor + (package + (name "hyprcursor") + (version "0.1.9") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hyprwm/hyprcursor") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0z3ar580n630145nq80qw0p8v0kai6knvhi6nr9z0y1jrb07b0ql")))) + (build-system cmake-build-system) + (arguments (list #:tests? #f)) ;FIXME + (inputs (list cairo hyprlang librsvg libzip tomlplusplus)) + (native-inputs (list gcc-13 pkg-config)) + (home-page "https://hyprland.org/") + (synopsis "Hyprland cursor format, library and utilities") + (description + "This package provides Hyprland cursor format, library and utilities.") + (license license:bsd-3))) + +(define-public hyprland-protocols + (package + (name "hyprland-protocols") + (version "0.2") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hyprwm/hyprland-protocols") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1drjznj7fn6m5m6skhzh0p031cb5x0bb4i56jxnxwpwaa71g1z20")))) + (build-system meson-build-system) + (home-page "https://hyprland.org") + (synopsis "Wayland protocol extensions for Hyprland") + (description + "This package provides Wayland protocol extensions for Hyprland and it +exists in an effort to bridge the gap between Hyprland and KDE/Gnome's +functionality. Since @code{wlr-protocols} is closed for new submissions, and +@code{wayland-protocols} is very slow with changes, this package will hold +protocols used by Hyprland to bridge the aforementioned gap.") + (license license:bsd-3))) + +(define-public hyprwayland-scanner + (package + (name "hyprwayland-scanner") + (version "0.4.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hyprwm/hyprwayland-scanner") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1xc2xcxpq61lg964ihk0wbfzqqvibw20iz09g0p33ym51gwlpxr4")))) + (build-system cmake-build-system) + (arguments (list #:tests? #f)) ;No tests. + (inputs (list pugixml)) + (native-inputs (list gcc-13 pkg-config)) + (home-page "https://github.com/hyprwm/hyprwayland-scanner") + (synopsis "Hyprland implementation of wayland-scanner, in and for C++") + (description + "This package provides a Hyprland implementation of wayland-scanner, in and +for C++.") + (license license:bsd-3))) + +(define hwdata-for-hyprland + (package + (inherit hwdata) + (arguments + (substitute-keyword-arguments (package-arguments hwdata) + ((#:phases _) #~%standard-phases))) + (outputs '("out")))) + +(define-public wayland-protocols-1.36 + (package + (inherit wayland-protocols) + (name "wayland-protocols") + (version "1.36") + (source (origin + (method url-fetch) + (uri (string-append + "https://gitlab.freedesktop.org/wayland/wayland-protocols" + "/-/releases/" version "/downloads/" + "wayland-protocols-" version ".tar.xz")) + (sha256 + (base32 + "14kyxywpfkgpjpkrybs28q1s2prnz30k1b4zap5a3ybrbvh4vzbi")))))) + + +(define-public aquamarine + (package + (name "aquamarine") + (version "0.3.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hyprwm/aquamarine") + (commit (string-append "v" version)))) + (patches (list + (local-file "patches/aquamarine-fix-cmake.patch"))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "114fspibmrwvzdmzv4xdy000vg7mn9r5vas3pr1ndb9xyl15ja1s")))) + (build-system cmake-build-system) + (arguments + (list #:tests? #f)) + (native-inputs + (list gcc-13 + pkg-config + mesa-headers + hyprwayland-scanner + hwdata-for-hyprland)) + (propagated-inputs + (list mesa-libglvnd + libglvnd + libseat-0.8.0 + libinput-minimal-1.26.1 + libxkbcommon + libdisplay-info + libxcb + libxinerama + libxcursor + xcb-util + xcb-util-errors + xcb-util-keysyms + xcb-util-wm + wayland + wayland-protocols-1.36)) + (inputs + (list hyprutils pixman)) + (home-page "https://hyprland.org") + (synopsis "Aquamarine is a very light linux rendering backend library ") + (description "") ;; TODO: this + (license license:bsd-3))) + + +(define xorg-server-xwayland-for-hyprland + (package + (inherit xorg-server-xwayland) + (arguments + (substitute-keyword-arguments (package-arguments xorg-server-xwayland) + ((#:phases phases) + #~(modify-phases #$phases + (add-after 'install 'install-headers + (lambda _ + (let ((fmw (string-append #$output "/include"))) + (mkdir-p fmw) + (copy-recursively "include" fmw)) + )) + )))))) + + +(define-public hyprland + (package + (name "hyprland") + (version "0.42.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hyprwm/Hyprland") + (commit (string-append "v" version)))) + (patches (list + (local-file "patches/hyprland-fix-cmake.patch"))) + (modules '((guix build utils))) + (snippet + '(begin + (for-each delete-file-recursively + '("hyprpm" + "subprojects")))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1hp2xafvlymikxsi6pr8iik35g46683bg376n9hkjxgh9y6njzqv")))) + (build-system cmake-build-system) + (arguments + (list #:tests? #f + #:build-type "release" + #:cmake cmake-minimal-3.27.0 + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'fix-path + (lambda* (#:key inputs #:allow-other-keys) + (substitute* (find-files "src" "\\.cpp$") + (("/usr/local(/bin/Hyprland)" _ path) + (string-append #$output path)) + (("/usr") #$output) + (("(execAndGet\\(\")\\<(cat|fc-list|lspci)\\>" + _ pre cmd) + (string-append + pre (search-input-file + inputs (string-append "bin/" cmd)))) + (("\\") (search-input-file inputs "bin/gcc")) + ;; NOTE: Add binutils to inputs will override ld-wrapper. + (("(execAndGet\\(\\(\")\\" _ pre) + (string-append pre #$binutils "/bin/nm")) + (("\\<(addr2line|objcopy)\\>" _ cmd) + (string-append #$binutils "/bin/" cmd))) + (substitute* "CMakeLists.txt" + (("libudis86") "udis86")) + )) + (add-after 'fix-path 'fix-protocols + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((protocols (string-append + (getcwd) + "/subprojects/hyprland-protocols/protocols"))) + (mkdir-p protocols) + (copy-recursively + (search-input-directory inputs "share/hyprland-protocols/protocols") + protocols)))) + (add-after 'install 'wrap-program + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (mesa (assoc-ref inputs "mesa"))) + (wrap-program (string-append out "/bin/Hyprland") + `("__EGL_VENDOR_LIBRARY_DIRS" prefix ,(list (string-append mesa "/share/glvnd/egl_vendor.d"))))))) + ))) + (native-inputs + (list gcc-13 + jq + pkg-config + hyprwayland-scanner + hwdata-for-hyprland)) + (inputs + (list gcc-13 + + cairo + pango + pciutils + libliftoff + udis86 + + aquamarine + hyprcursor + hyprland-protocols + hyprlang + hyprutils + + xorg-server-xwayland-for-hyprland)) + (home-page "https://hyprland.org") + (synopsis "Dynamic tiling Wayland compositor based on wlroots") + (description + "Hyprland is a dynamic tiling Wayland compositor based on @code{wlroots} +that doesn't sacrifice on its looks. It supports multiple layouts, fancy +effects, has a very flexible IPC model allowing for a lot of customization, and +more.") + (license license:bsd-3))) + + +(define-public hyprpaper + (package + (name "hyprpaper") + (version "0.7.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/hyprwm/hyprpaper" + "/archive/refs/tags/v" version ".tar.gz")) + (sha256 + (base32 + "1d23nsj5hzyxwvhkg9a7x1b8jgyqwzad91zb1894jnxr2d844h28")))) + (build-system cmake-build-system) + (arguments + `(#:tests? #f)) + (native-inputs + (list gcc-13 + pkg-config)) + (inputs + (list hyprlang + wayland-protocols-1.36 + wayland + cairo + libjpeg-turbo + libwebp + mesa + pango + libglvnd)) + (home-page "https://github.com/hyprwm/hyprpaper") + (license license:bsd-3) + (synopsis "Hyprpaper is a blazing fast wayland wallpaper utility with IPC controls.") + (description "Hyprpaper is a blazing fast wayland wallpaper utility with IPC controls."))) + + +(define-public hypridle + (package + (name "hypridle") + (version "0.1.2") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/hyprwm/hypridle" + "/archive/refs/tags/v" version ".tar.gz")) + (sha256 + (base32 + "0ybwip7yq9q569naz5bnrvcdz99648c4pln2zi30z21y333hpas0")))) + (build-system cmake-build-system) + (arguments + `(#:tests? #f)) + (native-inputs + (list gcc-13 + pkg-config)) + (inputs + (list hyprlang + wayland-protocols-1.36 + wayland + sdbus-c++)) + (home-page "https://github.com/hyprwm/hypridle") + (license license:bsd-3) + (synopsis "Hyprland's idle daemon ") + (description "Hyprland's idle daemon "))) + +hyprland diff --git a/modules/ryan-packages/patches/aquamarine-fix-cmake.patch b/modules/ryan-packages/patches/aquamarine-fix-cmake.patch new file mode 100644 index 0000000..bd29649 --- /dev/null +++ b/modules/ryan-packages/patches/aquamarine-fix-cmake.patch @@ -0,0 +1,25 @@ +From 7b6f11ed0708d8775f42107e19d9099835e2498e Mon Sep 17 00:00:00 2001 +From: Freya Murphy +Date: Mon, 5 Aug 2024 17:52:48 -0400 +Subject: [PATCH] fix cmake + +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index bb7a4d6..7f7e7ff 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -19,7 +19,7 @@ set(INCLUDE ${CMAKE_INSTALL_FULL_INCLUDEDIR}) + set(LIBDIR ${CMAKE_INSTALL_FULL_LIBDIR}) + + find_package(PkgConfig REQUIRED) +-find_package(OpenGL REQUIRED COMPONENTS "GLES2") ++find_package(OpenGL REQUIRED) + find_package(hyprwayland-scanner 0.4.0 REQUIRED) + pkg_check_modules( + deps +-- +2.45.1 + diff --git a/modules/ryan-packages/patches/hyprland-fix-cmake.patch b/modules/ryan-packages/patches/hyprland-fix-cmake.patch new file mode 100644 index 0000000..d294905 --- /dev/null +++ b/modules/ryan-packages/patches/hyprland-fix-cmake.patch @@ -0,0 +1,41 @@ +From 33fac66982422104cc1c2664f9a841fc96295c13 Mon Sep 17 00:00:00 2001 +From: Freya Murphy +Date: Mon, 5 Aug 2024 20:35:50 -0400 +Subject: [PATCH] fix cmake + +--- + CMakeLists.txt | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index fa58b63d..51ea6cfa 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -26,7 +26,6 @@ execute_process(COMMAND ./scripts/generateVersion.sh + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) + + # udis +-add_subdirectory("subprojects/udis86") + + if(CMAKE_BUILD_TYPE) + string(TOLOWER ${CMAKE_BUILD_TYPE} BUILDTYPE_LOWER) +@@ -85,7 +84,7 @@ if(LEGACY_RENDERER) + else() + set(GLES_VERSION "GLES3") + endif() +-find_package(OpenGL REQUIRED COMPONENTS ${GLES_VERSION}) ++find_package(OpenGL REQUIRED) + + pkg_check_modules( + deps +@@ -314,7 +313,6 @@ protocolwayland() + + # tools + add_subdirectory(hyprctl) +-add_subdirectory(hyprpm) + + # binary and symlink + install(TARGETS Hyprland) +-- +2.45.1 +