Re: GNU G-Golf 0.8.0-rc6 available for testing

"pelzflorian (Florian Pelz)" <[email protected]>
Newsgroups gmane.lisp.guile.user
Message-ID <[email protected]>
David Pirotte <[email protected]> writes:
> Excellent! Note that you'll need to update your configuration and
> use/grab 0.8.0-rc7 - which fixes a 'missing some distributed files',
> necessary to be able to run the newly added
>
> 	examples/gtk-4/layout-manager.scm
> 	[ a g-golf port of the upstream gtk4-demo layout manager
> 	[ (transition) example

I see, but since Guix builds G-Golf from git rather than a tarball,
examples/gtk-4/layout-manager.scm had worked already with rc6.

Tarballs contain bundled M4 files and other build-aux files.  Guix
rather uses its own packaged version of these, avoiding something like
the xz vulnerability’s code injection.  Still it is good that you fixed
the tarball.


>>  Now I can embed GTK programs within the Guix Home
>> configurations ...
>
> I am glad that you (finally) can happily use the distro of your dream.
> Your config example certainly should help other guixers willing to use
> g-golf.

:)


>> All that is left is that I do not understand why
>> (gdk-display-get-default) returns #f in G-Golf but
>> gdk_display_get_default () in C returns 0x1c0e36c0.
>
> You need to have initialized either Gtk or Adw, otherwise it returns #f
> (as expected).
>
> 	scheme@(guile-user)> ,use (g-golf)
> 	scheme@(guile-user)> (gi-import-by-name "Gdk" "Display")
> 	$5 = #<<gobject-class> <gdk-display> 7fee0e488c30>
>
> 	scheme@(guile-user)> (gdk-display-get-default)
> 	$6 = #f
>
> 	scheme@(guile-user)> (gi-import-by-name "Gtk" "init")
> 	$7 = #<<function> 7fee075cb480>
> 	scheme@(guile-user)> (gtk-init)
>
> 	scheme@(guile-user)> (gdk-display-get-default)
> 	$8 = #<<gdk-wayland-display> 7fee0f054a10>
>
> David

This helped.  When manually run, missing gtk-init import and use was the
issue; thank you!  Funny enough, when auto-started, gtk-init is run by
GtkApplication or perhaps by some library constructor, but I also had
forgotten to actually call add-css-class.  Still I added gtk-init, so I
can manually run my launcher as well.

In case others use it as reference, the fixed version is attached.

Regards,
Florian
home-configuration.scm (text/plain, 10 KB)
;;; Copyright © 2023, 2024 Florian Pelz <[email protected]>
;;
;; This program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; 
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.
;; 
;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
;; 
;; Dieses Programm ist Freie Software: Sie können es unter den Bedingungen
;; der GNU General Public License, wie von der Free Software Foundation,
;; Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren
;; veröffentlichten Version, weiter verteilen und/oder modifizieren.
;; 
;; Dieses Programm wird in der Hoffnung bereitgestellt, dass es nützlich sein wird, jedoch
;; OHNE JEDE GEWÄHR,; sogar ohne die implizite
;; Gewähr der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
;; Siehe die GNU General Public License für weitere Einzelheiten.
;; 
;; Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
;; Programm erhalten haben. Wenn nicht, siehe <https://www.gnu.org/licenses/>.

(use-modules (gnu home)
             (gnu home services)
             (gnu home services desktop)
             (gnu home services shells)
             (gnu home services sound)
             (gnu home services sway)
             (gnu packages)
             (gnu packages gtk)
             (gnu packages guile-xyz)
             (gnu services)
             (guix build-system glib-or-gtk)
             (guix gexp)
             (guix licenses)
             (guix packages)
             (guix transformations))

(home-environment
  (packages (specifications->packages (list "git")))
  (services
   (list (service home-bash-service-type)
         (service home-dbus-service-type) ;für VLC
         ;; (service home-pipewire-service-type)
         (service home-sway-service-type
           (sway-configuration
            (execs
             `(,(with-extensions
                 (list graphene gtk
                       ((options->transformation
                         '((with-commit . "guile-g-golf=v0.8.0-rc6")))
                        guile-g-golf))
                 #~(string-append
                    "guile "
                    #$(scheme-file "launcher.scm"
                       #~(begin
                           (eval-when (expand load eval)
                             (use-modules (oop goops))
                             (default-duplicate-binding-handler
                               '(merge-generics replace
                                 warn-override-core warn last))
                             (setenv "GI_TYPELIB_PATH"
                                     #$(file-append
                                        (directory-union
                                         "typelibs"
                                         (list gdk-pixbuf
                                               graphene gtk harfbuzz
                                               pango))
                                        "/lib/girepository-1.0"))
                             (use-modules (g-golf))
                             (g-irepository-require
                              "Gtk" #:version "4.0")
                             (for-each (lambda (name)
                                         (gi-import-by-name "Gtk" name))
                                       '("Application"
                                         "ApplicationWindow"
                                         "Builder"
                                         "CssProvider"
                                         "init")))
                           (use-modules (sxml simple))
                           (gtk-init)
                           (define ui
                             '(interface
                               (requires (@ (version 4.0) (lib gtk)))
                               (object
                                (@ (id window) (class GtkApplicationWindow))
                                (child
                                 (object
                                  (@ (class GtkGrid))
                                  (property (@ (name row-homogeneous)) 1)
                                  (property (@ (name column-homogeneous)) 1)
                                  (child
                                   (object
                                    (@ (id btn-kodi) (class GtkButton))
                                    (property (@ (name label)) Kodi)
                                    (layout
                                     (property (@ (name column)) 0)
                                     (property (@ (name row)) 0))))
                                  (child
                                   (object
                                    (@ (id btn-halt) (class GtkButton))
                                    (property (@ (name label)) Halt)
                                    (layout
                                     (property (@ (name column)) 0)
                                     (property (@ (name row)) 1))))
                                  (child
                                   (object
                                    (@ (id btn-reboot) (class GtkButton))
                                    (property (@ (name label)) Reboot)
                                    (layout
                                     (property (@ (name column)) 1)
                                     (property (@ (name row)) 1))))
                                  (child
                                   (object
                                    (@ (id btn-mount) (class GtkButton))
                                    (property (@ (name label)) Mounten)
                                    (layout
                                     (property (@ (name column)) 1)
                                     (property (@ (name row)) 0)))))))))
                           (define provider
                             (make <gtk-css-provider>))
                           (define (mount-all)
                             (gtk-css-provider-load-from-string provider "\
.reddable label {
  background-color: red;
}
")
                             (unless (= 0 (system "\
sudo /run/privileged/bin/mount \
/dev/disk/by-id/usb-WD_Elements_25A3_574343374B31544434313530-0:0-part1 \
/media/WDElements/"))
                               (gtk-style-context-add-provider-for-display
                                (gdk-display-get-default)
                                provider
                                100)))
                           (define (activate app)
                             (let ((builder (make <gtk-builder>)))
                               (define (get str)
                                 (get-object builder str))
                               (add-from-string builder
                                                (with-output-to-string
                                                  (lambda ()
                                                    (sxml->xml ui)))
                                                -1)
                               (let ((window (get "window"))
                                     (btn-kodi (get "btn-kodi"))
                                     (btn-mount (get "btn-mount"))
                                     (btn-halt (get "btn-halt"))
                                     (btn-reboot (get "btn-reboot")))
                                 (connect btn-kodi 'clicked
                                          (lambda (b)
                                            (gtk-widget-hide window)
                                            (system
                                             (string-append "\
/var/guix/profiles/per-user/florian/current-guix/bin/guix \
shell --container --network --no-cwd flatpak \
--expose=/home/user/.local/share/flatpak/ \
--share=/home/user/you-kodi/.kodi=/home/user/.var/app/tv.kodi.Kodi/data \
--expose=/sys \
--preserve='^DBUS_.*' \
--share=/media/WDElements \
--expose=/dev/dri --expose=" "/run/user/1001";(getenv "XDG_RUNTIME_DIR")
"/bus=/var/run/dbus/system_bus_socket --expose=/dev/dri --expose=/dev/snd \
--preserve='^DISPLAY$' -- flatpak run -v tv.kodi.Kodi --audio-backend=alsa"))
                                            (present window)))
                                 (connect btn-mount 'clicked
                                          (lambda (b)
                                            (mount-all)))
                                 (add-css-class btn-mount "reddable")
                                 (connect btn-halt 'clicked
                                          (lambda (b)
                                            (system "\
sudo /run/current-system/profile/sbin/halt")))
                                 (connect btn-reboot 'clicked
                                          (lambda (b)
                                            (system "\
sudo /run/current-system/profile/sbin/reboot")))
                                 (add-window app window)
                                 (present window))))
                           (let ((app (make <gtk-application>
                                        #:application-id "my.launcher")))
                             (mount-all)
                             (connect app 'activate activate)
                             (let ((status (g-application-run app '())))
                               (exit status status)))))
                    " 2>&1 | tee /home/user/errors"))))))
         (simple-service 'gtk-config-service
                         home-xdg-configuration-files-service-type
                         `(("gtk-4.0/settings.ini" ,(mixed-text-file
                                                     "gtk-config"
                                                     "\
[Settings]
gtk-xft-dpi=500000
")))))))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.