[Nix-dev] Wrapping functions?
Joe Hillenbrand
joehillen at gmail.com
Sat Mar 28 01:55:18 CET 2015
That is exactly what I was looking for. Thank you!
For posterity, this is what I came up with:
https://gist.github.com/joehillen/72a070540e52450ba693
On Fri, Mar 27, 2015 at 1:34 PM, Nicolas Pierron <
nicolas.b.pierron at gmail.com> wrote:
> Yes, there is a better way to do this, by extending the sub-modules by
> the extraUsers option, in a similar way as done by sshd [1,2]. The
> idea is that instead of making a function which will pre-process all
> the options definitions of one user, you will just extend all users
> with a flag.
>
> Note that `userOptions` in sshd is a sub-module, which means that it
> behaves as a module in NixOS, except that its `config` argument is re
> stricted to what is available for each instance of the option (read
> for each user).
>
> Basically, the code that you had in your gist should look something
> like (for mkUser):
>
>
> {config, pkgs, lib, ...}:
>
> with lib;
> let topConfig = config; in
>
> {
> options.users.extraUsers = mkOption {
> options = {config, name, ...}: {
> options = {
> isUser = mkOption {
> default = false;
> type = types.bool;
> description = "set defaults for one user";
> };
> };
>
> config = mkIf config.isUser {
> extraGroups = [ "users" ];
> group = name;
> home = "/home/${name}";
> createHome = true;
> useDefaultShell = false;
> shell = "/run/current-system/sw/bin/bash";
> };
> };
> };
>
> }
>
>
> This way, any user declaration would look like
>
> {lib, ...}:
>
> with lib;
>
> {
> config = {
> users.extraUsers.joe = {
> isUser = true;
> };
> }
> }
>
>
> [1]
> https://github.com/NixOS/nixpkgs/blob/7f90cc40b4b62e9495a77121dc96278501afd79b/nixos/modules/services/networking/ssh/sshd.nix#L282-L284
> [2]
> https://github.com/NixOS/nixpkgs/blob/7f90cc40b4b62e9495a77121dc96278501afd79b/nixos/modules/services/networking/ssh/sshd.nix#L26-L54
>
> On Fri, Mar 27, 2015 at 5:15 PM, Joe Hillenbrand <joehillen at gmail.com>
> wrote:
> > Is there a better way to do this?
> > https://gist.github.com/joehillen/5e762c74b6b8f7595736
> >
> > What I'm trying to do here is create wrapper functions that set some
> default
> > values.
> > The problem is that I have to pass along every attribute I want to be
> able
> > to set at the top level.
> > As you can see, I don't do anything with `description` or `openssh`. I
> just
> > pass it along all the way
> > down to `extraUsers`.
> >
> > Based on what I've seen, there seems like there is some way to accomplish
> > this (like an override or 'mkDefault')
> > but I keep getting confused.
> >
> > Still learning. Please excuse my ignorance.
> >
> > -Joe Hillenbrand
> >
> >
> > _______________________________________________
> > nix-dev mailing list
> > nix-dev at lists.science.uu.nl
> > http://lists.science.uu.nl/mailman/listinfo/nix-dev
> >
>
>
>
> --
> Nicolas Pierron
> http://www.linkedin.com/in/nicolasbpierron - http://nbp.name/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.science.uu.nl/pipermail/nix-dev/attachments/20150327/7a1df952/attachment-0001.html
More information about the nix-dev
mailing list