Compare commits
8 commits
9034479a24
...
5fe4764f01
Author | SHA1 | Date | |
---|---|---|---|
5fe4764f01 | |||
aa3ccc9a9d | |||
c4a7c09930 | |||
04d19cb17d | |||
b97907ebcd | |||
f92a7d0bc9 | |||
45aa2c98fd | |||
22d7205413 |
8 changed files with 209 additions and 163 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -115,7 +115,6 @@
|
|||
owner = "grafana";
|
||||
group = "forgejo";
|
||||
};
|
||||
"garmin-collector-environment".owner = "garmin-collector";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
];
|
||||
|
|
Loading…
Add table
Reference in a new issue