radix/home-environments/radio.scm

551 lines
25 KiB
Scheme
Raw Normal View History

(define-module (radix home-environments radio)
#|GNU|#
#:use-module (gnu)
#:use-module ((gnu home) #:select (this-home-environment))
#:use-module ((gnu home) #:hide (this-home-environment)
#:prefix user-)
#:use-module (gnu home services)
#|GNU packages|#
#|A|# #:use-module (gnu packages admin)
#|B|# #:use-module (gnu packages bittorrent)
#|C|# #:use-module (gnu packages c)
#:use-module (gnu packages calendar)
#:use-module (gnu packages curl)
#|D|# #:use-module (gnu packages disk)
#|F|# #:use-module (gnu packages file)
#:use-module (gnu packages fonts)
#:use-module (gnu packages freedesktop)
#|G|# #: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 gnuzilla)
#:use-module (gnu packages guile-xyz)
#|I|# #:use-module (gnu packages image-viewers)
#|L|# #:use-module (gnu packages linux)
#|M|# #:use-module (gnu packages maths)
#:use-module (gnu packages minetest)
#|P|# #:use-module (gnu packages password-utils)
#:use-module (gnu packages pdf)
#:use-module (gnu packages pulseaudio)
#:use-module (gnu packages python-xyz)
#|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 text-editors)
#:use-module (gnu packages tor)
#: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)
#|GNU home services|#
#|D|# #:use-module (gnu home services desktop)
#|G|# #:use-module (gnu home services guix)
#|M|# #:use-module (gnu home services mcron)
#|S|# #:use-module (gnu home services ssh)
#:use-module (gnu home services shepherd)
#:use-module (gnu home services sound)
#|Guix|#
#:use-module (guix channels)
#|Radix|#
#:use-module (radix utils)
#:use-module (radix home services)
#|Radix packages|#
#|F|# #:use-module (radix packages fonts)
#|S|# #:use-module (radix packages syndication)
#|W|# #:use-module (radix packages wm)
#|Radix home services|#
#|G|# #:use-module (radix home services gnupg)
#|S|# #:use-module (radix home services shells)
#|X|# #:use-module (radix home services xdg)
#|Z|# #:use-module (radix home services zathura)
#|Radix files|#
#|A|# #:use-module ((radix files awesome) #:prefix file:awesome-)
#|E|# #:use-module ((radix files emacs) #:prefix file:emacs-)
#|F|# #:use-module ((radix files fish) #:prefix file:fish-)
#|G|# #:use-module ((radix files git) #:prefix file:git-)
#|I|# #:use-module ((radix files info) #:prefix file:info-)
#|K|# #:use-module ((radix files kakoune) #:prefix file:kak-)
#|L|# #:use-module ((radix files lf) #:prefix file:lf-)
#|M|# #:use-module ((radix files mpv) #:prefix file:mpv-)
#|N|# #:use-module ((radix files newsraft) #:prefix file:newsraft-)
#:export (home-environment))
(@@ (radix combinators) partial)
(define home-environment
(user-home-environment
(packages
(list #|admin |# neofetch netcat-openbsd
#|bittorrent |# aria2 qbittorrent
#|c |# c-intro-and-ref
#|calendar |# remind
#|curl |# curl
#|disk |# lf
#|file |# file
#|fonts |# font-arabic-misc font-liberation font-meslo-lg-dz
font-misc-misc font-un font-wqy-zenhei
#|freedesktop |# xdg-utils
#|games |# minetest supertuxkart xonotic
#|gnome |# adwaita-icon-theme
#|gnu-doc |# gnu-standards
#|gnupg |# gnupg pinentry
#|gnuzilla |# icecat
#|guile-xyz |# haunt
#|image-viewers |# imv
#|linux |# alsa-utils
#|math |# libqalculate
#|password-utils|# keepassxc
#|pdf |# zathura zathura-pdf-mupdf zathura-djvu
#|pulseaudio |# pamixer pavucontrol
#|python-xyz |# python-ueberzug
#|scheme |# sicp
#|syndication |# newsraft
#|ssh |# openssh
#|suckless |# xst
#|telegram |# telegram-desktop
#|tor |# torbrowser
#|toys |# oneko
#|vesion-control|# git
#|video |# ffmpeg mpv yt-dlp
#|wm |# awesome-next
#|xdisorg |# maim xbanish xclip xinit xsel
#|xorg |# setxkbmap xinput xf86-input-libinput xkill xmodmap
xorg-server xrdb xset))
(services
(list #|XDG services|#
(service home-xdg-user-directories-service-type
(home-xdg-user-directories-configuration
(desktop "$HOME/areas")
(documents "$HOME/areas/documents")
(music "$HOME/media/music")
(pictures "$HOME/media/pictures")
(videos "$HOME/media/videos")
(publicshare "$HOME/resources/public")
(download "$HOME/.local/share/downloads")
(templates "$HOME/.local/share/templates")))
(service home-xdg-mime-applications-service-type
(home-xdg-mime-applications-configuration
(default (associate-right
('icecat.desktop
`("text/html"
"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/plain"
"text/troff"
"text/xml"
"text/x-c"
"text/x-c++"
"text/x-diff"
"text/x-lisp"
"text/x-scheme"
"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"))
('org.pwmt.zathura.desktop
`("image/vnd.djvu"
"application/pdf"
"application/epub+zip"))))))
(service home-xdg-configuration-files-service-type
`(("awesome/rc.lua" ,file:awesome-config)
("awesome/themes/current.lua" ,file:awesome-theme)
("emacs/init.el" ,file:emacs-init)
("emacs/theme.el" ,file:emacs-theme)
("fish/functions" ,file:fish-functions)
("fish/conf.d" ,file:fish-config)
("git" ,file:git-config)
("info" ,file:info-config)
("kak/kakrc" ,file:kak-config)
("kak/autoload/colorscheme.kak" ,file:kak-colorscheme)
("lf" ,file:lf-config)
("mpv" ,file:mpv-config)
("newsraft" ,file:newsraft-config)))
#|Guix service|#
(simple-service 'channels-service
home-channels-service-type
(list (channel
(name 'radix)
(url "https://codeberg.org/anemofilia/radix")
(branch "main")
(introduction
(make-channel-introduction
"f9130e11e35d2c147c6764ef85542dc58dc09c4f"
(openpgp-fingerprint
(format #f "F164 709E 5FC7 B32B AEC7 ~
9F37 1F2E 76AC E3F5 31C8")))))))
#|Shepherd service|#
(service home-shepherd-service-type)
#|Shell services|#
(service home-fish-service-type
(home-fish-configuration
(config (list file:fish-custom-functions))
(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 ~
-hv"))
#|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")
#|Easy presentation setup with xrandr|#
("present" . ,(format #f "xrandr --output LVDS-1 ~
--mode 1366x768 ~
--scale 1x1 ~
--output VGA-1 ~
--same-as LVDS-1 ~
--mode 1920x1080 ~
--scale 0.711x0.711"))
#|Display images in lf using ueberzug|#
("lf" . "$HOME/.local/bin/lf/lfrun")
#|Listen to libre music on vern's radio|#
("radio" . "https://radio.vern.cc")
#|Kakoune aliases for the shell|#
("':e'" . "kak")
("':q'" . "exit")))
(abbreviations
(let ((code-projects "~/projects/code")
(code-project-extensions
'(c clj cpp el html kak md org pl py scm sh tex zig))
(xdg-user-directories
'(desktop documents downloads music
pictures public templates videos))
(bookmarks
'(emacs guile guix haunt misc)))
(list #|Quick access|#
(abbreviation
(name "@user-dirs")
(position 'anywhere)
(pattern
(apply format #f "@(~a~@{|~a~})"
xdg-user-directories))
(expansion (fish-function "xdg-user-directory")))
(abbreviation
(name "@extension")
(position 'anywhere)
(pattern
(apply format #f "@(~a~@{|~a~})"
code-project-extensions))
(expansion
(fish-function "code-projects")))
(abbreviation
(name "@punk")
(position 'anywhere)
(expansion
(format #f "~a/cpp/punk"
code-projects)))
(abbreviation
(name "@guix")
(position 'anywhere)
(expansion
(format #f "~a/scm/guix"
code-projects)))
(abbreviation
(name "@radix")
(position 'anywhere)
(expansion
(format #f "~a/scm/radix"
code-projects)))
(abbreviation
(name "@files")
(position 'anywhere)
(expansion
(format #f "~a/scm/radix/files"
code-projects)))
(abbreviation
(name "@modules")
(position 'anywhere)
(expansion
(format #f "~a/scm/radix/modules/radix"
code-projects)))
(abbreviation
(name "@research")
(position 'anywhere)
(expansion "~/areas/research"))
(abbreviation
(name "@bookmarks")
(position 'anywhere)
(expansion "~/resources/bookmarks"))
(abbreviation
(name "@git-root")
(pattern "@git-root")
(position 'anywhere)
(expansion
(fish-function "git-root")))
#|Quick edit|#
(abbreviation
(name ":e")
(expansion "$EDITOR"))
(abbreviation
(name ":system")
(expansion
(fish-function "edit-system")))
(abbreviation
(name ":home")
(expansion
(fish-function "edit-home")))
(abbreviation
(name ":todo")
(expansion "~/areas/organization/todo"))
(abbreviation
(name ":bookmark")
(position 'anywhere)
(pattern
(apply format #f ":(~a~@{|~a~})" bookmarks))
(expansion
(fish-function "bookmarks")))
#|Media downloading|#
(abbreviation
(name "i")
(expansion "ipfs get %"))
(abbreviation
(name "d")
(expansion "aria2c -j 10 '%'"))
(abbreviation
(name "m")
(expansion
(format #f "yt-dlp --prefer-free-formats ~
--extract-audio '%'")))
(abbreviation
(name "v")
(expansion
"yt-dlp --prefer-free-formats '%'"))
#|Command history reuse|#
(abbreviation
(name "!!")
(position 'anywhere)
(expansion
(fish-function "bang-bang")))
(abbreviation
(name "!!:k")
(position 'anywhere)
(pattern "!!:[0-9]+")
(expansion
(fish-function "bang-bang-k")))
(abbreviation
(name "!$")
(position 'anywhere)
(expansion
(fish-function "bang-dollar")))
(abbreviation
(name "!*")
(position 'anywhere)
(expansion
(fish-function "bang-star")))
#|Guix reconfiguration|#
(abbreviation
(name "!dgen")
(position 'anywhere)
(expansion "guix % delete-generations 2w"))
(abbreviation
(name "!repair")
(expansion "doas guix build --repair"))
(abbreviation
(name "!pull")
(position 'anywhere)
(expansion "guix pull"))
(abbreviation
(name "!home")
(expansion
"guix home reconfigure ~/.config/guix/home.scm"))
(abbreviation
(name "!system")
(expansion
"doas guix system reconfigure /etc/config.scm"))
#|Utils|#
(abbreviation
(name "zedit")
(expansion "zcat % | $EDITOR"))
(abbreviation
(name "tf")
(position 'anywhere)
(expansion
"setsid -f %>/dev/null 2>&1 & disown"))
2023-10-29 18:17:51 +00:00
(abbreviation
(name "zxz")
2023-10-29 18:17:51 +00:00
(expansion
"curl -F file=@% https://0x0.st | xsel -b")))))))
(simple-service 'environment-variables-service
home-environment-variables-service-type
`(#|Shells|#
("PATH" . "$HOME/.local/bin:$PATH")
("ENV" . "$XDG_CONFIG_HOME/dash/init.sh")
("INPUTRC" . "$XDG_CONFIG_HOME/readline/inputrc")
("XINITRC" . "$XDG_CONFIG_HOME/x11/xinitrc")
#|Guile|#
("GUILE_WARN_DEPRECATED" . "detailed")
("GUILE_HISTORY" . "$XDG_CACHE_HOME/guile/history")
("GUILE_LOAD_PATH"
. ,(format #f "~a:~a~@{:~a/share/guile/site/3.0~}"
"$HOME/areas/code/scm"
"$HOME/areas/code/scm/radix/modules"
"$HOME/.guix-home/profile"
"$XDG_CONFIG_HOME/guix/current"
"/run/current-system/profile"))
#|Language|#
("LANG" . "en_US.UTF-8")
("LANGUAGE" . "en_US.UTF-8")
("LC_COLLATE" . "C")
#|Default applications|#
("BROWSER" . "icecat")
("EDITOR" . "kak")
("FCEDIT" . "kak")
("PAGER" . "less")
("READER" . "zathura")
("SHELL" . "fish")
("TERMINAL" . "xst")
("VISUAL" . "kak")
("WM" . "awesome")))
(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 "*.onion")
(identity-file "~/.ssh/codeberg")
(proxy
(proxy-command
"nc -x 127.0.0.1:9050 -X5 %h %p")))))
(authorized-keys #f)))
(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)
#|Desktop application services|#
(service home-zathura-service-type
(home-zathura-configuration
(selection-clipboard 'clipboard)
(pages-per-row 1)
(statusbar-home-tilde? #t)
(recolor (recolor-configuration
(keephue? #t)
(reverse-video? #t)))
(key-maps
(list (key-map
(binding "gk")
(command "goto top"))
(key-map
(binding "gj")
(command "goto bottom"))
(key-map
(binding "d")
(command #f))))
(index-face
(face (background "#000000")
(foreground "#dddddd")))
(index-active-face
(face (background "#9688d9")
(foreground "#000000")))
(completion-face
(face (background "#000000")
(foreground "#dddddd")))
(completion-highlight-face
(face (background "#000000")
(foreground "#9688d9")))))
#|Mcron service|#
(service home-mcron-service-type
(home-mcron-configuration
(jobs (list #~(job "30 5 * * *"
"mpv --shuffle ~/media/music")))))))))
home-environment