diff options
Diffstat (limited to 'guix')
-rw-r--r-- | guix/home.scm | 84 | ||||
-rw-r--r-- | guix/services/tailscale.scm | 66 | ||||
-rw-r--r-- | guix/system.scm | 157 |
3 files changed, 307 insertions, 0 deletions
diff --git a/guix/home.scm b/guix/home.scm new file mode 100644 index 0000000..08fd7ce --- /dev/null +++ b/guix/home.scm @@ -0,0 +1,84 @@ +;; This "home-environment" file can be passed to 'guix home reconfigure' +;; to reproduce the content of your profile. This is "symbolic": it only +;; specifies package names. To reproduce the exact same profile, you also +;; need to capture the channels being used, as returned by "guix describe". +;; See the "Replicating Guix" section in the manual. + +(use-modules (gnu packages) + (gnu packages gnupg) + (gnu services) + (guix gexp) + (gnu system) + (gnu home) + (gnu home services) + (gnu home services dotfiles) + (gnu home services shells) + (gnu home services desktop) + (gnu home services gnupg)) + +(home-environment + ;; Below is the list of packages that will show up in your + ;; Home profile, under ~/.guix-home/profile. + (packages (specifications->packages + (list "anki" "qtwebengine" "aspell-dict-el" "perl" "tree" + "font-iosevka-aile" "font-jetbrains-mono" "mu" "hyfetch" + "emacs-nov-el" "iptables" "emacs-yeetube" "syncthing" + "ungoogled-chromium" "emacs-pdf-tools" "python-lsp-server" + "transmission" "emacs-pgtk" "mpv" "yt-dlp" "icecat" "dino" + "0ad" "torbrowser" "emacs-elpy" "python-requests" + "python-mypy" "fuzzel" "alacritty" "wtype" "git" "emacs-geiser" + "emacs-geiser-guile" "sbcl" "curl" "libvterm" "emacs-vterm" + "inetutils" "emacs-jabber" "bind" "go" "nmap" "hunspell" + "hunspell-dict-en-us" "pinentry-emacs" "mlocate" "rsync" + "grimshot" "nyxt"))) + ;; Below is the list of Home services. To search for available + ;; services, run 'guix home search KEYWORD' in a terminal. + (services + (list (service home-bash-service-type + (home-bash-configuration + (guix-defaults? #f) + (aliases '(("ga" . "git add") + ("gaa" . "git add .") + ("gc" . "git commit -m") + ("gp" . "git push -u origin") + ("gpd" . "git push -u origin developer") + ("gpm" . "git push -u origin master") + ("grep" . "grep --color=auto") + ("gs" . "git status") + ("klight" . "brightnessctl --device='\\''tpacpi::kbd_backlight'\\'' set 1") + ("ll" . "ls -lah --color") + ("logout" . "pkill -U $USER") + ("ls" . "ls --color") + ("o" . "emacsclient -n") + ("weather" . "curl wttr.in") + ("ytd" . "yt-dlp") + ("gx" . "guix"))) + (bashrc (list (local-file "/home/thanos/dotfiles/bash-base.sh" #:recursive? #t))))) + (service home-dotfiles-service-type + (home-dotfiles-configuration + (directories '("/home/thanos/dotfiles/")) + (excluded '(".*~" ".*\\.swp" "\\.git" "\\.gitignore" + ".*emacs.el" "waybar-config" "vimium-options.json" + ".*bash" "README" "LICENSE" ".*\\.scm" "__pycache__" "bash-base.sh")) + (layout 'plain))) + ;; Env variables + (simple-service 'profile-service-type + home-environment-variables-service-type + '(("VISUAL" . "emacsclient") + ("EDITOR" . "emacsclient") + ("GTK_THEME" . "Adwaita-dark") + ("XDG_CURRENT_DESKTOP" . "sway") + ("XDG_SESSION_TYPE" . "wayland") + ("BROWSER" . "icecat") + ("XDG_SCREENSHOTS_DIR" . "/home/$USER/Pictures/screenshots/") + ("PATH" . "/home/$USER/.local/bin:$PATH"))) + ;; GPG Configuration + (service home-gpg-agent-service-type + (home-gpg-agent-configuration + (pinentry-program + (file-append pinentry-gtk2 "/bin/pinentry-gtk-2")) + (ssh-support? #t) + (default-cache-ttl 28800) + (max-cache-ttl 28800) + (default-cache-ttl-ssh 28800) + (max-cache-ttl-ssh 28800)))))) diff --git a/guix/services/tailscale.scm b/guix/services/tailscale.scm new file mode 100644 index 0000000..0632a41 --- /dev/null +++ b/guix/services/tailscale.scm @@ -0,0 +1,66 @@ +;; Under construction + +(define-module (services tailscale) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + #:use-module (gnu services configuration) + #:use-module (guix records) + #:use-module (guix gexp) + #:use-module (ice-9 match) + #:use-module (packages tailscale) + #:use-module (gnu packages linux) + #:export (tailscaled-service-type tailscaled-configuration)) + +;; TODO: https://tailscale.com/kb/1188/linux-dns/#dhcp-dhclient-overwriting-etcresolvconf + +(define-record-type* <tailscaled-configuration> + tailscaled-configuration make-tailscaled-configuration + tailscaled-configuration? + (tailscale tailscaled-configuration-tailscale + (default tailscale)) + (listen-port tailscaled-configuration-listen-port + (default "41641")) + (state-file tailscaled-configuration-state-file + (default "tailscaled.state"))) + +(define (tailscaled-activation config) + "Run tailscaled --cleanup" + #~(begin + (system* #$(file-append tailscale "/usr/bin/tailscaled") "--cleanup"))) + +(define (tailscaled-shepherd-service config) + "Return a <shepherd-service> for Tailscaled with CONFIG" + (let ((tailscale + (tailscaled-configuration-tailscale config)) + (listen-port + (tailscaled-configuration-listen-port config)) + (state-file + (tailscaled-configuration-state-file config)) + (environment #~(list (string-append + "PATH=" ; iptables is required for tailscale to work + (string-append #$iptables "/sbin") + ":" + (string-append #$iptables "/bin"))))) + (list + (shepherd-service + (provision '(tailscaled)) + (requirement '(networking)) ;; services this depends on + (start #~(make-forkexec-constructor + (list #$(file-append tailscale "/usr/bin/tailscaled") + "-state" #$state-file + ;"-port" #$listen-port + "-verbose" "10") + #:environment-variables #$environment + #:log-file "/var/log/tailscaled.log")) + (stop #~(make-kill-destructor)))))) + +(define tailscaled-service-type + (service-type + (name 'tailscaled) + (extensions + (list (service-extension shepherd-root-service-type + tailscaled-shepherd-service) + (service-extension activation-service-type + tailscaled-activation))) + (default-value (tailscaled-configuration)) + (description "Launch tailscaled."))) diff --git a/guix/system.scm b/guix/system.scm new file mode 100644 index 0000000..2a86298 --- /dev/null +++ b/guix/system.scm @@ -0,0 +1,157 @@ +;; TODO: Use this as a base module and seperate each system/machine +(use-modules (gnu) + (gnu services) + (gnu services dbus) + (gnu services desktop) + (gnu system) + (gnu system setuid) + (gnu system nss) + (nongnu packages linux) + (nongnu system linux-initrd)) + +(use-service-modules cups desktop networking ssh xorg docker guix admin pm docker) + +(use-package-modules nfs certs shells ssh linux bash emacs networking wm fonts libusb cups freedesktop file-systems version-control package-management) + + +(operating-system + (locale "en_US.utf8") + (timezone "Europe/Athens") + (keyboard-layout (keyboard-layout "us")) + (host-name "zeus") + + ;; TODO: Use the full linux kernel only on the desktop + (kernel linux) + (initrd microcode-initrd) + (firmware (list linux-firmware)) + + ;; The list of user accounts ('root' is implicit). + (users (cons* (user-account + (name "thanos") + (comment "Thanos Apollo") + (group "users") + (home-directory "/home/thanos") + (supplementary-groups '("wheel" "netdev" "audio" "video" "docker"))) + %base-user-accounts)) + + ;; Packages installed system-wide. + (packages + (append (map specification->package + '("sway" "swaylock" "swaylock-effects" "swaybg" + "waybar" "gnupg" "pinentry" "password-store" + "isync" "python" "font-jetbrains-mono" "docker" + "docker-cli" "icecat" "git" "avahi")) + %base-packages)) + + ;; Below is the list of system services. To search for available + ;; services, run 'guix system search KEYWORD' in a terminal. + (services + (append (list + (service docker-service-type) + ;; tty login + (service elogind-service-type) + + (service console-font-service-type + (map (lambda (tty) + ;; Use a larger font for HIDPI screens + (cons tty (file-append + font-terminus + "/share/consolefonts/ter-132n"))) + '("tty1" "tty2" "tty3"))) + + (service greetd-service-type + (greetd-configuration + (greeter-supplementary-groups + (list "video" "input")) + (terminals + (list + (greetd-terminal-configuration + (terminal-vt "1") + (terminal-switch #t)) + (greetd-terminal-configuration + (terminal-vt "2")) + (greetd-terminal-configuration + (terminal-vt "3")))))) + + + (service gnome-desktop-service-type) + + (service openssh-service-type + (openssh-configuration + (permit-root-login 'prohibit-password))) + + ;; (service static-networking-service-type + ;; (list %loopback-static-networking)) + + ;; TODO: Fix swaylock + (service screen-locker-service-type + (screen-locker-configuration + (name "swaylock") + (program (file-append swaylock "/bin/swaylock")) + (using-pam? #t) + (using-setuid? #f))) + + ;; Networking services + (service network-manager-service-type) + (service wpa-supplicant-service-type) ;; Needed by NetworkManager + (service modem-manager-service-type) ;; For cellular modems + + polkit-wheel-service + + (service tor-service-type) + (service cups-service-type) + ;; + ;; (service avahi-service-type) + (service udisks-service-type) + (service upower-service-type) + (service cups-pk-helper-service-type) + (service geoclue-service-type) + ;; (service polkit-service-type) + ;; (service dbus-root-service-type) + fontconfig-file-system-service ;; Manage the fontconfig cache + + ;; Power and thermal management services + (service thermald-service-type) + (service tlp-service-type + (tlp-configuration + (cpu-boost-on-ac? #t) + (wifi-pwr-on-bat? #t)))) + + (modify-services %base-services + (delete login-service-type) + (delete mingetty-service-type) + (delete console-font-service-type)))) + + + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader) + (targets (list "/boot/efi")) + (keyboard-layout keyboard-layout))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (swap-devices (list (swap-space + (target (uuid + "10551e45-7810-4171-a4b2-87372ae5bdb4"))))) + + ;; run 'lsblk -f' to get UUIDs. + (file-systems (cons* (file-system + (mount-point "/hdd") + (device (uuid "b0fddf60-47ff-469f-b135-8f6b58812c99" + 'xfs)) + (type "xfs")) + (file-system + (mount-point "/home") + (device (uuid "4efbc805-e89b-46b8-b895-b1ce807698c8" + 'ext4)) + (type "ext4")) + (file-system + (mount-point "/") + (device (uuid + "e350994d-4c98-4d04-9867-29c9fc779026" + 'ext4)) + (type "ext4")) + (file-system + (mount-point "/boot/efi") + (device (uuid "F2A9-FB50" + 'fat32)) + (type "vfat")) %base-file-systems))) |