summaryrefslogtreecommitdiff
path: root/users/timmy/home.nix
blob: 9c2c8f863507cfeabf7f3c858071e55088aadc4b (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
101
102
103
104
105
106
107
108
109
110
{ lib, pkgs, config, ... }: let
	cfg = config._users.${username}.home;
	username = "timmy";
	email = "tjk@tjkeller.xyz";
	fullname = "Tim Keller";
	home = "/home/${username}";
	userDirs = {
		desktop   = "${home}";
		download  = "${home}/dls";
		documents = "${home}/docs";
		pictures  = "${home}/pics";
		# Set these as null so they're not created
		music       = null;
		publicShare = null;
		templates   = null;
		videos      = null;
		#projects    = "${home}/docs/src"
	};
in {
	options._users.${username}.home = {
		enable = lib.mkEnableOption "configure home for user ${username}";
			#neovim = {
			#	enableLSP = lib.mkEnableOption "whether to enable lsp";
			#};
	};

	config = lib.mkIf cfg.enable {
		# 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;
			settings = {
				user = {
					name = fullname;
					email = email;
				};
				merge.tool = "nvimdiff";
				mergetool.nvimdiff = {
					cmd = ''nvim -d "$LOCAL" "$MERGED" "$REMOTE"'';
					prompt = false;
				};
				# Unfortunately, this doesn't work for some reason
				#url = {
				#	"ssh://git@publicgit/".insteadOf = "https://git.tjkeller.xyz/";
				#};
			};
		};

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

		# Setup neovim
		programs._neovim = {
			enable = true;
			package = pkgs.unstable.neovim;
			viAlias = true;
			vimAlias = true;
			plugins = {
				lsp = {
					enable = lib.mkDefault true;
					languageServers.packages = with pkgs; [
						python313Packages.python-lsp-server
						some-sass-language-server
						svelte-language-server
						tailwindcss-language-server
						typescript-language-server
						vscode-langservers-extracted
					];
				};
				treesitter = let
					allTSParserPackages = builtins.filter lib.isDerivation
						(builtins.attrValues pkgs.vimPlugins.nvim-treesitter-parsers);
				in {
					enable = lib.mkDefault true;
					parsers.packages = allTSParserPackages;
				};
				packages.start = with pkgs.vimPlugins; [
					autoclose-nvim
					blink-cmp
					gruvbox-nvim
					minitab-nvim
					nvim-colorizer-lua
					nvim-ts-autotag  # depends on treesitter
					pkgs.unstable.vimPlugins.rainbow-delimiters-nvim  # depends on treesitter
					snacks-nvim
				];
			};
			extraPackages = with pkgs; [
				gcc  # Treesitter requires a C compiler
				unzip  # For zip, xlsx, etc. files
			];
		};
	};
}