Skip to content

Guix channel featuring assorted packages.

License

Notifications You must be signed in to change notification settings

gs-101/selected-guix-works

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Selected Guix Works

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:

(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)

Packages

Fonts

Nerd Fonts

This channel includes all10 Nerd Fonts3. 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).

Rust Apps

pay-respects

pay-respects12 is a command line program that suggests corrections on incorrect commands. You can use the suggestion by pressing F (to pay respects).

gitu

gitu13 is a terminal user interface for Git inspired by Magit14. It features Vim-like keybinds by default, but that can be configured.

rust-stakeholder

rust-stakeholder15 is a joke program that generates nonsensical terminal output that makes it seem like you’re busy. Makes for a nice screensaver.

Window Management

hyprpolkitagent

hyprpolkitagent6 is the polkit agent of the Hyprland ecosystem.

hyprshot

hyprshot7 is a shell script designed for optimizing screenshot utilities for Hyprland. It uses grim8 to take the screenshot, and slurp9 to select an area.

swww-next

Updated version of swww16.

Services

Home

home-ripgrep-service-type

Service used to configure ripgrep11, 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 ripgrep, a fast file-searching tool inspired by 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:

(service home-ripgrep-service-type
         (home-ripgrep-configuration
          (search-zip? #t)
          (context 5)))
        
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.

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.

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 swww16, 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 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. Defaults to this channel’s swww-next.

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:

(simple-service 'home-emacs-master-pgtk-service
                home-profile-service-type
                (list (specification->package "emacs-master-pgtk")))
    

Into this:

(home-profile-package-service "emacs-master-pgtk")
    

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

3 McIntyre, R.L. (2025) “Ryanoasis/nerd-fonts.” Available at: https://github.com/ryanoasis/nerd-fonts (Accessed: February 10, 2025).

4 “Hyprwm/hyprpaper” (2025). Hypr Development. Available at: https://github.com/hyprwm/hyprpaper (Accessed: February 10, 2025).

5 “Hyprwm/hyprland” (2025). Hypr Development. Available at: https://github.com/hyprwm/Hyprland (Accessed: February 10, 2025).

6 “Hyprwm/hyprpolkitagent” (2025). Hypr Development. Available at: https://github.com/hyprwm/hyprpolkitagent (Accessed: February 12, 2025).

7 Gustash (2024) “Gustash/hyprshot.” Available at: https://github.com/Gustash/Hyprshot (Accessed: February 13, 2025).

8 Ser, S. (2025) “emersion/grim.” Available at: https://sr.ht/~emersion/grim (Accessed: February 13, 2025).

9 Ser, S. (2025) “emersion/slurp.” Available at: https://github.com/emersion/slurp (Accessed: February 13, 2025).

10 CaskaydiaCove and CaskaydiaMono are excluded, as regular Cascadia Code already includes Nerd Fonts.

11 Gallant, A. (2025) “Burntsushi/ripgrep.” Available at: https://github.com/BurntSushi/ripgrep (Accessed: March 5, 2025).

12 iff (2025) “iff/pay-respects.” Available at: https://codeberg.org/iff/pay-respects (Accessed: March 7, 2025).

13 altsem (2025) “altsem/gitu.” Available at: https://github.com/altsem/gitu (Accessed: March 14, 2025).

14 “magit/magit” (2025). Magit. Available at: https://github.com/magit/magit (Accessed: March 15, 2025).

15 giacomo- b (2025) “Giacomo-b/rust-stakeholder.” Available at: https://github.com/giacomo-b/rust-stakeholder (Accessed: April 2, 2025).

16 Faé, L.G. (2025) “Lgfae/swww.” Available at: https://github.com/LGFae/swww (Accessed: April 10, 2025).