From 30fd5a7f1b6d2c77e0ef0c36cad4c5ad6b22ac46 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 6 Aug 2024 20:14:18 -0400 Subject: [PATCH] update packages, remove rosenthall, update hyprland to 0.42.0-git staging --- modules/freya/packages/admin.scm | 19 + modules/freya/packages/assembly.scm | 32 + modules/freya/packages/cmake.scm | 32 + modules/freya/packages/freedesktop.scm | 24 + modules/freya/packages/gl.scm | 222 ++++++ .../patches/aquamarine-fix-cmake.patch | 25 + .../packages/patches/hyprland-fix-cmake.patch | 41 + modules/freya/packages/wm.scm | 712 +++++++++++++----- modules/freya/system.scm | 13 +- 9 files changed, 906 insertions(+), 214 deletions(-) create mode 100644 modules/freya/packages/admin.scm create mode 100644 modules/freya/packages/assembly.scm create mode 100644 modules/freya/packages/cmake.scm create mode 100644 modules/freya/packages/freedesktop.scm create mode 100644 modules/freya/packages/gl.scm create mode 100644 modules/freya/packages/patches/aquamarine-fix-cmake.patch create mode 100644 modules/freya/packages/patches/hyprland-fix-cmake.patch diff --git a/modules/freya/packages/admin.scm b/modules/freya/packages/admin.scm new file mode 100644 index 0000000..6b4160f --- /dev/null +++ b/modules/freya/packages/admin.scm @@ -0,0 +1,19 @@ +(define-module (freya packages admin) + #:use-module (guix git-download) + #:use-module (guix packages) + #:use-module (gnu packages admin)) + +(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")))))) diff --git a/modules/freya/packages/assembly.scm b/modules/freya/packages/assembly.scm new file mode 100644 index 0000000..5b6609f --- /dev/null +++ b/modules/freya/packages/assembly.scm @@ -0,0 +1,32 @@ +(define-module (freya packages assembly) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix git-download) + #:use-module (guix build-system gnu) + #:use-module (guix packages) + #:use-module (gnu packages autotools) + #:use-module (gnu packages python)) + +(define-public 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)))) diff --git a/modules/freya/packages/cmake.scm b/modules/freya/packages/cmake.scm new file mode 100644 index 0000000..f8e1d52 --- /dev/null +++ b/modules/freya/packages/cmake.scm @@ -0,0 +1,32 @@ +(define-module (freya packages cmake) + #:use-module (guix download) + #:use-module (guix packages) + #:use-module (guix gexp) + #:use-module (guix utils) + #:use-module (gnu packages check) + #:use-module (gnu packages debug) + #:use-module (gnu packages cmake) + #:use-module (gnu packages python)) + +(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))))))) diff --git a/modules/freya/packages/freedesktop.scm b/modules/freya/packages/freedesktop.scm new file mode 100644 index 0000000..8924054 --- /dev/null +++ b/modules/freya/packages/freedesktop.scm @@ -0,0 +1,24 @@ +(define-module (freya packages freedesktop) + #:use-module (guix git-download) + #:use-module (guix packages) + #:use-module (gnu packages check) + #:use-module (gnu packages freedesktop) + #:use-module (gnu packages python)) + +(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))))) diff --git a/modules/freya/packages/gl.scm b/modules/freya/packages/gl.scm new file mode 100644 index 0000000..8e7aeff --- /dev/null +++ b/modules/freya/packages/gl.scm @@ -0,0 +1,222 @@ +(define-module (freya packages gl) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix gexp) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (gnu packages) + #:use-module (gnu packages gl)) + +(define-public mesa-libglvnd + (package + (inherit mesa) + (inputs (modify-inputs (package-inputs mesa) (prepend libglvnd))) + (arguments + (list + #:configure-flags + #~(list + #$@(cond + ((or (target-aarch64?) (target-arm32?)) + '("-Dgallium-drivers=etnaviv,freedreno,kmsro,lima,nouveau,\ +panfrost,r300,r600,svga,swrast,tegra,v3d,vc4,virgl,zink")) + ((or (target-ppc64le?) (target-ppc32?) (target-riscv64?)) + '("-Dgallium-drivers=nouveau,r300,r600,radeonsi,svga,swrast,virgl,zink")) + (else + '("-Dgallium-drivers=crocus,iris,nouveau,r300,r600,radeonsi,\ +svga,swrast,virgl,zink"))) + ;; Enable various optional features. TODO: opencl requires libclc, + ;; omx requires libomxil-bellagio + "-Dplatforms=x11,wayland" + "-Dglx=dri" ;Thread Local Storage, improves performance + ;; "-Dopencl=true" + ;; "-Domx=true" + "-Dosmesa=true" + "-Dgallium-xa=enabled" + + ;; features required by wayland + "-Dgles2=enabled" + "-Dgbm=enabled" + "-Dshared-glapi=enabled" + "-Dglvnd=true" + + ;; Explicitly enable Vulkan on some architectures. + #$@(cond + ((or (target-x86-32?) (target-x86-64?)) + '("-Dvulkan-drivers=intel,intel_hasvk,amd,swrast")) + ((or (target-ppc64le?) (target-ppc32?)) + '("-Dvulkan-drivers=amd,swrast")) + ((target-aarch64?) + '("-Dvulkan-drivers=freedreno,amd,broadcom,swrast")) + ((target-riscv64?) + '("-Dvulkan-drivers=amd,swrast")) + (else + '("-Dvulkan-drivers=auto"))) + + ;; Enable the Vulkan overlay layer on all architectures. + "-Dvulkan-layers=device-select,overlay" + + ;; Enable all the codecs that were built by default as part of the + ;; 21.3.x releases to avoid functionality regressions. + "-Dvideo-codecs=all" + + ;; Enable ZSTD compression for shader cache. + "-Dzstd=enabled" + + ;; Also enable the tests. + "-Dbuild-tests=true" + + "-Dllvm=enabled") ; default is x86/x86_64 only + + ;; XXX: 'debugoptimized' causes LTO link failures on some drivers. The + ;; documentation recommends using 'release' for performance anyway. + #:build-type "release" + + #:modules '((ice-9 match) + (srfi srfi-1) + (guix build utils) + (guix build meson-build-system)) + #:phases + #~(modify-phases %standard-phases + #$@(if (%current-target-system) + #~((add-after 'unpack 'fix-cross-compiling + (lambda* (#:key native-inputs #:allow-other-keys) + ;; When cross compiling, we use cmake to find llvm, not + ;; llvm-config, because llvm-config cannot be executed + ;; see https://github.com/llvm/llvm-project/issues/58984 + (substitute* "meson.build" + (("method : host_machine\\.system.*") + "method : 'cmake',\n")) + (setenv "CMAKE" + (search-input-file + native-inputs "/bin/cmake"))))) + #~()) + (add-after 'unpack 'disable-failing-test + (lambda _ + ;; Disable the intel vulkan (anv_state_pool) tests, as they may + ;; fail in a nondeterministic fashion (see: + ;; https://gitlab.freedesktop.org/mesa/mesa/-/issues/5446). + (substitute* "src/intel/vulkan/meson.build" + (("if with_tests") + "if false")) + #$@(match (%current-system) + ("riscv64-linux" + ;; According to the test logs the llvm JIT is not designed + ;; for this architecture and the llvmpipe tests all segfault. + ;; The same is true for mesa:gallium / osmesa-render. + `((substitute* '("src/gallium/drivers/llvmpipe/meson.build" + "src/gallium/targets/osmesa/meson.build") + (("if with_tests") "if false")))) + ("powerpc64le-linux" + ;; Disable some of the llvmpipe tests. + `((substitute* "src/gallium/drivers/llvmpipe/lp_test_arit.c" + (("0\\.5, ") "")))) + ("powerpc-linux" + ;; There are some tests which fail specifically on powerpc. + `((substitute* '(;; LLVM ERROR: Relocation type not implemented yet! + "src/gallium/drivers/llvmpipe/meson.build" + "src/gallium/targets/osmesa/meson.build") + (("if with_tests") "if not with_tests")) + ;; This is probably a big-endian test failure. + (substitute* "src/amd/common/meson.build" + (("and not with_platform_windows") + "and with_platform_windows")))) + ("i686-linux" + ;; This test is known to fail on i686 (see: + ;; https://gitlab.freedesktop.org/mesa/mesa/-/issues/4091). + `((substitute* "src/util/meson.build" + ((".*'tests/u_debug_stack_test.cpp',.*") "")))) + ("armhf-linux" + ;; Disable some of the llvmpipe tests. + `((substitute* "src/gallium/drivers/llvmpipe/meson.build" + (("'lp_test_arit', ") "")))) + (_ + '((display "No tests to disable on this architecture.\n")))))) + (add-before 'configure 'fix-dlopen-libnames + (lambda* (#:key inputs #:allow-other-keys) + (let ((out #$output)) + ;; Remain agnostic to .so.X.Y.Z versions while doing + ;; the substitutions so we're future-safe. + (substitute* "src/glx/meson.build" + (("-DGL_LIB_NAME=\"lib@0@\\.so\\.@1@\"") + (string-append "-DGL_LIB_NAME=\"" out + "/lib/lib@0@.so.@1@\""))) + (substitute* "src/gbm/backends/dri/gbm_dri.c" + (("\"libglapi\\.so") + (string-append "\"" out "/lib/libglapi.so"))) + (substitute* "src/gbm/main/backend.c" + ;; No need to patch the gbm_gallium_drm.so reference; + ;; it's never installed since Mesa removed its + ;; egl_gallium support. + (("\"gbm_dri\\.so") + (string-append "\"" out "/lib/dri/gbm_dri.so"))) + (substitute* "src/gallium/drivers/zink/zink_screen.c" + (("util_dl_open\\(VK_LIBNAME\\)") + (format #f "util_dl_open(\"~a\")" + (search-input-file inputs + "lib/libvulkan.so.1"))))))) + (add-after 'install 'split-outputs + (lambda _ + (let ((out #$output) + (bin #$output:bin)) + ;; Not all architectures have the Vulkan overlay control script. + (mkdir-p (string-append out "/bin")) + (call-with-output-file (string-append out "/bin/.empty") + (const #t)) + (copy-recursively (string-append out "/bin") + (string-append bin "/bin")) + (delete-file-recursively (string-append out "/bin"))))) + (add-after 'install 'symlinks-instead-of-hard-links + (lambda _ + ;; All the drivers and gallium targets create hard links upon + ;; installation (search for "hardlink each megadriver instance" + ;; in the makefiles). This is no good for us since we'd produce + ;; nars that contain several copies of these files. Thus, turn + ;; them into symlinks, which saves ~124 MiB. + (let* ((out #$output) + (lib (string-append out "/lib")) + (files (find-files lib + (lambda (file stat) + (and (string-contains file ".so") + (eq? 'regular + (stat:type stat)))))) + (inodes (map (compose stat:ino stat) files))) + (for-each (lambda (inode) + (match (filter-map (match-lambda + ((file ino) + (and (= ino inode) file))) + (zip files inodes)) + ((_) + #f) + ((reference others ..1) + (format #t "creating ~a symlinks to '~a'~%" + (length others) reference) + (for-each delete-file others) + (for-each (lambda (file) + (if (string=? (dirname file) + (dirname reference)) + (symlink (basename reference) + file) + (symlink reference file))) + others)))) + (delete-duplicates inodes))))) + (add-after 'install 'set-layer-path-in-manifests + (lambda _ + (let* ((out #$output) + (implicit-path (string-append + out + "/share/vulkan/implicit_layer.d/")) + (explicit-path (string-append + out + "/share/vulkan/explicit_layer.d/")) + (fix-layer-path + (lambda (layer-name) + (let* ((explicit (string-append explicit-path layer-name ".json")) + (implicit (string-append implicit-path layer-name ".json")) + (manifest (if (file-exists? explicit) + explicit + implicit))) + (substitute* manifest + (((string-append "\"lib" layer-name ".so\"")) + (string-append "\"" out "/lib/lib" layer-name ".so\""))))))) + (for-each fix-layer-path '("VkLayer_MESA_device_select" + "VkLayer_MESA_overlay")))))))))) diff --git a/modules/freya/packages/patches/aquamarine-fix-cmake.patch b/modules/freya/packages/patches/aquamarine-fix-cmake.patch new file mode 100644 index 0000000..bd29649 --- /dev/null +++ b/modules/freya/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/freya/packages/patches/hyprland-fix-cmake.patch b/modules/freya/packages/patches/hyprland-fix-cmake.patch new file mode 100644 index 0000000..d294905 --- /dev/null +++ b/modules/freya/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 + diff --git a/modules/freya/packages/wm.scm b/modules/freya/packages/wm.scm index fc21aed..53f7738 100644 --- a/modules/freya/packages/wm.scm +++ b/modules/freya/packages/wm.scm @@ -11,9 +11,21 @@ #:use-module (gnu packages gtk) #:use-module (gnu packages gl) #:use-module (gnu packages linux) + #:use-module (gnu packages gnome) + #:use-module (gnu packages compression) #:use-module (gnu packages pciutils) #:use-module (gnu packages image) #:use-module (gnu packages glib) + #:use-module (gnu packages xml) + #:use-module (gnu packages web) + #:use-module (gnu packages version-control) + #:use-module (gnu packages python) + #:use-module (gnu packages autotools) + #:use-module (gnu packages xorg) + #:use-module (gnu packages freedesktop) + #:use-module (gnu packages base) + #:use-module (gnu packages bash) + #:use-module (gnu packages qt) #:use-module (guix download) #:use-module (guix packages) #:use-module (guix gexp) @@ -21,9 +33,14 @@ #:use-module (guix build-system cmake) #:use-module (guix build-system meson) #:use-module (guix build-system trivial) + #:use-module (guix build-system qt) + #:use-module (guix build-system gnu) #:use-module (guix build utils) - #:use-module (rosenthal packages wm) - #:use-module (rosenthal packages freedesktop) + #:use-module (freya packages gl) + #:use-module (freya packages admin) + #:use-module (freya packages cmake) + #:use-module (freya packages freedesktop) + #:use-module (freya packages assembly) #:use-module (guix utils)) @@ -46,7 +63,7 @@ (package (inherit waybar) (name "waybar-new") - (version "0.10.3") + (version "0.10.4") (source (origin (method git-fetch) @@ -55,68 +72,35 @@ (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "04xd61ycn1nisq1s5ch14zkbsjcfcy6n29nkjn68s2ribmws0iid")))) + (base32 "0liiyz6212pmyhpsrb6773qf5b9b4kb76nggizygr9abfidbg5gw")))) (arguments (list #:configure-flags #~(list "--wrap-mode=nodownload" "-Dexperimental=true"))))) -(define cairo-for-hyprland +(define-public libliftoff (package - (inherit cairo) - (name "cairo") - (version "1.18.0") + (name "libliftoff") + (version "0.1.0") (source (origin (method url-fetch) - (uri (string-append "https://cairographics.org/releases/cairo-" - version ".tar.xz")) + (uri (string-append "https://github.com/emersion/libliftoff" + "/archive/refs/tags/v" version ".tar.gz")) (sha256 (base32 - "0r0by563s75xyzz0d0j1nmjqmdrk2x9agk7r57p3v8vqp4v0ffi4")))) + "17ssbjbv8njgvfha8zsx4nixpi5xxl1rwvk0lcacgqk0nmjyb23s")))) (build-system meson-build-system) - (arguments - (list #:tests? #f - #:glib-or-gtk? #t - #:configure-flags - #~(list "-Dspectre=disabled"))) - (outputs '("out")))) + (native-inputs (list gcc-13 + pkg-config + cmake-minimal-3.27.0 + libdrm)) + (home-page "https://github.com/emersion/libliftoff") + (synopsis "Lightweight KMS plane library") + (description "") + (license license:expat))) -(define hwdata-for-hyprland - (package - (inherit hwdata) - (arguments - (substitute-keyword-arguments (package-arguments hwdata) - ((#:phases _) #~%standard-phases))) - (outputs '("out")))) - - -(define libdrm-for-hyprland - (package - (inherit libdrm) - (name "libdrm") - (version "2.4.120") - (source (origin - (method url-fetch) - (uri (string-append - "https://dri.freedesktop.org/libdrm/libdrm-" - version ".tar.xz")) - (sha256 - (base32 - "0yijzgg6rdsa68bz03sw0lcfa2nclv9m3as1cja50wkcyxim7x9v")))))) - - -(define hyprland-unbundle-wlroots-patch - (origin - (method url-fetch) - (uri (string-append "https://github.com/hyprwm/Hyprland" "/raw/" - "cba1ade848feac44b2eda677503900639581c3f4" - "/nix/patches/meson-build.patch")) - (sha256 - (base32 "0fwvsshz3k6061p3hdl175pydmj80vnw5rm4xfcn64w1ssfq7liw")))) - - -(define wayland-protocols-for-hyprland +(define-public wayland-protocols-1.36 (package (inherit wayland-protocols) (name "wayland-protocols") @@ -132,184 +116,296 @@ "14kyxywpfkgpjpkrybs28q1s2prnz30k1b4zap5a3ybrbvh4vzbi")))))) -(define wlroots-for-hyprland - (let ((base wlroots) - (revision "1") - (commit "5c1d51c5a2793480f5b6c4341ad0797052aec2ea")) - (package - (inherit base) - (name "wlroots") - (version (git-version "0.18.0-dev-hyprland" revision commit)) - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/hyprwm/wlroots-hyprland") - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "0gy0g0kxb3q1wjqrypnvmrxcb4ld3advikchygpwpfp4s9v0mmvd")))) - (arguments - (substitute-keyword-arguments (package-arguments wlroots) - ((#:phases phases #~%standard-phases) - #~(modify-phases #$phases - (add-after 'unpack 'adjust-patching-script - (lambda _ - (substitute* "patches/apply.sh" - (("apply \\|\\| check_applied \\|\\| fail") - "patch -Np1 < $PATCH")))))))) - (propagated-inputs - (modify-inputs (package-propagated-inputs wlroots) - (prepend libdrm-for-hyprland) - (replace "libinput-minimal" libinput-minimal-1.24.0) - (replace "wayland-protocols" wayland-protocols-for-hyprland))) - (native-inputs - (modify-inputs (package-native-inputs base) - (replace "hwdata" `(,hwdata-for-hyprland "out"))))))) - - -(define-public hyprland-plugin-hy3 +(define-public hyprlang (package - (name "hyprland-plugin-hy3") - (version "0.40.0") + (name "hyprlang") + (version "0.5.2") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/outfoxxed/hy3" - "/archive/refs/tags/hl" version ".tar.gz")) + (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 - "13rnv24nc52fzvh7ryl7q91cr59z0qsv4vlnps5vr78g58lx11j0")))) + "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)) + (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.3.0") + (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 + "01j5hc8qnjzqiiwryfawx1wzrhkn0m794knphyc0vsxwkcmjaj8x")))) + (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)) + (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-public 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 gcc-13 pkg-config)) + (propagated-inputs (list pixman)) + (home-page "https://github.com/hyprwm/hyprutils") + (synopsis "Hyprland utilities library used across the ecosystem ") + (description + "this package provides hyprutils") + (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 aquamarine + (package + (name "aquamarine") + (version "0.2.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 + "061shgk8lvbk4f35cf057hl4jh36aahd6l3si6ga91rzl184b9sh")))) (build-system cmake-build-system) (arguments - `(#:tests? #f - #:configure-flags '("DCMAKE_BUILD_TYPE=Release"))) + (list #:tests? #f)) (native-inputs - (list meson pkg-config)) - (inputs - (list pixman - libdrm - pango - gcc-13 - libinput - hyprland-protocols + (list gcc-13 + pkg-config + mesa-headers hyprwayland-scanner - hyprlang - hyprland - wayland - wlroots-for-hyprland)) - (license license:gpl3) - (home-page "https://github.com/outfoxxed/hy3") - (synopsis "i3 / sway like layout for hyprland.") - (description "Hyprland plugin for an i3 / sway like manual tiling layout"))) - -(define-syntax hyprland-plugin-impl - (syntax-rules () - ((_ plugin) - (let ((commit "fd133914bf1921db2a26627698f914478f6a9471") - (revision "1")) - (package - (name (string-append "hyprland-plugin-" plugin)) - (version (git-version "0.40.0" revision commit)) - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/hyprwm/hyprland-plugins.git") - (commit commit))) - (sha256 - (base32 - "0518ggbam7rllf9xfzhfn9fp364rbiycsrkag74jscy5br5cyl4g")) - (file-name (git-file-name name version)))) - (build-system meson-build-system) - (arguments - `(#:tests? #f - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'chdir - (lambda _ (chdir (string-append "../source/" plugin "/"))))))) - (native-inputs - (list pkg-config - gcc-13)) - (inputs - (list gcc-13 - pango - libinput - hyprland-protocols - hyprwayland-scanner - hyprland - hyprlang - wayland - wlroots-for-hyprland)) - (license license:bsd-3) - (home-page "https://github.com/hyprwm/hyprland-plugins") - (synopsis (string-append "official " plugin " plugin for hyprland")) - (description (string-append "official " plugin " plugin for hyprland"))))))) - -(define-public hyprland-plugins - (package - (name "hyprland-plugins") - (version "0.40.0") - (source #f) - (build-system trivial-build-system) - (arguments '(#:builder (begin (mkdir %output) #t))) - (license license:bsd-3) - (home-page "https://github.com/hyprwm/hyprland-plugins") - (synopsis "A collection of all the official hyprland plugins") - (description "A metapackage containing inputs for each official plugin") + hwdata-for-hyprland)) (propagated-inputs - (list (hyprland-plugin-impl "borders-plus-plus") - (hyprland-plugin-impl "csgo-vulkan-fix") - (hyprland-plugin-impl "hyprbars") - (hyprland-plugin-impl "hyprexpo") - (hyprland-plugin-impl "hyprtrails") - (hyprland-plugin-impl "hyprwinwrap"))))) + (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)) + (home-page "https://hyprland.org") + (synopsis "Aquamarine is a very light linux rendering backend library ") + (description "") ;; TODO: this + (license license:bsd-3))) -(define-public hyprlock - (let ((commit "d9a6229434fba475ea42b634ee2f03919236798d") + +(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 + (let ((commit "0e86808e5912823f1c6bea1b6d5fcae297fc9f57") (revision "1")) (package - (name "hyprlock") - (version (git-version "0.3.0" revision commit)) + (name "hyprland") + (version (git-version "0.42.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference - (url "https://github.com/hyprwm/hyprlock") + (url "https://github.com/hyprwm/Hyprland") (commit commit))) + (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 "19cg8vj4sgz5pxib9m08af1lilay9bckjhlr6h333s014l7y09sw")))) + (base32 "10fiipxxkdvwxqgll5q5sa8sl5hm323gshx9bmlmlry07r0mk3mx")))) (build-system cmake-build-system) (arguments - `(#:tests? #f - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'fix-egl - (lambda _ - (substitute* (list "src/core/Egl.hpp" - "src/renderer/DMAFrame.cpp") - (("#include " include) - (string-append include "\n#include \n"))) - #t))))) + (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 - mesa-headers)) + hyprwayland-scanner + hwdata-for-hyprland)) (inputs - (list cairo-for-hyprland - pango - libxkbcommon - hyprlang - mesa - wayland-protocols-for-hyprland - wlroots-for-hyprland - linux-pam - libdrm-for-hyprland - libglvnd)) - (home-page "https://github.com/hyprwm/hyprlock") - (license license:bsd-3) - (synopsis "Screen locker for Hyprland") - (description "Screen locker for hyprland.")))) + (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 +effe cts, has a very flexible IPC model allowing for a lot of customization, and +more .") + (license license:bsd-3)))) (define-public hyprpaper @@ -331,9 +427,9 @@ pkg-config)) (inputs (list hyprlang - wayland-protocols-for-hyprland + wayland-protocols-1.36 wayland - cairo-for-hyprland + cairo libjpeg-turbo libwebp mesa @@ -364,7 +460,7 @@ pkg-config)) (inputs (list hyprlang - wayland-protocols-for-hyprland + wayland-protocols-1.36 wayland sdbus-c++)) (home-page "https://github.com/hyprwm/hypridle") @@ -373,7 +469,207 @@ (description "Hyprland's idle daemon "))) +(define-public hyprlock + (package + (name "hyprlock") + (version "0.4.1") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/hyprwm/hyprlock" + "/archive/refs/tags/v" version ".tar.gz")) + (sha256 + (base32 + "0q5smah3zmg8vwipfd74n664mavkgzrqjn0i57gwmbwc111illw7")))) + (build-system cmake-build-system) + (arguments + (list + #:tests? #f + #:phases + #~(modify-phases %standard-phases + (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/hyprlock") + `("__EGL_VENDOR_LIBRARY_DIRS" prefix ,(list (string-append mesa "/share/glvnd/egl_vendor.d")))))))))) + (native-inputs + (list gcc-13 + pkg-config + mesa-headers + wayland)) + (inputs + (list cairo + pango + libxkbcommon + hyprlang + hyprutils + mesa-libglvnd + libdrm + libglvnd + wayland-protocols-1.36 + libjpeg-turbo + libwebp + linux-pam)) + (home-page "https://github.com/hyprwm/hyprlock") + (license license:bsd-3) + (synopsis "Screen locker for Hyprland") + (description "Screen locker for hyprland."))) +(define-public xdg-desktop-portal-hyprland + (package + (name "xdg-desktop-portal-hyprland") + (version "1.3.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hyprwm/xdg-desktop-portal-hyprland") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0fdbzxanmmzrvb9wfzg1pdsnlg7dl6v5k8bl44w10n48s7bbbzn0")))) + (build-system qt-build-system) + (arguments + (list #:tests? #f ;No tests + #:qtbase qtbase + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'fix-path + (lambda* (#:key inputs #:allow-other-keys) + (substitute* (find-files "." "\\.cp?*$") + (("/bin/sh") "sh") + (("\\<(sh|grim|hyprctl|slurp)\\>" _ cmd) + (search-input-file inputs (string-append "/bin/" cmd))) + (("\\<(hyprland-share-picker)\\>" _ cmd) + (string-append #$output "/bin/" cmd)))))))) + (native-inputs + (list gcc-13 + pkg-config + wayland)) + (inputs + (list bash-minimal + grim + hyprland + hyprland-protocols + wayland-protocols-1.36 + hyprlang + mesa + pipewire + qtwayland + sdbus-c++ + slurp)) + (home-page "https://github.com/hyprwm/xdg-desktop-portal-hyprland") + (synopsis "XDG Desktop Portal backend for Hyprland") + (description + "This package provides @code{xdg-desktop-portal-hyprland}, which extends +@code{xdg-desktop-portal-wlr} for Hyprland with support for +@code{xdg-desktop-portal} screenshot and casting interfaces, while adding a few +extra portals specific to Hyprland, mostly for window sharing.") + (license license:bsd-3))) + + +(define-public hyprland-plugin-hy3 + (let ((commit "93759c8032995eb566008537389543b3e1b4a65c") + (revision "1")) + (package + (name "hyprland-plugin-hy3") + (version (git-version "0.42.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/outfoxxed/hy3.git") + (commit commit))) + (sha256 + (base32 + "0g59zd5724ply38h14r6hafklb8mh0xwb81i0jzzh3xz0r9pmv3s")))) + (build-system cmake-build-system) + (arguments + (list #:tests? #f + #:cmake cmake-minimal-3.27.0 + #:configure-flags #~(list "DCMAKE_BUILD_TYPE=Release"))) + (native-inputs + (list gcc-13 + pkg-config + hyprwayland-scanner)) + (inputs + (list gcc-13 + aquamarine + pango + gcc-13 + hyprland-protocols + hyprland + hyprlang + hyprutils + libdrm)) + (license license:gpl3) + (home-page "https://github.com/outfoxxed/hy3") + (synopsis "i3 / sway like layout for hyprland.") + (description "Hyprland plugin for an i3 / sway like manual tiling layout")))) + + +(define-syntax hyprland-plugin-impl + (syntax-rules () + ((_ plugin) + (let ((commit "4fcb4038f23e5273af9a5684f3ee10b0652b3bab") + (revision "1")) + (package + (name (string-append "hyprland-plugin-" plugin)) + (version (git-version "0.42.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hyprwm/hyprland-plugins.git") + (commit commit))) + (sha256 + (base32 + "1i1924a2kmjbp6c6y443hdv53nganj4g6dci20v9imrja21vc6s3")) + (file-name (git-file-name name version)))) + (build-system cmake-build-system) + (arguments + (list #:tests? #f + #:cmake cmake-minimal-3.27.0 + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ (chdir (string-append "../source/" plugin "/"))))))) + (native-inputs + (list pkg-config + gcc-13 + hyprwayland-scanner)) + (inputs + (list gcc-13 + aquamarine + pango + hyprland-protocols + hyprland + hyprlang + hyprutils + libdrm)) + (license license:bsd-3) + (home-page "https://github.com/hyprwm/hyprland-plugins") + (synopsis (string-append "official " plugin " plugin for hyprland")) + (description (string-append "official " plugin " plugin for hyprland"))))))) + + +(define-public hyprland-plugins + (package + (name "hyprland-plugins") + (version "0.42.0") + (source #f) + (build-system trivial-build-system) + (arguments '(#:builder (begin (mkdir %output) #t))) + (license license:bsd-3) + (home-page "https://github.com/hyprwm/hyprland-plugins") + (synopsis "A collection of all the official hyprland plugins") + (description "A metapackage containing inputs for each official plugin") + (propagated-inputs + (list (hyprland-plugin-impl "borders-plus-plus") + (hyprland-plugin-impl "csgo-vulkan-fix") + (hyprland-plugin-impl "hyprbars") + (hyprland-plugin-impl "hyprexpo") + (hyprland-plugin-impl "hyprtrails") + (hyprland-plugin-impl "hyprwinwrap"))))) diff --git a/modules/freya/system.scm b/modules/freya/system.scm index 79eacbf..0ae9cfc 100644 --- a/modules/freya/system.scm +++ b/modules/freya/system.scm @@ -7,6 +7,7 @@ #:use-module (gnu packages shells) #:use-module (gnu packages tls) #:use-module (gnu packages gtk) + #:use-module (gnu packages gl) #:use-module (gnu packages vpn) #:use-module (gnu packages security-token) #:use-module (gnu packages virtualization) @@ -27,11 +28,11 @@ #:use-module (gnu services virtualization) #:use-module (guix packages) #:use-module (nongnu packages linux) - #:use-module (rosenthal packages wm) #:use-module (srfi srfi-1) #:use-module (freya packages wm) #:use-module (freya packages certs) #:use-module (freya packages linux) + #:use-module (freya packages gl) #:use-module (freya packages networking) #:use-module (freya packages virtualization)) @@ -84,7 +85,6 @@ "swayfx" "swaybg" "swayidle" - "hyprland" "cage" "libnotify" @@ -103,7 +103,6 @@ "xf86-video-qxl" ; video audio - "mesa" "mesa-utils" "glu" "libglvnd" @@ -122,7 +121,6 @@ "xdg-desktop-portal" ;"xdg-desktop-portal-wlr" "xdg-desktop-portal-gtk" - "xdg-desktop-portal-hyprland" ; firmware "sof-firmware" @@ -172,17 +170,20 @@ "font-google-noto-sans-cjk" "font-jetbrains-mono" "font-dejavu")) - (list swaylock-effects-new + (list xdg-desktop-portal-hyprland + swaylock-effects-new waybar-new virt-manager-new freya-ca-certs hyprland-plugin-hy3 hyprland-plugins + hyprland hyprlock hyprpaper hypridle bluez-new - blueman-new) + blueman-new + mesa) %my-base-packages)) ;; Below is the list of system services. TO search for available