(use-modules ((ice-9 textual-ports) #:prefix textual-ports:) ((guix licenses) #:prefix licenses:) ((xyz euandreh heredoc) #:prefix heredoc:) ((org euandre queue) #:prefix q:) (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 c flex freedesktop gcc messaging musl python-build wm video xdisorg xml) (heredoc:enable-syntax) (define tiniercc (package (inherit tcc) (name "tiniercc") (arguments (substitute-keyword-arguments (package-arguments tcc) ((#:tests? _ #f) #f) ((#:configure-flags _) #~(list "--enable-static" "--config-musl" (string-append "--crtprefix=" #$(file-append musl "/lib")))) ((#:phases phases) #~(modify-phases #$phases (add-after 'install 'ln-alias (lambda _ (symlink (string-append #$out "/bin/tcc") (string-append #$out "/bin/cc")) (symlink (string-append #$out "/bin/tcc") (string-append #$out "/bin/c99")))))))) (native-inputs (modify-inputs (package-native-inputs tcc) (append which))))) (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 backupit -q cron") #~(job "0 2 * * 0" "cronjob gc") #~(job "0 3 * * *" "cronjob reconfigure") #~(job "0 7 * * *" "cronjob guix pull -v3"))) (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:out nss:bin glibc-locales bash coreutils findutils diffutils time grep sed tar gawk bc man-pages man-pages-posix bash-completion ;; amber gperf flex bison byacc gdb git:out git:send-email git:gui git:subtree git-open git-remote-gcrypt git-lfs mercurial fossil darcs cssc rcs cvs subversion quilt ;; urubu gperftools ;; venci ncurses:out ncurses:doc bdb nvi vis libx11:out libx11:doc libxft freetype fontconfig freetype motif ;; 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 sqlitex scryptkdf lighttpd hexchat weechat ;; adoc asciidoc ruby-asciidoctor ;; Arduino minicom python-pyserial wget tmux tmux-plugin-resurrect tmux-plugin-continuum texinfo gnupg age minisign libsodium rsync cryfs sshfs tree mailutils-sendmail smartmontools pulseaudio password-store playerctl pinentry-gtk2 diffoscope disorderfs reprotest diff-so-fancy bmake make tup autoconf automake libtool pcre:out pcre:bin pcre:doc pcre:static pcre2 avahi libgcrypt qbe cproc doxygen gperf blktrace editline readline gmp help2man libtomcrypt libtommath lz4 lokke meson ninja sparse ant mpc maven pkg-config pkgconf fzf blueman pavucontrol ledger gnuplot bind:out bind:utils arp-scan tcpdump nmap stunnel netcat siege socat curl:out curl:doc xclip cloc strace file ;; urlscan ; conflicts rlwrap direnv borg khal khard libfaketime qrencode ;; needed by qr(1) feh chafa sox xset graphviz moreutils shellcheck gettext lilypond groff:out groff:doc grap apl ;; dyalog-apl ; broken ghostscript enscript jq xmlstarlet recutils units trash-cli lsof autojump powertop timidity++ cmake makefile2graph po4a mdpo gron reptyr qpdf xpdf perf-tools scdoc rpm pax-utils dpkg fakeroot cpio pv httpd ;; for htpasswd acl attr smem entr inotify-tools cryptsetup btrfs-progs sysstat rrdtool tcl z3 frama-c clojure clojure-core-async clojure-core-cache clojure-core-match clojure-core-memoize clojure-data-priority-map clojure-tools clojure-tools-cli clojure-tools-logging clojure-tools-macro clojure-tools-reader clojure-test-check leiningen openjdk sharutils perl perl-json perl-commonmark perl-aliased perl-uri-escape perl-uri-escape clinfo pocl opencl-icd-loader pciutils usbutils python-pyopencl python-pandas ;; python-scikit-learn ; conflicts with python-requests python python-slixmpp python-unidecode python-pytest-cov python-requests python-beautifulsoup4 python-docx python-telegram-bot valgrind go-full ;; gm2 ; broken: not exported from channel gcc-toolchain:out gcc-toolchain:debug gcc-toolchain:static cppcheck clang ;; musl pcc compcert quickjs m4 xrandr arandr fswatch lvm2 ;; for dmsetup(8) sbcl gcl ecl clisp ccl abcl janet kawa chez-scheme racket chibi-scheme tabbed st i3status scrot xmessage dmenu xmodmap xev brightnessctl xss-lock libnotify espeak-ng procps htop util-linux gzip xz psmisc less nano patch yt-dlp ripgrep mpvx imagemagick cups libreoffice vlc font-openmoji syncthing-gtk keepassxc cheese ; webcam gpodder mate-calc telegram-desktop zathura zathura-djvu zathura-pdf-poppler zathura-ps transmission:out transmission:gui audacity quodlibet icedove netsurf ;; ungoogled-chromium anki firefox)) (list tiniercc) (list (script "cronjob" (slurp (string-append (getenv "HOME") "/.usr/etc/sh/cronjob.sh")))))) (services (append %base-home-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)))))))