GitHunt
GS

gs-101/selected-guix-works

Guix channel featuring assorted packages.

#+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 the RIPGREP_CONFIG_PATH environment 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 pre only 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:

        • default
        • pcre2
        • auto

        pcre2 is 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 0 chooses 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 of regex-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-configuration aliases. 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:

        • never
        • auto
        • always
        • ansi

        ansi is 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:

        • default
        • none
        • file
        • grep+
        • kitty
        • macvim
        • textmate
        • vscode
        • vscode-insiders
        • vscodium
      • 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:

        • none
        • path
        • modified
        • accessed
        • created
      • sort (type: maybe-string) ::

        Sort results in descending order following the given criteria.
        Accepted values are:

        • none
        • path
        • modified
        • accessed
        • created
      • 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-service that 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_src

    Into 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).

Languages

Scheme75.0%Emacs Lisp19.4%Tree-sitter Query5.0%Shell0.7%

Contributors

GNU General Public License v3.0
Created January 28, 2025
Updated January 4, 2026