dotfiles
My PC Dotfiles & Websitegit clone https://github.com/maydayv7/dotfiles
modules/system/user/default.nix (5207B)
1## User Configuration ##
2{
3 config,
4 inputs,
5 ...
6}: let
7 inherit (config.flake) files modules;
8 inherit (config) util;
9in {
10 flake.modules = {
11 # Base User Configuration
12 nixos.user = {
13 imports = [modules.nixos.user-cli];
14 system.homeModules = [modules.homeManager.default];
15 };
16
17 nixos.user-cli = {
18 config,
19 lib,
20 ...
21 }: let
22 inherit (lib) mkIf;
23 in {
24 imports = [inputs.home-manager.nixosModules.home-manager];
25
26 options.system.homeModules = lib.mkOption {
27 type = lib.types.listOf lib.types.deferredModule;
28 default = [modules.homeManager.cli];
29 description = "Shared system Home Manager modules";
30 };
31
32 config = {
33 users.mutableUsers = false;
34 users.extraUsers.root = {
35 isNormalUser = false;
36 extraGroups = ["wheel"];
37 hashedPasswordFile = mkIf (config.sops.secrets ? "root.secret") config.sops.secrets."root.secret".path;
38 };
39
40 # User Passwords
41 sops.secrets =
42 lib.filterAttrs (
43 name: _: builtins.hasAttr (lib.removeSuffix ".secret" name) config.users.users
44 ) (util.map.secrets {
45 directory = ../../../secrets/passwords;
46 neededForUsers = true;
47 });
48
49 # Home Manager settings
50 home-manager = {
51 useGlobalPkgs = true;
52 useUserPackages = true;
53 backupFileExtension = "bak";
54 extraSpecialArgs = {inherit inputs;};
55
56 # Default Modules
57 sharedModules = config.system.homeModules;
58 };
59
60 # XDG directories
61 environment.sessionVariables = {
62 "XDG_CACHE_HOME" = "$HOME/.cache";
63 "XDG_CONFIG_HOME" = "$HOME/.config";
64 "XDG_DATA_HOME" = "$HOME/.local/share";
65 "XDG_BIN_HOME" = "$HOME/.local/bin";
66 };
67 };
68 };
69
70 # Global Home Manager Configuration
71 homeManager.user = {
72 config,
73 lib,
74 ...
75 }: {
76 imports = [modules.homeManager.user-cli];
77 config = {
78 # Environment Settings
79 home.file = {
80 ".local/share/backgrounds".source = files.wallpapers.path;
81 ".config/gtk-3.0/bookmarks" = {
82 text = lib.mkBefore ''
83 file://${config.home.homeDirectory}/Downloads Downloads
84 file://${config.home.homeDirectory}/Pictures Pictures
85 file://${config.home.homeDirectory}/Documents Documents
86 '';
87 force = true;
88 };
89 };
90
91 # User Directories
92 xdg = {
93 enable = true;
94 mime.enable = true;
95 mimeApps.enable = true;
96 configFile."mimeapps.list".force = true;
97 userDirs = {
98 enable = true;
99 createDirectories = true;
100 desktop = "$HOME/Desktop";
101 documents = "$HOME/Documents";
102 download = "$HOME/Downloads";
103 music = "$HOME/Music";
104 pictures = "$HOME/Pictures";
105 publicShare = "$HOME/Public";
106 templates = "$HOME/Templates";
107 videos = "$HOME/Videos";
108 extraConfig."SCREENSHOTS" = "$HOME/Pictures/Screenshots";
109 };
110 };
111 };
112 };
113
114 homeManager.user-cli = {
115 config,
116 lib,
117 ...
118 }: let
119 inherit (lib) mkIf mkOption types;
120 cfg = config.credentials;
121 in {
122 # Mutable file support
123 imports = [(import ./_mutable.nix)];
124
125 # User Identity
126 options.credentials = {
127 name = mkOption {
128 description = "Work User Name";
129 type = types.str;
130 default = config.home.username;
131 };
132
133 fullname = mkOption {
134 description = "Full User Name";
135 type = types.str;
136 default = "Default User";
137 };
138
139 mail = mkOption {
140 description = "User Mail ID";
141 type = types.str;
142 default = "";
143 example = "user@email.com";
144 };
145
146 key = mkOption {
147 description = "User GPG Key";
148 type = types.str;
149 default = "";
150 example = "Use 'gpg --list-signatures --keyid-format short'";
151 };
152 };
153
154 config = {
155 xdg.enable = true;
156
157 # Update News
158 news.display = "show";
159
160 # User Services
161 systemd.user = {
162 enable = true;
163 startServices = true;
164 };
165
166 # GPG Keys
167 programs.gpg = {
168 settings = mkIf (cfg.key != "") {
169 default-key = cfg.key;
170 default-recipient-self = true;
171 auto-key-locate = "local,wkd,keyserver";
172 keyserver = "hkps://keys.openpgp.org";
173 auto-key-retrieve = true;
174 auto-key-import = true;
175 keyserver-options = "honor-keyserver-url";
176 };
177
178 publicKeys =
179 map
180 (source: {
181 inherit source;
182 trust = "ultimate";
183 })
184 (
185 builtins.attrValues (
186 util.map.files {
187 directory = ../../../secrets/keys;
188 extension = ".gpg";
189 }
190 )
191 );
192 };
193 };
194 };
195 };
196}