User Tools

Site Tools


build_dianne_skoll_s_remind

Build Dianne Skoll's Remind

This software builds beautiful calendars, and it can do a lot more than that, things like send an e-mail two days before a full moon, or pop up a desktop alert to remind you about your meeting that happens on the fourth Saturday of the month except for November and December when it's on the third Saturday.


This is built on a fresh Debian/Ubuntu/Mint install, it's similar for Fedora/etc…

sudo apt install -y etckeeper git tig
sudo apt update && sudo apt upgrade
sudo apt install -y build-essential checkinstall libjson-maybexs-perl libpango-perl libcairo-perl
git clone https://git.skoll.ca/Skollsoft-Public/Remind.git
cd Remind/
./configure
make
make test
sudo make install
cd ~
vim .reminders
# This should generate a 12 month calendar for 2024
remind -pp -ca12 ~/.reminders 2024/01/01 | rem2pdf -e -l -c3 -m Letter > Calendar.pdf

Below is the content of the .reminders file;

# Set your latitude and longitude correctly for Sunrise/Sunset/Equinox/Solstice
#
# The values below are for Eastgate, Ohio
SET $LongDeg -84
SET $LongMin 44
SET $LongSec 53
SET $LatDeg 39
SET $LatMin 5
SET $LatSec 51

SET Sunday    0
SET Monday    1
SET Tuesday   2
SET Wednesday 3
SET Thursday  4
SET Friday    5
SET Saturday  6
SET Sun 0
SET Mon 1
SET Tue 2
SET Wed 3
SET Thu 4
SET Fri 5
SET Sat 6
SET Jan 1
SET Feb 2
SET Mar 3
SET Apr 4
SET May 5
SET Jun 6
SET Jul 7
SET Aug 8
SET Sep 9
SET Oct 10
SET Nov 11
SET Dec 12
SET January   1
SET February  2
SET March     3
SET April     4
SET May       5
SET June      6
SET July      7
SET August    8
SET September 9
SET October   10
SET November  11
SET December  12
SET Quote CHAR(34)
SET  Week_1              1
SET  Week_2              8
SET  Week_3             15
SET  Week_4             22
FSET _last(mo)          "1 " + MON((mo%12)+1)+" --7"
FSET _trig()            TRIGGER(TRIGDATE())
FSET _back(days)        TRIGGER(TODAY()-days)
FSET _am_pm(tm) IIF(tm<01:00, tm+12*60+"am", \
                    tm<12:00, tm+"am", \
                    tm<13:00, tm+"pm", \
                    tm-12*60+"pm")
FSET _no_lz(s) IIF(SUBSTR(s, 1, 1)=="0", SUBSTR(s, 2), s)

REM Thu MSG Garbage to curb

# Important Meeting
REM 22 Sat SATISFY [$Tm != 11 && $Tm != 12] MSG Important Meeting
REM 15 Sat SATISFY [$Tm == 11 || $Tm == 12] MSG Important Meeting

# Payday!
REM 2022 Aug 19 *14 MSG Payday

# Tiny sunrise, sunset, and day of year notification
FSET _DayOfYear(x) x-(date(year(x),1,1) - 1)
REM SPECIAL PANGO @4,-1 <span size="4200"><i>Rise [sunrise($U)] Set [sunset($U)] [_DayOfYear(today())] ([365+isleap(today())-_DayOfYear(today())])</i></span>

# Show the phases of the moon
[trigger(moondate(0))] SPECIAL MOON 0
[trigger(moondate(1))] SPECIAL MOON 1
[trigger(moondate(2))] SPECIAL MOON 2
[trigger(moondate(3))] SPECIAL MOON 3

IF $LatDeg >= 0
   REM [soleq(0)] MSG Vernal Equinox
   REM [soleq(1)] MSG Summer Solstice
   REM [soleq(2)] MSG Autumnal Equinox
   REM [soleq(3)] MSG Winter Solstice
ELSE
   REM [soleq(0)] MSG Autumnal Equinox
   REM [soleq(1)] MSG Winter Solstice
   REM [soleq(2)] MSG Vernal Equinox
   REM [soleq(3)] MSG Summer Solstice
ENDIF


# Regular holidays
REM Sat Sun SPECIAL SHADE 245 245 245
SET SaveTrig $NumTrig
SET easter EASTERDATE(YEAR(TODAY()))
REM  [TRIGGER(easter-46)] MSG Ash Wednesday
REM  [TRIGGER(easter-7)]  MSG Palm Sunday
REM  [TRIGGER(easter-2)]  MSG Good Friday
REM  [TRIGGER(easter)]    MSG Easter Sunday
REM  [TRIGGER(easter+39)] MSG Ascension Day
REM  [TRIGGER(easter+49)] MSG Pentecost
REM     Jan  1          MSG New Year's Day
REM  Mon Jan [Week_3]   MSG Martin Luther King Day
REM      Feb  2         MSG Ground Hog Day
REM     Feb 14          MSG Valentine's Day
REM  Mon Feb [Week_3]   SCANFROM [_back(7)] SATISFY 1
                        OMIT [_trig()] MSG President's Day
REM     Mar 17          MSG St. Patrick's Day
REM Sun Mar 8           MSG Daylight Saving Time
REM     Apr  1          MSG April Fool's Day
FSET _ustax(x) (wkdaynum(x) == 1 && day(x) != 15)
REM OMITFUNC _ustax Mon Tue Wed Thu 15 Apr AFTER MSG %"Income Tax Day%"
REM      May  5         MSG Cinco de Mayo
REM  Sat May [Week_1]   MSG Kentucky Derby
REM  Sun May [Week_2]   MSG Mother's Day
REM  Sat May [Week_3]   MSG Armed Forces Day
REM  Mon [_last(May)]   SCANFROM [_back(7)] SATISFY 1
                        OMIT [_trig()] MSG Memorial Day
REM     Jun 14          MSG Flag Day
REM     Jun 19          MSG Juneteenth
REM  Sun Jun [Week_3]   MSG Father's Day
REM 4 July SCANFROM [_back(7)] SATISFY 1
IF WKDAYNUM(TRIGDATE()) == Sat
        REM [TRIGGER(TRIGDATE())] MSG Independence day (actual)
        OMIT [TRIGGER(TRIGDATE()-1)] MSG Independence day (observed)
ELSE
        IF WKDAYNUM(TRIGDATE()) == Sun
                REM [TRIGGER(TRIGDATE())] MSG Independence day (actual)
                OMIT [TRIGGER(TRIGDATE()+1)] MSG Independence day (observed)
        ELSE
                OMIT [TRIGGER(TRIGDATE())] MSG Independence day
        ENDIF
ENDIF
REM  Aug Fri 1 --7 MSG Sysadmin's Day
REM  Sep 22             Emancipation Day
REM  Mon Sep [Week_1]   SCANFROM [_back(7)] SATISFY 1
                        OMIT [_trig()] MSG Labor Day
REM  Mon Oct [Week_2]   MSG Columbus Day
REM      Nov 11         MSG Veterans Day
REM Sun Nov 1           MSG Daylight Saving Time ends
REM      Oct 30         MSG Mischief Night
REM      Oct 31         MSG Halloween
REM  Tue Nov  2         SCANFROM [_back(7)] \
        SATISFY [(YEAR(TRIGDATE()) % 4) == 0] \
        MSG Election Day
REM  Thu Nov [Week_4]   SCANFROM [_back(7)] SATISFY 1
                        OMIT [_trig()] MSG Thanksgiving Day
REM  Fri Nov [Week_4+1] SCANFROM [_back(7)] SATISFY 1
                        OMIT [_trig()] MSG Black Friday
REM     Dec 24          MSG Christmas Eve
REM     Dec 25          MSG Christmas Day
if $NumTrig > SaveTrig
        REM SPECIAL SHADE 240 240 220
endif

# Vacation days from work;
SET SaveTrig $NumTrig
REM May, 29, 2023 MSG Memorial Day
REM Jul, 04, 2023 MSG Independence Day
REM Sep, 04, 2023 MSG Labor Day
REM Nov, 23, 2023 MSG Thanksgiving
REM Nov, 24, 2023 MSG Day After Thanksgiving
REM Dec, 22, 2023 MSG Christmas Eve
REM Dec, 25, 2023 MSG Christmas Day
REM Dec, 29, 2023 MSG New Year's Eve
REM Jan, 01, 2024 MSG New Year's Day
REM May, 27, 2024 MSG Memorial Day
REM Jul, 04, 2024 MSG Independence Day
REM Sep, 02, 2024 MSG Labor Day
REM Nov, 28, 2024 MSG Thanksgiving
REM Nov, 29, 2024 MSG Day After Thanksgiving
REM Dec, 24, 2024 MSG Christmas Eve
REM Dec, 25, 2024 MSG Christmas Day
REM Dec, 31, 2024 MSG New Year's Eve
if $NumTrig > SaveTrig
        REM SPECIAL SHADE 240 240 200
endif

# Family Holidays!
SET SaveTrig $NumTrig
REM 03 Jan MSG Amy's Birthday
REM 27 Jan MSG Bob's Birthday
REM 01 Feb MSG Chet's Birthday
REM 07 Feb MSG Dee's Birthday
REM 21 Mar MSG Earl's Anniversary
REM 25 Apr MSG Fannie's Birthday
REM 01 May MSG Gail's Birthday
REM 23 May MSG Hugh's Birthday
REM 01 Jun MSG Ingred's Birthday
REM 18 Jul MSG John's Birthday
REM 02 Aug MSG Kim's Birthday
REM 03 Aug MSG Lou's Birthday
REM 06 Sep MSG Marla's Birthday
REM 14 Sep MSG Noel's Anniversary
REM 03 Oct MSG Olivia's Anniversary
REM 07 Oct MSG Paul's Birthday
REM 14 Nov MSG Quinn's Birthday
REM 01 Dec MSG Rod's Birthday
REM 16 Dec MSG Scott's Birthday
if $NumTrig > SaveTrig
        REM SPECIAL SHADE 200 240 240
endif

Running this command in the home folder;

remind -pp -ca12 ~/.reminders 2024/01/01 | rem2pdf -e -l -c3 -m Letter > calendar.pdf

Generates this .pdf file.

This is an awk script that creates an ics file from the output of the remind software; rem2ics.

build_dianne_skoll_s_remind.txt · Last modified: by steve