summaryrefslogtreecommitdiffstats
path: root/src/jd/user.scm
diff options
context:
space:
mode:
authorjdlugosz963 <jdlugosz963@gmail.com>2025-08-11 17:36:57 +0200
committerjdlugosz963 <jdlugosz963@gmail.com>2025-08-11 17:40:12 +0200
commitbc591dcedf45b80f70661f33c42c68dbd581e901 (patch)
tree4a3cbd7831d8e0d8ce12f318d64e06848c9ea3ab /src/jd/user.scm
parent1ebb0e267b40d86386b66b7b81686461446e39f8 (diff)
downloaddotfiles-master.tar.gz
dotfiles-master.zip
Migrate to RDEHEADmaster
Diffstat (limited to 'src/jd/user.scm')
-rw-r--r--src/jd/user.scm507
1 files changed, 507 insertions, 0 deletions
diff --git a/src/jd/user.scm b/src/jd/user.scm
new file mode 100644
index 0000000..7c54a30
--- /dev/null
+++ b/src/jd/user.scm
@@ -0,0 +1,507 @@
1(define-module (jd user)
2 #:use-module (gnu home services)
3 #:use-module (gnu home services shepherd)
4 #:use-module (gnu home-services ssh)
5 #:use-module (gnu home services xdg)
6 #:use-module (gnu packages)
7 #:use-module (gnu packages emacs-xyz)
8 #:use-module (gnu packages gnome)
9 #:use-module (gnu packages gnupg)
10 #:use-module (gnu packages guile-xyz)
11 #:use-module (gnu services)
12 #:use-module (gnu services nix)
13
14 #:use-module (guix channels)
15 #:use-module (guix download)
16 #:use-module (guix gexp)
17 #:use-module (guix inferior)
18 #:use-module (guix packages)
19
20 #:use-module (jd features mail)
21 #:use-module (jd features networking)
22
23 #:use-module (nongnu packages linux)
24 #:use-module (nongnu system linux-initrd)
25
26 #:use-module (rde features)
27 #:use-module (rde packages)
28 #:use-module (rde packages aspell)
29
30 #:use-module (srfi srfi-1))
31
32
33(define-syntax-rule (use-rde-features-modules module ...)
34 (use-modules (rde features module) ...))
35
36(define-syntax-rule (use-rde-home-services-modules module ...)
37 (use-modules (rde features module) ...))
38
39(use-rde-features-modules
40 android base bittorrent clojure containers
41 documentation emacs emacs-xyz finance fontutils
42 gnupg gtk guile image-viewers irc keyboard
43 libreoffice linux llm mail markup networking ocaml
44 password-utils presets security-token shells
45 shellutils sourcehut ssh system terminals tmux uml
46 version-control video virtualization web-browsers wm xdg python)
47
48(use-rde-home-services-modules
49 emacs shells video wm)
50
51(define* (mail-acc id user #:optional (type 'migadu))
52 "Make a simple mail-account with gmail type by default."
53 (mail-account
54 (id id)
55 (fqda user)
56 (type type)))
57
58(define* (mail-lst id fqda urls)
59 "Make a simple mailing-list."
60 (mailing-list
61 (id id)
62 (fqda fqda)
63 (config (l2md-repo
64 (name (symbol->string id))
65 (urls urls)))))
66
67(define-public %base-features
68 (list
69 (feature-backlight #:step 10)
70 (feature-networking* #:network-manager-vpn-plugins (list network-manager-openvpn)
71 #:mdns? #t)
72 (feature-base-services)
73 (feature-base-packages)
74 (feature-desktop-services)
75 (feature-xdg
76 #:xdg-user-directories-configuration
77 (home-xdg-user-directories-configuration
78 (music "$HOME/music")
79 (videos "$HOME/videos")
80 (pictures "$HOME/pictures")
81 (documents "$HOME/documents")
82 (download "$HOME/downloads")
83 (publicshare "$HOME/sync")
84 (desktop "$HOME")
85 (templates "$HOME")))
86 (feature-pipewire)
87 (feature-shepherd)))
88
89(define-public %desktop-features
90 (list
91 (feature-sway-run-on-tty #:sway-tty-number 2)
92 (feature-gtk3 #:gtk-theme (make-theme "Adwaita-dark" gnome-themes-extra))
93 (feature-fonts #:default-font-size 14)
94 (feature-transmission #:auto-start? #f)
95 (feature-sway
96 #:extra-config
97 '((input type:touchpad
98 ((tap enabled)
99 (middle_emulation enabled)))
100 (workspace_layout tabbed)
101 (bindsym $mod+q layout tabbed)
102 (bindsym $mod+a layout stacking)
103 (bindsym $mod+z layout toggle split)
104 (default_border none)
105 (default_floating_border pixel 3)
106 ;; (default_border normal 3)
107 ;; (default_floating_border normal 3)
108 ;; (gaps inner 0)
109 (output * bg "#181818" solid_color)
110 (client.focused "#181818" "#383838" "#d8d8d8" "#7cafc2")
111 (client.focused_inactive "#181818" "#282828" "#b8b8b8" "#7cafc2")
112 (client.unfocused "#181818" "#282828" "#b8b8b8" "#7cafc2")
113 (client.urgent "#181818" "#ab4642" "#f8f8f8" "#181818")
114 (bindsym $mod+h focus left)
115 (bindsym $mod+j focus down)
116 (bindsym $mod+k focus up)
117 (bindsym $mod+l focus right)
118
119 (unbindsym --to-code $mod+Shift+l)
120 (bindsym --to-code $mod+Escape exec $lock)
121
122 (bindsym $mod+Shift+h move left)
123 (bindsym $mod+Shift+j move down)
124 (bindsym $mod+Shift+k move up)
125 (bindsym $mod+Shift+l move right)))
126 (feature-waybar
127 ;; #:base16-css base16-solarized-dark
128 #:waybar-modules
129 (list
130 (waybar-sway-workspaces
131 #:format-icons
132 `(,@(map
133 (lambda (x) (cons
134 (number->string x)
135 (number->string x)))
136 (iota 10 1))
137 ("urgent" . )
138 ("default" . )))
139 (waybar-idle-inhibitor)
140 (waybar-temperature)
141 (waybar-cpu)
142 (waybar-battery #:intense? #f)
143 (waybar-tray)
144 (waybar-clock)))
145 (feature-foot)
146 (feature-yt-dlp)
147 (feature-libreoffice)
148 (feature-emacs-power-menu)
149 (feature-sway-screenshot)
150 (feature-swaynotificationcenter)
151 (feature-swayidle)
152 (feature-swaylock)
153 (feature-batsignal)
154 (feature-imv)
155 (feature-mpv)
156 (feature-librewolf)
157 (feature-ledger)))
158
159(define-public %mail-features
160 (list
161 (feature-isync #:isync-verbose #t)
162 (feature-mail-mcron)
163 (feature-l2md*)
164 (feature-msmtp)))
165
166(define-public %cli-features
167 (list
168 (feature-zsh #:enable-zsh-autosuggestions? #t)
169 (feature-git #:extra-config '((gpg ((program . "gpg")))))
170 (feature-manpages)
171 (feature-vterm)
172 (feature-bash)
173 (feature-direnv)
174 (feature-guile)
175 (feature-ssh)))
176
177(define* (feature-emacs-personal-config)
178 (define f-name 'personal-emacs-config)
179
180 (define (get-home-services config)
181 (list
182 (rde-elisp-configuration-service
183 f-name
184 config
185 `((with-eval-after-load 'geiser-mode
186 (defun jd/guix-repl ()
187 (interactive)
188 (let ((geiser-guile-binary '("guix" "repl"))
189 (geiser-guile-load-path (cons "~/dotfiles/rde" geiser-guile-load-path)))
190 (geiser 'guile))))
191
192 (with-eval-after-load 'notmuch
193 (setq-default notmuch-search-oldest-first nil))
194
195 (with-eval-after-load 'paredit
196 (defun jd/paredit-RET ()
197 "Wraps `paredit-RET' to provide a sensible minibuffer experience"
198 (interactive)
199 (cond
200 ((minibufferp)
201 (read--expression-try-read))
202 ((and (eq major-mode 'inferior-emacs-lisp-mode)
203 (string-prefix-p "*ielm*" (buffer-name)))
204 (ielm-return))
205 (t
206 (paredit-RET))))
207 (bind-key "<return>" 'jd/paredit-RET paredit-mode-map)
208
209 (dolist (hook '(emacs-lisp-mode-hook
210 eval-expression-minibuffer-setup-hook
211 ielm-mode-hook
212 lisp-mode-hook
213 lisp-interaction-mode-hook
214 scheme-mode-hook
215 clojure-mode-hook))
216 (add-hook hook 'paredit-mode)))
217
218 (with-eval-after-load 'rainbow-delimiters
219 (dolist (hook '(emacs-lisp-mode-hook
220 eval-expression-minibuffer-setup-hook
221 ielm-mode-hook
222 lisp-mode-hook
223 lisp-interaction-mode-hook
224 scheme-mode-hook
225 clojure-mode-hook))
226 (add-hook hook 'rainbow-delimiters-mode)))
227
228 (with-eval-after-load 'undo-tree
229 (setq-default undo-tree-auto-save-history nil)
230 (global-undo-tree-mode 1))
231
232 (with-eval-after-load 'multiple-cursors
233 (setq-default mc/always-run-for-all t)
234 (global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
235 (global-set-key (kbd "C->") 'mc/mark-next-like-this)
236 (global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
237 (global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this))
238
239 (with-eval-after-load 'page-break-lines
240 (global-page-break-lines-mode 1))
241
242 (with-eval-after-load 'gptel
243 (setq gptel-model 'gpt-4o
244 gptel-backend (gptel-make-gh-copilot "Copilot")))
245
246 (with-eval-after-load 'simple
247 (add-hook 'after-init-hook (lambda ()
248 (delete-selection-mode 1)
249 (pixel-scroll-precision-mode 0)
250 (electric-pair-mode 1)
251 (setq-default truncate-lines t)
252 (setq-default cursor-in-non-selected-windows 'hollow)
253 (setq-default cursor-type 'box)
254 ;; (set-face-attribute 'default nil :height 165)
255 ;; (require 'solarized-theme)
256 (require 'multiple-cursors)
257 (require 'undo-tree)
258 (require 'rainbow-delimiters)
259 (require 'paredit)
260 ))
261 (set-default 'display-fill-column-indicator-column 100)
262 (add-hook 'prog-mode-hook 'display-fill-column-indicator-mode)
263 (setq display-line-numbers-type 'relative)
264 (add-hook 'prog-mode-hook 'display-line-numbers-mode)))
265 #:elisp-packages
266 (strings->packages
267 "emacs-rainbow-mode"
268 "emacs-rainbow-delimiters"
269 "emacs-paredit"
270 "emacs-hl-todo"
271 "emacs-undo-tree"
272 "emacs-multiple-cursors"
273 ;; "emacs-swiper"
274 ;; "emacs-solarized-theme"
275 "emacs-nginx-mode"
276 "emacs-yaml-mode"
277 "emacs-org-present"))))
278 (feature
279 (name f-name)
280 (values `((,f-name . #t)))
281 (home-services-getter get-home-services)))
282
283(define-public %emacs-features
284 (list
285 (feature-emacs-modus-themes #:headings-scaling? #t
286 #:deuteranopia? #f)
287 (feature-emacs-citation #:global-bibliography (list "/home/jakub/Notes/Roam/references/master.bib"))
288 (feature-emacs-completion #:mini-frame? #f ;; Dziwne kurwa bledy
289 #:marginalia-align 'right)
290 (feature-emacs-corfu #:corfu-doc-auto #f)
291 (feature-emacs #:default-application-launcher? #t)
292 (feature-emacs-elfeed #:elfeed-org-files '("/home/jakub/Notes/Rss.org"))
293 (feature-emacs-erc #:erc-log? #t
294 #:erc-autojoin-channels-alist '((Libera.Chat "#rde")
295 (Libera.Chat "#systemcrafters")
296 (Libera.Chat "#lisp-pl")
297 (Libera.Chat "#hsp")))
298 (feature-emacs-keycast #:turn-on? #f)
299 (feature-emacs-org-agenda #:org-agenda-files '("/home/jakub/Notes/Me.org" "/home/jakub/Notes/Work.org"))
300 (feature-emacs-org-dailies #:encrypted? #t)
301 (feature-emacs-org #:org-directory "/home/jakub/Notes"
302 #:org-indent? #f)
303 (feature-emacs-org-roam #:org-roam-directory "/home/jakub/Notes/Roam/slip-box")
304 (feature-emacs-spelling #:spelling-program (@ (gnu packages hunspell) hunspell)
305 #:spelling-dictionaries (list (@ (gnu packages hunspell) hunspell-dict-en)
306 (@ (gnu packages hunspell) hunspell-dict-pl))
307 #:ispell-standard-dictionary "pl_PL")
308 (feature-emacs-dired #:extra-switches "-h")
309 (feature-emacs-appearance)
310 (feature-emacs-dashboard)
311 (feature-emacs-eglot)
312 (feature-emacs-eshell)
313 (feature-emacs-git)
314 (feature-emacs-gptel)
315 (feature-emacs-guix)
316 (feature-emacs-message)
317 (feature-emacs-monocle)
318 (feature-emacs-nov-el)
319 (feature-emacs-pdf-tools)
320 (feature-emacs-personal-config)
321 (feature-emacs-project)
322 (feature-emacs-time)
323 (feature-emacs-tramp)
324 (feature-emacs-vertico)
325 (feature-emacs-webpaste)
326 (feature-emacs-which-key)
327 (feature-emacs-battery)
328 (feature-notmuch)
329 (feature-plantuml)
330 (feature-compile)))
331
332(define %dev-features
333 (list
334 (feature-android)
335 (feature-clojure)
336 (feature-markdown)
337 (feature-python)))
338
339(define %virtualization-features
340 (list
341 (feature-distrobox)
342 (feature-podman)
343 (feature-qemu)))
344
345(define (feature-ssh-extra-config)
346 (feature-custom-services
347 #:feature-name-prefix 'jd-ssh-extra-config
348 #:home-services
349 (list
350 (simple-service
351 'ssh-extra-config
352 home-ssh-service-type
353 (home-ssh-extension
354 (extra-config
355 (append
356 (list
357 (ssh-host
358 (host "jdlugosz.com")
359 (options
360 '((user . "root")
361 (port . 22)
362 (compression . #t))))
363 (ssh-host
364 (host "amg.abaks.pl")
365 (options
366 '((user . "serwis")
367 (port . 22)
368 (compression . #t))))
369 (ssh-host
370 (host "wifi-dev.abaks.pl")
371 (options
372 '((user . "serwis")
373 (port . 22)
374 (compression . #t)))))))
375 (toplevel-options
376 '((host-key-algorithms . "+ssh-rsa")
377 (pubkey-accepted-key-types . "+ssh-rsa"))))))))
378
379(define (feature-additional-services)
380 (feature-custom-services
381 #:feature-name-prefix 'jd-additional-services
382 #:system-services
383 (list (service nix-service-type))
384 #:home-services
385 (list
386 (simple-service
387 'home-environment-extra-variables
388 home-environment-variables-service-type
389 '(("XDG_DATA_DIRS" . "$XDG_DATA_DIRS:$HOME/.local/share/flatpak/exports/share")))
390 ;; (simple-service
391 ;; 'home-nextcloud-package
392 ;; home-profile-service-type
393 ;; (list
394 ;; (@@ (gnu packages sync) nextcloud-client)))
395 (simple-service
396 'nextcloud-shepherd-service
397 home-shepherd-service-type
398 (list
399 (shepherd-service
400 (provision `(nextcloud))
401 (auto-start? #t)
402 (stop #~(make-kill-destructor))
403 (start #~(make-forkexec-constructor
404 (list #$(program-file
405 "nextcloud"
406 #~(begin
407 (setenv "QT_QPA_PLATFORM" "wayland-egl;xcb")
408 (apply system*
409 (list
410 #$(file-append (@ (gnu packages sync) nextcloud-client) "/bin/nextcloud")))))))))))
411 ;; (simple-service
412 ;; 'home-nextcloud-daemon)
413 (simple-service
414 'home-profile-extra-packages
415 home-profile-service-type
416 (append
417 (list
418 (@ (gnu packages tree-sitter) tree-sitter-clojure)
419 (@ (gnu packages tree-sitter) tree-sitter-html))
420 (strings->packages
421 "figlet"
422 "calibre"
423
424 "libnotify"
425
426 "flatpak"
427
428 "alsa-utils"
429 "pavucontrol"
430 "imagemagick"
431 "obs" "obs-wlrobs"
432 "binutils" "make" "gdb"
433
434 "hicolor-icon-theme" "adwaita-icon-theme"
435 "gnome-themes-extra" "papirus-icon-theme"
436 "arc-theme"
437
438 "fd"
439 "nautilus"
440 "qbittorrent"
441 "kdenlive" "gimp"
442 "blender"
443
444 "ripgrep" "curl"))))))
445
446(define-public (feature-nonfree-kernel)
447 (feature-kernel
448 #:kernel linux
449 #:firmware (list linux-firmware)
450 #:initrd microcode-initrd))
451
452(define-public %all-features
453 (append
454 %base-features
455 %cli-features
456 %desktop-features
457 %dev-features
458 %emacs-features
459 %mail-features
460 %virtualization-features))
461
462(define-public %user-features
463 (append
464 %all-features
465 (list
466 (feature-user-info
467 #:user-name "jakub"
468 #:full-name "Jakub Dlugosz"
469 #:email "me@jdlugosz.com"
470 #:user-initial-password-hash
471 "$6$C6xUaxw3xOpsPrBF$/nmP.SXpzoAYGu7CrcIMQ02S4f8QDNZTuAyaIZusmz4e3xXTdSYpt8D1WCaLXcAuhVJA5llPf9MH7L1TTlgG81"
472 #:emacs-advanced-user? #t)
473 (feature-gnupg
474 #:gpg-primary-key "83AD9E56AE266488CA2F2598BACE123052C9E77A")
475 (feature-security-token)
476 (feature-password-store
477 #:password-store-directory "/home/jakub/.password-store"
478 #:remote-password-store-url "ssh://git@jdlugosz.com:passwords")
479 (feature-mail-settings
480 #:mail-directory-fn (lambda (config)
481 (string-append (get-value 'home-directory config) "/Mail"))
482 #:mail-accounts (list
483 (mail-account
484 (id 'work)
485 (type 'migadu)
486 (fqda "me@jdlugosz.com")
487 (aliases '("admin@jdlugosz.com" "postmaster@jdlugosz.com"))
488 (pass-cmd "pass show mail/me@jdlugosz.com")))
489 #:mailing-lists (list (mail-lst 'guile-devel "guile-devel@gnu.org"
490 '("https://yhetil.org/guile-devel/0"))
491 (mail-lst 'guix-devel "guix-devel@gnu.org"
492 '("https://yhetil.org/guix-devel/0"))
493 (mail-lst 'guix-bugs "guix-bugs@gnu.org"
494 '("https://yhetil.org/guix-bugs/0"))
495 (mail-lst 'guix-patches "guix-patches@gnu.org"
496 '("https://yhetil.org/guix-patches/1"))))
497 (feature-irc-settings #:irc-accounts (list
498 (irc-account
499 (id 'libera)
500 (network "irc.libera.chat")
501 (nick "jdlugosz963"))))
502 (feature-sourcehut
503 #:user-name-fn (const "jdlugosz963"))
504 (feature-keyboard
505 #:keyboard-layout (keyboard-layout "pl"))
506 (feature-ssh-extra-config)
507 (feature-additional-services))))