* [bug#73328] Adding Hyprland
@ 2024-09-18 3:31 The Man
0 siblings, 0 replies; only message in thread
From: The Man @ 2024-09-18 3:31 UTC (permalink / raw)
To: 73328
[-- Attachment #1.1: Type: text/plain, Size: 1151 bytes --]
While the conditions are not quite ideal, guix is almost in a form to
accept Hyprland
the following remains:
mesa-updates commits:
318a1b8596b4862e7449f9e809fc29b203256db6 (gnu: wayland-protocols: Update to
1.37.)
fdc34f63b54de7d356cc5adcbed7a0c7a532c789 (gnu: libinput: Update to 1.26.2.)
in the master guix branch:
https://issues.guix.gnu.org/73311 (libliftoff)
others:
pipewire updated (only issue with a single header, not a real blocker but
would be ideal)
Otherwise, see attached with the hypr* desktop and utilities building,
running, and working
on my desktop.
The only caveat existing is that adding the following:
("GBM_BACKENDS_PATH" . ,(file-append mesa "/lib:$GBM_BACKENDS_PATH"))
to a home-environment-variables-service-type in your home configuration is
apparently a
requirement for running or hyprland will complain about egl/gbm.
otherwise I've tested the functionality of the desktop and nothing appears
to be broken.
linked, a screenshot of hyprland running in guix:
https://files.catbox.moe/2troyt.webp
attached are the package and service files.
feel free to put this off until later, this is only to show that it can be
done.
[-- Attachment #1.2: Type: text/html, Size: 1522 bytes --]
[-- Attachment #2: hyprland.scm --]
[-- Type: application/octet-stream, Size: 22244 bytes --]
(define-module (hyprland packages hyprland)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix build-system cmake)
#:use-module (guix build-system copy)
#:use-module (guix build-system gnu)
#:use-module (guix build-system meson)
#:use-module (guix build-system trivial)
#:use-module (guix download)
#:use-module (guix build-system)
#:use-module (guix build utils)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module (gnu packages)
#:use-module (gnu packages admin)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages build-tools)
#:use-module (gnu packages cmake)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages cpp)
#:use-module (gnu packages debug)
#:use-module (gnu packages file)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
#:use-module (gnu packages gnome)
#:use-module (gnu packages gtk)
#:use-module (gnu packages guile)
#:use-module (gnu packages image)
#:use-module (gnu packages kde-plasma)
#:use-module (gnu packages libffi)
#:use-module (gnu packages llvm)
#:use-module (gnu packages onc-rpc)
#:use-module (gnu packages opencl)
#:use-module (gnu packages linux)
#:use-module (gnu packages man)
#:use-module (gnu packages ninja)
#:use-module (gnu packages pciutils)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages qt)
#:use-module (gnu packages web)
#:use-module (gnu packages wm)
#:use-module (gnu packages version-control)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages xorg)
#:use-module (gnu packages xml))
;; TODO: REMOVE *-for-hyprland packages as they become upstream
(define wayland-protocols-for-hyprland
(hidden-package (package
(inherit wayland-protocols)
(name "wayland-protocols")
(version "1.37")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.freedesktop.org/wayland/wayland-protocols.git")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"17j9v2i3v16qyc8pp6zq9hjs6nrzgialc5sasnphg9va2vasyb5g")))))))
(define libinput-for-hyprland
(hidden-package (package
(inherit libinput)
(name "libinput-for-aquamaine")
(version "1.26.2")
(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
"1zwwq7a0a6yznc6jxhp6gb50yw5vpfkvgbrabrpc5pwldpckfbrg"))))
(arguments
(substitute-keyword-arguments (package-arguments libinput)
((#:phases phases ''())
#~(modify-phases %standard-phases
(delete 'check)))))))) ;;broken tests. probably fine
(define libliftoff-for-hyprland
(hidden-package (package
(name "libliftoff")
(version "0.5.0")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.freedesktop.org/emersion/libliftoff")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"163g8ndsbma7acy2k9mrnvlpb7yi4431hgkx1gygkafgwpq1ii1x"))))
(build-system meson-build-system)
(native-inputs (list pkg-config))
(inputs (list libdrm))
(home-page "https://gitlab.freedesktop.org/emersion/libliftoff")
(synopsis "Lightweight KMS plane library")
(description
"Libliftoff eases the use of KMS planes from userspace without standing in your
way. Users create \"virtual planes\" called layers, set KMS properties on them,
and libliftoff will pick hardware planes for these layers if possible.")
(license license:expat))))
;; TODO: remove once pipewire is updated upstream
;; this is here to fix a SINGLE HEADER FILE
(define pipehypr
(hidden-package (package
(inherit pipewire)
(name "pipehypr")
(arguments
(substitute-keyword-arguments (package-arguments pipewire)
((#:phases phases ''())
#~(modify-phases %standard-phases
(add-after 'unpack 'fix-spa
(lambda _
(substitute* "spa/include/spa/pod/dynamic.h"
(("SPA_VERSION_POD_BUILDER_CALLBACKS")
".version = SPA_VERSION_POD_BUILDER_CALLBACKS")))))))))))
(define-public hyprutils
(package
(name "hyprutils")
(version "0.2.1")
(source (origin
(method git-fetch)
(uri (git-reference
(url (string-append "https://github.com/hyprwm/" name))
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0nxx5yb5k9726x95n8gi27xyxyzwb0ma0nj3czpb51sda1k0hz0g"))))
(build-system cmake-build-system)
(native-inputs (list gcc-14 pkg-config))
(inputs
(list pixman))
(home-page "https://hyprland.org/")
(synopsis "Small C++ library for utilities used across the Hypr* ecosystem")
(description
"Small C++ library for utilities used across the Hypr* ecosystem.")
(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 (string-append "https://github.com/hyprwm/" name))
(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 aquamarine
(package
(name "aquamarine")
(version "0.4.1")
(source (origin
(method git-fetch)
(uri (git-reference
(url (string-append "https://github.com/hyprwm/" name))
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"19yrwaiyh4za8d3xixjkqdif1l4r71q7rzqa05by5zc3za3vzlzw"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f ;; no test
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fixcmake
(lambda* (#:key inputs native-inputs #:allow-other-keys)
(substitute* "CMakeLists.txt"
(("\"GLES2\"") "GLES2 EGL")
(("OpenGL::OpenGL") "OpenGL::GL")))))
#:cmake ,cmake-3.30))
(native-inputs (list gcc-14 pkg-config))
(inputs
(list hyprwayland-scanner
hyprutils
pciutils
mesa
wayland
wayland-protocols-for-hyprland
libinput-for-hyprland
libseat
libdisplay-info
libdrm
libffi
pixman
eudev
xorg-server-xwayland
hwdata))
(home-page "https://hyprland.org/")
(synopsis "Very light linux rendering backend library")
(description
"Aquamarine is a very light linux rendering backend library. It provides
basic abstractions for an application to render on a Wayland session (in a window)
or a native DRM session. It is agnostic of the rendering API (Vulkan/OpenGL)
and designed to be lightweight, performant, and minimal.")
(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 (string-append "https://github.com/hyprwm/" name))
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1xc2xcxpq61lg964ihk0wbfzqqvibw20iz09g0p33ym51gwlpxr4"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f)) ;No tests.
(native-inputs (list gcc-14 pkg-config))
(inputs
(list pugixml))
(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 hyprlang
(package
(name "hyprlang")
(version "0.5.2")
(source (origin
(method git-fetch)
(uri (git-reference
(url (string-append "https://github.com/hyprwm/" name))
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"17i0372yv0fcwnyki36crz7afw8c5f3j985m083p7rjbh4fn3br6"))))
(build-system cmake-build-system)
(native-inputs (list gcc-14 pkg-config))
(inputs
(list hyprutils))
(home-page "https://hyprland.org/")
(synopsis "The hypr configuration language")
(description
"The hypr configuration language is an extremely efficient, yet easy to work
with, configuration language for linux applications.")
(license license:bsd-3)))
(define-public hyprcursor
(package
(name "hyprcursor")
(version "0.1.9")
(source (origin
(method git-fetch)
(uri (git-reference
(url (string-append "https://github.com/hyprwm/" name))
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0z3ar580n630145nq80qw0p8v0kai6knvhi6nr9z0y1jrb07b0ql"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f)) ;; broken test
(native-inputs (list gcc-14 pkg-config))
(inputs
(list hyprlang
libzip
cairo
librsvg
tomlplusplus))
(home-page "https://hyprland.org/")
(synopsis "The hypr configuration language")
(description
"The hypr configuration language is an extremely efficient, yet easy to work
with, configuration language for linux applications.")
(license license:bsd-3)))
(define-public xdg-desktop-portal-hyprland
(package
(name "xdg-desktop-portal-hyprland")
(version "1.3.3")
(source (origin
(method git-fetch)
(uri (git-reference
(url (string-append "https://github.com/hyprwm/" name))
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"14n4a8b91ili0kp2kjqlw3h57bsxkrjwg5bhlw2h3q93zaxv2b3k"))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags
'("-DSYSTEMD_SERVICES=false")
#:phases
(modify-phases %standard-phases
(add-after 'install 'wrap-stuff
(lambda* (#:key inputs outputs #:allow-other-keys)
(wrap-program (string-append
(assoc-ref outputs "out") "/bin/hyprland-share-picker")
`("PATH" ":" prefix
(,(string-append (assoc-ref inputs "slurp") "/bin"))))
(wrap-program (string-append
(assoc-ref outputs "out") "/libexec/xdg-desktop-portal-hyprland")
`("PATH" ":" prefix
(,(string-append (assoc-ref inputs "hyprpicker") "/bin")
,(string-append (assoc-ref inputs "hyprland") "/bin")))))))
#:tests? #f)) ;; no test
(native-inputs (list gcc-14 pkg-config))
(inputs
(list bash-minimal ;; for wrap
hyprland-protocols
hyprwayland-scanner
hyprlang
hyprpicker
hyprland
libdrm
mesa
qtbase
qtwayland
sdbus-c++
slurp
pipehypr
wayland
wayland-protocols-for-hyprland))
(home-page "https://hyprland.org")
(synopsis "XDG Desktop Portal backend for Hyprland")
(description
"An XDG Desktop Portal backend for Hyprland.")
(license license:bsd-3)))
(define-public hyprland
(package
(name "hyprland")
(version "0.43.0")
(source (origin
(method git-fetch)
(uri (git-reference
(url (string-append "https://github.com/hyprwm/" name))
(commit (string-append "v" version))
(recursive? #t)))
(file-name (git-file-name name version))
(sha256
(base32
"18bdh3p37fb8pz4yywfv1br8n5wqsj8pa3507x8gh3b8xgp3s0gv"))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-DNO_SYSTEMD=true" "-DLEGACY_RENDERER=false")
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fixhardcodedusr
(lambda* (#:key outputs #:allow-other-keys)
(substitute* "src/render/OpenGL.cpp"
(("/usr")
(assoc-ref outputs "out")))))
(add-after 'install 'wrap-hyprland
(lambda* (#:key inputs outputs #:allow-other-keys)
(wrap-program (string-append (assoc-ref outputs "out") "/bin/Hyprland")
`("PATH" ":" prefix
(,(string-append (assoc-ref inputs "coreutils") "/bin")
,(string-append (assoc-ref inputs "xorg-server-xwayland") "/bin")
,(string-append (assoc-ref inputs "pciutils") "/bin")
,(string-append (assoc-ref inputs "pkgconf") "/bin")))))))
#:cmake ,cmake-3.30
#:tests? #f)) ;; no tests
(native-inputs (list gcc-14 ninja pkg-config jq hyprwayland-scanner python))
(inputs
(list aquamarine
bash-minimal ;; for wrap
pkgconf
cairo
git
hyprcursor
hyprlang
hyprutils
libdrm
libinput-for-hyprland
libxkbcommon
mesa
pango
pciutils
tomlplusplus
wayland
wayland-protocols-for-hyprland
libxcursor
libseat
libdisplay-info
hwdata
libliftoff-for-hyprland
xorg-server-xwayland
xcb-util
;; xwayland support
libxcb
libxdmcp
xcb-util-errors
xcb-util-renderutil
xcb-util-wm
xcb-util-cursor
xcb-util-image
xcb-util-keysyms
xcb-proto))
(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 hyprlock
(package
(name "hyprlock")
(version "0.4.1")
(source (origin
(method git-fetch)
(uri (git-reference
(url (string-append "https://github.com/hyprwm/" name))
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1zzv7w7hn8k71w75a9mz548cbl4f8zcsd8i92abgnrx5x9i35q63"))))
(build-system cmake-build-system)
(arguments
`(#:cmake ,cmake-3.30
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fixcmake
(lambda* (#:key inputs native-inputs #:allow-other-keys)
(substitute* "CMakeLists.txt"
((" opengl") "") ;; listed under pkgconfig, which won't find it
(("OpenGL REQUIRED") "OpenGL REQUIRED COMPONENTS GLES2 EGL")))))
#:tests? #f)) ;; no test
(native-inputs (list gcc-14 pkg-config))
(inputs
(list libxkbcommon
mesa
libwebp
(specification->package "libjpeg-turbo")
linux-pam
wayland
wayland-protocols-for-hyprland
cairo
libdrm
hyprlang
hyprutils
pango
file))
(home-page "https://hyprland.org/")
(synopsis "Hyprland's screen locking utility")
(description
"Hyprland's simple, yet multi-threaded and GPU-accelerated screen locking utility.")
(license license:bsd-3)))
(define-public hypridle
(package
(name "hypridle")
(version "0.1.2")
(source (origin
(method git-fetch)
(uri (git-reference
(url (string-append "https://github.com/hyprwm/" name))
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"10l0yxy1avryjj54gimw2blhl7348dypyhh43b73a8ncjicpjnzc"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f)) ;; no test
(native-inputs (list gcc-14 pkg-config))
(inputs
(list wayland
wayland-protocols-for-hyprland
sdbus-c++
hyprlang))
(home-page "https://hyprland.org/")
(synopsis "Hyprland's idle daemon")
(description
"Hyprland's idle daemon.")
(license license:bsd-3)))
(define-public hyprpaper
(package
(name "hyprpaper")
(version "0.7.1")
(source (origin
(method git-fetch)
(uri (git-reference
(url (string-append "https://github.com/hyprwm/" name))
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"10yb2853fd0ljxijwkqm146bnirzpghfc5kw080ws24hjmfbp0hw"))))
(build-system cmake-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fixcmake
(lambda* (#:key inputs native-inputs #:allow-other-keys)
(substitute* "CMakeLists.txt"
(("PkgConfig REQUIRED")
(string-append "PkgConfig REQUIRED)\n"
"find_package(OpenGL REQUIRED COMPONENTS \"GLES2\""))
((" OpenGL") "OpenGL::GL")
((" GLESv2") "OpenGL::GLES2")))))
#:tests? #f
#:cmake ,cmake-3.30)) ;; no test
(native-inputs (list gcc-14 pkg-config))
(inputs
(list libwebp
mesa
(specification->package "libjpeg-turbo")
wayland
wayland-protocols-for-hyprland
cairo
hyprlang
hyprutils
pango
file
hyprwayland-scanner))
(home-page "https://hyprland.org/")
(synopsis "Wallpaper utility for Hyprland")
(description
"Hyprpaper is a blazing fast wallpaper utility for Hyprland with the ability
to dynamically change wallpapers through sockets. It will work on all wlroots-based
compositors, though.")
(license license:bsd-3)))
(define-public hyprpicker
(package
(name "hyprpicker")
(version "0.3.0")
(source (origin
(method git-fetch)
(uri (git-reference
(url (string-append "https://github.com/hyprwm/" name))
;;(commit (string-append "v" version))))
(commit "38fe668e58014c75cf28f7cb5fc136aa710e7039")))
;; TODO: replace once new tag is set
(file-name (git-file-name name version))
(sha256
(base32
"1km5cxmzvgzykkrcnqzmcd1268hcywmsls1w531hjn4v5si771pk"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f
#:configure-flags (list (string-append "-DCMAKE_INSTALL_MANDIR="
(assoc-ref %outputs "out") "/share/man"))
#:cmake ,cmake-3.30))
(native-inputs (list gcc-14 pkg-config))
(inputs
(list libxkbcommon
mesa
hyprutils
(specification->package "libjpeg-turbo")
wayland
wayland-protocols-for-hyprland
cairo
pango
hyprwayland-scanner))
(home-page "https://hyprland.org/")
(synopsis "Wlroots-compatible Wayland color picker that does not suck")
(description
"A wlroots-compatible Wayland color picker that does not suck.")
(license license:bsd-3)))
(define-public hyprland-meta
(package
(name "hyprland-meta")
(version (package-version hyprland))
(source #f)
(build-system trivial-build-system)
(arguments
(list #:builder
#~(begin
(mkdir #$output))))
(propagated-inputs
(list aquamarine
hyprcursor
hypridle
hyprland
hyprlock
hyprpaper
hyprpicker
qtwayland
xdg-desktop-portal-hyprland))
(home-page "https://hyprland.org")
(synopsis "The complete Hyprland experience")
(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)))
[-- Attachment #3: hyprland.scm --]
[-- Type: application/octet-stream, Size: 2436 bytes --]
(define-module (hyprland services hyprland)
#:use-module (hyprland packages hyprland)
#:use-module (gnu services)
#:use-module (gnu services shepherd)
#:use-module (gnu services base)
#:use-module (gnu services configuration)
#:use-module (gnu services dbus)
#:use-module (gnu system pam)
#:use-module (guix records)
#:use-module (guix packages)
#:use-module (guix store)
#:use-module (guix ui)
#:use-module (guix utils)
#:use-module (guix gexp)
#:use-module (guix modules)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (ice-9 format)
#:use-module (ice-9 match)
#:export ( hyprland-desktop-configuration
hyprland-desktop-configuration?
hyprland-desktop-service-type))
;;;
;;; Helpers.
;;;
(define (bool value)
(if value "true\n" "false\n"))
(define (package-direct-input-selector tree)
"Return a procedure that selects TREE from the inputs of PACKAGE. If TREE
is a list, it recursively searches it until it locates the last item of TREE."
(lambda (package)
(let loop ((tree (if (pair? tree)
tree
(list tree)))
(package package))
(if (null? tree)
package
(loop (cdr tree)
(car (assoc-ref (package-direct-inputs package)
(car tree))))))))
(define-record-type* <hyprland-desktop-configuration> hyprland-desktop-configuration
make-hyprland-desktop-configuration
hyprland-desktop-configuration?
(hyprland-package hyprland-package (default hyprland-meta)))
(define (hyprland-pam-services config)
(list (unix-pam-service "hyprlock")))
(define (hyprland-dbus-service config)
(let ((hyprland-hyprland (hyprland-package config)))
(map (lambda (name)
((package-direct-input-selector name) hyprland-hyprland))
'("hyprland"))))
(define hyprland-desktop-service-type
(service-type
(name 'hyprland-desktop)
(description "Run hyprland.")
(default-value (hyprland-desktop-configuration))
(extensions
(list (service-extension dbus-root-service-type
hyprland-dbus-service)
(service-extension pam-root-service-type
hyprland-pam-services)
(service-extension profile-service-type
(compose list
hyprland-package))))))
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-09-18 3:33 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-18 3:31 [bug#73328] Adding Hyprland The Man
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.