diff --git a/README.md b/README.md index 1099eab..76f95c8 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ use: { services.vscode-server = { enable = true; - enableForAllUsers = true; + enableForUsers.enable = true; }; } ``` diff --git a/modules/vscode-server/default.nix b/modules/vscode-server/default.nix index 4773a4b..ec63f83 100644 --- a/modules/vscode-server/default.nix +++ b/modules/vscode-server/default.nix @@ -12,18 +12,18 @@ import ./module.nix ( wantedBy = [ "default.target" ]; }; } - (lib.mkIf cfg.enableForAllUsers { + (lib.mkIf cfg.enableForUsers.enable { systemd.tmpfiles.settings = let - forEachUser = ({ path, file }: lib.attrsets.mapAttrs' - (username: userOptions: - { + forEachUser = ({ path, file }: builtins.listToAttrs + (builtins.map + (username: { # Create the directory so that it has the appropriate permissions if it doesn't already exist # Otherwise the directive below creating the symlink would have that owned by root - name = "${userOptions.home}/${path}"; + name = "${config.users.users.${username}.home}/${path}"; value = file username; }) - (lib.attrsets.filterAttrs (username: userOptions: userOptions.isNormalUser) config.users.users)); + cfg.enableForUsers.users)); homeDirectory = (path: forEachUser { inherit path; file = (username: { diff --git a/modules/vscode-server/home.nix b/modules/vscode-server/home.nix index 4dd2665..bd8d3ca 100644 --- a/modules/vscode-server/home.nix +++ b/modules/vscode-server/home.nix @@ -19,8 +19,8 @@ import ./module.nix ( }; assertions = [{ - assertion = !cfg.enableForAllUsers; - message = "enableForAllUsers=true doesn't make sense when using nixos-vscode-server as a home-manager module"; + assertion = !cfg.enableForUsers.enable; + message = "enableForUsers.enable=true doesn't make sense when using nixos-vscode-server as a home-manager module"; }]; } ) diff --git a/modules/vscode-server/module.nix b/modules/vscode-server/module.nix index ec9af77..e68d8d4 100644 --- a/modules/vscode-server/module.nix +++ b/modules/vscode-server/module.nix @@ -6,7 +6,7 @@ moduleConfig: { }: { options.services.vscode-server = let inherit (lib) mkEnableOption mkOption; - inherit (lib.types) lines listOf nullOr package str bool; + inherit (lib.types) lines listOf nullOr package str bool passwdEntry; in { enable = mkEnableOption "VS Code Server autofix"; @@ -50,17 +50,31 @@ moduleConfig: { ''; }; - enableForAllUsers = mkOption { - type = bool; - default = false; - example = true; - description = '' - Whether to enable the VS Code Server auto-fix service for all users. + enableForUsers = { + enable = mkOption { + type = bool; + default = false; + example = true; + description = '' + Whether to enable the VS Code Server auto-fix service for each user. - This only makes sense if auto-fix-vscode-server is installed as a NixOS module. + This only makes sense if auto-fix-vscode-server is installed as a NixOS module. - This automatically sets up the service's symlinks for systemd in each users' home directory. - ''; + This automatically sets up the service's symlinks for systemd in each users' home directory. + ''; + }; + + users = mkOption { + type = listOf (passwdEntry str); + default = builtins.attrNames (lib.attrsets.filterAttrs (username: userOptions: userOptions.isNormalUser) config.users.users); + defaultText = "builtins.attrNames (lib.filterAttrs (_: userOptions: userOptions.isNormalUser) config.users.users)"; + example = [ "alice" "bob" ]; + description = '' + List of users to enable the VS Code Server auto-fix service for. + + By default this will fallback to the list of "normal" users. + ''; + }; }; }; @@ -69,7 +83,7 @@ moduleConfig: { cfg = config.services.vscode-server; auto-fix-vscode-server = pkgs.callPackage ../../pkgs/auto-fix-vscode-server.nix - (removeAttrs cfg [ "enable" "enableForAllUsers" ]); + (removeAttrs cfg [ "enable" "enableForUsers" ]); in mkIf cfg.enable (mkMerge [ {