summaryrefslogtreecommitdiff
path: root/users/timmy/default.nix
blob: 313449da302ced713f110797b79dc1c7d14d9809 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
{ lib, config, pkgs, home-manager, ... }: let
	cfg = config._users.timmy;
	username = "timmy";
	email = "tjk@tjkeller.xyz";
	fullname = "Tim Keller";
	home = "/home/${username}";
	userDirs = {
		desktop   = "${home}";
		download  = "${home}/dls";
		documents = "${home}/docs";
		pictures  = "${home}/pics";
	};
	sshKeyPaths = [ "${home}/.ssh/id_ed25519" ];
	sshPublicKeyPaths = lib.map (keyPath: keyPath + ".pub") sshKeyPaths;
	sshPublicKeys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDnsnAWcz46OVi1MWSxpOIUtUvwalijDwvW+oEvNjzep" ];
in {
	imports = [
		./hosts.nix
		./localization.nix
		./nas.nix
		./printing.nix
		./user.nix
		./wifi.nix
	];

	options._users.timmy = {
		enable = lib.mkEnableOption "create user timmy";
		autologin.enable = lib.mkEnableOption "enables getty automatic login";
	};

	#config = lib.mkIf cfg.enable {
	config = {
		# Setup zsh
		programs.zsh.enable = true;
		#environment.systemPackages = [ pkgs.zsh-fast-syntax-highlighting ];  # TODO

		# Setup normal user
		users.users.timmy = {
			home = home;
			description = fullname;
			isNormalUser = true;
			shell = pkgs.zsh;
			extraGroups = [
				"nixbld"
				"video"
				"wheel"
			] ++ lib.optionals config.hardware.i2c.enable [
				"i2c"
			] ++ lib.optionals config.virtualisation.libvirtd.enable [
				"libvirtd"
			] ++ lib.optionals config.virtualisation.docker.enable [
				"docker"
			];
		};

		# Configure automatic login with getty
		services.getty = lib.mkIf cfg.autologin.enable {
			autologinUser = username;
		};

		# Configure sops age key paths since age keys are generated via ssh private key
		sops.age = { inherit sshKeyPaths; };

		# Add authorizedKeys to cgit service
		services._cgit.ssh.authorizedKeys = {
			keys = sshPublicKeys;
			keyFiles = sshPublicKeyPaths;
		};

		# Configure user home
		home-manager.users.timmy = {
			# Setup home-manager
			home = {
				username = username;
				homeDirectory = home;
				stateVersion = "24.05";
			};

			# Setup userdirs
			xdg.userDirs = {
				enable = true;
				createDirectories = true;
			} // userDirs;

			# Setup git
			programs.git = {
				enable = true;
				userName = fullname;
				userEmail = email;
			};

			# Setup gtk bookmarks
			gtk.gtk3.bookmarks = (
				lib.mapAttrsToList (name: path:
					"file://${path} ${lib.toUpper (lib.substring 0 1 name)}${lib.substring 1 (-1) name}"  # Make first letter upper case
				) userDirs
			);
		};
	};
}