add: more system modules
This commit is contained in:
		
							parent
							
								
									47eb3e0691
								
							
						
					
					
						commit
						793cc3131c
					
				
					 17 changed files with 291 additions and 56 deletions
				
			
		|  | @ -42,6 +42,8 @@ | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |       inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  |     nix-gaming.url = "github:fufexan/nix-gaming"; | ||||||
|  |      | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -20,5 +20,14 @@ | ||||||
|     pipewire = { |     pipewire = { | ||||||
|       enable = lib.mkEnableOption "Enable pipewire module"; |       enable = lib.mkEnableOption "Enable pipewire module"; | ||||||
|     }; |     }; | ||||||
|  |     networking = { | ||||||
|  |       enable = lib.mkEnableOption "Enable networking module"; | ||||||
|  |     }; | ||||||
|  |     virtualisation = { | ||||||
|  |       enable = lib.mkEnableOption "Enable virtualisation module"; | ||||||
|  |     }; | ||||||
|  |     locale = { | ||||||
|  |       enable = lib.mkEnableOption "Enable locale module"; | ||||||
|  |     }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,11 +1,18 @@ | ||||||
| { lib, ... }: { | { lib, config, ... }:  | ||||||
|   i18n = { |  | ||||||
|     defaultLocale = lib.mkDefault "en_US.UTF-8"; |  | ||||||
|     supportedLocales = lib.mkDefault [ |  | ||||||
|       "en_US.UTF-8/UTF-8" |  | ||||||
|     ]; |  | ||||||
|   }; |  | ||||||
|   time.timeZone = lib.mkDefault "Pacific/Auckland"; |  | ||||||
|   services.geoclue2.enable = true; |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
|  | let | ||||||
|  |   cfg = config.systemModules.locale; | ||||||
|  | in | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   config = lib.mkIf cfg.enable { | ||||||
|  |     i18n = { | ||||||
|  |       defaultLocale = lib.mkDefault "en_US.UTF-8"; | ||||||
|  |       supportedLocales = lib.mkDefault [ | ||||||
|  |         "en_US.UTF-8/UTF-8" | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  |     time.timeZone = lib.mkDefault "Pacific/Auckland"; | ||||||
|  |     services.geoclue2.enable = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,18 +1,25 @@ | ||||||
| { lib, ... }: | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   cfg = config.systemModules.networking; | ||||||
|  | in | ||||||
|  | 
 | ||||||
| { | { | ||||||
|   networking.networkmanager = { |   config = lib.mkIf cfg.enable { | ||||||
|     enable = true; |     networking.networkmanager = { | ||||||
|     dns = "systemd-resolved"; |  | ||||||
|   }; |  | ||||||
|   networking.firewall.allowedTCPPorts = [57621]; |  | ||||||
| 
 |  | ||||||
|   services = { |  | ||||||
|     openssh = { |  | ||||||
|       enable = true; |       enable = true; | ||||||
|       settings.UseDns = true; |       dns = "systemd-resolved"; | ||||||
|     }; |     }; | ||||||
|     resolved.enable = true; |     networking.firewall.allowedTCPPorts = [57621]; | ||||||
|   }; |  | ||||||
| 
 | 
 | ||||||
|   systemd.services.NetworkManager-wait-online.enable = lib.mkForce false; |     services = { | ||||||
|  |       openssh = { | ||||||
|  |         enable = true; | ||||||
|  |         settings.UseDns = true; | ||||||
|  |       }; | ||||||
|  |       resolved.enable = true; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     systemd.services.NetworkManager-wait-online.enable = lib.mkForce false; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								system/modules/user/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								system/modules/user/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | ||||||
|  | { lib, ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   imports = [ | ||||||
|  |     ./shell | ||||||
|  |     ./ooks.nix | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   options.systemModules.user = { | ||||||
|  |     ooks = { | ||||||
|  |       enable = lib.mkEnableOption "Enable the user ooks"; | ||||||
|  |     }; | ||||||
|  |   };   | ||||||
|  | } | ||||||
							
								
								
									
										28
									
								
								system/modules/user/ooks.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								system/modules/user/ooks.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | ||||||
|  | { lib, pkgs, config, ... }: | ||||||
|  | 
 | ||||||
|  | let  | ||||||
|  |   ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups; | ||||||
|  |   cfg = config.systemModule.user.ooks; | ||||||
|  | in | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   config = lib.mkIf cfg.enable { | ||||||
|  |     users.users.ooks = { | ||||||
|  |       isNormalUser = true; | ||||||
|  |       extraGroups = [ | ||||||
|  |       "wheel" | ||||||
|  |       "video" | ||||||
|  |       "audio" | ||||||
|  |       ] ++ ifTheyExist [ | ||||||
|  |       "git" | ||||||
|  |       "network" | ||||||
|  |       "libvirtd" | ||||||
|  |       "deluge" | ||||||
|  |       ]; | ||||||
|  | 
 | ||||||
|  |     packages = [ pkgs.home-manager ]; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     home-manager.users.ooks = import ../../../../home/user/ooks/${config.networking.hostName}; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										40
									
								
								system/modules/user/shell/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								system/modules/user/shell/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   cfg = config.systemModules.user.shell; | ||||||
|  | in | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   imports = [ | ||||||
|  |     ./fish | ||||||
|  |     # ./bash | ||||||
|  |     # ./zsh | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   options.systemModules.user.shell = { | ||||||
|  |     fish = { | ||||||
|  |       enable = lib.mkEnableOption "Enable fish as the user shell"; | ||||||
|  |     }; | ||||||
|  |     zsh = { | ||||||
|  |       enable = lib.mkEnableOption "Enable zsh as the user shell"; | ||||||
|  |     }; | ||||||
|  |     bash = { | ||||||
|  |       enable = lib.mkEnableOption "Enable bash as the user shell"; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |    config = {  | ||||||
|  |     assertions = [ | ||||||
|  |       { | ||||||
|  |         assertion =  | ||||||
|  |           (lib.length (lib.filter (x: x) [ | ||||||
|  |             cfg.fish.enable or false | ||||||
|  |             cfg.zsh.enable or false | ||||||
|  |             cfg.bash.enable or false | ||||||
|  |           ]) <= 1);  | ||||||
|  |         message = "Only one user shell can be active in the configuration"; | ||||||
|  |       } | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										19
									
								
								system/modules/user/shell/fish/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								system/modules/user/shell/fish/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | ||||||
|  | { pkgs, lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   cfg = config.systemModules.user.shell.fish; | ||||||
|  | in | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   config = lib.mkIf cfg.enable { | ||||||
|  |     users.users.ooks.shell = pkgs.fish; | ||||||
|  |     programs.fish = { | ||||||
|  |       enable = true; | ||||||
|  |       vendor = { | ||||||
|  |         completions.enable = true; | ||||||
|  |         config.enable = true; | ||||||
|  |         functions.enable = true; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | @ -1,12 +0,0 @@ | ||||||
| { pkgs, ... }: |  | ||||||
| { |  | ||||||
|   users.users.ooks.shell = pkgs.fish; |  | ||||||
|   programs.fish = { |  | ||||||
|     enable = true; |  | ||||||
|     vendor = { |  | ||||||
|       completions.enable = true; |  | ||||||
|       config.enable = true; |  | ||||||
|       functions.enable = true; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,28 +1,33 @@ | ||||||
| {config, pkgs, ... }: | { lib, config, pkgs, ... }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   cfg = config.systemModules.virtualisation; | ||||||
|  | in | ||||||
| 
 | 
 | ||||||
| { | { | ||||||
|   environment.systemPackages = with pkgs; [ |   config = lib.mkIf cfg.enable { | ||||||
|     virt-manager |     environment.systemPackages = with pkgs; [ | ||||||
|     virt-viewer |       virt-manager | ||||||
|     spice  |       virt-viewer | ||||||
|     spice-gtk |       spice  | ||||||
|     spice-protocol |       spice-gtk | ||||||
|     win-virtio |       spice-protocol | ||||||
|     win-spice |       win-virtio | ||||||
|     gnome.adwaita-icon-theme |       win-spice | ||||||
|   ]; |       gnome.adwaita-icon-theme | ||||||
|  |     ]; | ||||||
|    |    | ||||||
|   virtualisation = { |     virtualisation = { | ||||||
|     libvirtd = { |       libvirtd = { | ||||||
|       enable = true; |         enable = true; | ||||||
|       qemu = { |         qemu = { | ||||||
|         swtpm.enable = true; |           swtpm.enable = true; | ||||||
|         ovmf.enable = true; |           ovmf.enable = true; | ||||||
|         ovmf.packages = [ pkgs.OVMFFull.fd ]; |           ovmf.packages = [ pkgs.OVMFFull.fd ]; | ||||||
|  |         }; | ||||||
|       }; |       }; | ||||||
|  |       spiceUSBRedirection.enable = true; | ||||||
|     }; |     }; | ||||||
|     spiceUSBRedirection.enable = true; |     services.spice-vdagentd.enable = true; | ||||||
|   }; |   }; | ||||||
|   services.spice-vdagentd.enable = true; |  | ||||||
| } | } | ||||||
| 
 |  | ||||||
|  |  | ||||||
							
								
								
									
										17
									
								
								system/profiles/base/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								system/profiles/base/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | ||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   cfg = config.systemProfile.base; | ||||||
|  | in | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   config = lib.mkIf cfg.enable { | ||||||
|  |     systemModules = { | ||||||
|  |       security.enable = true; | ||||||
|  |       nixOptions.enable = true; | ||||||
|  |       pipewire.enable = true; | ||||||
|  |       networking.enable = true; | ||||||
|  |       locale.enable = true; | ||||||
|  |     } | ||||||
|  |   };  | ||||||
|  | } | ||||||
							
								
								
									
										40
									
								
								system/profiles/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								system/profiles/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   profileEnabler = let | ||||||
|  |     reducer = l: r: {"${r}".enable = true;} // l; | ||||||
|  |   in | ||||||
|  |     builtins.foldl' reducer {} config.activeProfiles; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   imports = [ | ||||||
|  |     ./base | ||||||
|  |     ./nvidia | ||||||
|  |     #./gaming | ||||||
|  |     #./laptop | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   options = { | ||||||
|  |     activeProfiles = lib.mkOption { | ||||||
|  |       type = lib.types.listOf lib.types.str; | ||||||
|  |       default = []; | ||||||
|  |     }; | ||||||
|  |      | ||||||
|  |     systemProfiles = { | ||||||
|  |       base = { | ||||||
|  |         enable = lib.mkEnableOption "Enable the base profile"; | ||||||
|  |       }; | ||||||
|  |       gaming = { | ||||||
|  |         enable = lib.mkEnableOption "Enable the gaming profile"; | ||||||
|  |       }; | ||||||
|  |       laptop = { | ||||||
|  |         enable = lib.mkEnableOption "Enable the laptop profile"; | ||||||
|  |       }; | ||||||
|  |       nvidia = { | ||||||
|  |         enable = lib.mkEnableOption "Enable the nvidia profile"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |    | ||||||
|  |   config.profiles = profileEnabler; | ||||||
|  | } | ||||||
							
								
								
									
										30
									
								
								system/profiles/gaming/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								system/profiles/gaming/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | ||||||
|  | { lib, config, pkgs, inputs, ... }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   cfg = config.systemProfile.gaming; | ||||||
|  | in | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   imports = [ | ||||||
|  |     inputs.nix-gaming.nixosModules.pipewireLowLatency | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   config = lib.mkIf cfg.enable { | ||||||
|  |     hardware.opengl.extraPackages = [ pkgs.gamescope ]; | ||||||
|  |     programs = { | ||||||
|  |       steam.enable = true; | ||||||
|  |       gamescope = { | ||||||
|  |         enable = true; | ||||||
|  |         capsSysNice = true; | ||||||
|  |       }; | ||||||
|  |       gamemode = { | ||||||
|  |         enable = true; | ||||||
|  |         settings = { | ||||||
|  |           softrealtime = "auto"; | ||||||
|  |           renice = 15; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |     services.pipewire.lowLatency.enable = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								system/profiles/nvidia/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								system/profiles/nvidia/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | ||||||
|  | { lib, config, pkgs, ... }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   cfg = config.systemProfile.nvidia; | ||||||
|  |   production = config.boot.kernelPackages.nvidiaPackages.production; | ||||||
|  | in | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   config = lib.mkIf cfg.enable { | ||||||
|  |     harware.nvidia = { | ||||||
|  |       open = true; | ||||||
|  |       package = production; | ||||||
|  |       modesetting.enable = true; | ||||||
|  |       nvidiaSettings = true; | ||||||
|  |       powerManagement.enable = false; | ||||||
|  |     }; | ||||||
|  |     services.xserver.videoDrivers = [ "nvidia" ]; | ||||||
|  |     environment.sessionVariables = { | ||||||
|  |       LIBVA_DRIVER_NAME = "nvidia"; | ||||||
|  |     }; | ||||||
|  |     environment.systemPackages = with pkgs; [ | ||||||
|  |       vulkan-loader | ||||||
|  |       vulkan-validation-layers | ||||||
|  |       vulkan-tools | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue