Compare commits

...

8 commits

8 changed files with 209 additions and 163 deletions

View file

@ -787,11 +787,30 @@ This is meant to be an helper to be called from the window manager."
(defun org-roam-node-date (node)
"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)))))
(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)
(defun ccr/org-roam-spent-hours (client &optional date-start date-end)
"Return the total spent hours on something (usually a client)"
(apply #'+(mapcar #'org-roam-node-spent (org-roam-ql-nodes `(tags ,client "billable")))))
)
(let* ((query-tags `(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
:after org-roam

View file

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

View file

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

View file

@ -3,6 +3,7 @@
pkgs,
age,
hostname,
config,
...
}:
{
@ -47,13 +48,19 @@
Install = {
WantedBy = [ "default.target" ];
};
Service.ExecStart = "${lib.getExe pkgs.atuin} daemon";
Service = {
# ExecStartPre = "${lib.getExe' pkgs.toybox "rm"} -f ${config.programs.atuin.settings.daemon.socket_path}";
ExecStart = "${lib.getExe pkgs.atuin} daemon";
};
};
programs.atuin = {
enable = true;
settings = {
daemon.enabled = true;
daemon = {
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;
sync_frequency = "5m";
sync_address = "http://sisko.fleet:8889";

View file

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

View file

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

View file

@ -55,5 +55,19 @@ in
];
timerConfig.OnCalendar = "daily";
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 = {
id = "5JYQLMP-KNBMSOE-I452UDU-UTKPXJI-K27X2DI-MSCSRCG-6V54Q6U-NVGXPQA";
id = "TOC7QXZ-JLB4LYP-VNIJAV5-DCKVGFN-UE45SPX-PPFJHSG-O3UHFCK-2PEMAQ6";
addresses = [
"tcp://sisko.fleet"
];