summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.config/guix/channels.scm14
-rw-r--r--guix/home.scm81
-rw-r--r--guix/services/tailscale.scm66
-rw-r--r--guix/system.scm91
4 files changed, 252 insertions, 0 deletions
diff --git a/.config/guix/channels.scm b/.config/guix/channels.scm
new file mode 100644
index 0000000..66b4a77
--- /dev/null
+++ b/.config/guix/channels.scm
@@ -0,0 +1,14 @@
+(cons* (channel
+ (name 'nonguix)
+ (url "https://gitlab.com/nonguix/nonguix")
+ ;; Enable signature verification:
+ (introduction
+ (make-channel-introduction
+ "897c1a470da759236cc11798f4e0a5f7d4d59fbc"
+ (openpgp-fingerprint
+ "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"))))
+ (channel
+ (name 'thanos-channel)
+ (url (string-append "file://" (getenv "HOME")
+ "/Dev/guile/guix-channel/")))
+ %default-channels)
diff --git a/guix/home.scm b/guix/home.scm
new file mode 100644
index 0000000..b11fc4f
--- /dev/null
+++ b/guix/home.scm
@@ -0,0 +1,81 @@
+;; 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
+ ;; (append (map specification->package
+ ;; '("emacs-pgtk" "aspell-dict-el"))))
+ ;; 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 '(("fanki" . "flatpak run net.ankiweb.Anki")
+ ("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)))))
+ ;; TODO: Rewrite this mess
+ (service home-xdg-configuration-files-service-type
+ `(("emacs/init.el" ,(local-file "../emacs.el"))
+ ("alacritty/alacritty.toml" ,(local-file "../alacritty.toml"))
+ ("sway/config" ,(local-file "../sway.config"))
+ ("waybar/config" ,(local-file "../waybar-config"))
+ ("waybar/style.css" ,(local-file "../waybar-style.css"))))
+ (service home-dotfiles-service-type
+ (home-dotfiles-configuration
+ (directories '("/home/thanos/dotfiles/"))
+ (excluded '(".*~" ".*\\.swp" "\\.git" "\\.gitignore" ".*emacs.el" "sway\\*" "waybar-config"
+ "alacritty.toml" "vimium-options.json" "waybar-style.css"
+ ".*bash" "README" "LICENSE" ".*\\.scm" "sway.config" ".stow-local-ignore"))))
+ ;; 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")
+ ("PATH" . "/home/$USER/.local/bin:$PATH")
+ ("XDG_DATA_DIRS" . "$XDG_DATA_DIRS:$HOME/.local/share/flatpak/exports/share")))
+ ;; 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..2d38409
--- /dev/null
+++ b/guix/system.scm
@@ -0,0 +1,91 @@
+;; TODO: Use this as a base module and seperate each system/machine
+(use-modules (gnu)
+ (gnu services)
+ (gnu home services desktop)
+ (gnu home services desktop)
+ (gnu home services gnupg)
+ (nongnu packages linux)
+ (nongnu system linux-initrd))
+
+(use-service-modules cups desktop networking ssh xorg docker guix admin pm docker)
+
+(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" "flatpak"
+ "waybar" "mu" "gnupg" "pinentry" "password-store" "isync" "python"
+ "sbcl" "font-jetbrains-mono" "docker" "docker-cli" "icecat" "git"))
+ %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 gnome-desktop-service-type)
+ (service docker-service-type)
+
+ (service openssh-service-type
+ (openssh-configuration
+ (permit-root-login 'prohibit-password)))
+ ;; ;; 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)))
+
+ (service tor-service-type)
+ (service cups-service-type)
+ (set-xorg-configuration
+ (xorg-configuration (keyboard-layout keyboard-layout))))
+ %desktop-services))
+ (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)))