nongnu: images: Add quartz64a-desktop-raw-image.
* nongnu/system/images/quartz64a-desktop.scm (quartz64a-desktop-raw-image): New variable.
This commit is contained in:
parent
a9d7d17f10
commit
6c9c45c97c
291
nongnu/system/images/quartz64a-desktop.scm
Normal file
291
nongnu/system/images/quartz64a-desktop.scm
Normal file
|
@ -0,0 +1,291 @@
|
||||||
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
|
;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
|
||||||
|
;;;
|
||||||
|
;;; This file is part of GNU Guix.
|
||||||
|
;;;
|
||||||
|
;;; GNU Guix 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.
|
||||||
|
;;;
|
||||||
|
;;; GNU Guix 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 GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
(define-module (nongnu system images quartz64a-desktop)
|
||||||
|
#:use-module (gnu bootloader)
|
||||||
|
#:use-module (gnu bootloader u-boot)
|
||||||
|
#:use-module (gnu image)
|
||||||
|
#:use-module (nongnu packages linux)
|
||||||
|
#:use-module (nongnu packages bootloaders)
|
||||||
|
#:use-module (gnu packages)
|
||||||
|
#:use-module (gnu packages glib)
|
||||||
|
#:use-module (gnu packages compression)
|
||||||
|
#:use-module (gnu packages certs)
|
||||||
|
#:use-module (gnu packages gnome)
|
||||||
|
#:use-module (gnu packages vim)
|
||||||
|
#:use-module (gnu packages ssh)
|
||||||
|
#:use-module (gnu packages bison)
|
||||||
|
#:use-module (gnu packages libffi)
|
||||||
|
#:use-module (gnu packages xorg)
|
||||||
|
#:use-module (gnu packages flex)
|
||||||
|
#:use-module (gnu packages pkg-config)
|
||||||
|
#:use-module (gnu packages python)
|
||||||
|
#:use-module (guix platforms arm)
|
||||||
|
#:use-module (guix download)
|
||||||
|
#:use-module (guix packages)
|
||||||
|
#:use-module (guix gexp)
|
||||||
|
#:use-module (guix utils)
|
||||||
|
#:use-module (guix build utils)
|
||||||
|
#:use-module ((guix licenses) #:prefix license:)
|
||||||
|
#:use-module (guix build emacs-build-system)
|
||||||
|
#:use-module (guix build-system gnu)
|
||||||
|
#:use-module (guix build-system meson)
|
||||||
|
#:use-module (gnu services)
|
||||||
|
#:use-module (gnu services desktop)
|
||||||
|
#:use-module (gnu services sddm)
|
||||||
|
#:use-module (gnu services ssh)
|
||||||
|
#:use-module (gnu services xorg)
|
||||||
|
#:use-module (gnu services base)
|
||||||
|
#:use-module (gnu system)
|
||||||
|
#:use-module (gnu system accounts)
|
||||||
|
#:use-module (gnu system file-systems)
|
||||||
|
#:use-module (gnu system image)
|
||||||
|
#:use-module (gnu system keyboard)
|
||||||
|
#:use-module (gnu system nss)
|
||||||
|
#:use-module (gnu system shadow)
|
||||||
|
#:use-module (srfi srfi-26)
|
||||||
|
#:use-module (srfi srfi-1) ;for the remove function
|
||||||
|
#:export (quartz64-a-raw-image
|
||||||
|
quartz64-image-type
|
||||||
|
quartz64-desktop-raw-image))
|
||||||
|
|
||||||
|
(define (python-extension-suffix python triplet)
|
||||||
|
"Determine the suffix for C extensions for PYTHON when compiled
|
||||||
|
for TRIPLET."
|
||||||
|
;; python uses strings like 'x86_64-linux-gnu' instead of
|
||||||
|
;; 'x86_64-unknown-linux-gnu'.
|
||||||
|
(define normalised-system
|
||||||
|
(string-replace-substring triplet "-unknown-" "-"))
|
||||||
|
(define major.minor (version-major+minor (package-version python)))
|
||||||
|
(define majorminor (string-delete #\. major.minor))
|
||||||
|
(string-append
|
||||||
|
;; If guix' python package used "--with-pydebug", a #\d would
|
||||||
|
;; need to be added, likewise "--with-pymalloc" and "--with-wide-unicode"
|
||||||
|
;; would require a #\m and #\u, see cpython's configure.ac.
|
||||||
|
".cpython-" majorminor "-" normalised-system
|
||||||
|
(if (target-mingw? triplet)
|
||||||
|
".dll"
|
||||||
|
".so")))
|
||||||
|
|
||||||
|
(define (correct-library-name-phase python name)
|
||||||
|
"Return a G-exp evaluating to a phase renaming the python extension NAME
|
||||||
|
from what Meson thinks its name should be to what python expects its name
|
||||||
|
to be. NAME must not include the platform-specific suffix. This can only
|
||||||
|
be used when cross-compiling."
|
||||||
|
#~(lambda _
|
||||||
|
(define name #$name)
|
||||||
|
(define native-suffix
|
||||||
|
#$(python-extension-suffix python
|
||||||
|
(nix-system->gnu-triplet (%current-system))))
|
||||||
|
(define target-suffix
|
||||||
|
#$(python-extension-suffix python (%current-target-system)))
|
||||||
|
(define native-name
|
||||||
|
(string-append name native-suffix))
|
||||||
|
(define target-name
|
||||||
|
(string-append name target-suffix))
|
||||||
|
(rename-file native-name target-name)))
|
||||||
|
|
||||||
|
(define gobject-introspection
|
||||||
|
(package
|
||||||
|
(name "gobject-introspection")
|
||||||
|
(version "1.66.1")
|
||||||
|
(source (origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append "mirror://gnome/sources/"
|
||||||
|
"gobject-introspection/" (version-major+minor version)
|
||||||
|
"/gobject-introspection-" version ".tar.xz"))
|
||||||
|
(sha256
|
||||||
|
(base32 "078n0q7b6z682mf4irclrksm73cyixq295mqnqifl9plwmgaai6x"))
|
||||||
|
(patches (search-patches
|
||||||
|
"gobject-introspection-cc.patch"
|
||||||
|
"gobject-introspection-girepository.patch"
|
||||||
|
"gobject-introspection-absolute-shlib-path.patch"))))
|
||||||
|
(build-system meson-build-system)
|
||||||
|
(arguments
|
||||||
|
`(,@(if (%current-target-system)
|
||||||
|
`(#:configure-flags
|
||||||
|
'("-Dgi_cross_use_prebuilt_gi=true"
|
||||||
|
;; Building introspection data requires running binaries
|
||||||
|
;; for ‘host’ on ‘build’, so don't do that.
|
||||||
|
;;
|
||||||
|
;; TODO: it would be nice to have introspection data anyways
|
||||||
|
;; as discussed here: https://issues.guix.gnu.org/50201#60.
|
||||||
|
"-Dbuild_introspection_data=false"))
|
||||||
|
'())
|
||||||
|
#:phases
|
||||||
|
,#~
|
||||||
|
(modify-phases %standard-phases
|
||||||
|
#$@(if (%current-target-system)
|
||||||
|
;; 'typelibs' is undefined.
|
||||||
|
`((add-after 'unpack 'set-typelibs
|
||||||
|
(lambda _
|
||||||
|
(substitute* "meson.build"
|
||||||
|
; (("python3") "python")
|
||||||
|
(("\\bsources: typelibs\\b")
|
||||||
|
"sources: []")))))
|
||||||
|
'())
|
||||||
|
(add-after 'unpack 'do-not-use-/usr/bin/env
|
||||||
|
(lambda _
|
||||||
|
(substitute* "tools/g-ir-tool-template.in"
|
||||||
|
(("#!@PYTHON_CMD@")
|
||||||
|
(string-append "#!" #$(this-package-input "python")
|
||||||
|
"/bin/python3")))))
|
||||||
|
#$@(if (%current-target-system)
|
||||||
|
;; Meson gives python extensions an incorrect name, see
|
||||||
|
;; <https://github.com/mesonbuild/meson/issues/7049>.
|
||||||
|
#~((add-after 'install 'rename-library
|
||||||
|
#$(correct-library-name-phase
|
||||||
|
(this-package-input "python")
|
||||||
|
#~(string-append #$output
|
||||||
|
"/lib/gobject-introspection/giscanner"
|
||||||
|
"/_giscanner"))))
|
||||||
|
#~()))))
|
||||||
|
(native-inputs
|
||||||
|
(list `(,glib "bin")
|
||||||
|
pkg-config
|
||||||
|
bison
|
||||||
|
flex))
|
||||||
|
(inputs
|
||||||
|
(list ;,@(if (%current-target-system)
|
||||||
|
python
|
||||||
|
bison
|
||||||
|
flex
|
||||||
|
zlib))
|
||||||
|
(propagated-inputs
|
||||||
|
(list glib
|
||||||
|
;; In practice, GIR users will need libffi when using
|
||||||
|
;; gobject-introspection.
|
||||||
|
libffi))
|
||||||
|
(native-search-paths
|
||||||
|
(list
|
||||||
|
(search-path-specification
|
||||||
|
(variable "GI_TYPELIB_PATH")
|
||||||
|
(files '("lib/girepository-1.0")))))
|
||||||
|
(search-paths native-search-paths)
|
||||||
|
(synopsis "GObject introspection tools and libraries")
|
||||||
|
(description "GObject introspection is a middleware layer between
|
||||||
|
C libraries (using GObject) and language bindings. The C library can be scanned
|
||||||
|
at compile time and generate metadata files, in addition to the actual native
|
||||||
|
C library. Then language bindings can read this metadata and automatically
|
||||||
|
provide bindings to call into the C library.")
|
||||||
|
(home-page "https://wiki.gnome.org/Projects/GObjectIntrospection")
|
||||||
|
(license
|
||||||
|
(list
|
||||||
|
;; For library.
|
||||||
|
license:lgpl2.0+
|
||||||
|
;; For tools.
|
||||||
|
license:gpl2+))))
|
||||||
|
;; Fails to cross-compile - rewrite using gexp
|
||||||
|
(define-public slock
|
||||||
|
(package
|
||||||
|
(name "slock")
|
||||||
|
(version "1.4")
|
||||||
|
(source (origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append "https://dl.suckless.org/tools/slock-"
|
||||||
|
version ".tar.gz"))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"0sif752303dg33f14k6pgwq2jp1hjyhqv6x4sy3sj281qvdljf5m"))))
|
||||||
|
(build-system gnu-build-system)
|
||||||
|
(arguments
|
||||||
|
(list #:tests? #f ; no tests
|
||||||
|
#:make-flags
|
||||||
|
#~(list (string-append "CC=" #$(cc-for-target))
|
||||||
|
(string-append "PREFIX=" #$output))
|
||||||
|
#:phases #~(modify-phases %standard-phases (delete 'configure))))
|
||||||
|
(inputs
|
||||||
|
(list libx11 libxext libxinerama libxrandr))
|
||||||
|
(home-page "https://tools.suckless.org/slock/")
|
||||||
|
(synopsis "Simple X session lock")
|
||||||
|
(description
|
||||||
|
"Simple X session lock with trivial feedback on password entry.")
|
||||||
|
(license license:x11)))
|
||||||
|
|
||||||
|
(define quartz64a-desktop-os
|
||||||
|
(operating-system
|
||||||
|
(host-name "quartz64a")
|
||||||
|
(timezone "Europe/Prague")
|
||||||
|
(locale "en_US.utf8")
|
||||||
|
|
||||||
|
(bootloader (bootloader-configuration
|
||||||
|
(bootloader u-boot-quartz64a-rk3566-bootloader)
|
||||||
|
(targets '("/dev/vda"))))
|
||||||
|
(initrd-modules '())
|
||||||
|
(kernel linux-quartz64)
|
||||||
|
(file-systems (append (list
|
||||||
|
(file-system
|
||||||
|
(device (file-system-label "EFI"))
|
||||||
|
(mount-point "/boot/efi")
|
||||||
|
(type "vfat"))
|
||||||
|
(file-system
|
||||||
|
(device (file-system-label "root"))
|
||||||
|
(mount-point "/")
|
||||||
|
(type "ext4")))
|
||||||
|
%base-file-systems))
|
||||||
|
|
||||||
|
(swap-devices (list (swap-space
|
||||||
|
(target "/run/swapfile"))))
|
||||||
|
|
||||||
|
(users (cons* (user-account
|
||||||
|
(name "pine")
|
||||||
|
(group "users")
|
||||||
|
(supplementary-groups '("wheel" "netdev" "audio" "video"))
|
||||||
|
(password (crypt "quartz64" "$6$abc"))
|
||||||
|
(home-directory "/home/pine"))
|
||||||
|
%base-user-accounts))
|
||||||
|
|
||||||
|
;; Add GNOME desktop
|
||||||
|
(services
|
||||||
|
(append (list (service mate-desktop-service-type)
|
||||||
|
(service xfce-desktop-service-type)
|
||||||
|
(service openssh-service-type)
|
||||||
|
(service agetty-service-type
|
||||||
|
(agetty-configuration
|
||||||
|
(extra-options '("-L")) ; no carrier detect
|
||||||
|
(baud-rate "1500000")
|
||||||
|
(term "vt100")
|
||||||
|
(tty "ttyS2"))))
|
||||||
|
%desktop-services))
|
||||||
|
|
||||||
|
(packages (cons* nss-certs
|
||||||
|
openssh
|
||||||
|
gvfs
|
||||||
|
%base-packages))
|
||||||
|
|
||||||
|
(name-service-switch %mdns-host-lookup-nss)))
|
||||||
|
|
||||||
|
(define quartz64-image-type
|
||||||
|
(image-type
|
||||||
|
(name 'quartz-raw)
|
||||||
|
(constructor (lambda (os)
|
||||||
|
(image
|
||||||
|
(inherit
|
||||||
|
(raw-with-offset-disk-image (* 32 (expt 2 20)))) ; 32MiB
|
||||||
|
(operating-system os)
|
||||||
|
(platform aarch64-linux))))))
|
||||||
|
|
||||||
|
(define quartz64-desktop-raw-image
|
||||||
|
(image
|
||||||
|
(inherit
|
||||||
|
(os+platform->image quartz64a-desktop-os aarch64-linux
|
||||||
|
#:type quartz64-image-type))
|
||||||
|
(name 'quartz-desktop-raw-image)))
|
||||||
|
|
||||||
|
;; Return the default image.
|
||||||
|
quartz64-desktop-raw-image
|
Loading…
Reference in New Issue
Block a user