Refactor home manager profile
This commit is contained in:
		
							parent
							
								
									63386512a8
								
							
						
					
					
						commit
						6c452c6649
					
				| @ -1,98 +1,9 @@ | |||||||
| { | { | ||||||
|   pkgs, |  | ||||||
|   ... |   ... | ||||||
| }: | }: | ||||||
| 
 | 
 | ||||||
| { | { | ||||||
|   home.stateVersion = "24.11"; |   home.stateVersion = "24.11"; | ||||||
| 
 | 
 | ||||||
|   home.packages = with pkgs; [ |   modules.profiles.jan.enable = true; | ||||||
|     libreoffice-still |  | ||||||
|     remmina |  | ||||||
|     thunderbird |  | ||||||
|     signal-desktop |  | ||||||
|     prusa-slicer |  | ||||||
|     freecad-wayland |  | ||||||
|     inkscape |  | ||||||
|     ente-auth |  | ||||||
|     bitwarden |  | ||||||
|     carla |  | ||||||
|     winbox |  | ||||||
|     whatsapp-for-linux |  | ||||||
|     discord |  | ||||||
|     steam |  | ||||||
|     spotify |  | ||||||
|     # feishin # TODO: Fix or replace as insecure |  | ||||||
|     eduvpn-client |  | ||||||
|     river # TODO: Move |  | ||||||
|     firefox # TODO: Move to dediated module |  | ||||||
|     ryubing |  | ||||||
|     dconf-editor |  | ||||||
|     bottles |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   modules = { |  | ||||||
|     # Desktop environment |  | ||||||
|     desktop.gnome.enable = true; |  | ||||||
|     # desktop.tiling.enable = true; |  | ||||||
| 
 |  | ||||||
|     # Browser |  | ||||||
|     # firefox = { |  | ||||||
|     #   enable = true; |  | ||||||
|     #   default = false; |  | ||||||
|     # }; |  | ||||||
|     # qutebrowser = { |  | ||||||
|     #   enable = true; |  | ||||||
|     #   default = true; |  | ||||||
|     # }; |  | ||||||
| 
 |  | ||||||
|     # Gaming |  | ||||||
|     # retroarch.enable = true; |  | ||||||
|     # ryujinx.enable = true; |  | ||||||
| 
 |  | ||||||
|     # Tools |  | ||||||
|     git = { |  | ||||||
|       enable = true; |  | ||||||
|       user = "Jan-Bulthuis"; |  | ||||||
|       email = "git@bulthuis.dev"; |  | ||||||
|       # TODO: Move |  | ||||||
|       ignores = [ |  | ||||||
|         ".envrc" |  | ||||||
|         ".direnv" |  | ||||||
|         "flake.nix" |  | ||||||
|         "flake.lock" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|     # btop.enable = true; |  | ||||||
|     direnv.enable = true; |  | ||||||
|     fish.enable = true; |  | ||||||
|     # bluetuith.enable = false; |  | ||||||
|     # obsidian.enable = true; |  | ||||||
|     # zathura.enable = true; |  | ||||||
|     # keyring.enable = true; |  | ||||||
|     # scripts.enable = true; |  | ||||||
|     xpra = { |  | ||||||
|       enable = true; |  | ||||||
|       hosts = [ |  | ||||||
|         "mixer@10.20.60.251" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Development |  | ||||||
|     # neovim.enable = true; |  | ||||||
|     vscode.enable = true; |  | ||||||
|     # docker.enable = true; |  | ||||||
|     # matlab.enable = true; |  | ||||||
|     # mathematica.enable = true; |  | ||||||
| 
 |  | ||||||
|     # Languages |  | ||||||
|     haskell.enable = false; |  | ||||||
|     js.enable = true; |  | ||||||
|     nix.enable = true; |  | ||||||
|     rust.enable = true; |  | ||||||
|     python.enable = true; |  | ||||||
|     cpp.enable = true; |  | ||||||
|     tex.enable = true; |  | ||||||
|     jupyter.enable = false; |  | ||||||
|   }; |  | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										7
									
								
								hosts/20212060/users/root.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								hosts/20212060/users/root.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | { ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   home.stateVersion = "24.11"; | ||||||
|  | 
 | ||||||
|  |   modules.profiles.gnome.enable = true; | ||||||
|  | } | ||||||
| @ -1,17 +0,0 @@ | |||||||
| { |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| { |  | ||||||
|   home.stateVersion = "24.11"; |  | ||||||
| 
 |  | ||||||
|   home.packages = with pkgs; [ |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   modules = { |  | ||||||
|     # Desktop environment |  | ||||||
|     # desktop.gnome.enable = true; |  | ||||||
|     # desktop.tiling.enable = true; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
							
								
								
									
										240
									
								
								hosts/vm-audio/configuration.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										240
									
								
								hosts/vm-audio/configuration.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,240 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   # State version | ||||||
|  |   system.stateVersion = "24.11"; | ||||||
|  | 
 | ||||||
|  |   # Machine hostname | ||||||
|  |   networking.hostName = "vm-audio"; | ||||||
|  | 
 | ||||||
|  |   # Enabled modules | ||||||
|  |   modules = { | ||||||
|  |     pipewire.enable = true; | ||||||
|  |     spotifyd.enable = true; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Install system packages | ||||||
|  |   environment.systemPackages = with pkgs; [ | ||||||
|  |     carla | ||||||
|  |     xpra | ||||||
|  |     alsa-utils | ||||||
|  |     pulsemixer | ||||||
|  |     adwaita-icon-theme | ||||||
|  |     open-stage-control | ||||||
|  |     carla_osc_bridge | ||||||
|  | 
 | ||||||
|  |     # Add LV2 plugins | ||||||
|  |     lsp-plugins | ||||||
|  |     airwindows-lv2 | ||||||
|  |     distrho-ports | ||||||
|  |     cardinal | ||||||
|  |     calf | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   # Setup firewall | ||||||
|  |   networking.firewall = { | ||||||
|  |     allowedTCPPorts = [ | ||||||
|  |       8080 | ||||||
|  |       10402 | ||||||
|  |       15151 | ||||||
|  |       22752 | ||||||
|  |     ]; | ||||||
|  |     allowedUDPPorts = [ | ||||||
|  |       8080 | ||||||
|  |       10402 | ||||||
|  |       15151 | ||||||
|  |       22752 | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Setup dependencies | ||||||
|  |   environment.variables.LD_LIBRARY_PATH = lib.mkForce "${lib.makeLibraryPath ( | ||||||
|  |     with pkgs; | ||||||
|  |     [ | ||||||
|  |       cairo | ||||||
|  |       pipewire.jack | ||||||
|  |     ] | ||||||
|  |   )}"; | ||||||
|  |   qt = { | ||||||
|  |     enable = true; | ||||||
|  |     style = "adwaita"; | ||||||
|  |   }; | ||||||
|  |   xdg.icons = { | ||||||
|  |     enable = true; | ||||||
|  |     fallbackCursorThemes = [ "Adwaita" ]; | ||||||
|  |   }; | ||||||
|  |   hardware.graphics.enable = true; | ||||||
|  | 
 | ||||||
|  |   # User for audio mixing | ||||||
|  |   users.users.mixer = { | ||||||
|  |     isNormalUser = true; | ||||||
|  |     group = "mixer"; | ||||||
|  |     extraGroups = [ "systemd-journal" ]; | ||||||
|  |     openssh.authorizedKeys.keys = [ | ||||||
|  |       "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKxoQSxfYqf9ITN8Fhckk8WbY4dwtBAXOhC9jxihJvq jan@bulthuis.dev" | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  |   users.groups.mixer = { }; | ||||||
|  |   users.groups.audio = { | ||||||
|  |     members = [ | ||||||
|  |       "mixer" | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  |   users.groups.bluetooth = { | ||||||
|  |     members = [ | ||||||
|  |       "mixer" | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Xpra service | ||||||
|  |   systemd.user.services.xpra = { | ||||||
|  |     description = "Xpra Service"; | ||||||
|  |     wantedBy = [ "default.target" ]; | ||||||
|  |     after = [ | ||||||
|  |       "network.target" | ||||||
|  |     ]; | ||||||
|  |     unitConfig = { | ||||||
|  |       ConditionUser = "mixer"; | ||||||
|  |     }; | ||||||
|  |     serviceConfig = { | ||||||
|  |       ExecStart = "${pkgs.xpra}/bin/xpra start :7 --bind-tcp=0.0.0.0:15151 --daemon=no"; | ||||||
|  |       Restart = "always"; | ||||||
|  |       RestartSec = 5; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Carla service | ||||||
|  |   systemd.user.services.carla = { | ||||||
|  |     description = "Carla Service"; | ||||||
|  |     wantedBy = [ "default.target" ]; | ||||||
|  |     after = [ | ||||||
|  |       "network.target" | ||||||
|  |       "sound.target" | ||||||
|  |     ]; | ||||||
|  |     requires = [ | ||||||
|  |       "xpra.service" | ||||||
|  |     ]; | ||||||
|  |     unitConfig = { | ||||||
|  |       ConditionUser = "mixer"; | ||||||
|  |     }; | ||||||
|  |     serviceConfig = { | ||||||
|  |       ExecStart = "${pkgs.carla}/bin/carla /home/mixer/Default.carxp -platform xcb"; | ||||||
|  |       Environment = "\"DISPLAY=:7\""; | ||||||
|  |       Restart = "always"; | ||||||
|  |       RestartSec = 5; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Carla service | ||||||
|  |   systemd.user.services.carla-bridge = { | ||||||
|  |     description = "Carla OSC Bridge"; | ||||||
|  |     wantedBy = [ "default.target" ]; | ||||||
|  |     after = [ | ||||||
|  |       "network.target" | ||||||
|  |       "sound.target" | ||||||
|  |     ]; | ||||||
|  |     requires = [ | ||||||
|  |       "carla.service" | ||||||
|  |     ]; | ||||||
|  |     unitConfig = { | ||||||
|  |       ConditionUser = "mixer"; | ||||||
|  |     }; | ||||||
|  |     serviceConfig = { | ||||||
|  |       ExecStart = "${pkgs.carla_osc_bridge}/bin/carla_osc_bridge --clients \"127.0.0.1:8080\""; | ||||||
|  |       Restart = "always"; | ||||||
|  |       RestartSec = 5; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Open stage control service | ||||||
|  |   systemd.user.services.osc = { | ||||||
|  |     description = "OSC Service"; | ||||||
|  |     wantedBy = [ "default.target" ]; | ||||||
|  |     after = [ | ||||||
|  |       "network.target" | ||||||
|  |     ]; | ||||||
|  |     requires = [ | ||||||
|  |       "carla.service" | ||||||
|  |     ]; | ||||||
|  |     unitConfig = { | ||||||
|  |       ConditionUser = "mixer"; | ||||||
|  |     }; | ||||||
|  |     serviceConfig = { | ||||||
|  |       ExecStart = "${pkgs.open-stage-control}/bin/open-stage-control --no-gui --send 127.0.0.1:10402 --load /home/mixer/open-stage-control/session.json --theme /home/mixer/open-stage-control/theme.css"; | ||||||
|  |       Environment = "\"ELECTRON_RUN_AS_NODE=1\""; | ||||||
|  |       Restart = "always"; | ||||||
|  |       RestartSec = 5; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Create bluetooth A2DP source | ||||||
|  |   hardware.bluetooth = { | ||||||
|  |     enable = true; | ||||||
|  |     disabledPlugins = [ "hostname" ]; | ||||||
|  |     settings.General = { | ||||||
|  |       Name = "Linox"; | ||||||
|  |       Class = "0x240414"; | ||||||
|  |       DiscoverableTimeout = 0; | ||||||
|  |       AlwaysPairable = true; | ||||||
|  |       PairableTimeout = 0; | ||||||
|  |       FastConnectable = true; | ||||||
|  |       JustWorksRepairing = "always"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |   services.pipewire.wireplumber.extraConfig."50-bluetooth-a2dp" = { | ||||||
|  |     "monitor.bluez.properties" = { | ||||||
|  |       "bluez5.roles" = [ "a2dp_source" ]; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Create null sinks | ||||||
|  |   services.pipewire.extraConfig.pipewire."91-null-sinks" = { | ||||||
|  |     "context.objects" = [ | ||||||
|  |       { | ||||||
|  |         factory = "adapter"; | ||||||
|  |         args = { | ||||||
|  |           "factory.name" = "support.null-audio-sink"; | ||||||
|  |           "node.name" = "Speaker-Proxy"; | ||||||
|  |           "node.description" = "Proxy for Speaker Output"; | ||||||
|  |           "media.class" = "Audio/Sink"; | ||||||
|  |           "audio.position" = "L,R"; | ||||||
|  |         }; | ||||||
|  |       } | ||||||
|  |       { | ||||||
|  |         factory = "adapter"; | ||||||
|  |         args = { | ||||||
|  |           "factory.name" = "support.null-audio-sink"; | ||||||
|  |           "node.name" = "Headphone-Proxy"; | ||||||
|  |           "node.description" = "Proxy for Headphone Output"; | ||||||
|  |           "media.class" = "Audio/Sink"; | ||||||
|  |           "audio.position" = "L,R"; | ||||||
|  |         }; | ||||||
|  |       } | ||||||
|  |       { | ||||||
|  |         factory = "adapter"; | ||||||
|  |         args = { | ||||||
|  |           "factory.name" = "support.null-audio-sink"; | ||||||
|  |           "node.name" = "SpotifyD-Proxy"; | ||||||
|  |           "node.description" = "Proxy for SpotifyD"; | ||||||
|  |           "media.class" = "Audio/Sink"; | ||||||
|  |           "audio.position" = "L,R"; | ||||||
|  |         }; | ||||||
|  |       } | ||||||
|  |       { | ||||||
|  |         factory = "adapter"; | ||||||
|  |         args = { | ||||||
|  |           "factory.name" = "support.null-audio-sink"; | ||||||
|  |           "node.name" = "AnalogIn-Proxy"; | ||||||
|  |           "node.description" = "Proxy for the analog input"; | ||||||
|  |           "media.class" = "Audio/Source/Virtual"; | ||||||
|  |           "audio.position" = "L,R"; | ||||||
|  |         }; | ||||||
|  |       } | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								hosts/vm-audio/users/local.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								hosts/vm-audio/users/local.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | { ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   home.stateVersion = "24.11"; | ||||||
|  | 
 | ||||||
|  |   modules.profiles.local.enable = true; | ||||||
|  | } | ||||||
| @ -48,6 +48,8 @@ in | |||||||
|         gnome-text-editor |         gnome-text-editor | ||||||
|         showtime |         showtime | ||||||
|         file-roller |         file-roller | ||||||
|  |         mission-center | ||||||
|  |         dconf-editor | ||||||
| 
 | 
 | ||||||
|         # For theming gtk3 |         # For theming gtk3 | ||||||
|         adw-gtk3 |         adw-gtk3 | ||||||
| @ -56,6 +58,7 @@ in | |||||||
|         gsconnect |         gsconnect | ||||||
|         disable-workspace-animation |         disable-workspace-animation | ||||||
|         wallpaper-slideshow |         wallpaper-slideshow | ||||||
|  |         media-progress | ||||||
|       ]); |       ]); | ||||||
| 
 | 
 | ||||||
|     # Enable and set the gtk themes |     # Enable and set the gtk themes | ||||||
|  | |||||||
							
								
								
									
										31
									
								
								modules/home/profiles/base.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								modules/home/profiles/base.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.base; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.base = { | ||||||
|  |     enable = mkEnableOption "Base home-manager profile"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     modules = { | ||||||
|  |       # btop.enable = true; | ||||||
|  |       direnv.enable = true; | ||||||
|  |       fish.enable = true; | ||||||
|  |       # scripts.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Development | ||||||
|  |       # neovim.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Languages | ||||||
|  |       nix.enable = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										48
									
								
								modules/home/profiles/gnome.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								modules/home/profiles/gnome.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.gnome; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.gnome = { | ||||||
|  |     enable = mkEnableOption "Graphical GNOME environment"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       firefox # TODO: Move to dediated module | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     modules = { | ||||||
|  |       profiles.base.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Desktop environment | ||||||
|  |       desktop.gnome.enable = true; | ||||||
|  |       # desktop.tiling.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Browser | ||||||
|  |       # firefox = { | ||||||
|  |       #   enable = true; | ||||||
|  |       #   default = false; | ||||||
|  |       # }; | ||||||
|  |       # qutebrowser = { | ||||||
|  |       #   enable = true; | ||||||
|  |       #   default = true; | ||||||
|  |       # }; | ||||||
|  | 
 | ||||||
|  |       # Tools | ||||||
|  |       # obsidian.enable = true; | ||||||
|  |       # zathura.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Development | ||||||
|  |       # neovim.enable = true; | ||||||
|  |       vscode.enable = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										86
									
								
								modules/home/profiles/jan.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								modules/home/profiles/jan.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,86 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.jan; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.jan = { | ||||||
|  |     enable = mkEnableOption "Jan's personal profile"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       libreoffice-still | ||||||
|  |       remmina | ||||||
|  |       thunderbird | ||||||
|  |       signal-desktop | ||||||
|  |       prusa-slicer | ||||||
|  |       freecad-wayland | ||||||
|  |       inkscape | ||||||
|  |       ente-auth | ||||||
|  |       bitwarden | ||||||
|  |       carla | ||||||
|  |       winbox | ||||||
|  |       whatsapp-for-linux | ||||||
|  |       discord | ||||||
|  |       steam | ||||||
|  |       spotify | ||||||
|  |       # feishin # TODO: Fix or replace as insecure | ||||||
|  |       eduvpn-client | ||||||
|  |       river # TODO: Move | ||||||
|  |       ryubing | ||||||
|  |       bottles | ||||||
|  |       prismlauncher | ||||||
|  |       foliate | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     modules = { | ||||||
|  |       profiles.gnome.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Gaming | ||||||
|  |       # retroarch.enable = true; | ||||||
|  |       # ryujinx.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Tools | ||||||
|  |       git = { | ||||||
|  |         enable = true; | ||||||
|  |         user = "Jan-Bulthuis"; | ||||||
|  |         email = "git@bulthuis.dev"; | ||||||
|  |         # TODO: Move | ||||||
|  |         ignores = [ | ||||||
|  |           ".envrc" | ||||||
|  |           ".direnv" | ||||||
|  |           "flake.nix" | ||||||
|  |           "flake.lock" | ||||||
|  |         ]; | ||||||
|  |       }; | ||||||
|  |       xpra = { | ||||||
|  |         enable = true; | ||||||
|  |         hosts = [ | ||||||
|  |           "mixer@10.20.60.251" | ||||||
|  |         ]; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       # Development | ||||||
|  |       # docker.enable = true; | ||||||
|  |       # matlab.enable = true; | ||||||
|  |       mathematica.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Languages | ||||||
|  |       haskell.enable = false; | ||||||
|  |       js.enable = true; | ||||||
|  |       nix.enable = true; | ||||||
|  |       rust.enable = true; | ||||||
|  |       python.enable = true; | ||||||
|  |       cpp.enable = true; | ||||||
|  |       tex.enable = true; | ||||||
|  |       jupyter.enable = false; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										70
									
								
								modules/nixos/profiles/vm.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								modules/nixos/profiles/vm.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | |||||||
|  | { | ||||||
|  |   mkModule, | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.vm; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.vm = { | ||||||
|  |     enable = mkEnableOption "Base VM profile"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Machine hostname | ||||||
|  |     networking.hostName = lib.mkDefault "vm-base"; | ||||||
|  | 
 | ||||||
|  |     # Enabled modules | ||||||
|  |     modules = { | ||||||
|  |       profiles.base.enable = true; | ||||||
|  |       base.enable = true; | ||||||
|  |       ssh.enable = true; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Enable qemu guest agent | ||||||
|  |     services.qemuGuest.enable = true; | ||||||
|  | 
 | ||||||
|  |     # Hardware configuration | ||||||
|  |     hardware.enableRedistributableFirmware = true; | ||||||
|  |     boot.initrd.availableKernelModules = [ | ||||||
|  |       "ata_piix" | ||||||
|  |       "uhci_hcd" | ||||||
|  |       "virtio_pci" | ||||||
|  |       "virtio_scsi" | ||||||
|  |       "sd_mod" | ||||||
|  |       "sr_mod" | ||||||
|  |     ]; | ||||||
|  |     boot.initrd.kernelModules = [ ]; | ||||||
|  |     boot.kernelModules = [ "kvm-intel" ]; | ||||||
|  |     boot.extraModulePackages = [ ]; | ||||||
|  |     hardware.cpu.intel.updateMicrocode = true; | ||||||
|  | 
 | ||||||
|  |     # Filesystems | ||||||
|  |     fileSystems."/" = { | ||||||
|  |       device = "/dev/disk/by-partlabel/root"; | ||||||
|  |       fsType = "ext4"; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     fileSystems."/boot" = { | ||||||
|  |       device = "/dev/disk/by-partlabel/EFI"; | ||||||
|  |       fsType = "vfat"; | ||||||
|  |       options = [ | ||||||
|  |         "fmask=0077" | ||||||
|  |         "dmask=0077" | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Swapfile | ||||||
|  |     swapDevices = [ | ||||||
|  |       { | ||||||
|  |         device = "/var/lib/swapfile"; | ||||||
|  |         size = 6 * 1024; | ||||||
|  |       } | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jan-Bulthuis
						Jan-Bulthuis