radix/radio.scm

392 lines
17 KiB
Scheme

#|Modules|#
(use-modules
#|GNU |# (gnu)
(gnu home)
(gnu home services)
#|Guix |# (guix colors)
#|Radix|# (radix packages fonts)
(radix packages wm)
(radix home services)
(radix utils)
#|SRFI |# (srfi srfi-13)
(srfi srfi-26))
(use-package-modules
#|A|# admin
#|B|# base bash bittorrent browser-extensions
#|C|# c calendar
#|D|# disk
#|E|# emacs emacs-xyz
#|F|# freedesktop fonts
#|G|# games gnome gnu-doc gnupg gnuzilla gtk guile-xyz
#|I|# image-viewers
#|L|# linux
#|M|# mail maths mes messaging minetest
#|P|# package-management password-utils pdf plotutils pulseaudio python-xyz
#|S|# scheme ssh suckless
#|T|# telegram tex text-editors tor toys
#|V|# version-control video
#|W|# web-browsers wm
#|X|# xdisorg xorg)
(use-home-service-modules
#|D|# desktop
#|M|# mcron
#|S|# shells ssh shepherd
#|X|# xdg)
#|Mcron jobs|#
(define alarm-clock-job
#~(job "30 6 * * *" "mpv --shuffle $XDG_MUSIC_DIR"))
#|Dotfiles|#
(define bash-functions
(plain-file "bash_functions"
(format #f "~@{~a~%~}"
#|Spawn terminal independent applications from the terminal|#
"tf() { setsid -f \"$@\" >/dev/null 2>&1 & disown; }"
#|Make doas work as doas su when runned without arguments alone |#
"doas() { [ $# -eq 0 ] && $(which doas) -s || $(which doas) \"$@\"; }"
#|Use kakoune as manpage reader|#
"man() { kak -e \"evaluate-commands man $1\"; }"
#|Easily send files to the 0x0 pastebin|#
"zxz(){ printf \"$1\\n$(curl -F file=@$1 http://0x0.st)\\n\"; }")))
(define bashrc
(plain-file "bashrc"
(format #f "~@{~a~%~}"
#|Source system-wide file|#
"[ -f /etc/bashrc ] && source /etc/bashrc"
#|Adds `~/.local/bin/ to $PATH|#
"export PATH=\"$PATH:$(du $HOME/.local/bin/ \\"
" | cut -f2 \\"
" | tr '\\n' ':' \\"
" | sed 's/:*$//')\""
"export SHELL"
#|If not running interactively, source /etc/profile if
we are in a ssh session otherwise, don't do anything|#
"if [[ $- != *i* ]]; then"
" [[ -n \"$SSH_CLIENT\" ]] && source /etc/profile"
" return"
"fi"
#|PS1 definition|#
(let* ((blue (cut colorize-string <> (color BLUE)))
(reset (cut colorize-string <> (color RESET))))
(string-append "PS1="
"'${GUIX_ENVIRONMENT:+[" (blue "env") " ${GUIX_ENVIRONMENT}]\\n}"
(blue "\\u") " at " (blue "\\W") " "
"$(git branch &>/dev/null && git branch 2>/dev/null | "
"sed -n \"s/* \\(.*\\)/on " (blue "\\1") (reset " /p\")> ") "'"))
#|Colors for TTY|#
(format #f "[ \"$TERM\" = \"linux\" ] && {\\~%~
~:{ echo -en \"\\e]P~@(~x~)\"'~a'~%~}~
}"
(map list (iota 16)
`(#|black |# "070707"
#|darkred |# "df6760"
#|darkgreen |# "8be760"
#|brown |# "ffd17a"
#|darkblue |# "9688d9"
#|darkmagenta|# "86adff"
#|darkcyan |# "86adff"
#|darkgrey |# "f1f1f1"
#|lightgrey |# "070707"
#|red |# "df6760"
#|green |# "8be760"
#|brown |# "ffd17a"
#|blue |# "9688d9"
#|magenta |# "86adff"
#|cyan |# "86adff"
#|white |# "f1f1f1")))
#|st window title|#
"trap 'printf \"\\033]0;%s\\007\" \"${BASH_COMMAND//[^[:print:]]/}\"' DEBUG")))
(define bash-profile
(plain-file "bash_profile"
(format #f "~@{~a~%~}"
". \"$GUIX_PROFILE/etc/profile\""
"[ \"$(tty)\" = \"/dev/tty1\" ] && sx 1>/dev/null 2>&1")))
(home-environment
(packages
(list #|admin |# neofetch
#|bash |# bash bash-completion
#|bittorrent |# aria2 qbittorrent
#|c |# c-intro-and-ref
#|calendar |# remind
#|disk |# lf ;Remove if I get used to dirvish
#|emacs |# emacs-next
#|emacs-xyz |#
#| • completion |# emacs-cape emacs-corfu emacs-corfu-doc
emacs-consult-lsp emacs-vertico
#| • centering |# emacs-olivetti
#| • file manager |# emacs-dirvish
#| • fuzzy-finder |# emacs-orderless
#| • guile |# emacs-geiser emacs-geiser-guile
emacs-macrostep-geiser emacs-geiser-eros
#| • guix |# emacs-guix emacs-direnv
#| • haunt |# emacs-ox-haunt
#| • icons |# emacs-all-the-icons
#| • irc |# emacs-circe
#| • kakoune |# emacs-kakoune emacs-phi-search-mc emacs-ryo-modal
#| • latex |# emacs-auctex emacs-latex-preview-pane
#| • linter |# emacs-flycheck emacs-flycheck-guile
#| • maps |# emacs-osm
#| • music player |# emacs-emms
#| • org |# emacs-org-bullets emacs-org-fragtog
emacs-org-present emacs-org-roam emacs-org-modern
#| • pulsar |# emacs-pulsar
#| • rss |# emacs-elfeed emacs-elfeed-org
#| • s-expressions |# emacs-lispy emacs-rainbow-delimiters
#| • ease config |# emacs-setup
#| • typing |# emacs-typing
#| • terminal |# emacs-eat
#|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
#|gtk |# guile-cairo
#|guile-xyz |# guile-irregex guile-machine-code guile-ncurses
guile-pipe guile-pfds guile-quickcheck guile-smc
guile-srfi-159 guile-srfi-189 haunt
#|image-viewers |# nsxiv
#|maths |# libqalculate
#|messaging |# toxic
#|package-management|# gwl
#|password-utils |# keepassxc
#|pdf |# zathura zathura-pdf-mupdf zathura-pdf-poppler
zathura-djvu
#|plotutils |# guile-charting
#|pulseaudio |# pulseaudio pamixer pavucontrol
#|python-xyz |# python-ueberzug
#|scheme |# sicp slib
#|ssh |# openssh
#|suckless |# lukesmithxyz-st
#|telegram |# telegram-desktop
#|tex |# texlive-amsfonts texlive-scheme-basic
texlive-beamer texlive-bibtex texlive-ec
texlive-latex-fonts texlive-graphics
texlive-float texlive-geometry texlive-minted
texlive-pdfx texlive-texinfo texlive-tools
texlive-unicode-math
#|tor |# tor
#|toys |# oneko
#|vesion-control |# git
#|video |# ffmpeg mpv yt-dlp
#|web-browsers |# nyxt
#|wm |# awesome-next
#|xdisorg |# maim redshift xbanish xclip xdotool xinit xsel
#|xorg |# setxkbmap xinput xf86-input-libinput
xf86-video-vesa xf86-video-fbdev xf86-video-intel
xkill xmodmap xorg-server xrdb xset))
(services
(list #|XDG services|#
(simple-service 'xdg-base-directories-service
home-xdg-base-directories-service-type
(home-xdg-base-directories-configuration
(cache-home "$HOME/.cache")
(config-home "$HOME/.config")
(data-home "$HOME/.local/share")
(runtime-dir "/run/user/1000")
(log-home "$HOME/.local/var/log")
(state-home "$HOME/.local/state")))
(simple-service 'xdg-user-directories-service
home-xdg-user-directories-service-type
(home-xdg-user-directories-configuration
(desktop "$HOME/desktop")
(documents "$HOME/documents")
(download "$HOME/.local/share/downloads")
(music "$HOME/music")
(pictures "$HOME/pictures")
(videos "$HOME/videos")
(publicshare "")
(templates "")))
(simple-service 'xdg-mime-applications-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"))
('nsxiv.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"))))))
#|Shepherd service|#
(service home-shepherd-service-type)
#|Shell services|#
(service home-bash-service-type
(home-bash-configuration
(guix-defaults? #f)
(bashrc (list bash-functions bashrc))
(bash-profile (list bash-profile))
(aliases
`(#|Common aliases|#
("df" . "df -h")
("diff" . "diff --color=auto")
("grep" . "grep --color=auto")
("ip" . "ip --color=auto")
("ls" . ,(format #f "ls --color=auto ~
--group-directories-first ~
--classify ~
-hlv"))
#|Make ln idempotent|#
("ln" . "ln -sfn")
#|Kakoune bindings for info|#
("info" . "info --init-file $XDG_CONFIG_HOME/infokeys")
#|Download music and videos with based formats|#
("m" . "yt-dlp --prefer-free-formats --extract-audio")
("v" . "yt-dlp --prefer-free-formats")
#|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" . "$XDG_CONFIG_HOME/lf/lfrun")
#|Make GPG xdg compliant|#
("gpg" . "gpg --homedir $XDG_DATA_HOME/gnupg")
#|Listen to libre music on vern's radio|#
("radio" . "https://radio.vern.cc")
#|Kakoune aliases for the shell|#
("':e'" . "kak")
("':q'" . "exit")))))
(simple-service 'environment-variables-service
home-environment-variables-service-type
`(#|Bash|#
("HISTFILE" . "$XDG_CACHE_HOME/bash/history")
("HISTSIZE" . "-1")
("HISTFILESIZE" . "-1")
#|Language|#
("LANG" . "en_US.UTF-8")
("LANGUAGE" . "en_US.UTF-8")
("LC_COLLATE" . "C")
#|Default applications|#
("EDITOR" . "kak")
("READER" . "zathura")
("VISUAL" . "kak")
("TERMINAL" . "st")
("BROWSER" . "icecat")
("PAGER" . "less")
("WM" . "awesome")
("FCEDIT" . "kak")
#|Xorg|#
("XINITRC" . "$XDG_CONFIG_HOME/X11/xinitrc")
#|Readline|#
("INPUTRC" . "$XDG_CONFIG_HOME/readline/inputrc")
#|GTK|#
("GTK_RC_FILES" . "$XDG_CONFIG_HOME/gtk-2.0/gtkrc")
#|Guile|#
;("GUILE_WARN_DEPRECATED" . "detailed")
("GUILE_HISTORY" . "$XDG_CACHE_HOME/guile/history")
("GUILE_LOAD_PATH" . ,(string-join
(cons "$HOME/projects/guile/radix/modules"
(map (cut string-append <> "/share/guile/site/3.0")
'("/run/current-system/profile"
"$XDG_CONFIG_HOME/guix/current"
"$HOME/.guix-home/profile")))
":" 'infix))
#|GUIX|#
("GUIX_PROFILE" . "$XDG_CONFIG_HOME/guix/current")
#|Other program settings|#
("RUNLEVEL" . "3")
("TERMINFO" . "$XDG_DATA_HOME/terminfo")
("GRADLE_USER_HOME" . "$XDG_DATA_HOME/gradle")
("RUSTUP_HOME" . "$XDG_DATA_HOME/rustup")
("CARGO_HOME" . "$XDG_DATA_HOME/cargo")
("GNUPGHOME" . "$XDG_DATA_HOME/gnupg")
("DOTREMINDERS" . "$XDG_DATA_HOME/reminders")))
(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"))))
(authorized-keys #f)))
#|Mcron service|#
(service home-mcron-service-type
(home-mcron-configuration
(jobs (list alarm-clock-job)))))))