(use-modules ((ice-9 textual-ports) #:prefix textual-ports:) ((guix licenses) #:prefix licenses:) ((xyz euandreh heredoc) #:prefix heredoc:) (gnu) (gnu home) (gnu home services) (gnu home services mcron) (gnu home services shells) (gnu home services shepherd) (gnu home services syncthing) (gnu home services xdg) (guix build-system cmake) (guix build-system gnu) (guix build-system pyproject) (guix build-system python) (guix build-system perl) (guix build-system trivial) (guix download) (guix git-download) (guix packages) (guix utils)) (use-package-modules freedesktop messaging python-build wm xdisorg) (heredoc:enable-syntax) (define (slurp name) (string-trim-both (call-with-input-file name textual-ports:get-string-all))) (define (script name content) (package (name name) (version "latest") (source #f) (build-system trivial-build-system) (arguments `(#:modules ((guix build utils)) #:builder (begin (use-modules (guix build utils)) (let* ((bin (string-append %output "/bin")) (prog (string-append bin "/" ,name))) (mkdir-p bin) (call-with-output-file prog (lambda (port) (format port "~a" ,content))) (chmod prog #o755))))) (home-page "") (synopsis "") (description "") (license #f))) (define cronjobs (list #~(job "0 0 * * *" "cronjob check") #~(job "0 1 * * *" "cronjob backup -q cron") #~(job "0 2 * * 0" "cronjob gc") #~(job "0 3 * * *" "cronjob reconfigure -U"))) (define (home-service name package bin) (service-type (name name) (extensions (list (service-extension home-shepherd-service-type (lambda _ (list (shepherd-service (provision (list name)) (documentation (format #f "Shepherd service that manages ~a." name)) (start #~(make-forkexec-constructor (list #$(file-append package bin)))) (stop #~(make-kill-destructor)))))) (service-extension home-profile-service-type (lambda _ (list package))))) (default-value '()) (description (format #f #"- Service that runs ~a as a daemon under Shepherd. It has no configuration."# name)))) (define xdg-prefix "$HOME/.usr") (define (xdg path) (string-append xdg-prefix "/" path)) (home-environment (packages (append (map (compose list specification->package+output symbol->string) '(nss-certs nss:bin glibc-locales bash coreutils findutils diffutils time grep sed tar gawk bc man-pages man-pages-posix bash-completion ;; amber gperf bison gdb git git:send-email git:gui git-open git-remote-gcrypt mercurial fossil darcs cssc rcs cvs subversion quilt ;; urubu gperftools ;; venci ncurses ncurses:doc bdb nvi vis libx11 ;; lixo meson ninja flex gettext libelf sharutils libomp doxygen unzip dvd+rw-tools xorriso ;; refs universal-ctags global cscope ;; lime nasm ;; pilotis pandoc ;; papo node sqlite node-sqlite3 lighttpd hexchat weechat ;; adoc asciidoc ;; Arduino minicom python-pyserial wget tmux tmux-plugin-resurrect tmux-plugin-continuum texinfo gnupg age minisign libsodium rsync sshfs tree mailutils-sendmail pulseaudio password-store playerctl pinentry-gtk2 diffoscope bmake make autoconf automake libtool pcre:out pcre:bin pcre:doc pcre:static pcre2 avahi libgcrypt qbe cproc blktrace readline lokke pkg-config fzf blueman pavucontrol ledger gnuplot bind:utils netcat socat curl curl:doc xclip cloc strace file urlscan rlwrap direnv borg feh sox xset graphviz moreutils shellcheck lilypond groff groff:doc grap apl dyalog-apl ghostscript enscript jq units trash-cli lsof autojump qpdf perf-tools acl attr cryptsetup btrfs-progs frama-c go go-github-com-mattn-go-sqlite3 clojure clojure-tools leiningen openjdk perl perl-json perl-commonmark perl-aliased perl-uri-escape clinfo pocl opencl-icd-loader pciutils usbutils python-pyopencl python-pandas python-scikit-learn python python-slixmpp python-unidecode python-pytest-cov python-pytest-xdist python-requests python-beautifulsoup4 python-docx python-telegram-bot valgrind gcc-toolchain cppcheck clang tcc xrandr arandr sbcl gcl ecl clisp ccl abcl tabbed st i3status scrot xmessage dmenu xmodmap brightnessctl xss-lock libnotify espeak-ng procps htop util-linux gzip xz psmisc less nano patch youtube-dl ripgrep vlc font-openmoji syncthing-gtk keepassxc cheese ; webcam gpodder mate-calc telegram-desktop zathura zathura-djvu zathura-pdf-poppler zathura-ps transmission transmission:gui audacity quodlibet icedove netsurf firefox)) (list (script "cronjob" (slurp (string-append (getenv "XDG_CONFIG_HOME") "/sh/cronjob.sh")))))) (services (list (service (home-service 'clipmenu clipmenu "/bin/clipmenud")) (service (home-service 'dunst dunst "/bin/dunst")) (service (home-service 'poweralertd poweralertd "/bin/poweralertd")) (service home-xdg-base-directories-service-type (home-xdg-base-directories-configuration (cache-home (xdg "var/cache")) (config-home (xdg "etc")) (data-home (xdg "share")) (log-home (xdg "var/log")) (state-home (xdg "var/state")))) (service home-syncthing-service-type) (simple-service 'my-shell-profile home-shell-profile-service-type (list (plain-file "my-profile" (format #f #"- export XDG_PREFIX="~a" . "$XDG_CONFIG_HOME"/sh/rc"# xdg-prefix)))) (service home-mcron-service-type (home-mcron-configuration (jobs cronjobs))))))