forked from jan-leila/nix-config
		
	main #2
					 61 changed files with 1323 additions and 736 deletions
				
			
		|  | @ -13,3 +13,7 @@ creation_rules: | |||
|     key_groups: | ||||
|       - age: | ||||
|         - *leyla | ||||
|   - path_regex: secrets/application-keys.yaml$ | ||||
|     key_groups: | ||||
|       - age: | ||||
|         - *leyla | ||||
|  | @ -12,21 +12,18 @@ in { | |||
|     # See https://search.nixos.org/packages for all options | ||||
|     home.packages = lib.lists.optionals userConfig.isDesktopUser ( | ||||
|       with pkgs; [ | ||||
|         firefox | ||||
|         bitwarden | ||||
|         discord | ||||
|         makemkv | ||||
|         signal-desktop-bin | ||||
|         ungoogled-chromium | ||||
|       ] | ||||
|     ); | ||||
| 
 | ||||
|     # Packages that need to be installed with some extra configuration | ||||
|     # See https://home-manager-options.extranix.com/ for all options | ||||
|     programs = { | ||||
|     programs = lib.mkMerge [ | ||||
|       { | ||||
|         # Let Home Manager install and manage itself. | ||||
|         home-manager.enable = true; | ||||
| 
 | ||||
|       } | ||||
|       (lib.mkIf (config.user.isDesktopUser || config.user.isTerminalUser) { | ||||
|         git = { | ||||
|           enable = true; | ||||
|           userName = "Eve"; | ||||
|  | @ -34,12 +31,8 @@ in { | |||
|           extraConfig.init.defaultBranch = "main"; | ||||
|         }; | ||||
| 
 | ||||
|       vscode = { | ||||
|         enable = true; | ||||
|         package = pkgs.vscodium; | ||||
|       }; | ||||
| 
 | ||||
|         openssh = { | ||||
|           enable = true; | ||||
|           hostKeys = [ | ||||
|             { | ||||
|               type = "ed25519"; | ||||
|  | @ -47,6 +40,20 @@ in { | |||
|             } | ||||
|           ]; | ||||
|         }; | ||||
|       }) | ||||
|       (lib.mkIf config.user.isDesktopUser { | ||||
|         vscode = { | ||||
|           enable = true; | ||||
|           package = pkgs.vscodium; | ||||
|         }; | ||||
| 
 | ||||
|         firefox.enable = true; | ||||
|         bitwarden.enable = true; | ||||
|         discord.enable = true; | ||||
|         makemkv.enable = true; | ||||
|         signal-desktop-bin.enable = true; | ||||
|         steam.enable = true; | ||||
|       }) | ||||
|     ]; | ||||
|   }; | ||||
| } | ||||
|  |  | |||
|  | @ -1,7 +1,11 @@ | |||
| {osConfig, ...}: { | ||||
| { | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   imports = [ | ||||
|     ./packages | ||||
|     ./i18n.nix | ||||
|     ./packages.nix | ||||
|     ./impermanence.nix | ||||
|     ./dconf.nix | ||||
|   ]; | ||||
|  | @ -35,7 +39,7 @@ | |||
|         #   org.gradle.console=verbose | ||||
|         #   org.gradle.daemon.idletimeout=3600000 | ||||
|         # ''; | ||||
|         ".config/user-dirs.dirs" = { | ||||
|         "${config.xdg.configHome}/user-dirs.dirs" = { | ||||
|           force = true; | ||||
|           text = '' | ||||
|             # This file is written by xdg-user-dirs-update | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|  | @ -9,14 +10,10 @@ | |||
|         "desktop" | ||||
|         "downloads" | ||||
|         "documents" | ||||
|         { | ||||
|           directory = ".local/share/Steam"; | ||||
|           method = "symlink"; | ||||
|         } | ||||
|       ]; | ||||
|       files = [ | ||||
|         ".bash_history" # keep shell history around | ||||
|         ".local/share/recently-used.xbel" # gnome recently viewed files | ||||
|         "${config.xdg.dataHome}/recently-used.xbel" # gnome recently viewed files | ||||
|       ]; | ||||
|       allowOther = true; | ||||
|     }; | ||||
|  |  | |||
|  | @ -1,135 +0,0 @@ | |||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   osConfig, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: let | ||||
|   userConfig = osConfig.host.users.leyla; | ||||
|   hardware = osConfig.host.hardware; | ||||
| in { | ||||
|   imports = [ | ||||
|     ./vscode/default.nix | ||||
|     ./firefox.nix | ||||
|   ]; | ||||
| 
 | ||||
|   config = lib.mkMerge [ | ||||
|     (lib.mkIf userConfig.isTerminalUser { | ||||
|       home.packages = with pkgs; [ | ||||
|         # command line tools | ||||
|         sox | ||||
|         yt-dlp | ||||
|         ffmpeg | ||||
|         imagemagick | ||||
|       ]; | ||||
|     }) | ||||
|     (lib.mkIf userConfig.isDesktopUser { | ||||
|       nixpkgs.config = { | ||||
|         allowUnfree = true; | ||||
|       }; | ||||
| 
 | ||||
|       home.packages = ( | ||||
|         lib.lists.optionals userConfig.isDesktopUser ( | ||||
|           (with pkgs; [ | ||||
|             # helvetica font | ||||
|             aileron | ||||
| 
 | ||||
|             gnomeExtensions.dash-to-dock | ||||
| 
 | ||||
|             # development tools | ||||
|             dbeaver-bin | ||||
|             bruno | ||||
|             proxmark3 | ||||
|           ]) | ||||
|           ++ ( | ||||
|             lib.lists.optionals hardware.directAccess.enable (with pkgs; [ | ||||
|               #foss platforms | ||||
|               signal-desktop-bin | ||||
|               bitwarden | ||||
|               ungoogled-chromium | ||||
|               libreoffice | ||||
|               inkscape | ||||
|               gimp | ||||
|               krita | ||||
|               freecad | ||||
|               # cura | ||||
|               # kicad-small | ||||
|               makemkv | ||||
|               onionshare | ||||
|               # rhythmbox | ||||
|               (lib.mkIf hardware.graphicsAcceleration.enable obs-studio) | ||||
|               # wireshark | ||||
|               # rpi-imager | ||||
|               # fritzing | ||||
|               mfoc | ||||
|               tor-browser | ||||
|               anki | ||||
|               pdfarranger | ||||
|               calibre | ||||
|               qbittorrent | ||||
|               picard | ||||
| 
 | ||||
|               # proprietary platforms | ||||
|               discord | ||||
|               obsidian | ||||
|               (lib.mkIf hardware.graphicsAcceleration.enable davinci-resolve) | ||||
| 
 | ||||
|               # development tools | ||||
|               # androidStudioPackages.canary | ||||
|               jetbrains.idea-community | ||||
|               qFlipper | ||||
| 
 | ||||
|               # system tools | ||||
|               protonvpn-gui | ||||
|               openvpn | ||||
|               noisetorch | ||||
| 
 | ||||
|               # hardware management tools | ||||
|               (lib.mkIf hardware.piperMouse.enable piper) | ||||
|               (lib.mkIf hardware.openRGB.enable openrgb) | ||||
|               (lib.mkIf hardware.viaKeyboard.enable via) | ||||
|             ]) | ||||
|           ) | ||||
|         ) | ||||
|       ); | ||||
|       programs = lib.mkIf userConfig.isDesktopUser { | ||||
|         # Let Home Manager install and manage itself. | ||||
|         home-manager.enable = true; | ||||
| 
 | ||||
|         # set up git defaults | ||||
|         git = { | ||||
|           enable = true; | ||||
|           userName = "Leyla Becker"; | ||||
|           userEmail = "git@jan-leila.com"; | ||||
|           extraConfig.init.defaultBranch = "main"; | ||||
|         }; | ||||
| 
 | ||||
|         # add direnv to auto load flakes for development | ||||
|         direnv = { | ||||
|           enable = true; | ||||
|           enableBashIntegration = true; | ||||
|           nix-direnv.enable = true; | ||||
|           config = { | ||||
|             global.hide_env_diff = true; | ||||
|             whitelist.exact = ["/home/leyla/documents/code/nix-config"]; | ||||
|           }; | ||||
|         }; | ||||
|         bash.enable = true; | ||||
| 
 | ||||
|         openssh = { | ||||
|           authorizedKeys = [ | ||||
|             "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJHeItmt8TRW43uNcOC+eIurYC7Eunc0V3LGocQqLaYj leyla@horizon" | ||||
|             "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIILimFIW2exEH/Xo7LtXkqgE04qusvnPNpPWSCeNrFkP leyla@defiant" | ||||
|             "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKBiZkg1c2aaNHiieBX4cEziqvJVj9pcDfzUrKU/mO0I leyla@twilight" | ||||
|           ]; | ||||
|           hostKeys = [ | ||||
|             { | ||||
|               type = "ed25519"; | ||||
|               path = "${config.home.username}_${osConfig.networking.hostName}_ed25519"; | ||||
|             } | ||||
|           ]; | ||||
|         }; | ||||
|       }; | ||||
|     }) | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										118
									
								
								configurations/home-manager/leyla/packages/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								configurations/home-manager/leyla/packages/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,118 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: let | ||||
|   hardware = osConfig.host.hardware; | ||||
| in { | ||||
|   imports = [ | ||||
|     ./vscode | ||||
|     ./firefox.nix | ||||
|     ./direnv.nix | ||||
|     ./openssh.nix | ||||
|     ./git.nix | ||||
|     ./makemkv.nix | ||||
|   ]; | ||||
| 
 | ||||
|   config = lib.mkMerge [ | ||||
|     { | ||||
|       programs = lib.mkMerge [ | ||||
|         { | ||||
|           # Let Home Manager install and manage itself. | ||||
|           home-manager.enable = true; | ||||
|         } | ||||
|         (lib.mkIf (config.user.isTerminalUser || config.user.isDesktopUser) { | ||||
|           bash.enable = true; | ||||
|           git.enable = true; | ||||
|           openssh.enable = true; | ||||
|         }) | ||||
|         (lib.mkIf config.user.isDesktopUser { | ||||
|           bitwarden.enable = true; | ||||
|           obs-studio.enable = hardware.graphicsAcceleration.enable; | ||||
|           qbittorrent.enable = true; | ||||
|           prostudiomasters.enable = true; | ||||
|           protonvpn-gui.enable = true; | ||||
|           dbeaver-bin.enable = true; | ||||
|           bruno.enable = true; | ||||
|         }) | ||||
|         (lib.mkIf (hardware.directAccess.enable && config.user.isDesktopUser) { | ||||
|           anki.enable = true; | ||||
|           makemkv.enable = true; | ||||
|           discord.enable = true; | ||||
|           signal-desktop-bin.enable = true; | ||||
|           calibre.enable = true; | ||||
|           obsidian.enable = true; | ||||
|           jetbrains.idea-community.enable = true; | ||||
|           vscode.enable = true; | ||||
|           firefox.enable = true; | ||||
|           steam.enable = true; | ||||
|         }) | ||||
|       ]; | ||||
|     } | ||||
|     (lib.mkIf config.user.isTerminalUser { | ||||
|       home.packages = with pkgs; [ | ||||
|         # command line tools | ||||
|         sox | ||||
|         yt-dlp | ||||
|         ffmpeg | ||||
|         imagemagick | ||||
|       ]; | ||||
|     }) | ||||
|     (lib.mkIf config.user.isDesktopUser { | ||||
|       nixpkgs.config = { | ||||
|         allowUnfree = true; | ||||
|       }; | ||||
| 
 | ||||
|       home.packages = ( | ||||
|         (with pkgs; [ | ||||
|           aileron | ||||
| 
 | ||||
|           gnomeExtensions.dash-to-dock | ||||
| 
 | ||||
|           proxmark3 | ||||
|         ]) | ||||
|         ++ ( | ||||
|           lib.lists.optionals hardware.directAccess.enable (with pkgs; [ | ||||
|             #foss platforms | ||||
|             ungoogled-chromium | ||||
|             libreoffice | ||||
|             inkscape | ||||
|             gimp | ||||
|             krita | ||||
|             freecad | ||||
|             # cura | ||||
|             # kicad-small | ||||
|             onionshare | ||||
|             # rhythmbox | ||||
| 
 | ||||
|             # wireshark | ||||
|             # rpi-imager | ||||
|             # fritzing | ||||
|             mfoc | ||||
|             tor-browser | ||||
|             pdfarranger | ||||
|             picard | ||||
| 
 | ||||
|             # proprietary platforms | ||||
|             (lib.mkIf hardware.graphicsAcceleration.enable davinci-resolve) | ||||
| 
 | ||||
|             # development tools | ||||
|             # androidStudioPackages.canary | ||||
|             qFlipper | ||||
| 
 | ||||
|             # system tools | ||||
|             openvpn | ||||
|             noisetorch | ||||
| 
 | ||||
|             # hardware management tools | ||||
|             (lib.mkIf hardware.piperMouse.enable piper) | ||||
|             (lib.mkIf hardware.openRGB.enable openrgb) | ||||
|             (lib.mkIf hardware.viaKeyboard.enable via) | ||||
|           ]) | ||||
|         ) | ||||
|       ); | ||||
|     }) | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										22
									
								
								configurations/home-manager/leyla/packages/direnv.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								configurations/home-manager/leyla/packages/direnv.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: let | ||||
|   userConfig = osConfig.host.users.leyla; | ||||
| in { | ||||
|   config = lib.mkIf userConfig.isDesktopUser { | ||||
|     programs = { | ||||
|       direnv = { | ||||
|         enable = true; | ||||
|         enableBashIntegration = true; | ||||
|         nix-direnv.enable = true; | ||||
|         config = { | ||||
|           global.hide_env_diff = true; | ||||
|           whitelist.exact = ["${config.home.homeDirectory}/documents/code/nix-config"]; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -2,14 +2,10 @@ | |||
|   lib, | ||||
|   pkgs, | ||||
|   inputs, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: let | ||||
|   is-desktop-user = osConfig.host.users.leyla.isDesktopUser; | ||||
| in { | ||||
|   config = lib.mkIf is-desktop-user { | ||||
| }: { | ||||
|   config = { | ||||
|     programs.firefox = { | ||||
|       enable = true; | ||||
|       profiles.leyla = { | ||||
|         settings = { | ||||
|           "browser.search.defaultenginename" = "Searx"; | ||||
							
								
								
									
										11
									
								
								configurations/home-manager/leyla/packages/git.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								configurations/home-manager/leyla/packages/git.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| {...}: { | ||||
|   config = { | ||||
|     programs = { | ||||
|       git = { | ||||
|         userName = "Leyla Becker"; | ||||
|         userEmail = "git@jan-leila.com"; | ||||
|         extraConfig.init.defaultBranch = "main"; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										17
									
								
								configurations/home-manager/leyla/packages/makemkv.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								configurations/home-manager/leyla/packages/makemkv.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| { | ||||
|   config, | ||||
|   inputs, | ||||
|   ... | ||||
| }: { | ||||
|   config = { | ||||
|     sops.secrets = { | ||||
|       "application-keys/makemkv" = { | ||||
|         sopsFile = "${inputs.secrets}/application-keys.yaml"; | ||||
|       }; | ||||
|     }; | ||||
|     programs.makemkv = { | ||||
|       appKeyFile = config.sops.placeholder."application-keys/makemkv"; | ||||
|       destinationDir = "/home/leyla/downloads/makemkv"; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										23
									
								
								configurations/home-manager/leyla/packages/openssh.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								configurations/home-manager/leyla/packages/openssh.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | |||
| { | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   config = { | ||||
|     programs = { | ||||
|       openssh = { | ||||
|         authorizedKeys = [ | ||||
|           "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJHeItmt8TRW43uNcOC+eIurYC7Eunc0V3LGocQqLaYj leyla@horizon" | ||||
|           "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIILimFIW2exEH/Xo7LtXkqgE04qusvnPNpPWSCeNrFkP leyla@defiant" | ||||
|           "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKBiZkg1c2aaNHiieBX4cEziqvJVj9pcDfzUrKU/mO0I leyla@twilight" | ||||
|         ]; | ||||
|         hostKeys = [ | ||||
|           { | ||||
|             type = "ed25519"; | ||||
|             path = "${config.home.username}_${osConfig.networking.hostName}_ed25519"; | ||||
|           } | ||||
|         ]; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -8,9 +8,8 @@ | |||
| }: let | ||||
|   nix-development-enabled = osConfig.host.nix-development.enable; | ||||
|   ai-tooling-enabled = config.user.continue.enable && osConfig.host.ai.enable; | ||||
|   is-desktop-user = osConfig.host.users.leyla.isDesktopUser; | ||||
| in { | ||||
|   config = lib.mkIf is-desktop-user { | ||||
|   config = lib.mkIf config.user.isDesktopUser { | ||||
|     nixpkgs = { | ||||
|       overlays = [ | ||||
|         inputs.nix-vscode-extensions.overlays.default | ||||
|  | @ -27,8 +26,6 @@ in { | |||
|         open-vsx = extensions.open-vsx; | ||||
|         vscode-marketplace = extensions.vscode-marketplace; | ||||
|       in { | ||||
|         enable = true; | ||||
| 
 | ||||
|         package = pkgs.vscodium; | ||||
| 
 | ||||
|         mutableExtensionsDir = false; | ||||
|  | @ -40,6 +40,8 @@ | |||
|         tokenFile = config.sops.secrets."services/zfs_smtp_token".path; | ||||
|       }; | ||||
|       pool = { | ||||
|         # We are having to boot off of the nvm cache drive because I cant figure out how to boot via the HBA | ||||
|         bootDrives = ["nvme-Samsung_SSD_990_PRO_4TB_S7KGNU0X907881F"]; | ||||
|         vdevs = [ | ||||
|           [ | ||||
|             "ata-ST18000NE000-3G6101_ZVTCXVEB" | ||||
|  | @ -199,8 +201,7 @@ | |||
| 
 | ||||
|     # temp enable desktop enviroment for setup | ||||
|     # Enable the X11 windowing system. | ||||
|     xserver = { | ||||
|       enable = true; | ||||
|     xserver.enable = true; | ||||
| 
 | ||||
|     # Enable the GNOME Desktop Environment. | ||||
|     displayManager = { | ||||
|  | @ -209,7 +210,6 @@ | |||
|     desktopManager = { | ||||
|       gnome.enable = true; | ||||
|     }; | ||||
|     }; | ||||
| 
 | ||||
|     ollama = { | ||||
|       enable = true; | ||||
|  | @ -298,7 +298,7 @@ | |||
|     hibernate.enable = false; | ||||
|     hybrid-sleep.enable = false; | ||||
|   }; | ||||
|   services.xserver.displayManager.gdm.autoSuspend = false; | ||||
|   services.displayManager.gdm.autoSuspend = false; | ||||
| 
 | ||||
|   # This value determines the NixOS release from which the default | ||||
|   # settings for stateful data, like file locations and database versions | ||||
|  |  | |||
|  | @ -2,7 +2,6 @@ | |||
| # your system. Help is available in the configuration.nix(5) man page, on | ||||
| # https://search.nixos.org/options and in the NixOS manual (`nixos-help`). | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
|  | @ -39,8 +38,8 @@ | |||
|   services.xserver.enable = true; | ||||
| 
 | ||||
|   # Enable the GNOME Desktop Environment. | ||||
|   services.xserver.displayManager.gdm.enable = true; | ||||
|   services.xserver.desktopManager.gnome.enable = true; | ||||
|   services.displayManager.gdm.enable = true; | ||||
|   services.desktopManager.gnome.enable = true; | ||||
| 
 | ||||
|   host = { | ||||
|     users = { | ||||
|  | @ -50,6 +49,14 @@ | |||
|         isPrincipleUser = true; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     storage = { | ||||
|       enable = true; | ||||
|       pool = { | ||||
|         mode = ""; | ||||
|         drives = ["wwn-0x5000039fd0cf05eb"]; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   # Configure keymap in X11 | ||||
|  | @ -91,12 +98,7 @@ | |||
| 
 | ||||
|   # Packages that need to be installed with some extra configuration | ||||
|   # See https://search.nixos.org/options for all options | ||||
|   programs.steam = { | ||||
|     enable = true; | ||||
|     remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play | ||||
|     dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server | ||||
|     localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers | ||||
|   }; | ||||
|   programs = {}; | ||||
| 
 | ||||
|   # Some programs need SUID wrappers, can be configured further or are | ||||
|   # started in user sessions. | ||||
|  |  | |||
|  | @ -3,6 +3,5 @@ | |||
|   imports = [ | ||||
|     ./configuration.nix | ||||
|     ./hardware-configuration.nix | ||||
|     ./disco-configuration.nix | ||||
|   ]; | ||||
| } | ||||
|  |  | |||
|  | @ -1,57 +0,0 @@ | |||
| {...}: { | ||||
|   disko.devices = { | ||||
|     disk = { | ||||
|       disk1 = { | ||||
|         type = "disk"; | ||||
|         device = "/dev/disk/by-id/wwn-0x5000039fd0cf05eb"; | ||||
|         content = { | ||||
|           type = "gpt"; | ||||
|           partitions = { | ||||
|             ESP = { | ||||
|               size = "512M"; | ||||
|               type = "EF00"; | ||||
|               content = { | ||||
|                 type = "filesystem"; | ||||
|                 format = "vfat"; | ||||
|                 mountpoint = "/boot"; | ||||
|                 mountOptions = ["umask=0077"]; | ||||
|               }; | ||||
|             }; | ||||
|             zfs = { | ||||
|               size = "100%"; | ||||
|               content = { | ||||
|                 type = "zfs"; | ||||
|                 pool = "zroot"; | ||||
|               }; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|     zpool = { | ||||
|       zroot = { | ||||
|         type = "zpool"; | ||||
|         mode = ""; | ||||
|         options.cachefile = "none"; | ||||
|         rootFsOptions = { | ||||
|           compression = "zstd"; | ||||
|           "com.sun:auto-snapshot" = "true"; | ||||
|         }; | ||||
|         mountpoint = "/"; | ||||
|         postCreateHook = "zfs list -t snapshot -H -o name | grep -E '^zroot@blank$' || zfs snapshot zroot@blank"; | ||||
| 
 | ||||
|         datasets = { | ||||
|           "system/nix" = { | ||||
|             type = "zfs_fs"; | ||||
|             mountpoint = "/nix"; | ||||
|             options = { | ||||
|               atime = "off"; | ||||
|               relatime = "off"; | ||||
|               canmount = "on"; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -1,7 +1,8 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   inputs, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: { | ||||
|   imports = [ | ||||
|  | @ -10,6 +11,19 @@ | |||
| 
 | ||||
|   nixpkgs.config.allowUnfree = true; | ||||
| 
 | ||||
|   boot = { | ||||
|     initrd = { | ||||
|       availableKernelModules = ["usb_storage" "sd_mod"]; | ||||
|     }; | ||||
|     kernelModules = ["sg"]; | ||||
| 
 | ||||
|     # Bootloader. | ||||
|     loader = { | ||||
|       systemd-boot.enable = true; | ||||
|       efi.canTouchEfiVariables = true; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   host = { | ||||
|     users = { | ||||
|       leyla = { | ||||
|  | @ -32,6 +46,28 @@ | |||
|           roles = ["chat" "edit" "apply"]; | ||||
|           apiBase = "http://twilight:11434"; | ||||
|         }; | ||||
|         "Deepseek Coder:6.7B" = { | ||||
|           model = "deepseek-coder:6.7b"; | ||||
|           roles = ["chat" "edit" "apply"]; | ||||
|           apiBase = "http://twilight:11434"; | ||||
|         }; | ||||
|         "Deepseek Coder:33B" = { | ||||
|           model = "deepseek-coder:33b"; | ||||
|           roles = ["chat" "edit" "apply"]; | ||||
|           apiBase = "http://twilight:11434"; | ||||
|         }; | ||||
| 
 | ||||
|         "Deepseek r1:8B" = { | ||||
|           model = "deepseek-r1:8b"; | ||||
|           roles = ["chat"]; | ||||
|           apiBase = "http://twilight:11434"; | ||||
|         }; | ||||
| 
 | ||||
|         "Deepseek r1:32B" = { | ||||
|           model = "deepseek-r1:32b"; | ||||
|           roles = ["chat"]; | ||||
|           apiBase = "http://twilight:11434"; | ||||
|         }; | ||||
| 
 | ||||
|         "qwen2.5-coder:1.5b-base" = { | ||||
|           model = "qwen2.5-coder:1.5b-base"; | ||||
|  | @ -49,17 +85,23 @@ | |||
|   }; | ||||
| 
 | ||||
|   environment.systemPackages = with pkgs; [ | ||||
|     cachefilesd | ||||
|     webtoon-dl | ||||
|     prostudiomasters | ||||
|   ]; | ||||
|   services.cachefilesd.enable = true; | ||||
| 
 | ||||
|   programs = { | ||||
|     adb.enable = true; | ||||
|     steam = { | ||||
|       enable = true; | ||||
|       remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play | ||||
|       dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server | ||||
|   }; | ||||
| 
 | ||||
|   networking = { | ||||
|     networkmanager.enable = true; | ||||
|     hostName = "horizon"; # Define your hostname. | ||||
|   }; | ||||
|   powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; | ||||
| 
 | ||||
|   hardware = { | ||||
|     graphics.enable = true; | ||||
|   }; | ||||
| 
 | ||||
|   sops.secrets = { | ||||
|  | @ -73,6 +115,10 @@ | |||
|     fprintd = { | ||||
|       enable = true; | ||||
|     }; | ||||
|     # firmware update tool | ||||
|     fwupd = { | ||||
|       enable = true; | ||||
|     }; | ||||
|     tailscale = { | ||||
|       enable = true; | ||||
|       authKeyFile = config.sops.secrets."vpn-keys/tailscale-authkey/horizon".path; | ||||
|  |  | |||
|  | @ -4,7 +4,6 @@ | |||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   modulesPath, | ||||
|   ... | ||||
| }: { | ||||
|  | @ -12,22 +11,10 @@ | |||
|     (modulesPath + "/installer/scan/not-detected.nix") | ||||
|   ]; | ||||
| 
 | ||||
|   boot = { | ||||
|     initrd = { | ||||
|       availableKernelModules = ["xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod"]; | ||||
|       kernelModules = []; | ||||
|     }; | ||||
|     kernelModules = ["kvm-intel" "sg"]; | ||||
|     extraModulePackages = []; | ||||
| 
 | ||||
|     # Bootloader. | ||||
|     loader = { | ||||
|       systemd-boot.enable = true; | ||||
|       efi.canTouchEfiVariables = true; | ||||
|     }; | ||||
| 
 | ||||
|     supportedFilesystems = ["nfs"]; | ||||
|   }; | ||||
|   boot.initrd.availableKernelModules = ["xhci_pci" "thunderbolt" "nvme"]; | ||||
|   boot.initrd.kernelModules = []; | ||||
|   boot.kernelModules = ["kvm-intel"]; | ||||
|   boot.extraModulePackages = []; | ||||
| 
 | ||||
|   fileSystems = { | ||||
|     "/" = { | ||||
|  | @ -39,98 +26,20 @@ | |||
|       device = "/dev/disk/by-uuid/E138-65B5"; | ||||
|       fsType = "vfat"; | ||||
|     }; | ||||
| 
 | ||||
|     "/mnt/leyla_documents" = { | ||||
|       device = "defiant:/export/leyla_documents"; | ||||
|       fsType = "nfs"; | ||||
|       options = [ | ||||
|         "vers=4" | ||||
|         "x-systemd.automount" | ||||
|         "noauto" | ||||
|         "user" | ||||
|         "noatime" | ||||
|         "nofail" | ||||
|         "x-systemd.idle-timeout=600" | ||||
|         "fsc" | ||||
|         "timeo=600" | ||||
|         "retrans=2" | ||||
|       ]; | ||||
|   }; | ||||
| 
 | ||||
|     "/mnt/eve_documents" = { | ||||
|       device = "defiant:/export/eve_documents"; | ||||
|       fsType = "nfs"; | ||||
|       options = [ | ||||
|         "vers=4" | ||||
|         "x-systemd.automount" | ||||
|         "noauto" | ||||
|         "user" | ||||
|         "nofail" | ||||
|         "x-systemd.idle-timeout=600" | ||||
|         "fsc" | ||||
|         "timeo=600" | ||||
|         "retrans=2" | ||||
|       ]; | ||||
|     }; | ||||
| 
 | ||||
|     "/mnt/users_documents" = { | ||||
|       device = "defiant:/export/users_documents"; | ||||
|       fsType = "nfs"; | ||||
|       options = [ | ||||
|         "vers=4" | ||||
|         "x-systemd.automount" | ||||
|         "noauto" | ||||
|         "user" | ||||
|         "nofail" | ||||
|         "x-systemd.idle-timeout=600" | ||||
|         "fsc" | ||||
|         "timeo=600" | ||||
|         "retrans=2" | ||||
|       ]; | ||||
|     }; | ||||
| 
 | ||||
|     "/mnt/media" = { | ||||
|       device = "defiant:/export/media"; | ||||
|       fsType = "nfs"; | ||||
|       options = [ | ||||
|         "vers=4" | ||||
|         "x-systemd.automount" | ||||
|         "noauto" | ||||
|         "user" | ||||
|         "noatime" | ||||
|         "nofail" | ||||
|         "x-systemd.idle-timeout=600" | ||||
|         "noatime" | ||||
|         "nodiratime" | ||||
|         "relatime" | ||||
|         "fsc" | ||||
|         "timeo=600" | ||||
|         "retrans=2" | ||||
|       ]; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   environment.systemPackages = with pkgs; [ | ||||
|     cachefilesd | ||||
|   ]; | ||||
| 
 | ||||
|   services.cachefilesd.enable = true; | ||||
| 
 | ||||
|   swapDevices = [ | ||||
|     {device = "/dev/disk/by-uuid/be98e952-a072-4c3a-8c12-69500b5a2fff";} | ||||
|   ]; | ||||
| 
 | ||||
|   networking = { | ||||
|     networkmanager.enable = true; | ||||
|     useDHCP = lib.mkDefault true; | ||||
|     hostName = "horizon"; # Define your hostname. | ||||
|   }; | ||||
|   # Enables DHCP on each ethernet and wireless interface. In case of scripted networking | ||||
|   # (the default) this is the recommended approach. When using systemd-networkd it's | ||||
|   # still possible to use this option, but it's recommended to use it in conjunction | ||||
|   # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. | ||||
|   networking.useDHCP = lib.mkDefault true; | ||||
|   # networking.interfaces.tailscale0.useDHCP = lib.mkDefault true; | ||||
|   # networking.interfaces.wlp170s0.useDHCP = lib.mkDefault true; | ||||
| 
 | ||||
|   nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; | ||||
|   powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; | ||||
| 
 | ||||
|   hardware = { | ||||
|     graphics.enable = true; | ||||
|     cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; | ||||
|   }; | ||||
|   hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; | ||||
| } | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| { | ||||
|   inputs, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: { | ||||
|   imports = [ | ||||
|  | @ -9,6 +10,14 @@ | |||
| 
 | ||||
|   nixpkgs.config.allowUnfree = true; | ||||
| 
 | ||||
|   boot.initrd.availableKernelModules = ["usb_storage"]; | ||||
|   boot.kernelModules = ["sg"]; | ||||
| 
 | ||||
|   boot.loader = { | ||||
|     systemd-boot.enable = true; | ||||
|     efi.canTouchEfiVariables = true; | ||||
|   }; | ||||
| 
 | ||||
|   sops.secrets = { | ||||
|     "vpn-keys/tailscale-authkey/twilight" = { | ||||
|       sopsFile = "${inputs.secrets}/vpn-keys.yaml"; | ||||
|  | @ -121,13 +130,70 @@ | |||
| 
 | ||||
|     syncthing.enable = true; | ||||
|   }; | ||||
|   programs.steam = { | ||||
|     enable = true; | ||||
|     remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play | ||||
|     dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server | ||||
| 
 | ||||
|   boot.supportedFilesystems = ["nfs"]; | ||||
| 
 | ||||
|   fileSystems = { | ||||
|     "/mnt/leyla_documents" = { | ||||
|       device = "defiant:/exports/leyla_documents"; | ||||
|       fsType = "nfs"; | ||||
|       options = [ | ||||
|         "x-systemd.automount" | ||||
|         "noauto" | ||||
|         "user" | ||||
|         "noatime" | ||||
|         "nofail" | ||||
|         "soft" | ||||
|         "x-systemd.idle-timeout=600" | ||||
|         "fsc" | ||||
|       ]; | ||||
|     }; | ||||
| 
 | ||||
|     "/mnt/users_documents" = { | ||||
|       device = "defiant:/exports/users_documents"; | ||||
|       fsType = "nfs"; | ||||
|       options = [ | ||||
|         "x-systemd.automount" | ||||
|         "noauto" | ||||
|         "user" | ||||
|         "nofail" | ||||
|         "soft" | ||||
|         "x-systemd.idle-timeout=600" | ||||
|         "fsc" | ||||
|       ]; | ||||
|     }; | ||||
| 
 | ||||
|     "/mnt/media" = { | ||||
|       device = "defiant:/exports/media"; | ||||
|       fsType = "nfs"; | ||||
|       options = [ | ||||
|         "x-systemd.automount" | ||||
|         "noauto" | ||||
|         "user" | ||||
|         "noatime" | ||||
|         "nofail" | ||||
|         "soft" | ||||
|         "x-systemd.idle-timeout=600" | ||||
|         "noatime" | ||||
|         "nodiratime" | ||||
|         "relatime" | ||||
|         "rsize=32768" | ||||
|         "wsize=32768" | ||||
|         "fsc" | ||||
|       ]; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   environment.systemPackages = with pkgs; [ | ||||
|     cachefilesd | ||||
|   ]; | ||||
|   hardware.steam-hardware.enable = true; # Provides udev rules for controller, HTC vive, and Valve Index | ||||
| 
 | ||||
|   networking = { | ||||
|     networkmanager.enable = true; | ||||
|     hostName = "twilight"; # Define your hostname. | ||||
|   }; | ||||
| 
 | ||||
|   # enabled virtualisation for docker | ||||
|   # virtualisation.docker.enable = true; | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,5 +3,6 @@ | |||
|   imports = [ | ||||
|     ./configuration.nix | ||||
|     ./hardware-configuration.nix | ||||
|     ./nvidia-drivers.nix | ||||
|   ]; | ||||
| } | ||||
|  |  | |||
|  | @ -4,7 +4,6 @@ | |||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   modulesPath, | ||||
|   ... | ||||
| }: { | ||||
|  | @ -12,30 +11,10 @@ | |||
|     (modulesPath + "/installer/scan/not-detected.nix") | ||||
|   ]; | ||||
| 
 | ||||
|   boot = { | ||||
|     initrd = { | ||||
|       availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"]; | ||||
|       kernelModules = []; | ||||
|     }; | ||||
|     kernelModules = ["kvm-amd" "sg"]; | ||||
|     extraModulePackages = []; | ||||
| 
 | ||||
|     # Bootloader. | ||||
|     loader = { | ||||
|       systemd-boot.enable = true; | ||||
|       efi.canTouchEfiVariables = true; | ||||
|     }; | ||||
| 
 | ||||
|     supportedFilesystems = ["nfs"]; | ||||
|   }; | ||||
| 
 | ||||
|   services.xserver = { | ||||
|     # Load nvidia driver for Xorg and Wayland | ||||
|     videoDrivers = ["nvidia"]; | ||||
| 
 | ||||
|     # Use X instead of wayland for gaming reasons | ||||
|     displayManager.gdm.wayland = false; | ||||
|   }; | ||||
|   boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "sd_mod"]; | ||||
|   boot.initrd.kernelModules = []; | ||||
|   boot.kernelModules = ["kvm-amd"]; | ||||
|   boot.extraModulePackages = []; | ||||
| 
 | ||||
|   fileSystems = { | ||||
|     "/" = { | ||||
|  | @ -48,111 +27,16 @@ | |||
|       fsType = "vfat"; | ||||
|       options = ["fmask=0022" "dmask=0022"]; | ||||
|     }; | ||||
| 
 | ||||
|     "/mnt/leyla_documents" = { | ||||
|       device = "defiant:/exports/leyla_documents"; | ||||
|       fsType = "nfs"; | ||||
|       options = [ | ||||
|         "x-systemd.automount" | ||||
|         "noauto" | ||||
|         "user" | ||||
|         "noatime" | ||||
|         "nofail" | ||||
|         "soft" | ||||
|         "x-systemd.idle-timeout=600" | ||||
|         "fsc" | ||||
|       ]; | ||||
|   }; | ||||
| 
 | ||||
|     "/mnt/users_documents" = { | ||||
|       device = "defiant:/exports/users_documents"; | ||||
|       fsType = "nfs"; | ||||
|       options = [ | ||||
|         "x-systemd.automount" | ||||
|         "noauto" | ||||
|         "user" | ||||
|         "nofail" | ||||
|         "soft" | ||||
|         "x-systemd.idle-timeout=600" | ||||
|         "fsc" | ||||
|       ]; | ||||
|     }; | ||||
| 
 | ||||
|     "/mnt/media" = { | ||||
|       device = "defiant:/exports/media"; | ||||
|       fsType = "nfs"; | ||||
|       options = [ | ||||
|         "x-systemd.automount" | ||||
|         "noauto" | ||||
|         "user" | ||||
|         "noatime" | ||||
|         "nofail" | ||||
|         "soft" | ||||
|         "x-systemd.idle-timeout=600" | ||||
|         "noatime" | ||||
|         "nodiratime" | ||||
|         "relatime" | ||||
|         "rsize=32768" | ||||
|         "wsize=32768" | ||||
|         "fsc" | ||||
|       ]; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   environment.systemPackages = with pkgs; [ | ||||
|     cachefilesd | ||||
|   ]; | ||||
| 
 | ||||
|   swapDevices = []; | ||||
| 
 | ||||
|   networking = { | ||||
|     networkmanager.enable = true; | ||||
|   # Enables DHCP on each ethernet and wireless interface. In case of scripted networking | ||||
|   # (the default) this is the recommended approach. When using systemd-networkd it's | ||||
|   # still possible to use this option, but it's recommended to use it in conjunction | ||||
|   # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. | ||||
|     useDHCP = lib.mkDefault true; | ||||
|     hostName = "twilight"; # Define your hostname. | ||||
|   }; | ||||
|   networking.useDHCP = lib.mkDefault true; | ||||
| 
 | ||||
|   nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; | ||||
| 
 | ||||
|   hardware = { | ||||
|     # Enable OpenGL | ||||
|     graphics.enable = true; | ||||
| 
 | ||||
|     # install graphics drivers | ||||
|     nvidia = { | ||||
|       # Modesetting is required. | ||||
|       modesetting.enable = true; | ||||
| 
 | ||||
|       # Nvidia power management. Experimental, and can cause sleep/suspend to fail. | ||||
|       # Enable this if you have graphical corruption issues or application crashes after waking | ||||
|       # up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead | ||||
|       # of just the bare essentials. | ||||
|       powerManagement.enable = false; | ||||
| 
 | ||||
|       # Fine-grained power management. Turns off GPU when not in use. | ||||
|       # Experimental and only works on modern Nvidia GPUs (Turing or newer). | ||||
|       powerManagement.finegrained = false; | ||||
| 
 | ||||
|       # Use the NVidia open source kernel module (not to be confused with the | ||||
|       # independent third-party "nouveau" open source driver). | ||||
|       # Support is limited to the Turing and later architectures. Full list of | ||||
|       # supported GPUs is at: | ||||
|       # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus | ||||
|       # Only available from driver 515.43.04+ | ||||
|       # Currently alpha-quality/buggy, so false is currently the recommended setting. | ||||
|       open = false; | ||||
| 
 | ||||
|       # Enable the Nvidia settings menu, | ||||
|       # accessible via `nvidia-settings`. | ||||
|       nvidiaSettings = true; | ||||
| 
 | ||||
|       # Optionally, you may need to select the appropriate driver version for your specific GPU. | ||||
|       package = config.boot.kernelPackages.nvidiaPackages.production; | ||||
|     }; | ||||
| 
 | ||||
|     cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; | ||||
|   }; | ||||
|   hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; | ||||
| } | ||||
|  |  | |||
							
								
								
									
										47
									
								
								configurations/nixos/twilight/nvidia-drivers.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								configurations/nixos/twilight/nvidia-drivers.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | |||
| {config, ...}: { | ||||
|   services = { | ||||
|     xserver = { | ||||
|       # Load nvidia driver for Xorg and Wayland | ||||
|       videoDrivers = ["nvidia"]; | ||||
|     }; | ||||
|     # Use X instead of wayland for gaming reasons | ||||
|     displayManager.gdm.wayland = false; | ||||
|   }; | ||||
| 
 | ||||
|   hardware = { | ||||
|     # Enable OpenGL | ||||
|     graphics.enable = true; | ||||
| 
 | ||||
|     # install graphics drivers | ||||
|     nvidia = { | ||||
|       # Modesetting is required. | ||||
|       modesetting.enable = true; | ||||
| 
 | ||||
|       # Nvidia power management. Experimental, and can cause sleep/suspend to fail. | ||||
|       # Enable this if you have graphical corruption issues or application crashes after waking | ||||
|       # up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead | ||||
|       # of just the bare essentials. | ||||
|       powerManagement.enable = false; | ||||
| 
 | ||||
|       # Fine-grained power management. Turns off GPU when not in use. | ||||
|       # Experimental and only works on modern Nvidia GPUs (Turing or newer). | ||||
|       powerManagement.finegrained = false; | ||||
| 
 | ||||
|       # Use the NVidia open source kernel module (not to be confused with the | ||||
|       # independent third-party "nouveau" open source driver). | ||||
|       # Support is limited to the Turing and later architectures. Full list of | ||||
|       # supported GPUs is at: | ||||
|       # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus | ||||
|       # Only available from driver 515.43.04+ | ||||
|       # Currently alpha-quality/buggy, so false is currently the recommended setting. | ||||
|       open = true; | ||||
| 
 | ||||
|       # Enable the Nvidia settings menu, | ||||
|       # accessible via `nvidia-settings`. | ||||
|       nvidiaSettings = true; | ||||
| 
 | ||||
|       # Optionally, you may need to select the appropriate driver version for your specific GPU. | ||||
|       package = config.boot.kernelPackages.nvidiaPackages.production; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										136
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										136
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							|  | @ -7,11 +7,11 @@ | |||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1748225455, | ||||
|         "narHash": "sha256-AzlJCKaM4wbEyEpV3I/PUq5mHnib2ryEy32c+qfj6xk=", | ||||
|         "lastModified": 1748832438, | ||||
|         "narHash": "sha256-/CtyLVfNaFP7PrOPrTEuGOJBIhcBKVQ91KiEbtXJi0A=", | ||||
|         "owner": "nix-community", | ||||
|         "repo": "disko", | ||||
|         "rev": "a894f2811e1ee8d10c50560551e50d6ab3c392ba", | ||||
|         "rev": "58d6e5a83fff9982d57e0a0a994d4e5c0af441e4", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -28,11 +28,11 @@ | |||
|       }, | ||||
|       "locked": { | ||||
|         "dir": "pkgs/firefox-addons", | ||||
|         "lastModified": 1748405006, | ||||
|         "narHash": "sha256-pmt0SFjACJJAI8g8QU5arg2c9BXNZG9/okVwRSDJkG8=", | ||||
|         "lastModified": 1749009805, | ||||
|         "narHash": "sha256-eRv4m89aPJvIAX9mZQcJM+l3sYG+OJvcLsiHvAvXalg=", | ||||
|         "owner": "rycee", | ||||
|         "repo": "nur-expressions", | ||||
|         "rev": "f9801a86d6603260940890c36650275090d1dceb", | ||||
|         "rev": "622c38d004cdded682d9a5ab7323181dc6efb0c1", | ||||
|         "type": "gitlab" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -75,6 +75,39 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "flake-utils_2": { | ||||
|       "inputs": { | ||||
|         "systems": "systems_2" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1731533236, | ||||
|         "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", | ||||
|         "owner": "numtide", | ||||
|         "repo": "flake-utils", | ||||
|         "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "numtide", | ||||
|         "repo": "flake-utils", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "flakey-profile": { | ||||
|       "locked": { | ||||
|         "lastModified": 1712898590, | ||||
|         "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", | ||||
|         "owner": "lf-", | ||||
|         "repo": "flakey-profile", | ||||
|         "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "lf-", | ||||
|         "repo": "flakey-profile", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "home-manager": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": [ | ||||
|  | @ -82,11 +115,11 @@ | |||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1748455938, | ||||
|         "narHash": "sha256-mQ/iNzPra2WtDQ+x2r5IadcWNr0m3uHvLMzJkXKAG/8=", | ||||
|         "lastModified": 1749049052, | ||||
|         "narHash": "sha256-wIt8ZBc8diKg1H5ibi3Bw9HUcPR2w3xy4ddcuzjgLb0=", | ||||
|         "owner": "nix-community", | ||||
|         "repo": "home-manager", | ||||
|         "rev": "02077149e2921014511dac2729ae6dadb4ec50e2", | ||||
|         "rev": "ffab96a8b4a523c4b5e2645ee09e95a75cbdbfab", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -110,6 +143,41 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "lix": { | ||||
|       "flake": false, | ||||
|       "locked": { | ||||
|         "lastModified": 1746827285, | ||||
|         "narHash": "sha256-hsFe4Tsqqg4l+FfQWphDtjC79WzNCZbEFhHI8j2KJzw=", | ||||
|         "rev": "47aad376c87e2e65967f17099277428e4b3f8e5a", | ||||
|         "type": "tarball", | ||||
|         "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/47aad376c87e2e65967f17099277428e4b3f8e5a.tar.gz?rev=47aad376c87e2e65967f17099277428e4b3f8e5a" | ||||
|       }, | ||||
|       "original": { | ||||
|         "type": "tarball", | ||||
|         "url": "https://git.lix.systems/lix-project/lix/archive/2.93.0.tar.gz" | ||||
|       } | ||||
|     }, | ||||
|     "lix-module": { | ||||
|       "inputs": { | ||||
|         "flake-utils": "flake-utils", | ||||
|         "flakey-profile": "flakey-profile", | ||||
|         "lix": "lix", | ||||
|         "nixpkgs": [ | ||||
|           "nixpkgs" | ||||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1746838955, | ||||
|         "narHash": "sha256-11R4K3iAx4tLXjUs+hQ5K90JwDABD/XHhsM9nkeS5N8=", | ||||
|         "rev": "cd2a9c028df820a83ca2807dc6c6e7abc3dfa7fc", | ||||
|         "type": "tarball", | ||||
|         "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/cd2a9c028df820a83ca2807dc6c6e7abc3dfa7fc.tar.gz?rev=cd2a9c028df820a83ca2807dc6c6e7abc3dfa7fc" | ||||
|       }, | ||||
|       "original": { | ||||
|         "type": "tarball", | ||||
|         "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.93.0.tar.gz" | ||||
|       } | ||||
|     }, | ||||
|     "nix-darwin": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": [ | ||||
|  | @ -117,11 +185,11 @@ | |||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1748352827, | ||||
|         "narHash": "sha256-sNUUP6qxGkK9hXgJ+p362dtWLgnIWwOCmiq72LAWtYo=", | ||||
|         "lastModified": 1749012745, | ||||
|         "narHash": "sha256-Cax/k9ZRPKqTz18vZtmqGR45pHRXM+sDvEVd4V/3NrU=", | ||||
|         "owner": "LnL7", | ||||
|         "repo": "nix-darwin", | ||||
|         "rev": "44a7d0e687a87b73facfe94fba78d323a6686a90", | ||||
|         "rev": "fa6120c32f10bd2aac9e8c9a6e71528a9d9d823b", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -153,17 +221,17 @@ | |||
|     }, | ||||
|     "nix-vscode-extensions": { | ||||
|       "inputs": { | ||||
|         "flake-utils": "flake-utils", | ||||
|         "flake-utils": "flake-utils_2", | ||||
|         "nixpkgs": [ | ||||
|           "nixpkgs" | ||||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1748397853, | ||||
|         "narHash": "sha256-tudGoP5caIJ5TzkV6wnsmUk7Spx21oWMKpkmPbjRNZc=", | ||||
|         "lastModified": 1749002682, | ||||
|         "narHash": "sha256-v9K6RyPF/+4r/YJhjEH8y07VWE6Vj7Vl88E/K5m/uJ0=", | ||||
|         "owner": "nix-community", | ||||
|         "repo": "nix-vscode-extensions", | ||||
|         "rev": "ac4fc8eb9a1ee5eeb3c0a30f57652e4c5428d3a5", | ||||
|         "rev": "46eb9c16d8ccfedf8bc648be03f9b2993fe3c994", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -174,11 +242,11 @@ | |||
|     }, | ||||
|     "nixos-hardware": { | ||||
|       "locked": { | ||||
|         "lastModified": 1747900541, | ||||
|         "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", | ||||
|         "lastModified": 1749056381, | ||||
|         "narHash": "sha256-QITcurR19KZlrCngBoCjsFF2BdYsiCG4UqmlrVcLb8Q=", | ||||
|         "owner": "NixOS", | ||||
|         "repo": "nixos-hardware", | ||||
|         "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", | ||||
|         "rev": "029bd66faa180e11262dd1bc2732254c33415f52", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -190,11 +258,11 @@ | |||
|     }, | ||||
|     "nixpkgs": { | ||||
|       "locked": { | ||||
|         "lastModified": 1748370509, | ||||
|         "narHash": "sha256-QlL8slIgc16W5UaI3w7xHQEP+Qmv/6vSNTpoZrrSlbk=", | ||||
|         "lastModified": 1748929857, | ||||
|         "narHash": "sha256-lcZQ8RhsmhsK8u7LIFsJhsLh/pzR9yZ8yqpTzyGdj+Q=", | ||||
|         "owner": "nixos", | ||||
|         "repo": "nixpkgs", | ||||
|         "rev": "4faa5f5321320e49a78ae7848582f684d64783e9", | ||||
|         "rev": "c2a03962b8e24e669fb37b7df10e7c79531ff1a4", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -211,6 +279,7 @@ | |||
|         "flake-compat": "flake-compat", | ||||
|         "home-manager": "home-manager", | ||||
|         "impermanence": "impermanence", | ||||
|         "lix-module": "lix-module", | ||||
|         "nix-darwin": "nix-darwin", | ||||
|         "nix-syncthing": "nix-syncthing", | ||||
|         "nix-vscode-extensions": "nix-vscode-extensions", | ||||
|  | @ -223,11 +292,11 @@ | |||
|     "secrets": { | ||||
|       "flake": false, | ||||
|       "locked": { | ||||
|         "lastModified": 1743538790, | ||||
|         "narHash": "sha256-QXmvyxfAhpifxAWcYTvuGfzv9I+9gHw0bq4WYtGEB9A=", | ||||
|         "lastModified": 1749061163, | ||||
|         "narHash": "sha256-WflcbitH7ErNZBFqZCdy1ODUqKF51xbu2zYfqA35+1M=", | ||||
|         "ref": "refs/heads/main", | ||||
|         "rev": "3d63dff77f8eda1667e3586169642cf256c4aa34", | ||||
|         "revCount": 17, | ||||
|         "rev": "1c5c059c0c7b6ce691993262fe10a2b63e1c31ba", | ||||
|         "revCount": 19, | ||||
|         "type": "git", | ||||
|         "url": "ssh://git@git.jan-leila.com/jan-leila/nix-config-secrets.git" | ||||
|       }, | ||||
|  | @ -270,6 +339,21 @@ | |||
|         "repo": "default", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "systems_2": { | ||||
|       "locked": { | ||||
|         "lastModified": 1681028828, | ||||
|         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", | ||||
|         "owner": "nix-systems", | ||||
|         "repo": "default", | ||||
|         "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "nix-systems", | ||||
|         "repo": "default", | ||||
|         "type": "github" | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "root": "root", | ||||
|  |  | |||
							
								
								
									
										12
									
								
								flake.nix
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								flake.nix
									
										
									
									
									
								
							|  | @ -5,10 +5,10 @@ | |||
|     # base packages | ||||
|     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; | ||||
| 
 | ||||
|     # lix-module = { | ||||
|     #   url = "https://git.lix.systems/lix-project/nixos-module/archive/stable.tar.gz"; | ||||
|     #   inputs.nixpkgs.follows = "nixpkgs"; | ||||
|     # }; | ||||
|     lix-module = { | ||||
|       url = "https://git.lix.systems/lix-project/nixos-module/archive/2.93.0.tar.gz"; | ||||
|       inputs.nixpkgs.follows = "nixpkgs"; | ||||
|     }; | ||||
| 
 | ||||
|     # secret encryption | ||||
|     sops-nix = { | ||||
|  | @ -131,11 +131,11 @@ | |||
|       systemsHomes | ||||
|       // homeSystems; | ||||
|   in { | ||||
|     formatter = forEachPkgs (pkgs: pkgs.alejandra); | ||||
|     formatter = forEachPkgs (system: pkgs: pkgs.alejandra); | ||||
| 
 | ||||
|     # templates = import ./templates; | ||||
| 
 | ||||
|     devShells = forEachPkgs (pkgs: { | ||||
|     devShells = forEachPkgs (system: pkgs: { | ||||
|       default = pkgs.mkShell { | ||||
|         packages = with pkgs; [ | ||||
|           # for version controlling this repo | ||||
|  |  | |||
|  | @ -1,4 +1,17 @@ | |||
| # this folder is for custom derivations | ||||
| {...}: { | ||||
|   # package = pkgs.callPackage ./package.nix {}; | ||||
| {pkgs, ...}: { | ||||
|   nixpkgs.overlays = [ | ||||
|     (final: prev: { | ||||
|       webtoon-dl = | ||||
|         pkgs.callPackage | ||||
|         ./webtoon-dl.nix | ||||
|         {}; | ||||
|     }) | ||||
|     # TODO: this package always needs to be called with the --in-process-gpu flag for some reason, can we automate that? | ||||
|     (final: prev: { | ||||
|       prostudiomasters = | ||||
|         pkgs.callPackage | ||||
|         ./prostudiomasters.nix | ||||
|         {}; | ||||
|     }) | ||||
|   ]; | ||||
| } | ||||
|  |  | |||
|  | @ -7,8 +7,7 @@ | |||
| }: let | ||||
|   ai-tooling-enabled = config.user.continue.enable && osConfig.host.ai.enable; | ||||
| in { | ||||
|   options = { | ||||
|     user.continue = { | ||||
|   options.user.continue = { | ||||
|     enable = lib.mkEnableOption "should continue be enabled on this machine"; | ||||
|     docs = lib.mkOption { | ||||
|       type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { | ||||
|  | @ -43,7 +42,6 @@ in { | |||
|       }; | ||||
|     }; | ||||
|   }; | ||||
|   }; | ||||
| 
 | ||||
|   config = | ||||
|     lib.mkIf ai-tooling-enabled | ||||
|  |  | |||
|  | @ -1,9 +1,12 @@ | |||
| # this folder container modules that are for home manager only | ||||
| {...}: { | ||||
|   imports = [ | ||||
|     ./sops.nix | ||||
|     ./user.nix | ||||
|     ./flipperzero.nix | ||||
|     ./i18n.nix | ||||
|     ./openssh.nix | ||||
|     ./continue.nix | ||||
|     ./programs | ||||
|   ]; | ||||
| } | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ | |||
|   ... | ||||
| }: { | ||||
|   options.programs.openssh = { | ||||
|     enable = lib.mkEnableOption "should we enable openssh"; | ||||
|     authorizedKeys = lib.mkOption { | ||||
|       type = lib.types.listOf lib.types.str; | ||||
|       default = []; | ||||
|  | @ -37,7 +38,8 @@ | |||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkMerge [ | ||||
|   config = lib.mkIf config.programs.openssh.enable ( | ||||
|     lib.mkMerge [ | ||||
|       ( | ||||
|         lib.mkIf ((builtins.length config.programs.openssh.hostKeys) != 0) { | ||||
|           services.ssh-agent.enable = true; | ||||
|  | @ -95,5 +97,6 @@ | |||
|           ); | ||||
|         }; | ||||
|       }) | ||||
|   ]; | ||||
|     ] | ||||
|   ); | ||||
| } | ||||
|  |  | |||
							
								
								
									
										29
									
								
								modules/home-manager-modules/programs/anki.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								modules/home-manager-modules/programs/anki.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.anki = { | ||||
|     enable = lib.mkEnableOption "enable anki"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.anki.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         anki | ||||
|       ]; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             "${config.xdg.dataHome}/Anki2/" | ||||
|           ]; | ||||
|           allowOther = true; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										29
									
								
								modules/home-manager-modules/programs/bitwarden.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								modules/home-manager-modules/programs/bitwarden.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.bitwarden = { | ||||
|     enable = lib.mkEnableOption "enable bitwarden"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.bitwarden.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         bitwarden | ||||
|       ]; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             "${config.xdg.configHome}/Bitwarden" | ||||
|           ]; | ||||
|           allowOther = true; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										29
									
								
								modules/home-manager-modules/programs/bruno.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								modules/home-manager-modules/programs/bruno.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.bruno = { | ||||
|     enable = lib.mkEnableOption "enable bruno"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.bruno.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         bruno | ||||
|       ]; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             "${config.xdg.configHome}/bruno/" | ||||
|           ]; | ||||
|           allowOther = true; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										29
									
								
								modules/home-manager-modules/programs/calibre.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								modules/home-manager-modules/programs/calibre.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.calibre = { | ||||
|     enable = lib.mkEnableOption "enable calibre"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.calibre.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         calibre | ||||
|       ]; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             "${config.xdg.configHome}/calibre" | ||||
|           ]; | ||||
|           allowOther = true; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										29
									
								
								modules/home-manager-modules/programs/dbeaver.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								modules/home-manager-modules/programs/dbeaver.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.dbeaver-bin = { | ||||
|     enable = lib.mkEnableOption "enable dbeaver"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.dbeaver-bin.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         dbeaver-bin | ||||
|       ]; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             "${config.xdg.dataHome}/DBeaverData/" | ||||
|           ]; | ||||
|           allowOther = true; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										20
									
								
								modules/home-manager-modules/programs/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/home-manager-modules/programs/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| {...}: { | ||||
|   imports = [ | ||||
|     ./firefox.nix | ||||
|     ./signal.nix | ||||
|     ./bitwarden.nix | ||||
|     ./makemkv.nix | ||||
|     ./obs.nix | ||||
|     ./anki.nix | ||||
|     ./qbittorrent.nix | ||||
|     ./discord.nix | ||||
|     ./obsidian.nix | ||||
|     ./prostudiomasters.nix | ||||
|     ./idea.nix | ||||
|     ./protonvpn.nix | ||||
|     ./calibre.nix | ||||
|     ./bruno.nix | ||||
|     ./dbeaver.nix | ||||
|     ./steam.nix | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										29
									
								
								modules/home-manager-modules/programs/discord.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								modules/home-manager-modules/programs/discord.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.discord = { | ||||
|     enable = lib.mkEnableOption "enable discord"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.discord.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         discord | ||||
|       ]; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             "${config.xdg.configHome}/discord/" | ||||
|           ]; | ||||
|           allowOther = true; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										43
									
								
								modules/home-manager-modules/programs/firefox.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								modules/home-manager-modules/programs/firefox.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: let | ||||
|   buildProfilePersistence = profile: { | ||||
|     directories = [ | ||||
|       ".mozilla/firefox/${profile}/extensions" | ||||
|     ]; | ||||
|     files = [ | ||||
|       ".mozilla/firefox/${profile}/cookies.sqlite" | ||||
|       ".mozilla/firefox/${profile}/favicons.sqlite" | ||||
|       # Permissions and ${profileName} levels for each site | ||||
|       ".mozilla/firefox/${profile}/permissions.sqlite" | ||||
|       ".mozilla/firefox/${profile}/content-prefs.sqlite" | ||||
|       # Browser history and bookmarks | ||||
|       ".mozilla/firefox/${profile}/places.sqlite" | ||||
|       # I guess this is useful? | ||||
|       # https://bugzilla.mozilla.org/show_bug.cgi?id=1511384 | ||||
|       # https://developer.mozilla.org/en-US/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria | ||||
|       ".mozilla/firefox/${profile}/storage.sqlite" | ||||
|       # Extension configuration | ||||
|       ".mozilla/firefox/${profile}/extension-settings.json" | ||||
|     ]; | ||||
|     allowOther = true; | ||||
|   }; | ||||
| in { | ||||
|   config = lib.mkIf (config.programs.firefox.enable && osConfig.host.impermanence.enable) { | ||||
|     home.persistence."/persist${config.home.homeDirectory}" = lib.mkMerge ( | ||||
|       ( | ||||
|         lib.attrsets.mapAttrsToList | ||||
|         (profile: _: buildProfilePersistence profile) | ||||
|         config.programs.firefox.profiles | ||||
|       ) | ||||
|       ++ ( | ||||
|         lib.lists.optional | ||||
|         ((builtins.length (lib.attrsets.mapAttrsToList (key: value: value) config.programs.firefox.profiles)) == 0) | ||||
|         (buildProfilePersistence "default") | ||||
|       ) | ||||
|     ); | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										33
									
								
								modules/home-manager-modules/programs/idea.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								modules/home-manager-modules/programs/idea.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.jetbrains.idea-community = { | ||||
|     enable = lib.mkEnableOption "enable idea-community"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.jetbrains.idea-community.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         jetbrains.idea-community | ||||
|       ]; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             # configuration | ||||
|             "${config.xdg.configHome}/JetBrains/" | ||||
|             # plugins | ||||
|             "${config.xdg.dataHome}/JetBrains/" | ||||
|             # System and Logs | ||||
|             "${config.xdg.cacheHome}/JetBrains/" | ||||
|           ]; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										42
									
								
								modules/home-manager-modules/programs/makemkv.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								modules/home-manager-modules/programs/makemkv.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.makemkv = { | ||||
|     enable = lib.mkEnableOption "enable makemkv"; | ||||
|     appKeyFile = lib.mkOption { | ||||
|       type = lib.types.str; | ||||
|     }; | ||||
|     destinationDir = lib.mkOption { | ||||
|       type = lib.types.str; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.makemkv.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         makemkv | ||||
|       ]; | ||||
| 
 | ||||
|       sops.templates."MakeMKV.settings.conf".content = '' | ||||
|         app_DestinationDir = "${config.programs.makemkv.destinationDir}" | ||||
|         app_DestinationType = "2" | ||||
|         app_Key = "${config.programs.makemkv.appKeyFile}" | ||||
|       ''; | ||||
| 
 | ||||
|       home.file.".MakeMKV/settings.conf".source = config.lib.file.mkOutOfStoreSymlink config.sops.templates."MakeMKV.settings.conf".path; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             ".MakeMKV" | ||||
|           ]; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										14
									
								
								modules/home-manager-modules/programs/obs.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								modules/home-manager-modules/programs/obs.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   config = lib.mkIf config.programs.obs-studio.enable (lib.mkMerge [ | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         # TODO: map impermanence for obs | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										18
									
								
								modules/home-manager-modules/programs/obsidian.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								modules/home-manager-modules/programs/obsidian.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   config = lib.mkIf config.programs.obsidian.enable (lib.mkMerge [ | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             "${config.xdg.configHome}/obsidian" | ||||
|           ]; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										28
									
								
								modules/home-manager-modules/programs/prostudiomasters.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								modules/home-manager-modules/programs/prostudiomasters.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.prostudiomasters = { | ||||
|     enable = lib.mkEnableOption "enable prostudiomasters"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.prostudiomasters.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         prostudiomasters | ||||
|       ]; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             "${config.xdg.configHome}/ProStudioMasters" | ||||
|           ]; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										29
									
								
								modules/home-manager-modules/programs/protonvpn.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								modules/home-manager-modules/programs/protonvpn.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.protonvpn-gui = { | ||||
|     enable = lib.mkEnableOption "enable protonvpn"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.protonvpn-gui.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         protonvpn-gui | ||||
|       ]; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             "${config.xdg.configHome}/protonvpn" | ||||
|             "${config.xdg.configHome}/Proton" | ||||
|           ]; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										28
									
								
								modules/home-manager-modules/programs/qbittorrent.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								modules/home-manager-modules/programs/qbittorrent.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.qbittorrent = { | ||||
|     enable = lib.mkEnableOption "enable qbittorrent"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.qbittorrent.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         qbittorrent | ||||
|       ]; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             "${config.xdg.configHome}/qBittorrent" | ||||
|           ]; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										28
									
								
								modules/home-manager-modules/programs/signal.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								modules/home-manager-modules/programs/signal.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.signal-desktop-bin = { | ||||
|     enable = lib.mkEnableOption "enable signal"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.signal-desktop-bin.enable (lib.mkMerge [ | ||||
|     { | ||||
|       home.packages = with pkgs; [ | ||||
|         signal-desktop-bin | ||||
|       ]; | ||||
|     } | ||||
|     ( | ||||
|       lib.mkIf osConfig.host.impermanence.enable { | ||||
|         home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|           directories = [ | ||||
|             "${config.xdg.configHome}/Signal" | ||||
|           ]; | ||||
|         }; | ||||
|       } | ||||
|     ) | ||||
|   ]); | ||||
| } | ||||
							
								
								
									
										37
									
								
								modules/home-manager-modules/programs/steam.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								modules/home-manager-modules/programs/steam.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.programs.steam = { | ||||
|     enable = lib.mkEnableOption "enable steam"; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.programs.steam.enable ( | ||||
|     lib.mkMerge [ | ||||
|       { | ||||
|         home.packages = with pkgs; [ | ||||
|           steam | ||||
|           steam.run | ||||
|         ]; | ||||
|       } | ||||
|       ( | ||||
|         lib.mkIf osConfig.host.impermanence.enable { | ||||
|           home.persistence."/persist${config.home.homeDirectory}" = { | ||||
|             directories = [ | ||||
|               { | ||||
|                 directory = "${config.xdg.dataHome}/Steam"; | ||||
|                 method = "symlink"; | ||||
|               } | ||||
|             ]; | ||||
|             allowOther = true; | ||||
|           }; | ||||
|         } | ||||
|       ) | ||||
|     ] | ||||
|   ); | ||||
| 
 | ||||
|   # TODO: bind impermanence config | ||||
| } | ||||
							
								
								
									
										7
									
								
								modules/home-manager-modules/sops.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								modules/home-manager-modules/sops.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| {...}: { | ||||
|   config = { | ||||
|     sops = { | ||||
|       age.keyFile = "/var/lib/sops-nix/key.txt"; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										17
									
								
								modules/home-manager-modules/user.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								modules/home-manager-modules/user.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   osConfig, | ||||
|   ... | ||||
| }: { | ||||
|   options.user = { | ||||
|     isDesktopUser = lib.mkOption { | ||||
|       type = lib.types.bool; | ||||
|       default = osConfig.host.users.${config.home.username}.isDesktopUser; | ||||
|     }; | ||||
|     isTerminalUser = lib.mkOption { | ||||
|       type = lib.types.bool; | ||||
|       default = osConfig.host.users.${config.home.username}.isTerminalUser; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -14,8 +14,8 @@ | |||
|     ./ollama.nix | ||||
|     ./ai.nix | ||||
|     ./tailscale.nix | ||||
|     ./steam.nix | ||||
|     ./server | ||||
|     ./packages | ||||
|   ]; | ||||
| 
 | ||||
|   nixpkgs.config.permittedInsecurePackages = [ | ||||
|  |  | |||
|  | @ -19,12 +19,6 @@ | |||
|           # Enable the X11 windowing system. | ||||
|           enable = true; | ||||
| 
 | ||||
|           # Enable the GNOME Desktop Environment. | ||||
|           displayManager.gdm.enable = true; | ||||
|           desktopManager = { | ||||
|             gnome.enable = true; | ||||
|           }; | ||||
| 
 | ||||
|           # Get rid of xTerm | ||||
|           desktopManager.xterm.enable = false; | ||||
|           excludePackages = with pkgs; [ | ||||
|  | @ -47,6 +41,10 @@ | |||
|           ]; | ||||
|         }; | ||||
| 
 | ||||
|         # Enable the GNOME Desktop Environment. | ||||
|         displayManager.gdm.enable = true; | ||||
|         desktopManager.gnome.enable = true; | ||||
| 
 | ||||
|         pipewire = { | ||||
|           enable = true; | ||||
|           alsa.enable = true; | ||||
|  |  | |||
|  | @ -20,6 +20,8 @@ | |||
|       disk: lib.attrsets.nameValuePair (hashDisk disk) disk | ||||
|     ) | ||||
|     config.host.storage.pool.cache; | ||||
| 
 | ||||
|   datasets = config.host.storage.pool.datasets // config.host.storage.pool.extraDatasets; | ||||
| in { | ||||
|   options.host.storage = { | ||||
|     enable = lib.mkEnableOption "are we going create zfs disks with disko on this device"; | ||||
|  | @ -48,21 +50,68 @@ in { | |||
|       }; | ||||
|     }; | ||||
|     pool = { | ||||
|       vdevs = lib.mkOption { | ||||
|         type = lib.types.listOf (lib.types.listOf lib.types.str); | ||||
|         description = "list of disks that are going to be in"; | ||||
|         default = [config.host.storage.pool.drives]; | ||||
|       mode = lib.mkOption { | ||||
|         type = lib.types.str; | ||||
|         default = "raidz2"; | ||||
|         description = "what level of redundancy should this pool have"; | ||||
|       }; | ||||
|       # list of drives in pool that will have a boot partition put onto them | ||||
|       bootDrives = lib.mkOption { | ||||
|         type = lib.types.listOf lib.types.str; | ||||
|         description = "list of disks that are going to have a boot partition installed on them"; | ||||
|         default = lib.lists.flatten config.host.storage.pool.vdevs; | ||||
|       }; | ||||
|       # shorthand for vdevs if you only have 1 vdev | ||||
|       drives = lib.mkOption { | ||||
|         type = lib.types.listOf lib.types.str; | ||||
|         description = "list of drives that are going to be in the vdev"; | ||||
|         default = []; | ||||
|       }; | ||||
|       # list of all drives in each vdev | ||||
|       vdevs = lib.mkOption { | ||||
|         type = lib.types.listOf (lib.types.listOf lib.types.str); | ||||
|         description = "list of disks that are going to be in"; | ||||
|         default = [config.host.storage.pool.drives]; | ||||
|       }; | ||||
|       # list of cache drives for pool | ||||
|       cache = lib.mkOption { | ||||
|         type = lib.types.listOf lib.types.str; | ||||
|         description = "list of drives that are going to be used as cache"; | ||||
|         default = []; | ||||
|       }; | ||||
|       # Default datasets that are needed to make a functioning system | ||||
|       datasets = lib.mkOption { | ||||
|         type = lib.types.attrsOf (inputs.disko.lib.subType { | ||||
|           types = {inherit (inputs.disko.lib.types) zfs_fs zfs_volume;}; | ||||
|         }); | ||||
|         default = { | ||||
|           "local" = { | ||||
|             type = "zfs_fs"; | ||||
|             options.canmount = "off"; | ||||
|           }; | ||||
|           # nix directory needs to be available pre persist and doesn't need to be snapshotted or backed up | ||||
|           "local/system/nix" = { | ||||
|             type = "zfs_fs"; | ||||
|             mountpoint = "/nix"; | ||||
|             options = { | ||||
|               atime = "off"; | ||||
|               relatime = "off"; | ||||
|               canmount = "on"; | ||||
|             }; | ||||
|           }; | ||||
|           # dataset for root that gets rolled back on every boot | ||||
|           "local/system/root" = { | ||||
|             type = "zfs_fs"; | ||||
|             mountpoint = "/"; | ||||
|             options = { | ||||
|               canmount = "on"; | ||||
|             }; | ||||
|             postCreateHook = '' | ||||
|               zfs snapshot rpool/local/system/root@blank | ||||
|             ''; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
|       extraDatasets = lib.mkOption { | ||||
|         type = lib.types.attrsOf (inputs.disko.lib.subType { | ||||
|           types = {inherit (inputs.disko.lib.types) zfs_fs zfs_volume;}; | ||||
|  | @ -121,7 +170,6 @@ in { | |||
|     disko.devices = { | ||||
|       disk = ( | ||||
|         builtins.listToAttrs ( | ||||
|           ( | ||||
|           builtins.map | ||||
|           (drive: | ||||
|             lib.attrsets.nameValuePair (drive.name) { | ||||
|  | @ -130,30 +178,8 @@ in { | |||
|               content = { | ||||
|                 type = "gpt"; | ||||
|                 partitions = { | ||||
|                     zfs = { | ||||
|                       size = "100%"; | ||||
|                       content = { | ||||
|                         type = "zfs"; | ||||
|                         pool = "rpool"; | ||||
|                       }; | ||||
|                     }; | ||||
|                   }; | ||||
|                 }; | ||||
|               }) | ||||
|             (lib.lists.flatten vdevs) | ||||
|           ) | ||||
|           ++ ( | ||||
|             builtins.map | ||||
|             (drive: | ||||
|               lib.attrsets.nameValuePair (drive.name) { | ||||
|                 type = "disk"; | ||||
|                 device = "/dev/disk/by-id/${drive.value}"; | ||||
|                 content = { | ||||
|                   type = "gpt"; | ||||
|                   partitions = { | ||||
|                     # We are having to boot off of the nvm cache drive because I cant figure out how to boot via the HBA | ||||
|                     ESP = { | ||||
|                       # 2G here because its not much relative to how much storage we have for caching | ||||
|                   ESP = lib.mkIf (builtins.elem drive.value config.host.storage.pool.bootDrives) { | ||||
|                     # The 2GB here for the boot partition might be a bit overkill we probably only need like 1/4th of that but storage is cheap | ||||
|                     size = "2G"; | ||||
|                     type = "EF00"; | ||||
|                     content = { | ||||
|  | @ -173,7 +199,8 @@ in { | |||
|                 }; | ||||
|               }; | ||||
|             }) | ||||
|             cache | ||||
|           ( | ||||
|             (lib.lists.flatten vdevs) ++ cache | ||||
|           ) | ||||
|         ) | ||||
|       ); | ||||
|  | @ -185,7 +212,7 @@ in { | |||
|               type = "topology"; | ||||
|               vdev = ( | ||||
|                 builtins.map (disks: { | ||||
|                   mode = "raidz2"; | ||||
|                   mode = config.host.storage.pool.mode; | ||||
|                   members = | ||||
|                     builtins.map (disk: disk.name) disks; | ||||
|                 }) | ||||
|  | @ -222,13 +249,15 @@ in { | |||
|             ); | ||||
| 
 | ||||
|           datasets = lib.mkMerge [ | ||||
|             (lib.attrsets.mapAttrs (name: value: { | ||||
|             ( | ||||
|               lib.attrsets.mapAttrs (name: value: { | ||||
|                 type = value.type; | ||||
|                 options = value.options; | ||||
|                 mountpoint = value.mountpoint; | ||||
|                 postCreateHook = value.postCreateHook; | ||||
|               }) | ||||
|               config.host.storage.pool.extraDatasets) | ||||
|               datasets | ||||
|             ) | ||||
|           ]; | ||||
|         }; | ||||
|       }; | ||||
|  |  | |||
|  | @ -4,5 +4,6 @@ | |||
|     ./flipperzero.nix | ||||
|     ./i18n.nix | ||||
|     ./openssh.nix | ||||
|     ./steam.nix | ||||
|   ]; | ||||
| } | ||||
|  |  | |||
							
								
								
									
										18
									
								
								modules/nixos-modules/home-manager/steam.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								modules/nixos-modules/home-manager/steam.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   ... | ||||
| }: let | ||||
|   setupSteam = | ||||
|     lib.lists.any | ||||
|     (value: value) | ||||
|     (lib.attrsets.mapAttrsToList (name: value: value.programs.steam.enable) config.home-manager.users); | ||||
| in { | ||||
|   config = lib.mkIf setupSteam { | ||||
|     programs.steam = { | ||||
|       enable = true; | ||||
|       # TODO: figure out how to not install steam here | ||||
|       # package = lib.mkDefault pkgs.emptyFile; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -38,33 +38,6 @@ | |||
|         }; | ||||
| 
 | ||||
|         host.storage.pool.extraDatasets = { | ||||
|           # local datasets are for data that should be considered ephemeral | ||||
|           "local" = { | ||||
|             type = "zfs_fs"; | ||||
|             options.canmount = "off"; | ||||
|           }; | ||||
|           # nix directory needs to be available pre persist and doesn't need to be snapshotted or backed up | ||||
|           "local/system/nix" = { | ||||
|             type = "zfs_fs"; | ||||
|             mountpoint = "/nix"; | ||||
|             options = { | ||||
|               atime = "off"; | ||||
|               relatime = "off"; | ||||
|               canmount = "on"; | ||||
|             }; | ||||
|           }; | ||||
|           # dataset for root that gets rolled back on every boot | ||||
|           "local/system/root" = { | ||||
|             type = "zfs_fs"; | ||||
|             mountpoint = "/"; | ||||
|             options = { | ||||
|               canmount = "on"; | ||||
|             }; | ||||
|             postCreateHook = '' | ||||
|               zfs snapshot rpool/local/system/root@blank | ||||
|             ''; | ||||
|           }; | ||||
| 
 | ||||
|           # persist datasets are datasets that contain information that we would like to keep around | ||||
|           "persist" = { | ||||
|             type = "zfs_fs"; | ||||
|  |  | |||
|  | @ -1,17 +0,0 @@ | |||
| {pkgs, ...}: { | ||||
|   nixpkgs.overlays = [ | ||||
|     (final: prev: { | ||||
|       webtoon-dl = | ||||
|         pkgs.callPackage | ||||
|         ./webtoon-dl.nix | ||||
|         {}; | ||||
|     }) | ||||
|     # TODO: this package always needs to be called with the --in-process-gpu flag for some reason, can we automate that? | ||||
|     (final: prev: { | ||||
|       prostudiomasters = | ||||
|         pkgs.callPackage | ||||
|         ./prostudiomasters.nix | ||||
|         {}; | ||||
|     }) | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										9
									
								
								modules/nixos-modules/steam.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								modules/nixos-modules/steam.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| {...}: { | ||||
|   programs = { | ||||
|     steam = { | ||||
|       remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play | ||||
|       dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server | ||||
|       localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -1,6 +1,5 @@ | |||
| {...}: { | ||||
|   nix = { | ||||
|     settings.download-buffer-size = 524288000; | ||||
|     gc = { | ||||
|       automatic = true; | ||||
|       dates = "weekly"; | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| Subproject commit 3d63dff77f8eda1667e3586169642cf256c4aa34 | ||||
| Subproject commit 1c5c059c0c7b6ce691993262fe10a2b63e1c31ba | ||||
|  | @ -10,7 +10,7 @@ | |||
|   nix-syncthing = inputs.nix-syncthing; | ||||
|   disko = inputs.disko; | ||||
|   impermanence = inputs.impermanence; | ||||
|   # lix-module = inputs.lix-module; | ||||
|   lix-module = inputs.lix-module; | ||||
| 
 | ||||
|   systems = [ | ||||
|     "aarch64-darwin" | ||||
|  | @ -53,7 +53,7 @@ | |||
|       ../modules/system-modules | ||||
|     ]; | ||||
| in { | ||||
|   forEachPkgs = lambda: forEachSystem (system: lambda (pkgsFor system)); | ||||
|   forEachPkgs = lambda: forEachSystem (system: lambda system (pkgsFor system)); | ||||
| 
 | ||||
|   mkUnless = condition: yes: (lib.mkIf (!condition) yes); | ||||
|   mkIfElse = condition: yes: no: | ||||
|  | @ -83,7 +83,7 @@ in { | |||
|           impermanence.nixosModules.impermanence | ||||
|           home-manager.nixosModules.home-manager | ||||
|           disko.nixosModules.disko | ||||
|           # lix-module.nixosModules.default | ||||
|           lix-module.nixosModules.default | ||||
|           ../modules/nixos-modules | ||||
|           ../configurations/nixos/${host} | ||||
|         ]; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue