(define-module (home-environments radio) #|Ice-9|# #|M|# #:use-module (ice-9 match) #|GNU|# #|•|# #:use-module (gnu) #|H|# #:use-module ((gnu home) #:select (this-home-environment)) #:use-module ((gnu home) #:hide (this-home-environment) #:prefix user-) #|GNU packages|# #|A|# #:use-module (gnu packages admin) #|B|# #:use-module (gnu packages bittorrent) #:use-module (gnu packages browser-extensions) #|C|# #:use-module (gnu packages c) #:use-module (gnu packages calendar) #:use-module (gnu packages chromium) #:use-module (gnu packages commencement) #:use-module (gnu packages curl) #|D|# #:use-module (gnu packages databases) #|F|# #:use-module (gnu packages file) #:use-module (gnu packages fonts) #:use-module (gnu packages freedesktop) #|G|# #:use-module (gnu packages glib) #:use-module (gnu packages games) #:use-module (gnu packages gnome) #:use-module (gnu packages gnu-doc) #:use-module (gnu packages gnupg) #:use-module (gnu packages guile-xyz) #|H|# #:use-module (gnu packages haskell) #:use-module (gnu packages haskell-xyz) #|I|# #:use-module (gnu packages image) #:use-module (gnu packages image-viewers) #:use-module (gnu packages irc) #|L|# #:use-module (gnu packages linux) #:use-module (gnu packages llvm) #|M|# #:use-module (gnu packages maths) #:use-module (gnu packages messaging) #:use-module (gnu packages minetest) #|O|# #:use-module (gnu packages ocr) #|P|# #:use-module (gnu packages password-utils) #:use-module (gnu packages pdf) #:use-module (gnu packages pulseaudio) #|S|# #:use-module (gnu packages scheme) #:use-module (gnu packages shells) #:use-module (gnu packages ssh) #:use-module (gnu packages suckless) #|T|# #:use-module (gnu packages telegram) #:use-module (gnu packages terminals) #:use-module (gnu packages tex) #:use-module (gnu packages text-editors) #:use-module (gnu packages toys) #|V|# #:use-module (gnu packages version-control) #:use-module (gnu packages video) #|W|# #:use-module (gnu packages wm) #|X|# #:use-module (gnu packages xdisorg) #:use-module (gnu packages xorg) #|Z|# #:use-module (gnu packages zig-xyz) #|GNU home services|# #|•|# #:use-module (gnu home services) #|D|# #:use-module (gnu home services desktop) #:use-module (gnu home services dotfiles) #|G|# #:use-module (gnu home services guix) #|P|# #:use-module (gnu home services pm) #|S|# #:use-module (gnu home services ssh) #:use-module (gnu home services shepherd) #:use-module (gnu home services sound) #|Guix|# #|C|# #:use-module (guix channels) #|P|# #:use-module (guix packages) #|Radio|# #|C|# #:use-module ((radio channels) #:prefix channel:) #|Radix|# #|C|# #:use-module (radix combinators) #|U|# #:use-module (radix utils) #|Radix packages|# #|B|# #:use-module (radix packages browser-extensions) #|D|# #:use-module (radix packages disk) #|I|# #:use-module (radix packages image-viewers) #|F|# #:use-module (radix packages fish-xyz) #:use-module (radix packages freedesktop) #:use-module (radix packages fonts) #|P|# #:use-module (radix packages pdf) #|S|# #:use-module (radix packages seninha) #:use-module (radix packages syndication) #|T|# #:use-module (radix packages text-editors) #:use-module (radix packages toys) #|W|# #:use-module (radix packages wm) #|V|# #:use-module (radix packages video) #|X|# #:use-module (radix packages xdisorg) #|Radix home services|# #|•|# #:use-module (radix home services) #|G|# #:use-module (radix home services gnupg) #|S|# #:use-module (radix home services shells) #|X|# #:use-module (radix home services xdg) #|Radio packages|# #|E|# #:use-module ((radio packages emacs-xyz) #:select (packages:all) #:renamer (const 'packages:emacs-xyz)) #:export (home-environment application:browser application:editor application:pager application:reader application:shell application:terminal application:wm packages:blogging packages:calendar packages:databases packages:desktop packages:development packages:documentation packages:downloads packages:file-managing packages:fonts packages:games packages:haskell packages:image packages:messaging packages:password packages:scheme packages:sound packages:video packages:web)) #|Default applications|# (define application:browser "chromium") (define application:editor "kak") (define application:pager "less") (define application:reader "sioyek") (define application:terminal "footclient -D ~") (define application:wm "river") #|Package lists|# (define packages:blogging (list #|guile-xyz|# haunt)) (define packages:calendar (list #|calendar|# remind)) (define packages:databases (list #|databases|# recutils)) (define packages:desktop (list #|admin |# fastfetch #|freedesktop|# xdg-utils xdg-desktop-portal xdg-desktop-portal-wlr xdg-terminal-exec #|glib |# dbus #|image |# grim slurp #|terminals |# foot #|toys |# wayneko #|wm |# fnott rivercarro riverguile river-bnf swww waybar-sans-elogind #|xdisorg |# fuzzel wl-clipboard wlrctl gammastep #|zig-xyz |# river-minimal)) (define packages:development (list #|gnupg |# gnupg pinentry #|llvm |# clang-15 #|math |# libqalculate #|ssh |# openssh #|text-editors |# kakoune kak-lsp parinfer-rust #|vesion-control|# git)) (define packages:documentation (list #|c |# c-intro-and-ref #|gnu-doc|# gnu-standards #|scheme |# r7rs-small-texinfo sicp)) (define packages:downloads (list #|bittorrent|# aria2 qbittorrent #|curl |# curl #|video |# yt-dlp)) (define packages:file-managing (list #|disk |# lf #|file |# file #|haskell-xyz |# pandoc #|image-viewers|# chafa #|pdf |# img2pdf poppler #|seninha |# fmutils #|video |# ffmpegthumbnailer)) (define packages:fonts (list #|fonts|# font-awesome font-google-noto font-google-noto-emoji font-juliamono font-liberation font-meslo-lg-dz font-misc-misc font-un font-wqy-zenhei)) (define packages:games (list #|games|# minetest red-eclipse supertuxkart xonotic)) (define packages:image (list #|image-viewers|# imv #|ocr |# tesseract-ocr)) (define packages:messaging (list #|telegram |# telegram-desktop)) (define packages:password (list #|password-utils|# keepassxc)) (define packages:reading (list #|gnome |# libnotify ; dependency for newsraft #|pdf |# sioyek/wayland #|syndication|# newsraft)) (define packages:scheme (list #|guile-xyz|# guile-goblins guile-hoot guile-lib guile-srfi-197 guile-srfi-232)) (define packages:haskell (list #|commencement|# gcc-toolchain #|haskell |# ghc #|haskell-xyz |# ghc-async ghc-base-prelude ghc-basement ghc-basic-prelude ghc-chart ghc-groups)) (define packages:sound (list #|linux |# wireplumber-minimal #|pulseaudio|# pavucontrol)) (define packages:video (list #|video|# ffmpeg mpv-minimal/wayland)) (define packages:web (list #|chromium |# ungoogled-chromium/wayland #|browser-extensions|# darkreader/chromium ublock-origin/chromium)) (define home-environment (user-home-environment (packages (append #|B|# packages:blogging #|C|# packages:calendar #|D|# packages:databases packages:desktop packages:development packages:documentation packages:downloads #|E|# packages:emacs-xyz #|F|# packages:file-managing packages:fonts #|G|# packages:games #|H|# packages:haskell #|I|# packages:image #|M|# packages:messaging #|P|# packages:password #|R|# packages:reading #|S|# packages:scheme packages:sound #|V|# packages:video #|W|# packages:web)) (services (list #|XDG services|# (service home-xdg-user-directories-service-type (home-xdg-user-directories-configuration (desktop "$HOME/areas") (documents "$HOME/areas/documents") (download "$HOME/media/downloads") (music "$HOME/media/music") (pictures "$HOME/media/pictures") (videos "$HOME/media/videos") (publicshare "") (templates ""))) (service home-xdg-mime-applications-service-type (home-xdg-mime-applications-configuration (desktop-entries (list (xdg-desktop-entry (name "foot") (file "org.codeberg.dnkl.foot.desktop") (type 'application) (config `((exec . "foot") (terminal . "true") (exec-arg . "") (startup-wm-class . "foot")))))) (default (associate-right ('chromium.desktop `("application/xhtml+xml" "application/x-extension-htm" "application/x-extension-xhtml" "application/x-extension-xht" "x-scheme-handler/http" "x-scheme-handler/https")) ('kak.desktop `("text/html" "text/plain" "text/troff" "text/xml" "text/x-c" "text/x-c++" "text/x-clojure" "text/x-diff" "text/x-lisp" "text/x-scheme" "text/x-script.python" "text/x-shellscript" "text/x-tex")) ('lf.desktop `("inode/directory" "x-scheme-handler/ftp" "x-scheme-handler/nfs" "x-scheme-handler/smb" "x-scheme-handler/ssh" "application/x-directory")) ('mpv.desktop `("image/gif" "audio/mpeg" "audio/ogg" "audio/opus" "audio/x-opus+ogg" "video/mp4" "video/x-matroska" "video/webm")) ('imv.desktop `("image/avif" "image/bmp" "image/jpeg" "image/png" "image/svg+xml" "image/webp")) ('sioyek.desktop `("image/vnd.djvu" "application/pdf" "application/epub+zip")))))) #|Dotfiles service|# (service home-dotfiles-service-type (home-dotfiles-configuration (layout 'plain) (directories `("radio/files")))) #|Guix service|# (simple-service 'home-extra-channels home-channels-service-type (list channel:guix channel:radix)) #|Shepherd service|# (service home-shepherd-service-type) #|Shell services|# (service home-fish-service-type (home-fish-configuration (plugins (list fish-autopair fish-done fish-puffer)) (environment-variables `(#|GNU Privacy Guard|# ("GPG_TTY" . "(tty)") #|Remind|# ("DOTREMINDERS" . "$XDG_DATA_HOME/reminders") #|GTK|# ("GTK_RC_FILES" . "$XDG_CONFIG_HOME/gtk-2.0/gtkrc") #|Ncurses|# ("TERMINFO" . "$XDG_DATA_HOME/terminfo") #|Plugins|# ("__done_allow_nongraphical" . "1") ("__done_exclude" . ,(format #f "~{'^~a' ~}" (list #|G|# "git" "guix (edit|repl|shell)" #|K|# "kak" #|L|# "lf" #|M|# "mpv" #|N|# "newsraft"))) ("__done_notification_command" . "notify-send '$title' '$message'"))) (aliases `(#|Common aliases|# ("df" . "df -h") ("du" . "du -h") ("diff" . "diff --color=auto") ("grep" . "grep --color=auto") ("ip" . "ip --color=auto") ("ls" . ,(format #f "ls --color=auto ~ --group-directories-first ~ --classify ~ --human-readable ~ -v")) #|Clear terminal screen without ncurses|# ("clear" . "printf \"\\033c\"") #|Make ln idempotent|# ("ln" . "ln -sfn") #|Kakoune bindings for info|# ("info" . "info --init-file $XDG_CONFIG_HOME/info") #|Kakoune aliases for the shell|# (":e" . "kak") (":q" . "exit"))) (abbreviations (let ((@ (symbol-prefix-proc '@)) (edit (partial format #f "$EDITOR~@{ ~a~}")) (@radix (partial symbol-append '~/areas/code/scm/radix)) (@zero (partial symbol-append '~/areas/code/scm/zero))) `(,@(map (match-lambda ((x . y) (abbreviation (name (@ x)) (position 'anywhere) (expansion (y x))))) (associate-right #|P.A.R.A.|# ((lambda (dir) (cond ((equal? dir 'archive) (symbol-append '~/. dir)) ((equal? dir 'bookmarks) (symbol-append '~/resources/ dir)) (else (symbol-append '~/ dir)))) '(areas bookmarks projects resources archive)) #|XDG user directories|# ((const (fish-function "xdg-user-directory")) '(desktop documents download music pictures videos)) #|Code projects|# ((symbol-prefix-proc '~/projects/code/) '(c clj cpp el hs html kak md pl scm sh tex zig)) #|Code areas|# ((symbol-prefix-proc '~/areas/code/scm/) '(guile guix misako radix riverguile saayix shepherd zero)) #|Radix|# ((partial @radix '/radix/) '(packages services home/services)) #|Zero|# ((partial @zero '/operating-systems/) '(buer buer/files buer/manifests)) ((partial @zero '/home-environments/) '(radio radio/files radio/packages radio/manifests)))) ,@(map (match-lambda ((x . y) (abbreviation (name x) (expansion y)))) `(#|Download/Upload|# (a . "aria2c -j 10 '%'") (i . "ipfs get %") (m . "yt-dlp -x '%'") (u . "curl -F file=@% https://0x0.st | wl-copy") (v . "yt-dlp '%'"))) ,@(map (match-lambda ((x . y) (abbreviation (name x) (position 'anywhere) (expansion y)))) `(#|Guix|# (!dgen . "guix % delete-generations 2w") (!repair . "doas guix build --repair") (!pull . "guix pull") (!home . "guix home reconfigure ~/.config/guix/home.scm") (!system . "doas guix system reconfigure /etc/config.scm") #|Processes|# (tf . "setsid -f % >/dev/null 2>&1 & disown") #|Quick edit|# (:e . ,(edit)) (:system . ,(edit "/etc/config.scm")) (:home . ,(edit "~/.config/guix/home.scm")) (:todo . ,(edit "~/areas/meta/todo"))))))))) #|Environment variables services|# (simple-service 'home-shell-environment-variables home-environment-variables-service-type `(("PATH" . "$HOME/.local/bin:$PATH") ("INPUTRC" . "$XDG_CONFIG_HOME/readline/inputrc"))) (simple-service 'home-guile-environment-variables home-environment-variables-service-type `(("GUILE_WARN_DEPRECATED" . "detailed") ("GUILE_HISTORY" . "$XDG_CACHE_HOME/guile/history") ("GUILE_LOAD_PATH" . ,(format #f "~?~?" "~@{:$HOME/areas/code/scm/~a~}" '(radix zero zero/operating-systems zero/home-environments) "~@{:~a/share/guile/site/3.0~}" '($HOME/.guix-home/profile $XDG_CONFIG_HOME/guix/current /run/current-system/profile))) ("GUILE_LOAD_COMPILED_PATH" . ,(apply format #f "~a~@{:~a~}" (flat-map (lambda (profile path) (format #f "~a/~a" profile path)) '($HOME/.guix-home/profile /run/current-system/profile) '(lib/guile/3.0/site-ccache share/guile/site/3.0)))))) (simple-service 'home-wayland-environment-variables home-environment-variables-service-type `(("QT_QPA_PLATFORM" . "wayland;xcb") ("QT_WAYLAND_DISABLE_WINDOWDECORATION" . "1"))) (simple-service 'home-language-environment-variables home-environment-variables-service-type `(("LANG" . "en_US.UTF-8") ("LANGUAGE" . "en_US.UTF-8") ("LC_COLLATE" . "C"))) (simple-service 'home-default-applications-environment-variables home-environment-variables-service-type `(("BROWSER" . ,application:browser) ("EDITOR" . ,application:editor) ("PAGER" . ,application:pager) ("READER" . ,application:reader) ("TERMINAL" . ,application:terminal) ("VISUAL" . ,application:editor) ("WM" . ,application:wm))) (simple-service 'home-applications-environment-variables home-environment-variables-service-type `(("MINETEST_USER_PATH" . "$XDG_DATA_HOME/minetest"))) #|SSH service|# (service home-openssh-service-type (home-openssh-configuration (hosts (list (openssh-host (name "codeberg.org") (host-name "codeberg.org") (user "git") (identity-file "~/.ssh/codeberg")) (openssh-host (name "github.com") (host-name "github.com") (user "git") (identity-file "~/.ssh/github")) (openssh-host (name "git.sr.ht") (host-name "git.sr.ht") (user "git") (identity-file "~/.ssh/srht")))) (authorized-keys #f))) #|GPG agent service|# (service home-gpg-agent-service-type (home-gpg-agent-configuration (gnupghome ".local/share/gnupg") (pinentry-program (file-append pinentry "/bin/pinentry-curses")))) #|Session services|# (service home-dbus-service-type) #|Sound services|# (service home-pipewire-service-type (home-pipewire-configuration (wireplumber wireplumber-minimal))) #|Battery services|# (service home-batsignal-service-type (home-batsignal-configuration (poll-delay 15) (full-level 90) (warning-level 70) (critical-level 30) (full-message "Unplug the cable.") (warning-message "You may want to plug the cable.") (critical-message "Plug the cable."))))))) home-environment