(define-module (jd user) #:use-module (gnu home services) #:use-module (gnu home services shepherd) #:use-module (gnu home-services ssh) #:use-module (gnu home services xdg) #:use-module (gnu packages) #:use-module (gnu packages emacs-xyz) #:use-module (gnu packages gnome) #:use-module (gnu packages gnupg) #:use-module (gnu packages guile-xyz) #:use-module (gnu services) #:use-module (gnu services nix) #:use-module (guix channels) #:use-module (guix download) #:use-module (guix gexp) #:use-module (guix inferior) #:use-module (guix packages) #:use-module (jd features mail) #:use-module (jd features networking) #:use-module (nongnu packages linux) #:use-module (nongnu system linux-initrd) #:use-module (rde features) #:use-module (rde packages) #:use-module (rde packages aspell) #:use-module (srfi srfi-1)) (define-syntax-rule (use-rde-features-modules module ...) (use-modules (rde features module) ...)) (define-syntax-rule (use-rde-home-services-modules module ...) (use-modules (rde features module) ...)) (use-rde-features-modules android base bittorrent clojure containers documentation emacs emacs-xyz finance fontutils gnupg gtk guile image-viewers irc keyboard libreoffice linux llm mail markup networking ocaml password-utils presets security-token shells shellutils sourcehut ssh system terminals tmux uml version-control video virtualization web-browsers wm xdg python) (use-rde-home-services-modules emacs shells video wm) (define* (mail-acc id user #:optional (type 'migadu)) "Make a simple mail-account with gmail type by default." (mail-account (id id) (fqda user) (type type))) (define* (mail-lst id fqda urls) "Make a simple mailing-list." (mailing-list (id id) (fqda fqda) (config (l2md-repo (name (symbol->string id)) (urls urls))))) (define-public %base-features (list (feature-backlight #:step 10) (feature-networking* #:network-manager-vpn-plugins (list network-manager-openvpn) #:mdns? #t) (feature-base-services) (feature-base-packages) (feature-desktop-services) (feature-xdg #:xdg-user-directories-configuration (home-xdg-user-directories-configuration (music "$HOME/music") (videos "$HOME/videos") (pictures "$HOME/pictures") (documents "$HOME/documents") (download "$HOME/downloads") (publicshare "$HOME/sync") (desktop "$HOME") (templates "$HOME"))) (feature-pipewire) (feature-shepherd))) (define-public %desktop-features (list (feature-sway-run-on-tty #:sway-tty-number 2) (feature-gtk3 #:gtk-theme (make-theme "Adwaita-dark" gnome-themes-extra)) (feature-fonts #:default-font-size 14) (feature-transmission #:auto-start? #f) (feature-sway #:extra-config '((input type:touchpad ((tap enabled) (middle_emulation enabled))) (workspace_layout tabbed) (bindsym $mod+q layout tabbed) (bindsym $mod+a layout stacking) (bindsym $mod+z layout toggle split) (default_border none) (default_floating_border pixel 3) ;; (default_border normal 3) ;; (default_floating_border normal 3) ;; (gaps inner 0) (output * bg "#181818" solid_color) (client.focused "#181818" "#383838" "#d8d8d8" "#7cafc2") (client.focused_inactive "#181818" "#282828" "#b8b8b8" "#7cafc2") (client.unfocused "#181818" "#282828" "#b8b8b8" "#7cafc2") (client.urgent "#181818" "#ab4642" "#f8f8f8" "#181818") (bindsym $mod+h focus left) (bindsym $mod+j focus down) (bindsym $mod+k focus up) (bindsym $mod+l focus right) (unbindsym --to-code $mod+Shift+l) (bindsym --to-code $mod+Escape exec $lock) (bindsym $mod+Shift+h move left) (bindsym $mod+Shift+j move down) (bindsym $mod+Shift+k move up) (bindsym $mod+Shift+l move right))) (feature-waybar ;; #:base16-css base16-solarized-dark #:waybar-modules (list (waybar-sway-workspaces #:format-icons `(,@(map (lambda (x) (cons (number->string x) (number->string x))) (iota 10 1)) ("urgent" . ) ("default" . ))) (waybar-idle-inhibitor) (waybar-temperature) (waybar-cpu) (waybar-battery #:intense? #f) (waybar-tray) (waybar-clock))) (feature-foot) (feature-yt-dlp) (feature-libreoffice) (feature-emacs-power-menu) (feature-sway-screenshot) (feature-swaynotificationcenter) (feature-swayidle) (feature-swaylock) (feature-batsignal) (feature-imv) (feature-mpv) (feature-librewolf) (feature-ledger))) (define-public %mail-features (list (feature-isync #:isync-verbose #t) (feature-mail-mcron) (feature-l2md*) (feature-msmtp))) (define-public %cli-features (list (feature-zsh #:enable-zsh-autosuggestions? #t) (feature-git #:extra-config '((gpg ((program . "gpg"))))) (feature-manpages) (feature-vterm) (feature-bash) (feature-direnv) (feature-guile) (feature-ssh))) (define* (feature-emacs-personal-config) (define f-name 'personal-emacs-config) (define (get-home-services config) (list (rde-elisp-configuration-service f-name config `((with-eval-after-load 'geiser-mode (defun jd/guix-repl () (interactive) (let ((geiser-guile-binary '("guix" "repl")) (geiser-guile-load-path (cons "~/dotfiles/rde" geiser-guile-load-path))) (geiser 'guile)))) (with-eval-after-load 'notmuch (setq-default notmuch-search-oldest-first nil)) (with-eval-after-load 'paredit (defun jd/paredit-RET () "Wraps `paredit-RET' to provide a sensible minibuffer experience" (interactive) (cond ((minibufferp) (read--expression-try-read)) ((and (eq major-mode 'inferior-emacs-lisp-mode) (string-prefix-p "*ielm*" (buffer-name))) (ielm-return)) (t (paredit-RET)))) (bind-key "" 'jd/paredit-RET paredit-mode-map) (dolist (hook '(emacs-lisp-mode-hook eval-expression-minibuffer-setup-hook ielm-mode-hook lisp-mode-hook lisp-interaction-mode-hook scheme-mode-hook clojure-mode-hook)) (add-hook hook 'paredit-mode))) (with-eval-after-load 'rainbow-delimiters (dolist (hook '(emacs-lisp-mode-hook eval-expression-minibuffer-setup-hook ielm-mode-hook lisp-mode-hook lisp-interaction-mode-hook scheme-mode-hook clojure-mode-hook)) (add-hook hook 'rainbow-delimiters-mode))) (with-eval-after-load 'undo-tree (setq-default undo-tree-auto-save-history nil) (global-undo-tree-mode 1)) (with-eval-after-load 'multiple-cursors (setq-default mc/always-run-for-all t) (global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines) (global-set-key (kbd "C->") 'mc/mark-next-like-this) (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) (global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)) (with-eval-after-load 'page-break-lines (global-page-break-lines-mode 1)) (with-eval-after-load 'gptel (setq gptel-model 'gpt-4o gptel-backend (gptel-make-gh-copilot "Copilot"))) (with-eval-after-load 'simple (add-hook 'after-init-hook (lambda () (delete-selection-mode 1) (pixel-scroll-precision-mode 0) (electric-pair-mode 1) (setq-default truncate-lines t) (setq-default cursor-in-non-selected-windows 'hollow) (setq-default cursor-type 'box) ;; (set-face-attribute 'default nil :height 165) ;; (require 'solarized-theme) (require 'multiple-cursors) (require 'undo-tree) (require 'rainbow-delimiters) (require 'paredit) )) (set-default 'display-fill-column-indicator-column 100) (add-hook 'prog-mode-hook 'display-fill-column-indicator-mode) (setq display-line-numbers-type 'relative) (add-hook 'prog-mode-hook 'display-line-numbers-mode))) #:elisp-packages (strings->packages "emacs-rainbow-mode" "emacs-rainbow-delimiters" "emacs-paredit" "emacs-hl-todo" "emacs-undo-tree" "emacs-multiple-cursors" ;; "emacs-swiper" ;; "emacs-solarized-theme" "emacs-nginx-mode" "emacs-yaml-mode" "emacs-org-present")))) (feature (name f-name) (values `((,f-name . #t))) (home-services-getter get-home-services))) (define-public %emacs-features (list (feature-emacs-modus-themes #:headings-scaling? #t #:deuteranopia? #f) (feature-emacs-citation #:global-bibliography (list "/home/jakub/Notes/Roam/references/master.bib")) (feature-emacs-completion #:mini-frame? #f ;; Dziwne kurwa bledy #:marginalia-align 'right) (feature-emacs-corfu #:corfu-doc-auto #f) (feature-emacs #:default-application-launcher? #t) (feature-emacs-elfeed #:elfeed-org-files '("/home/jakub/Notes/Rss.org")) (feature-emacs-erc #:erc-log? #t #:erc-autojoin-channels-alist '((Libera.Chat "#rde") (Libera.Chat "#systemcrafters") (Libera.Chat "#lisp-pl") (Libera.Chat "#hsp"))) (feature-emacs-keycast #:turn-on? #f) (feature-emacs-org-agenda #:org-agenda-files '("/home/jakub/Notes/Me.org" "/home/jakub/Notes/Work.org")) (feature-emacs-org-dailies #:encrypted? #t) (feature-emacs-org #:org-directory "/home/jakub/Notes" #:org-indent? #f) (feature-emacs-org-roam #:org-roam-directory "/home/jakub/Notes/Roam/slip-box") (feature-emacs-spelling #:spelling-program (@ (gnu packages hunspell) hunspell) #:spelling-dictionaries (list (@ (gnu packages hunspell) hunspell-dict-en) (@ (gnu packages hunspell) hunspell-dict-pl)) #:ispell-standard-dictionary "pl_PL") (feature-emacs-dired #:extra-switches "-h") (feature-emacs-appearance) (feature-emacs-dashboard) (feature-emacs-eglot) (feature-emacs-eshell) (feature-emacs-git) (feature-emacs-gptel) (feature-emacs-guix) (feature-emacs-message) (feature-emacs-monocle) (feature-emacs-nov-el) (feature-emacs-pdf-tools) (feature-emacs-personal-config) (feature-emacs-project) (feature-emacs-time) (feature-emacs-tramp) (feature-emacs-vertico) (feature-emacs-webpaste) (feature-emacs-which-key) (feature-emacs-battery) (feature-notmuch) (feature-plantuml) (feature-compile))) (define %dev-features (list (feature-android) (feature-clojure) (feature-markdown) (feature-python))) (define %virtualization-features (list (feature-distrobox) (feature-podman) (feature-qemu))) (define (feature-ssh-extra-config) (feature-custom-services #:feature-name-prefix 'jd-ssh-extra-config #:home-services (list (simple-service 'ssh-extra-config home-ssh-service-type (home-ssh-extension (extra-config (append (list (ssh-host (host "jdlugosz.com") (options '((user . "root") (port . 22) (compression . #t)))) (ssh-host (host "amg.abaks.pl") (options '((user . "serwis") (port . 22) (compression . #t)))) (ssh-host (host "wifi-dev.abaks.pl") (options '((user . "serwis") (port . 22) (compression . #t))))))) (toplevel-options '((host-key-algorithms . "+ssh-rsa") (pubkey-accepted-key-types . "+ssh-rsa")))))))) (define (feature-additional-services) (feature-custom-services #:feature-name-prefix 'jd-additional-services #:system-services (list (service nix-service-type)) #:home-services (list (simple-service 'home-environment-extra-variables home-environment-variables-service-type '(("XDG_DATA_DIRS" . "$XDG_DATA_DIRS:$HOME/.local/share/flatpak/exports/share"))) ;; (simple-service ;; 'home-nextcloud-package ;; home-profile-service-type ;; (list ;; (@@ (gnu packages sync) nextcloud-client))) (simple-service 'nextcloud-shepherd-service home-shepherd-service-type (list (shepherd-service (provision `(nextcloud)) (auto-start? #t) (stop #~(make-kill-destructor)) (start #~(make-forkexec-constructor (list #$(program-file "nextcloud" #~(begin (setenv "QT_QPA_PLATFORM" "wayland-egl;xcb") (apply system* (list #$(file-append (@ (gnu packages sync) nextcloud-client) "/bin/nextcloud"))))))))))) ;; (simple-service ;; 'home-nextcloud-daemon) (simple-service 'home-profile-extra-packages home-profile-service-type (append (list (@ (gnu packages tree-sitter) tree-sitter-clojure) (@ (gnu packages tree-sitter) tree-sitter-html)) (strings->packages "figlet" "calibre" "libnotify" "flatpak" "alsa-utils" "pavucontrol" "imagemagick" "obs" "obs-wlrobs" "binutils" "make" "gdb" "hicolor-icon-theme" "adwaita-icon-theme" "gnome-themes-extra" "papirus-icon-theme" "arc-theme" "fd" "nautilus" "qbittorrent" "kdenlive" "gimp" "blender" "ripgrep" "curl")))))) (define-public (feature-nonfree-kernel) (feature-kernel #:kernel linux #:firmware (list linux-firmware) #:initrd microcode-initrd)) (define-public %all-features (append %base-features %cli-features %desktop-features %dev-features %emacs-features %mail-features %virtualization-features)) (define-public %user-features (append %all-features (list (feature-user-info #:user-name "jakub" #:full-name "Jakub Dlugosz" #:email "me@jdlugosz.com" #:user-initial-password-hash "$6$C6xUaxw3xOpsPrBF$/nmP.SXpzoAYGu7CrcIMQ02S4f8QDNZTuAyaIZusmz4e3xXTdSYpt8D1WCaLXcAuhVJA5llPf9MH7L1TTlgG81" #:emacs-advanced-user? #t) (feature-gnupg #:gpg-primary-key "83AD9E56AE266488CA2F2598BACE123052C9E77A") (feature-security-token) (feature-password-store #:password-store-directory "/home/jakub/.password-store" #:remote-password-store-url "ssh://git@jdlugosz.com:passwords") (feature-mail-settings #:mail-directory-fn (lambda (config) (string-append (get-value 'home-directory config) "/Mail")) #:mail-accounts (list (mail-account (id 'work) (type 'migadu) (fqda "me@jdlugosz.com") (aliases '("admin@jdlugosz.com" "postmaster@jdlugosz.com")) (pass-cmd "pass show mail/me@jdlugosz.com"))) #:mailing-lists (list (mail-lst 'guile-devel "guile-devel@gnu.org" '("https://yhetil.org/guile-devel/0")) (mail-lst 'guix-devel "guix-devel@gnu.org" '("https://yhetil.org/guix-devel/0")) (mail-lst 'guix-bugs "guix-bugs@gnu.org" '("https://yhetil.org/guix-bugs/0")) (mail-lst 'guix-patches "guix-patches@gnu.org" '("https://yhetil.org/guix-patches/1")))) (feature-irc-settings #:irc-accounts (list (irc-account (id 'libera) (network "irc.libera.chat") (nick "jdlugosz963")))) (feature-sourcehut #:user-name-fn (const "jdlugosz963")) (feature-keyboard #:keyboard-layout (keyboard-layout "pl")) (feature-ssh-extra-config) (feature-additional-services))))