X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=modules%2Fprivate%2Fssh%2Fdefault.nix;fp=modules%2Fprivate%2Fssh%2Fdefault.nix;h=d4c1ab3ffac3b8c462b4ca5139d40c8c351555dc;hb=1b9150a54b5cb0b512265cdcf88ad10c9a4a55b1;hp=beedaff594fd46550e857699f79da676af12d426;hpb=b76b1d1f1678e329d0596e4403620f653a763d96;p=perso%2FImmae%2FConfig%2FNix.git diff --git a/modules/private/ssh/default.nix b/modules/private/ssh/default.nix index beedaff..d4c1ab3 100644 --- a/modules/private/ssh/default.nix +++ b/modules/private/ssh/default.nix @@ -1,7 +1,50 @@ { lib, pkgs, config, myconfig, ... }: +let + cfg = config.myServices.ssh; +in { + options.myServices.ssh = let + module = lib.types.submodule { + options = { + snippet = lib.mkOption { + type = lib.types.lines; + description = '' + Snippet to use + ''; + }; + dependencies = lib.mkOption { + type = lib.types.listOf lib.types.package; + default = []; + description = '' + Dependencies of the package + ''; + }; + }; + }; + in { + predefinedModules = lib.mkOption { + type = lib.types.attrsOf module; + default = { + regular = { + snippet = builtins.readFile ./ldap_regular.sh; + }; + }; + readOnly = true; + description = '' + Predefined modules + ''; + }; + modules = lib.mkOption { + type = lib.types.listOf module; + default = []; + description = '' + List of modules to enable + ''; + }; + }; config = { networking.firewall.allowedTCPPorts = [ 22 ]; + } // (lib.mkIf (builtins.length cfg.modules > 0) { services.openssh.extraConfig = '' AuthorizedKeysCommand /etc/ssh/ldap_authorized_keys @@ -24,11 +67,21 @@ # ssh is strict about parent directory having correct rights, don't # move it in the nix store. environment.etc."ssh/ldap_authorized_keys" = let + deps = lib.lists.unique ( + [ pkgs.which pkgs.openldap pkgs.stdenv.shellPackage pkgs.gnugrep pkgs.gnused pkgs.coreutils ] + ++ lib.flatten (map (v: v.dependencies) cfg.modules) + ); + fullScript = pkgs.runCommand "ldap_authorized_keys" { + snippets = builtins.concatStringsSep "\n" (map (v: v.snippet) cfg.modules); + } '' + substituteAll ${./ldap_authorized_keys.sh} $out + chmod a+x $out + ''; ldap_authorized_keys = pkgs.mylibs.wrap { name = "ldap_authorized_keys"; - file = ./ldap_authorized_keys.sh; - paths = [ pkgs.which pkgs.gitolite pkgs.openldap pkgs.stdenv.shellPackage pkgs.gnugrep pkgs.gnused pkgs.coreutils ]; + file = fullScript; + paths = deps; }; in { enable = true; @@ -36,5 +89,5 @@ user = "root"; source = ldap_authorized_keys; }; - }; + }); }