zero/home-environments/radio.scm

566 lines
24 KiB
Scheme

(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 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 mail)
#: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 perl)
#: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 tmux)
#: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)
#|G|# #:use-module (radix packages games)
#|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:guix-contrib
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))
(define packages:development
(list #|gnupg |# gnupg pinentry
#|llvm |# clang-15
#|math |# libqalculate
#|ssh |# openssh
#|perl |# perl ; dep for some kakoune functionality
#|text-editors |# kakoune kak-lsp kak-tree-sitter
#|tmux |# tmux
#|vesion-control|# diff-so-fancy 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 srb2 supertuxkart xonotic))
(define packages:guix-contrib
(list #|mail |# mumi
#|version-control|# git `(,git "send-email")))
(define packages:image
(list #|image-viewers|# imv
#|ocr |# tesseract-ocr))
(define packages:messaging
(list #|telegram |# telegram-desktop
#|mail |# neomutt))
(define packages:password
(list #|password-utils|# keepassxc))
(define packages:reading
(list #|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 packages:guix-contrib
#|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
(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
`("application/pdf"))))))
#|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-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")))
(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\"")
#|Kakoune bindings for info|#
("info" . "info --init-file $XDG_CONFIG_HOME/info")
#|Kakoune aliases for the shell|#
(":e" . "kak")
(":q" . "exit")))
(abbreviations
(let ((edit (partial format #f "$EDITOR~@{ ~a~}")))
`(,@(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")
(!repl . "guix repl -i ~/.config/guile/guilerc")
(!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"))
(:semester . ,(edit "~/areas/semester"))
(:todo . ,(edit "~/areas/meta/todo")))))))))
(simple-service 'home-fish-colored-man home-fish-service-type
(home-fish-extension
(plugins
(list fish-colored-man))
(environment-variables
`(("man_bold" . ("-o" "blue"))))))
(simple-service 'home-fish-done home-fish-service-type
(home-fish-extension
(plugins
(list fish-done))
(environment-variables
`(("__done_allow_nongraphical" . "1")
("__done_exclude"
. (#|G|# "^git" "'^guix (edit|repl|shell)'"
#|K|# "^kak"
#|L|# "^lf"
#|M|# "^mpv"
#|N|# "^newsraft"))
("__done_notification_command"
. "notify-send '$title' '$message'")))))
(simple-service 'home-fish-fzf home-fish-service-type
(home-fish-extension
(plugins
(list fish-fzf))
(config
(list (plain-file "fish-fzf.fish"
(string-join
`("fzf_configure_bindings"
"--directory=@@"
"--git_log=@l"
"--git_status=@s"
"--history=@h"
"--processes="
"--variables=")))))
(environment-variables
;; adicionar toggle de dotfiles na lista e no preview
;; adicionar toggle pro base-directory ser $PWD
`(("fzf_preview_dir_cmd" . "")
("FZF_DEFAULT_OPTS" . ("--filepath-word"
"--height=~40%"
"--layout=reverse"
"--scheme=path"
"--scroll-off=2"))
("fzf_fd_opts" . ("--absolute-path"
"--exclude='\\..*'"
"--follow"
"--base-directory=$HOME"
"--type=directory"))))))
#|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