summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
Diffstat (limited to 'guix')
-rw-r--r--guix/home.scm84
-rw-r--r--guix/services/tailscale.scm66
-rw-r--r--guix/system.scm157
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)))