nix-dotfiles/modules/flake-update-service.nix
Alice Huston 477b4cf466 Add autopull service for testing & pre-commit-hooks (#4)
* configure programs for photon

* sops fix

* Add flake-update-service for testing

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Add sops config

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* add photon password

* Fix user password

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* actually fix user config

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* change password for user dennis

* removed user password

* fixed yaml secrets

* yaml is silly, fix my yamls pls

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* quickfix

* Enforce systemdboot on palatine-hill

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* reconfigure photon

* Fix ZFS config on palatine-hill

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Fix systemd-boot on palatine-hill

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* sops update-keys

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Fix botched merge

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Add custom ssh command

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Fix option name, add package dependency

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Fix option name, add dependency

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* ssh-key path to str

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Fix git command

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Set up nixpkgs.fmt

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Allow autopull to trigger a rebuild

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Revert triggerRebuild on palatine-hill, add clarifying comment

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Attempt pre-commit hooks

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Increase pull frequency

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Fix duplicate flake-utils url

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Add fmt hook

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* add nix-flake-check hook

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Remove unnecessary flake-utils import by name

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Trying to setup inputs for nix-pre-commit

Co-authored-by: Dennis <52411861+DerDennisOP@users.noreply.github.com>

* Fixing input with flake inputs

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* make autopull service default and fix flake check hook

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Remove pre-commit-config.yml from gitignore

that decision seems to be something from one of my previous attempts at
this. Given that the config is needed for this to work it only makes
sense to have it.

/.pre-commit-config.yaml
/.pre-commit-config.yaml

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

* Rollback previous commit. yml file is a softlink

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>

---------

Signed-off-by: ahuston-0 <aliceghuston@gmail.com>
Co-authored-by: Dennis Wuitz <dennish@wuitz.de>
Co-authored-by: Dennis <52411861+DerDennisOP@users.noreply.github.com>
2024-01-01 12:41:32 -05:00

65 lines
2.1 KiB
Nix

{ config, lib, pkgs, ... }:
let
cfg = config.services.autopull;
in
{
options = {
services.autopull = {
enable = lib.mkEnableOption "autopull";
name = lib.mkOption {
type = lib.types.str;
default = "dotfiles";
description = "A name for the service which needs to be pulled";
};
path = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = "Path that needs to be updated via git pull";
};
frequency = lib.mkOption {
type = lib.types.str;
description = "systemd-timer compatible time between pulls";
default = "1h";
};
ssh-key = lib.mkOption {
type = lib.types.str;
description = "ssh-key used to pull the repository";
};
triggersRebuild = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''Whether or not the rebuild service should be triggered after pulling. Note that system.autoUpgrade must be pointed at the same directory as this service if you'd like to use this option.'';
};
};
};
# implementation
config = lib.mkIf (cfg.enable && !(builtins.isNull cfg.path)) {
systemd.services."autopull@${cfg.name}" = {
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
description = "Pull the latest data for ${cfg.name}";
serviceConfig = {
Type = "oneshot";
# TODO: See how we can migrate this to DynamicUser=yes instead
User = "root";
WorkingDirectory = cfg.path;
Environment = lib.mkIf (cfg.ssh-key != "") "GIT_SSH_COMMAND=${pkgs.openssh}/bin/ssh -i ${cfg.ssh-key} -o IdentitiesOnly=yes";
ExecStart = "${pkgs.git}/bin/git pull --all";
Before = "nixos-upgrade.service";
Wants = "nixos-upgrade.service";
};
};
systemd.timers."autopull@${cfg.name}" = {
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = cfg.frequency;
OnUnitActiveSec = cfg.frequency;
Unit = "autopull@${cfg.name}.service";
};
};
environment.systemPackages = [ pkgs.openssh pkgs.git ];
};
}