;; This is an operating system configuration generated (use-modules (guix utils)) (use-modules (guix packages)) (use-modules (gnu services networking)) (use-modules (gnu services audio)) (use-modules (gnu) (gnu system nss)) (use-service-modules networking ssh) (use-package-modules bootloaders certs suckless wm) (use-service-modules desktop networking cups ssh xorg avahi mail) (use-package-modules certs gnome cups) (use-modules (gnu packages shells)) (use-modules (gnu packages vim)) (use-modules (gnu)) (use-package-modules screen) ;; other guix (use-modules (gnu system locale)) (use-modules (guix store)) (use-modules (rnrs lists)) (use-modules (srfi srfi-1)) (use-package-modules base idutils) (use-service-modules dns mcron messaging) (define (open-udev-lvm-device source target) "Return a gexp that maps SOURCES to TARGETS as a LVM device, using 'lvm'." (with-imported-modules (source-module-closure '((gnu build file-systems))) #~(let ((source #$source) (lvm-bin #$(file-append lvm2-static "/sbin/lvm"))) ;; Use 'lvm2-static', not 'lvm2', to avoid pulling the ;; whole world inside the initrd (for when we're in an initrd). (begin (format #t "Enabling ~a~%" #$target) (system* lvm-bin "vgchange" "-ay" (car (string-split #$target #\-))) (sleep 1) (zero? (system* lvm-bin "lvchange" "-aay" "-y" "--sysinit" "--ignoreskippedcluster" (string-join (string-split #$target #\-) "/"))))))) (define (close-udev-lvm-device sources target) "Return a gexp that closes TARGET, a LVM device." #~(zero? (system* #$(file-append lvm2-static "/sbin/lvm") "lvchange" "-an" "-y" (string-join (string-split #$target #\-) "/")))) ;; The type of LVM mapped devices. (define udev-lvm-device-mapping (mapped-device-kind (open open-udev-lvm-device) ;; (check check-udev-lvm-device) (close close-udev-lvm-device))) (define %local-fs-boot-efi-partition "/dev/sda1") (define %local-grub-ubuntu-menuentries (list (menu-entry (label "Ubuntu GNU/Linux") (linux "(lvm/tf1e5mXubuntu-boot)/vmlinuz") (linux-arguments '("root=/dev/mapper/tf1e5mXubuntu-root ro --verbose nosplash debug")) (initrd "(lvm/tf1e5mXubuntu-boot)/initrd.img")))) (define %localmachine-host-name "komputilo") (define %localmachine-account-uid 1000) (define %localmachine-account-user-name "s") (define %localmachine-account-comment "shyam") (define %localmachine-account-group-name "users") (define %localmachine-account-group-gid 1000) (define %localmachine-account-supplementry-groups '("wheel" "netdev" "audio" "video")) (define %localmachine-account-home-parent-directory "/home") (define %localmachine-account-shell #~(string-append #$zsh "/bin/zsh")) (define %localmachine-gdm-auto-login #f) (define %localmachine-gdm-allow-empty-password #t) (define %localmachine-account-create-home-directory #f) (define %localmachine-guix-substitute-urls '("https://ci.guix.gnu.org" "https://bayfront.guixsd.org" "http://guix.genenetwork.org" "https://guix.tobias.gr" "https://ci.guix.info/" ;; "https://berlin.guixsd.org" "https://berlin.guix.gnu.org")) (define %localmachine-guix-extra-options '( ;; "--max-jobs=2" ;; "--cores=1" "--gc-keep-derivations=yes" "--gc-keep-outputs=yes")) (define %localmachine-guix-use-substitutes #t) ;always true (define %localmachine-network-manager-dns "dnsmasq") (define %localmachine-default-realm #f) (use-modules (gnu packages linux)) (use-modules (guix modules)) (define (open-non-udev-lvm-device source targets) "Return a gexp that maps SOURCES to TARGETSS as a LVM device, using 'lvm'." (with-imported-modules (source-module-closure '((gnu build file-systems))) #~(let ((source #$source) (targets '#$targets) (lvm-bin #$(file-append lvm2-static "/sbin/lvm"))) ;; Use 'lvm2-static', not 'lvm2', to avoid pulling the ;; whole world inside the initrd (for when we're in an initrd). (begin (format #t "Enabling ~a~%" '#$targets) (sleep 1) (system* lvm-bin "vgscan" "--mknodes") (sleep 1) (map (lambda (file) (system* lvm-bin "vgchange" "-ay" (car (string-split file #\-)))) '#$targets) (sleep 1) (map (lambda (file) (zero? (system* lvm-bin "lvchange" "-aay" "-y" "--sysinit" "--ignoreskippedcluster" (string-join (string-split file #\-) "/")))) '#$targets) #t)))) (define (close-non-udev-lvm-device sources targets) "Return a gexp that closes TARGETS, a LVM device." #~(begin (map (lambda (file) (zero? (system* #$(file-append lvm2-static "/sbin/lvm") "lvchange" "-an" "-y" (string-join (string-split file #\-) "/")))) '#$targets) #t)) ;; The type of LVM mapped devices. (define non-udev-lvm-device-mapping (mapped-device-kind (open open-non-udev-lvm-device) ;; (check check-non-udev-lvm-device) (close close-non-udev-lvm-device))) (define %localmachine-mapped-device-guix-root (mapped-device (source "/dev/sda31") (target "guix-root") (type non-udev-lvm-device-mapping))) (define %localmachine-mapped-device-guix-boot (mapped-device (source "/dev/sda31") (target "guix-boot") (type non-udev-lvm-device-mapping))) (define %localmachine-mapped-device-guix-gnu (mapped-device (source "/dev/sda31") (target "guix-gnu") (type non-udev-lvm-device-mapping))) (define %localmachine-mapped-device-guix-swap (mapped-device (source "/dev/sda31") (target "guix-swap") (type non-udev-lvm-device-mapping))) (define %localmachine-mapped-device-guix-tmp (mapped-device (source "/dev/sda31") (target "guix-tmp") (type non-udev-lvm-device-mapping))) (define %localmachine-mapped-device-guix-var (mapped-device (source "/dev/sda31") (target "guix-var") (type non-udev-lvm-device-mapping))) (define %localmachine-mapped-device-house-home (mapped-device (source "/dev/test") (target "house-home") (type non-udev-lvm-device-mapping))) (define %localmachine-mapped-devices (list %localmachine-mapped-device-guix-root %localmachine-mapped-device-guix-boot %localmachine-mapped-device-guix-gnu %localmachine-mapped-device-guix-var %localmachine-mapped-device-guix-swap %localmachine-mapped-device-guix-tmp %localmachine-mapped-device-house-home)) ;;; guix system: error: service 'swap-/dev/mapper/guix-swap' requires 'device-mapping-guix-swap', which is not provided by any service (define %localmachine-swap-devices (list "/dev/mapper/guix-swap")) (define %localmachine-file-system-guix-root (file-system (mount-point "/") (device "/dev/mapper/guix-root") (type "ext4") (check? #f) (mount? #t) (create-mount-point? #t) (needed-for-boot? #t) (dependencies %localmachine-mapped-devices))) ;; (define %localmachine-file-system-guix-swap (file-system (mount-point "/xyz") ;; (device (string-append "/dev/mapper/guix-swap")) ;; (type "ext4") ;; (check? #f) ;; (mount? #f) ;; (create-mount-point? #f) ;; (needed-for-boot? #t) ;; (dependencies %localmachine-mapped-devices))) (define %localmachine-file-system-guix-boot (file-system (mount-point "/boot") (device "/dev/mapper/guix-boot") (type "ext4") (check? #f) (mount? #t) (create-mount-point? #t) (needed-for-boot? #t) (dependencies (append (list %localmachine-file-system-guix-root) %localmachine-mapped-devices)))) (define %localmachine-file-system-guix-gnu (file-system (mount-point "/gnu") (device "/dev/mapper/guix-gnu") (type "ext4") (check? #f) (mount? #t) (create-mount-point? #t) (needed-for-boot? #t) (dependencies (append (list %localmachine-file-system-guix-root) %localmachine-mapped-devices)))) (define %localmachine-file-system-guix-tmp (file-system (mount-point "/tmp") (device "/dev/mapper/guix-tmp") (type "ext4") (check? #f) (mount? #t) (create-mount-point? #t) (needed-for-boot? #t) (dependencies (append (list %localmachine-file-system-guix-root) %localmachine-mapped-devices)))) (define %localmachine-file-system-guix-var (file-system (mount-point "/var") (device "/dev/mapper/guix-var") (type "ext4") (check? #f) (mount? #t) (create-mount-point? #t) (needed-for-boot? #t) (dependencies (append (list %localmachine-file-system-guix-root) %localmachine-mapped-devices)))) (define %localmachine-file-system-house-home (file-system (mount-point "/home") (device "/dev/mapper/house-home") (type "ext4") (check? #f) (mount? #t) (create-mount-point? #t) (needed-for-boot? #f) (dependencies (append (list ;; %localmachine-file-system-guix-root ) %localmachine-mapped-devices)))) (define %localmachine-file-system-boot-efi (file-system (mount-point "/boot/efi") (device "/dev/sda1") (mount? #t) (create-mount-point? #t) (needed-for-boot? #t) (type "vfat") (dependencies (append (list %localmachine-file-system-guix-boot %localmachine-file-system-guix-root) %localmachine-mapped-devices)))) (define %localmachine-lvm-mount-home-file-systems %localmachine-file-system-house-home) (define %localmachine-mount-lvm-system-file-systems (list %localmachine-file-system-guix-root ;; %localmachine-file-system-guix-swap %localmachine-file-system-guix-boot %localmachine-file-system-guix-gnu %localmachine-file-system-guix-tmp %localmachine-file-system-guix-var)) (define %localmachine-lvm-system-file-systems (append %localmachine-mount-lvm-system-file-systems %localmachine-lvm-mount-home-file-systems)) (define %localmachine-lvm-file-systems (append %localmachine-lvm-system-file-systems)) (define %localmachine-other-file-systems (list %localmachine-file-system-boot-efi)) (define %localmachine-file-systems (append %localmachine-lvm-file-systems %localmachine-other-file-systems %base-file-systems)) ;; packages (use-modules (gnu packages glib)) (define %localmachine-other-packages (list "polkit" "polkit-gnome" "autorandr" "xmodmap" "hplip" "simple-scan" "xsane" "sane-backends" "sane-backends-minimal" "glib-networking" "xf86-input-evdev")) (define %localmachine-system-selected-package-names (list "glibc-utf8-locales" "gdm" "gpm" "slock" ; need suid "zsh" "stumpwm" "sbcl-stumpwm-cpu" "sbcl-stumpwm-mem" "sbcl-stumpwm-numpad-layouts" "sbcl-stumpwm-screenshot" "sbcl-stumpwm-winner-mode" "guile-wm" "windowmaker" ;; "findutils" "idutils" "dovecot" "xinput" "ibus" "m17n-lib" "m17n-db" ;; "twm" ;; "herbstluftwm" "ecryptfs-utils")) (define %localmachine-package-names-for-installation (append %localmachine-other-packages %localmachine-system-selected-package-names)) (define %localmachine-system-desktop-packages (list lvm2 ;; for HTTPS access nss-certs ;; for user mounts gvfs)) (define %localmachine-system-selected-packages (map specification->package %localmachine-package-names-for-installation)) (define %localmachine-system-packages (append %localmachine-system-desktop-packages %localmachine-system-selected-packages)) (define %localmachine-reinit-packages (append %localmachine-system-packages %base-packages)) (define %localmachine-packages %localmachine-reinit-packages) (define %localmachine-keyboard-layout (keyboard-layout "us" "altgr-intl")) (define %localmachine-grub-ubuntu-menuentries %local-grub-ubuntu-menuentries) (define %localmachine-efi-bootloader (bootloader-configuration (bootloader grub-efi-bootloader) (target "/boot/efi") (keyboard-layout %localmachine-keyboard-layout) (menu-entries %localmachine-grub-ubuntu-menuentries))) (define %localmachine-metal-initrd base-initrd) (define %localmachine-simple-groups (list (user-group (name %localmachine-account-group-name) (id %localmachine-account-group-gid)))) (define %localmachine-groups (append %localmachine-simple-groups %base-groups)) (define %localmachine-simple-users (list (user-account (uid %localmachine-account-uid) (name %localmachine-account-user-name) (comment %localmachine-account-comment) (group %localmachine-account-group-name) (supplementary-groups %localmachine-account-supplementry-groups) (create-home-directory? %localmachine-account-create-home-directory)))) (define %localmachine-users (append %localmachine-simple-users %base-user-accounts)) ;; Vixie cron schedular (define updatedb-job ;; Run 'updatedb' at 3AM every day. Here we write the ;; job's action as a Scheme procedure. #~(job '(next-hour '(3)) (lambda () (execl (string-append #$findutils "/bin/updatedb") ;; "updatedb" "--prunepaths=`/tmp /var/tmp /gnu/store /run'")))) (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 1G")) (define idutils-job ;; Update the index database as user "charlie" at 12:15PM ;; and 19:15PM. This runs from the user's home directory. #~(job '(next-minute-from (next-hour '(12 19)) '(15)) (string-append #$idutils "/bin/mkid src") #:user "s")) (define %localmachine-publish-services (list (service guix-publish-service-type (guix-publish-configuration (advertise? #t) (compression '(("lzip" 7) ("gzip" 9))) (cache "/var/cache/guix/publish") (cache-bypass-threshold (* 100 1024 1024)) (ttl (* 3 24 60 60)))))) ;; https ://guix.gnu.org/manual/en/html_node/Scheduled-Job-Execution.html (define %localmachine-mcron-services (list (service mcron-service-type (mcron-configuration (jobs (list garbage-collector-job ;; idutils-job updatedb-job)))))) (define %localmachine-bitlbee-services (list (service bitlbee-service-type))) (define %localmachine-mail-aliases-services (list (service mail-aliases-service-type '(("postmaster" "bob") ("bob" "bob@example.com" "bob@example2.com"))))) (define %localmachine-dovecot-services (list (dovecot-service #:config (dovecot-configuration (mail-location "maildir:~/.maildir") (listen '("127.0.0.1")))))) (define %localmachine-exim-services (list (service exim-service-type (exim-configuration (config-file #f))))) (define %localmachine-dnsmasq-services (list (service dnsmasq-service-type (dnsmasq-configuration (no-resolv? #t) ;; (resolv-file) ;; (no-resolv? #f) ;; (servers '("82.196.9.45" ;; "51.255.48.78" ;; "51.15.98.97")) (local-service? #t))))) (define %localmachine-network-manager-services (list (service network-manager-service-type (network-manager-configuration (dns %localmachine-network-manager-dns))))) (define %localmachine-avahi-services (list (service avahi-service-type))) (define %localmachine-gpm-services (list (service gpm-service-type))) (define %localmachine-audio-services (list (service mpd-service-type (mpd-configuration (user %localmachine-account-user-name) (music-dir "~/Music"))))) ;; https://github.com/alezost/guix-config/blob/master/system-config/os-main.scm (define %localmachine-mingetty-services (list (service mingetty-service-type (mingetty-configuration (tty "tty1"))) (service mingetty-service-type (mingetty-configuration (tty "tty2"))) (service mingetty-service-type (mingetty-configuration (tty "tty3"))) (service mingetty-service-type (mingetty-configuration (tty "tty4"))) (service mingetty-service-type (mingetty-configuration (tty "tty5"))) (service mingetty-service-type (mingetty-configuration (tty "tty6"))))) (define %localmachine-cups-services (list (service cups-service-type (cups-configuration (web-interface? #t) (default-paper-size "A4") (extensions (list cups-filters hplip-minimal)))))) (define %localmachine-polkit-services (list)) ;; services modifications (define %localmachine-desktop-nm-services (modify-services %localmachine-desktop-nm-services (gdm-service-type config => (gdm-configuration (inherit config) (xorg-configuration (xorg-configuration (keyboard-layout %localmachine-keyboard-layout))) (allow-empty-passwords? %localmachine-gdm-allow-empty-password) (auto-login? %localmachine-gdm-auto-login) (default-user %localmachine-account-user-name))))) ;; services add (define %localmachine-desktop-services %localmachine-desktop-nm-services) (define %localmachine-network-services (list (service openssh-service-type) (service tor-service-type))) (define %localmachine-heavy-wm-services (list (service gnome-desktop-service-type) (service xfce-desktop-service-type) (service mate-desktop-service-type) (service enlightenment-desktop-service-type))) (define %localmachine-many-services (append %localmachine-network-services %localmachine-heavy-wm-services)) (define %localmachine-few-services (append (list (service gnome-desktop-service-type)) %localmachine-network-services)) (define %localmachine-simple-services %localmachine-few-services) (define %localmachine-simple-and-desktop-services (append %localmachine-simple-services %localmachine-mail-aliases-services %localmachine-dovecot-services %localmachine-gpm-services %localmachine-audio-services %localmachine-publish-services %localmachine-mcron-services %localmachine-cups-services %localmachine-polkit-services %localmachine-bitlbee-services %localmachine-desktop-services)) (define %localmachine-base-services %base-services) (define %localmachine-final-services %localmachine-simple-and-desktop-services) (define %localmachine-services %localmachine-final-services) (define %localmachine-firmware %base-firmware) (define %localmachine-locale "en_US.utf8") (define %localmachine-locate-names (list "en_US" "hi_IN" "ur_PK" "fa_IR" "ar_SA")) (define %localmachine-all-locale-definitions (map (lambda (locale) (locale-definition (source locale) (name (string-append locale "." "utf8")))) %localmachine-locate-names)) (define %localmachine-locale-definitions (append %localmachine-all-locale-definitions %default-locale-definitions)) (define %localmachine-timezone "Asia/Kolkata") (define %localmachine-bootloader %localmachine-efi-bootloader) (define %localmachine-initrd %localmachine-metal-initrd) ;; (define %localmachine-setuid-programs %setuid-programs) (define %localmachine-setuid-programs (cons* #~(string-append #$ecryptfs-utils "/sbin/mount.ecryptfs_private") %setuid-programs)) (define %localmachine-kernel linux-libre) (operating-system (kernel %localmachine-kernel) (kernel-arguments '(" modprobe.blacklist=usbmouse,usbkbd --verbose nosplash debug")) (firmware %localmachine-firmware) (initrd %localmachine-initrd) (locale %localmachine-locale) (locale-definitions %localmachine-locale-definitions) (timezone %localmachine-timezone) (keyboard-layout %localmachine-keyboard-layout) (host-name %localmachine-host-name) (setuid-programs %localmachine-setuid-programs) (mapped-devices %localmachine-mapped-devices) (users %localmachine-users) (groups %localmachine-groups) (file-systems %localmachine-file-systems) (swap-devices %localmachine-swap-devices) (bootloader %localmachine-bootloader) (packages %localmachine-packages) (services %localmachine-services) ;; Allow resolution of '.local' host names with mDNS. (name-service-switch %mdns-host-lookup-nss))