fix: inaccuracies in emacs config

This commit is contained in:
Leon Schwarzäugl 2025-07-22 01:25:27 +02:00
parent d7f27943a5
commit ba1bba39b4
Signed by: swarsel
GPG key ID: 26A54C31F2A4FD84
9 changed files with 219 additions and 116 deletions

View file

@ -3817,28 +3817,42 @@ in
**** Expose home-manager secrets in NixOS (automatically active) **** Expose home-manager secrets in NixOS (automatically active)
#+begin_src nix-ts :tangle modules/nixos/common/home-manager-secrets.nix #+begin_src nix-ts :tangle modules/nixos/common/home-manager-secrets.nix
{ lib, config, ... }: { lib, config, globals, ... }:
let let
inherit (config.swarselsystems) mainUser xdgDir homeDir; inherit (config.swarselsystems) mainUser homeDir;
inherit (config.repo.secrets.common.emacs) radicaleUser;
modules = config.home-manager.users.${mainUser}.swarselmodules; modules = config.home-manager.users.${mainUser}.swarselmodules;
in in
{
config = lib.mkIf config.swarselsystems.withHomeManager {
sops.secrets = (lib.optionalAttrs modules.mail
{ {
address1-token = { path = "${xdgDir}/secrets/address1-token"; owner = mainUser; }; config = lib.mkIf config.swarselsystems.withHomeManager {
address2-token = { path = "${xdgDir}/secrets/address2-token"; owner = mainUser; }; sops = {
address3-token = { path = "${xdgDir}/secrets/address3-token"; owner = mainUser; }; secrets = (lib.optionalAttrs modules.mail
address4-token = { path = "${xdgDir}/secrets/address4-token"; owner = mainUser; }; {
address1-token = { owner = mainUser; };
address2-token = { owner = mainUser; };
address3-token = { owner = mainUser; };
address4-token = { owner = mainUser; };
}) // (lib.optionalAttrs modules.waybar { }) // (lib.optionalAttrs modules.waybar {
github-notifications-token = { path = "${xdgDir}/secrets/github-notifications-token"; owner = mainUser; }; github-notifications-token = { owner = mainUser; };
}) // (lib.optionalAttrs modules.emacs { }) // (lib.optionalAttrs modules.emacs {
fever-pw = { path = "${homeDir}/.emacs.d/.fever"; owner = mainUser; }; fever-pw = { path = "${homeDir}/.emacs.d/.fever"; owner = mainUser; };
}) // (lib.optionalAttrs modules.zsh { }) // (lib.optionalAttrs modules.zsh {
croc-password = { path = "${xdgDir}/secrets/croc-password"; owner = mainUser; }; croc-password = { owner = mainUser; };
}) // (lib.optionalAttrs modules.emacs {
emacs-radicale-pw = { owner = mainUser; };
}); });
templates = {
authinfo = {
path = "${homeDir}/.emacs.d/.authinfo";
content = ''
machine ${globals.services.radicale.domain} login ${radicaleUser} password ${config.sops.placeholder.emacs-radicale-pw}
'';
owner = mainUser;
}; };
} };
};
};
}
#+end_src #+end_src
**** Topology (automatically active) **** Topology (automatically active)
@ -11040,7 +11054,9 @@ Sets environment variables. Here I am only setting the EDITOR variable, most var
{ lib, config, globals, nixosConfig ? config, ... }: { lib, config, globals, nixosConfig ? config, ... }:
let let
inherit (nixosConfig.repo.secrets.common.mail) address1 address2 address3 address4 allMailAddresses; inherit (nixosConfig.repo.secrets.common.mail) address1 address2 address3 address4 allMailAddresses;
inherit (nixosConfig.repo.secrets.common.calendar) source1 source1-name source2 source2-name source3 source3-name;
inherit (nixosConfig.repo.secrets.common) fullName; inherit (nixosConfig.repo.secrets.common) fullName;
inherit (config.swarselsystems) isPublic;
crocDomain = globals.services.croc.domain; crocDomain = globals.services.croc.domain;
in in
{ {
@ -11049,15 +11065,22 @@ Sets environment variables. Here I am only setting the EDITOR variable, most var
home.sessionVariables = { home.sessionVariables = {
EDITOR = "e -w"; EDITOR = "e -w";
DISPLAY = ":0"; DISPLAY = ":0";
CROC_RELAY = crocDomain;
SWARSEL_LO_RES = config.swarselsystems.lowResolution; SWARSEL_LO_RES = config.swarselsystems.lowResolution;
SWARSEL_HI_RES = config.swarselsystems.highResolution; SWARSEL_HI_RES = config.swarselsystems.highResolution;
CROC_RELAY = lib.mkIf (!isPublic) crocDomain;
}; };
systemd.user.sessionVariables = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) { systemd.user.sessionVariables = lib.mkIf (!isPublic) {
GITHUB_NOTIFICATION_TOKEN_PATH = nixosConfig.sops.secrets.github-notifications-token.path;
SWARSEL_MAIL1 = address1; SWARSEL_MAIL1 = address1;
SWARSEL_MAIL2 = address2; SWARSEL_MAIL2 = address2;
SWARSEL_MAIL3 = address3; SWARSEL_MAIL3 = address3;
SWARSEL_MAIL4 = address4; SWARSEL_MAIL4 = address4;
SWARSEL_CAL1 = source1;
SWARSEL_CAL1NAME = source1-name;
SWARSEL_CAL2 = source2;
SWARSEL_CAL2NAME = source2-name;
SWARSEL_CAL3 = source3;
SWARSEL_CAL3NAME = source3-name;
SWARSEL_FULLNAME = fullName; SWARSEL_FULLNAME = fullName;
SWARSEL_MAIL_ALL = allMailAddresses; SWARSEL_MAIL_ALL = allMailAddresses;
}; };
@ -11950,15 +11973,29 @@ By using the emacs-overlay NixOS module, I can install all Emacs packages that I
Lastly, I am defining some more packages here that the parser has problems finding. Also there are some packages that are not in ELPA or MELPA that I still want to use, like =calfw= and =fast-scroll=, so I build them here. Lastly, I am defining some more packages here that the parser has problems finding. Also there are some packages that are not in ELPA or MELPA that I still want to use, like =calfw= and =fast-scroll=, so I build them here.
#+begin_src nix-ts :tangle modules/home/common/emacs.nix #+begin_src nix-ts :tangle modules/home/common/emacs.nix
{ self, lib, config, pkgs, ... }: { self, lib, config, pkgs, globals, ... }:
let let
inherit (config.swarselsystems) homeDir isPublic isNixos; inherit (config.swarselsystems) homeDir isPublic isNixos;
inherit (config.repo.secrets.common.emacs) radicaleUser;
in in
{ {
options.swarselmodules.emacs = lib.mkEnableOption "emacs settings"; options.swarselmodules.emacs = lib.mkEnableOption "emacs settings";
config = lib.mkIf config.swarselmodules.emacs { config = lib.mkIf config.swarselmodules.emacs {
# needed for elfeed # needed for elfeed
sops.secrets.fever-pw = lib.mkIf (!isPublic && !isNixos) { path = "${homeDir}/.emacs.d/.fever"; }; sops = lib.mkIf (!isPublic && !isNixos) {
secrets = {
fever-pw = { path = "${homeDir}/.emacs.d/.fever"; };
emacs-radicale-pw = { };
};
templates = {
authinfo = {
path = "${homeDir}/.emacs.d/.authinfo";
content = ''
machine ${globals.services.radicale.domain} login ${radicaleUser} password ${config.sops.placeholder.emacs-radicale-pw}
'';
};
};
};
# enable emacs overlay for bleeding edge features # enable emacs overlay for bleeding edge features
# also read init.el file and install use-package packages # also read init.el file and install use-package packages
@ -14772,7 +14809,7 @@ This utility checks if there are updated packages in nixpkgs-unstable. It does s
inherit name; inherit name;
runtimeInputs = [ jq ]; runtimeInputs = [ jq ];
text = '' text = ''
count=$(curl -u Swarsel:"$(cat "$XDG_RUNTIME_DIR/secrets/github-notifications-token")" https://api.github.com/notifications | jq '. | length') count=$(curl -u Swarsel:"$(cat "$GITHUB_NOTIFICATION_TOKEN_PATH")" https://api.github.com/notifications | jq '. | length')
if [[ "$count" != "0" ]]; then if [[ "$count" != "0" ]]; then
echo "{\"text\":\"$count\"}" echo "{\"text\":\"$count\"}"
@ -16972,6 +17009,7 @@ In the end, we need to restore those values to values that will work during norm
Also packed into the hook function is the line =(fset 'epg-wait-for-status 'ignore)=. This line is needed at the end of the configuration in order to allow for my Yubikey to be used to encrypt and decrypt =.gpg= files. Without it, Emacs will just hang forever and basically crash. Also packed into the hook function is the line =(fset 'epg-wait-for-status 'ignore)=. This line is needed at the end of the configuration in order to allow for my Yubikey to be used to encrypt and decrypt =.gpg= files. Without it, Emacs will just hang forever and basically crash.
#+begin_src emacs-lisp :tangle files/emacs/early-init.el :mkdirp yes #+begin_src emacs-lisp :tangle files/emacs/early-init.el :mkdirp yes
;; -*- lexical-binding: t; -*-
(defvar swarsel-file-name-handler-alist file-name-handler-alist) (defvar swarsel-file-name-handler-alist file-name-handler-alist)
(defvar swarsel-vc-handled-backends vc-handled-backends) (defvar swarsel-vc-handled-backends vc-handled-backends)
@ -17091,6 +17129,7 @@ In this section I define extra functions that I need. Some of these functions I
Since I am rebinding the =C-z= hotkey for emacs-evil-state toggling, I want to have a function that still lets me perform this action quickly. Since I am rebinding the =C-z= hotkey for emacs-evil-state toggling, I want to have a function that still lets me perform this action quickly.
#+begin_src emacs-lisp #+begin_src emacs-lisp
;; -*- lexical-binding: t; -*-
(defun swarsel/toggle-evil-state () (defun swarsel/toggle-evil-state ()
(interactive) (interactive)
@ -17153,7 +17192,7 @@ Used here: [[#h:b92a18cf-eec3-4605-a8c2-37133ade3574][mu4e]]
(insert (format "%s <%s>" (or from-user user-full-name) from-addr))))))) (insert (format "%s <%s>" (or from-user user-full-name) from-addr)))))))
(defun swarsel/mu4e-restore-default () (defun swarsel/mu4e-restore-default ()
(setq user-mail-address (getenv "SWARSEL_SWARSEL_MAIL") (setq user-mail-address (getenv "SWARSEL_MAIL4")
user-full-name (getenv "SWARSEL_FULLNAME"))) user-full-name (getenv "SWARSEL_FULLNAME")))
@ -17481,7 +17520,7 @@ These functions are used here: [[#h:5653d693-ecca-4c95-9633-66b9e3241070][Corfu]
#+end_src #+end_src
**** Disable garbace collection while minibuffer is active **** Disable garbage collection while minibuffer is active
:PROPERTIES: :PROPERTIES:
:CUSTOM_ID: h:3c436647-71e6-441c-b452-d817ad2f8331 :CUSTOM_ID: h:3c436647-71e6-441c-b452-d817ad2f8331
:END: :END:
@ -19969,11 +20008,11 @@ Yes, I am aware that I am exposing my university-calendar to the public here. I
:init :init
;; set org-caldav-sync-initalization ;; set org-caldav-sync-initalization
(setq swarsel-caldav-synced 0) (setq swarsel-caldav-synced 0)
(setq org-caldav-url "https://stash.swarsel.win/remote.php/dav/calendars/Swarsel") ;; (setq org-caldav-url "https://schedule.swarsel.win/swarsel/calendar")
(setq org-caldav-calendars ;; (setq org-caldav-calendars
'((:calendar-id "personal" ;; '((:calendar-id "personal"
:inbox "~/Calendars/leon_cal.org"))) ;; :inbox "~/Calendars/leon_cal.org")))
(setq org-caldav-files '("~/Calendars/leon_cal.org")) ;; (setq org-caldav-files '("~/Calendars/leon_cal.org"))
;; (setq org-caldav-backup-file "~/org-caldav/org-caldav-backup.org") ;; (setq org-caldav-backup-file "~/org-caldav/org-caldav-backup.org")
;; (setq org-caldav-save-directory "~/org-caldav/") ;; (setq org-caldav-save-directory "~/org-caldav/")
@ -20000,6 +20039,14 @@ Yes, I am aware that I am exposing my university-calendar to the public here. I
:config :config
(bind-key "g" 'cfw:refresh-calendar-buffer cfw:calendar-mode-map) (bind-key "g" 'cfw:refresh-calendar-buffer cfw:calendar-mode-map)
(bind-key "q" 'evil-quit cfw:details-mode-map) (bind-key "q" 'evil-quit cfw:details-mode-map)
;; dont change the order of days in this one, as it will break weekend markings
(setq calendar-day-name-array
["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"])
;; First day of the week
(setq calendar-week-start-day 1) ; 0:Sunday, 1:Monday
;; (custom-set-faces ;; (custom-set-faces
;; '(cfw:face-title ((t (:foreground "#f0dfaf" :weight bold :height 65)))) ;; '(cfw:face-title ((t (:foreground "#f0dfaf" :weight bold :height 65))))
;; ) ;; )
@ -20007,14 +20054,17 @@ Yes, I am aware that I am exposing my university-calendar to the public here. I
(defun swarsel/open-calendar () (defun swarsel/open-calendar ()
(interactive) (interactive)
(unless (eq swarsel-caldav-synced 1) (org-caldav-sync) (setq swarsel-caldav-synced 1)) ;; (unless (eq swarsel-caldav-synced 1) (org-caldav-sync) (setq swarsel-caldav-synced 1))
;; (select-frame (make-frame '((name . "calendar")))) ; makes a new frame and selects it ;; (select-frame (make-frame '((name . "calendar")))) ; makes a new frame and selects it
;; (set-face-attribute 'default (selected-frame) :height 65) ; reduces the font size of the new frame ;; (set-face-attribute 'default (selected-frame) :height 65) ; reduces the font size of the new frame
(cfw:open-calendar-buffer (cfw:open-calendar-buffer
:contents-sources :contents-sources
(list (list
(cfw:org-create-source "Purple") ; orgmode source (cfw:org-create-source "Blue") ; orgmode source
(cfw:ical-create-source "TISS" "https://tiss.tuwien.ac.at/events/rest/calendar/personal?locale=de&token=4463bf7a-87a3-490a-b54c-99b4a65192f3" "Cyan")))) (cfw:ical-create-source (getenv "SWARSEL_CAL1NAME") (getenv "SWARSEL_CAL1") "Cyan")
(cfw:ical-create-source (getenv "SWARSEL_CAL2NAME") (getenv "SWARSEL_CAL2") "Green")
(cfw:ical-create-source (getenv "SWARSEL_CAL3NAME") (getenv "SWARSEL_CAL3") "Magenta")
)))
#+end_src #+end_src

View file

@ -1,12 +1,13 @@
(defvar swarsel-file-name-handler-alist file-name-handler-alist) ;; -*- lexical-binding: t; -*-
(defvar swarsel-vc-handled-backends vc-handled-backends) (defvar swarsel-file-name-handler-alist file-name-handler-alist)
(defvar swarsel-vc-handled-backends vc-handled-backends)
(setq gc-cons-threshold most-positive-fixnum (setq gc-cons-threshold most-positive-fixnum
gc-cons-percentage 0.6 gc-cons-percentage 0.6
file-name-handler-alist nil file-name-handler-alist nil
vc-handled-backends nil) vc-handled-backends nil)
(add-hook 'emacs-startup-hook (add-hook 'emacs-startup-hook
(lambda () (lambda ()
(progn (progn
(setq gc-cons-threshold (* 32 1024 1024) (setq gc-cons-threshold (* 32 1024 1024)

View file

@ -1,4 +1,6 @@
(defun swarsel/toggle-evil-state () ;; -*- lexical-binding: t; -*-
(defun swarsel/toggle-evil-state ()
(interactive) (interactive)
(if (or (evil-emacs-state-p) (evil-insert-state-p)) (if (or (evil-emacs-state-p) (evil-insert-state-p))
(evil-normal-state) (evil-normal-state)
@ -34,7 +36,7 @@
(insert (format "%s <%s>" (or from-user user-full-name) from-addr))))))) (insert (format "%s <%s>" (or from-user user-full-name) from-addr)))))))
(defun swarsel/mu4e-restore-default () (defun swarsel/mu4e-restore-default ()
(setq user-mail-address (getenv "SWARSEL_SWARSEL_MAIL") (setq user-mail-address (getenv "SWARSEL_MAIL4")
user-full-name (getenv "SWARSEL_FULLNAME"))) user-full-name (getenv "SWARSEL_FULLNAME")))
(defun swarsel/with-buffer-name-prompt-and-make-subdirs () (defun swarsel/with-buffer-name-prompt-and-make-subdirs ()
@ -1581,11 +1583,11 @@ create a new one."
:init :init
;; set org-caldav-sync-initalization ;; set org-caldav-sync-initalization
(setq swarsel-caldav-synced 0) (setq swarsel-caldav-synced 0)
(setq org-caldav-url "https://stash.swarsel.win/remote.php/dav/calendars/Swarsel") ;; (setq org-caldav-url "https://schedule.swarsel.win/swarsel/calendar")
(setq org-caldav-calendars ;; (setq org-caldav-calendars
'((:calendar-id "personal" ;; '((:calendar-id "personal"
:inbox "~/Calendars/leon_cal.org"))) ;; :inbox "~/Calendars/leon_cal.org")))
(setq org-caldav-files '("~/Calendars/leon_cal.org")) ;; (setq org-caldav-files '("~/Calendars/leon_cal.org"))
;; (setq org-caldav-backup-file "~/org-caldav/org-caldav-backup.org") ;; (setq org-caldav-backup-file "~/org-caldav/org-caldav-backup.org")
;; (setq org-caldav-save-directory "~/org-caldav/") ;; (setq org-caldav-save-directory "~/org-caldav/")
@ -1612,6 +1614,14 @@ create a new one."
:config :config
(bind-key "g" 'cfw:refresh-calendar-buffer cfw:calendar-mode-map) (bind-key "g" 'cfw:refresh-calendar-buffer cfw:calendar-mode-map)
(bind-key "q" 'evil-quit cfw:details-mode-map) (bind-key "q" 'evil-quit cfw:details-mode-map)
;; dont change the order of days in this one, as it will break weekend markings
(setq calendar-day-name-array
["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"])
;; First day of the week
(setq calendar-week-start-day 1) ; 0:Sunday, 1:Monday
;; (custom-set-faces ;; (custom-set-faces
;; '(cfw:face-title ((t (:foreground "#f0dfaf" :weight bold :height 65)))) ;; '(cfw:face-title ((t (:foreground "#f0dfaf" :weight bold :height 65))))
;; ) ;; )
@ -1619,14 +1629,17 @@ create a new one."
(defun swarsel/open-calendar () (defun swarsel/open-calendar ()
(interactive) (interactive)
(unless (eq swarsel-caldav-synced 1) (org-caldav-sync) (setq swarsel-caldav-synced 1)) ;; (unless (eq swarsel-caldav-synced 1) (org-caldav-sync) (setq swarsel-caldav-synced 1))
;; (select-frame (make-frame '((name . "calendar")))) ; makes a new frame and selects it ;; (select-frame (make-frame '((name . "calendar")))) ; makes a new frame and selects it
;; (set-face-attribute 'default (selected-frame) :height 65) ; reduces the font size of the new frame ;; (set-face-attribute 'default (selected-frame) :height 65) ; reduces the font size of the new frame
(cfw:open-calendar-buffer (cfw:open-calendar-buffer
:contents-sources :contents-sources
(list (list
(cfw:org-create-source "Purple") ; orgmode source (cfw:org-create-source "Blue") ; orgmode source
(cfw:ical-create-source "TISS" "https://tiss.tuwien.ac.at/events/rest/calendar/personal?locale=de&token=4463bf7a-87a3-490a-b54c-99b4a65192f3" "Cyan")))) (cfw:ical-create-source (getenv "SWARSEL_CAL1NAME") (getenv "SWARSEL_CAL1") "Cyan")
(cfw:ical-create-source (getenv "SWARSEL_CAL2NAME") (getenv "SWARSEL_CAL2") "Green")
(cfw:ical-create-source (getenv "SWARSEL_CAL3NAME") (getenv "SWARSEL_CAL3") "Magenta")
)))
(use-package dashboard (use-package dashboard
:ensure t :ensure t

View file

@ -1,12 +1,26 @@
{ self, lib, config, pkgs, ... }: { self, lib, config, pkgs, globals, ... }:
let let
inherit (config.swarselsystems) homeDir isPublic isNixos; inherit (config.swarselsystems) homeDir isPublic isNixos;
inherit (config.repo.secrets.common.emacs) radicaleUser;
in in
{ {
options.swarselmodules.emacs = lib.mkEnableOption "emacs settings"; options.swarselmodules.emacs = lib.mkEnableOption "emacs settings";
config = lib.mkIf config.swarselmodules.emacs { config = lib.mkIf config.swarselmodules.emacs {
# needed for elfeed # needed for elfeed
sops.secrets.fever-pw = lib.mkIf (!isPublic && !isNixos) { path = "${homeDir}/.emacs.d/.fever"; }; sops = lib.mkIf (!isPublic && !isNixos) {
secrets = {
fever-pw = { path = "${homeDir}/.emacs.d/.fever"; };
emacs-radicale-pw = { };
};
templates = {
authinfo = {
path = "${homeDir}/.emacs.d/.authinfo";
content = ''
machine ${globals.services.radicale.domain} login ${radicaleUser} password ${config.sops.placeholder.emacs-radicale-pw}
'';
};
};
};
# enable emacs overlay for bleeding edge features # enable emacs overlay for bleeding edge features
# also read init.el file and install use-package packages # also read init.el file and install use-package packages

View file

@ -1,7 +1,9 @@
{ lib, config, globals, nixosConfig ? config, ... }: { lib, config, globals, nixosConfig ? config, ... }:
let let
inherit (nixosConfig.repo.secrets.common.mail) address1 address2 address3 address4 allMailAddresses; inherit (nixosConfig.repo.secrets.common.mail) address1 address2 address3 address4 allMailAddresses;
inherit (nixosConfig.repo.secrets.common.calendar) source1 source1-name source2 source2-name source3 source3-name;
inherit (nixosConfig.repo.secrets.common) fullName; inherit (nixosConfig.repo.secrets.common) fullName;
inherit (config.swarselsystems) isPublic;
crocDomain = globals.services.croc.domain; crocDomain = globals.services.croc.domain;
in in
{ {
@ -10,15 +12,22 @@ in
home.sessionVariables = { home.sessionVariables = {
EDITOR = "e -w"; EDITOR = "e -w";
DISPLAY = ":0"; DISPLAY = ":0";
CROC_RELAY = crocDomain;
SWARSEL_LO_RES = config.swarselsystems.lowResolution; SWARSEL_LO_RES = config.swarselsystems.lowResolution;
SWARSEL_HI_RES = config.swarselsystems.highResolution; SWARSEL_HI_RES = config.swarselsystems.highResolution;
CROC_RELAY = lib.mkIf (!isPublic) crocDomain;
}; };
systemd.user.sessionVariables = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) { systemd.user.sessionVariables = lib.mkIf (!isPublic) {
GITHUB_NOTIFICATION_TOKEN_PATH = nixosConfig.sops.secrets.github-notifications-token.path;
SWARSEL_MAIL1 = address1; SWARSEL_MAIL1 = address1;
SWARSEL_MAIL2 = address2; SWARSEL_MAIL2 = address2;
SWARSEL_MAIL3 = address3; SWARSEL_MAIL3 = address3;
SWARSEL_MAIL4 = address4; SWARSEL_MAIL4 = address4;
SWARSEL_CAL1 = source1;
SWARSEL_CAL1NAME = source1-name;
SWARSEL_CAL2 = source2;
SWARSEL_CAL2NAME = source2-name;
SWARSEL_CAL3 = source3;
SWARSEL_CAL3NAME = source3-name;
SWARSEL_FULLNAME = fullName; SWARSEL_FULLNAME = fullName;
SWARSEL_MAIL_ALL = allMailAddresses; SWARSEL_MAIL_ALL = allMailAddresses;
}; };

View file

@ -1,22 +1,36 @@
{ lib, config, ... }: { lib, config, globals, ... }:
let let
inherit (config.swarselsystems) mainUser xdgDir homeDir; inherit (config.swarselsystems) mainUser homeDir;
inherit (config.repo.secrets.common.emacs) radicaleUser;
modules = config.home-manager.users.${mainUser}.swarselmodules; modules = config.home-manager.users.${mainUser}.swarselmodules;
in in
{ {
config = lib.mkIf config.swarselsystems.withHomeManager { config = lib.mkIf config.swarselsystems.withHomeManager {
sops.secrets = (lib.optionalAttrs modules.mail sops = {
secrets = (lib.optionalAttrs modules.mail
{ {
address1-token = { path = "${xdgDir}/secrets/address1-token"; owner = mainUser; }; address1-token = { owner = mainUser; };
address2-token = { path = "${xdgDir}/secrets/address2-token"; owner = mainUser; }; address2-token = { owner = mainUser; };
address3-token = { path = "${xdgDir}/secrets/address3-token"; owner = mainUser; }; address3-token = { owner = mainUser; };
address4-token = { path = "${xdgDir}/secrets/address4-token"; owner = mainUser; }; address4-token = { owner = mainUser; };
}) // (lib.optionalAttrs modules.waybar { }) // (lib.optionalAttrs modules.waybar {
github-notifications-token = { path = "${xdgDir}/secrets/github-notifications-token"; owner = mainUser; }; github-notifications-token = { owner = mainUser; };
}) // (lib.optionalAttrs modules.emacs { }) // (lib.optionalAttrs modules.emacs {
fever-pw = { path = "${homeDir}/.emacs.d/.fever"; owner = mainUser; }; fever-pw = { path = "${homeDir}/.emacs.d/.fever"; owner = mainUser; };
}) // (lib.optionalAttrs modules.zsh { }) // (lib.optionalAttrs modules.zsh {
croc-password = { path = "${xdgDir}/secrets/croc-password"; owner = mainUser; }; croc-password = { owner = mainUser; };
}) // (lib.optionalAttrs modules.emacs {
emacs-radicale-pw = { owner = mainUser; };
}); });
templates = {
authinfo = {
path = "${homeDir}/.emacs.d/.authinfo";
content = ''
machine ${globals.services.radicale.domain} login ${radicaleUser} password ${config.sops.placeholder.emacs-radicale-pw}
'';
owner = mainUser;
};
};
};
}; };
} }

View file

@ -4,7 +4,7 @@ writeShellApplication {
inherit name; inherit name;
runtimeInputs = [ jq ]; runtimeInputs = [ jq ];
text = '' text = ''
count=$(curl -u Swarsel:"$(cat "$XDG_RUNTIME_DIR/secrets/github-notifications-token")" https://api.github.com/notifications | jq '. | length') count=$(curl -u Swarsel:"$(cat "$GITHUB_NOTIFICATION_TOKEN_PATH")" https://api.github.com/notifications | jq '. | length')
if [[ "$count" != "0" ]]; then if [[ "$count" != "0" ]]; then
echo "{\"text\":\"$count\"}" echo "{\"text\":\"$count\"}"

View file

@ -20,6 +20,8 @@ u2f-keys: ENC[AES256_GCM,data:4UPXyOYEQR1oybxPLR3JW8ro5gTzq0YQse1lnAP020Nm4JG4El
croc-password: ENC[AES256_GCM,data:uz7vI2rrPi1uTKEks4IPnWOt/R6ydlp/cQ==,iv:ZE01XcS6nF1sqz04rC1o20l+1DpNSRVjhC40ZmTVCww=,tag:REjnDQBcDkUzLg2ZsiDUvA==,type:str] croc-password: ENC[AES256_GCM,data:uz7vI2rrPi1uTKEks4IPnWOt/R6ydlp/cQ==,iv:ZE01XcS6nF1sqz04rC1o20l+1DpNSRVjhC40ZmTVCww=,tag:REjnDQBcDkUzLg2ZsiDUvA==,type:str]
#ENC[AES256_GCM,data:qsBNKxd3Ng==,iv:1fNMDJt7vgKFSdghYBZsuDoZ1sWvzj1Zu8NmkjX6Zh8=,tag:0D7EsgN8B1z7/y4iZS/PtQ==,type:comment] #ENC[AES256_GCM,data:qsBNKxd3Ng==,iv:1fNMDJt7vgKFSdghYBZsuDoZ1sWvzj1Zu8NmkjX6Zh8=,tag:0D7EsgN8B1z7/y4iZS/PtQ==,type:comment]
github-api-token: ENC[AES256_GCM,data:9AhHkmv4JUjmir77INYflGvjNWW/E17FmfoXs5IUnAlL7B/l8s7UlVob0Az4lOUnm3+R0RWJz0HKMvOdZVZjd3RakdoWqvBHFqOVNF1MNthg2izIiaERsnDXcxj54qJfpD505xFSBWmnTKWVwRZlW5WEsFPuvaVy,iv:wzXT+qsn4VG+R8tGU33EWoaMKs4c/BB5W7f2JvuX2eY=,tag:EEhbktsmWHBwh0iBtfaXlA==,type:str] github-api-token: ENC[AES256_GCM,data:9AhHkmv4JUjmir77INYflGvjNWW/E17FmfoXs5IUnAlL7B/l8s7UlVob0Az4lOUnm3+R0RWJz0HKMvOdZVZjd3RakdoWqvBHFqOVNF1MNthg2izIiaERsnDXcxj54qJfpD505xFSBWmnTKWVwRZlW5WEsFPuvaVy,iv:wzXT+qsn4VG+R8tGU33EWoaMKs4c/BB5W7f2JvuX2eY=,tag:EEhbktsmWHBwh0iBtfaXlA==,type:str]
#ENC[AES256_GCM,data:vQF1i7rtfz/MBElKIN9j8N0=,iv:jf2SZpulx85yx2sHcnA3iwkiXJcHq4x1fdBUcSRuiK0=,tag:WpUNpH6/8jDvQA8zRGrdKg==,type:comment]
emacs-radicale-pw: ENC[AES256_GCM,data:BIORG0geX8s1WOA=,iv:SeoVn8xHlqQGxZzHrm5I5LITMoutRnz3OygswDc96ew=,tag:C3S4a8IEvCjHgAyRrCaaRw==,type:str]
sops: sops:
age: age:
- recipient: age1h72072slm2pthn9m2qwjsyy2dsazc6hz97kpzh4gksvv0r2jqecqul8w63 - recipient: age1h72072slm2pthn9m2qwjsyy2dsazc6hz97kpzh4gksvv0r2jqecqul8w63
@ -85,8 +87,8 @@ sops:
SjV6L3crUkdLWTlsNFgyRHBla2FFam8KILYsNbLdCirfoC/Vex8yEYpS2G4O0EQP SjV6L3crUkdLWTlsNFgyRHBla2FFam8KILYsNbLdCirfoC/Vex8yEYpS2G4O0EQP
wa1xzPk3Ue0/g67dv5UZFhUn0ZB2XGFC3kEPWpptTj0VL+9Z/r0zKA== wa1xzPk3Ue0/g67dv5UZFhUn0ZB2XGFC3kEPWpptTj0VL+9Z/r0zKA==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2025-07-07T15:40:09Z" lastmodified: "2025-07-22T05:16:03Z"
mac: ENC[AES256_GCM,data:IgodPXcdFB7zYwt1dbRXkuQ2Ko2cAy4L6BvObuP8sWRO26Sn0CRvBtfwEtJLRMoXyS3hXJ25hzTeQOUaTVRw/5GEViM4SxdUuE9b5rX1J7tRftgdI45f12tsBMJQhk4NDtxpm4CSUvh11XqNdBkBjFUMxfZVweXFhoZ7tJ3oElg=,iv:9WNevYqRUe5DtCWN6mMNNwQvxB4Z8ac/zKPocjMa33A=,tag:n/DL3B8WB/YKfcbo6ArMDw==,type:str] mac: ENC[AES256_GCM,data:CoOd5ki9DoSBzwTeTw3JDGPReJD4th+v20AItwIZBLX15eLb1KXANdz5ekHeFZ6ntHq4ij0FUH63W6ojpBdvzJS7GgboQyAThkyJSmqtr7lN9rTa3XZSIKDTZCKm4wrG60q17vUIZXPLxM+NN1Fp2oEyCwt1s7SHM11xJ3JdyBk=,iv:ofyAhu4pjzNAJguU5Z5H9Capqcky/mTMXHEYS/qhvNs=,tag:L9tZRzd5VgbB7lyCkT6yTA==,type:str]
pgp: pgp:
- created_at: "2025-07-10T23:51:26Z" - created_at: "2025-07-10T23:51:26Z"
enc: |- enc: |-

View file

@ -1,5 +1,5 @@
{ {
"data": "ENC[AES256_GCM,data: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,iv:I78O1MiGdRLzf7mA2MpIO0fdwjin1dDh82q4sRbOuMg=,tag:UQyx7W8C8FWmKGyVT9SpCg==,type:str]", "data": "ENC[AES256_GCM,data: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,iv:sTMh997U5saMDn6pvEmSjEv9czye1NhMPJOwrcb/JHs=,tag:56yLcBmZ0bu89cBTYHEFuw==,type:str]",
"sops": { "sops": {
"age": [ "age": [
{ {
@ -27,8 +27,8 @@
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtU240VjVRZmJ5TGsrclJF\nRXRLbTRCZURtR0Z3d2E2eDNNeGRDODlXVEY4CllTeVFYbDJQWlRSS1RFLzAxSnlM\nZi9NU1c3cWo3YWRLcUJ2U2ZFWFBBVEEKLS0tIGtmZU9qSWdBT3RDeStaaFFDSWtk\ndkUzZXJwZUl4LzVxYXdidmxXRnNnclUKyAMZqCKSY/RQvTR4bbjLaPnGKwdBcHXc\nvtiVSrLdIdzMa6id/J07TJH5UesUmcp0wjU41MDa4aMBLy+cXhuBHA==\n-----END AGE ENCRYPTED FILE-----\n" "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtU240VjVRZmJ5TGsrclJF\nRXRLbTRCZURtR0Z3d2E2eDNNeGRDODlXVEY4CllTeVFYbDJQWlRSS1RFLzAxSnlM\nZi9NU1c3cWo3YWRLcUJ2U2ZFWFBBVEEKLS0tIGtmZU9qSWdBT3RDeStaaFFDSWtk\ndkUzZXJwZUl4LzVxYXdidmxXRnNnclUKyAMZqCKSY/RQvTR4bbjLaPnGKwdBcHXc\nvtiVSrLdIdzMa6id/J07TJH5UesUmcp0wjU41MDa4aMBLy+cXhuBHA==\n-----END AGE ENCRYPTED FILE-----\n"
} }
], ],
"lastmodified": "2025-07-21T20:19:47Z", "lastmodified": "2025-07-22T05:18:26Z",
"mac": "ENC[AES256_GCM,data:vInt6XxnE3LhpOS/Q9gKI9We9PhC5hWcDDUTQ8LjGbLeXmC3wZb3E1gk8xZZRSCHr87Mb5tFG4fuMYLBLF9TGzbW5fYE6QgyshtszQZTh6CrbxrIQT2AWPPnUkBn46bOT1NEcIi3/oMUPUlDm5DxM2VUX5WnbzNTjif1g/khhtg=,iv:vAK5b2WB+ly48b92/Nd+6JjkPSikVYOuGN2KdF0W1Q0=,tag:xBS8uvcoh1D89qIcXSuy6A==,type:str]", "mac": "ENC[AES256_GCM,data:lxQFZ8hWrBepjVzeaBrHS4SpkwQzXyEvJu6fclWAvEby1w+eG7kMR3quHzD/F6zPoT3jLdFM3fSIhjVOSslSnut0pTtselvco23YtbYzEz1JK/mTGW6IytGQvZVH1HGM3lwHJ9G7jLPRUq5CBQr4zULtqZBO4rK+f9YnFChhPyY=,iv:DsgxvDPHWv8qHqYB3RXiVmZcZfdxI6iUFABHj2iE0Bg=,tag:KK0RYpLgyzVSQPYIr4DLTQ==,type:str]",
"pgp": [ "pgp": [
{ {
"created_at": "2025-06-13T20:13:06Z", "created_at": "2025-06-13T20:13:06Z",