Partial way to unifying nixos and home-manager modules
This commit is contained in:
71
modules/options.nix
Normal file
71
modules/options.nix
Normal file
@@ -0,0 +1,71 @@
|
||||
{ config, options, lib, home-manager, ... }:
|
||||
|
||||
with lib;
|
||||
with lib.my;
|
||||
{
|
||||
options = with types; {
|
||||
user = mkOpt attrs {};
|
||||
|
||||
home = {
|
||||
file = mkOpt' attrs {} "Files to place directly in $HOME";
|
||||
configFile = mkOpt' attrs {} "Files to place in $XDG_CONFIG_HOME";
|
||||
dataFile = mkOpt' attrs {} "Files to place in $XDG_DATA_HOME";
|
||||
};
|
||||
|
||||
env = mkOption {
|
||||
# env = { PATH = ["$PATH" ./test]; TEST = "test"; }
|
||||
type = attrsOf (oneOf [ str path (listOf (either str path)) ]);
|
||||
# env = { PATH = "$PATH:./test"; TEST = "test"; }
|
||||
apply = mapAttrs
|
||||
(n: v: if isList v
|
||||
then concatMapStringsSep ":" (x: toString x) v
|
||||
else (toString v));
|
||||
default = {};
|
||||
description = "Set environment variables that will be joined by a colon";
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
user = let name = "marc"; in {
|
||||
inherit name;
|
||||
description = "The primary user account";
|
||||
extraGroups = [ "wheel" ];
|
||||
isNormalUser = true;
|
||||
home = "/home/${name}";
|
||||
group = "users";
|
||||
uid = 1000;
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
# extraSpecialArgs = { inherit inputs; };
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
|
||||
users.${config.user.name} = {
|
||||
home = {
|
||||
file = mkAliasDefinitions options.home.file;
|
||||
# Necessary for home-manager to work with flakes, otherwise it will
|
||||
# look for a nixpkgs channel.
|
||||
stateVersion = config.system.stateVersion;
|
||||
};
|
||||
xdg = {
|
||||
configFile = mkAliasDefinitions options.home.configFile;
|
||||
dataFile = mkAliasDefinitions options.home.dataFile;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
users.users.${config.user.name} = mkAliasDefinitions options.user;
|
||||
|
||||
nix.settings = let users = [ "root" config.user.name ]; in {
|
||||
trusted-users = users;
|
||||
allowed-users = users;
|
||||
};
|
||||
|
||||
env.PATH = [ "$PATH" ];
|
||||
|
||||
environment.extraInit =
|
||||
concatStringsSep "\n"
|
||||
(mapAttrsToList (n: v: "export ${n}=\"${v}\"") config.env);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user