#+TITLE: Guix-Packages
Guix-Packages is my personal software repository for the [[https://www.gnu.org/software/guix/][GNU Guix]] package
manager. Here you will find packages I am building for my personal use.
distribution for ethical or policy-related reasons.
I have three name spaces in this channel, jamestechnotes, gnu, and non-free.
- jamestechnotes :: free software that supports my (peculiar) workflow and
would not fit in with the larger Guix project.
- gnu :: Packages I am developing and haven't been submitted to the Guix
project. I am still working on these or haven't got around to
submitting patches.
- non-free :: This is for inherently crippled software that I still find
myself having to use. This is largely for crippled hardware I
have that need such to function properly. 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. I
am in this case, simply exercising my freedom to use Guix for my
purposes (freedom 0 and 1), and changing it to work the way I
want and sharing my changes publicly (freedom 3). Before using
this name space, 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.
* Installation
Guix-packages 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 'jamestechnotes)
(url "https://git.jamestechnotes.com/guix/guix-packages.git"))
%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 (non-free linux))
(operating-system
(kernel linux)
(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.
** 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
* Acknowledgments
Many of the ideas and code you see here were inspired by
https://gitlab.com/nonguix/nonguix.