diff --git a/home-manager/machines.nix b/home-manager/machines.nix index 435d0265..4b7a1396 100644 --- a/home-manager/machines.nix +++ b/home-manager/machines.nix @@ -162,5 +162,6 @@ in { ./roles/mail2rss.nix ./roles/headless-mpd.nix ./roles/headless.nix + ./roles/create-plans.nix ]); } diff --git a/home-manager/roles/create-plans.nix b/home-manager/roles/create-plans.nix new file mode 100644 index 00000000..68a42926 --- /dev/null +++ b/home-manager/roles/create-plans.nix @@ -0,0 +1,47 @@ +{pkgs, ...}: let + plans = pkgs.privateValue + { + "workDay" = "pass"; + "weekend" = "pass"; + } + "plans"; + createPlans = pkgs.writeHaskellScript + { + name = "create-plans"; + bins = [pkgs.khal pkgs.vdirsyncer]; + imports = [ + "Data.Time" + ]; + } '' + main = do + today <- localDay . zonedTimeToLocalTime <$> getZonedTime + [0..7] & fmap (`addDays` today) & mapM_ \day -> do + planned <- khal ["list", "-a", "Planung", show day, "06:00", "24h", "--notstarted"] |> captureTrim + when (planned == "No events") $ do + say $ "Creating events for " <> show day + if (dayOfWeek day `elem` [Saturday, Sunday]) then do + ${plans.weekend} + else do + ${plans.workDay} + ''; +in { + systemd.user = { + services.create-plans = { + Unit.Description = "Create planning appointments in calendar"; + Service = { + Type = "oneshot"; + ExecStart = toString (pkgs.writeShellScript "update-plans" '' + set -e + ${pkgs.vdirsyncer}/bin/vdirsyncer sync nextcloud_calendar/planung + ${createPlans}/bin/create-plans + ${pkgs.vdirsyncer}/bin/vdirsyncer sync nextcloud_calendar/planung + ''); + }; + }; + timers.create-plans = { + Unit.Description = "Create planning appointments in calendar"; + Timer.OnCalendar = "00:01:00"; + Install.WantedBy = ["timers.target"]; + }; + }; +} diff --git a/home-manager/roles/khal.nix b/home-manager/roles/khal.nix index b9c485b0..d992c8f9 100644 --- a/home-manager/roles/khal.nix +++ b/home-manager/roles/khal.nix @@ -1,30 +1,5 @@ {pkgs, ...}: let calendars = pkgs.privateValue [] "calendars"; - plans = pkgs.privateValue - { - "workDay" = "pass"; - "weekend" = "pass"; - } - "plans"; - createPlans = pkgs.writeHaskellScript - { - name = "create-plans"; - bins = [pkgs.khal pkgs.vdirsyncer]; - imports = [ - "Data.Time" - ]; - } '' - main = do - today <- localDay . zonedTimeToLocalTime <$> getZonedTime - [0..7] & fmap (`addDays` today) & mapM_ \day -> do - planned <- khal ["list", "-a", "Planung", show day, "06:00", "24h", "--notstarted"] |> captureTrim - when (planned == "No events") $ do - say $ "Creating events for " <> show day - if (dayOfWeek day `elem` [Saturday, Sunday]) then do - ${plans.weekend} - else do - ${plans.workDay} - ''; ui = pkgs.writeShellScriptBin "calendar" '' ikhal -d Serien ''; @@ -57,23 +32,4 @@ in { calendars } ''; - systemd.user = { - services.create-plans = { - Unit.Description = "Create planning appointments in calendar"; - Service = { - Type = "oneshot"; - ExecStart = toString (pkgs.writeShellScript "update-plans" '' - set -e - ${pkgs.vdirsyncer}/bin/vdirsyncer sync nextcloud_calendar/planung - ${createPlans}/bin/create-plans - ${pkgs.vdirsyncer}/bin/vdirsyncer sync nextcloud_calendar/planung - ''); - }; - }; - timers.create-plans = { - Unit.Description = "Create planning appointments in calendar"; - Timer.OnCalendar = "hourly"; - Install.WantedBy = ["timers.target"]; - }; - }; }