1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2025 Hilton Chain <hako@ultrarare.space>
(define-module (nonguix transformations)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (guix channels)
#:use-module (guix diagnostics)
#:use-module (guix gexp)
#:use-module (guix i18n)
#:use-module (guix packages)
#:use-module (gnu system)
#:use-module (nongnu system linux-initrd)
#:use-module (gnu services)
#:use-module (gnu services base)
#:use-module (nongnu services nvidia)
#:use-module (gnu packages package-management)
#:use-module (nongnu packages linux)
#:use-module (nongnu packages nvidia)
#:export (nonguix-transformation-guix
nonguix-transformation-linux
nonguix-transformation-nvidia)
#:re-export (replace-mesa))
(define* (nonguix-transformation-guix #:key (substitutes? #t)
(channel? #t)
(guix-source? #f))
"Return a procedure that transforms an operating system, setting up Nonguix
signing key for the Guix daemon.
Additionally, SUBSTITUTES? (default: #t) sets up the substitute server,
CHANNEL? (default: #t) adds Nonguix channel specification into
'/etc/guix/channels.scm' and GUIX-SOURCE? (default: #f) builds Nonguix channel
into the default Guix.
FIXME: GUIX-SOURCE? is disabled by default due to performance issue."
(define %nonguix-signing-key
(plain-file "nonguix.pub" "
(public-key
(ecc
(curve Ed25519)
(q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)))"))
(define %nonguix-channel
(channel
(name 'nonguix)
(url "https://gitlab.com/nonguix/nonguix")
;; Enable signature verification:
(introduction
(make-channel-introduction
"897c1a470da759236cc11798f4e0a5f7d4d59fbc"
(openpgp-fingerprint
"2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5")))))
(lambda (os)
(operating-system
(inherit os)
(services
(modify-services (operating-system-user-services os)
(guix-service-type
config => (guix-configuration
(inherit config)
(channels
(let ((configured-channels
(guix-configuration-channels config)))
(if channel?
(cons %nonguix-channel
(or configured-channels %default-channels))
configured-channels)))
(guix
(if guix-source?
(guix-for-channels channels)
(guix-configuration-guix config)))
(authorized-keys
(cons %nonguix-signing-key
(guix-configuration-authorized-keys config)))
(substitute-urls
(delete-duplicates
`(,@(guix-configuration-substitute-urls config)
,@(if substitutes?
'("https://substitutes.nonguix.org")
'())))))))))))
(define* (nonguix-transformation-linux #:key (linux linux)
(firmware (list linux-firmware))
(initrd microcode-initrd))
"Return a procedure that transforms an operating system, setting up
LINUX (default: linux) kernel, with FIRMWARE (default: (list linux-firmware))
and INITRD (default: microcode-initrd)."
(lambda (os)
(operating-system
(inherit os)
(kernel linux)
(firmware firmware)
(initrd initrd))))
(define* (nonguix-transformation-nvidia #:key (driver nvda)
(kernel-mode-setting? #t)
(open-source-kernel-module? #f))
"Return a procedure that transforms an operating system, setting up
DRIVER (default: nvda) for NVIDIA graphics card.
KERNEL-MODE-SETTING? (default: #t) is required for Wayland and rootless Xorg
support.
OPEN-SOURCE-KERNEL-MODULE? (default: #f) only supports Turing and later
architectures and is expected to work with 'linux-lts'.
For application setup, use 'replace-mesa'.
TODO: Xorg configuration."
(define %presets
`((,nvda . ,(service nvidia-service-type
(nvidia-configuration
(driver nvda)
(firmware nvidia-firmware)
(module
(if open-source-kernel-module?
nvidia-module-open
nvidia-module)))))
(,nvdb . ,(service nvidia-service-type
(nvidia-configuration
(driver nvdb)
(firmware nvidia-firmware-beta)
(module
(if open-source-kernel-module?
nvidia-module-open-beta
nvidia-module-beta)))))))
(lambda (os)
(operating-system
(inherit os)
(kernel-arguments
(delete-duplicates
(cons* "modprobe.blacklist=nouveau"
(string-append
"nvidia_drm.modeset=" (if kernel-mode-setting? "1" "0"))
(remove
(cut string-prefix? "nvidia_drm.modeset=" <>)
(operating-system-user-kernel-arguments os)))))
(services
`(,(or (assoc-ref %presets driver)
(leave
(G_ "no NVIDIA service configuration available for '~a'~%")
(package-name driver)))
,@(operating-system-user-services os))))))
|