#+title: Selected Guix Works
#+OPTIONS: f:t
Guix channel featuring many packages that will probably make their way upstream, as I'll probably not package proprietary software (and even if I did, I'd just upstream it to Nonguix instead).
Modules are in the layout of Guix source.
- Channel Definition
Use this for adding this channel to your configuration:
#+begin_src scheme
(cons* (channel
(name 'selected-guix-works)
(url "https://github.com/gs-101/selected-guix-works.git")
(branch "main")
(introduction
(make-channel-introduction
"5d1270d51c64457d61cd46ec96e5599176f315a4"
(openpgp-fingerprint
"C780 21F7 34E4 07EB 9090 0CF1 4ACA 6D6F 89AB 3162"))))
%default-channels)
#+end_src
- Packages
** Fonts
*** Nerd Fonts
This channel includes all Nerd Fonts[fn:3]. A meta package is available under the name of =fonts-nerd-fonts=, with all other packages following the same naming convention (=fonts-nerd-fonts-inconsolata=).
** QT
-
=hyprqt6engine= ::
hyprqt6egnine[fn:19] is the Qt theme engine of the Hyprland ecosystem. Think of it as like a qt6ct[fn:20].
-
=qt5ct-kde= ::
qt5ct-kde[fn:21] is a version of qt5ct[fn:22] from the Arch User Repository (AUR) patched to work with KDE applications.
-
=qt6ct-kde= ::
Same as the above[fn:23], but for Qt6[fn:20].
** Rust Apps
-
=gitu= ::
gitu[fn:13] is a terminal user interface for Git inspired by Magit[fn:14]. It features Vim-like keybinds by default, but [[https://github.com/altsem/gitu/blob/master/src/default_config.toml][that can be configured]].
-
=rust-stakeholder= ::
rust-stakeholder[fn:15] is a joke program that generates nonsensical terminal output that makes it seem like you're busy. Makes for a nice screensaver.
-
=git-credential-keepassxc= ::
git-credential-keepassxc[fn:17] is a =git= credential helper. It allows the use of KeePassXC as a source for passwords in command-line applications.
** Window Management
-
=hyprshot= ::
hyprshot[fn:7] is a shell script designed for optimizing screenshot utilities for Hyprland. It uses grim[fn:8] to take the screenshot, and slurp[fn:9] to select an area.
- Services
-
non-nixos-gpu-service-type::Service used to load the GPU driver service generated by home-manager[fn:24]. Add it to your system definition after running the =non-nixos-gpu-setup= script.
#+begin_quote
[!WARNING]
GNU Shepherd service hasn't been added to home-manager yet. Wait until nix-community/home-manager#8382 is merged to use this service.
#+end_quote
** Home
-
home-ripgrep-service-type::Service used to configure ripgrep[fn:11], a search tool inspired by =grep=. =ripgrep='s configuration consists of its command flags.
Below is the documentation of this service (based on the Guix manual format):
The =(selected-guix-works home services rust-apps)= module provides services for configuring applications built on Rust.
Currently, the only available service is for [[https://github.com/BurntSushi/ripgrep][ripgrep]], a fast file-searching tool inspired by [[https://www.man7.org/linux/man-pages/man1/grep.1.html][grep]].
The service reference is given below.
-
Variable:
home-ripgrep-service-type::This is the service type for =ripgrep=. Its value must be a
home-ripgrep-configuration, as shown below. It provides theRIPGREP_CONFIG_PATHenvironment variable, to set the configuration file's path (as =ripgrep= doesn't have a predefined one), and the =~/.config/ripgrep/config= file.As an example, here is how you would configure =ripgrep= to search inside compressed files, while 5 lines shown as context before and after a match:
#+begin_src scheme
(service home-ripgrep-service-type
(home-ripgrep-configuration
(search-zip? #t)
(context 5)))
#+end_src -
Variable:
home-ripgrep-configuration::Fields were picked by choice, based on if they were useful to put in a configuration file or not. Here they are:
-
pre(type: maybe-string) ::Run a command before search, searching its output instead of files.
-
pre-glob(type: maybe-string) ::Run the command defined on
preonly on the specified globs. -
search-zip?(type: maybe-boolean) ::Whether to search the inside compressed files.
-
crlf?(type: maybe-boolean) ::Whether to treat ‘\r\n’ as a line terminator. This is what is used in Windows.
-
engine(type: maybe-string) ::Specify the regular expression engine. Accepted values are:
defaultpcre2auto
pcre2is useful for features such as look-around or backreferences. -
fixed-strings?(type: maybe-boolean) ::Whether to treat all patterns as string literals, to avoid escaping.
-
max-count(type: maybe-integer) ::Limit the number of matching lines per file by the given number. 0 disables search altogether.
-
mmap?(type: maybe-boolean) ::Whether to search using memory maps. =ripgrep= does this automatically, and it's useful for searching singile files.
-
multiline?(type: maybe-boolean) ::Whether to search across multiple lines. This allows for regualr expressions containing ‘\n’.
-
multiline-dotall?(type: maybe-boolean) ::Whether using ‘.’ to match any character should also match line terminators.
-
regex-size-limit(type: maybe-string) ::The maximum size a compiled regular expression can have. Useful when one explicitly wants =ripgrep= to spend a longer time building a regex matcher. The value is a number with a suffix, which are:
- =K= :: Kilobytes
- =M= :: Megabytes
- =G= :: Gigabytes
No suffix is assumed to be bytes.
-
smart-case?(type: maybe-boolean) ::Whether to enable case-sensitive search only when a pattern character is capitalized.
-
text?(type: maybe-boolean) ::Whether to search binary files as if they were text. Beware, as this may end up passing escape sequences to your terminal.
-
threads(type: maybe-integer) ::The number of threads used for search. The default of
0chooses the number automatically. -
word-regexp?(type: maybe-boolean) ::Whether to show only matches surrounded by word boundaries. This is the equivalent of surrounding every match with ‘\b{start-half}’ and ‘\b{end-half}’.
-
binary?(type: maybe-boolean) ::Whether to search binary files, without converting them to text. Stops search when a match is found.
-
follow?(type: maybe-boolean) ::Whether to follow symbolic links.
-
glob(type maybe-string) ::Define a glob, for including or excluding matches.
-
hidden?(type: maybe-boolean) ::Whether to search hidden files or directories (those prefixed with a ‘.’);
-
max-depth(type: maybe-integer) ::The maximum depth search can descend.
-
max-filesize(type: maybe-string) ::The maximum files size that can be searched. Does not apply to directories.
Follows the same schema ofregex-size-limit:- =K= :: Kilobytes
- =M= :: Megabytes
- =G= :: Gigabytes
Where no suffix is assumed to be bytes.
-
one-file-system?(type: maybe-boolean) ::Whether to stop =ripgrep= from searching across different file systems.
-
type(type: maybe-string) ::Limit =ripgrep= to search only files of the defined types. For a lis of supported file types, invoke =rg --type-list= in your shell.
-
type-not(type: maybe-string) ::Instruct =ripgrep= to avoid searching in files of the specified types . For a list of supported file types, invoke =rg --type-list= in your shell.
-
type-add(type: maybe-string) ::Define new =ripgrep= types.
#+begin_quote
[!NOTE]At first, the plan was to use a list of alists here (and in other fields) like in
home-bash-configurationaliases. I don't know how I'd do that, so this was discarded. I'll ask in my upstream submission how this could be done.
#+end_quote -
after-context(type: maybe-integer) ::Show the given number of lines after the match as context.
-
before-context(type: maybe-integer) ::Show the given number of lines after the match as context.
-
color(type: maybe-string) ::When to show colors. Accepted values are:
neverautoalwaysansi
ansiis more compatible with Windows. -
colors(type: maybe-string) ::Specify colors in a {type}:{attribute}:{value} structure.
-
column?(type: maybe-boolean) ::Whether to display column numbers. Enabling it also enables
line-number?. -
context(type: maybe-integer) ::Shpw the given number of lines before and after the match as context.
-
context-separator(type: maybe-string) ::Separator used to separate the match from the cotnext
-
field-context-separator(type: maybe-string) ::Separator used to separate elements not part of the file, suach as the file path, line numbers and colors from the context lines.
-
field-match-separator(type: maybe-string) ::Separator used to separate elements not part of the file, such as the file path, line numbers and colors from the context lines.
-
hyperlink-format(type: maybe-string) ::"The format used to display hyperlinks to the results. A format string can be used, but there are also some predefined aliases:
defaultnonefilegrep+kittymacvimtextmatevscodevscode-insidersvscodium
-
include-zero?(type: maybe-boolean) ::Whether to show the number of matches even if the number is zero.
-
line-number?(type: maybe-boolean) ::Whether to show line numbers. Enabled automatically with
column?. -
max-columns(type: maybe-integer) ::The maximum number of columns to display in a line match. Lines with matches over this limit will be removed from the results.
-
max-columns-preview?(type: maybe-boolean) ::Whether to show a preview of matched lines over the limit of
max-columns, instead of removing the matched lines. -
only-matching?(type: maybe-boolean) ::Whether to show only the matched parts of a matching line in a separate output line.
-
passthru?(type: maybe-boolean) ::Whether to print all lines in a file with a match, highlighting the matches.
-
sort(type: maybe-string) ::Sort results in ascending order following the given criteria.
Accepted values are:nonepathmodifiedaccessedcreated
-
sort(type: maybe-string) ::Sort results in descending order following the given criteria.
Accepted values are:nonepathmodifiedaccessedcreated
-
trim?(type: maybe-boolean) ::Whether to trim whitespace at the beginning of each line.
-
extra-content(default: "") (type: string) ::Extra content appended as-is to the configuration file.
-
-
-
home-swww-service-type::Service used to configure swww[fn:16], a wallpaper manager for your Wayland session (most likely a window manager for one to use this).
I wouldn't recommend you to use this service, because, first it came to me as an epiphany: I was having issues with the version available in Guix, then hastely wrote a service to see it would help (it did not)—secondly, you can probably just start =swww= from your window manager. Hyprland at least support for this.
Well, with my warning message left, onwards with the documentation:
The =(selected-guix-works home services wm)= module provides services for configuring applications proper for a window manager-based system.
Currently, the only available service is for [[https://github.com/LGFae/swww][swww]], a wallpaper manager.
The service reference is given below.
-
Variable:
home-swww-service-type::Service used to configure =swww=. Its value could be a
home-swww-configuration, detailed in the next sentences, but the default should suffice. -
Variable:
home-swww-configuration::The most notable one is
extra-options.-
swww(file-like) ::The =swww= package to be used.
-
extra-options(list-of-strings) ::Command-line arguments to be passed to the =swww-daemon=.
-
-
- Utilities
This module holds procedures for simplifying configurations.
-
home-profile-package-service::Takes a string referring to the name of a package. This returns a
simple-servicethat contains the package name, adding it to the current home profile. It turns this:#+begin_src scheme
(simple-service 'home-emacs-master-pgtk-service
home-profile-service-type
(list (specification->package "emacs-master-pgtk")))
#+end_srcInto this:
#+begin_src scheme
(home-profile-package-service "emacs-master-pgtk")
#+end_src
It also supports a list of package names, with the first package being used for the name of the service.
- The Name
The name comes from the Aphex Twin album series “Selected Ambient Works”. I have an interest in ambient-like music, such as drone metal, so I had to check out his work, and I have to say I quite enjoyed it.
My favourite of his works is “Expert Knob Twiddlers”, it has an album cover as silly as its name.
- References
[fn:3] McIntyre, R.L. (2025) “Ryanoasis/nerd-fonts.” Available at: https://github.com/ryanoasis/nerd-fonts (Accessed: February 10, 2025).
[fn:4] “Hyprwm/hyprpaper” (2025). Hypr Development. Available at: https://github.com/hyprwm/hyprpaper (Accessed: February 10, 2025).
[fn:5] “Hyprwm/hyprland” (2025). Hypr Development. Available at: https://github.com/hyprwm/Hyprland (Accessed: February 10, 2025).
[fn:7] Gustash (2024) “Gustash/hyprshot.” Available at: https://github.com/Gustash/Hyprshot (Accessed: February 13, 2025).
[fn:8] Ser, S. (2025) “emersion/grim.” Available at: https://sr.ht/~emersion/grim (Accessed: February 13, 2025).
[fn:9] Ser, S. (2025) “emersion/slurp.” Available at: https://github.com/emersion/slurp (Accessed: February 13, 2025).
[fn:11] Gallant, A. (2025) “Burntsushi/ripgrep.” Available at: https://github.com/BurntSushi/ripgrep (Accessed: March 5, 2025).
[fn:13] altsem (2025) “altsem/gitu.” Available at: https://github.com/altsem/gitu (Accessed: March 14, 2025).
[fn:14] “magit/magit” (2025). Magit. Available at: https://github.com/magit/magit (Accessed: March 15, 2025).
[fn:15] giacomo- b (2025) “Giacomo-b/rust-stakeholder.” Available at: https://github.com/giacomo-b/rust-stakeholder (Accessed: April 2, 2025).
[fn:17] Zhang, F. (2025) “Frederick888/git-credential-keepassxc.” Available at: https://github.com/Frederick888/git-credential-keepassxc (Accessed: April 18, 2025).
[fn:18] Mattias (2025) “Lassekongo83/adw-gtk3.” Available at: https://github.com/lassekongo83/adw-gtk3 (Accessed: April 25, 2025).
[fn:19] “Hyprwm/hyprqt6engine” (2025). Hypr Development. Available at: https://github.com/hyprwm/hyprqt6engine (Accessed: December 21, 2025).
[fn:20] Kotov, I. (2025) “Trialuser02/qt6ct.” Available at: https://github.com/trialuser02/qt6ct (Accessed: December 21, 2025).
[fn:21] ilya-fedin (2024) “Qt5ct-kde.” Available at: https://aur.archlinux.org/packages/qt5ct-kde (Accessed: December 29, 2025).
[fn:22] trialuser02 (2025) “Qt5ct.” Available at: https://sourceforge.net/projects/qt5ct/ (Accessed: December 29, 2025).
[fn:23] ilya-fedin (2025) “Qt6ct-kde.” Available at: https://aur.archlinux.org/packages/qt6ct-kde (Accessed: December 29, 2025).
[fn:24] “Nix-community/home-manager” (2026). Nix community projects. Available at: https://github.com/nix-community/home-manager (Accessed: January 3, 2026).