diff --git a/cal.lisp b/cal.lisp index 3b5fde4..2633409 100644 --- a/cal.lisp +++ b/cal.lisp @@ -1,9 +1,6 @@ (load (sb-ext:posix-getenv "ASDF")) -(asdf:load-system 'str) -(asdf:load-system 'alexandria) (asdf:load-system 'cl-dates) - ;; week is 7 days ;; 52 weeks in a year ;; 13 weeks in a quarter @@ -23,20 +20,21 @@ (defun week-number (date) (mod (cl-dates:week-number date) 52)) -(defun write-page-cycle (stream cl-date year-number quarter-number cycle-number) - (format stream " +(defun write-page-header (stream header-text) + (format stream " #set page( paper: \"a4\", flipped: true, - header: [ - Y~d - #h(1fr) - Q~d - #h(1fr) - C~d - ], - margin: 0.5cm) - " year-number quarter-number cycle-number) + header: align(bottom)[~A], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) + " header-text) + ) +(defun write-page-cycle (stream cl-date year-number quarter-number cycle-number) + (write-page-header stream (format nil "Y~d #h(1fr) Q~d #h(1fr) C~d" year-number quarter-number cycle-number)) (format stream "#table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -51,35 +49,21 @@ (format stream ",[#h(1fr) ~d]" dd)))))) (format stream ")~%")) (defun write-page-reset-week (stream cl-date year-number quarter-number) - (format stream " - #set page( - paper: \"a4\", - flipped: true, - header: [ - Y~d - #h(1fr) - Q~d - #h(1fr) - Reset Week - ], - margin: 0.5cm) - " year-number quarter-number) - (format stream "#table( - columns: (1fr, 1fr, 1fr), - rows: (1fr), - align(center)[_Going In_] - ") - (loop for day from 0 to 6 - do (let* ((week-day (+ cl-date day)) - (day-of-week (cl-dates:dow->string (cl-dates:day-of-week week-day)))) - (multiple-value-bind (yy mm dd) (cl-dates:date->ymd week-day) - (if (= 1 dd) - (format stream ",[~A #h(1fr) ~A]~%" day-of-week (cl-dates:month->string mm)) - (format stream ",[~A #h(1fr) ~d]~%" day-of-week dd)) - ))) - (format stream ",align(center)[_Coming Out_]") - (format stream ")~%") - ) + (write-page-header stream (format nil "Y~d #h(1fr) Q~d #h(1fr) Reset Week" year-number quarter-number)) + (format stream "#table( + columns: (1fr, 1fr, 1fr), + rows: (1fr), + align(center)[_Going In_]") + (loop for day from 0 to 6 + do (let* ((week-day (+ cl-date day)) + (day-of-week (cl-dates:dow->string (cl-dates:day-of-week week-day)))) + (multiple-value-bind (yy mm dd) (cl-dates:date->ymd week-day) + (if (= 1 dd) + (format stream ",[~A #h(1fr) ~A]~%" day-of-week (cl-dates:month->string mm)) + (format stream ",[~A #h(1fr) ~d]~%" day-of-week dd)) + ))) + (format stream ",align(center)[_Coming Out_]") + (format stream ")~%")) (defun write-pages-quarter (stream cl-date year-number quarter-number) (loop for c from 0 to 2 do (write-page-cycle stream (add-weeks cl-date (* c 4)) year-number quarter-number (+ c 1))) (write-page-reset-week stream (add-weeks cl-date 12) year-number quarter-number)) diff --git a/flake.nix b/flake.nix index ad05600..7fa1bd1 100644 --- a/flake.nix +++ b/flake.nix @@ -33,9 +33,6 @@ inherit (pkgs) lib; sbcl = pkgs.sbcl.withPackages (ps: [ - ps.str - ps.cl-heap - ps.alexandria inputs.cl-dates.packages.x86_64-linux.default ]); diff --git a/main.typ b/main.typ index 3551d52..f5f24a1 100644 --- a/main.typ +++ b/main.typ @@ -4,14 +4,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q1 - #h(1fr) - C1 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q1 #h(1fr) C1], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -24,14 +22,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q1 - #h(1fr) - C2 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q1 #h(1fr) C2], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -44,14 +40,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q1 - #h(1fr) - C3 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q1 #h(1fr) C3], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -64,19 +58,16 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q1 - #h(1fr) - Reset Week - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q1 #h(1fr) Reset Week], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( - columns: (1fr, 1fr, 1fr), - rows: (1fr), - align(center)[_Going In_] - ,[Monday #h(1fr) 23] + columns: (1fr, 1fr, 1fr), + rows: (1fr), + align(center)[_Going In_],[Monday #h(1fr) 23] ,[Tuesday #h(1fr) 24] ,[Wednesday #h(1fr) 25] ,[Thursday #h(1fr) 26] @@ -88,14 +79,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q2 - #h(1fr) - C1 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q2 #h(1fr) C1], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -108,14 +97,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q2 - #h(1fr) - C2 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q2 #h(1fr) C2], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -128,14 +115,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q2 - #h(1fr) - C3 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q2 #h(1fr) C3], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -148,19 +133,16 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q2 - #h(1fr) - Reset Week - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q2 #h(1fr) Reset Week], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( - columns: (1fr, 1fr, 1fr), - rows: (1fr), - align(center)[_Going In_] - ,[Monday #h(1fr) 22] + columns: (1fr, 1fr, 1fr), + rows: (1fr), + align(center)[_Going In_],[Monday #h(1fr) 22] ,[Tuesday #h(1fr) 23] ,[Wednesday #h(1fr) 24] ,[Thursday #h(1fr) 25] @@ -172,14 +154,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q3 - #h(1fr) - C1 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q3 #h(1fr) C1], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -192,14 +172,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q3 - #h(1fr) - C2 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q3 #h(1fr) C2], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -212,14 +190,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q3 - #h(1fr) - C3 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q3 #h(1fr) C3], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -232,19 +208,16 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q3 - #h(1fr) - Reset Week - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q3 #h(1fr) Reset Week], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( - columns: (1fr, 1fr, 1fr), - rows: (1fr), - align(center)[_Going In_] - ,[Monday #h(1fr) 21] + columns: (1fr, 1fr, 1fr), + rows: (1fr), + align(center)[_Going In_],[Monday #h(1fr) 21] ,[Tuesday #h(1fr) 22] ,[Wednesday #h(1fr) 23] ,[Thursday #h(1fr) 24] @@ -256,14 +229,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q4 - #h(1fr) - C1 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q4 #h(1fr) C1], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -276,14 +247,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q4 - #h(1fr) - C2 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q4 #h(1fr) C2], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -296,14 +265,12 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q4 - #h(1fr) - C3 - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q4 #h(1fr) C3], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr), rows: (auto, 1fr), @@ -316,19 +283,16 @@ #set page( paper: "a4", flipped: true, - header: [ - Y2026 - #h(1fr) - Q4 - #h(1fr) - Reset Week - ], - margin: 0.5cm) + header: align(bottom)[Y2026 #h(1fr) Q4 #h(1fr) Reset Week], + margin: ( + top: 1.5cm, + bottom: 0.5cm, + x: 0.5cm + )) #table( - columns: (1fr, 1fr, 1fr), - rows: (1fr), - align(center)[_Going In_] - ,[Monday #h(1fr) 21] + columns: (1fr, 1fr, 1fr), + rows: (1fr), + align(center)[_Going In_],[Monday #h(1fr) 21] ,[Tuesday #h(1fr) 22] ,[Wednesday #h(1fr) 23] ,[Thursday #h(1fr) 24]