#+title: Configuration of the Aisaka computer -*- mode: org -*- #+startup: overview #+property: header-args:scheme :noweb yes #+property: header-args:scheme+ :noweb-prefix no * TODO LIBREBOOT The first layer of computing is the firmware. The Lenovo Thinkpad X200 has a free Libreboot firmware installed. It is a good idea to keep it up to date. ** TODO Flashrom Flashrom program is needed to write the computer firmware. The program needs a relaxed kernel security feature. #+begin_src scheme :noweb-ref flashrom-package (service (service-type (name 'flashrom-package) (extensions `(,(service-extension home-profile-service-type (lambda (_) (map specification->package '("flashrom")))))) (description "Flashrom installation.") (default-value #f))) #+end_src * TODO File Systems This system has a very simple file system - a boot partition, main partition for everything else and swap. The main partition is encrypted. ** Mapped Devices Data encryption layer, password protected. The LUKS encryption type is used. #+begin_src scheme :noweb-ref luks (mapped-device (source (uuid "887ac37f-2919-41a0-a62a-e1ff5ea2d6cc")) (target "aisaka-root") (type luks-device-mapping)) #+end_src ** File Systems The data is split into an unencrypted boot partition and encrypted root filesystem. *** Root File System The root filesystem is mounted on the encryption layer. Its type is BTRFS. #+begin_src scheme :noweb-ref rootfs (file-system (mount-point "/") (device "/dev/mapper/aisaka-root") (type "btrfs") (dependencies mapped-devices)) #+end_src *** Boot File System The boot partition is on EXT4 filesystem. #+begin_src scheme :noweb-ref bootfs (file-system (mount-point "/boot") (device (uuid "4f77b5fc-56ad-43ae-b6ec-e5adc8c48587")) (type "ext4")) #+end_src ** Swap Devices Swap takes half the storage space in order to facilitate edge cases of memory without overprovisioning, as well as to prolog the lifetime of SSD. #+begin_src scheme :noweb-ref swap (swap-space (target (uuid "73bed3f9-be07-40ad-a228-577cd24f2e1d"))) #+end_src * TODO System Servers ** TODO Secure Shell #+begin_src scheme :noweb-ref ssh-server :tangle services/ssh-server.scm (define-module (ssh-server) #:use-module (gnu) #:use-module (gnu home) #:use-module (gnu home services) #:use-module (gnu services ssh)) <> <> #+end_src *** TODO SSH Installation #+begin_src scheme :noweb-ref ssh-service (define-public ssh-service (service openssh-service-type)) #+end_src *** TODO SSH Configuration #+begin_src scheme :noweb-ref ssh-configuration (define-public ssh-configuration (simple-service 'ssh-configuration* home-files-service-type `((".ssh/config" ,(local-file "../ssh.config"))))) #+end_src * TODO Desktop Environment Sway is the currently chosen operating environment. ** TODO Sway Window Manager The Sway Window Manager consists of Sway packages and relevant configurations. #+begin_src scheme :noweb-ref sway :tangle services/sway.scm (add-to-load-path "./services") (define-module (sway) #:use-module (gnu) #:use-module (gnu home) #:use-module (gnu home services) #:use-module (gnu home services shells)) <> <> #+end_src *** TODO Sway Installation #+begin_src scheme :noweb-ref sway-packages (define-public sway-packages (service (service-type (name 'sway-packages) (extensions `(,(service-extension home-profile-service-type (lambda (_) (map specification->package '("sway" "waybar")))))) (description "Sway Window Manager installation.") (default-value #f)))) #+end_src *** TODO Sway configuration #+begin_src scheme :noweb-ref sway-configuration (define-public sway-configuration (simple-service 'configuration-files home-files-service-type `((".config/sway/config" ,(local-file "../sway.config")) (".config/waybar/config" ,(local-file "../waybar.config"))))) #+end_src * imported configuration dump ** TODO System configuration #+begin_src scheme :noweb-ref system-dump :tangle system-configuration.scm (add-to-load-path "./services") (define-module (aisaka-system-configuration) #:use-module (gnu) #:use-module (gnu packages cups) #:use-module (gnu packages finance) #:use-module (gnu services cups) #:use-module (gnu services configuration) #:use-module (gnu services desktop) #:use-module (gnu services networking) #:use-module (gnu services ssh) #:use-module (gnu services xorg) #:use-module (ssh-server)) (define keyboard-layout (keyboard-layout "pl")) (operating-system (locale "pl_PL.utf8") (timezone "Europe/Warsaw") (keyboard-layout keyboard-layout) (host-name "aisaka") (users (cons* (user-account (name "marek") (comment "Marek Paśnikowski") (group "users") (home-directory "/home/marek") (supplementary-groups '("audio" "netdev" "tor" "video" "wheel"))) %base-user-accounts)) (packages (append (map (compose list specification->package+output) '("netcat-openbsd" "nss-certs" "ntfs-3g" "trezord" "trezord-udev-rules")) %base-packages)) (services (cons* ssh-service (service cups-service-type (cups-configuration (extensions `(,cups-filters ,epson-inkjet-printer-escpr)) (web-interface? #t))) (service tor-service-type (tor-configuration (config-file (local-file "torrc")) (control-socket? #t))) (udev-rules-service 'trezord trezord-udev-rules) (modify-services %desktop-services (elogind-service-type configuration => (elogind-configuration (inherit configuration) (handle-lid-switch 'ignore))) (delete gdm-service-type)))) (bootloader (bootloader-configuration (bootloader grub-bootloader) (targets '("/dev/sda")) (keyboard-layout keyboard-layout))) (swap-devices `(,<>)) (mapped-devices `(,<>)) (file-systems (append %base-file-systems `(,<> ,<>)))) #+end_src ** TODO Home configuration #+begin_src scheme :noweb-ref home-dump :tangle home-configuration.scm (add-to-load-path "./services") (define-module (aisaka-home-configuration) #:use-module (gnu home) #:use-module (gnu home services) #:use-module (gnu home services shells) #:use-module (gnu packages) #:use-module (gnu services) #:use-module (guix gexp) #:use-module (ssh-server) #:use-module (sway)) (define allow-downgrades "--allow-downgrades ") (define config-prefix "/home/marek/src/guix-config/") (define pull-guix "guix pull ") (define pull-guix- (string-append pull-guix allow-downgrades "--disable-authentication ")) (define guix-home "guix home reconfigure ") (define home-configuration "home-configuration.scm ") (define reconfigure-home (string-append guix-home config-prefix home-configuration)) (define reconfigure-home- (string-append reconfigure-home allow-downgrades)) (define guix-system "sudo guix system reconfigure ") (define system-configuration "system-configuration.scm ") (define reconfigure-system (string-append guix-system config-prefix system-configuration)) (define reconfigure-system- (string-append reconfigure-system allow-downgrades)) (define and "&& ") (define system-update (string-append pull-guix and reconfigure-system and reconfigure-home)) (define system-update- (string-append pull-guix- and reconfigure-system- and reconfigure-home-)) (home-environment (packages (map (compose list specification->package+output) '("adwaita-icon-theme" "alacritty" "clamav" "cpupower" "dconf-editor" "dmenu" "emacs" "emacs-aggressive-indent" "emacs-eldoc" "emacs-geiser" "emacs-geiser-guile" "emacs-nov-el" "emacs-org-auto-tangle" "emacs-org-contacts" "emacs-org-contrib" "font-google-noto" "git" "git-lfs" "gnome-tweaks" "gnupg" "guile" "guile-spec" "hicolor-icon-theme" "icecat" "jami" "libadwaita" "libreoffice" "nm-tray" "pwgen" "seahorse" "sicp" "strace" "trezor-agent" "unzip" "zip"))) (services `(,<> ,ssh-configuration ,sway-configuration ,sway-packages ,(service home-bash-service-type (home-bash-configuration (environment-variables '(("EDITOR" . "emacs -nw") ("LIBGL_ALWAYS_SOFTWARE" . "1") ("NVM_DIR" . "$HOME/src/nvm") ("GUILE_AUTO_COMPILE" . "0"))) (aliases `(("grep" . "grep --color=auto ") ("ll" . "ls -l ") ("ls" . "ls -p --color=auto ") ("pull-guix" . ,pull-guix) ("pull-guix-" . ,pull-guix-) ("reconfigure-home" . ,reconfigure-home) ("reconfigure-home-" . ,reconfigure-home-) ("reconfigure-system" . ,reconfigure-system) ("reconfigure-system-" . ,reconfigure-system-) ("system-update" . ,system-update) ("system-update-" . ,system-update-))) (bash-profile `(,(local-file "bash_profile"))) (bashrc `(,(local-file "bashrc"))))) ,(simple-service 'configuration-files home-files-service-type `((".config/git/config" ,(local-file "git.config")) (".config/guix/shell-authorized-directories" ,(local-file "guix-shell-authorized-directories")) (".emacs" ,(local-file "emacs.el"))))))) #+end_src