2019-05-11 19:50:06 +02:00
|
|
|
#+TITLE: Nonguix
|
|
|
|
|
|
|
|
Nonguix is a software repository for the
|
|
|
|
[[https://www.gnu.org/software/guix/][GNU Guix]] package manager,
|
|
|
|
which packages some software which cannot be included in the official
|
|
|
|
distribution for ethical or policy-related reasons.
|
|
|
|
|
|
|
|
Please do NOT promote this repository on any official Guix
|
|
|
|
communication channels, such as their mailing lists or IRC channel, even in
|
|
|
|
response to support requests! This is to show respect for the Guix project's
|
|
|
|
[[http://www.gnu.org/distros/free-system-distribution-guidelines.html][strict policy]]
|
|
|
|
against recommending nonfree software, and to avoid any unnecessary hostility.
|
|
|
|
|
2019-06-02 20:29:14 +02:00
|
|
|
Before using this channel, you should understand the implications of using
|
|
|
|
nonfree software. Read [[https://www.gnu.org/philosophy/free-sw.en.html][What is free software?]]
|
|
|
|
for more information.
|
|
|
|
|
2019-06-03 17:41:48 +02:00
|
|
|
(Check out the [[https://gitlab.com/guix-gaming-channels][Guix Gaming Channels]]
|
|
|
|
if you're interested in nonfree games too!)
|
|
|
|
|
2019-06-06 10:29:02 +02:00
|
|
|
* Warning
|
|
|
|
|
|
|
|
This channel does not endorse any non-free application.
|
|
|
|
We believe it is non-ethical, harmful to software development and
|
|
|
|
restricts the users freedom.
|
|
|
|
See the [[https://www.gnu.org/philosophy/free-sw.en.html][GNU philosophy]] for a more thorough discussion.
|
|
|
|
|
|
|
|
Those packages are provided as a last resort, should none of the official Guix
|
|
|
|
packages work for you.
|
|
|
|
|
|
|
|
You should understand the implication of using non-free software. Some of those
|
|
|
|
implications include:
|
|
|
|
|
|
|
|
- Endorsement of non-free products and the perpetration of a culture of
|
|
|
|
restriction on liberties.
|
|
|
|
|
|
|
|
- Non-free software cannot (or hardly) be audited: it can potentially spy on
|
|
|
|
you, destroy or steal your data.
|
|
|
|
|
|
|
|
As a minimal security measure, it's heavily recommended to run any non-free
|
|
|
|
software inside a container.
|
|
|
|
|
2019-05-11 19:50:06 +02:00
|
|
|
* Installation
|
|
|
|
|
|
|
|
Nonguix can be installed as a
|
|
|
|
[[https://www.gnu.org/software/guix/manual/en/html_node/Channels.html][Guix channel]].
|
|
|
|
To do so, add it to =~/.config/guix/channels.scm=:
|
|
|
|
|
|
|
|
#+BEGIN_SRC scheme
|
|
|
|
(cons* (channel
|
|
|
|
(name 'nonguix)
|
2019-05-27 23:36:21 +02:00
|
|
|
(url "https://gitlab.com/nonguix/nonguix"))
|
2019-05-11 19:50:06 +02:00
|
|
|
%default-channels)
|
|
|
|
#+END_SRC
|
2019-06-02 20:29:14 +02:00
|
|
|
|
|
|
|
* Using Nonfree Firmware and Drivers
|
|
|
|
|
|
|
|
To use Guix System with the standard Linux kernel and nonfree firmware, edit
|
|
|
|
the ~kernel~ and ~firmware~ fields of the ~operating-system~ definition in
|
|
|
|
=config.scm=:
|
|
|
|
|
|
|
|
#+BEGIN_SRC scheme
|
|
|
|
;; Import nonfree linux module.
|
2020-01-08 19:46:32 +01:00
|
|
|
(use-modules (nongnu packages linux)
|
|
|
|
(nongnu system linux-initrd))
|
2019-06-02 20:29:14 +02:00
|
|
|
|
|
|
|
(operating-system
|
|
|
|
(kernel linux)
|
2020-01-08 19:46:32 +01:00
|
|
|
(initrd microcode-initrd)
|
2019-06-02 20:29:14 +02:00
|
|
|
(firmware (list linux-firmware))
|
|
|
|
...
|
|
|
|
)
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
If you only need firmware for a specific piece of hardware, you may be able to
|
|
|
|
save disk space by using a smaller firmware package instead:
|
|
|
|
|
|
|
|
#+BEGIN_SRC scheme
|
|
|
|
(firmware (cons* iwlwifi-firmware
|
|
|
|
%base-firmware))
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
Then of course, run ~sudo guix system reconfigure /etc/config.scm~ to apply
|
|
|
|
your configuration.
|
|
|
|
|
2019-06-06 10:53:30 +02:00
|
|
|
** Installation image
|
|
|
|
|
|
|
|
For some hardware the official Guix installation image won't do
|
|
|
|
(e.g. unsupported wifi). You can generate an installation image running the
|
|
|
|
nonfree Linux kernel and nonfree firmware with the following command:
|
|
|
|
|
|
|
|
#+begin_src sh
|
|
|
|
guix system disk-image /path/to/this/channel/nongnu/system/install.scm
|
|
|
|
#+end_src
|
|
|
|
|
2020-01-08 19:46:32 +01:00
|
|
|
** CPU Microcode
|
|
|
|
|
|
|
|
CPU microcode updates are nonfree blobs that apply directly to a processor to
|
|
|
|
patch its behavior, and are therefore not included in upstream GNU Guix.
|
|
|
|
However, running the latest microcode is important to avoid nasty CPU bugs and
|
|
|
|
hardware security vulnerabilities.
|
|
|
|
|
|
|
|
To enable early loading of CPU microcode, use the ~microcode-initrd~ function
|
|
|
|
to add the microcode to the Initial RAM Disk. Most users can simply import
|
|
|
|
~(nongnu system linux-initrd)~ and add ~(initrd microcode-initrd)~ to their
|
|
|
|
~operating-system~ definition, as illustrated above.
|
|
|
|
|
|
|
|
If you need to customize the ~initrd~ for some reason, you should first
|
|
|
|
understand the upstream documentation on
|
|
|
|
[[https://guix.gnu.org/manual/en/html_node/Initial-RAM-Disk.html][Initial RAM Disks]].
|
|
|
|
~microcode-initrd~ simply wraps another ~initrd~ function, which you can swap
|
|
|
|
out for your own. For example, this:
|
|
|
|
|
|
|
|
#+BEGIN_SRC scheme
|
|
|
|
(initrd microcode-initrd)
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
is exactly equivalent to:
|
|
|
|
|
|
|
|
#+BEGIN_SRC scheme
|
|
|
|
(initrd (lambda (file-systems . rest)
|
|
|
|
(apply microcode-initrd file-systems
|
|
|
|
#:initrd base-initrd
|
|
|
|
#:microcode-packages (list amd-microcode
|
|
|
|
intel-microcode)
|
|
|
|
rest)))
|
|
|
|
#+END_SRC
|
|
|
|
|
2019-06-02 20:29:14 +02:00
|
|
|
** Broadcom Wireless
|
|
|
|
|
|
|
|
Some Broadcom wireless hardware requires a proprietary kernel module in
|
|
|
|
addition to firmware. To use such hardware you will also need to add a service
|
|
|
|
to load that module on boot, and blacklist conflicting kernel modules:
|
|
|
|
|
|
|
|
#+BEGIN_SRC scheme
|
2020-03-22 21:12:56 +01:00
|
|
|
(use-modules (nongnu packages linux))
|
2019-06-02 20:29:14 +02:00
|
|
|
|
|
|
|
(operating-system
|
|
|
|
(kernel linux)
|
|
|
|
;; Blacklist conflicting kernel modules.
|
|
|
|
(kernel-arguments '("modprobe.blacklist=b43,b43legacy,ssb,bcm43xx,brcm80211,brcmfmac,brcmsmac,bcma"))
|
2020-03-22 21:12:56 +01:00
|
|
|
(kernel-loadable-modules (list broadcom-sta))
|
2019-06-02 20:29:14 +02:00
|
|
|
(firmware (cons* broadcom-bt-firmware
|
|
|
|
%base-firmware))
|
2020-03-22 21:12:56 +01:00
|
|
|
...)
|
2019-06-02 20:29:14 +02:00
|
|
|
#+END_SRC
|
|
|
|
|
2020-03-25 09:59:03 +01:00
|
|
|
** Avoiding kernel recompilation
|
|
|
|
|
|
|
|
Since prebuilt substitutes are not currently available for Nonguix, you may find
|
|
|
|
that ~guix system reconfigure~ recompiles the kernel frequently due to version
|
|
|
|
bumps in the kernel package. An inferior can be used to pin the kernel version
|
|
|
|
and avoid lengthy rebuilds.
|
|
|
|
|
|
|
|
You must pin both Guix and Nonguix, as the Nonguix kernel packages derive from
|
|
|
|
those in Guix (so changes in either could cause a rebuild). Your preferred kernel
|
|
|
|
version must be available in both pinned channels.
|
|
|
|
|
|
|
|
Consult the output of ~guix system describe~ to get the commits of Guix and
|
|
|
|
Nonguix for the current generation. Once you have determined the commits to use,
|
|
|
|
create an inferior in your system configuration file that pins the channels to
|
|
|
|
them. Then grab the appropriately-versioned Linux package from the inferior to
|
|
|
|
use as your kernel.
|
|
|
|
|
|
|
|
#+BEGIN_SRC scheme
|
|
|
|
(use-modules (srfi srfi-1) ; for `first'
|
|
|
|
(guix channels))
|
|
|
|
(operating-system
|
|
|
|
(kernel
|
|
|
|
(let*
|
|
|
|
((channels
|
|
|
|
(list (channel
|
|
|
|
(name 'nonguix)
|
|
|
|
(url "https://gitlab.com/nonguix/nonguix")
|
|
|
|
(commit "ff6ca98099c7c90e64256236a49ab21fa96fe11e"))
|
|
|
|
(channel
|
|
|
|
(name 'guix)
|
|
|
|
(url "https://git.savannah.gnu.org/git/guix.git")
|
|
|
|
(commit "3be96aa9d93ea760e2d965cb3ef03540f01a0a22"))))
|
|
|
|
(inferior
|
|
|
|
(inferior-for-channels channels)))
|
|
|
|
(first (lookup-inferior-packages inferior "linux" "5.4.21"))))
|
|
|
|
...)
|
|
|
|
#+END_SRC
|
|
|
|
|
2019-06-02 20:29:14 +02:00
|
|
|
* Contributing
|
|
|
|
|
|
|
|
Contributions are welcome! If there's a package you would like to add, just
|
|
|
|
fork the repository and create a Merge Request when your package is ready.
|
|
|
|
Keep in mind:
|
|
|
|
|
|
|
|
- Nonguix follows the same
|
|
|
|
[[https://www.gnu.org/software/guix/manual/en/html_node/Coding-Style.html][coding style]]
|
|
|
|
as GNU Guix. If you don't use Emacs, you should make use of the indent
|
|
|
|
script from the GNU Guix repository (=./etc/indent-code.el=).
|
|
|
|
- Commit messages should follow the same
|
|
|
|
[[https://www.gnu.org/prep/standards/html_node/Change-Logs.html][conventions]]
|
|
|
|
set by GNU Guix.
|
|
|
|
- Although licensing restrictions are relaxed, packages should still have
|
|
|
|
accurate license metadata.
|
|
|
|
- If a package could be added to upstream GNU Guix with a reasonable amount of
|
|
|
|
effort, then it probably doesn't belong in Nonguix. This isn't a dumping
|
|
|
|
ground for subpar packages, but sometimes we may accept free software
|
|
|
|
packages which are currently too cumbersome to properly build from source.
|
2019-06-03 17:41:48 +02:00
|
|
|
- If your package is a game, you should submit it to the
|
|
|
|
[[https://gitlab.com/guix-gaming-channels][Guix Gaming Channels]] instead.
|
2019-06-02 20:29:14 +02:00
|
|
|
|
|
|
|
If you have a history of making quality contributions to GNU Guix or Nonguix
|
|
|
|
and would like commit access, just ask! Nontrivial changes should still go
|
|
|
|
through a simple Merge Request and code review process, but Nonguix needs more
|
|
|
|
people involved to succeed as a community project.
|
2020-05-02 10:01:40 +02:00
|
|
|
|
|
|
|
* Community
|
|
|
|
|
|
|
|
If you want to discuss Nonguix-related topics, you can hang out and stay in
|
|
|
|
touch on the =#nonguix= IRC channel.
|