;; Copyright (C) 2021 Denis 'GNUtoo' Carikli ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . (use-modules (gnu) (gnu system mapped-devices) (gnu system nss) (guix build-system gnu) (guix git-download) ((guix licenses) #:prefix license:) (guix packages)) (use-package-modules admin android audio autotools base bash bison bootloaders certs commencement compression cryptsetup databases disk display-managers emacs emacs-xyz file flashing-tools freedesktop gnome gnupg linux mail mpd networking ncurses package-management patchutils pulseaudio python rsync screen ssh terminals tls tor version-control video vim virtualization web web-browsers wm xdisorg xfce xorg) (use-service-modules databases desktop mail networking sound virtualization xorg) (define-public fdm-git (package (name "fdm-git") (version "2.0+25") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/nicm/fdm") (commit "c245d210a5b0049f48c78e40af44d2889ecf217f"))) (file-name (git-file-name name version)) (sha256 (base32 "06al4rs11c859zwfqknicn31nz66w1g73bsb61463dk12q06pwy7")))) (build-system gnu-build-system) (inputs `(("tdb" ,tdb) ("openssl" ,openssl) ("zlib" ,zlib))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) ("bison-3.6" ,bison-3.6))) (home-page "https://github.com/nicm/fdm") (synopsis "Mail Retrieval Agent (MRA) and Mail Delivery Agent (MDA)") (description "fdm is a program designed to fetch mail from POP3 or IMAP servers, or receive local mail from stdin, and deliver it in various ways.") (license ;; Why point to a source file? Well, all the individual files have a ;; copy of this license in their headers, but there's no seprate file ;; with that information. (license:non-copyleft "https://github.com/nicm/fdm/blob/master/command.c")))) (define %lvm-vg (list (mapped-device (source (uuid "fd8d9fd8-56a5-4c61-9f6e-35371ff964f0")) (target "internal-cleartext") (type luks-device-mapping)) (mapped-device (source "primary_laptop") (targets (list "primary_laptop-guix32")) (type lvm-device-mapping)))) (define %guix32-rootfs (file-system (device "/dev/mapper/primary_laptop-guix32") (mount-point "/") (type "ext4") (dependencies %lvm-vg))) (define %parabola32-rootfs (file-system (mount-point "/srv/distros/parabola32") (device "/dev/mapper/primary_laptop-parabola32") (type "ext4") (dependencies %lvm-vg) (create-mount-point? #t) (mount-may-fail? #t))) (define (parabola32-bind-mount path) (file-system (mount-point path) (device (string-append "/srv/distros/parabola32" path)) (type "none") (dependencies (list %parabola32-rootfs)) (flags '(bind-mount)) (create-mount-point? #t) (mount-may-fail? #t))) (operating-system (host-name "primary_laptop") (timezone "Europe/Paris") (locale "en_US.utf8") (kernel-arguments (append (list "iomem=relaxed" "modprobe.blacklist=pcspkr" "quiet"))) (initrd-modules (cons "i915" %base-initrd-modules)) (keyboard-layout (keyboard-layout "us" "altgr-intl")) (bootloader (bootloader-configuration (bootloader (bootloader (inherit grub-bootloader) (installer #~(const #t)))) (keyboard-layout keyboard-layout))) (mapped-devices %lvm-vg) (file-systems (append (list %guix32-rootfs %parabola32-rootfs (parabola32-bind-mount "/home/gnutoo") (parabola32-bind-mount "/root") (parabola32-bind-mount "/etc/ssh/ssh_config") (parabola32-bind-mount "/etc/gitconfig") (parabola32-bind-mount "/etc/git/") (parabola32-bind-mount "/etc/wpa_supplicant/") (parabola32-bind-mount "/srv/http/") (parabola32-bind-mount "/srv/kiwix/") (parabola32-bind-mount "/usr/local/bin/") (parabola32-bind-mount "/var/lib/postgres/")) %base-file-systems)) (users (cons* (user-account (name "gnutoo") (uid 1000) (group "gnutoo") (supplementary-groups '("wheel" "netdev" "audio" "video"))) (user-account (name "postgres") (uid 88) (group "postgres") (comment "PostgreSQL user") (home-directory "/var/lib/postgres") (shell (file-append bash "/bin/bash")) (system? #t)) %base-user-accounts)) (groups (cons* (user-group (name "gnutoo") (id 1000)) (user-group (name "postgres") (id 88) (system? #t)) %base-groups)) (hosts-file (local-file "etc/hosts")) (packages (append (list alsa-utils adb abootimg android-udev-rules autoconf automake bash-completion bemenu claws-mail cryptsetup ddrescue dosfstools dovecot elogind emacs fastboot fdm-git file flashrom fluxbox gnu-make guix gcc-toolchain gdm git glibc ;; for the utilities gnupg grub heimdall htop ;; kiwix-tools libtool links lvm2 lzip meld midori mkbootimg mpd mpd-mpc mplayer myrepos nbd ncurses net-tools netcat-openbsd nss-certs openssh picocom pinentry pulseaudio python ponymix redshift rsync screen sshfs strace sway terminator tor udisks vim virt-manager vlc waybar wayland wpa-supplicant xauth xfce4-screensaver xfce4-session xf86-input-keyboard xf86-input-libinput xf86-video-intel xinit xorg-server xrandr) %base-packages)) (services (append (list (dovecot-service #:config (dovecot-configuration (mail-location "maildir:~/.local/Maildir") (listen '("127.0.0.1")))) (service alsa-service-type) (service dhcp-client-service-type) (service elogind-service-type) (service gdm-service-type (gdm-configuration (debug? #t) ;; (wayland? #t) )) (service libvirt-service-type (libvirt-configuration)) (service postgresql-service-type (postgresql-configuration (postgresql postgresql-13.3) (data-directory "/var/lib/postgres/data") (config-file (postgresql-config-file (hba-file (plain-file "pg_hba.conf" (string-append "# TYPE DATABASE USER ADDRESS\n" " local all all trust\n"))) (extra-config '(("max_connections" 100) ("shared_buffers" "128 MB") ("dynamic_shared_memory_type" "posix") ("max_wal_size" "1 GB") ("min_wal_size" "80 MB") ("log_timezone" "Europe/Paris") ("datestyle" "iso, dmy") ("timezone" "Europe/Paris") ("lc_messages" "en_US.UTF-8") ("lc_monetary" "en_US.UTF-8") ("lc_numeric" "en_US.UTF-8") ("lc_time" "fr_FR.UTF-8") ("default_text_search_config" "pg_catalog.english"))))))) (service pulseaudio-service-type) (service tor-service-type (tor-configuration)) (udisks-service) (service xfce-desktop-service-type)) %base-services)))