Compare commits

..

No commits in common. "5fe4764f01822479214a7aca9a3c49402b6013bc" and "9034479a244067f96e2cc34f0c2275fd0adc0e13" have entirely different histories.

8 changed files with 163 additions and 209 deletions

View file

@ -787,30 +787,11 @@ This is meant to be an helper to be called from the window manager."
(defun org-roam-node-date (node) (defun org-roam-node-date (node)
"Return the org datestring when a node was created (obtained from the filename)" "Return the org datestring when a node was created (obtained from the filename)"
(format "<%s>" (file-name-sans-extension (file-name-nondirectory (org-roam-node-file node))))) (format "<%s>" (file-name-sans-extension (file-name-nondirectory (org-roam-node-file node)))))
(org-roam-ql-defpred
'date-range
"Check if node was created in given time range"
#'org-roam-node-date
#'(lambda (node-date start-date end-date)
(let ((node-date (condition-case nil
;; if the entry is not from the journal (i.e. the filename is not something like "2024-10-10.org")
;; then it's always discarded (the epoch time is given to it)
(encode-time (org-parse-time-string node-date))
(error (encode-time (org-parse-time-string "<1970-01-01>")))))
(start-date (encode-time (org-parse-time-string start-date)))
(end-date (encode-time (org-parse-time-string end-date))))
(and (time-less-p start-date node-date)
(time-less-p node-date end-date)))
))
(defun ccr/org-roam-spent-hours (client &optional date-start date-end) (defun ccr/org-roam-spent-hours (client)
"Return the total spent hours on something (usually a client)" "Return the total spent hours on something (usually a client)"
(let* ((query-tags `(tags ,client "billable")) (apply #'+(mapcar #'org-roam-node-spent (org-roam-ql-nodes `(tags ,client "billable")))))
(query (if (and date-start date-end) )
`(and ,query-tags (date-range ,date-start ,date-end))
query-tags)))
(apply #'+(mapcar #'org-roam-node-spent (org-roam-ql-nodes query))))))
(use-package org-roam-ql (use-package org-roam-ql
:after org-roam :after org-roam

View file

@ -22,183 +22,183 @@
); );
}; };
# home.file.".config/aerc/stylesets" = home.file.".config/aerc/stylesets" =
# let let
# catppuccin-aerc = pkgs.fetchFromGitHub { catppuccin-aerc = pkgs.fetchFromGitHub {
# owner = "catppuccin"; owner = "catppuccin";
# repo = "aerc"; repo = "aerc";
# rev = "ca404a9f2d125ef12db40db663d43c9d94116a05"; rev = "ca404a9f2d125ef12db40db663d43c9d94116a05";
# hash = "sha256-OWIkHsKFts/zkrDUtbBPXHVSrHL/F0v3LB1rnlFAKmE="; hash = "sha256-OWIkHsKFts/zkrDUtbBPXHVSrHL/F0v3LB1rnlFAKmE=";
# }; };
# in in
# { {
# source = "${catppuccin-aerc}/dist"; source = "${catppuccin-aerc}/dist";
# recursive = true; recursive = true;
# }; };
# programs.aerc = { programs.aerc = {
# enable = true; enable = true;
# extraBinds = { extraBinds = {
# global = { global = {
# "<C-p>" = ":prev-tab<Enter>"; "<C-p>" = ":prev-tab<Enter>";
# "<C-n>" = ":next-tab<Enter>"; "<C-n>" = ":next-tab<Enter>";
# "?" = ":help keys<Enter>"; "?" = ":help keys<Enter>";
# }; };
# messages = { messages = {
# "h" = ":prev-tab<Enter>"; "h" = ":prev-tab<Enter>";
# "l" = ":next-tab<Enter>"; "l" = ":next-tab<Enter>";
# "j" = ":next<Enter>"; "j" = ":next<Enter>";
# "<Down>" = ":next<Enter>"; "<Down>" = ":next<Enter>";
# "<C-d>" = ":next 50%<Enter>"; "<C-d>" = ":next 50%<Enter>";
# "<C-f>" = ":next 100%<Enter>"; "<C-f>" = ":next 100%<Enter>";
# "<PgDn>" = ":next 100%<Enter>"; "<PgDn>" = ":next 100%<Enter>";
# "k" = ":prev<Enter>"; "k" = ":prev<Enter>";
# "<Up>" = ":prev<Enter>"; "<Up>" = ":prev<Enter>";
# "<C-u>" = ":prev 50%<Enter>"; "<C-u>" = ":prev 50%<Enter>";
# "<C-b>" = ":prev 100%<Enter>"; "<C-b>" = ":prev 100%<Enter>";
# "<PgUp>" = ":prev 100%<Enter>"; "<PgUp>" = ":prev 100%<Enter>";
# "g" = ":select 0<Enter>"; "g" = ":select 0<Enter>";
# "G" = ":select -1<Enter>"; "G" = ":select -1<Enter>";
# "J" = ":next-folder<Enter>"; "J" = ":next-folder<Enter>";
# "K" = ":prev-folder<Enter>"; "K" = ":prev-folder<Enter>";
# "H" = ":collapse-folder<Enter>"; "H" = ":collapse-folder<Enter>";
# "L" = ":expand-folder<Enter>"; "L" = ":expand-folder<Enter>";
# "v" = ":mark -t<Enter>"; "v" = ":mark -t<Enter>";
# "x" = ":mark -t<Enter>:next<Enter>"; "x" = ":mark -t<Enter>:next<Enter>";
# "V" = ":mark -v<Enter>"; "V" = ":mark -v<Enter>";
# "T" = ":toggle-threads<Enter>"; "T" = ":toggle-threads<Enter>";
# "<Enter>" = ":view<Enter>"; "<Enter>" = ":view<Enter>";
# "d" = ":prompt 'Really delete this message?' 'delete-message'<Enter>"; "d" = ":prompt 'Really delete this message?' 'delete-message'<Enter>";
# "D" = ":delete<Enter>"; "D" = ":delete<Enter>";
# "A" = ":archive flat<Enter>"; "A" = ":archive flat<Enter>";
# "C" = ":compose<Enter>"; "C" = ":compose<Enter>";
# "rr" = ":reply -a<Enter>"; "rr" = ":reply -a<Enter>";
# "rq" = ":reply -aq<Enter>"; "rq" = ":reply -aq<Enter>";
# "Rr" = ":reply<Enter>"; "Rr" = ":reply<Enter>";
# "Rq" = ":reply -q<Enter>"; "Rq" = ":reply -q<Enter>";
# "c" = ":cf<space>"; "c" = ":cf<space>";
# "$" = ":term<space>"; "$" = ":term<space>";
# "!" = ":term<space>"; "!" = ":term<space>";
# "|" = ":pipe<space>"; "|" = ":pipe<space>";
# "/" = ":search<space>"; "/" = ":search<space>";
# "\\" = ":filter<space>"; "\\" = ":filter<space>";
# "n" = ":next-result<Enter>"; "n" = ":next-result<Enter>";
# "N" = ":prev-result<Enter>"; "N" = ":prev-result<Enter>";
# "<Esc>" = ":clear<Enter>"; "<Esc>" = ":clear<Enter>";
# }; };
# "messages:folder=Drafts" = { "messages:folder=Drafts" = {
# "<Enter>" = ":recall<Enter>"; "<Enter>" = ":recall<Enter>";
# }; };
# view = { view = {
# "/" = ":toggle-key-passthrough<Enter>/"; "/" = ":toggle-key-passthrough<Enter>/";
# "q" = ":close<Enter>"; "q" = ":close<Enter>";
# "O" = ":open<Enter>"; "O" = ":open<Enter>";
# "S" = ":save<space>"; "S" = ":save<space>";
# "|" = ":pipe<space>"; "|" = ":pipe<space>";
# "D" = ":delete<Enter>"; "D" = ":delete<Enter>";
# "A" = ":archive flat<Enter>"; "A" = ":archive flat<Enter>";
# "<C-l>" = ":open-link <space>"; "<C-l>" = ":open-link <space>";
# "f" = ":forward<Enter>"; "f" = ":forward<Enter>";
# "rr" = ":reply -a<Enter>"; "rr" = ":reply -a<Enter>";
# "rq" = ":reply -aq<Enter>"; "rq" = ":reply -aq<Enter>";
# "Rr" = ":reply<Enter>"; "Rr" = ":reply<Enter>";
# "Rq" = ":reply -q<Enter>"; "Rq" = ":reply -q<Enter>";
# "H" = ":toggle-headers<Enter>"; "H" = ":toggle-headers<Enter>";
# "<C-k>" = ":prev-part<Enter>"; "<C-k>" = ":prev-part<Enter>";
# "<C-j>" = ":next-part<Enter>"; "<C-j>" = ":next-part<Enter>";
# "J" = ":next<Enter>"; "J" = ":next<Enter>";
# "K" = ":prev<Enter>"; "K" = ":prev<Enter>";
# }; };
# "view::passthrough" = { "view::passthrough" = {
# "$noinherit" = true; "$noinherit" = true;
# "$ex" = "<C-x>"; "$ex" = "<C-x>";
# "<Esc>" = ":toggle-key-passthrough<Enter>"; "<Esc>" = ":toggle-key-passthrough<Enter>";
# }; };
# compose = { compose = {
# "$noinherit" = "true"; "$noinherit" = "true";
# "$ex" = "<C-x>"; "$ex" = "<C-x>";
# "<C-k>" = ":prev-field<Enter>"; "<C-k>" = ":prev-field<Enter>";
# "<C-j>" = ":next-field<Enter>"; "<C-j>" = ":next-field<Enter>";
# "<A-p>" = ":switch-account -p<Enter>"; "<A-p>" = ":switch-account -p<Enter>";
# "<A-n>" = ":switch-account -n<Enter>"; "<A-n>" = ":switch-account -n<Enter>";
# "<tab>" = ":next-field<Enter>"; "<tab>" = ":next-field<Enter>";
# "<C-p>" = ":prev-tab<Enter>"; "<C-p>" = ":prev-tab<Enter>";
# "<C-n>" = ":next-tab<Enter>"; "<C-n>" = ":next-tab<Enter>";
# }; };
# "compose::editor" = { "compose::editor" = {
# "$noinherit" = "true"; "$noinherit" = "true";
# "$ex" = "<C-x>"; "$ex" = "<C-x>";
# "<C-k>" = ":prev-field<Enter>"; "<C-k>" = ":prev-field<Enter>";
# "<C-j>" = ":next-field<Enter>"; "<C-j>" = ":next-field<Enter>";
# "<C-p>" = ":prev-tab<Enter>"; "<C-p>" = ":prev-tab<Enter>";
# "<C-n>" = ":next-tab<Enter>"; "<C-n>" = ":next-tab<Enter>";
# }; };
# "compose::review" = { "compose::review" = {
# "y" = ":send<Enter>"; "y" = ":send<Enter>";
# "n" = ":abort<Enter>"; "n" = ":abort<Enter>";
# "p" = ":postpone<Enter>"; "p" = ":postpone<Enter>";
# "q" = ":choose -o d discard abort -o p postpone postpone<Enter>"; "q" = ":choose -o d discard abort -o p postpone postpone<Enter>";
# "e" = ":edit<Enter>"; "e" = ":edit<Enter>";
# "a" = ":attach<space>"; "a" = ":attach<space>";
# "d" = ":detach<space>"; "d" = ":detach<space>";
# }; };
# terminal = { terminal = {
# "$noinherit" = "true"; "$noinherit" = "true";
# "$ex" = "<C-x>"; "$ex" = "<C-x>";
# "<C-p>" = ":prev-tab<Enter>"; "<C-p>" = ":prev-tab<Enter>";
# "<C-n>" = ":next-tab<Enter>"; "<C-n>" = ":next-tab<Enter>";
# }; };
# }; };
# extraConfig = { extraConfig = {
# general.unsafe-accounts-conf = true; general.unsafe-accounts-conf = true;
# ui = { ui = {
# styleset-name = "catppuccin-mocha"; styleset-name = "catppuccin-mocha";
# this-day-time-format = ''" 15:04"''; this-day-time-format = ''" 15:04"'';
# this-year-time-format = "Mon Jan 02 15:04"; this-year-time-format = "Mon Jan 02 15:04";
# timestamp-format = "2006-01-02 15:04"; timestamp-format = "2006-01-02 15:04";
# spinner = "[ ⡿ ],[ ⣟ ],[ ⣯ ],[ ⣷ ],[ ⣾ ],[ ⣽ ],[ ⣻ ],[ ⢿ ]"; spinner = "[ ],[ ],[ ],[ ],[ ],[ ],[ ],[ ]";
# border-char-vertical = "┃"; border-char-vertical = "";
# border-char-horizontal = "━"; border-char-horizontal = "";
# }; };
# viewer = { viewer = {
# always-show-mime = true; always-show-mime = true;
# }; };
# compose = { compose = {
# no-attachment-warning = "^[^>]*attach(ed|ment)"; no-attachment-warning = "^[^>]*attach(ed|ment)";
# }; };
# filters = { filters = {
# "text/plain" = "colorize"; "text/plain" = "colorize";
# "text/html" = "html"; "text/html" = "html";
# "text/calendar" = "calendar"; "text/calendar" = "calendar";
# "message/delivery-status" = "colorize"; "message/delivery-status" = "colorize";
# "message/rfc822" = "colorize"; "message/rfc822" = "colorize";
# "image/*" = "${pkgs.catimg}/bin/catimg -"; "image/*" = "${pkgs.catimg}/bin/catimg -";
# }; };
# }; };
# }; };
programs.notmuch = { programs.notmuch = {
enable = true; enable = true;

View file

@ -10,7 +10,7 @@ lib.mkMerge [
server.enable = true; server.enable = true;
settings = { settings = {
main = { main = {
term = "xterm-direct"; term = "xterm-256color";
login-shell = "yes"; login-shell = "yes";
dpi-aware = "no"; dpi-aware = "no";
horizontal-letter-offset = "1"; horizontal-letter-offset = "1";

View file

@ -3,7 +3,6 @@
pkgs, pkgs,
age, age,
hostname, hostname,
config,
... ...
}: }:
{ {
@ -48,19 +47,13 @@
Install = { Install = {
WantedBy = [ "default.target" ]; WantedBy = [ "default.target" ];
}; };
Service = { Service.ExecStart = "${lib.getExe pkgs.atuin} daemon";
# ExecStartPre = "${lib.getExe' pkgs.toybox "rm"} -f ${config.programs.atuin.settings.daemon.socket_path}";
ExecStart = "${lib.getExe pkgs.atuin} daemon";
};
}; };
programs.atuin = { programs.atuin = {
enable = true; enable = true;
settings = { settings = {
daemon = { daemon.enabled = true;
enabled = true;
socket_path = "/home/ccr/.local/share/atuin/atuin.sock"; # FIXME using ~ or $HOME doesn't work: https://github.com/atuinsh/atuin/issues/2289
};
auto_sync = true; auto_sync = true;
sync_frequency = "5m"; sync_frequency = "5m";
sync_address = "http://sisko.fleet:8889"; sync_address = "http://sisko.fleet:8889";

View file

@ -115,6 +115,7 @@
owner = "grafana"; owner = "grafana";
group = "forgejo"; group = "forgejo";
}; };
"garmin-collector-environment".owner = "garmin-collector";
}; };
}; };
}; };

View file

@ -25,6 +25,7 @@
"prometheus-exporters" "prometheus-exporters"
"loki" "loki"
"promtail" "promtail"
"garmin-collector"
"restic" "restic"
"atuin" "atuin"
"immich" "immich"
@ -62,18 +63,10 @@
]; ];
boot.kernelParams = [ boot.kernelParams = [
"earlycon"
"consoleblank=0"
"console=tty1" "console=tty1"
"console=ttyS2,1500000" "console=ttyS0,1500000"
]; ];
systemd.services."serial-getty@ttyS2" = {
enable = true;
wantedBy = [ "getty.target" ];
serviceConfig.restart = "always";
};
environment.persistence."/persist" = { environment.persistence."/persist" = {
hideMounts = true; hideMounts = true;
directories = [ directories = [

View file

@ -55,19 +55,5 @@ in
]; ];
timerConfig.OnCalendar = "daily"; timerConfig.OnCalendar = "daily";
timerConfig.RandomizedDelaySec = "1h"; timerConfig.RandomizedDelaySec = "1h";
backupPrepareCommand = ''
${pkgs.systemd}/bin/systemctl stop podman-*
${pkgs.systemd}/bin/systemctl stop syncthing
${pkgs.systemd}/bin/systemctl stop paperless-*
${pkgs.systemd}/bin/systemctl stop forgejo
${pkgs.systemd}/bin/systemctl stop home-assistant
'';
backupCleanupCommand = ''
${pkgs.systemd}/bin/systemctl start --no-block --all "podman-*"
${pkgs.systemd}/bin/systemctl start syncthing
${pkgs.systemd}/bin/systemctl start --no-block --all "paperless-*"
${pkgs.systemd}/bin/systemctl start forgejo
${pkgs.systemd}/bin/systemctl start home-assistant
'';
}; };
} }

View file

@ -20,7 +20,7 @@
]; ];
}; };
sisko = { sisko = {
id = "TOC7QXZ-JLB4LYP-VNIJAV5-DCKVGFN-UE45SPX-PPFJHSG-O3UHFCK-2PEMAQ6"; id = "5JYQLMP-KNBMSOE-I452UDU-UTKPXJI-K27X2DI-MSCSRCG-6V54Q6U-NVGXPQA";
addresses = [ addresses = [
"tcp://sisko.fleet" "tcp://sisko.fleet"
]; ];