mirror of
https://gitlab.com/nonguix/nonguix.git
synced 2024-11-29 11:44:10 +01:00
6ece1a5da7
Closes #14. * README.org: Update example 'operating-system' definition to include 'microcode-initrd'.
177 lines
6.5 KiB
Org Mode
177 lines
6.5 KiB
Org Mode
#+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.
|
|
|
|
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.
|
|
|
|
(Check out the [[https://gitlab.com/guix-gaming-channels][Guix Gaming Channels]]
|
|
if you're interested in nonfree games too!)
|
|
|
|
* 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.
|
|
|
|
* 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)
|
|
(url "https://gitlab.com/nonguix/nonguix"))
|
|
%default-channels)
|
|
#+END_SRC
|
|
|
|
* 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.
|
|
(use-modules (nongnu packages linux)
|
|
(nongnu system linux-initrd))
|
|
|
|
(operating-system
|
|
(kernel linux)
|
|
(initrd microcode-initrd)
|
|
(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.
|
|
|
|
** 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
|
|
|
|
** 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
|
|
|
|
** 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
|
|
(use-modules (nongnu packages linux)
|
|
(nongnu services kernel-modules))
|
|
|
|
(operating-system
|
|
(kernel linux)
|
|
;; Blacklist conflicting kernel modules.
|
|
(kernel-arguments '("modprobe.blacklist=b43,b43legacy,ssb,bcm43xx,brcm80211,brcmfmac,brcmsmac,bcma"))
|
|
(firmware (cons* broadcom-bt-firmware
|
|
%base-firmware))
|
|
...
|
|
(services
|
|
(cons* (load-broadcom-sta-service)
|
|
...
|
|
%desktop-services)))
|
|
#+END_SRC
|
|
|
|
* 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.
|
|
- If your package is a game, you should submit it to the
|
|
[[https://gitlab.com/guix-gaming-channels][Guix Gaming Channels]] instead.
|
|
|
|
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.
|