diff --git a/hmModules/emacs/init.el b/hmModules/emacs/init.el index e630922..435ad0a 100644 --- a/hmModules/emacs/init.el +++ b/hmModules/emacs/init.el @@ -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 diff --git a/hmModules/email/default.nix b/hmModules/email/default.nix index 5ae160a..ab37b05 100644 --- a/hmModules/email/default.nix +++ b/hmModules/email/default.nix @@ -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; diff --git a/hmModules/foot/default.nix b/hmModules/foot/default.nix index e8ac8d3..840b866 100644 --- a/hmModules/foot/default.nix +++ b/hmModules/foot/default.nix @@ -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"; diff --git a/hmModules/shell/default.nix b/hmModules/shell/default.nix index 22ced2b..048a65f 100644 --- a/hmModules/shell/default.nix +++ b/hmModules/shell/default.nix @@ -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"; diff --git a/hosts/default.nix b/hosts/default.nix index 0498e19..5636017 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -115,7 +115,6 @@ owner = "grafana"; group = "forgejo"; }; - "garmin-collector-environment".owner = "garmin-collector"; }; }; }; diff --git a/hosts/sisko/default.nix b/hosts/sisko/default.nix index 6295c63..ba45c12 100644 --- a/hosts/sisko/default.nix +++ b/hosts/sisko/default.nix @@ -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 = [ diff --git a/modules/restic/default.nix b/modules/restic/default.nix index c3ba948..7aedfcd 100644 --- a/modules/restic/default.nix +++ b/modules/restic/default.nix @@ -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 + ''; }; } diff --git a/modules/syncthing/default.nix b/modules/syncthing/default.nix index eb25947..b1b9857 100644 --- a/modules/syncthing/default.nix +++ b/modules/syncthing/default.nix @@ -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" ];