{"id":13675962,"url":"https://github.com/aurtzy/guix-config","last_synced_at":"2025-04-28T23:31:25.557Z","repository":{"id":178870829,"uuid":"657887337","full_name":"aurtzy/guix-config","owner":"aurtzy","description":"A modular Guix configuration","archived":false,"fork":false,"pushed_at":"2025-04-19T03:25:04.000Z","size":1070,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-19T11:48:42.215Z","etag":null,"topics":["dotfiles","emacs","guile","guix","scheme"],"latest_commit_sha":null,"homepage":"","language":"Scheme","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aurtzy.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-06-24T05:45:06.000Z","updated_at":"2025-04-19T03:25:09.000Z","dependencies_parsed_at":"2023-09-24T11:45:21.267Z","dependency_job_id":"8266f3ea-c7ca-4b66-b116-24bfeebe2b88","html_url":"https://github.com/aurtzy/guix-config","commit_stats":null,"previous_names":["aurtzy/guix-config"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurtzy%2Fguix-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurtzy%2Fguix-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurtzy%2Fguix-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurtzy%2Fguix-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aurtzy","download_url":"https://codeload.github.com/aurtzy/guix-config/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251404495,"owners_count":21584099,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotfiles","emacs","guile","guix","scheme"],"created_at":"2024-08-02T12:01:06.754Z","updated_at":"2025-04-28T23:31:25.079Z","avatar_url":"https://github.com/aurtzy.png","language":"Scheme","funding_links":[],"categories":["Config Examples"],"sub_categories":["Issue tracker"],"readme":"#+title: guix-config\n\n# Modular Guix configuration\n\n* Introduction\n\nThese are my [[https://guix.gnu.org][GNU Guix]] configuration files.  This config extends Guix with a\ncustom data type (dubbed \"mods\") to modularize my setup.\n\nThis repository also includes some additional packages and services that are\neither being refined for upstreaming or are not suitable for upstream.\n\n* Overview\n\nHere is a general overview of notable files in this repository:\n\n- [[file:files]] contains configuration files that are not declared with Guile code.\n- [[file:modules]] contains Guile modules, where packages, services, and other\n  utilities are defined.  =GUIX_PACKAGE_PATH= is also set to this directory.\n- [[file:systems]] is where the top-level Guix System/Home configuration files for\n  my systems are located.\n- [[file:scripts/setup]] is used for setting up additional things that the installer\n  does not offer to do.\n- [[file:scripts/guix]] is used for bootstrapping the configuration when\n  =GUIX_PACKAGE_PATH= is not set yet.\n\n\nThe following sections include documentation for various services and interfaces\nprovided by the Guile modules.\n\n* Mods\n\nThe ~(my-guix mods)~ module implements \"mods\", an extension to Guix that can be\nused to modularize system (and home) configurations.  Mods are built on top of\nthe composing of procedures that enable extending various fields of a record.\nSome procedures for extending various fields are provided as part of this\nmodule.  Note that \"fields\" refers to any extendable value within record fields\nas well, not just record fields themselves.\n\nThese composable procedures can then be used in conjunction with record types\nand other procedures also provided by the module to build mod objects that can\nbe combined to construct ~operating-system~ or ~home-environment~ records.\n\n# TODO: Add documentation for record types\n\n# TODO: Add documentation for creating new extension procedures\n\n* Services\n\n** Hardware Services\n\nThe ~(my-guix services hardware)~ module provides services relating to\nhardware.\n\n*** ~keyboard-center-service-type~\n\nThis service adds udev rules necessary for the =keyboard-center= package to\nwork.\n\nNo configuration is available for this service, so the following should\nsuffice:\n\n#+begin_src scheme\n  (service keyboard-center-service-type)\n#+end_src\n\n* Home Services\n\n** Base Services\n\nThe ~(my-guix home services)~ module provides additional base services.\n\n*** ~home-impure-symlinks-service-type~\n\nThis service is based off of Guix Home's ~symlink-manager~ service, except\nthat it is designed to work with symlinks outside of the store; hence,\n\"impure\".\n\n~home-impure-symlinks-service-type~ can be initialized and extended with a\nlist of symlink specifications. For example, the following extends the service\nwith symlinks at =$HOME/.config/emacs/init.el= and =$HOME/.bash_profile=\npointing to =$HOME/dotfiles/init.el= and =$HOME/dotfiles/.bash_profile=,\nrespectively:\n\n#+begin_src scheme\n  (simple-service 'home-impure-symlinks-dotfiles\n                  home-impure-symlinks-service-type\n                  `((\".config/emacs/init.el\"\n                     ,(string-append\n                       (getenv \"HOME\")\n                       \"/dotfiles/init.el\"))\n                    (\".config/emacs/early-init.el\"\n                     ,(string-append\n                       (getenv \"HOME\")\n                       \"/dotfiles/early-init.el\"))\n                    (\".bash_profile\"\n                     ,(string-append\n                       (getenv \"HOME\")\n                       \"/dotfiles/.bash_profile\"))))\n#+end_src\n\nOptionally, file names can be specified after the source path to copy the\ndirectory structure of the source path to the destination path (which are\nimplied to be directories in this case). For example, the following value is\nequivalent to the extension value declared above:\n\n#+begin_src scheme\n  `((\".config/emacs\"\n     ,(string-append\n       (getenv \"HOME\")\n       \"/dotfiles\")\n     \"init.el\"\n     \"early-init.el\")\n    (\"\"\n     ,(string-append\n       (getenv \"HOME\")\n       \"/dotfiles\")\n     \".bash_profile\"))\n#+end_src\n\n** Package Management\n\nThe ~(my-guix home services package-management)~ module provides additional\nservices for package management.\n\n*** ~home-flatpak-service-type~\n\nThis is the service type for configuring Flatpak. It expects a\n~home-flatpak-configuration~ record as its value.\n\nOnly installation of flatpaks is supported to avoid accidental removals that\ncause reinstallations. Although this service (mostly) works in its current\nform, the interface is still experimental and will likely go through changes\nto improve flexibility and capabilities.\n\nTo start using this service, it must be configured with at least one\nremote. The following example configures Flatpak to use Flathub as a remote:\n\n#+begin_src scheme\n  (service home-flatpak-service-type\n           (home-flatpak-configuration\n            (remotes\n             '((flathub\n                . \"https://flathub.org/repo/flathub.flatpakrepo\")))))\n#+end_src\n\n~home-flatpak-service-type~ may itself be extended to add applications to the\nprofile, but it can be fairly cumbersome having to specify\n~home-flatpak-configuration~ every time. ~home-flatpak-profile-service-type~\nis included as a shorthand service for specifying lists of application\nspecifications to include in the profile, that being ~(remote app-id)~. The\nfollowing declares the Firefox and Brave Browser flatpaks in the home\nenvironment (assuming that Flathub is already configured as shown above):\n\n#+begin_src scheme\n  (simple-service 'home-flatpak-browsers\n                  home-flatpak-profile-service-type\n                  '((flathub \"org.mozilla.firefox\")\n                    (flathub \"com.brave.Browser\")))\n#+end_src\n\nNote that on foreign systems, the Guix Flatpak package will fail to properly\nrun if CA certificates cannot be found, which can be a problem for first-time\nreconfigures where certificates for Guix have not been set up yet (notably\n=SSL_CERT_FILE=).  However, as long as the relevant variable and package(s)\nare specified in the configuration, they will still be applied even if Flatpak\nfails to run, so subsequent reconfigures should work as intended after\nreloading the environment.\n\nGuix System users should not have this problem since certificates should\nalready be properly set up by the time a home reconfigure takes place.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faurtzy%2Fguix-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faurtzy%2Fguix-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faurtzy%2Fguix-config/lists"}