From 83202087a516eff48164fca84439a0a40cde9231 Mon Sep 17 00:00:00 2001 From: derfenix Date: Tue, 7 Jan 2025 17:33:23 +0300 Subject: [PATCH] Update nix flake --- flake.nix | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 75 insertions(+), 7 deletions(-) diff --git a/flake.nix b/flake.nix index 3caa2a1..23e6158 100644 --- a/flake.nix +++ b/flake.nix @@ -23,18 +23,86 @@ src = ./.; vendorHash = "sha256-dj11SRRoB8ZbkcQs75HPI0DpW4c5jzY0N8MD1wKpw+4="; }; - }); + } + ); - nixosModules.photocatalog = { config, lib, pkgs, ... }: { - options.photocatalog = { - enable = lib.mkEnableOption "Enable photocatalog"; - }; + nixosModules.photocatalog = { config, lib, pkgs, ... }: { + options.photocatalog = { + enable = lib.mkEnableOption "Enable photocatalog"; - config = lib.mkIf config.photocatalog.enable { - environment.systemPackages = [ self.packages.${pkgs.system}.photocatalog ]; + syncs = mkOption { + default = {}; + description = '' + Organization paths with its own params. + ''; + example = { + + }; + type = types.attrsOf (types.submodule ({ name, ... }: { + freeformType = settingsFormat.type; + options = { + source = mkOption { + type = types.str; + default = name; + description = '' + Source folder path. + ''; + }; + target = mkOption { + type = types.str; + description = '' + Target folder path. + ''; + }; + overwrite = mkOption { + type = types.bool; + default = false; + description = '' + Overwrite files, existing in target. + ''; + }; + watch = mkOption { + type = types.bool; + default = true; + description = '' + Watch for new files in source path. + ''; + }; + skipFullSync = mkOption { + type = types.bool; + default = false; + description = '' + Do not make full sync. + ''; + }; + }; + })); }; }; + config = lib.mkIf config.photocatalog.enable { + environment.systemPackages = [ self.packages.${pkgs.system}.photocatalog ]; + systemd.services = lib.genAttrs config.photocatalog (sync: + { + ${sync.name} = { + name = "photocatalog_${sync.name}"; + after = [ "local-fs.target" ]; + path = [ + self.packages.${pkgs.system}.photocatalog + ]; + preStart = lib.mkIf (!sync.skipFullSync) [ + "mkdir -p ${sync.target}" + "photocatalog -source ${sync.source} -target ${sync.target}" + ]; + script = [ + "photocatalog -source ${sync.source} -target ${sync.target} -skip-full-sync -watch" + ]; + }; + } + ); + }; + }; + devShells = forAllSystems (system: let pkgs = nixpkgsFor.${system};