;; This is an operating system configuration template for an i3+emacs setup.
;; Includes all the base packages that I have standardized on, plus a cron
;; job to trim the guix store.

(use-modules
 (gnu)
 (gnu system nss)
 (gnu packages admin)
 (gnu packages autotools)
 (gnu packages base)
 (gnu packages curl)
 (gnu packages compression)
 (gnu packages dns)
 (gnu packages emacs)
 (gnu packages file)
 (gnu packages fonts)
 (gnu packages gettext)
 (gnu packages gnome)
 (gnu packages gnupg)
 (gnu packages graphviz)
 (gnu packages image-viewers)
 (gnu packages imagemagick)
 (gnu packages libreoffice)
 (gnu packages linux)
 (gnu packages lisp)
 (gnu packages mail)
 (gnu packages mc)
 (gnu packages ncurses)
 (gnu packages nfs)
 (gnu packages ntp)
 (gnu packages password-utils)
 (gnu packages python)
 (gnu packages rsync)
 (gnu packages shells)
 (gnu packages sqlite)
 (gnu packages texinfo)
 (gnu packages version-control)
 (gnu packages web-browsers)
 (gnu packages wget)
 (gnu packages wm)
 (gnu packages xdisorg)
 (gnu packages xorg)
 (gnu services nfs)
 (gnu services ssh)
 (gnu services mcron)
 (gnu services networking)
 (guix gexp)
 (guix utils)
 (rnrs lists))
(use-service-modules desktop ssh)
(use-package-modules base certs wm screen java)

(define garbage-collector-job
  ;; Collect garbage 5 minutes after midnight every day.
  ;; The job's action is a shell command.
  #~(job "5 0 * * *"            ;Vixie cron syntax
         "guix gc -F 10G"))

(define %my-services
  (modify-services %desktop-services
		   (guix-service-type config =>
				      (guix-configuration
				       (inherit config)
				       (substitute-urls '("https://ci.guix.gnu.org"))))
		   (ntp-service-type config =>
				     (ntp-configuration
				      (servers '("ntp1.gardner.local"
						 "ntp2.gardner.local"
						 "ntp3.gardner.local"
						 "0.us.pool.ntp.org"
						 "1.us.pool.ntp.org"))))))


(operating-system
  (host-name "saturn")
  (timezone "US/Central")
  (locale "en_US.utf8")

  (bootloader (bootloader-configuration
                (bootloader grub-bootloader)
                (target "/dev/sda")))

  (file-systems (cons* (file-system
                        (device (file-system-label "rootfs"))
                        (mount-point "/")
                        (type "ext4"))
                       (file-system
                        (device (file-system-label "homefs"))
                        (mount-point "/home")
                        (type "ext4"))
                      %base-file-systems))

  (swap-devices '("/dev/sda4"))
  
  (users (cons (user-account
                (name "bgardner")
                (comment "Brant Gardner")
                (group "users")
                (supplementary-groups '("wheel" "netdev"
                                        "audio" "video"))
                (home-directory "/home/bgardner"))
               %base-user-accounts))

  ;; This is where we specify system-wide packages.
  (packages (cons* nss-certs         ;for HTTPS access
                   emacs git screen sbcl gnupg font-hack
		   password-store rsync gnu-make lynx nfs-utils
		   lm-sensors net-tools tree thermald
                   i3-wm i3status rofi xsel xrdb ncurses libreoffice
		   curl file dia network-manager-applet sqlite graphviz
		   feh exim procmail mc nitrogen imagemagick scrot
		   xautolock ntp automake autoconf unzip zip wget
		   gettext-minimal texinfo python python-2 xterm
		   (list isc-bind "utils") ; Secondary output
                   %base-packages))

  (services (cons*
	     (service mcron-service-type
		      (mcron-configuration
		       (jobs (list garbage-collector-job))))
             (service openssh-service-type (openssh-configuration))
	     %my-services))) ; see top of file for definition

Add a code snippet to your website: www.paste.org