forked from jan-leila/nix-config
		
	Compare commits
	
		
			No commits in common. "main" and "469ba567" have entirely different histories.
		
	
	
		
	
		
					 263 changed files with 1408 additions and 13560 deletions
				
			
		
							
								
								
									
										1
									
								
								.envrc
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								.envrc
									
										
									
									
									
								
							|  | @ -1 +0,0 @@ | ||||||
| use flake |  | ||||||
|  | @ -1,2 +0,0 @@ | ||||||
| [core] |  | ||||||
| 	hooksPath = .hooks |  | ||||||
							
								
								
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -1,4 +1 @@ | ||||||
| result | result | ||||||
| .direnv |  | ||||||
| .vscode/* |  | ||||||
| !.vscode/settings.json |  | ||||||
							
								
								
									
										3
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
								
							|  | @ -1,3 +0,0 @@ | ||||||
| [submodule "secrets"] |  | ||||||
| 	path = secrets |  | ||||||
| 	url = git@git.jan-leila.com:jan-leila/nix-config-secrets.git |  | ||||||
|  | @ -1,6 +0,0 @@ | ||||||
| #!/usr/bin/env nix-shell |  | ||||||
| #! nix-shell -i bash ../shell.nix |  | ||||||
| 
 |  | ||||||
| echo "restoring stashed changes" |  | ||||||
| 
 |  | ||||||
| git stash pop -q |  | ||||||
|  | @ -1,22 +0,0 @@ | ||||||
| #!/usr/bin/env nix-shell |  | ||||||
| #! nix-shell -i bash ../shell.nix |  | ||||||
| 
 |  | ||||||
| echo "stashing all uncommitted changes" |  | ||||||
| git stash -q --keep-index |  | ||||||
| 
 |  | ||||||
| echo "checking flakes all compile" |  | ||||||
| nix flake check |  | ||||||
| 
 |  | ||||||
| if [ ! $? -eq 0 ]; then |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| echo "running linter" |  | ||||||
| alejandra -q . |  | ||||||
| 
 |  | ||||||
| RESULT=$? |  | ||||||
| 
 |  | ||||||
| echo "adding lint changes to commit" |  | ||||||
| git add -u |  | ||||||
| 
 |  | ||||||
| exit $RESULT |  | ||||||
							
								
								
									
										14
									
								
								.sops.yaml
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								.sops.yaml
									
										
									
									
									
								
							|  | @ -1,19 +1,7 @@ | ||||||
| keys: | keys: | ||||||
|   - &leyla age15ga3jmn2mqtlgwwtdcdh6l5vdx6um9aftrkexxfyue6xvcqapqusle75jh |   - &leyla age15ga3jmn2mqtlgwwtdcdh6l5vdx6um9aftrkexxfyue6xvcqapqusle75jh | ||||||
| creation_rules: | creation_rules: | ||||||
|   - path_regex: secrets/user-passwords.yaml$ |   - path_regex: secrets/secrets.yaml$ | ||||||
|     key_groups: |  | ||||||
|       - age: |  | ||||||
|         - *leyla |  | ||||||
|   - path_regex: secrets/defiant-services.yaml$ |  | ||||||
|     key_groups: |  | ||||||
|       - age: |  | ||||||
|         - *leyla |  | ||||||
|   - path_regex: secrets/vpn-keys.yaml$ |  | ||||||
|     key_groups: |  | ||||||
|       - age: |  | ||||||
|         - *leyla |  | ||||||
|   - path_regex: secrets/application-keys.yaml$ |  | ||||||
|     key_groups: |     key_groups: | ||||||
|       - age: |       - age: | ||||||
|         - *leyla |         - *leyla | ||||||
							
								
								
									
										21
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
								
							|  | @ -1,21 +0,0 @@ | ||||||
| { |  | ||||||
|     "cSpell.words": [ |  | ||||||
|         "attrsets", |  | ||||||
|         "bitwarden", |  | ||||||
|         "forgejo", |  | ||||||
|         "gids", |  | ||||||
|         "headscale", |  | ||||||
|         "hesperium", |  | ||||||
|         "jellyfin", |  | ||||||
|         "macvlan", |  | ||||||
|         "nextcloud", |  | ||||||
|         "nixos", |  | ||||||
|         "nixpkgs", |  | ||||||
|         "pihole", |  | ||||||
|         "pkgs", |  | ||||||
|         "rpool", |  | ||||||
|         "searx", |  | ||||||
|         "ublock", |  | ||||||
|         "uids" |  | ||||||
|     ] |  | ||||||
| } |  | ||||||
							
								
								
									
										107
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										107
									
								
								README.md
									
										
									
									
									
								
							|  | @ -1,81 +1,66 @@ | ||||||
| # nix-config |  | ||||||
| 
 |  | ||||||
| https://git.jan-leila.com/jan-leila/nix-config |  | ||||||
| 
 |  | ||||||
| nix multi user, multi system, configuration with `sops` secret management, `home-manager`, and `nixos-anywhere` setup via `disko` with `zfs` + `impermanence` |  | ||||||
| 
 |  | ||||||
| # Hosts | # Hosts | ||||||
| 
 | 
 | ||||||
| ## Host Map | ## Host Map | ||||||
| |   Hostname  |      Device Description    |   Primary User   |    Role   | Provisioned | Using Nix | | |   Hostname  |      Device Description    |   Primary User   |    Role   | | ||||||
| | :---------: | :------------------------: | :--------------: | :-------: | :---------: | :-------: | | | :---------: | :------------------------: | :--------------: | :-------: | | ||||||
| |  `twilight` |      Desktop Computer      |      Leyla       |  Desktop  |     ✅      |    ✅     | | |  `twilight` |      Desktop Computer      |      Leyla       |  Desktop  | | ||||||
| |  `horizon`  |  13 inch Framework Laptop  |      Leyla       |  Laptop   |     ✅      |    ✅     | | |  `horizon`  |  13 inch Framework Laptop  |      Leyla       |  Laptop   | | ||||||
| |  `defiant`  |         NAS Server         |      Leyla       |   Server  |     ✅      |    ✅     | | |  `defiant`  |         NAS Server         |      Leyla       |  Service  | | ||||||
| | `hesperium` |             Mac            |      ?????       |    Mac    |     ❌      |    ❌     | | |  `emergent` |      Desktop Computer      |       Eve        |  Laptop   | | ||||||
| |  `emergent` |      Desktop Computer      |       Eve        |  Desktop  |     ✅      |    ✅     | | | `threshold` |           Laptop           |       Eve        |  Desktop  | | ||||||
| | `threshold` |           Laptop           |       Eve        |  Laptop   |     ❌      |    ❌     | |  | ||||||
| |  `wolfram`  |          Steam Deck        |      House       |  Handheld |     ✅      |    ❌     | |  | ||||||
| |   `ceder`   |          A5 Tablet         |      Leyla       |   Tablet  |     ✅      |    ❌     | |  | ||||||
| |   `skate`   |          A6 Tablet         |      Leyla       |   Tablet  |     ❌      |    ❌     | |  | ||||||
| |   `shale`   |          A6 Tablet         |       Eve        |   Tablet  |     ✅      |    ❌     | |  | ||||||
| |   `coven`   |           Pixel 8          |      Leyla       |  Android  |     ✅      |    ❌     | |  | ||||||
| 
 | 
 | ||||||
| # Tooling | 
 | ||||||
| ## Rebuilding | ### Rebuild current machine to match target host: | ||||||
|  | `sudo nixos-rebuild switch --flake .#hostname` | ||||||
|  | 
 | ||||||
|  | ### Rebuild current machine maintaining current target | ||||||
| `./rebuild.sh` | `./rebuild.sh` | ||||||
| 
 | 
 | ||||||
| ## Updating | # New machine setup | ||||||
| `nix flake update` | keys for decrypting password secrets for each users located at `/var/lib/sops-nix/key.txt` | ||||||
|  | 
 | ||||||
|  | updating passwords: `sops secrets/secrets.yaml` | ||||||
| 
 | 
 | ||||||
| ## New host setup |  | ||||||
| `./install.sh --target 192.168.1.130 --flake hostname` | `./install.sh --target 192.168.1.130 --flake hostname` | ||||||
| 
 | 
 | ||||||
| ## Updating Secrets | > how the current config was set up https://www.youtube.com/watch?v=G5f6GC7SnhU | ||||||
| `sops secrets/secrets_file_here.yaml` |  | ||||||
| 
 | 
 | ||||||
| ## Inspecting a configuration | > something about ssh keys for remotes | ||||||
| `nix-inspect -p .` |  | ||||||
| 
 | 
 | ||||||
| # Notes: | # Notes: | ||||||
|  | - Look into this for fixing nixos-anywhere `https://github.com/lucidph3nx/nixos-config/tree/main` | ||||||
|  | - Look into this for rotating sops keys `https://technotim.live/posts/rotate-sops-encryption-keys/` | ||||||
|  | - Look into this for openssh known configurations https://search.nixos.org/options?channel=unstable&from=0&size=15&sort=alpha_asc&type=packages&query=services.openssh | ||||||
|  | - Look into this for flake templates https://nix.dev/manual/nix/2.22/command-ref/new-cli/nix3-flake-init | ||||||
|  | - Look into this for headscale https://carlosvaz.com/posts/setting-up-headscale-on-nixos/ | ||||||
| 
 | 
 | ||||||
| ## Research topics | # Updating | ||||||
| - Look into this for auto rotating sops keys `https://technotim.live/posts/rotate-sops-encryption-keys/` | `nix flake update` | ||||||
| - Look into this for npins https://jade.fyi/blog/pinning-nixos-with-npins/ |  | ||||||
| - https://nixos-and-flakes.thiscute.world/ |  | ||||||
| 
 | 
 | ||||||
| # Tasks: | # Tasks: | ||||||
| 
 | 
 | ||||||
| ## Tech Debt | ## Tech Debt | ||||||
| - monitor configuration in `~/.config/monitors.xml` should be sym linked to `/run/gdm/.config/monitors.xml` (https://www.reddit.com/r/NixOS/comments/u09cz9/home_manager_create_my_own_symlinks_automatically/) | - allowUnfree should be enabled user side not host side (this isn't enabled at all right now for some reason???) | ||||||
| - nfs export should be backed by the same values for server and client | - Move configs for pipe mouse, open rgb, and via keyboard to hardware config and install users side from those configs | ||||||
|  | - have nfs binds and exports defined by same code | ||||||
|  | - move services from defiant into own flake | ||||||
|  | - made base domain in nas services configurable | ||||||
|  | - vscode extensions should be in own flake (make sure to add the nixpkgs.overlays in it too) | ||||||
| ## New Features | ## New Features | ||||||
| - crab-hole | - GNOME default monitors per hardware configuration? | ||||||
| - figure out why syncthing and jellyfins permissions don't propagate downwards |  | ||||||
| - figure out steam vr things? |  | ||||||
| - auto turn off on power loss - nut |  | ||||||
| - zfs email after scrubbing # TODO: test this |  | ||||||
| - SMART test with email results |  | ||||||
| - samba mounts |  | ||||||
| - offline access for nfs mounts (overlay with rsync might be a good option here? https://www.spinics.net/lists/linux-unionfs/msg07105.html note about nfs4 and overlay fs) | - offline access for nfs mounts (overlay with rsync might be a good option here? https://www.spinics.net/lists/linux-unionfs/msg07105.html note about nfs4 and overlay fs) | ||||||
| - Create Tor guard/relay server | - Flake templates | ||||||
| - migrate away from flakes and move to npins | - Docker parity with existing NAS on defiant | ||||||
| - whisper | - NFS on defiant | ||||||
| - zfs encryption FIDO2 2fa (look into shavee) | - firefox declarative??? | ||||||
| - Secure Boot - https://github.com/nix-community/lanzaboote | - figure out steam vr things? | ||||||
|  | - Open GL? | ||||||
|  | - util functions | ||||||
|  | - openssh known hosts | ||||||
|  | - limit boot configurations to 2 on defiant | ||||||
| - rotate sops encryption keys periodically (and somehow sync between devices?) | - rotate sops encryption keys periodically (and somehow sync between devices?) | ||||||
| - wake on LAN for updates | - zfs email after scrubbing | ||||||
| - remote distributed builds - https://nix.dev/tutorials/nixos/distributed-builds-setup.html | - headscale server | ||||||
| - ISO target that contains authorized keys for nixos-anywhere https://github.com/diegofariasm/yggdrasil/blob/4acc43ebc7bcbf2e41376d14268e382007e94d78/hosts/bootstrap/default.nix | - mastodon server | ||||||
| - panoramax instance | - tail scale clients | ||||||
| - mastodon instance | - wake on LAN | ||||||
| - rework the reverse_proxy.nix file so that it is a normally named service. Then also change it so that we can hook into it with both a base domain and a subdomain to make migrating to vpn accessible services easier |  | ||||||
| - move searx, home-assistant, actual, jellyfin, paperless, and immich to only be accessible via vpn |  | ||||||
| - make radarr, sonarr, and bazarr accessible over vpn |  | ||||||
| - create some sort of service that allows uploading files to jellyfin |  | ||||||
| 	- auto sort files into where they should go with some combination of filebot cli and picard cli |  | ||||||
| - graphana accessible though tailscale |  | ||||||
| - fix panoramax package |  | ||||||
| - actual instance |  | ||||||
| - intergrade radarr, sonarr, and bazarr |  | ||||||
| - claude code MCP servers should bundle node with them so they work in all environments |  | ||||||
|  | @ -1,30 +0,0 @@ | ||||||
| #!/usr/bin/env bash |  | ||||||
| 
 |  | ||||||
| while [ $# -gt 0 ]; do |  | ||||||
|   case "$1" in |  | ||||||
|     --flake*|-f*) |  | ||||||
|       if [[ "$1" != *=* ]]; then shift; fi |  | ||||||
|       flake="${1#*=}" |  | ||||||
|       ;; |  | ||||||
|     # --user*|-u*) |  | ||||||
|     #   if [[ "$1" != *=* ]]; then shift; fi |  | ||||||
|     #   user="${1#*=}" |  | ||||||
|     #   ;; |  | ||||||
|     --help|-h) |  | ||||||
|       echo "--help -h: print this message" |  | ||||||
|       echo "--flake -f: set the flake to build an installer for" |  | ||||||
|     #   echo "--user -u: set the user to install flake as on the target system" |  | ||||||
|       exit 0 |  | ||||||
|       ;; |  | ||||||
|     *) |  | ||||||
|       echo "Error: Invalid argument $1" |  | ||||||
|       exit 1 |  | ||||||
|       ;; |  | ||||||
|   esac |  | ||||||
|   shift |  | ||||||
| done |  | ||||||
| 
 |  | ||||||
| flake=${flake:-"basic"} |  | ||||||
| user=${user:-$USER} |  | ||||||
| 
 |  | ||||||
| nix build .#installerConfigurations.$flake.config.system.build.isoImage |  | ||||||
|  | @ -1,16 +0,0 @@ | ||||||
| {...}: { |  | ||||||
|   host = { |  | ||||||
|     users = { |  | ||||||
|       leyla = { |  | ||||||
|         isDesktopUser = true; |  | ||||||
|         isTerminalUser = true; |  | ||||||
|         isPrincipleUser = true; |  | ||||||
|       }; |  | ||||||
|       eve.isNormalUser = false; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   system.stateVersion = 5; |  | ||||||
| 
 |  | ||||||
|   nixpkgs.hostPlatform = "aarch64-darwin"; |  | ||||||
| } |  | ||||||
|  | @ -1,5 +0,0 @@ | ||||||
| {...}: { |  | ||||||
|   imports = [ |  | ||||||
|     ./configuration.nix |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,13 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   osConfig, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   users = config.host.users; |  | ||||||
| in { |  | ||||||
|   leyla = lib.mkIf users.leyla.isNormalUser (import ./leyla); |  | ||||||
|   eve = lib.mkIf users.eve.isNormalUser (import ./eve); |  | ||||||
|   ivy = lib.mkIf users.ivy.isNormalUser (import ./ivy); |  | ||||||
|   git = lib.mkIf (osConfig.services.forgejo.enable or false) (import ./git); |  | ||||||
| } |  | ||||||
|  | @ -1,56 +0,0 @@ | ||||||
| {osConfig, ...}: let |  | ||||||
|   userConfig = osConfig.host.users.eve; |  | ||||||
| in { |  | ||||||
|   imports = [ |  | ||||||
|     ./packages.nix |  | ||||||
|     ./gnomeconf.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   home = { |  | ||||||
|     username = userConfig.name; |  | ||||||
|     homeDirectory = osConfig.users.users.eve.home; |  | ||||||
| 
 |  | ||||||
|     # This value determines the Home Manager release that your configuration is |  | ||||||
|     # compatible with. This helps avoid breakage when a new Home Manager release |  | ||||||
|     # introduces backwards incompatible changes. |  | ||||||
|     # |  | ||||||
|     # You should not change this value, even if you update Home Manager. If you do |  | ||||||
|     # want to update the value, then make sure to first check the Home Manager |  | ||||||
|     # release notes. |  | ||||||
|     stateVersion = "23.11"; # Please read the comment before changing. |  | ||||||
| 
 |  | ||||||
|     # Home Manager is pretty good at managing dotfiles. The primary way to manage |  | ||||||
|     # plain files is through 'home.file'. |  | ||||||
|     file = { |  | ||||||
|       # # Building this configuration will create a copy of 'dotfiles/screenrc' in |  | ||||||
|       # # the Nix store. Activating the configuration will then make '~/.screenrc' a |  | ||||||
|       # # symlink to the Nix store copy. |  | ||||||
|       # ".screenrc".source = dotfiles/screenrc; |  | ||||||
| 
 |  | ||||||
|       # # You can also set the file content immediately. |  | ||||||
|       # ".gradle/gradle.properties".text = '' |  | ||||||
|       #   org.gradle.console=verbose |  | ||||||
|       #   org.gradle.daemon.idletimeout=3600000 |  | ||||||
|       # ''; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Home Manager can also manage your environment variables through |  | ||||||
|     # 'home.sessionVariables'. If you don't want to manage your shell through Home |  | ||||||
|     # Manager then you have to manually source 'hm-session-vars.sh' located at |  | ||||||
|     # either |  | ||||||
|     # |  | ||||||
|     #  ~/.nix-profile/etc/profile.d/hm-session-vars.sh |  | ||||||
|     # |  | ||||||
|     # or |  | ||||||
|     # |  | ||||||
|     #  ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh |  | ||||||
|     # |  | ||||||
|     # or |  | ||||||
|     # |  | ||||||
|     #  /etc/profiles/per-user/leyla/etc/profile.d/hm-session-vars.sh |  | ||||||
|     # |  | ||||||
|     sessionVariables = { |  | ||||||
|       # EDITOR = "emacs"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,12 +0,0 @@ | ||||||
| {pkgs, ...}: { |  | ||||||
|   config = { |  | ||||||
|     dconf = { |  | ||||||
|       enable = true; |  | ||||||
|       settings = { |  | ||||||
|         "org/gnome/shell".enabled-extensions = [ |  | ||||||
|           pkgs.gnomeExtensions.dash-to-panel.extensionUuid |  | ||||||
|         ]; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,67 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   config, |  | ||||||
|   osConfig, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   userConfig = osConfig.host.users.eve; |  | ||||||
|   hardware = osConfig.host.hardware; |  | ||||||
| in { |  | ||||||
|   config = { |  | ||||||
|     nixpkgs.config = { |  | ||||||
|       allowUnfree = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Packages that can be installed without any extra configuration |  | ||||||
|     # See https://search.nixos.org/packages for all options |  | ||||||
|     home.packages = lib.lists.optionals userConfig.isDesktopUser ( |  | ||||||
|       with pkgs; [ |  | ||||||
|         gnomeExtensions.dash-to-panel |  | ||||||
|       ] |  | ||||||
|     ); |  | ||||||
| 
 |  | ||||||
|     # Packages that need to be installed with some extra configuration |  | ||||||
|     # See https://home-manager-options.extranix.com/ for all options |  | ||||||
|     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"; |  | ||||||
|           userEmail = "evesnrobins@gmail.com"; |  | ||||||
|           extraConfig.init.defaultBranch = "main"; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         openssh = { |  | ||||||
|           enable = true; |  | ||||||
|           hostKeys = [ |  | ||||||
|             { |  | ||||||
|               type = "ed25519"; |  | ||||||
|               path = "${config.home.username}_${osConfig.networking.hostName}_ed25519"; |  | ||||||
|             } |  | ||||||
|           ]; |  | ||||||
|         }; |  | ||||||
|       }) |  | ||||||
|       (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; |  | ||||||
|         piper.enable = hardware.piperMouse.enable; |  | ||||||
|         krita.enable = true; |  | ||||||
|         ungoogled-chromium.enable = true; |  | ||||||
|       }) |  | ||||||
|     ]; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,20 +0,0 @@ | ||||||
| {osConfig, ...}: { |  | ||||||
|   home = { |  | ||||||
|     username = osConfig.users.users.git.name; |  | ||||||
|     homeDirectory = osConfig.users.users.git.home; |  | ||||||
| 
 |  | ||||||
|     # This value determines the Home Manager release that your configuration is |  | ||||||
|     # compatible with. This helps avoid breakage when a new Home Manager release |  | ||||||
|     # introduces backwards incompatible changes. |  | ||||||
|     # |  | ||||||
|     # You should not change this value, even if you update Home Manager. If you do |  | ||||||
|     # want to update the value, then make sure to first check the Home Manager |  | ||||||
|     # release notes. |  | ||||||
|     stateVersion = "23.11"; # Please read the comment before changing. |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   programs.ssh.extraConfig = '' |  | ||||||
|     AuthorizedKeysFile |  | ||||||
|     /var/lib/forgejo/.ssh/authorized_keys |  | ||||||
|   ''; |  | ||||||
| } |  | ||||||
|  | @ -1,55 +0,0 @@ | ||||||
| {osConfig, ...}: let |  | ||||||
|   userConfig = osConfig.host.users.ivy; |  | ||||||
| in { |  | ||||||
|   imports = [ |  | ||||||
|     ./packages.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   home = { |  | ||||||
|     username = userConfig.name; |  | ||||||
|     homeDirectory = osConfig.users.users.ivy.home; |  | ||||||
| 
 |  | ||||||
|     # This value determines the Home Manager release that your configuration is |  | ||||||
|     # compatible with. This helps avoid breakage when a new Home Manager release |  | ||||||
|     # introduces backwards incompatible changes. |  | ||||||
|     # |  | ||||||
|     # You should not change this value, even if you update Home Manager. If you do |  | ||||||
|     # want to update the value, then make sure to first check the Home Manager |  | ||||||
|     # release notes. |  | ||||||
|     stateVersion = "23.11"; # Please read the comment before changing. |  | ||||||
| 
 |  | ||||||
|     # Home Manager is pretty good at managing dotfiles. The primary way to manage |  | ||||||
|     # plain files is through 'home.file'. |  | ||||||
|     file = { |  | ||||||
|       # # Building this configuration will create a copy of 'dotfiles/screenrc' in |  | ||||||
|       # # the Nix store. Activating the configuration will then make '~/.screenrc' a |  | ||||||
|       # # symlink to the Nix store copy. |  | ||||||
|       # ".screenrc".source = dotfiles/screenrc; |  | ||||||
| 
 |  | ||||||
|       # # You can also set the file content immediately. |  | ||||||
|       # ".gradle/gradle.properties".text = '' |  | ||||||
|       #   org.gradle.console=verbose |  | ||||||
|       #   org.gradle.daemon.idletimeout=3600000 |  | ||||||
|       # ''; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Home Manager can also manage your environment variables through |  | ||||||
|     # 'home.sessionVariables'. If you don't want to manage your shell through Home |  | ||||||
|     # Manager then you have to manually source 'hm-session-vars.sh' located at |  | ||||||
|     # either |  | ||||||
|     # |  | ||||||
|     #  ~/.nix-profile/etc/profile.d/hm-session-vars.sh |  | ||||||
|     # |  | ||||||
|     # or |  | ||||||
|     # |  | ||||||
|     #  ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh |  | ||||||
|     # |  | ||||||
|     # or |  | ||||||
|     # |  | ||||||
|     #  /etc/profiles/per-user/ivy/etc/profile.d/hm-session-vars.sh |  | ||||||
|     # |  | ||||||
|     sessionVariables = { |  | ||||||
|       # EDITOR = "emacs"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,73 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   config, |  | ||||||
|   osConfig, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   config = { |  | ||||||
|     nixpkgs.config = { |  | ||||||
|       allowUnfree = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Programs that need to be installed with some extra configuration |  | ||||||
|     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 = "Ivy"; |  | ||||||
|         #   userEmail = "ivy@example.com"; # Update this with actual email |  | ||||||
|         #   extraConfig.init.defaultBranch = "main"; |  | ||||||
|         # }; |  | ||||||
| 
 |  | ||||||
|         openssh = { |  | ||||||
|           enable = true; |  | ||||||
|           hostKeys = [ |  | ||||||
|             { |  | ||||||
|               type = "ed25519"; |  | ||||||
|               path = "${config.home.username}_${osConfig.networking.hostName}_ed25519"; |  | ||||||
|             } |  | ||||||
|           ]; |  | ||||||
|         }; |  | ||||||
|       }) |  | ||||||
|       (lib.mkIf config.user.isDesktopUser { |  | ||||||
|         vscode = { |  | ||||||
|           enable = true; |  | ||||||
|           package = pkgs.vscodium; |  | ||||||
|           mutableExtensionsDir = false; |  | ||||||
| 
 |  | ||||||
|           profiles.default = { |  | ||||||
|             enableUpdateCheck = false; |  | ||||||
|             enableExtensionUpdateCheck = false; |  | ||||||
| 
 |  | ||||||
|             extraExtensions = { |  | ||||||
|               # Cline extension (Claude AI assistant) |  | ||||||
|               claudeDev.enable = true; |  | ||||||
|               # Auto Rename Tag |  | ||||||
|               autoRenameTag.enable = true; |  | ||||||
|               # Live Server |  | ||||||
|               liveServer.enable = true; |  | ||||||
|             }; |  | ||||||
| 
 |  | ||||||
|             extensions = let |  | ||||||
|               extension-pkgs = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; |  | ||||||
|             in ( |  | ||||||
|               with extension-pkgs.open-vsx; [ |  | ||||||
|                 streetsidesoftware.code-spell-checker |  | ||||||
|               ] |  | ||||||
|             ); |  | ||||||
|           }; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         firefox.enable = true; |  | ||||||
|         discord.enable = true; |  | ||||||
|         signal-desktop-bin.enable = true; |  | ||||||
|         claude-code.enable = true; |  | ||||||
|       }) |  | ||||||
|     ]; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,89 +0,0 @@ | ||||||
| {pkgs, ...}: { |  | ||||||
|   config = { |  | ||||||
|     gnome = { |  | ||||||
|       extraWindowControls = true; |  | ||||||
|       colorScheme = "prefer-dark"; |  | ||||||
|       clockFormat = "24h"; |  | ||||||
|       extensions = [ |  | ||||||
|         pkgs.gnomeExtensions.dash-to-dock |  | ||||||
|       ]; |  | ||||||
|       hotkeys = { |  | ||||||
|         "Open Terminal" = { |  | ||||||
|           binding = "<Super>t"; |  | ||||||
|           command = "kgx"; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     dconf = { |  | ||||||
|       enable = true; |  | ||||||
|       settings = { |  | ||||||
|         "org/gnome/shell/extensions/dash-to-dock" = { |  | ||||||
|           "dock-position" = "LEFT"; |  | ||||||
|           "intellihide-mode" = "ALL_WINDOWS"; |  | ||||||
|           "show-trash" = false; |  | ||||||
|           "require-pressure-to-show" = false; |  | ||||||
|           "show-mounts" = false; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         "org/gnome/shell" = { |  | ||||||
|           favorite-apps = ["org.gnome.Nautilus.desktop" "firefox.desktop" "codium.desktop" "steam.desktop" "org.gnome.Console.desktop"]; |  | ||||||
|           # app-picker-layout = |  | ||||||
|           #   builtins.map ( |  | ||||||
|           #     applications: |  | ||||||
|           #       lib.hm.gvariant (builtins.listToAttrs (lib.lists.imap0 (i: v: lib.attrsets.nameValuePair v (lib.hm.gvariant.mkVariant "{'position': <${i}>}")) applications)) |  | ||||||
|           #   ) [ |  | ||||||
|           #     [ |  | ||||||
|           #       "org.gnome.Nautilus.desktop" |  | ||||||
|           #       "bitwarden.desktop" |  | ||||||
|           #       "firefox.desktop" |  | ||||||
|           #       "torbrowser.desktop" |  | ||||||
|           #       "chromium-browser.desktop" |  | ||||||
|           #       "codium.desktop" |  | ||||||
|           #       "idea-community.desktop" |  | ||||||
|           #       "org.gnome.TextEditor.desktop" |  | ||||||
|           #       "dbeaver.desktop" |  | ||||||
|           #       "bruno.desktop" |  | ||||||
|           #       "anki.desktop" |  | ||||||
|           #       "obsidian.desktop" |  | ||||||
|           #       "signal-desktop.desktop" |  | ||||||
|           #       "discord.desktop" |  | ||||||
|           #       "gimp.desktop" |  | ||||||
|           #       "org.inkscape.Inkscape.desktop" |  | ||||||
|           #       "org.kde.krita.desktop" |  | ||||||
|           #       "davinci-resolve.desktop" |  | ||||||
|           #       "com.obsproject.Studio.desktop" |  | ||||||
|           #       "org.freecad.FreeCAD.desktop" |  | ||||||
|           #       "makemkv.desktop" |  | ||||||
|           #       "easytag.desktop" |  | ||||||
|           #       "transmission-gtk.desktop" |  | ||||||
|           #     ] |  | ||||||
|           #     [ |  | ||||||
|           #       "SteamVR.desktop" |  | ||||||
|           #       "Beat Saber.desktop" |  | ||||||
|           #       "Noun Town.desktop" |  | ||||||
|           #       "WEBFISHING.desktop" |  | ||||||
|           #       "Factorio.desktop" |  | ||||||
|           #     ] |  | ||||||
|           #     [ |  | ||||||
|           #       "org.gnome.Settings.desktop" |  | ||||||
|           #       "org.gnome.SystemMonitor.desktop" |  | ||||||
|           #       "org.gnome.Snapshot.desktop" |  | ||||||
|           #       "org.gnome.Usage.desktop" |  | ||||||
|           #       "org.gnome.DiskUtility.desktop" |  | ||||||
|           #       "org.gnome.Evince.desktop" |  | ||||||
|           #       "org.gnome.fonts.desktop" |  | ||||||
|           #       "noisetorch.desktop" |  | ||||||
|           #       "nvidia-settings.desktop" |  | ||||||
|           #       "OpnRGB.desktop" |  | ||||||
|           #       "org.freedesktop.Piper.desktop" |  | ||||||
|           #       "via-nativia.desktop" |  | ||||||
|           #       "protonvpn-app.desktop" |  | ||||||
|           #       "simple-scan.desktop" |  | ||||||
|           #     ] |  | ||||||
|           #   ]; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,94 +0,0 @@ | ||||||
| { |  | ||||||
|   pkgs, |  | ||||||
|   config, |  | ||||||
|   osConfig, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   imports = [ |  | ||||||
|     ./packages |  | ||||||
|     ./i18n.nix |  | ||||||
|     ./impermanence.nix |  | ||||||
|     ./dconf.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   config = { |  | ||||||
|     # Home Manager needs a bit of information about you and the paths it should |  | ||||||
|     # manage. |  | ||||||
|     home = { |  | ||||||
|       username = osConfig.host.users.leyla.name; |  | ||||||
|       homeDirectory = osConfig.users.users.leyla.home; |  | ||||||
| 
 |  | ||||||
|       # This value determines the Home Manager release that your configuration is |  | ||||||
|       # compatible with. This helps avoid breakage when a new Home Manager release |  | ||||||
|       # introduces backwards incompatible changes. |  | ||||||
|       # |  | ||||||
|       # You should not change this value, even if you update Home Manager. If you do |  | ||||||
|       # want to update the value, then make sure to first check the Home Manager |  | ||||||
|       # release notes. |  | ||||||
|       stateVersion = "23.11"; # Please read the comment before changing. |  | ||||||
| 
 |  | ||||||
|       # Home Manager is pretty good at managing dotfiles. The primary way to manage |  | ||||||
|       # plain files is through 'home.file'. |  | ||||||
|       file = { |  | ||||||
|         # # Building this configuration will create a copy of 'dotfiles/screenrc' in |  | ||||||
|         # # the Nix store. Activating the configuration will then make '~/.screenrc' a |  | ||||||
|         # # symlink to the Nix store copy. |  | ||||||
|         # ".screenrc".source = dotfiles/screenrc; |  | ||||||
| 
 |  | ||||||
|         # # You can also set the file content immediately. |  | ||||||
|         # ".gradle/gradle.properties".text = '' |  | ||||||
|         #   org.gradle.console=verbose |  | ||||||
|         #   org.gradle.daemon.idletimeout=3600000 |  | ||||||
|         # ''; |  | ||||||
|         "${config.xdg.configHome}/user-dirs.dirs" = { |  | ||||||
|           force = true; |  | ||||||
|           text = '' |  | ||||||
|             # This file is written by xdg-user-dirs-update |  | ||||||
|             # If you want to change or add directories, just edit the line you're |  | ||||||
|             # interested in. All local changes will be retained on the next run. |  | ||||||
|             # Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped |  | ||||||
|             # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an |  | ||||||
|             # absolute path. No other format is supported. |  | ||||||
|             # |  | ||||||
|             XDG_DESKTOP_DIR="$HOME/desktop" |  | ||||||
|             XDG_DOWNLOAD_DIR="$HOME/downloads" |  | ||||||
|             XDG_DOCUMENTS_DIR="$HOME/documents" |  | ||||||
|             XDG_TEMPLATES_DIR="$HOME/documents/templates" |  | ||||||
|             XDG_MUSIC_DIR="$HOME/documents/music" |  | ||||||
|             XDG_PICTURES_DIR="$HOME/documents/photos" |  | ||||||
|             XDG_VIDEOS_DIR="$HOME/documents/videos" |  | ||||||
|             XDG_PUBLICSHARE_DIR="$HOME/documents/public" |  | ||||||
|           ''; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       keyboard.layout = "us,it,de"; |  | ||||||
| 
 |  | ||||||
|       # Home Manager can also manage your environment variables through |  | ||||||
|       # 'home.sessionVariables'. If you don't want to manage your shell through Home |  | ||||||
|       # Manager then you have to manually source 'hm-session-vars.sh' located at |  | ||||||
|       # either |  | ||||||
|       # |  | ||||||
|       #  ~/.nix-profile/etc/profile.d/hm-session-vars.sh |  | ||||||
|       # |  | ||||||
|       # or |  | ||||||
|       # |  | ||||||
|       #  ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh |  | ||||||
|       # |  | ||||||
|       # or |  | ||||||
|       # |  | ||||||
|       #  /etc/profiles/per-user/leyla/etc/profile.d/hm-session-vars.sh |  | ||||||
|       # |  | ||||||
|       sessionVariables = { |  | ||||||
|         # EDITOR = "emacs"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # TODO: move this into a fonts module |  | ||||||
|     home.packages = with pkgs; [ |  | ||||||
|       aileron |  | ||||||
|       nerd-fonts.open-dyslexic |  | ||||||
|     ]; |  | ||||||
|     fonts.fontconfig.enable = true; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,12 +0,0 @@ | ||||||
| {...}: { |  | ||||||
|   i18n = { |  | ||||||
|     defaultLocale = "en_IE.UTF-8"; |  | ||||||
| 
 |  | ||||||
|     extraLocaleSettings = { |  | ||||||
|       # LC_ADDRESS = "en_IE.UTF-8"; # lets just get used to this one now |  | ||||||
|       # LC_TELEPHONE = "en_IE.UTF-8"; # lets just get used to this one now |  | ||||||
|       LC_MONETARY = "en_US.UTF-8"; # to be changed once I move |  | ||||||
|       LC_PAPER = "en_US.UTF-8"; # convenient for american printers until I move |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,21 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   osConfig, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   config = lib.mkIf osConfig.host.impermanence.enable { |  | ||||||
|     home.persistence."/persist/home/leyla" = { |  | ||||||
|       directories = [ |  | ||||||
|         "desktop" |  | ||||||
|         "downloads" |  | ||||||
|         "documents" |  | ||||||
|       ]; |  | ||||||
|       files = [ |  | ||||||
|         ".bash_history" # keep shell history around |  | ||||||
|         "${config.xdg.dataHome}/recently-used.xbel" # gnome recently viewed files |  | ||||||
|       ]; |  | ||||||
|       allowOther = true; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,93 +0,0 @@ | ||||||
| { |  | ||||||
|   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; |  | ||||||
|           piper.enable = hardware.piperMouse.enable; |  | ||||||
|           proxmark3.enable = true; |  | ||||||
|           openrgb.enable = hardware.openRGB.enable; |  | ||||||
|           via.enable = hardware.viaKeyboard.enable; |  | ||||||
|           claude-code.enable = osConfig.host.ai.enable; |  | ||||||
|           davinci-resolve.enable = hardware.graphicsAcceleration.enable; |  | ||||||
|           mfoc.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; |  | ||||||
|           krita.enable = true; |  | ||||||
|           ungoogled-chromium.enable = true; |  | ||||||
|           libreoffice.enable = true; |  | ||||||
|           mapillary-uploader.enable = true; |  | ||||||
|           inkscape.enable = true; |  | ||||||
|           gimp.enable = true; |  | ||||||
|           freecad.enable = true; |  | ||||||
|           onionshare.enable = true; |  | ||||||
|           pdfarranger.enable = true; |  | ||||||
|           picard.enable = true; |  | ||||||
|           qflipper.enable = true; |  | ||||||
|           openvpn.enable = true; |  | ||||||
|           noisetorch.enable = true; |  | ||||||
|           tor-browser.enable = true; |  | ||||||
|           gdx-liftoff.enable = true; |  | ||||||
|           # polycule package is now working with Flutter 3.29 |  | ||||||
|           polycule.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; |  | ||||||
|       }; |  | ||||||
|     }) |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,22 +0,0 @@ | ||||||
| { |  | ||||||
|   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"]; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,344 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   inputs, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   config = { |  | ||||||
|     programs.firefox = { |  | ||||||
|       profiles.leyla = { |  | ||||||
|         settings = { |  | ||||||
|           "browser.search.defaultenginename" = "Searx"; |  | ||||||
|           "browser.search.order.1" = "Searx"; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         search = { |  | ||||||
|           force = true; |  | ||||||
|           default = "Searx"; |  | ||||||
|           engines = { |  | ||||||
|             "Nix Packages" = { |  | ||||||
|               urls = [ |  | ||||||
|                 { |  | ||||||
|                   template = "https://search.nixos.org/packages"; |  | ||||||
|                   params = [ |  | ||||||
|                     { |  | ||||||
|                       name = "type"; |  | ||||||
|                       value = "packages"; |  | ||||||
|                     } |  | ||||||
|                     { |  | ||||||
|                       name = "query"; |  | ||||||
|                       value = "{searchTerms}"; |  | ||||||
|                     } |  | ||||||
|                   ]; |  | ||||||
|                 } |  | ||||||
|               ]; |  | ||||||
|               icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; |  | ||||||
|               definedAliases = ["@np"]; |  | ||||||
|             }; |  | ||||||
|             "NixOS Wiki" = { |  | ||||||
|               urls = [{template = "https://nixos.wiki/index.php?search={searchTerms}";}]; |  | ||||||
|               icon = "https://nixos.wiki/favicon.png"; |  | ||||||
|               updateInterval = 24 * 60 * 60 * 1000; # every day |  | ||||||
|               definedAliases = ["@nw"]; |  | ||||||
|             }; |  | ||||||
|             "Searx" = { |  | ||||||
|               urls = [{template = "https://search.jan-leila.com/?q={searchTerms}";}]; |  | ||||||
|               icon = "https://nixos.wiki/favicon.png"; |  | ||||||
|               updateInterval = 24 * 60 * 60 * 1000; # every day |  | ||||||
|               definedAliases = ["@searx"]; |  | ||||||
|             }; |  | ||||||
|           }; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         extensions.packages = with inputs.firefox-addons.packages.${pkgs.system}; [ |  | ||||||
|           bitwarden |  | ||||||
|           terms-of-service-didnt-read |  | ||||||
|           multi-account-containers |  | ||||||
|           shinigami-eyes |  | ||||||
| 
 |  | ||||||
|           ublock-origin |  | ||||||
|           sponsorblock |  | ||||||
|           dearrow |  | ||||||
|           df-youtube |  | ||||||
|           return-youtube-dislikes |  | ||||||
| 
 |  | ||||||
|           privacy-badger |  | ||||||
|           decentraleyes |  | ||||||
|           clearurls |  | ||||||
|           localcdn |  | ||||||
| 
 |  | ||||||
|           snowflake |  | ||||||
| 
 |  | ||||||
|           deutsch-de-language-pack |  | ||||||
|           dictionary-german |  | ||||||
| 
 |  | ||||||
|           tab-session-manager |  | ||||||
| 
 |  | ||||||
|           # ( |  | ||||||
|           #   buildFirefoxXpiAddon rec { |  | ||||||
|           #     pname = "italiano-it-language-pack"; |  | ||||||
|           #     version = "132.0.20241110.231641"; |  | ||||||
|           #     addonId = "langpack-it@firefox.mozilla.org"; |  | ||||||
|           #     url = "https://addons.mozilla.org/firefox/downloads/file/4392453/italiano_it_language_pack-${version}.xpi"; |  | ||||||
|           #     sha256 = ""; |  | ||||||
|           #     meta = with lib; |  | ||||||
|           #     { |  | ||||||
|           #       description = "Firefox Language Pack for Italiano (it) – Italian"; |  | ||||||
|           #       license = licenses.mpl20; |  | ||||||
|           #       mozPermissions = []; |  | ||||||
|           #       platforms = platforms.all; |  | ||||||
|           #     }; |  | ||||||
|           #   } |  | ||||||
|           # ) |  | ||||||
|           # ( |  | ||||||
|           #   buildFirefoxXpiAddon rec { |  | ||||||
|           #     pname = "dizionario-italiano"; |  | ||||||
|           #     version = "5.1"; |  | ||||||
|           #     addonId = "it-IT@dictionaries.addons.mozilla.org"; |  | ||||||
|           #     url = "https://addons.mozilla.org/firefox/downloads/file/1163874/dizionario_italiano-${version}.xpi"; |  | ||||||
|           #     sha256 = ""; |  | ||||||
|           #     meta = with lib; |  | ||||||
|           #     { |  | ||||||
|           #       description = "Add support for Italian to spellchecking"; |  | ||||||
|           #       license = licenses.gpl3; |  | ||||||
|           #       mozPermissions = []; |  | ||||||
|           #       platforms = platforms.all; |  | ||||||
|           #     }; |  | ||||||
|           #   } |  | ||||||
|           # ) |  | ||||||
|         ]; |  | ||||||
| 
 |  | ||||||
|         settings = { |  | ||||||
|           # Disable irritating first-run stuff |  | ||||||
|           "browser.disableResetPrompt" = true; |  | ||||||
|           "browser.download.panel.shown" = true; |  | ||||||
|           "browser.feeds.showFirstRunUI" = false; |  | ||||||
|           "browser.messaging-system.whatsNewPanel.enabled" = false; |  | ||||||
|           "browser.rights.3.shown" = true; |  | ||||||
|           "browser.shell.checkDefaultBrowser" = false; |  | ||||||
|           "browser.shell.defaultBrowserCheckCount" = 1; |  | ||||||
|           "browser.startup.homepage_override.mstone" = "ignore"; |  | ||||||
|           "browser.uitour.enabled" = false; |  | ||||||
|           "startup.homepage_override_url" = ""; |  | ||||||
|           "trailhead.firstrun.didSeeAboutWelcome" = true; |  | ||||||
|           "browser.bookmarks.restore_default_bookmarks" = false; |  | ||||||
|           "browser.bookmarks.addedImportButton" = true; |  | ||||||
|           "browser.newtabpage.activity-stream.feeds.section.topstories" = false; |  | ||||||
| 
 |  | ||||||
|           # Usage Experience |  | ||||||
|           "browser.startup.homepage" = "about:home"; |  | ||||||
|           "browser.download.useDownloadDir" = false; |  | ||||||
|           "browser.uiCustomization.state" = builtins.toJSON { |  | ||||||
|             "currentVersion" = 20; |  | ||||||
|             "newElementCount" = 6; |  | ||||||
|             "dirtyAreaCache" = [ |  | ||||||
|               "nav-bar" |  | ||||||
|               "PersonalToolbar" |  | ||||||
|               "toolbar-menubar" |  | ||||||
|               "TabsToolbar" |  | ||||||
|               "unified-extensions-area" |  | ||||||
|               "vertical-tabs" |  | ||||||
|             ]; |  | ||||||
|             "placements" = { |  | ||||||
|               "widget-overflow-fixed-list" = []; |  | ||||||
|               "unified-extensions-area" = [ |  | ||||||
|                 # bitwarden |  | ||||||
|                 "_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action" |  | ||||||
|                 "ublock0_raymondhill_net-browser-action" |  | ||||||
|                 "sponsorblocker_ajay_app-browser-action" |  | ||||||
|                 "dearrow_ajay_app-browser-action" |  | ||||||
|                 "jid1-mnnxcxisbpnsxq_jetpack-browser-action" |  | ||||||
|                 "_testpilot-containers-browser-action" |  | ||||||
|                 "addon_simplelogin-browser-action" |  | ||||||
|                 "_74145f27-f039-47ce-a470-a662b129930a_-browser-action" |  | ||||||
|                 "jid1-bofifl9vbdl2zq_jetpack-browser-action" |  | ||||||
|                 "dfyoutube_example_com-browser-action" |  | ||||||
|                 "_b86e4813-687a-43e6-ab65-0bde4ab75758_-browser-action" |  | ||||||
|                 "_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action" |  | ||||||
|                 "_b11bea1f-a888-4332-8d8a-cec2be7d24b9_-browse-action" |  | ||||||
|                 "jid0-3guet1r69sqnsrca5p8kx9ezc3u_jetpack-browser-action" |  | ||||||
|               ]; |  | ||||||
|               "nav-bar" = [ |  | ||||||
|                 "back-button" |  | ||||||
|                 "forward-button" |  | ||||||
|                 "stop-reload-button" |  | ||||||
|                 "urlbar-container" |  | ||||||
|                 "downloads-button" |  | ||||||
|                 "unified-extensions-button" |  | ||||||
|                 "reset-pbm-toolbar-button" |  | ||||||
|               ]; |  | ||||||
|               "toolbar-menubar" = [ |  | ||||||
|                 "menubar-items" |  | ||||||
|               ]; |  | ||||||
|               "TabsToolbar" = [ |  | ||||||
|                 "firefox-view-button" |  | ||||||
|                 "tabbrowser-tabs" |  | ||||||
|                 "new-tab-button" |  | ||||||
|                 "alltabs-button" |  | ||||||
|               ]; |  | ||||||
|               "vertical-tabs" = []; |  | ||||||
|               "PersonalToolbar" = [ |  | ||||||
|                 "import-button" |  | ||||||
|                 "personal-bookmarks" |  | ||||||
|               ]; |  | ||||||
|             }; |  | ||||||
|             "seen" = [ |  | ||||||
|               "save-to-pocket-button" |  | ||||||
|               "developer-button" |  | ||||||
|               "privacy_privacy_com-browser-action" |  | ||||||
|               "sponsorblocker_ajay_app-browser-action" |  | ||||||
|               "ublock0_raymondhill_net-browser-action" |  | ||||||
|               "addon_simplelogin-browser-action" |  | ||||||
|               "dearrow_ajay_app-browser-action" |  | ||||||
|               "_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action" |  | ||||||
|               "_74145f27-f039-47ce-a470-a662b129930a_-browser-action" |  | ||||||
|               "jid1-bofifl9vbdl2zq_jetpack-browser-action" |  | ||||||
|               "dfyoutube_example_com-browser-action" |  | ||||||
|               "_testpilot-containers-browser-action" |  | ||||||
|               "_b86e4813-687a-43e6-ab65-0bde4ab75758_-browser-action" |  | ||||||
|               "jid1-mnnxcxisbpnsxq_jetpack-browser-action" |  | ||||||
|               "_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action" |  | ||||||
|               "_b11bea1f-a888-4332-8d8a-cec2be7d24b9_-browser-action" |  | ||||||
|               "jid0-3guet1r69sqnsrca5p8kx9ezc3u_jetpack-browser-action" |  | ||||||
|             ]; |  | ||||||
|           }; |  | ||||||
|           "browser.newtabpage.activity-stream.feeds.topsites" = false; |  | ||||||
|           "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; |  | ||||||
|           "browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts" = false; |  | ||||||
|           "browser.newtabpage.blocked" = lib.genAttrs [ |  | ||||||
|             # Facebook |  | ||||||
|             "4gPpjkxgZzXPVtuEoAL9Ig==" |  | ||||||
|             # Reddit |  | ||||||
|             "gLv0ja2RYVgxKdp0I5qwvA==" |  | ||||||
|             # Amazon |  | ||||||
|             "K00ILysCaEq8+bEqV/3nuw==" |  | ||||||
|             # Twitter |  | ||||||
|             "T9nJot5PurhJSy8n038xGA==" |  | ||||||
|           ] (_: 1); |  | ||||||
|           "identity.fxaccounts.enabled" = false; |  | ||||||
| 
 |  | ||||||
|           # Security |  | ||||||
|           "privacy.trackingprotection.enabled" = true; |  | ||||||
|           "dom.security.https_only_mode" = true; |  | ||||||
| 
 |  | ||||||
|           "extensions.formautofill.addresses.enabled" = false; |  | ||||||
|           "extensions.formautofill.creditCards.enabled" = false; |  | ||||||
|           "signon.rememberSignons" = false; |  | ||||||
|           "privacy.sanitize.sanitizeOnShutdown" = true; |  | ||||||
|           "privacy.clearOnShutdown_v2.cache" = true; |  | ||||||
|           "privacy.clearOnShutdown_v2.cookiesAndStorage" = true; |  | ||||||
|           "privacy.clearOnShutdown_v2.historyFormDataAndDownloads" = true; |  | ||||||
|           "urlclassifier.trackingSkipURLs" = ""; |  | ||||||
|           "urlclassifier.features.socialtracking.skipURLs" = ""; |  | ||||||
|           "dom.security.https_only_mode_pbm" = true; |  | ||||||
|           "dom.security.https_only_mode_error_page_user_suggestions" = true; |  | ||||||
| 
 |  | ||||||
|           # Disable telemetry |  | ||||||
|           "app.shield.optoutstudies.enabled" = false; |  | ||||||
|           "browser.discovery.enabled" = false; |  | ||||||
|           "browser.newtabpage.activity-stream.feeds.telemetry" = false; |  | ||||||
|           "browser.newtabpage.activity-stream.telemetry" = false; |  | ||||||
|           "browser.ping-centre.telemetry" = false; |  | ||||||
|           "datareporting.healthreport.service.enabled" = false; |  | ||||||
|           "datareporting.healthreport.uploadEnabled" = false; |  | ||||||
|           "datareporting.policy.dataSubmissionEnabled" = false; |  | ||||||
|           "datareporting.sessions.current.clean" = true; |  | ||||||
|           "devtools.onboarding.telemetry.logged" = false; |  | ||||||
|           "toolkit.telemetry.archive.enabled" = false; |  | ||||||
|           "toolkit.telemetry.bhrPing.enabled" = false; |  | ||||||
|           "toolkit.telemetry.enabled" = false; |  | ||||||
|           "toolkit.telemetry.firstShutdownPing.enabled" = false; |  | ||||||
|           "toolkit.telemetry.hybridContent.enabled" = false; |  | ||||||
|           "toolkit.telemetry.newProfilePing.enabled" = false; |  | ||||||
|           "toolkit.telemetry.prompted" = 2; |  | ||||||
|           "toolkit.telemetry.rejected" = true; |  | ||||||
|           "toolkit.telemetry.reportingpolicy.firstRun" = false; |  | ||||||
|           "toolkit.telemetry.server" = ""; |  | ||||||
|           "toolkit.telemetry.shutdownPingSender.enabled" = false; |  | ||||||
|           "toolkit.telemetry.unified" = false; |  | ||||||
|           "toolkit.telemetry.unifiedIsOptIn" = false; |  | ||||||
|           "toolkit.telemetry.updatePing.enabled" = false; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         bookmarks = { |  | ||||||
|           force = true; |  | ||||||
|           settings = [ |  | ||||||
|             { |  | ||||||
|               name = "Media"; |  | ||||||
|               url = "https://media.jan-leila.com/"; |  | ||||||
|               keyword = ""; |  | ||||||
|               tags = [""]; |  | ||||||
|             } |  | ||||||
|             { |  | ||||||
|               name = "Photos"; |  | ||||||
|               url = "https://photos.jan-leila.com"; |  | ||||||
|               keyword = ""; |  | ||||||
|               tags = [""]; |  | ||||||
|             } |  | ||||||
|             { |  | ||||||
|               name = "Git"; |  | ||||||
|               url = "https://git.jan-leila.com/"; |  | ||||||
|               keyword = ""; |  | ||||||
|               tags = [""]; |  | ||||||
|             } |  | ||||||
|             { |  | ||||||
|               name = "Home Automation"; |  | ||||||
|               url = "https://home.jan-leila.com/"; |  | ||||||
|               keyword = ""; |  | ||||||
|               tags = [""]; |  | ||||||
|             } |  | ||||||
|             { |  | ||||||
|               name = "Mail"; |  | ||||||
|               url = "https://mail.protonmail.com"; |  | ||||||
|               keyword = ""; |  | ||||||
|               tags = [""]; |  | ||||||
|             } |  | ||||||
|             { |  | ||||||
|               name = "Open Street Map"; |  | ||||||
|               url = "https://www.openstreetmap.org/"; |  | ||||||
|               keyword = ""; |  | ||||||
|               tags = [""]; |  | ||||||
|             } |  | ||||||
|             { |  | ||||||
|               name = "Password Manager"; |  | ||||||
|               url = "https://vault.bitwarden.com/"; |  | ||||||
|               keyword = ""; |  | ||||||
|               tags = [""]; |  | ||||||
|             } |  | ||||||
|             { |  | ||||||
|               name = "Mastodon"; |  | ||||||
|               url = "https://mspsocial.net"; |  | ||||||
|               keyword = ""; |  | ||||||
|               tags = [""]; |  | ||||||
|             } |  | ||||||
|             { |  | ||||||
|               name = "Linked In"; |  | ||||||
|               url = "https://www.linkedin.com/"; |  | ||||||
|               keyword = ""; |  | ||||||
|               tags = [""]; |  | ||||||
|             } |  | ||||||
|             { |  | ||||||
|               name = "Job Search"; |  | ||||||
|               url = "https://www.jobsinnetwork.com/?state=cleaned_history&language%5B%5D=en&query=react&locations.countryCode%5B%5D=IT&locations.countryCode%5B%5D=DE&locations.countryCode%5B%5D=NL&experience%5B%5D=medior&experience%5B%5D=junior&page=1"; |  | ||||||
|               keyword = ""; |  | ||||||
|               tags = [""]; |  | ||||||
|             } |  | ||||||
|             { |  | ||||||
|               name = "React Docs"; |  | ||||||
|               url = "https://react.dev/"; |  | ||||||
|               keyword = ""; |  | ||||||
|               tags = [""]; |  | ||||||
|             } |  | ||||||
|             # Template |  | ||||||
|             # { |  | ||||||
|             #   name = ""; |  | ||||||
|             #   url = ""; |  | ||||||
|             #   keyword = ""; |  | ||||||
|             #   tags = [""]; |  | ||||||
|             # } |  | ||||||
|           ]; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,11 +0,0 @@ | ||||||
| {...}: { |  | ||||||
|   config = { |  | ||||||
|     programs = { |  | ||||||
|       git = { |  | ||||||
|         userName = "Leyla Becker"; |  | ||||||
|         userEmail = "git@jan-leila.com"; |  | ||||||
|         extraConfig.init.defaultBranch = "main"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,17 +0,0 @@ | ||||||
| { |  | ||||||
|   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"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,23 +0,0 @@ | ||||||
| { |  | ||||||
|   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"; |  | ||||||
|           } |  | ||||||
|         ]; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,131 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   config, |  | ||||||
|   osConfig, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   nix-development-enabled = osConfig.host.nix-development.enable; |  | ||||||
|   ai-tooling-enabled = osConfig.host.ai.enable; |  | ||||||
| in { |  | ||||||
|   imports = [ |  | ||||||
|     ./user-words.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   config = lib.mkIf config.user.isDesktopUser { |  | ||||||
|     programs = { |  | ||||||
|       bash.shellAliases = { |  | ||||||
|         code = "codium"; |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       vscode = { |  | ||||||
|         package = pkgs.vscodium; |  | ||||||
| 
 |  | ||||||
|         mutableExtensionsDir = false; |  | ||||||
| 
 |  | ||||||
|         profiles.default = { |  | ||||||
|           enableUpdateCheck = false; |  | ||||||
|           enableExtensionUpdateCheck = false; |  | ||||||
| 
 |  | ||||||
|           userSettings = lib.mkMerge [ |  | ||||||
|             { |  | ||||||
|               "javascript.updateImportsOnFileMove.enabled" = "always"; |  | ||||||
|               "editor.tabSize" = 2; |  | ||||||
|               "editor.insertSpaces" = false; |  | ||||||
|             } |  | ||||||
|           ]; |  | ||||||
| 
 |  | ||||||
|           extraExtensions = { |  | ||||||
|             # vs code feel |  | ||||||
|             oneDark.enable = true; |  | ||||||
|             atomKeybindings.enable = true; |  | ||||||
|             openRemoteSsh.enable = true; |  | ||||||
| 
 |  | ||||||
|             # html development |  | ||||||
|             autoRenameTag.enable = true; |  | ||||||
|             liveServer.enable = true; |  | ||||||
| 
 |  | ||||||
|             # js development |  | ||||||
|             es7ReactJsSnippets.enable = true; |  | ||||||
|             tauriVscode.enable = true; |  | ||||||
|             vscodeEslint.enable = true; |  | ||||||
|             vscodeJest.enable = true; |  | ||||||
|             vitest.enable = true; |  | ||||||
|             vscodeStandard.enable = true; |  | ||||||
|             vscodeStylelint.enable = true; |  | ||||||
| 
 |  | ||||||
|             nearley.enable = true; |  | ||||||
| 
 |  | ||||||
|             # astro development |  | ||||||
|             vscodeMdx.enable = true; |  | ||||||
|             astroVscode.enable = true; |  | ||||||
| 
 |  | ||||||
|             # nix development |  | ||||||
|             alejandra.enable = nix-development-enabled; |  | ||||||
|             nixIde.enable = nix-development-enabled; |  | ||||||
| 
 |  | ||||||
|             # go development |  | ||||||
|             go.enable = true; |  | ||||||
| 
 |  | ||||||
|             # claude development |  | ||||||
|             claudeDev = lib.mkIf ai-tooling-enabled { |  | ||||||
|               enable = true; |  | ||||||
|               mcp = { |  | ||||||
|                 nixos = { |  | ||||||
|                   enable = true; |  | ||||||
|                   autoApprove = { |  | ||||||
|                     nixos_search = true; |  | ||||||
|                     nixos_info = true; |  | ||||||
|                     home_manager_search = true; |  | ||||||
|                     home_manager_info = true; |  | ||||||
|                     darwin_search = true; |  | ||||||
|                     darwin_info = true; |  | ||||||
|                     nixos_flakes_search = true; |  | ||||||
|                   }; |  | ||||||
|                 }; |  | ||||||
|                 eslint = { |  | ||||||
|                   enable = true; |  | ||||||
|                   autoApprove = { |  | ||||||
|                     lint-files = true; |  | ||||||
|                   }; |  | ||||||
|                 }; |  | ||||||
|                 vitest = { |  | ||||||
|                   enable = true; |  | ||||||
|                   autoApprove = { |  | ||||||
|                     list_tests = true; |  | ||||||
|                     run_tests = true; |  | ||||||
|                     analyze_coverage = true; |  | ||||||
|                     set_project_root = true; |  | ||||||
|                   }; |  | ||||||
|                 }; |  | ||||||
|                 sleep = { |  | ||||||
|                   enable = true; |  | ||||||
|                   timeout = 18000; # 5 hours to match claude codes timeout |  | ||||||
|                   autoApprove = { |  | ||||||
|                     sleep = true; |  | ||||||
|                   }; |  | ||||||
|                 }; |  | ||||||
|               }; |  | ||||||
|             }; |  | ||||||
| 
 |  | ||||||
|             # misc extensions |  | ||||||
|             evenBetterToml.enable = true; |  | ||||||
|             direnv.enable = config.programs.direnv.enable; |  | ||||||
|             conventionalCommits.enable = true; |  | ||||||
|           }; |  | ||||||
| 
 |  | ||||||
|           extensions = let |  | ||||||
|             extension-pkgs = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; |  | ||||||
|           in ( |  | ||||||
|             with extension-pkgs.open-vsx; [ |  | ||||||
|               # vs code feel extensions |  | ||||||
|               streetsidesoftware.code-spell-checker |  | ||||||
|               streetsidesoftware.code-spell-checker-german |  | ||||||
|               streetsidesoftware.code-spell-checker-italian |  | ||||||
|             ] |  | ||||||
|           ); |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,126 +0,0 @@ | ||||||
| { |  | ||||||
|   pkgs, |  | ||||||
|   lib, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   config.programs.vscode.profiles.default.userSettings = { |  | ||||||
|     "cSpell.userWords" = [ |  | ||||||
|       "leyla" |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     "cSpell.languageSettings" = [ |  | ||||||
|       { |  | ||||||
|         "languageId" = "nix"; |  | ||||||
|         "locale" = "*"; |  | ||||||
|         "dictionaries" = [ |  | ||||||
|           "applications" |  | ||||||
|           "ai-words" |  | ||||||
|           "nix-words" |  | ||||||
| 
 |  | ||||||
|           # We need to include all other dictionaries in the nix language settings because they exist in this file |  | ||||||
|           # TODO: see if there is a way to make this only apply for this file |  | ||||||
|           "js-words" |  | ||||||
|         ]; |  | ||||||
|       } |  | ||||||
|       { |  | ||||||
|         "languageId" = "javascript,typescript,js,ts"; |  | ||||||
|         "locale" = "*"; |  | ||||||
|         "dictionaries" = [ |  | ||||||
|           "js-words" |  | ||||||
|         ]; |  | ||||||
|       } |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     "cSpell.customDictionaries" = { |  | ||||||
|       applications = { |  | ||||||
|         name = "applications"; |  | ||||||
|         description = "application names"; |  | ||||||
|         path = pkgs.writeText "applications.txt" (lib.strings.concatLines [ |  | ||||||
|           "ollama" |  | ||||||
|           "syncthing" |  | ||||||
|           "immich" |  | ||||||
|           "sonos" |  | ||||||
|           "makemkv" |  | ||||||
|           "hass" |  | ||||||
|           "qbittorent" |  | ||||||
|           "prostudiomasters" |  | ||||||
|           "protonmail" |  | ||||||
|           "pulseaudio" |  | ||||||
|         ]); |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       ai-words = { |  | ||||||
|         name = "ai-words"; |  | ||||||
|         description = "common words used for ai development"; |  | ||||||
|         path = pkgs.writeText "ai-words.txt" (lib.strings.concatLines [ |  | ||||||
|           "ollama" |  | ||||||
|           "deepseek" |  | ||||||
|           "qwen" |  | ||||||
|         ]); |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       nix-words = { |  | ||||||
|         name = "nix-words"; |  | ||||||
|         description = "words used in nix configurations"; |  | ||||||
|         path = pkgs.writeText "nix-words.txt" (lib.strings.concatLines [ |  | ||||||
|           "pname" |  | ||||||
|           "direnv" |  | ||||||
|           "tmpfiles" |  | ||||||
|           "Networkd" |  | ||||||
|           "networkmanager" |  | ||||||
|           "dialout" |  | ||||||
|           "adbusers" |  | ||||||
|           "authkey" |  | ||||||
|           "netdevs" |  | ||||||
|           "atomix" |  | ||||||
|           "geary" |  | ||||||
|           "gedit" |  | ||||||
|           "hitori" |  | ||||||
|           "iagno" |  | ||||||
|           "alsa" |  | ||||||
|           "timezoned" |  | ||||||
|           "pipewire" |  | ||||||
|           "rtkit" |  | ||||||
|           "disko" |  | ||||||
|           "ashift" |  | ||||||
|           "autotrim" |  | ||||||
|           "canmount" |  | ||||||
|           "mountpoint" |  | ||||||
|           "xattr" |  | ||||||
|           "acltype" |  | ||||||
|           "relatime" |  | ||||||
|           "keyformat" |  | ||||||
|           "keylocation" |  | ||||||
|           "vdevs" |  | ||||||
| 
 |  | ||||||
|           # codium extensions |  | ||||||
|           "akamud" |  | ||||||
|           "onedark" |  | ||||||
|           "jeanp" |  | ||||||
|           "dsznajder" |  | ||||||
|           "dbaeumer" |  | ||||||
|           "orta" |  | ||||||
|           "tauri" |  | ||||||
|           "unifiedjs" |  | ||||||
|           "tamasfe" |  | ||||||
|           "pinage" |  | ||||||
|           "jnoortheen" |  | ||||||
|           "kamadorueda" |  | ||||||
|           "karyfoundation" |  | ||||||
|           "nearley" |  | ||||||
| 
 |  | ||||||
|           # nix.optimise is spelled wrong |  | ||||||
|           "optimise" |  | ||||||
|         ]); |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       js-words = { |  | ||||||
|         name = "js-words"; |  | ||||||
|         description = "words used in js development"; |  | ||||||
|         path = pkgs.writeText "js-words.txt" (lib.strings.concatLines [ |  | ||||||
|           "webdav" |  | ||||||
|         ]); |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,19 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   modulesPath, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   imports = [(modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix")]; |  | ||||||
| 
 |  | ||||||
|   systemd.services.sshd.wantedBy = pkgs.lib.mkForce ["multi-user.target"]; |  | ||||||
|   users.users.root.openssh.authorizedKeys.keys = [ |  | ||||||
|     "ssh-ed25519 AaAeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee username@host" |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   isoImage.squashfsCompression = "gzip -Xcompression-level 1"; |  | ||||||
| 
 |  | ||||||
|   networking.hostName = "installer"; |  | ||||||
| 
 |  | ||||||
|   nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; |  | ||||||
| } |  | ||||||
|  | @ -1,5 +0,0 @@ | ||||||
| {...}: { |  | ||||||
|   imports = [ |  | ||||||
|     ./configuration.nix |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,388 +0,0 @@ | ||||||
| # server nas |  | ||||||
| { |  | ||||||
|   inputs, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   sops.secrets = { |  | ||||||
|     "vpn-keys/tailscale-authkey/defiant" = { |  | ||||||
|       sopsFile = "${inputs.secrets}/vpn-keys.yaml"; |  | ||||||
|     }; |  | ||||||
|     "vpn-keys/proton-wireguard/defiant-p2p" = { |  | ||||||
|       sopsFile = "${inputs.secrets}/vpn-keys.yaml"; |  | ||||||
|       mode = "0640"; |  | ||||||
|       owner = "root"; |  | ||||||
|       group = "systemd-network"; |  | ||||||
|     }; |  | ||||||
|     "services/zfs_smtp_token" = { |  | ||||||
|       sopsFile = "${inputs.secrets}/defiant-services.yaml"; |  | ||||||
|     }; |  | ||||||
|     "services/paperless_password" = { |  | ||||||
|       sopsFile = "${inputs.secrets}/defiant-services.yaml"; |  | ||||||
|       mode = "0700"; |  | ||||||
|       owner = "paperless"; |  | ||||||
|       group = "paperless"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   host = { |  | ||||||
|     users = { |  | ||||||
|       leyla = { |  | ||||||
|         isDesktopUser = true; |  | ||||||
|         isTerminalUser = true; |  | ||||||
|         isPrincipleUser = true; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     impermanence.enable = true; |  | ||||||
|     storage = { |  | ||||||
|       enable = true; |  | ||||||
|       encryption = true; |  | ||||||
|       notifications = { |  | ||||||
|         enable = true; |  | ||||||
|         host = "smtp.protonmail.ch"; |  | ||||||
|         port = 587; |  | ||||||
|         to = "leyla@jan-leila.com"; |  | ||||||
|         user = "noreply@jan-leila.com"; |  | ||||||
|         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" |  | ||||||
|             "ata-ST18000NE000-3G6101_ZVTCXWSC" |  | ||||||
|             "ata-ST18000NE000-3G6101_ZVTD10EH" |  | ||||||
|             "ata-ST18000NT001-3NF101_ZVTE0S3Q" |  | ||||||
|             "ata-ST18000NT001-3NF101_ZVTEF27J" |  | ||||||
|             "ata-ST18000NE000-3G6101_ZVTJ7359" |  | ||||||
|           ] |  | ||||||
|           # TODO: this needs to be configured manually |  | ||||||
|           [ |  | ||||||
|             "ata-ST4000NE001-2MA101_WS2275P3" |  | ||||||
|             "ata-ST4000NE001-2MA101_WS227B9F" |  | ||||||
|             "ata-ST4000NE001-2MA101_WS227CEW" |  | ||||||
|             "ata-ST4000NE001-2MA101_WS227CYN" |  | ||||||
|             "ata-ST4000NE001-2MA101_WS23TBWV" |  | ||||||
|             "ata-ST4000NE001-2MA101_WS23TC5F" |  | ||||||
|           ] |  | ||||||
|         ]; |  | ||||||
|         cache = [ |  | ||||||
|           "nvme-Samsung_SSD_990_PRO_4TB_S7KGNU0X907881F" |  | ||||||
|         ]; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     network_storage = { |  | ||||||
|       enable = true; |  | ||||||
|       directories = [ |  | ||||||
|         { |  | ||||||
|           folder = "leyla_documents"; |  | ||||||
|           user = "leyla"; |  | ||||||
|           group = "leyla"; |  | ||||||
|           bind = "/home/leyla/documents"; |  | ||||||
|         } |  | ||||||
|         { |  | ||||||
|           folder = "eve_documents"; |  | ||||||
|           user = "eve"; |  | ||||||
|           group = "eve"; |  | ||||||
|         } |  | ||||||
|         { |  | ||||||
|           folder = "users_documents"; |  | ||||||
|           user = "root"; |  | ||||||
|           group = "users"; |  | ||||||
|         } |  | ||||||
|         { |  | ||||||
|           folder = "media"; |  | ||||||
|           user = "jellyfin"; |  | ||||||
|           group = "jellyfin_media"; |  | ||||||
|           bind = config.services.jellyfin.media_directory; |  | ||||||
|         } |  | ||||||
|       ]; |  | ||||||
|       nfs = { |  | ||||||
|         enable = true; |  | ||||||
|         directories = ["leyla_documents" "eve_documents" "users_documents" "media"]; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     reverse_proxy = { |  | ||||||
|       enable = true; |  | ||||||
|       enableACME = true; |  | ||||||
|       hostname = "jan-leila.com"; |  | ||||||
|     }; |  | ||||||
|     postgres = { |  | ||||||
|       extraUsers = { |  | ||||||
|         leyla = { |  | ||||||
|           isAdmin = true; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   systemd.network = { |  | ||||||
|     enable = true; |  | ||||||
| 
 |  | ||||||
|     netdevs = { |  | ||||||
|       "10-bond0" = { |  | ||||||
|         netdevConfig = { |  | ||||||
|           Kind = "bond"; |  | ||||||
|           Name = "bond0"; |  | ||||||
|         }; |  | ||||||
|         bondConfig = { |  | ||||||
|           Mode = "802.3ad"; |  | ||||||
|           TransmitHashPolicy = "layer3+4"; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       "20-wg0" = { |  | ||||||
|         netdevConfig = { |  | ||||||
|           Kind = "wireguard"; |  | ||||||
|           Name = "wg0"; |  | ||||||
|         }; |  | ||||||
|         wireguardConfig = { |  | ||||||
|           PrivateKeyFile = config.sops.secrets."vpn-keys/proton-wireguard/defiant-p2p".path; |  | ||||||
|           ListenPort = 51820; |  | ||||||
|         }; |  | ||||||
|         wireguardPeers = [ |  | ||||||
|           { |  | ||||||
|             PublicKey = "rRO6yJim++Ezz6scCLMaizI+taDjU1pzR2nfW6qKbW0="; |  | ||||||
|             Endpoint = "185.230.126.146:51820"; |  | ||||||
|             # Allow all traffic but use policy routing to prevent system-wide VPN |  | ||||||
|             AllowedIPs = ["0.0.0.0/0"]; |  | ||||||
|           } |  | ||||||
|         ]; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     networks = { |  | ||||||
|       "40-bond0" = { |  | ||||||
|         matchConfig.Name = "bond0"; |  | ||||||
|         linkConfig = { |  | ||||||
|           RequiredForOnline = "degraded-carrier"; |  | ||||||
|           RequiredFamilyForOnline = "any"; |  | ||||||
|         }; |  | ||||||
|         networkConfig.DHCP = "yes"; |  | ||||||
| 
 |  | ||||||
|         address = [ |  | ||||||
|           "192.168.1.10/32" |  | ||||||
|         ]; |  | ||||||
| 
 |  | ||||||
|         # Set lower priority for default gateway to allow WireGuard interface binding |  | ||||||
|         routes = [ |  | ||||||
|           { |  | ||||||
|             Destination = "0.0.0.0/0"; |  | ||||||
|             Gateway = "192.168.1.1"; |  | ||||||
|             Metric = 100; |  | ||||||
|           } |  | ||||||
|         ]; |  | ||||||
|         dns = ["192.168.1.1"]; |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       "50-wg0" = { |  | ||||||
|         matchConfig.Name = "wg0"; |  | ||||||
|         networkConfig = { |  | ||||||
|           DHCP = "no"; |  | ||||||
|         }; |  | ||||||
|         address = [ |  | ||||||
|           "10.2.0.2/32" |  | ||||||
|         ]; |  | ||||||
|         # Configure routing for application binding |  | ||||||
|         routingPolicyRules = [ |  | ||||||
|           { |  | ||||||
|             # Route traffic from VPN interface through VPN table |  | ||||||
|             From = "10.2.0.2/32"; |  | ||||||
|             Table = 200; |  | ||||||
|             Priority = 100; |  | ||||||
|           } |  | ||||||
|         ]; |  | ||||||
|         routes = [ |  | ||||||
|           { |  | ||||||
|             # Direct route to VPN gateway |  | ||||||
|             Destination = "10.2.0.1/32"; |  | ||||||
|             Scope = "link"; |  | ||||||
|           } |  | ||||||
|           { |  | ||||||
|             # Route VPN subnet through VPN gateway in custom table |  | ||||||
|             Destination = "10.2.0.0/16"; |  | ||||||
|             Gateway = "10.2.0.1"; |  | ||||||
|             Table = 200; |  | ||||||
|           } |  | ||||||
|           { |  | ||||||
|             # Route all traffic through VPN gateway in custom table |  | ||||||
|             Destination = "0.0.0.0/0"; |  | ||||||
|             Gateway = "10.2.0.1"; |  | ||||||
|             Table = 200; |  | ||||||
|           } |  | ||||||
|         ]; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # limit arc usage to 50gb because ollama doesn't play nice with zfs using up all of the memory |  | ||||||
|   boot.kernelParams = ["zfs.zfs_arc_max=53687091200"]; |  | ||||||
| 
 |  | ||||||
|   # Enable policy routing and source routing for application-specific VPN binding |  | ||||||
|   boot.kernel.sysctl = { |  | ||||||
|     "net.ipv4.conf.all.rp_filter" = 2; |  | ||||||
|     "net.ipv4.conf.default.rp_filter" = 2; |  | ||||||
|     "net.ipv4.conf.wg0.rp_filter" = 2; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   services = { |  | ||||||
|     # temp enable desktop environment for setup |  | ||||||
|     # Enable the X11 windowing system. |  | ||||||
|     xserver.enable = true; |  | ||||||
| 
 |  | ||||||
|     # Enable the GNOME Desktop Environment. |  | ||||||
|     displayManager = { |  | ||||||
|       gdm.enable = true; |  | ||||||
|     }; |  | ||||||
|     desktopManager = { |  | ||||||
|       gnome.enable = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     ollama = { |  | ||||||
|       enable = true; |  | ||||||
|       exposePort = true; |  | ||||||
| 
 |  | ||||||
|       acceleration = false; |  | ||||||
| 
 |  | ||||||
|       environmentVariables = { |  | ||||||
|         OLLAMA_KEEP_ALIVE = "24h"; |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       loadModels = [ |  | ||||||
|         # conversation models |  | ||||||
|         "llama3.1:8b" |  | ||||||
|         "deepseek-r1:8b" |  | ||||||
|         "deepseek-r1:32b" |  | ||||||
|         "deepseek-r1:70b" |  | ||||||
| 
 |  | ||||||
|         # auto complete models |  | ||||||
|         "qwen2.5-coder:1.5b-base" |  | ||||||
|         "qwen2.5-coder:7b" |  | ||||||
|         "deepseek-coder:6.7b" |  | ||||||
|         "deepseek-coder:33b" |  | ||||||
| 
 |  | ||||||
|         # agent models |  | ||||||
|         "qwen3:8b" |  | ||||||
|         "qwen3:32b" |  | ||||||
|         "qwen3:235b-a22b" |  | ||||||
| 
 |  | ||||||
|         "qwen3-coder:30b" |  | ||||||
|         "qwen3-coder:30b-a3b-fp16" |  | ||||||
| 
 |  | ||||||
|         # embedding models |  | ||||||
|         "nomic-embed-text:latest" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|     tailscale = { |  | ||||||
|       enable = true; |  | ||||||
|       authKeyFile = config.sops.secrets."vpn-keys/tailscale-authkey/defiant".path; |  | ||||||
|       useRoutingFeatures = "server"; |  | ||||||
|       extraUpFlags = [ |  | ||||||
|         "--advertise-exit-node" |  | ||||||
|         "--advertise-routes=192.168.0.0/24" |  | ||||||
|         "--accept-dns=false" |  | ||||||
|       ]; |  | ||||||
|       extraSetFlags = [ |  | ||||||
|         "--advertise-exit-node" |  | ||||||
|         "--advertise-routes=192.168.0.0/24" |  | ||||||
|         "--accept-dns=false" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     syncthing.enable = true; |  | ||||||
| 
 |  | ||||||
|     fail2ban.enable = true; |  | ||||||
| 
 |  | ||||||
|     jellyfin = { |  | ||||||
|       enable = true; |  | ||||||
|       subdomain = "media"; |  | ||||||
|       extraSubdomains = ["jellyfin"]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     immich = { |  | ||||||
|       enable = true; |  | ||||||
|       subdomain = "photos"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     forgejo = { |  | ||||||
|       enable = true; |  | ||||||
|       subdomain = "git"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     searx = { |  | ||||||
|       enable = true; |  | ||||||
|       subdomain = "search"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     actual = { |  | ||||||
|       enable = false; |  | ||||||
|       subdomain = "budget"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     home-assistant = { |  | ||||||
|       enable = true; |  | ||||||
|       subdomain = "home"; |  | ||||||
|       openFirewall = true; |  | ||||||
|       database = "postgres"; |  | ||||||
| 
 |  | ||||||
|       extensions = { |  | ||||||
|         sonos.enable = true; |  | ||||||
|         jellyfin.enable = true; |  | ||||||
|         wyoming.enable = false; # Temporarily disabled due to dependency conflict in wyoming-piper |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     paperless = { |  | ||||||
|       enable = true; |  | ||||||
|       subdomain = "documents"; |  | ||||||
|       passwordFile = config.sops.secrets."services/paperless_password".path; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     panoramax = { |  | ||||||
|       enable = false; |  | ||||||
|       openFirewall = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     qbittorrent = { |  | ||||||
|       enable = true; |  | ||||||
|       mediaDir = "/srv/qbittorent"; |  | ||||||
|       openFirewall = true; |  | ||||||
|       webuiPort = 8084; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     filebot-cleanup = { |  | ||||||
|       enable = true; |  | ||||||
|       licenseFile = "/srv/jellyfin/filebot_license.psm"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     sonarr = { |  | ||||||
|       enable = false; |  | ||||||
|       openFirewall = true; |  | ||||||
|     }; |  | ||||||
|     radarr = { |  | ||||||
|       enable = false; |  | ||||||
|       openFirewall = true; |  | ||||||
|     }; |  | ||||||
|     bazarr = { |  | ||||||
|       enable = false; |  | ||||||
|       openFirewall = true; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # disable computer sleeping |  | ||||||
|   systemd.targets = { |  | ||||||
|     sleep.enable = false; |  | ||||||
|     suspend.enable = false; |  | ||||||
|     hibernate.enable = false; |  | ||||||
|     hybrid-sleep.enable = 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 |  | ||||||
|   # on your system were taken. It's perfectly fine and recommended to leave |  | ||||||
|   # this value at the release version of the first install of this system. |  | ||||||
|   # Before changing this value read the documentation for this option |  | ||||||
|   # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). |  | ||||||
|   system.stateVersion = "23.05"; # Did you read the comment? |  | ||||||
| } |  | ||||||
|  | @ -1,9 +0,0 @@ | ||||||
| # server nas |  | ||||||
| {...}: { |  | ||||||
|   imports = [ |  | ||||||
|     ./hardware-configuration.nix |  | ||||||
|     ./configuration.nix |  | ||||||
|     ./packages.nix |  | ||||||
|     ./filebot.nix |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,82 +0,0 @@ | ||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| with lib; let |  | ||||||
|   cfg = config.services.filebot-cleanup; |  | ||||||
| in { |  | ||||||
|   options.services.filebot-cleanup = { |  | ||||||
|     enable = mkEnableOption "Filebot cleanup service"; |  | ||||||
| 
 |  | ||||||
|     licenseFile = mkOption { |  | ||||||
|       type = types.nullOr types.path; |  | ||||||
|       default = null; |  | ||||||
|       description = "Path to the Filebot license file"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     cleanupDirectory = mkOption { |  | ||||||
|       type = types.str; |  | ||||||
|       default = "/srv/jellyfin/filebot_cleanup"; |  | ||||||
|       description = "Directory where cleaned up media files are stored"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     users.groups.filebot_cleanup = {}; |  | ||||||
|     users.users.filebot_cleanup = { |  | ||||||
|       isSystemUser = true; |  | ||||||
|       group = "filebot_cleanup"; |  | ||||||
|       extraGroups = ["jellyfin_media"]; |  | ||||||
|       home = cfg.cleanupDirectory; |  | ||||||
|       createHome = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     nixpkgs.config.allowUnfreePredicate = pkg: |  | ||||||
|       builtins.elem (lib.getName pkg) [ |  | ||||||
|         "filebot" |  | ||||||
|       ]; |  | ||||||
| 
 |  | ||||||
|     environment.systemPackages = with pkgs; [ |  | ||||||
|       filebot |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     systemd.services.filebot-cleanup = { |  | ||||||
|       description = "Filebot media cleanup service"; |  | ||||||
|       serviceConfig = { |  | ||||||
|         Type = "simple"; |  | ||||||
|         User = "filebot_cleanup"; |  | ||||||
|         Group = "filebot_cleanup"; |  | ||||||
|         ExecStart = pkgs.writeShellScript "filebot-cleanup" '' |  | ||||||
|           ${optionalString (cfg.licenseFile != null) '' |  | ||||||
|             ${pkgs.filebot}/bin/filebot --license "${cfg.licenseFile}" |  | ||||||
|           ''} |  | ||||||
|           ${pkgs.filebot}/bin/filebot -rename -r "/srv/jellyfin/media/Movies/" --output "${cfg.cleanupDirectory}/" --format "{jellyfin}" -non-strict --action duplicate |  | ||||||
|           ${pkgs.filebot}/bin/filebot -rename -r "/srv/jellyfin/media/Shows/" --output "${cfg.cleanupDirectory}/" --format "{jellyfin}" -non-strict --action duplicate |  | ||||||
|         ''; |  | ||||||
|         StandardOutput = "journal"; |  | ||||||
|         StandardError = "journal"; |  | ||||||
|       }; |  | ||||||
|       wantedBy = ["multi-user.target"]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     environment.persistence = lib.mkIf config.host.impermanence.enable { |  | ||||||
|       "/persist/system/jellyfin" = { |  | ||||||
|         enable = true; |  | ||||||
|         hideMounts = true; |  | ||||||
|         files = [ |  | ||||||
|           cfg.licenseFile |  | ||||||
|         ]; |  | ||||||
|         directories = [ |  | ||||||
|           { |  | ||||||
|             directory = cfg.cleanupDirectory; |  | ||||||
|             user = "filebot_cleanup"; |  | ||||||
|             group = "filebot_cleanup"; |  | ||||||
|             mode = "1770"; |  | ||||||
|           } |  | ||||||
|         ]; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,63 +0,0 @@ | ||||||
| # Do not modify this file!  It was generated by ‘nixos-generate-config’ |  | ||||||
| # and may be overwritten by future invocations.  Please make changes |  | ||||||
| # to /etc/nixos/configuration.nix instead. |  | ||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   modulesPath, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   imports = [ |  | ||||||
|     (modulesPath + "/installer/scan/not-detected.nix") |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   boot = { |  | ||||||
|     initrd = { |  | ||||||
|       availableKernelModules = ["xhci_pci" "aacraid" "ahci" "usbhid" "nvme" "usb_storage" "sd_mod"]; |  | ||||||
|       kernelModules = []; |  | ||||||
|     }; |  | ||||||
|     kernelModules = ["kvm-amd"]; |  | ||||||
|     extraModulePackages = []; |  | ||||||
| 
 |  | ||||||
|     # Bootloader. |  | ||||||
|     loader = { |  | ||||||
|       systemd-boot.enable = true; |  | ||||||
|       efi = { |  | ||||||
|         canTouchEfiVariables = true; |  | ||||||
|         efiSysMountPoint = "/boot"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     supportedFilesystems = ["zfs"]; |  | ||||||
| 
 |  | ||||||
|     zfs.extraPools = ["rpool"]; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   networking = { |  | ||||||
|     hostName = "defiant"; # Define your hostname. |  | ||||||
|     hostId = "c51763d6"; |  | ||||||
|     useNetworkd = true; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   systemd.network = { |  | ||||||
|     enable = true; |  | ||||||
| 
 |  | ||||||
|     networks = { |  | ||||||
|       "30-eno1" = { |  | ||||||
|         matchConfig.Name = "eno1"; |  | ||||||
|         networkConfig.Bond = "bond0"; |  | ||||||
|       }; |  | ||||||
|       "30-eno2" = { |  | ||||||
|         matchConfig.Name = "eno2"; |  | ||||||
|         networkConfig.Bond = "bond0"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   networking.networkmanager.enable = true; |  | ||||||
| 
 |  | ||||||
|   nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; |  | ||||||
|   hardware = { |  | ||||||
|     # TODO: hardware graphics |  | ||||||
|     cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,9 +0,0 @@ | ||||||
| {pkgs, ...}: { |  | ||||||
|   environment.systemPackages = with pkgs; [ |  | ||||||
|     ffsubsync |  | ||||||
|     sox |  | ||||||
|     yt-dlp |  | ||||||
|     ffmpeg |  | ||||||
|     imagemagick |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,162 +0,0 @@ | ||||||
| # Edit this configuration file to define what should be installed on |  | ||||||
| # 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`). |  | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   imports = [ |  | ||||||
|     ./nvidia-drivers.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   # Use the systemd-boot EFI boot loader. |  | ||||||
|   boot.loader.systemd-boot.enable = true; |  | ||||||
|   boot.loader.efi.canTouchEfiVariables = true; |  | ||||||
| 
 |  | ||||||
|   # networking.hostName = "nixos"; # Define your hostname. |  | ||||||
|   # Pick only one of the below networking options. |  | ||||||
|   # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant. |  | ||||||
|   # networking.networkmanager.enable = true;  # Easiest to use and most distros use this by default. |  | ||||||
| 
 |  | ||||||
|   # Set your time zone. |  | ||||||
|   # time.timeZone = "Europe/Amsterdam"; |  | ||||||
| 
 |  | ||||||
|   # Configure network proxy if necessary |  | ||||||
|   # networking.proxy.default = "http://user:password@proxy:port/"; |  | ||||||
|   # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; |  | ||||||
| 
 |  | ||||||
|   # Select internationalisation properties. |  | ||||||
|   # i18n.defaultLocale = "en_US.UTF-8"; |  | ||||||
|   # console = { |  | ||||||
|   #   font = "Lat2-Terminus16"; |  | ||||||
|   #   keyMap = "us"; |  | ||||||
|   #   useXkbConfig = true; # use xkb.options in tty. |  | ||||||
|   # }; |  | ||||||
| 
 |  | ||||||
|   # Enable the X11 windowing system. |  | ||||||
|   services.xserver.enable = true; |  | ||||||
|   # Enable wacom touchscreen device |  | ||||||
|   services.xserver.wacom.enable = true; |  | ||||||
| 
 |  | ||||||
|   # installed opentabletdriver |  | ||||||
|   hardware.opentabletdriver.enable = true; |  | ||||||
| 
 |  | ||||||
|   # Enable the GNOME Desktop Environment. |  | ||||||
|   services.displayManager.gdm.enable = true; |  | ||||||
|   services.desktopManager.gnome.enable = true; |  | ||||||
| 
 |  | ||||||
|   host = { |  | ||||||
|     users = { |  | ||||||
|       eve = { |  | ||||||
|         isDesktopUser = true; |  | ||||||
|         isTerminalUser = true; |  | ||||||
|         isPrincipleUser = true; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     hardware = { |  | ||||||
|       piperMouse.enable = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     storage = { |  | ||||||
|       enable = true; |  | ||||||
|       pool = { |  | ||||||
|         mode = ""; |  | ||||||
|         drives = ["wwn-0x5000039fd0cf05eb"]; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   services.tailscale.enable = true; |  | ||||||
| 
 |  | ||||||
|   # Configure keymap in X11 |  | ||||||
|   # services.xserver.xkb.layout = "us"; |  | ||||||
|   # services.xserver.xkb.options = "eurosign:e,caps:escape"; |  | ||||||
| 
 |  | ||||||
|   # Enable CUPS to print documents. |  | ||||||
|   # services.printing.enable = true; |  | ||||||
| 
 |  | ||||||
|   # Enable sound. |  | ||||||
|   # services.pulseaudio.enable = true; |  | ||||||
|   # OR |  | ||||||
|   # services.pipewire = { |  | ||||||
|   #   enable = true; |  | ||||||
|   #   pulse.enable = true; |  | ||||||
|   # }; |  | ||||||
| 
 |  | ||||||
|   # Enable touchpad support (enabled default in most desktopManager). |  | ||||||
|   # services.libinput.enable = true; |  | ||||||
| 
 |  | ||||||
|   # Define a user account. Don't forget to set a password with ‘passwd’. |  | ||||||
|   # users.users.alice = { |  | ||||||
|   #   isNormalUser = true; |  | ||||||
|   #   extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. |  | ||||||
|   #   packages = with pkgs; [ |  | ||||||
|   #     tree |  | ||||||
|   #   ]; |  | ||||||
|   # }; |  | ||||||
| 
 |  | ||||||
|   # programs.firefox.enable = true; |  | ||||||
| 
 |  | ||||||
|   nixpkgs.config.allowUnfree = true; |  | ||||||
| 
 |  | ||||||
|   # Packages that can be installed without any extra configuration |  | ||||||
|   # See https://search.nixos.org/packages for all options |  | ||||||
|   environment.systemPackages = with pkgs; [ |  | ||||||
|     wget |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   # Packages that need to be installed with some extra configuration |  | ||||||
|   # See https://search.nixos.org/options for all options |  | ||||||
|   programs = {}; |  | ||||||
| 
 |  | ||||||
|   # Some programs need SUID wrappers, can be configured further or are |  | ||||||
|   # started in user sessions. |  | ||||||
|   # programs.mtr.enable = true; |  | ||||||
|   # programs.gnupg.agent = { |  | ||||||
|   #   enable = true; |  | ||||||
|   #   enableSSHSupport = true; |  | ||||||
|   # }; |  | ||||||
| 
 |  | ||||||
|   # List services that you want to enable: |  | ||||||
| 
 |  | ||||||
|   # Enable the OpenSSH daemon. |  | ||||||
|   # services.openssh.enable = true; |  | ||||||
| 
 |  | ||||||
|   # Open ports in the firewall. |  | ||||||
|   # networking.firewall.allowedTCPPorts = [ ... ]; |  | ||||||
|   # networking.firewall.allowedUDPPorts = [ ... ]; |  | ||||||
|   # Or disable the firewall altogether. |  | ||||||
|   # networking.firewall.enable = false; |  | ||||||
| 
 |  | ||||||
|   networking = { |  | ||||||
|     networkmanager.enable = true; |  | ||||||
|     useDHCP = lib.mkDefault true; |  | ||||||
|     hostId = "7e35eb97"; # arbitrary id number generated via this command: `head -c4 /dev/urandom | od -A none -t x4` |  | ||||||
|     hostName = "emergent"; # Define your hostname. |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # Copy the NixOS configuration file and link it from the resulting system |  | ||||||
|   # (/run/current-system/configuration.nix). This is useful in case you |  | ||||||
|   # accidentally delete configuration.nix. |  | ||||||
|   # system.copySystemConfiguration = true; |  | ||||||
| 
 |  | ||||||
|   # This option defines the first version of NixOS you have installed on this particular machine, |  | ||||||
|   # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. |  | ||||||
|   # |  | ||||||
|   # Most users should NEVER change this value after the initial install, for any reason, |  | ||||||
|   # even if you've upgraded your system to a new NixOS release. |  | ||||||
|   # |  | ||||||
|   # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, |  | ||||||
|   # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how |  | ||||||
|   # to actually do that. |  | ||||||
|   # |  | ||||||
|   # This value being lower than the current NixOS release does NOT mean your system is |  | ||||||
|   # out of date, out of support, or vulnerable. |  | ||||||
|   # |  | ||||||
|   # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, |  | ||||||
|   # and migrated your data accordingly. |  | ||||||
|   # |  | ||||||
|   # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . |  | ||||||
|   system.stateVersion = "25.05"; # Did you read the comment? |  | ||||||
| } |  | ||||||
|  | @ -1,7 +0,0 @@ | ||||||
| # evs desktop |  | ||||||
| {...}: { |  | ||||||
|   imports = [ |  | ||||||
|     ./configuration.nix |  | ||||||
|     ./hardware-configuration.nix |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,32 +0,0 @@ | ||||||
| # Do not modify this file!  It was generated by ‘nixos-generate-config’ |  | ||||||
| # and may be overwritten by future invocations.  Please make changes |  | ||||||
| # to /etc/nixos/configuration.nix instead. |  | ||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   modulesPath, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   imports = [ |  | ||||||
|     (modulesPath + "/installer/scan/not-detected.nix") |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"]; |  | ||||||
|   boot.initrd.kernelModules = []; |  | ||||||
|   boot.kernelModules = []; |  | ||||||
|   boot.extraModulePackages = []; |  | ||||||
| 
 |  | ||||||
|   swapDevices = []; |  | ||||||
| 
 |  | ||||||
|   # 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.enp42s0.useDHCP = lib.mkDefault true; |  | ||||||
|   # networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true; |  | ||||||
| 
 |  | ||||||
|   nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; |  | ||||||
|   hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; |  | ||||||
| } |  | ||||||
|  | @ -1,51 +0,0 @@ | ||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   # Enable OpenGL |  | ||||||
|   hardware.graphics = { |  | ||||||
|     enable = true; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # Load nvidia driver for Xorg and Wayland |  | ||||||
|   services = { |  | ||||||
|     xserver = { |  | ||||||
|       # Load nvidia driver for Xorg and Wayland |  | ||||||
|       videoDrivers = ["nvidia"]; |  | ||||||
|     }; |  | ||||||
|     # Use X instead of wayland |  | ||||||
|     displayManager.gdm.wayland = false; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   hardware.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 = true; |  | ||||||
| 
 |  | ||||||
|     # 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+ |  | ||||||
|     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.stable; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,158 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   config, |  | ||||||
|   inputs, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   imports = [ |  | ||||||
|     inputs.nixos-hardware.nixosModules.framework-11th-gen-intel |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   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 = { |  | ||||||
|         isDesktopUser = true; |  | ||||||
|         isTerminalUser = true; |  | ||||||
|         isPrincipleUser = true; |  | ||||||
|       }; |  | ||||||
|       eve.isDesktopUser = true; |  | ||||||
|       ivy.isDesktopUser = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     hardware = { |  | ||||||
|       directAccess.enable = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     ai = { |  | ||||||
|       enable = true; |  | ||||||
|       models = { |  | ||||||
|         "Llama 3.1 8B" = { |  | ||||||
|           model = "llama3.1:8b"; |  | ||||||
|           roles = ["chat" "edit" "apply"]; |  | ||||||
|           apiBase = "http://defiant:11434"; |  | ||||||
|         }; |  | ||||||
|         "Deepseek Coder:6.7B" = { |  | ||||||
|           model = "deepseek-coder:6.7b"; |  | ||||||
|           roles = ["chat" "edit" "apply"]; |  | ||||||
|           apiBase = "http://defiant:11434"; |  | ||||||
|         }; |  | ||||||
|         "Deepseek Coder:33B" = { |  | ||||||
|           model = "deepseek-coder:33b"; |  | ||||||
|           roles = ["chat" "edit" "apply"]; |  | ||||||
|           apiBase = "http://defiant:11434"; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         "Deepseek r1:8B" = { |  | ||||||
|           model = "deepseek-r1:8b"; |  | ||||||
|           roles = ["chat"]; |  | ||||||
|           apiBase = "http://defiant:11434"; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         "Deepseek r1:32B" = { |  | ||||||
|           model = "deepseek-r1:32b"; |  | ||||||
|           roles = ["chat"]; |  | ||||||
|           apiBase = "http://defiant:11434"; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         "qwen2.5-coder:1.5b-base" = { |  | ||||||
|           model = "qwen2.5-coder:1.5b-base"; |  | ||||||
|           roles = ["autocomplete"]; |  | ||||||
|           apiBase = "http://defiant:11434"; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         "nomic-embed-text:latest" = { |  | ||||||
|           model = "nomic-embed-text:latest"; |  | ||||||
|           roles = ["embed"]; |  | ||||||
|           apiBase = "http://defiant:11434"; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   environment.systemPackages = with pkgs; [ |  | ||||||
|     cachefilesd |  | ||||||
|     webtoon-dl |  | ||||||
|   ]; |  | ||||||
|   services.cachefilesd.enable = true; |  | ||||||
| 
 |  | ||||||
|   programs = { |  | ||||||
|     adb.enable = true; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   networking = { |  | ||||||
|     networkmanager.enable = true; |  | ||||||
|     hostName = "horizon"; # Define your hostname. |  | ||||||
|   }; |  | ||||||
|   powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; |  | ||||||
| 
 |  | ||||||
|   hardware = { |  | ||||||
|     graphics.enable = true; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   sops.secrets = { |  | ||||||
|     "vpn-keys/tailscale-authkey/horizon" = { |  | ||||||
|       sopsFile = "${inputs.secrets}/vpn-keys.yaml"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   services = { |  | ||||||
|     # sudo fprintd-enroll |  | ||||||
|     fprintd = { |  | ||||||
|       enable = true; |  | ||||||
|     }; |  | ||||||
|     # firmware update tool |  | ||||||
|     fwupd = { |  | ||||||
|       enable = true; |  | ||||||
|     }; |  | ||||||
|     tailscale = { |  | ||||||
|       enable = true; |  | ||||||
|       authKeyFile = config.sops.secrets."vpn-keys/tailscale-authkey/horizon".path; |  | ||||||
|       useRoutingFeatures = "client"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     syncthing.enable = true; |  | ||||||
| 
 |  | ||||||
|     ollama = { |  | ||||||
|       enable = true; |  | ||||||
|       loadModels = [ |  | ||||||
|         "llama3.1:8b" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # Enable network-online.target for better network dependency handling |  | ||||||
|   systemd.services.NetworkManager-wait-online.enable = true; |  | ||||||
| 
 |  | ||||||
|   # Enable touchpad support (enabled default in most desktopManager). |  | ||||||
|   # services.xserver.libinput.enable = true; |  | ||||||
| 
 |  | ||||||
|   # Open ports in the firewall. |  | ||||||
|   # networking.firewall.allowedTCPPorts = [ ... ]; |  | ||||||
|   # networking.firewall.allowedUDPPorts = [ ... ]; |  | ||||||
|   # Or disable the firewall altogether. |  | ||||||
|   # networking.firewall.enable = false; |  | ||||||
| 
 |  | ||||||
|   # This value determines the NixOS release from which the default |  | ||||||
|   # settings for stateful data, like file locations and database versions |  | ||||||
|   # on your system were taken. It's perfectly fine and recommended to leave |  | ||||||
|   # this value at the release version of the first install of this system. |  | ||||||
|   # Before changing this value read the documentation for this option |  | ||||||
|   # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). |  | ||||||
|   system.stateVersion = "23.05"; # Did you read the comment? |  | ||||||
| } |  | ||||||
|  | @ -1,8 +0,0 @@ | ||||||
| # leyla laptop |  | ||||||
| {...}: { |  | ||||||
|   imports = [ |  | ||||||
|     ./configuration.nix |  | ||||||
|     ./hardware-configuration.nix |  | ||||||
|     # ./network-mount.nix |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,45 +0,0 @@ | ||||||
| # Do not modify this file!  It was generated by ‘nixos-generate-config’ |  | ||||||
| # and may be overwritten by future invocations.  Please make changes |  | ||||||
| # to /etc/nixos/configuration.nix instead. |  | ||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   modulesPath, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   imports = [ |  | ||||||
|     (modulesPath + "/installer/scan/not-detected.nix") |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   boot.initrd.availableKernelModules = ["xhci_pci" "thunderbolt" "nvme"]; |  | ||||||
|   boot.initrd.kernelModules = []; |  | ||||||
|   boot.kernelModules = ["kvm-intel"]; |  | ||||||
|   boot.extraModulePackages = []; |  | ||||||
| 
 |  | ||||||
|   fileSystems = { |  | ||||||
|     "/" = { |  | ||||||
|       device = "/dev/disk/by-uuid/866d422b-f816-4ad9-9846-791839cb9337"; |  | ||||||
|       fsType = "ext4"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     "/boot" = { |  | ||||||
|       device = "/dev/disk/by-uuid/E138-65B5"; |  | ||||||
|       fsType = "vfat"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   swapDevices = [ |  | ||||||
|     {device = "/dev/disk/by-uuid/be98e952-a072-4c3a-8c12-69500b5a2fff";} |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   # 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"; |  | ||||||
|   hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; |  | ||||||
| } |  | ||||||
|  | @ -1,76 +0,0 @@ | ||||||
| {...}: { |  | ||||||
|   boot.supportedFilesystems = ["nfs"]; |  | ||||||
| 
 |  | ||||||
|   fileSystems = { |  | ||||||
|     "/mnt/leyla_documents" = { |  | ||||||
|       device = "defiant:/exports/leyla_documents"; |  | ||||||
|       fsType = "nfs"; |  | ||||||
|       options = [ |  | ||||||
|         "x-systemd.automount" |  | ||||||
|         "noauto" |  | ||||||
|         "noatime" |  | ||||||
|         "nofail" |  | ||||||
|         "soft" |  | ||||||
|         "intr" # Allow interruption of NFS calls |  | ||||||
|         "timeo=30" # 3 second timeout (30 deciseconds) |  | ||||||
|         "retrans=2" # Only 2 retries before giving up |  | ||||||
|         "x-systemd.idle-timeout=300" # 5 minute idle timeout for mobile |  | ||||||
|         "x-systemd.device-timeout=15" # 15 second device timeout |  | ||||||
|         "bg" # Background mount - don't block boot |  | ||||||
|         "fsc" # Enable caching |  | ||||||
|         "_netdev" # Network device - wait for network |  | ||||||
|         "x-systemd.requires=network-online.target" # Require network to be online |  | ||||||
|         "x-systemd.after=network-online.target" # Start after network is online |  | ||||||
|         "x-systemd.mount-timeout=30" # 30 second mount timeout |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     "/mnt/users_documents" = { |  | ||||||
|       device = "defiant:/exports/users_documents"; |  | ||||||
|       fsType = "nfs"; |  | ||||||
|       options = [ |  | ||||||
|         "x-systemd.automount" |  | ||||||
|         "noauto" |  | ||||||
|         "nofail" |  | ||||||
|         "soft" |  | ||||||
|         "intr" |  | ||||||
|         "timeo=30" |  | ||||||
|         "retrans=2" |  | ||||||
|         "x-systemd.idle-timeout=300" |  | ||||||
|         "x-systemd.device-timeout=15" |  | ||||||
|         "bg" |  | ||||||
|         "fsc" |  | ||||||
|         "_netdev" |  | ||||||
|         "x-systemd.requires=network-online.target" |  | ||||||
|         "x-systemd.after=network-online.target" |  | ||||||
|         "x-systemd.mount-timeout=30" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     "/mnt/media" = { |  | ||||||
|       device = "defiant:/exports/media"; |  | ||||||
|       fsType = "nfs"; |  | ||||||
|       options = [ |  | ||||||
|         "x-systemd.automount" |  | ||||||
|         "noauto" |  | ||||||
|         "noatime" |  | ||||||
|         "nofail" |  | ||||||
|         "soft" |  | ||||||
|         "intr" |  | ||||||
|         "timeo=30" |  | ||||||
|         "retrans=2" |  | ||||||
|         "x-systemd.idle-timeout=300" |  | ||||||
|         "x-systemd.device-timeout=15" |  | ||||||
|         "bg" |  | ||||||
|         # Mobile-optimized read settings |  | ||||||
|         "rsize=8192" # Smaller read size for mobile |  | ||||||
|         "wsize=8192" # Smaller write size for mobile |  | ||||||
|         "fsc" |  | ||||||
|         "_netdev" |  | ||||||
|         "x-systemd.requires=network-online.target" |  | ||||||
|         "x-systemd.after=network-online.target" |  | ||||||
|         "x-systemd.mount-timeout=30" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,160 +0,0 @@ | ||||||
| { |  | ||||||
|   inputs, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   imports = [ |  | ||||||
|     ./monitors.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   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"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
|   host = { |  | ||||||
|     users = { |  | ||||||
|       leyla = { |  | ||||||
|         isDesktopUser = true; |  | ||||||
|         isTerminalUser = true; |  | ||||||
|         isPrincipleUser = true; |  | ||||||
|       }; |  | ||||||
|       eve.isDesktopUser = true; |  | ||||||
|     }; |  | ||||||
|     hardware = { |  | ||||||
|       piperMouse.enable = true; |  | ||||||
|       viaKeyboard.enable = true; |  | ||||||
|       openRGB.enable = true; |  | ||||||
|       graphicsAcceleration.enable = true; |  | ||||||
|       directAccess.enable = true; |  | ||||||
|     }; |  | ||||||
|     ai = { |  | ||||||
|       enable = true; |  | ||||||
|       # TODO: benchmark twilight against defiant and prune this list of models that are faster on defiant |  | ||||||
|       models = { |  | ||||||
|         # conversation models |  | ||||||
|         "Llama 3.1 8B" = { |  | ||||||
|           model = "lamma3.1:8b"; |  | ||||||
|           roles = ["chat" "edit" "apply"]; |  | ||||||
|         }; |  | ||||||
|         "deepseek-r1:8b" = { |  | ||||||
|           model = "deepseek-r1:8b"; |  | ||||||
|           roles = ["chat" "edit" "apply"]; |  | ||||||
|         }; |  | ||||||
|         "deepseek-r1:32b" = { |  | ||||||
|           model = "deepseek-r1:32b"; |  | ||||||
|           roles = ["chat" "edit" "apply"]; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         # auto complete models |  | ||||||
|         "qwen2.5-coder:1.5b-base" = { |  | ||||||
|           model = "qwen2.5-coder:1.5b-base"; |  | ||||||
|           roles = ["autocomplete"]; |  | ||||||
|         }; |  | ||||||
|         "qwen2.5-coder:7b" = { |  | ||||||
|           model = "qwen2.5-coder:7b"; |  | ||||||
|           roles = ["autocomplete"]; |  | ||||||
|         }; |  | ||||||
|         "deepseek-coder:6.7b" = { |  | ||||||
|           model = "deepseek-coder:6.7b"; |  | ||||||
|           roles = ["autocomplete"]; |  | ||||||
|         }; |  | ||||||
|         "deepseek-coder:33b" = { |  | ||||||
|           model = "deepseek-coder:33b"; |  | ||||||
|           roles = ["autocomplete"]; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         # agent models |  | ||||||
|         "qwen3:32b" = { |  | ||||||
|           model = "qwen3:32b"; |  | ||||||
|           roles = ["chat" "edit" "apply"]; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         # embedding models |  | ||||||
|         "nomic-embed-text:latest" = { |  | ||||||
|           model = "nomic-embed-text:latest"; |  | ||||||
|           roles = ["embed"]; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
|   services = { |  | ||||||
|     ollama = { |  | ||||||
|       enable = true; |  | ||||||
|       exposePort = true; |  | ||||||
| 
 |  | ||||||
|       loadModels = [ |  | ||||||
|         # conversation models |  | ||||||
|         "llama3.1:8b" |  | ||||||
|         "deepseek-r1:8b" |  | ||||||
|         "deepseek-r1:32b" |  | ||||||
| 
 |  | ||||||
|         # auto complete models |  | ||||||
|         "qwen2.5-coder:1.5b-base" |  | ||||||
|         "qwen2.5-coder:7b" |  | ||||||
|         "deepseek-coder:6.7b" |  | ||||||
|         "deepseek-coder:33b" |  | ||||||
| 
 |  | ||||||
|         # agent models |  | ||||||
|         "qwen3:32b" |  | ||||||
| 
 |  | ||||||
|         # embedding models |  | ||||||
|         "nomic-embed-text:latest" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     tailscale = { |  | ||||||
|       enable = true; |  | ||||||
|       authKeyFile = config.sops.secrets."vpn-keys/tailscale-authkey/twilight".path; |  | ||||||
|       useRoutingFeatures = "both"; |  | ||||||
|       extraUpFlags = [ |  | ||||||
|         "--advertise-exit-node" |  | ||||||
|         "--advertise-routes=192.168.0.0/24" |  | ||||||
|       ]; |  | ||||||
|       extraSetFlags = [ |  | ||||||
|         "--advertise-exit-node" |  | ||||||
|         "--advertise-routes=192.168.0.0/24" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     syncthing.enable = true; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # Enable network-online.target for better network dependency handling |  | ||||||
|   systemd.services.NetworkManager-wait-online.enable = true; |  | ||||||
| 
 |  | ||||||
|   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; |  | ||||||
| 
 |  | ||||||
|   # Enable touchpad support (enabled default in most desktopManager). |  | ||||||
|   # services.xserver.libinput.enable = true; |  | ||||||
| 
 |  | ||||||
|   # This value determines the NixOS release from which the default |  | ||||||
|   # settings for stateful data, like file locations and database versions |  | ||||||
|   # on your system were taken. It's perfectly fine and recommended to leave |  | ||||||
|   # this value at the release version of the first install of this system. |  | ||||||
|   # Before changing this value read the documentation for this option |  | ||||||
|   # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). |  | ||||||
|   system.stateVersion = "23.05"; # Did you read the comment? |  | ||||||
| } |  | ||||||
|  | @ -1,9 +0,0 @@ | ||||||
| # leyla desktop |  | ||||||
| {...}: { |  | ||||||
|   imports = [ |  | ||||||
|     ./configuration.nix |  | ||||||
|     ./hardware-configuration.nix |  | ||||||
|     ./nvidia-drivers.nix |  | ||||||
|     # ./network-mount.nix |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,42 +0,0 @@ | ||||||
| # Do not modify this file!  It was generated by ‘nixos-generate-config’ |  | ||||||
| # and may be overwritten by future invocations.  Please make changes |  | ||||||
| # to /etc/nixos/configuration.nix instead. |  | ||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   modulesPath, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   imports = [ |  | ||||||
|     (modulesPath + "/installer/scan/not-detected.nix") |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "sd_mod"]; |  | ||||||
|   boot.initrd.kernelModules = []; |  | ||||||
|   boot.kernelModules = ["kvm-amd"]; |  | ||||||
|   boot.extraModulePackages = []; |  | ||||||
| 
 |  | ||||||
|   fileSystems = { |  | ||||||
|     "/" = { |  | ||||||
|       device = "/dev/disk/by-uuid/8be49c65-2b57-48f1-b74d-244d26061adb"; |  | ||||||
|       fsType = "ext4"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     "/boot" = { |  | ||||||
|       device = "/dev/disk/by-uuid/3006-3867"; |  | ||||||
|       fsType = "vfat"; |  | ||||||
|       options = ["fmask=0022" "dmask=0022"]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   swapDevices = []; |  | ||||||
| 
 |  | ||||||
|   # 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; |  | ||||||
| 
 |  | ||||||
|   nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; |  | ||||||
|   hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; |  | ||||||
| } |  | ||||||
|  | @ -1,199 +0,0 @@ | ||||||
| {pkgs, ...}: { |  | ||||||
|   systemd.tmpfiles.rules = [ |  | ||||||
|     "L+ /run/gdm/.config/monitors.xml - - - - ${pkgs.writeText "gdm-monitors.xml" '' |  | ||||||
|       <monitors version="2"> |  | ||||||
|         <configuration> |  | ||||||
|           <logicalmonitor> |  | ||||||
|             <x>0</x> |  | ||||||
|             <y>156</y> |  | ||||||
|             <scale>1</scale> |  | ||||||
|             <monitor> |  | ||||||
|               <monitorspec> |  | ||||||
|                 <connector>DP-4</connector> |  | ||||||
|                 <vendor>DEL</vendor> |  | ||||||
|                 <product>DELL U2719D</product> |  | ||||||
|                 <serial>8RGXNS2</serial> |  | ||||||
|               </monitorspec> |  | ||||||
|               <mode> |  | ||||||
|                 <width>2560</width> |  | ||||||
|                 <height>1440</height> |  | ||||||
|                 <rate>59.951</rate> |  | ||||||
|               </mode> |  | ||||||
|             </monitor> |  | ||||||
|           </logicalmonitor> |  | ||||||
|           <logicalmonitor> |  | ||||||
|             <x>2560</x> |  | ||||||
|             <y>324</y> |  | ||||||
|             <scale>1</scale> |  | ||||||
|             <primary>yes</primary> |  | ||||||
|             <monitor> |  | ||||||
|               <monitorspec> |  | ||||||
|                 <connector>DP-2</connector> |  | ||||||
|                 <vendor>GSM</vendor> |  | ||||||
|                 <product>LG ULTRAGEAR</product> |  | ||||||
|                 <serial>0x00068c96</serial> |  | ||||||
|               </monitorspec> |  | ||||||
|               <mode> |  | ||||||
|                 <width>1920</width> |  | ||||||
|                 <height>1080</height> |  | ||||||
|                 <rate>240.001</rate> |  | ||||||
|               </mode> |  | ||||||
|             </monitor> |  | ||||||
|           </logicalmonitor> |  | ||||||
|           <logicalmonitor> |  | ||||||
|             <x>4480</x> |  | ||||||
|             <y>0</y> |  | ||||||
|             <scale>1</scale> |  | ||||||
|             <transform> |  | ||||||
|               <rotation>left</rotation> |  | ||||||
|               <flipped>no</flipped> |  | ||||||
|             </transform> |  | ||||||
|             <monitor> |  | ||||||
|               <monitorspec> |  | ||||||
|                 <connector>HDMI-0</connector> |  | ||||||
|                 <vendor>HWP</vendor> |  | ||||||
|                 <product>HP w2207</product> |  | ||||||
|                 <serial>CND7332S88</serial> |  | ||||||
|               </monitorspec> |  | ||||||
|               <mode> |  | ||||||
|                 <width>1600</width> |  | ||||||
|                 <height>1000</height> |  | ||||||
|                 <rate>59.999</rate> |  | ||||||
|               </mode> |  | ||||||
|             </monitor> |  | ||||||
|           </logicalmonitor> |  | ||||||
|         </configuration> |  | ||||||
|         <configuration> |  | ||||||
|           <logicalmonitor> |  | ||||||
|             <x>0</x> |  | ||||||
|             <y>0</y> |  | ||||||
|             <scale>1</scale> |  | ||||||
|             <primary>yes</primary> |  | ||||||
|             <monitor> |  | ||||||
|               <monitorspec> |  | ||||||
|                 <connector>DP-1</connector> |  | ||||||
|                 <vendor>DEL</vendor> |  | ||||||
|                 <product>DELL U2719D</product> |  | ||||||
|                 <serial>8RGXNS2</serial> |  | ||||||
|               </monitorspec> |  | ||||||
|               <mode> |  | ||||||
|                 <width>2560</width> |  | ||||||
|                 <height>1440</height> |  | ||||||
|                 <rate>59.951</rate> |  | ||||||
|               </mode> |  | ||||||
|             </monitor> |  | ||||||
|           </logicalmonitor> |  | ||||||
|           <logicalmonitor> |  | ||||||
|             <x>4480</x> |  | ||||||
|             <y>226</y> |  | ||||||
|             <scale>1</scale> |  | ||||||
|             <transform> |  | ||||||
|               <rotation>left</rotation> |  | ||||||
|               <flipped>no</flipped> |  | ||||||
|             </transform> |  | ||||||
|             <monitor> |  | ||||||
|               <monitorspec> |  | ||||||
|                 <connector>HDMI-1</connector> |  | ||||||
|                 <vendor>HWP</vendor> |  | ||||||
|                 <product>HP w2207</product> |  | ||||||
|                 <serial>CND7332S88</serial> |  | ||||||
|               </monitorspec> |  | ||||||
|               <mode> |  | ||||||
|                 <width>1680</width> |  | ||||||
|                 <height>1050</height> |  | ||||||
|                 <rate>59.954</rate> |  | ||||||
|               </mode> |  | ||||||
|             </monitor> |  | ||||||
|           </logicalmonitor> |  | ||||||
|           <logicalmonitor> |  | ||||||
|             <x>2560</x> |  | ||||||
|             <y>226</y> |  | ||||||
|             <scale>1</scale> |  | ||||||
|             <monitor> |  | ||||||
|               <monitorspec> |  | ||||||
|                 <connector>DP-2</connector> |  | ||||||
|                 <vendor>GSM</vendor> |  | ||||||
|                 <product>LG ULTRAGEAR</product> |  | ||||||
|                 <serial>0x00068c96</serial> |  | ||||||
|               </monitorspec> |  | ||||||
|               <mode> |  | ||||||
|                 <width>1920</width> |  | ||||||
|                 <height>1080</height> |  | ||||||
|                 <rate>240.001</rate> |  | ||||||
|               </mode> |  | ||||||
|             </monitor> |  | ||||||
|           </logicalmonitor> |  | ||||||
|         </configuration> |  | ||||||
|         <configuration> |  | ||||||
|           <logicalmonitor> |  | ||||||
|             <x>2560</x> |  | ||||||
|             <y>228</y> |  | ||||||
|             <scale>1</scale> |  | ||||||
|             <primary>yes</primary> |  | ||||||
|             <monitor> |  | ||||||
|               <monitorspec> |  | ||||||
|                 <connector>DP-2</connector> |  | ||||||
|                 <vendor>GSM</vendor> |  | ||||||
|                 <product>LG ULTRAGEAR</product> |  | ||||||
|                 <serial>0x00068c96</serial> |  | ||||||
|               </monitorspec> |  | ||||||
|               <mode> |  | ||||||
|                 <width>1920</width> |  | ||||||
|                 <height>1080</height> |  | ||||||
|                 <rate>240.001</rate> |  | ||||||
|               </mode> |  | ||||||
|             </monitor> |  | ||||||
|           </logicalmonitor> |  | ||||||
|           <logicalmonitor> |  | ||||||
|             <x>4480</x> |  | ||||||
|             <y>69</y> |  | ||||||
|             <scale>1</scale> |  | ||||||
|             <transform> |  | ||||||
|               <rotation>left</rotation> |  | ||||||
|               <flipped>no</flipped> |  | ||||||
|             </transform> |  | ||||||
|             <monitor> |  | ||||||
|               <monitorspec> |  | ||||||
|                 <connector>HDMI-1</connector> |  | ||||||
|                 <vendor>HWP</vendor> |  | ||||||
|                 <product>HP w2207</product> |  | ||||||
|                 <serial>CND7332S88</serial> |  | ||||||
|               </monitorspec> |  | ||||||
|               <mode> |  | ||||||
|                 <width>1680</width> |  | ||||||
|                 <height>1050</height> |  | ||||||
|                 <rate>59.954</rate> |  | ||||||
|               </mode> |  | ||||||
|             </monitor> |  | ||||||
|           </logicalmonitor> |  | ||||||
|           <logicalmonitor> |  | ||||||
|             <x>0</x> |  | ||||||
|             <y>0</y> |  | ||||||
|             <scale>1</scale> |  | ||||||
|             <monitor> |  | ||||||
|               <monitorspec> |  | ||||||
|                 <connector>DP-3</connector> |  | ||||||
|                 <vendor>DEL</vendor> |  | ||||||
|                 <product>DELL U2719D</product> |  | ||||||
|                 <serial>8RGXNS2</serial> |  | ||||||
|               </monitorspec> |  | ||||||
|               <mode> |  | ||||||
|                 <width>2560</width> |  | ||||||
|                 <height>1440</height> |  | ||||||
|                 <rate>59.951</rate> |  | ||||||
|               </mode> |  | ||||||
|             </monitor> |  | ||||||
|           </logicalmonitor> |  | ||||||
|           <disabled> |  | ||||||
|             <monitorspec> |  | ||||||
|               <connector>None-1</connector> |  | ||||||
|               <vendor>unknown</vendor> |  | ||||||
|               <product>unknown</product> |  | ||||||
|               <serial>unknown</serial> |  | ||||||
|             </monitorspec> |  | ||||||
|           </disabled> |  | ||||||
|         </configuration> |  | ||||||
|       </monitors> |  | ||||||
|     ''}" |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,72 +0,0 @@ | ||||||
| {...}: { |  | ||||||
|   boot.supportedFilesystems = ["nfs"]; |  | ||||||
| 
 |  | ||||||
|   fileSystems = { |  | ||||||
|     "/mnt/leyla_documents" = { |  | ||||||
|       device = "defiant:/exports/leyla_documents"; |  | ||||||
|       fsType = "nfs"; |  | ||||||
|       options = [ |  | ||||||
|         "x-systemd.automount" |  | ||||||
|         "noauto" |  | ||||||
|         "noatime" |  | ||||||
|         "nofail" |  | ||||||
|         "soft" |  | ||||||
|         "intr" # Allow interruption of NFS calls |  | ||||||
|         "timeo=50" # 5 second timeout (50 deciseconds) - longer than mobile |  | ||||||
|         "retrans=3" # 3 retries for desktop |  | ||||||
|         "x-systemd.idle-timeout=600" # 10 minute idle timeout for desktop |  | ||||||
|         "x-systemd.device-timeout=30" # 30 second device timeout |  | ||||||
|         "bg" # Background mount - don't block boot |  | ||||||
|         "fsc" # Enable caching |  | ||||||
|         "_netdev" # Network device - wait for network |  | ||||||
|         "x-systemd.requires=network-online.target" # Require network to be online |  | ||||||
|         "x-systemd.after=network-online.target" # Start after network is online |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     "/mnt/users_documents" = { |  | ||||||
|       device = "defiant:/exports/users_documents"; |  | ||||||
|       fsType = "nfs"; |  | ||||||
|       options = [ |  | ||||||
|         "x-systemd.automount" |  | ||||||
|         "noauto" |  | ||||||
|         "nofail" |  | ||||||
|         "soft" |  | ||||||
|         "intr" |  | ||||||
|         "timeo=50" |  | ||||||
|         "retrans=3" |  | ||||||
|         "x-systemd.idle-timeout=600" |  | ||||||
|         "bg" |  | ||||||
|         "fsc" |  | ||||||
|         "_netdev" |  | ||||||
|         "x-systemd.requires=network-online.target" |  | ||||||
|         "x-systemd.after=network-online.target" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     "/mnt/media" = { |  | ||||||
|       device = "defiant:/exports/media"; |  | ||||||
|       fsType = "nfs"; |  | ||||||
|       options = [ |  | ||||||
|         "x-systemd.automount" |  | ||||||
|         "noauto" |  | ||||||
|         "noatime" |  | ||||||
|         "nofail" |  | ||||||
|         "soft" |  | ||||||
|         "intr" |  | ||||||
|         "timeo=50" |  | ||||||
|         "retrans=3" |  | ||||||
|         "x-systemd.idle-timeout=600" |  | ||||||
|         "x-systemd.device-timeout=30" |  | ||||||
|         "bg" |  | ||||||
|         # Desktop-optimized read settings |  | ||||||
|         "rsize=32768" # Larger read size for desktop |  | ||||||
|         "wsize=32768" # Larger write size for desktop |  | ||||||
|         "fsc" |  | ||||||
|         "_netdev" |  | ||||||
|         "x-systemd.requires=network-online.target" |  | ||||||
|         "x-systemd.after=network-online.target" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,47 +0,0 @@ | ||||||
| {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 = true; |  | ||||||
| 
 |  | ||||||
|       # 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; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,119 +0,0 @@ | ||||||
| {config, ...}: { |  | ||||||
|   folders = { |  | ||||||
|     leyla_documents = { |  | ||||||
|       id = "hvrj0-9bm1p"; |  | ||||||
|     }; |  | ||||||
|     leyla_calendar = { |  | ||||||
|       id = "8oatl-1rv6w"; |  | ||||||
|     }; |  | ||||||
|     leyla_supernote_notes = { |  | ||||||
|       id = "dwbuv-zffnf"; |  | ||||||
|     }; |  | ||||||
|     eve_records = { |  | ||||||
|       id = "by6at-d4h9n"; |  | ||||||
|     }; |  | ||||||
|     share = { |  | ||||||
|       id = "73ot0-cxmkx"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
|   devices = { |  | ||||||
|     defiant = { |  | ||||||
|       id = "3R6E6Y4-2F7MF2I-IGB4WE6-A3SQSMV-LIBYSAM-2OXHHU2-KJ6CGIV-QNMCPAR"; |  | ||||||
|       folders = { |  | ||||||
|         leyla_documents = { |  | ||||||
|           folder = config.folders.leyla_documents; |  | ||||||
|           path = "/mnt/sync/leyla/documents"; |  | ||||||
|         }; |  | ||||||
|         leyla_calendar = { |  | ||||||
|           folder = config.folders.leyla_calendar; |  | ||||||
|           path = "/mnt/sync/leyla/calendar"; |  | ||||||
|         }; |  | ||||||
|         leyla_supernote_notes = { |  | ||||||
|           folder = config.folders.leyla_supernote_notes; |  | ||||||
|           path = "/mnt/sync/leyla/notes"; |  | ||||||
|         }; |  | ||||||
|         eve_records = { |  | ||||||
|           folder = config.folders.eve_records; |  | ||||||
|           path = "/mnt/sync/eve/records"; |  | ||||||
|         }; |  | ||||||
|         share = { |  | ||||||
|           folder = config.folders.share; |  | ||||||
|           path = "/mnt/sync/default/share"; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     twilight = { |  | ||||||
|       id = "UDIYL7V-OAZ2BI3-EJRAWFB-GZYVDWR-JNUYW3F-FFQ35MU-XBTGWEF-QD6K6QN"; |  | ||||||
|       folders = { |  | ||||||
|         leyla_documents = { |  | ||||||
|           folder = config.folders.leyla_documents; |  | ||||||
|           path = "/mnt/sync/leyla/documents"; |  | ||||||
|         }; |  | ||||||
|         share = { |  | ||||||
|           folder = config.folders.share; |  | ||||||
|           path = "/mnt/sync/default/share"; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     horizon = { |  | ||||||
|       id = "OGPAEU6-5UR56VL-SP7YC4Y-IMVCRTO-XFD4CYN-Z6T5TZO-PFZNAT6-4MKWPQS"; |  | ||||||
|       folders = { |  | ||||||
|         leyla_documents = { |  | ||||||
|           folder = config.folders.leyla_documents; |  | ||||||
|           path = "/mnt/sync/leyla/documents"; |  | ||||||
|         }; |  | ||||||
|         share = { |  | ||||||
|           folder = config.folders.share; |  | ||||||
|           path = "/mnt/sync/default/share"; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     coven = { |  | ||||||
|       id = "QGU7NN6-OMXTWVA-YCZ73S5-2O7ECTS-MUCTN4M-YH6WLEL-U4U577I-7PBNCA5"; |  | ||||||
|       folders = { |  | ||||||
|         leyla_documents = { |  | ||||||
|           folder = config.folders.leyla_documents; |  | ||||||
|         }; |  | ||||||
|         share = { |  | ||||||
|           folder = config.folders.share; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     ceder = { |  | ||||||
|       id = "MGXUJBS-7AENXHB-7YQRNWG-QILKEJD-5462U2E-WAQW4R4-I2TVK5H-SMK6LAA"; |  | ||||||
|       folders = { |  | ||||||
|         share = { |  | ||||||
|           folder = config.folders.share; |  | ||||||
|         }; |  | ||||||
|         leyla_documents = { |  | ||||||
|           folder = config.folders.leyla_documents; |  | ||||||
|         }; |  | ||||||
|         leyla_calendar = { |  | ||||||
|           folder = config.folders.leyla_calendar; |  | ||||||
|         }; |  | ||||||
|         leyla_notes = { |  | ||||||
|           folder = config.folders.leyla_supernote_notes; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     emergent = { |  | ||||||
|       id = "6MIDMKJ-7IFHXVX-FIR3YTB-KVE75LN-PA6IOTN-I257LWR-MMC4K6C-5H4SHQN"; |  | ||||||
|       folders = { |  | ||||||
|         eve_records = { |  | ||||||
|           folder = config.folders.eve_records; |  | ||||||
|         }; |  | ||||||
|         share = { |  | ||||||
|           folder = config.folders.share; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     shale = { |  | ||||||
|       id = "AOAXEVD-QJ2IVRA-6G44Q7Q-TGUPXU2-FWWKOBH-DPKWC5N-LBAEHWJ-7EQF4AM"; |  | ||||||
|       folders = { |  | ||||||
|         share = { |  | ||||||
|           folder = config.folders.share; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1 +0,0 @@ | ||||||
| "/var/lib/sops-nix" |  | ||||||
							
								
								
									
										60
									
								
								enviroments/client/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								enviroments/client/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | ||||||
|  | { pkgs, ... }: | ||||||
|  | { | ||||||
|  |   imports = [ | ||||||
|  |     ../common | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   services = { | ||||||
|  | 
 | ||||||
|  |     # Enable CUPS to print documents. | ||||||
|  |     printing.enable = true; | ||||||
|  | 
 | ||||||
|  |     xserver = { | ||||||
|  |       # Enable the X11 windowing system. | ||||||
|  |       enable = true; | ||||||
|  | 
 | ||||||
|  |       # Enable the GNOME Desktop Environment. | ||||||
|  |       displayManager.gdm.enable = true; | ||||||
|  |       desktopManager = { | ||||||
|  |         gnome.enable = true; | ||||||
|  |         xterm.enable = false; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       # Get rid of xTerm | ||||||
|  |       excludePackages = [ pkgs.xterm ]; | ||||||
|  | 
 | ||||||
|  |       # Configure keymap in X11 | ||||||
|  |       xkb = { | ||||||
|  |         layout = "us,it,de"; | ||||||
|  |         variant = ""; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     pipewire = { | ||||||
|  |       enable = true; | ||||||
|  |       alsa.enable = true; | ||||||
|  |       alsa.support32Bit = true; | ||||||
|  |       pulse.enable = true; | ||||||
|  |       # If you want to use JACK applications, uncomment this | ||||||
|  |       #jack.enable = true; | ||||||
|  | 
 | ||||||
|  |       # use the example session manager (no others are packaged yet so this is enabled by default, | ||||||
|  |       # no need to redefine it in your config for now) | ||||||
|  |       #media-session.enable = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   # Enable sound with pipewire. | ||||||
|  |   hardware.pulseaudio.enable = false; | ||||||
|  |   security.rtkit.enable = true; | ||||||
|  | 
 | ||||||
|  |   environment.systemPackages = with pkgs; [ | ||||||
|  |     # helvetica font | ||||||
|  |     aileron | ||||||
|  | 
 | ||||||
|  |     cachefilesd | ||||||
|  | 
 | ||||||
|  |     gnomeExtensions.dash-to-dock | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										71
									
								
								enviroments/common/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								enviroments/common/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,71 @@ | ||||||
|  | { pkgs, ... }: | ||||||
|  | { | ||||||
|  |   imports = [ | ||||||
|  |       ../../users | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   nix.settings.experimental-features = [ "nix-command" "flakes" ]; | ||||||
|  |   nix.settings.trusted-users = [ "leyla" ]; | ||||||
|  | 
 | ||||||
|  |   # Enable networking | ||||||
|  |   networking.networkmanager.enable = true; | ||||||
|  | 
 | ||||||
|  |   # Set your time zone. | ||||||
|  |   time.timeZone = "America/Chicago"; | ||||||
|  | 
 | ||||||
|  |   i18n.defaultLocale = "en_US.UTF-8"; | ||||||
|  | 
 | ||||||
|  |   i18n.extraLocaleSettings = { | ||||||
|  |     LC_ADDRESS = "en_US.UTF-8"; | ||||||
|  |     LC_IDENTIFICATION = "en_US.UTF-8"; | ||||||
|  |     LC_MEASUREMENT = "en_US.UTF-8"; | ||||||
|  |     LC_MONETARY = "en_US.UTF-8"; | ||||||
|  |     LC_NAME = "en_US.UTF-8"; | ||||||
|  |     LC_NUMERIC = "en_US.UTF-8"; | ||||||
|  |     LC_PAPER = "en_US.UTF-8"; | ||||||
|  |     LC_TELEPHONE = "en_US.UTF-8"; | ||||||
|  |     LC_TIME = "en_US.UTF-8"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   users.groups.users = {}; | ||||||
|  | 
 | ||||||
|  |   services = { | ||||||
|  |     openssh = { | ||||||
|  |       enable = true; | ||||||
|  |       ports = [ 22 ]; | ||||||
|  |       settings = { | ||||||
|  |         PasswordAuthentication = false; | ||||||
|  |         AllowUsers = [ "leyla" ]; # Allows all users by default. Can be [ "user1" "user2" ] | ||||||
|  |         UseDns = true; | ||||||
|  |         X11Forwarding = false; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   sops = { | ||||||
|  |     defaultSopsFile = ../../secrets/secrets.yaml; | ||||||
|  |     defaultSopsFormat = "yaml"; | ||||||
|  |     gnupg.sshKeyPaths = []; | ||||||
|  | 
 | ||||||
|  |     age ={ | ||||||
|  |       keyFile = "/var/lib/sops-nix/key.txt"; | ||||||
|  |       sshKeyPaths = []; | ||||||
|  |       # generateKey = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |   environment.sessionVariables = { | ||||||
|  |     AGE_KEY_FILE_LOCATION = "/var/lib/sops-nix/"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # List packages installed in system profile. | ||||||
|  |   environment.systemPackages = with pkgs; [ | ||||||
|  |     wget | ||||||
|  | 
 | ||||||
|  |     # version control | ||||||
|  |     git | ||||||
|  | 
 | ||||||
|  |     # system debuging tools | ||||||
|  |     iputils | ||||||
|  |     dnsutils | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										63
									
								
								enviroments/server/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								enviroments/server/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | ||||||
|  | { config, ... }: | ||||||
|  | { | ||||||
|  |   imports = [ | ||||||
|  |     ../common | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   services = let | ||||||
|  |     headscaleDomain = "headscale.jan-leila.com"; | ||||||
|  |   in { | ||||||
|  |     nfs.server = { | ||||||
|  |       enable = true; | ||||||
|  |       exports = '' | ||||||
|  |         /home/leyla 192.168.1.0/22(rw,sync,no_subtree_check,crossmnt) | ||||||
|  |         /home/eve   192.168.1.0/22(rw,sync,no_subtree_check,crossmnt) | ||||||
|  |         /home/ester 192.168.1.0/22(rw,sync,no_subtree_check,crossmnt) | ||||||
|  |         /home/users 192.168.1.0/22(rw,sync,no_subtree_check,crossmnt) | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     headscale = { | ||||||
|  |       enable = true; | ||||||
|  |       address = "0.0.0.0"; | ||||||
|  |       port = 8080; | ||||||
|  |       settings = { | ||||||
|  |         server_url = "https://${headscaleDomain}"; | ||||||
|  |         dns_config.base_domain = "jan-leila.com"; | ||||||
|  |         logtail.enabled = false; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     nginx = { | ||||||
|  |       enable = false; # TODO: enable this when you want to test all the configs | ||||||
|  |       virtualHosts = { | ||||||
|  |         ${headscaleDomain} = { | ||||||
|  |           forceSSL = true; | ||||||
|  |           enableACME = true; | ||||||
|  |           locations."/" = { | ||||||
|  |             proxyPass = | ||||||
|  |               "http://localhost:${toString config.services.headscale.port}"; | ||||||
|  |             proxyWebsockets = true; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   security.acme = { | ||||||
|  |     acceptTerms = true; | ||||||
|  |     defaults.email = "jan-leila@protonmail.com"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # disable computer sleeping | ||||||
|  |   systemd.targets = { | ||||||
|  |     sleep.enable = false; | ||||||
|  |     suspend.enable = false; | ||||||
|  |     hibernate.enable = false; | ||||||
|  |     hybrid-sleep.enable = false; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   networking.firewall.allowedTCPPorts = [ 2049 ]; | ||||||
|  | 
 | ||||||
|  |   environment.systemPackages = [ config.services.headscale.package ]; | ||||||
|  | } | ||||||
							
								
								
									
										367
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										367
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							|  | @ -1,23 +1,5 @@ | ||||||
| { | { | ||||||
|   "nodes": { |   "nodes": { | ||||||
|     "devshell": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": "nixpkgs" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1741473158, |  | ||||||
|         "narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=", |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "devshell", |  | ||||||
|         "rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "devshell", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "disko": { |     "disko": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|  | @ -25,11 +7,11 @@ | ||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1758287904, |         "lastModified": 1725377834, | ||||||
|         "narHash": "sha256-IGmaEf3Do8o5Cwp1kXBN1wQmZwQN3NLfq5t4nHtVtcU=", |         "narHash": "sha256-tqoAO8oT6zEUDXte98cvA1saU9+1dLJQe3pMKLXv8ps=", | ||||||
|         "owner": "nix-community", |         "owner": "nix-community", | ||||||
|         "repo": "disko", |         "repo": "disko", | ||||||
|         "rev": "67ff9807dd148e704baadbd4fd783b54282ca627", |         "rev": "e55f9a8678adc02024a4877c2a403e3f6daf24fe", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|  | @ -38,35 +20,14 @@ | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "firefox-addons": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "dir": "pkgs/firefox-addons", |  | ||||||
|         "lastModified": 1759403080, |  | ||||||
|         "narHash": "sha256-EteyL8KyG9R5xzqyOBzyag4n2cSemu61VFrl3opJSqE=", |  | ||||||
|         "owner": "rycee", |  | ||||||
|         "repo": "nur-expressions", |  | ||||||
|         "rev": "8af6dfcbcbf1115a4f5aeed77ff0db5d3c02caf0", |  | ||||||
|         "type": "gitlab" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "dir": "pkgs/firefox-addons", |  | ||||||
|         "owner": "rycee", |  | ||||||
|         "repo": "nur-expressions", |  | ||||||
|         "type": "gitlab" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-compat": { |     "flake-compat": { | ||||||
|  |       "flake": false, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1747046372, |         "lastModified": 1696426674, | ||||||
|         "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", |         "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", | ||||||
|         "owner": "edolstra", |         "owner": "edolstra", | ||||||
|         "repo": "flake-compat", |         "repo": "flake-compat", | ||||||
|         "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", |         "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|  | @ -80,11 +41,11 @@ | ||||||
|         "systems": "systems" |         "systems": "systems" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1731533236, |         "lastModified": 1710146030, | ||||||
|         "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", |         "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", | ||||||
|         "owner": "numtide", |         "owner": "numtide", | ||||||
|         "repo": "flake-utils", |         "repo": "flake-utils", | ||||||
|         "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", |         "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|  | @ -93,57 +54,6 @@ | ||||||
|         "type": "github" |         "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" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-utils_3": { |  | ||||||
|       "inputs": { |  | ||||||
|         "systems": "systems_3" |  | ||||||
|       }, |  | ||||||
|       "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": { |     "home-manager": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|  | @ -151,11 +61,11 @@ | ||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1759337100, |         "lastModified": 1725948275, | ||||||
|         "narHash": "sha256-CcT3QvZ74NGfM+lSOILcCEeU+SnqXRvl1XCRHenZ0Us=", |         "narHash": "sha256-4QOPemDQ9VRLQaAdWuvdDBhh+lEUOAnSMHhdr4nS1mk=", | ||||||
|         "owner": "nix-community", |         "owner": "nix-community", | ||||||
|         "repo": "home-manager", |         "repo": "home-manager", | ||||||
|         "rev": "004753ae6b04c4b18aa07192c1106800aaacf6c3", |         "rev": "e5fa72bad0c6f533e8d558182529ee2acc9454fe", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|  | @ -164,134 +74,20 @@ | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "impermanence": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1737831083, |  | ||||||
|         "narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=", |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "impermanence", |  | ||||||
|         "rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "impermanence", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "lix": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1759624822, |  | ||||||
|         "narHash": "sha256-cf40qfsfpxJU/BnQ9PEj027LdPINNSsJqm+C6Ug93BA=", |  | ||||||
|         "rev": "57333a0e600c5e096a609410a2f1059b97194b1e", |  | ||||||
|         "type": "tarball", |  | ||||||
|         "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/57333a0e600c5e096a609410a2f1059b97194b1e.tar.gz" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "type": "tarball", |  | ||||||
|         "url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "lix-module": { |  | ||||||
|       "inputs": { |  | ||||||
|         "flake-utils": "flake-utils", |  | ||||||
|         "flakey-profile": "flakey-profile", |  | ||||||
|         "lix": "lix", |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1756511062, |  | ||||||
|         "narHash": "sha256-IgD1JR7scSEwlK/YAbmrcTWpAYT30LPldCUHdzXkaMs=", |  | ||||||
|         "ref": "refs/heads/main", |  | ||||||
|         "rev": "3f09a5eb772e02d98bb8878ab687d5b721f00d16", |  | ||||||
|         "revCount": 162, |  | ||||||
|         "type": "git", |  | ||||||
|         "url": "https://git.lix.systems/lix-project/nixos-module.git" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "type": "git", |  | ||||||
|         "url": "https://git.lix.systems/lix-project/nixos-module.git" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "mcp-nixos": { |  | ||||||
|       "inputs": { |  | ||||||
|         "devshell": "devshell", |  | ||||||
|         "flake-utils": "flake-utils_2", |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1759342933, |  | ||||||
|         "narHash": "sha256-mdlUFcrOfvT0Pm+Hko/6aR3xf1ao5JA2iem4KsEVjP4=", |  | ||||||
|         "owner": "utensils", |  | ||||||
|         "repo": "mcp-nixos", |  | ||||||
|         "rev": "50b02bcba32b941d2ec48fedef68641702ca5b0f", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "utensils", |  | ||||||
|         "repo": "mcp-nixos", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nix-darwin": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1758805352, |  | ||||||
|         "narHash": "sha256-BHdc43Lkayd+72W/NXRKHzX5AZ+28F3xaUs3a88/Uew=", |  | ||||||
|         "owner": "LnL7", |  | ||||||
|         "repo": "nix-darwin", |  | ||||||
|         "rev": "c48e963a5558eb1c3827d59d21c5193622a1477c", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "LnL7", |  | ||||||
|         "repo": "nix-darwin", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nix-syncthing": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1741849924, |  | ||||||
|         "narHash": "sha256-5vyb1H6HtW24QVqfI56P4QVQP6vHh1jS9ULwnunCO94=", |  | ||||||
|         "ref": "main", |  | ||||||
|         "rev": "86bcb200c83b6a5d13b3583126b9d8dc6770613a", |  | ||||||
|         "revCount": 6, |  | ||||||
|         "type": "git", |  | ||||||
|         "url": "https://git.jan-leila.com/jan-leila/nix-syncthing" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "ref": "main", |  | ||||||
|         "type": "git", |  | ||||||
|         "url": "https://git.jan-leila.com/jan-leila/nix-syncthing" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nix-vscode-extensions": { |     "nix-vscode-extensions": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-utils": "flake-utils_3", |         "flake-compat": "flake-compat", | ||||||
|  |         "flake-utils": "flake-utils", | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|           "nixpkgs" |           "nixpkgs" | ||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1759369908, |         "lastModified": 1726623336, | ||||||
|         "narHash": "sha256-IIhaE6jAge64z+fIyi/8Vtu0JdTtapbp4CvwiuIkZ1E=", |         "narHash": "sha256-mslZtr0SPdHDLUM5VRV0ipQQ4G0Piv2Kk15490w4JXM=", | ||||||
|         "owner": "nix-community", |         "owner": "nix-community", | ||||||
|         "repo": "nix-vscode-extensions", |         "repo": "nix-vscode-extensions", | ||||||
|         "rev": "a66ad2141b1440a838ead278c6edfe8a4ce75e6c", |         "rev": "b23683fef09032c85bb8b20f8ec72fb2f70075ff", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|  | @ -302,11 +98,11 @@ | ||||||
|     }, |     }, | ||||||
|     "nixos-hardware": { |     "nixos-hardware": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1759261527, |         "lastModified": 1725885300, | ||||||
|         "narHash": "sha256-wPd5oGvBBpUEzMF0kWnXge0WITNsITx/aGI9qLHgJ4g=", |         "narHash": "sha256-5RLEnou1/GJQl+Wd+Bxaj7QY7FFQ9wjnFq1VNEaxTmc=", | ||||||
|         "owner": "NixOS", |         "owner": "NixOS", | ||||||
|         "repo": "nixos-hardware", |         "repo": "nixos-hardware", | ||||||
|         "rev": "e087756cf4abbe1a34f3544c480fc1034d68742f", |         "rev": "166dee4f88a7e3ba1b7a243edb1aca822f00680e", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|  | @ -318,27 +114,11 @@ | ||||||
|     }, |     }, | ||||||
|     "nixpkgs": { |     "nixpkgs": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1722073938, |         "lastModified": 1725634671, | ||||||
|         "narHash": "sha256-OpX0StkL8vpXyWOGUD6G+MA26wAXK6SpT94kLJXo6B4=", |         "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", | ||||||
|         "owner": "NixOS", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "rev": "e36e9f57337d0ff0cf77aceb58af4c805472bfae", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "NixOS", |  | ||||||
|         "ref": "nixpkgs-unstable", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nixpkgs_2": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1759381078, |  | ||||||
|         "narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=", |  | ||||||
|         "owner": "nixos", |         "owner": "nixos", | ||||||
|         "repo": "nixpkgs", |         "repo": "nixpkgs", | ||||||
|         "rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee", |         "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|  | @ -348,52 +128,59 @@ | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "nixpkgs-stable": { | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1725762081, | ||||||
|  |         "narHash": "sha256-vNv+aJUW5/YurRy1ocfvs4q/48yVESwlC/yHzjkZSP8=", | ||||||
|  |         "owner": "NixOS", | ||||||
|  |         "repo": "nixpkgs", | ||||||
|  |         "rev": "dc454045f5b5d814e5862a6d057e7bb5c29edc05", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "NixOS", | ||||||
|  |         "ref": "release-24.05", | ||||||
|  |         "repo": "nixpkgs", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "nixpkgs_2": { | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1725534445, | ||||||
|  |         "narHash": "sha256-Yd0FK9SkWy+ZPuNqUgmVPXokxDgMJoGuNpMEtkfcf84=", | ||||||
|  |         "owner": "NixOS", | ||||||
|  |         "repo": "nixpkgs", | ||||||
|  |         "rev": "9bb1e7571aadf31ddb4af77fc64b2d59580f9a39", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "NixOS", | ||||||
|  |         "ref": "nixpkgs-unstable", | ||||||
|  |         "repo": "nixpkgs", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "root": { |     "root": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "disko": "disko", |         "disko": "disko", | ||||||
|         "firefox-addons": "firefox-addons", |  | ||||||
|         "flake-compat": "flake-compat", |  | ||||||
|         "home-manager": "home-manager", |         "home-manager": "home-manager", | ||||||
|         "impermanence": "impermanence", |  | ||||||
|         "lix-module": "lix-module", |  | ||||||
|         "mcp-nixos": "mcp-nixos", |  | ||||||
|         "nix-darwin": "nix-darwin", |  | ||||||
|         "nix-syncthing": "nix-syncthing", |  | ||||||
|         "nix-vscode-extensions": "nix-vscode-extensions", |         "nix-vscode-extensions": "nix-vscode-extensions", | ||||||
|         "nixos-hardware": "nixos-hardware", |         "nixos-hardware": "nixos-hardware", | ||||||
|         "nixpkgs": "nixpkgs_2", |         "nixpkgs": "nixpkgs", | ||||||
|         "secrets": "secrets", |  | ||||||
|         "sops-nix": "sops-nix" |         "sops-nix": "sops-nix" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "secrets": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1759945215, |  | ||||||
|         "narHash": "sha256-xmUzOuhJl6FtTjR5++OQvSoAnXe7/VA5QFCZDyFwBXo=", |  | ||||||
|         "ref": "refs/heads/main", |  | ||||||
|         "rev": "444229a105445339fb028d15a8d866063c5f8141", |  | ||||||
|         "revCount": 21, |  | ||||||
|         "type": "git", |  | ||||||
|         "url": "ssh://git@git.jan-leila.com/jan-leila/nix-config-secrets.git" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "type": "git", |  | ||||||
|         "url": "ssh://git@git.jan-leila.com/jan-leila/nix-config-secrets.git" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "sops-nix": { |     "sops-nix": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "nixpkgs": [ |         "nixpkgs": "nixpkgs_2", | ||||||
|           "nixpkgs" |         "nixpkgs-stable": "nixpkgs-stable" | ||||||
|         ] |  | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1759188042, |         "lastModified": 1725922448, | ||||||
|         "narHash": "sha256-f9QC2KKiNReZDG2yyKAtDZh0rSK2Xp1wkPzKbHeQVRU=", |         "narHash": "sha256-ruvh8tlEflRPifs5tlpa0gkttzq4UtgXkJQS7FusgFE=", | ||||||
|         "owner": "Mic92", |         "owner": "Mic92", | ||||||
|         "repo": "sops-nix", |         "repo": "sops-nix", | ||||||
|         "rev": "9fcfabe085281dd793589bdc770a2e577a3caa5d", |         "rev": "cede1a08039178ac12957733e97ab1006c6b6892", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|  | @ -416,36 +203,6 @@ | ||||||
|         "repo": "default", |         "repo": "default", | ||||||
|         "type": "github" |         "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" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "systems_3": { |  | ||||||
|       "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", |   "root": "root", | ||||||
|  |  | ||||||
							
								
								
									
										196
									
								
								flake.nix
									
										
									
									
									
								
							
							
						
						
									
										196
									
								
								flake.nix
									
										
									
									
									
								
							|  | @ -5,179 +5,71 @@ | ||||||
|     # base packages |     # base packages | ||||||
|     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; |     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; | ||||||
| 
 | 
 | ||||||
|     lix-module = { |     # encrypt files that contain secreats that I would like to not encrypt | ||||||
|       url = "git+https://git.lix.systems/lix-project/nixos-module.git"; |     sops-nix.url = "github:Mic92/sops-nix"; | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
| 
 | 
 | ||||||
|     # secret encryption |     # declairtive disk configuration | ||||||
|     sops-nix = { |  | ||||||
|       url = "github:Mic92/sops-nix"; |  | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # self hosted repo of secrets file to further protect files in case of future encryption vulnerabilities |  | ||||||
|     secrets = { |  | ||||||
|       url = "git+ssh://git@git.jan-leila.com/jan-leila/nix-config-secrets.git"; |  | ||||||
|       flake = false; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # common config for syncthing |  | ||||||
|     nix-syncthing = { |  | ||||||
|       url = "git+https://git.jan-leila.com/jan-leila/nix-syncthing?ref=main"; |  | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # disk configurations |  | ||||||
|     disko = { |     disko = { | ||||||
|       url = "github:nix-community/disko"; |       url = "github:nix-community/disko"; | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |       inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # delete your darlings |     # managment per user | ||||||
|     impermanence = { |  | ||||||
|       url = "github:nix-community/impermanence"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     nix-darwin = { |  | ||||||
|       url = "github:LnL7/nix-darwin"; |  | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # users home directories |  | ||||||
|     home-manager = { |     home-manager = { | ||||||
|       url = "github:nix-community/home-manager"; |       url = "github:nix-community/home-manager"; | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |       inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # firefox extensions |     # repo of hardware configs for prebuilt systems | ||||||
|     firefox-addons = { |     nixos-hardware.url = "github:NixOS/nixos-hardware/master"; | ||||||
|       url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; |  | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
| 
 | 
 | ||||||
|     # vscode extensions  |     # vscode extensions  | ||||||
|     nix-vscode-extensions = { |     nix-vscode-extensions = { | ||||||
|       url = "github:nix-community/nix-vscode-extensions"; |       url = "github:nix-community/nix-vscode-extensions"; | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |       inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|     }; |     }; | ||||||
| 
 |  | ||||||
|     # pregenerated hardware configurations |  | ||||||
|     nixos-hardware = { |  | ||||||
|       url = "github:NixOS/nixos-hardware/master"; |  | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|     # this is just here so that we have a lock on it for our dev shells |   outputs = { self, nixpkgs, disko, nixos-hardware, ... }@inputs: | ||||||
|     flake-compat = { |     let | ||||||
|       url = "github:edolstra/flake-compat"; |       forEachSystem = nixpkgs.lib.genAttrs [ | ||||||
|     }; |         "aarch64-darwin" | ||||||
| 
 |         "aarch64-linux" | ||||||
|     # MCP NixOS server for Claude Dev |         "x86_64-darwin" | ||||||
|     mcp-nixos = { |         "x86_64-linux" | ||||||
|       url = "github:utensils/mcp-nixos"; |  | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   outputs = { |  | ||||||
|     self, |  | ||||||
|     nixpkgs, |  | ||||||
|     sops-nix, |  | ||||||
|     nix-syncthing, |  | ||||||
|     home-manager, |  | ||||||
|     impermanence, |  | ||||||
|     ... |  | ||||||
|   } @ inputs: let |  | ||||||
|     util = import ./util {inherit inputs;}; |  | ||||||
|     forEachPkgs = util.forEachPkgs; |  | ||||||
| 
 |  | ||||||
|     mkNixosInstaller = util.mkNixosInstaller; |  | ||||||
|     mkNixosSystem = util.mkNixosSystem; |  | ||||||
|     mkDarwinSystem = util.mkDarwinSystem; |  | ||||||
|     mkHome = util.mkHome; |  | ||||||
|     syncthingConfiguration = util.syncthingConfiguration; |  | ||||||
| 
 |  | ||||||
|     installerSystems = { |  | ||||||
|       basic = mkNixosInstaller "basic" []; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     nixosSystems = { |  | ||||||
|       horizon = mkNixosSystem "horizon"; |  | ||||||
|       twilight = mkNixosSystem "twilight"; |  | ||||||
|       defiant = mkNixosSystem "defiant"; |  | ||||||
|       emergent = mkNixosSystem "emergent"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     darwinSystems = { |  | ||||||
|       hesperium = mkDarwinSystem "hesperium"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     homeSystems = { |  | ||||||
|       # stand alone home manager configurations here: |  | ||||||
|       # name = mkHome "name" |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     systemsHomes = nixpkgs.lib.attrsets.mergeAttrsList ( |  | ||||||
|       nixpkgs.lib.attrsets.mapAttrsToList (hostname: system: ( |  | ||||||
|         nixpkgs.lib.attrsets.mapAttrs' (user: _: { |  | ||||||
|           name = "${user}@${hostname}"; |  | ||||||
|           value = mkHome { |  | ||||||
|             user = user; |  | ||||||
|             host = hostname; |  | ||||||
|             system = system.pkgs.hostPlatform.system; |  | ||||||
|             osConfig = system.config; |  | ||||||
|           }; |  | ||||||
|         }) |  | ||||||
|         system.config.home-manager.users |  | ||||||
|       )) |  | ||||||
|       (nixosSystems // darwinSystems) |  | ||||||
|     ); |  | ||||||
| 
 |  | ||||||
|     homeConfigurations = |  | ||||||
|       systemsHomes |  | ||||||
|       // homeSystems; |  | ||||||
|   in { |  | ||||||
|     formatter = forEachPkgs (system: pkgs: pkgs.alejandra); |  | ||||||
| 
 |  | ||||||
|     # templates = import ./templates; |  | ||||||
| 
 |  | ||||||
|     devShells = forEachPkgs (system: pkgs: { |  | ||||||
|       default = pkgs.mkShell { |  | ||||||
|         packages = with pkgs; [ |  | ||||||
|           # for version controlling this repo |  | ||||||
|           git |  | ||||||
|           # for formatting code in this repo |  | ||||||
|           alejandra |  | ||||||
|           # for editing secrets in the secrets repo |  | ||||||
|           sops |  | ||||||
|           # for viewing configuration options defined in this repo |  | ||||||
|           nix-inspect |  | ||||||
|           # for installing flakes from this repo onto other systems |  | ||||||
|           nixos-anywhere |  | ||||||
|           # for updating disko configurations |  | ||||||
|           disko |  | ||||||
|           # for viewing dconf entries |  | ||||||
|           dconf-editor |  | ||||||
|           # for MCP NixOS server support in development |  | ||||||
|           inputs.mcp-nixos.packages.${system}.default |  | ||||||
|       ]; |       ]; | ||||||
|  |       forEachPkgs = lambda: forEachSystem (system: lambda nixpkgs.legacyPackages.${system}); | ||||||
|  |     in | ||||||
|  |     { | ||||||
|  |       packages = forEachPkgs (pkgs: import ./pkgs { inherit pkgs; }); | ||||||
| 
 | 
 | ||||||
|         SOPS_AGE_KEY_DIRECTORY = import ./const/sops_age_key_directory.nix; |       nixosConfigurations = { | ||||||
| 
 |       	# Leyla Laptop | ||||||
|         shellHook = '' |         horizon = nixpkgs.lib.nixosSystem { | ||||||
|           git config core.hooksPath .hooks |           specialArgs = { inherit inputs; }; | ||||||
|         ''; |           modules = [  | ||||||
|  |             ./hosts/horizon/configuration.nix | ||||||
|  |             inputs.home-manager.nixosModules.default | ||||||
|  |             nixos-hardware.nixosModules.framework-11th-gen-intel | ||||||
|  |           ]; | ||||||
|  |         }; | ||||||
|  |         # Leyla Desktop | ||||||
|  |         twilight = nixpkgs.lib.nixosSystem { | ||||||
|  |           specialArgs = { inherit inputs; }; | ||||||
|  |           modules = [  | ||||||
|  |             ./hosts/twilight/configuration.nix | ||||||
|  |             inputs.home-manager.nixosModules.default | ||||||
|  |           ]; | ||||||
|  |         }; | ||||||
|  |         # NAS Service | ||||||
|  |         defiant = nixpkgs.lib.nixosSystem { | ||||||
|  |           specialArgs = { inherit inputs; }; | ||||||
|  |           modules = [ | ||||||
|  |             disko.nixosModules.disko | ||||||
|  |             ./hosts/defiant/disko-config.nix | ||||||
|  |             ./hosts/defiant/configuration.nix | ||||||
|  |           ]; | ||||||
|  |         }; | ||||||
|       }; |       }; | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     installerConfigurations = installerSystems; |  | ||||||
| 
 |  | ||||||
|     nixosConfigurations = nixosSystems; |  | ||||||
| 
 |  | ||||||
|     darwinConfigurations = darwinSystems; |  | ||||||
| 
 |  | ||||||
|     homeConfigurations = homeConfigurations; |  | ||||||
| 
 |  | ||||||
|     syncthingConfiguration = syncthingConfiguration; |  | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										57
									
								
								hosts/defiant/configuration.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								hosts/defiant/configuration.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | ||||||
|  | # server nas | ||||||
|  | { config, pkgs, inputs, ... }: | ||||||
|  | { | ||||||
|  |   imports = | ||||||
|  |     [ | ||||||
|  |       inputs.home-manager.nixosModules.default | ||||||
|  |       inputs.sops-nix.nixosModules.sops | ||||||
|  | 
 | ||||||
|  |       ./hardware-configuration.nix | ||||||
|  |        | ||||||
|  |       ../../enviroments/server | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |   users.leyla.isThinUser = true; | ||||||
|  | 
 | ||||||
|  |   boot.loader.grub = { | ||||||
|  |     enable = true; | ||||||
|  |     zfsSupport = true; | ||||||
|  |     efiSupport = true; | ||||||
|  |     efiInstallAsRemovable = true; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   nixpkgs.config.allowUnfree = true; | ||||||
|  | 
 | ||||||
|  |   services = { | ||||||
|  |     zfs = { | ||||||
|  |       autoScrub.enable = true; | ||||||
|  |       autoSnapshot.enable = true; | ||||||
|  |     }; | ||||||
|  |      | ||||||
|  |     # temp enable desktop enviroment for setup | ||||||
|  |     # Enable the X11 windowing system. | ||||||
|  |     xserver = { | ||||||
|  |       enable = true; | ||||||
|  | 
 | ||||||
|  |       # Enable the GNOME Desktop Environment. | ||||||
|  |       displayManager = { | ||||||
|  |         gdm.enable = true; | ||||||
|  |       }; | ||||||
|  |       desktopManager = { | ||||||
|  |         gnome.enable = true; | ||||||
|  |         xterm.enable = false; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       # Get rid of xTerm | ||||||
|  |       excludePackages = [ pkgs.xterm ]; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # This value determines the NixOS release from which the default | ||||||
|  |   # settings for stateful data, like file locations and database versions | ||||||
|  |   # on your system were taken. It‘s perfectly fine and recommended to leave | ||||||
|  |   # this value at the release version of the first install of this system. | ||||||
|  |   # Before changing this value read the documentation for this option | ||||||
|  |   # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). | ||||||
|  |   system.stateVersion = "23.05"; # Did you read the comment? | ||||||
|  | } | ||||||
							
								
								
									
										136
									
								
								hosts/defiant/disko-config.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								hosts/defiant/disko-config.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,136 @@ | ||||||
|  | { lib, ... }: | ||||||
|  | let | ||||||
|  |   bootDisk = devicePath: { | ||||||
|  |     type = "disk"; | ||||||
|  |     device = devicePath; | ||||||
|  |     content = { | ||||||
|  |       type = "gpt"; | ||||||
|  |    | ||||||
|  |       partitions = { | ||||||
|  |         boot = { | ||||||
|  |           size = "1M"; | ||||||
|  |           type = "EF02"; # for grub MBR | ||||||
|  |         }; | ||||||
|  |         ESP = { | ||||||
|  |           size = "1G"; | ||||||
|  |           type = "EF00"; | ||||||
|  |           content = { | ||||||
|  |             type = "filesystem"; | ||||||
|  |             format = "vfat"; | ||||||
|  |             mountpoint = "/boot"; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |   zfsDisk = devicePath: { | ||||||
|  |     type = "disk"; | ||||||
|  |     device = devicePath; | ||||||
|  |     content = { | ||||||
|  |       type = "gpt"; | ||||||
|  |       partitions = { | ||||||
|  |         zfs = { | ||||||
|  |           size = "100%"; | ||||||
|  |           content = { | ||||||
|  |             type = "zfs"; | ||||||
|  |             pool = "zroot"; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |   cacheDisk = devicePath: swapSize: { | ||||||
|  |     type = "disk"; | ||||||
|  |     device = devicePath; | ||||||
|  |     content = { | ||||||
|  |       type = "gpt"; | ||||||
|  |       partitions = { | ||||||
|  |         encryptedSwap = { | ||||||
|  |           size = swapSize; | ||||||
|  |           content = { | ||||||
|  |             type = "swap"; | ||||||
|  |             randomEncryption = true; | ||||||
|  |             discardPolicy = "both"; | ||||||
|  |             resumeDevice = true; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |         zfs = { | ||||||
|  |           size = "100%"; | ||||||
|  |           content = { | ||||||
|  |             type = "zfs"; | ||||||
|  |             pool = "zroot"; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | in { | ||||||
|  |   disko.devices = { | ||||||
|  |     disk = { | ||||||
|  |       boot = bootDisk "/dev/disk/by-path/pci-0000:23:00.3-usb-0:1:1.0-scsi-0:0:0:0"; | ||||||
|  | 
 | ||||||
|  |       hd_13_tb_a = zfsDisk "/dev/disk/by-id/ata-ST18000NE000-3G6101_ZVTCXVEB"; | ||||||
|  |       hd_13_tb_b = zfsDisk "/dev/disk/by-id/ata-ST18000NE000-3G6101_ZVTCXWSC"; | ||||||
|  |       hd_13_tb_c = zfsDisk "/dev/disk/by-id/ata-ST18000NE000-3G6101_ZVTD10EH"; | ||||||
|  | 
 | ||||||
|  |       # ssd_2_tb_a = cacheDisk "64G" "/dev/disk/by-id/XXX"; | ||||||
|  |     }; | ||||||
|  |     zpool = { | ||||||
|  |       zroot = { | ||||||
|  |         type = "zpool"; | ||||||
|  |         mode = { | ||||||
|  |           topology = { | ||||||
|  |             type = "topology"; | ||||||
|  |             vdev = [ | ||||||
|  |               { | ||||||
|  |                 # should this only mirror for this inital config with 3 drives we will used raidz2 for future configs??? | ||||||
|  |                 mode = "mirror"; | ||||||
|  |                 members = [ | ||||||
|  |                   "hd_13_tb_a" "hd_13_tb_b" "hd_13_tb_c" | ||||||
|  |                 ]; | ||||||
|  |               } | ||||||
|  |             ]; | ||||||
|  |             cache = [ ]; | ||||||
|  |             # cache = [ "ssd_2_tb_a" ]; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         options = { | ||||||
|  |           ashift = "12"; | ||||||
|  |         }; | ||||||
|  |          | ||||||
|  |         rootFsOptions = { | ||||||
|  |           encryption = "on"; | ||||||
|  |           keyformat = "hex"; | ||||||
|  |           keylocation = "prompt"; | ||||||
|  |           compression = "lz4"; | ||||||
|  |           xattr = "sa"; | ||||||
|  |           acltype = "posixacl"; | ||||||
|  |           "com.sun:auto-snapshot" = "false"; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         mountpoint = "/"; | ||||||
|  |         postCreateHook = "zfs list -t snapshot -H -o name | grep -E '^zroot@blank$' || zfs snapshot zroot@blank"; | ||||||
|  |          | ||||||
|  |         datasets = { | ||||||
|  |           "nix" = { | ||||||
|  |             type = "zfs_fs"; | ||||||
|  |             mountpoint = "/nix"; | ||||||
|  |           }; | ||||||
|  |           "home" = { | ||||||
|  |             type = "zfs_fs"; | ||||||
|  |             mountpoint = "/mnt/home"; | ||||||
|  |             options = { | ||||||
|  |               "com.sun:auto-snapshot" = "true"; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |           "var" = { | ||||||
|  |             type = "zfs_fs"; | ||||||
|  |             mountpoint = "/var"; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
							
								
								
									
										45
									
								
								hosts/defiant/hardware-configuration.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								hosts/defiant/hardware-configuration.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | ||||||
|  | # Do not modify this file!  It was generated by ‘nixos-generate-config’ | ||||||
|  | # and may be overwritten by future invocations.  Please make changes | ||||||
|  | # to /etc/nixos/configuration.nix instead. | ||||||
|  | { config, lib, pkgs, modulesPath, ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   imports = | ||||||
|  |     [ (modulesPath + "/installer/scan/not-detected.nix") | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |   boot = { | ||||||
|  |     initrd = { | ||||||
|  |       availableKernelModules = [ "xhci_pci" "aacraid" "ahci" "usbhid" "usb_storage" "sd_mod" ]; | ||||||
|  |       kernelModules = [ ]; | ||||||
|  |     }; | ||||||
|  |     kernelModules = [ "kvm-amd" ]; | ||||||
|  |     extraModulePackages = [ ]; | ||||||
|  |      | ||||||
|  |     supportedFilesystems = [ "zfs" ]; | ||||||
|  | 
 | ||||||
|  |     zfs.extraPools = [ "zroot" ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # fileSystems."/" = | ||||||
|  |   #   { device = "/dev/disk/by-uuid/dc6a9664-80f2-4988-afd7-fee5bd3ee2ca"; | ||||||
|  |   #     fsType = "ext4"; | ||||||
|  |   #   }; | ||||||
|  | 
 | ||||||
|  |   swapDevices = [ ]; | ||||||
|  | 
 | ||||||
|  |   networking = { | ||||||
|  |     # 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; | ||||||
|  |     # networking.interfaces.eno1.useDHCP = lib.mkDefault true; | ||||||
|  |     # networking.interfaces.eno2.useDHCP = lib.mkDefault true; | ||||||
|  |     hostId = "c51763d6"; | ||||||
|  |     hostName = "defiant"; # Define your hostname. | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; | ||||||
|  |   hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; | ||||||
|  | } | ||||||
							
								
								
									
										49
									
								
								hosts/horizon/configuration.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								hosts/horizon/configuration.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,49 @@ | ||||||
|  | # leyla laptop | ||||||
|  | { config, pkgs, inputs, ... }: | ||||||
|  | { | ||||||
|  |   imports = | ||||||
|  |     [ | ||||||
|  |       inputs.home-manager.nixosModules.default | ||||||
|  |       inputs.sops-nix.nixosModules.sops | ||||||
|  | 
 | ||||||
|  |       ./hardware-configuration.nix | ||||||
|  |        | ||||||
|  |       ../../enviroments/client | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |   users = { | ||||||
|  |     leyla.isFullUser = true; | ||||||
|  |     ester.isFullUser = true; | ||||||
|  |     eve.isFullUser = true; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # enabled virtualisation for docker | ||||||
|  |   virtualisation.docker = { | ||||||
|  |     enable = true; | ||||||
|  |     rootless = { | ||||||
|  |       enable = true; | ||||||
|  |       setSocketVariable = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |   users.extraGroups.docker.members = [ "leyla" ]; | ||||||
|  | 
 | ||||||
|  |   # Enable touchpad support (enabled default in most desktopManager). | ||||||
|  |   # services.xserver.libinput.enable = true; | ||||||
|  | 
 | ||||||
|  |   # Allow unfree packages | ||||||
|  |   nixpkgs.config.allowUnfree = true; | ||||||
|  | 
 | ||||||
|  |   # Open ports in the firewall. | ||||||
|  |   # networking.firewall.allowedTCPPorts = [ ... ]; | ||||||
|  |   # networking.firewall.allowedUDPPorts = [ ... ]; | ||||||
|  |   # Or disable the firewall altogether. | ||||||
|  |   # networking.firewall.enable = false; | ||||||
|  | 
 | ||||||
|  |   # This value determines the NixOS release from which the default | ||||||
|  |   # settings for stateful data, like file locations and database versions | ||||||
|  |   # on your system were taken. It‘s perfectly fine and recommended to leave | ||||||
|  |   # this value at the release version of the first install of this system. | ||||||
|  |   # Before changing this value read the documentation for this option | ||||||
|  |   # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). | ||||||
|  |   system.stateVersion = "23.05"; # Did you read the comment? | ||||||
|  | } | ||||||
							
								
								
									
										104
									
								
								hosts/horizon/hardware-configuration.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								hosts/horizon/hardware-configuration.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,104 @@ | ||||||
|  | # Do not modify this file!  It was generated by ‘nixos-generate-config’ | ||||||
|  | # and may be overwritten by future invocations.  Please make changes | ||||||
|  | # to /etc/nixos/configuration.nix instead. | ||||||
|  | { config, lib, pkgs, modulesPath, ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   imports = | ||||||
|  |     [ (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; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   hardware.graphics.enable = true; | ||||||
|  | 
 | ||||||
|  |   fileSystems = { | ||||||
|  |     "/" = | ||||||
|  |       { device = "/dev/disk/by-uuid/866d422b-f816-4ad9-9846-791839cb9337"; | ||||||
|  |         fsType = "ext4"; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |     "/boot" = | ||||||
|  |       { device = "/dev/disk/by-uuid/E138-65B5"; | ||||||
|  |         fsType = "vfat"; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |     "/mnt/leyla_home" = | ||||||
|  |       { | ||||||
|  |         device = "defiant:/home/leyla"; | ||||||
|  |         fsType = "nfs"; | ||||||
|  |         options = [ "x-systemd.automount" "user" "noatime" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ]; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |     "/mnt/eve_home" = | ||||||
|  |       { | ||||||
|  |         device = "defiant:/home/eve"; | ||||||
|  |         fsType = "nfs"; | ||||||
|  |         options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ]; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |     "/mnt/ester_home" = | ||||||
|  |       { | ||||||
|  |         device = "defiant:/home/ester"; | ||||||
|  |         fsType = "nfs"; | ||||||
|  |         options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ]; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |     "/mnt/users_home" = | ||||||
|  |       { | ||||||
|  |         device = "defiant:/home/users"; | ||||||
|  |         fsType = "nfs"; | ||||||
|  |         options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ]; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |     # "/mnt/legacy_leyla_home" = | ||||||
|  |     #   { | ||||||
|  |     #     device = "server.arpa:/home/leyla"; | ||||||
|  |     #     fsType = "nfs"; | ||||||
|  |     #     options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ]; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     # "/mnt/legacy_share_home" = | ||||||
|  |     #   { | ||||||
|  |     #     device = "server.arpa:/home/share"; | ||||||
|  |     #     fsType = "nfs"; | ||||||
|  |     #     options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ]; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     # "/mnt/legacy_docker_home" = | ||||||
|  |     #   { | ||||||
|  |     #     device = "server.arpa:/home/docker"; | ||||||
|  |     #     fsType = "nfs"; | ||||||
|  |     #     options = [ "x-systemd.automount" "noauto" "x-systemd.idle-timeout=600" ]; | ||||||
|  |     #   }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   services.cachefilesd.enable = true; | ||||||
|  | 
 | ||||||
|  |   swapDevices = | ||||||
|  |     [ { device = "/dev/disk/by-uuid/be98e952-a072-4c3a-8c12-69500b5a2fff"; } | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |   networking = { | ||||||
|  |     useDHCP = lib.mkDefault true; | ||||||
|  |     hostName = "horizon"; # Define your hostname. | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; | ||||||
|  |   powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; | ||||||
|  |   hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; | ||||||
|  | } | ||||||
							
								
								
									
										42
									
								
								hosts/twilight/configuration.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								hosts/twilight/configuration.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | ||||||
|  | # leyla laptop | ||||||
|  | { config, pkgs, inputs, ... }: | ||||||
|  | { | ||||||
|  |   imports = | ||||||
|  |     [ | ||||||
|  |       inputs.home-manager.nixosModules.default | ||||||
|  |       inputs.sops-nix.nixosModules.sops | ||||||
|  | 
 | ||||||
|  |       ./hardware-configuration.nix | ||||||
|  |        | ||||||
|  |       ../../enviroments/client | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |   users = { | ||||||
|  |     leyla = { | ||||||
|  |       isFullUser = true; | ||||||
|  |       hasPiperMouse = true; | ||||||
|  |       hasOpenRGBHardware = true; | ||||||
|  |       hasViaKeyboard = true; | ||||||
|  |       hasGPU = true; | ||||||
|  |     }; | ||||||
|  |     ester.isFullUser = true; | ||||||
|  |     eve.isFullUser = true; | ||||||
|  |   }; | ||||||
|  |    | ||||||
|  |   # enabled virtualisation for docker | ||||||
|  |   # virtualisation.docker.enable = true; | ||||||
|  | 
 | ||||||
|  |   # Enable touchpad support (enabled default in most desktopManager). | ||||||
|  |   # services.xserver.libinput.enable = true; | ||||||
|  | 
 | ||||||
|  |   # Allow unfree packages | ||||||
|  |   nixpkgs.config.allowUnfree = true; | ||||||
|  | 
 | ||||||
|  |   # This value determines the NixOS release from which the default | ||||||
|  |   # settings for stateful data, like file locations and database versions | ||||||
|  |   # on your system were taken. It‘s perfectly fine and recommended to leave | ||||||
|  |   # this value at the release version of the first install of this system. | ||||||
|  |   # Before changing this value read the documentation for this option | ||||||
|  |   # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). | ||||||
|  |   system.stateVersion = "23.05"; # Did you read the comment? | ||||||
|  | } | ||||||
							
								
								
									
										119
									
								
								hosts/twilight/hardware-configuration.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								hosts/twilight/hardware-configuration.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,119 @@ | ||||||
|  | # Do not modify this file!  It was generated by ‘nixos-generate-config’ | ||||||
|  | # and may be overwritten by future invocations.  Please make changes | ||||||
|  | # to /etc/nixos/configuration.nix instead. | ||||||
|  | { config, lib, pkgs, modulesPath, ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   imports = | ||||||
|  |     [ (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; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   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 = 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; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   fileSystems = { | ||||||
|  |     "/" = | ||||||
|  |       { device = "/dev/disk/by-uuid/8be49c65-2b57-48f1-b74d-244d26061adb"; | ||||||
|  |         fsType = "ext4"; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |     "/boot" = | ||||||
|  |       { device = "/dev/disk/by-uuid/3006-3867"; | ||||||
|  |         fsType = "vfat"; | ||||||
|  |         options = [ "fmask=0022" "dmask=0022" ]; | ||||||
|  |       }; | ||||||
|  |        | ||||||
|  |     "/mnt/leyla_home" = | ||||||
|  |       { | ||||||
|  |         device = "server.arpa:/home/leyla"; | ||||||
|  |         fsType = "nfs"; | ||||||
|  |         options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ]; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |     "/mnt/share_home" = | ||||||
|  |       { | ||||||
|  |         device = "server.arpa:/home/share"; | ||||||
|  |         fsType = "nfs"; | ||||||
|  |         options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ]; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |     "/mnt/docker_home" = | ||||||
|  |       { | ||||||
|  |         device = "server.arpa:/home/docker"; | ||||||
|  |         fsType = "nfs"; | ||||||
|  |         options = [ "x-systemd.automount" "noauto" "x-systemd.idle-timeout=600" ]; | ||||||
|  |       }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   swapDevices = [ ]; | ||||||
|  | 
 | ||||||
|  |   networking = { | ||||||
|  |     # 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. | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; | ||||||
|  |   hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @ -39,7 +39,6 @@ if [ -z ${flake} ]; then | ||||||
| 	exit 1; | 	exit 1; | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| # TODO: we might not need to copy the key over here anymore? |  | ||||||
| temp=$(mktemp -d) | temp=$(mktemp -d) | ||||||
| # Function to cleanup temporary directory on exit | # Function to cleanup temporary directory on exit | ||||||
| cleanup() { | cleanup() { | ||||||
|  | @ -48,8 +47,8 @@ cleanup() { | ||||||
| trap cleanup EXIT | trap cleanup EXIT | ||||||
| 
 | 
 | ||||||
| # copy key file to temp folder to copy over to target | # copy key file to temp folder to copy over to target | ||||||
| mkdir -p $temp$SOPS_AGE_KEY_DIRECTORY | mkdir -p $temp$AGE_KEY_FILE_LOCATION | ||||||
| cp -r $SOPS_AGE_KEY_DIRECTORY/* $temp$SOPS_AGE_KEY_DIRECTORY | cp -r $AGE_KEY_FILE_LOCATION/* $temp$AGE_KEY_FILE_LOCATION | ||||||
| 
 | 
 | ||||||
| # commit number in this is because the main branch of nixos-anywhere is broken right now | # commit number in this is because the main branch of nixos-anywhere is broken right now | ||||||
| nixos-anywhere --extra-files $temp --flake ".#$flake" ${user:-nixos}@$target | nix run github:nix-community/nixos-anywhere/b3b6bfebba35d55fba485ceda588984dec74c54f -- --extra-files $temp --flake ".#$flake" ${user:-nixos}@$target | ||||||
|  |  | ||||||
|  | @ -1,7 +0,0 @@ | ||||||
| # this folder is for modules that are common between nixos, home-manager, and darwin |  | ||||||
| {...}: { |  | ||||||
|   imports = [ |  | ||||||
|     ./overlays |  | ||||||
|     ./pkgs |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,6 +0,0 @@ | ||||||
| # this folder is for derivation overlays |  | ||||||
| {inputs, ...}: { |  | ||||||
|   nixpkgs.overlays = [ |  | ||||||
|     inputs.nix-vscode-extensions.overlays.default |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,42 +0,0 @@ | ||||||
| { |  | ||||||
|   buildNpmPackage, |  | ||||||
|   vscode-utils, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   version = "0.0.1"; |  | ||||||
|   pname = "ai-code"; |  | ||||||
|   publisher = "jan-leila"; |  | ||||||
|   vsix = buildNpmPackage { |  | ||||||
|     inherit version pname; |  | ||||||
| 
 |  | ||||||
|     src = builtins.fetchGit { |  | ||||||
|       url = "ssh://git@git.jan-leila.com/jan-leila/ai-code.git"; |  | ||||||
|       rev = "d48e01713021dbb30de0ebbee2cfaf99e4e9b5a6"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     npmDepsHash = "sha256-kjMyEnT3dz0yH5Ydh+aGoFDocKpBYGRmfnwbEdvvgpY="; |  | ||||||
| 
 |  | ||||||
|     nativeBuildInputs = with pkgs; [ |  | ||||||
|       vsce |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     buildPhase = '' |  | ||||||
|       ${pkgs.vsce}/bin/vsce package -o ${pname}.zip |  | ||||||
|     ''; |  | ||||||
| 
 |  | ||||||
|     installPhase = '' |  | ||||||
|       mkdir -p $out |  | ||||||
|       mv ${pname}.zip $out/${pname}.zip |  | ||||||
|     ''; |  | ||||||
|   }; |  | ||||||
| in |  | ||||||
|   vscode-utils.buildVscodeExtension { |  | ||||||
|     inherit pname version; |  | ||||||
| 
 |  | ||||||
|     src = "${vsix}/${pname}.zip"; |  | ||||||
| 
 |  | ||||||
|     vscodeExtUniqueId = "${publisher}.${pname}"; |  | ||||||
|     vscodeExtPublisher = publisher; |  | ||||||
|     vscodeExtName = pname; |  | ||||||
|   } |  | ||||||
|  | @ -1,3 +0,0 @@ | ||||||
| {pkgs, ...}: { |  | ||||||
|   ai-code = pkgs.callPackage ./ai-code.nix {}; |  | ||||||
| } |  | ||||||
|  | @ -1,45 +0,0 @@ | ||||||
| {pkgs, ...}: { |  | ||||||
|   imports = [ |  | ||||||
|     ./python |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   nixpkgs.overlays = [ |  | ||||||
|     (final: prev: { |  | ||||||
|       webtoon-dl = |  | ||||||
|         pkgs.callPackage |  | ||||||
|         ./webtoon-dl.nix |  | ||||||
|         {}; |  | ||||||
|     }) |  | ||||||
|     (final: prev: { |  | ||||||
|       prostudiomasters = |  | ||||||
|         pkgs.callPackage |  | ||||||
|         ./prostudiomasters.nix |  | ||||||
|         {}; |  | ||||||
|     }) |  | ||||||
|     (final: prev: { |  | ||||||
|       noita_entangled_worlds = pkgs.callPackage ./noita-entangled-worlds.nix {}; |  | ||||||
|     }) |  | ||||||
|     (final: prev: { |  | ||||||
|       gdx-liftoff = pkgs.callPackage ./gdx-liftoff.nix {}; |  | ||||||
|     }) |  | ||||||
|     (final: prev: { |  | ||||||
|       codium-extensions = pkgs.callPackage ./codium-extensions {}; |  | ||||||
|     }) |  | ||||||
|     (final: prev: { |  | ||||||
|       mapillary-uploader = pkgs.callPackage ./mapillary-uploader.nix {}; |  | ||||||
|     }) |  | ||||||
|     (final: prev: { |  | ||||||
|       panoramax = pkgs.python3.pkgs.callPackage ./panoramax.nix {}; |  | ||||||
|     }) |  | ||||||
|     (final: prev: { |  | ||||||
|       sgblur = pkgs.python3.pkgs.callPackage ./sgblur.nix {}; |  | ||||||
|     }) |  | ||||||
|     (final: prev: { |  | ||||||
|       # Override h3 C library to version 4.3.0 |  | ||||||
|       h3 = pkgs.callPackage ./h3-c-lib.nix {}; |  | ||||||
|     }) |  | ||||||
|     (final: prev: { |  | ||||||
|       polycule = pkgs.callPackage ./polycule {}; |  | ||||||
|     }) |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,44 +0,0 @@ | ||||||
| { |  | ||||||
|   stdenv, |  | ||||||
|   fetchurl, |  | ||||||
|   makeWrapper, |  | ||||||
|   jdk, |  | ||||||
|   lib, |  | ||||||
|   xorg, |  | ||||||
|   libGL, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| stdenv.mkDerivation rec { |  | ||||||
|   pname = "gdx-liftoff"; |  | ||||||
|   version = "1.13.5.1"; |  | ||||||
| 
 |  | ||||||
|   src = fetchurl { |  | ||||||
|     url = "https://github.com/libgdx/gdx-liftoff/releases/download/v${version}/gdx-liftoff-${version}.jar"; |  | ||||||
|     hash = "sha256-9vCXGNGwI/P4VmcdIzTv2GPAX8bZb7nkfopaRAf6yMA="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   dontUnpack = true; |  | ||||||
| 
 |  | ||||||
|   nativeBuildInputs = [makeWrapper]; |  | ||||||
| 
 |  | ||||||
|   runtimeDependencies = lib.makeLibraryPath [ |  | ||||||
|     # glfw |  | ||||||
|     libGL |  | ||||||
|     xorg.libX11 |  | ||||||
|     xorg.libXcursor |  | ||||||
|     xorg.libXext |  | ||||||
|     xorg.libXrandr |  | ||||||
|     xorg.libXxf86vm |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   installPhase = '' |  | ||||||
|     runHook preInstall |  | ||||||
| 
 |  | ||||||
|     install -Dm644 $src $out/lib/gdx-liftoff-${version}.jar |  | ||||||
| 
 |  | ||||||
|     makeWrapper ${lib.getExe jdk} $out/bin/gdx-liftoff-${version} \ |  | ||||||
|       --append-flags "-jar $out/lib/gdx-liftoff-${version}.jar"\ |  | ||||||
|       ${lib.optionalString stdenv.hostPlatform.isLinux "--prefix LD_LIBRARY_PATH : ${runtimeDependencies}"} |  | ||||||
|     runHook postInstall |  | ||||||
|   ''; |  | ||||||
| } |  | ||||||
|  | @ -1,36 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   stdenv, |  | ||||||
|   fetchFromGitHub, |  | ||||||
|   cmake, |  | ||||||
|   doxygen, |  | ||||||
| }: |  | ||||||
| stdenv.mkDerivation rec { |  | ||||||
|   pname = "h3"; |  | ||||||
|   version = "4.3.0"; |  | ||||||
| 
 |  | ||||||
|   src = fetchFromGitHub { |  | ||||||
|     owner = "uber"; |  | ||||||
|     repo = "h3"; |  | ||||||
|     rev = "v${version}"; |  | ||||||
|     hash = "sha256-DUILKZ1QvML6qg+WdOxir6zRsgTvk+En6yjeFf6MQBg="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   nativeBuildInputs = [ |  | ||||||
|     cmake |  | ||||||
|     doxygen |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   cmakeFlags = [ |  | ||||||
|     "-DBUILD_SHARED_LIBS=ON" |  | ||||||
|     "-DBUILD_TESTING=OFF" |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   meta = with lib; { |  | ||||||
|     homepage = "https://github.com/uber/h3"; |  | ||||||
|     description = "Hexagonal hierarchical geospatial indexing system"; |  | ||||||
|     license = licenses.asl20; |  | ||||||
|     maintainers = []; |  | ||||||
|     platforms = platforms.all; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,42 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   fetchurl, |  | ||||||
|   appimageTools, |  | ||||||
| }: let |  | ||||||
|   pname = "mapillary-uploader"; |  | ||||||
|   version = "4.7.2"; |  | ||||||
| 
 |  | ||||||
|   src = fetchurl { |  | ||||||
|     url = "http://tools.mapillary.com/uploader/download/linux/${version}"; |  | ||||||
|     name = "mapillary-uploader.AppImage"; |  | ||||||
|     sha256 = "sha256-Oyx7AIdA/2mwBaq7UzXOoyq/z2SU2sViMN40sY2RCQw="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   appimageContents = appimageTools.extractType2 { |  | ||||||
|     inherit pname version src; |  | ||||||
|   }; |  | ||||||
| in |  | ||||||
|   appimageTools.wrapType2 { |  | ||||||
|     inherit pname version src; |  | ||||||
| 
 |  | ||||||
|     extraInstallCommands = '' |  | ||||||
|       # Install desktop file |  | ||||||
|       install -Dm644 ${appimageContents}/mapillary-desktop-uploader.desktop $out/share/applications/mapillary-uploader.desktop |  | ||||||
| 
 |  | ||||||
|       # Install icon |  | ||||||
|       install -Dm644 ${appimageContents}/usr/share/icons/hicolor/0x0/apps/mapillary-desktop-uploader.png $out/share/pixmaps/mapillary-uploader.png |  | ||||||
| 
 |  | ||||||
|       # Fix desktop file paths |  | ||||||
|       substituteInPlace $out/share/applications/mapillary-uploader.desktop \ |  | ||||||
|         --replace 'Exec=AppRun' 'Exec=${pname}' |  | ||||||
|     ''; |  | ||||||
| 
 |  | ||||||
|     meta = with lib; { |  | ||||||
|       description = "Mapillary Desktop Uploader - Upload street-level imagery to Mapillary"; |  | ||||||
|       homepage = "https://www.mapillary.com/"; |  | ||||||
|       license = licenses.unfree; # Mapillary's license terms |  | ||||||
|       maintainers = []; |  | ||||||
|       platforms = ["x86_64-linux"]; |  | ||||||
|       sourceProvenance = with sourceTypes; [binaryNativeCode]; |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
|  | @ -1,46 +0,0 @@ | ||||||
| # not working yet |  | ||||||
| { |  | ||||||
|   pkgs, |  | ||||||
|   rustPlatform, |  | ||||||
|   fetchFromGitHub, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   version = "1.5.3"; |  | ||||||
|   repo = fetchFromGitHub { |  | ||||||
|     owner = "IntQuant"; |  | ||||||
|     repo = "noita_entangled_worlds"; |  | ||||||
|     rev = "v${version}"; |  | ||||||
|     hash = "sha256-frrpD0aWTeDbZYtp15R+quUUAZf7OvHlbSLtGJJtAqk="; |  | ||||||
|   }; |  | ||||||
| in |  | ||||||
|   rustPlatform.buildRustPackage { |  | ||||||
|     name = "noita-proxy-${version}"; |  | ||||||
|     src = repo + "/noita-proxy"; |  | ||||||
|     prePatch = '' |  | ||||||
|       substituteInPlace Cargo.toml \ |  | ||||||
|           --replace "path = \"../shared\"" "path = \"${repo + "/shared"}\"" |  | ||||||
|     ''; |  | ||||||
|     nativeBuildInputs = with pkgs; [ |  | ||||||
|       pkg-config |  | ||||||
|       python3 |  | ||||||
|       cmake |  | ||||||
|     ]; |  | ||||||
|     buildInputs = with pkgs; [ |  | ||||||
|       openssl |  | ||||||
|       openssl.dev |  | ||||||
|       libpulseaudio |  | ||||||
|       libjack2 |  | ||||||
|       alsa-lib |  | ||||||
|       xorg.libxcb |  | ||||||
|       xorg.libxcb.dev |  | ||||||
|       libopus |  | ||||||
|     ]; |  | ||||||
|     propagatedBuildInputs = with pkgs; [ |  | ||||||
|       steamworks-sdk-redist |  | ||||||
|     ]; |  | ||||||
|     runtimeDependencies = with pkgs; [ |  | ||||||
|       steamworks-sdk-redist |  | ||||||
|     ]; |  | ||||||
|     doCheck = false; |  | ||||||
|     cargoHash = "sha256-TzUS6d6PopgGf2i1yVaXaXdzNrvfSz+Gv67BAtxYmb4="; |  | ||||||
|   } |  | ||||||
|  | @ -1,105 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   fetchFromGitLab, |  | ||||||
|   buildPythonPackage, |  | ||||||
|   flit-core, |  | ||||||
|   flask, |  | ||||||
|   pillow, |  | ||||||
|   requests, |  | ||||||
|   python-dotenv, |  | ||||||
|   authlib, |  | ||||||
|   sentry-sdk, |  | ||||||
|   python-dateutil, |  | ||||||
|   dateparser, |  | ||||||
|   croniter, |  | ||||||
|   pydantic, |  | ||||||
|   flask-cors, |  | ||||||
|   flask-compress, |  | ||||||
|   flask-babel, |  | ||||||
|   flasgger, |  | ||||||
|   yoyo-migrations, |  | ||||||
|   psycopg, |  | ||||||
|   psycopg-pool, |  | ||||||
|   tzdata, |  | ||||||
|   email-validator, |  | ||||||
|   pydantic-extra-types, |  | ||||||
|   python-multipart, |  | ||||||
|   fs, |  | ||||||
|   fs-s3fs, |  | ||||||
|   geopic-tag-reader, |  | ||||||
|   pygeofilter, |  | ||||||
|   pygeoif, |  | ||||||
|   rfeed, |  | ||||||
|   geojson-pydantic, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   pname = "geovisio"; |  | ||||||
|   version = "2.10.0"; |  | ||||||
|   repo = fetchFromGitLab { |  | ||||||
|     owner = "panoramax"; |  | ||||||
|     repo = "server/api"; |  | ||||||
|     rev = version; |  | ||||||
|     hash = "sha256-kCLcrOe7jJdIfmWWOmxQ5dOj8ZG2B7s0qFpHXs02B/E="; |  | ||||||
|   }; |  | ||||||
| in |  | ||||||
|   buildPythonPackage { |  | ||||||
|     inherit pname version; |  | ||||||
| 
 |  | ||||||
|     pyproject = true; |  | ||||||
| 
 |  | ||||||
|     src = repo; |  | ||||||
| 
 |  | ||||||
|     build-system = [ |  | ||||||
|       flit-core |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|       flask |  | ||||||
|       pillow |  | ||||||
|       requests |  | ||||||
|       python-dotenv |  | ||||||
|       authlib |  | ||||||
|       sentry-sdk |  | ||||||
|       python-dateutil |  | ||||||
|       dateparser |  | ||||||
|       croniter |  | ||||||
|       pydantic |  | ||||||
|       flask-cors |  | ||||||
|       flask-compress |  | ||||||
|       flask-babel |  | ||||||
|       flasgger |  | ||||||
|       yoyo-migrations |  | ||||||
|       psycopg |  | ||||||
|       psycopg-pool |  | ||||||
|       tzdata |  | ||||||
|       email-validator |  | ||||||
|       pydantic-extra-types |  | ||||||
|       python-multipart |  | ||||||
|       fs |  | ||||||
|       fs-s3fs |  | ||||||
|       geopic-tag-reader |  | ||||||
|       pygeofilter |  | ||||||
|       pygeoif |  | ||||||
|       rfeed |  | ||||||
|       geojson-pydantic |  | ||||||
|       # Missing from nixpkgs - may need custom packages: |  | ||||||
|       # flask-executor |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # Skip tests as they may require network access or specific setup |  | ||||||
|     doCheck = false; |  | ||||||
| 
 |  | ||||||
|     # Disable runtime dependencies check as many dependencies are not available in nixpkgs |  | ||||||
|     dontCheckRuntimeDeps = true; |  | ||||||
| 
 |  | ||||||
|     # Disable imports check as many dependencies are not available in nixpkgs |  | ||||||
|     pythonImportsCheck = []; |  | ||||||
| 
 |  | ||||||
|     meta = with lib; { |  | ||||||
|       description = "Panoramax API client and tools for street-level imagery platform"; |  | ||||||
|       homepage = "https://gitlab.com/panoramax/server/api"; |  | ||||||
|       license = licenses.mit; |  | ||||||
|       maintainers = []; |  | ||||||
|       platforms = platforms.all; |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
|  | @ -1,149 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   flutter332, |  | ||||||
|   fetchFromGitLab, |  | ||||||
|   pkg-config, |  | ||||||
|   wrapGAppsHook, |  | ||||||
|   gtk3, |  | ||||||
|   glib, |  | ||||||
|   glib-networking, |  | ||||||
|   webkitgtk_4_1, |  | ||||||
|   libsecret, |  | ||||||
|   libnotify, |  | ||||||
|   dbus, |  | ||||||
|   sqlcipher, |  | ||||||
|   openssl, |  | ||||||
|   mpv, |  | ||||||
|   alsa-lib, |  | ||||||
|   libass, |  | ||||||
|   ffmpeg-full, |  | ||||||
|   libplacebo, |  | ||||||
|   libunwind, |  | ||||||
|   shaderc, |  | ||||||
|   vulkan-headers, |  | ||||||
|   vulkan-loader, |  | ||||||
|   lcms2, |  | ||||||
|   libdovi, |  | ||||||
|   libdvdnav, |  | ||||||
|   libdvdread, |  | ||||||
|   mujs, |  | ||||||
|   libbluray, |  | ||||||
|   lua, |  | ||||||
|   rubberband, |  | ||||||
|   libuchardet, |  | ||||||
|   zimg, |  | ||||||
|   openal, |  | ||||||
|   pipewire, |  | ||||||
|   libpulseaudio, |  | ||||||
|   libcaca, |  | ||||||
|   libdrm, |  | ||||||
|   libdisplay-info, |  | ||||||
|   libgbm, |  | ||||||
|   xorg, |  | ||||||
|   nv-codec-headers-11, |  | ||||||
|   libva, |  | ||||||
|   libvdpau, |  | ||||||
| }: |  | ||||||
| flutter332.buildFlutterApplication rec { |  | ||||||
|   pname = "polycule"; |  | ||||||
|   version = "0.3.4"; |  | ||||||
| 
 |  | ||||||
|   src = fetchFromGitLab { |  | ||||||
|     owner = "polycule_client"; |  | ||||||
|     repo = "polycule"; |  | ||||||
|     rev = "v${version}"; |  | ||||||
|     hash = "sha256-RUu8DKuX2NUU5Ce5WLHtDaORkn7CSrgTj3KhM/z+yHc="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   pubspecLock = lib.importJSON ./polycule-pubspec.lock.json; |  | ||||||
| 
 |  | ||||||
|   gitHashes = { |  | ||||||
|     matrix = "sha256-w/QB5nYJ9Lh77TcYKEN/DnNQjWfp+9NX0dwQ9GOzWE8="; |  | ||||||
|     media_kit = "sha256-1sVX+aHFLFJBtrNZrR6tWkb80vFELW2N9EejyQKlBPg="; |  | ||||||
|     media_kit_libs_android_video = "sha256-N6QoktM8u9NYF8MAXLsxM9RlV8nICM4NbnmABHTRkZg="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   nativeBuildInputs = [ |  | ||||||
|     pkg-config |  | ||||||
|     wrapGAppsHook |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   buildInputs = [ |  | ||||||
|     gtk3 |  | ||||||
|     glib |  | ||||||
|     glib-networking |  | ||||||
|     webkitgtk_4_1 |  | ||||||
|     libsecret |  | ||||||
|     libnotify |  | ||||||
|     dbus |  | ||||||
|     sqlcipher |  | ||||||
|     openssl |  | ||||||
|     mpv |  | ||||||
|     alsa-lib |  | ||||||
|     libass |  | ||||||
|     ffmpeg-full |  | ||||||
|     libplacebo |  | ||||||
|     libunwind |  | ||||||
|     shaderc |  | ||||||
|     vulkan-headers |  | ||||||
|     vulkan-loader |  | ||||||
|     lcms2 |  | ||||||
|     libdovi |  | ||||||
|     libdvdnav |  | ||||||
|     libdvdread |  | ||||||
|     mujs |  | ||||||
|     libbluray |  | ||||||
|     lua |  | ||||||
|     rubberband |  | ||||||
|     libuchardet |  | ||||||
|     zimg |  | ||||||
|     openal |  | ||||||
|     pipewire |  | ||||||
|     libpulseaudio |  | ||||||
|     libcaca |  | ||||||
|     libdrm |  | ||||||
|     libdisplay-info |  | ||||||
|     libgbm |  | ||||||
|     xorg.libXScrnSaver |  | ||||||
|     xorg.libXpresent |  | ||||||
|     nv-codec-headers-11 |  | ||||||
|     libva |  | ||||||
|     libvdpau |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   flutterBuildFlags = [ |  | ||||||
|     "--release" |  | ||||||
|     "--target" |  | ||||||
|     "lib/main.dart" |  | ||||||
|     "--dart-define=POLYCULE_VERSION=v${version}" |  | ||||||
|     "--dart-define=POLYCULE_IS_STABLE=true" |  | ||||||
|     "--no-tree-shake-icons" |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   postInstall = '' |  | ||||||
|     # Install desktop files and icons from the source |  | ||||||
|     install -Dm644 linux/business.braid.polycule.desktop $out/share/applications/polycule.desktop |  | ||||||
|     install -Dm644 assets/logo/logo-circle.png $out/share/pixmaps/polycule.png |  | ||||||
| 
 |  | ||||||
|     # Update desktop file to use correct executable name |  | ||||||
|     substituteInPlace $out/share/applications/polycule.desktop \ |  | ||||||
|       --replace 'Exec=business.braid.polycule' 'Exec=polycule' |  | ||||||
| 
 |  | ||||||
|     # Create a symlink with the expected name |  | ||||||
|     ln -sf $out/bin/polycule $out/bin/business.braid.polycule |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   meta = with lib; { |  | ||||||
|     description = "A geeky and efficient [matrix] client for power users"; |  | ||||||
|     longDescription = '' |  | ||||||
|       Polycule is a modern Matrix client built with Flutter, designed for power users |  | ||||||
|       who want a fast, efficient, and feature-rich Matrix experience. |  | ||||||
|     ''; |  | ||||||
|     homepage = "https://polycule.im/"; |  | ||||||
|     license = licenses.eupl12; |  | ||||||
|     maintainers = []; |  | ||||||
|     platforms = ["x86_64-linux" "aarch64-linux"]; |  | ||||||
|     sourceProvenance = with sourceTypes; [fromSource]; |  | ||||||
|     mainProgram = "polycule"; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -1,33 +0,0 @@ | ||||||
| { |  | ||||||
|   fetchurl, |  | ||||||
|   appimageTools, |  | ||||||
|   writeShellScript, |  | ||||||
| }: let |  | ||||||
|   pname = "prostudiomasters"; |  | ||||||
|   version = "2.5.6"; |  | ||||||
|   src = fetchurl { |  | ||||||
|     url = "https://download.prostudiomasters.com/linux/ProStudioMasters-${version}.AppImage"; |  | ||||||
|     hash = "sha256-7owOwdcucFfl+JsVj+Seau2KOz0J4P/ep7WrBSNSmbs="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # Create the base AppImage wrapper |  | ||||||
|   baseApp = appimageTools.wrapType2 { |  | ||||||
|     inherit pname version src; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # Create a wrapper script that automatically adds the --in-process-gpu flag |  | ||||||
|   wrapper = writeShellScript "prostudiomasters-wrapper" '' |  | ||||||
|     exec ${baseApp}/bin/prostudiomasters --in-process-gpu "$@" |  | ||||||
|   ''; |  | ||||||
| in |  | ||||||
|   # Override the base app to use our wrapper script |  | ||||||
|   baseApp.overrideAttrs (oldAttrs: { |  | ||||||
|     buildCommand = |  | ||||||
|       oldAttrs.buildCommand |  | ||||||
|       + '' |  | ||||||
|         # Replace the original binary with our wrapper |  | ||||||
|         rm $out/bin/prostudiomasters |  | ||||||
|         cp ${wrapper} $out/bin/prostudiomasters |  | ||||||
|         chmod +x $out/bin/prostudiomasters |  | ||||||
|       ''; |  | ||||||
|   }) |  | ||||||
|  | @ -1,18 +0,0 @@ | ||||||
| {...}: { |  | ||||||
|   nixpkgs.overlays = [ |  | ||||||
|     (final: prev: { |  | ||||||
|       python3 = prev.python3.override { |  | ||||||
|         packageOverrides = pythonPrev: pythonFinal: { |  | ||||||
|           h3 = pythonPrev.callPackage ./h3.nix {h3 = final.h3;}; |  | ||||||
|           pygeofilter = pythonPrev.callPackage ./pygeofilter.nix {}; |  | ||||||
|           pygeoif = pythonPrev.callPackage ./pygeoif.nix {}; |  | ||||||
|           rfeed = pythonPrev.callPackage ./rfeed.nix {}; |  | ||||||
|           pyexiv2 = pythonPrev.callPackage ./pyexiv2.nix {}; |  | ||||||
|           geojson-pydantic = pythonPrev.callPackage ./geojson-pydantic.nix {}; |  | ||||||
|           geopic-tag-reader = pythonPrev.callPackage ./geopic-tag-reader.nix {}; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|       python3Packages = final.python3.pkgs; |  | ||||||
|     }) |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,48 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   fetchPypi, |  | ||||||
|   buildPythonPackage, |  | ||||||
|   flit-core, |  | ||||||
|   pydantic, |  | ||||||
|   geojson, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   pname = "geojson_pydantic"; |  | ||||||
|   version = "2.0.0"; |  | ||||||
| in |  | ||||||
|   buildPythonPackage { |  | ||||||
|     inherit pname version; |  | ||||||
| 
 |  | ||||||
|     pyproject = true; |  | ||||||
| 
 |  | ||||||
|     src = fetchPypi { |  | ||||||
|       inherit pname version; |  | ||||||
|       hash = "sha256-ti6LRFAt0a1Ri19zkDWoGSSnb5gMvbOk6JFu+RO+JC4="; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     build-system = [ |  | ||||||
|       flit-core |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|       pydantic |  | ||||||
|       geojson |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # Skip tests as they may require specific setup |  | ||||||
|     doCheck = false; |  | ||||||
| 
 |  | ||||||
|     # Disable runtime dependencies check |  | ||||||
|     dontCheckRuntimeDeps = true; |  | ||||||
| 
 |  | ||||||
|     # Basic imports check |  | ||||||
|     pythonImportsCheck = ["geojson_pydantic"]; |  | ||||||
| 
 |  | ||||||
|     meta = with lib; { |  | ||||||
|       description = "Pydantic models for GeoJSON objects"; |  | ||||||
|       homepage = "https://github.com/developmentseed/geojson-pydantic"; |  | ||||||
|       license = licenses.mit; |  | ||||||
|       maintainers = []; |  | ||||||
|       platforms = platforms.all; |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
|  | @ -1,70 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   fetchFromGitLab, |  | ||||||
|   buildPythonPackage, |  | ||||||
|   flit-core, |  | ||||||
|   typer, |  | ||||||
|   xmltodict, |  | ||||||
|   timezonefinder, |  | ||||||
|   pytz, |  | ||||||
|   types-pytz, |  | ||||||
|   types-python-dateutil, |  | ||||||
|   rtree, |  | ||||||
|   python-dateutil, |  | ||||||
|   pyexiv2, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   pname = "geopic-tag-reader"; |  | ||||||
|   version = "1.8.0"; |  | ||||||
| in |  | ||||||
|   buildPythonPackage { |  | ||||||
|     inherit pname version; |  | ||||||
| 
 |  | ||||||
|     pyproject = true; |  | ||||||
| 
 |  | ||||||
|     src = fetchFromGitLab { |  | ||||||
|       owner = "panoramax"; |  | ||||||
|       repo = "server/geo-picture-tag-reader"; |  | ||||||
|       rev = version; |  | ||||||
|       sha256 = "0lzf5xxxcdqmq28bpvgpkxf5jxmh2nawwa4rl4yg04bdsi16rf1j"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     build-system = [ |  | ||||||
|       flit-core |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|       typer |  | ||||||
|       xmltodict |  | ||||||
|       pyexiv2 |  | ||||||
|       timezonefinder |  | ||||||
|       pytz |  | ||||||
|       types-pytz |  | ||||||
|       types-python-dateutil |  | ||||||
|       rtree |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     optional-dependencies = { |  | ||||||
|       write-exif = [ |  | ||||||
|         python-dateutil |  | ||||||
|         types-python-dateutil |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Skip tests as they may require network access or specific setup |  | ||||||
|     doCheck = false; |  | ||||||
| 
 |  | ||||||
|     # Disable runtime dependencies check as some dependencies might have issues |  | ||||||
|     dontCheckRuntimeDeps = true; |  | ||||||
| 
 |  | ||||||
|     # Disable imports check initially to avoid dependency issues |  | ||||||
|     pythonImportsCheck = []; |  | ||||||
| 
 |  | ||||||
|     meta = with lib; { |  | ||||||
|       description = "GeoPic Tag Reader - Python library to read and write standardized metadata from geolocated pictures EXIF metadata"; |  | ||||||
|       homepage = "https://gitlab.com/panoramax/server/geo-picture-tag-reader"; |  | ||||||
|       license = licenses.mit; |  | ||||||
|       maintainers = []; |  | ||||||
|       platforms = platforms.all; |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
|  | @ -1,81 +0,0 @@ | ||||||
| { |  | ||||||
|   autoPatchelfHook, |  | ||||||
|   buildPythonPackage, |  | ||||||
|   cmake, |  | ||||||
|   cython, |  | ||||||
|   fetchFromGitHub, |  | ||||||
|   h3, |  | ||||||
|   lib, |  | ||||||
|   ninja, |  | ||||||
|   numpy, |  | ||||||
|   pytestCheckHook, |  | ||||||
|   pytest-cov-stub, |  | ||||||
|   scikit-build-core, |  | ||||||
|   stdenv, |  | ||||||
| }: |  | ||||||
| buildPythonPackage rec { |  | ||||||
|   pname = "h3"; |  | ||||||
|   version = "4.3.1"; |  | ||||||
|   pyproject = true; |  | ||||||
| 
 |  | ||||||
|   # pypi version does not include tests |  | ||||||
|   src = fetchFromGitHub { |  | ||||||
|     owner = "uber"; |  | ||||||
|     repo = "h3-py"; |  | ||||||
|     tag = "v${version}"; |  | ||||||
|     hash = "sha256-zt7zbBgSp2P9q7mObZeQZpW9Szip62dAYdPZ2cGTmi4="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   dontConfigure = true; |  | ||||||
| 
 |  | ||||||
|   nativeCheckInputs = [ |  | ||||||
|     pytestCheckHook |  | ||||||
|     pytest-cov-stub |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   build-system = |  | ||||||
|     [ |  | ||||||
|       scikit-build-core |  | ||||||
|       cmake |  | ||||||
|       cython |  | ||||||
|       ninja |  | ||||||
|     ] |  | ||||||
|     ++ lib.optionals stdenv.hostPlatform.isLinux [ |  | ||||||
|       # On Linux the .so files ends up referring to libh3.so instead of the full |  | ||||||
|       # Nix store path. I'm not sure why this is happening! On Darwin it works |  | ||||||
|       # fine. |  | ||||||
|       autoPatchelfHook |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|   # This is not needed per-se, it's only added for autoPatchelfHook to work |  | ||||||
|   # correctly. See the note above ^^ |  | ||||||
|   buildInputs = lib.optionals stdenv.hostPlatform.isLinux [h3]; |  | ||||||
| 
 |  | ||||||
|   dependencies = [numpy]; |  | ||||||
| 
 |  | ||||||
|   # The following prePatch replaces the h3lib compilation with using the h3 packaged in nixpkgs. |  | ||||||
|   # |  | ||||||
|   # - Remove the h3lib submodule. |  | ||||||
|   # - Patch CMakeLists to avoid building h3lib, and use h3 instead. |  | ||||||
|   prePatch = let |  | ||||||
|     cmakeCommands = '' |  | ||||||
|       include_directories(${lib.getDev h3}/include/h3) |  | ||||||
|       link_directories(${h3}/lib) |  | ||||||
|     ''; |  | ||||||
|   in '' |  | ||||||
|     rm -r src/h3lib |  | ||||||
|     substituteInPlace CMakeLists.txt \ |  | ||||||
|       --replace-fail "add_subdirectory(src/h3lib)" "${cmakeCommands}" \ |  | ||||||
|       --replace-fail "\''${CMAKE_CURRENT_BINARY_DIR}/src/h3lib/src/h3lib/include/h3api.h" "${lib.getDev h3}/include/h3/h3api.h" |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   # Extra check to make sure we can import it from Python |  | ||||||
|   pythonImportsCheck = ["h3"]; |  | ||||||
| 
 |  | ||||||
|   meta = { |  | ||||||
|     homepage = "https://github.com/uber/h3-py"; |  | ||||||
|     description = "Hierarchical hexagonal geospatial indexing system"; |  | ||||||
|     license = lib.licenses.asl20; |  | ||||||
|     maintainers = [lib.maintainers.kalbasit]; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,49 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   fetchFromGitHub, |  | ||||||
|   buildPythonPackage, |  | ||||||
|   exiv2, |  | ||||||
|   boost, |  | ||||||
|   pybind11, |  | ||||||
|   setuptools, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   pname = "pyexiv2"; |  | ||||||
|   version = "2.15.3"; |  | ||||||
| in |  | ||||||
|   buildPythonPackage { |  | ||||||
|     inherit pname version; |  | ||||||
| 
 |  | ||||||
|     pyproject = true; |  | ||||||
|     build-system = [setuptools]; |  | ||||||
| 
 |  | ||||||
|     src = fetchFromGitHub { |  | ||||||
|       owner = "LeoHsiao1"; |  | ||||||
|       repo = "pyexiv2"; |  | ||||||
|       rev = "v${version}"; |  | ||||||
|       sha256 = "sha256-83bFMaoXncvhRJNcCgkkC7B29wR5pjuLO/EdkQdqxxo="; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     buildInputs = [ |  | ||||||
|       exiv2 |  | ||||||
|       boost |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     nativeBuildInputs = [ |  | ||||||
|       pybind11 |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # Skip tests as they may require specific test images |  | ||||||
|     doCheck = false; |  | ||||||
| 
 |  | ||||||
|     # Disable runtime dependencies check initially |  | ||||||
|     dontCheckRuntimeDeps = true; |  | ||||||
| 
 |  | ||||||
|     meta = with lib; { |  | ||||||
|       description = "Python binding to the library exiv2"; |  | ||||||
|       homepage = "https://github.com/LeoHsiao1/pyexiv2"; |  | ||||||
|       license = licenses.gpl3Plus; |  | ||||||
|       maintainers = []; |  | ||||||
|       platforms = platforms.linux; |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
|  | @ -1,52 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   fetchPypi, |  | ||||||
|   buildPythonPackage, |  | ||||||
|   setuptools, |  | ||||||
|   wheel, |  | ||||||
|   lark, |  | ||||||
|   python-dateutil, |  | ||||||
|   shapely, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   pname = "pygeofilter"; |  | ||||||
|   version = "0.3.1"; |  | ||||||
| in |  | ||||||
|   buildPythonPackage { |  | ||||||
|     inherit pname version; |  | ||||||
| 
 |  | ||||||
|     pyproject = true; |  | ||||||
| 
 |  | ||||||
|     src = fetchPypi { |  | ||||||
|       inherit pname version; |  | ||||||
|       hash = "sha256-+SvAYiCZ+H/os23nq92GBZ1hWontYIInNwgiI6V44VA="; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     build-system = [ |  | ||||||
|       setuptools |  | ||||||
|       wheel |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|       lark |  | ||||||
|       python-dateutil |  | ||||||
|       shapely |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # Skip tests as they may require specific setup |  | ||||||
|     doCheck = false; |  | ||||||
| 
 |  | ||||||
|     # Disable runtime dependencies check |  | ||||||
|     dontCheckRuntimeDeps = true; |  | ||||||
| 
 |  | ||||||
|     # Basic imports check |  | ||||||
|     pythonImportsCheck = ["pygeofilter"]; |  | ||||||
| 
 |  | ||||||
|     meta = with lib; { |  | ||||||
|       description = "A pure Python parser implementation of OGC filtering standards"; |  | ||||||
|       homepage = "https://github.com/geopython/pygeofilter"; |  | ||||||
|       license = licenses.mit; |  | ||||||
|       maintainers = []; |  | ||||||
|       platforms = platforms.all; |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
|  | @ -1,48 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   fetchPypi, |  | ||||||
|   buildPythonPackage, |  | ||||||
|   setuptools, |  | ||||||
|   wheel, |  | ||||||
|   typing-extensions, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   pname = "pygeoif"; |  | ||||||
|   version = "1.5.1"; |  | ||||||
| in |  | ||||||
|   buildPythonPackage { |  | ||||||
|     inherit pname version; |  | ||||||
| 
 |  | ||||||
|     pyproject = true; |  | ||||||
| 
 |  | ||||||
|     src = fetchPypi { |  | ||||||
|       inherit pname version; |  | ||||||
|       hash = "sha256-8nprah7Lh66swrUbzFnKeb5w7RKgEE3oYBR4shPdXYE="; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     build-system = [ |  | ||||||
|       setuptools |  | ||||||
|       wheel |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|       typing-extensions |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # Skip tests as they may require specific setup |  | ||||||
|     doCheck = false; |  | ||||||
| 
 |  | ||||||
|     # Disable runtime dependencies check |  | ||||||
|     dontCheckRuntimeDeps = true; |  | ||||||
| 
 |  | ||||||
|     # Basic imports check |  | ||||||
|     pythonImportsCheck = ["pygeoif"]; |  | ||||||
| 
 |  | ||||||
|     meta = with lib; { |  | ||||||
|       description = "A basic implementation of the __geo_interface__"; |  | ||||||
|       homepage = "https://github.com/cleder/pygeoif"; |  | ||||||
|       license = licenses.lgpl21Plus; |  | ||||||
|       maintainers = []; |  | ||||||
|       platforms = platforms.all; |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
|  | @ -1,40 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   fetchPypi, |  | ||||||
|   buildPythonPackage, |  | ||||||
|   setuptools, |  | ||||||
|   python-dateutil, |  | ||||||
| }: |  | ||||||
| buildPythonPackage rec { |  | ||||||
|   pname = "rfeed"; |  | ||||||
|   version = "1.1.1"; |  | ||||||
|   pyproject = true; |  | ||||||
| 
 |  | ||||||
|   src = fetchPypi { |  | ||||||
|     inherit pname version; |  | ||||||
|     hash = "sha256-qpUG8oZrdPWjItOUoUpjwZpoJcLZR1X/GdRt0eJDSBk="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   build-system = [ |  | ||||||
|     setuptools |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   dependencies = [ |  | ||||||
|     python-dateutil |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   # No tests available in the package |  | ||||||
|   doCheck = false; |  | ||||||
| 
 |  | ||||||
|   pythonImportsCheck = [ |  | ||||||
|     "rfeed" |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   meta = with lib; { |  | ||||||
|     description = "RSS feed generation library for Python"; |  | ||||||
|     homepage = "https://pypi.org/project/rfeed/"; |  | ||||||
|     license = licenses.mit; |  | ||||||
|     maintainers = []; |  | ||||||
|     platforms = platforms.all; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,65 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   python3Packages, |  | ||||||
|   fetchFromGitHub, |  | ||||||
|   pkg-config, |  | ||||||
|   libjpeg_turbo, |  | ||||||
|   exiftran ? libjpeg_turbo, |  | ||||||
| }: |  | ||||||
| python3Packages.buildPythonPackage { |  | ||||||
|   pname = "sgblur"; |  | ||||||
|   version = "1.0.0"; |  | ||||||
| 
 |  | ||||||
|   pyproject = true; |  | ||||||
| 
 |  | ||||||
|   src = fetchFromGitHub { |  | ||||||
|     owner = "cquest"; |  | ||||||
|     repo = "sgblur"; |  | ||||||
|     rev = "master"; |  | ||||||
|     hash = "sha256-17wpif2sa021kaa1pbkry4l1967la1qd7knhngvxblrvd7jqqz4y="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   nativeBuildInputs = [ |  | ||||||
|     pkg-config |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   buildInputs = [ |  | ||||||
|     libjpeg_turbo |  | ||||||
|     exiftran |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   build-system = with python3Packages; [ |  | ||||||
|     setuptools |  | ||||||
|     wheel |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   dependencies = with python3Packages; [ |  | ||||||
|     # Core dependencies from pyproject.toml |  | ||||||
|     ultralytics |  | ||||||
|     # pyturbojpeg  # May need special handling |  | ||||||
|     pillow |  | ||||||
|     # uuid  # Built into Python |  | ||||||
|     # exifread |  | ||||||
|     python-multipart |  | ||||||
|     fastapi |  | ||||||
|     uvicorn |  | ||||||
|     requests |  | ||||||
|     # piexif |  | ||||||
|     pydantic-settings |  | ||||||
|     pydantic |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   # Skip tests as they may require GPU or specific setup |  | ||||||
|   doCheck = false; |  | ||||||
| 
 |  | ||||||
|   # The package may have import issues due to system dependencies |  | ||||||
|   pythonImportsCheck = []; |  | ||||||
| 
 |  | ||||||
|   meta = with lib; { |  | ||||||
|     description = "Panoramax Speedy Gonzales Blurring Algorithm - AI-powered face and license plate blurring API"; |  | ||||||
|     homepage = "https://github.com/cquest/sgblur"; |  | ||||||
|     license = licenses.mit; |  | ||||||
|     maintainers = []; |  | ||||||
|     platforms = platforms.unix; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,18 +0,0 @@ | ||||||
| { |  | ||||||
|   buildGoModule, |  | ||||||
|   fetchFromGitHub, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| buildGoModule rec { |  | ||||||
|   pname = "webtoon-dl"; |  | ||||||
|   version = "0.0.10"; |  | ||||||
| 
 |  | ||||||
|   src = fetchFromGitHub { |  | ||||||
|     owner = "robinovitch61"; |  | ||||||
|     repo = "webtoon-dl"; |  | ||||||
|     rev = "v${version}"; |  | ||||||
|     hash = "sha256-geVb3LFPZxPQYARZnaqOr5sgaN6mqkEX5ZiLvg8mF5k="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   vendorHash = "sha256-NTqUygJ6b6kTnLUnJqxCo/URzaRouPLACEPi2Ob1s9w="; |  | ||||||
| } |  | ||||||
|  | @ -1,8 +0,0 @@ | ||||||
| # this folder container modules that are for darwin only |  | ||||||
| {...}: { |  | ||||||
|   imports = [ |  | ||||||
|     ./home-manager |  | ||||||
|     ./users.nix |  | ||||||
|     ./system.nix |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,2 +0,0 @@ | ||||||
| # modules in this folder are to adapt home-manager modules configs to darwin-module configs |  | ||||||
| {...}: {} |  | ||||||
|  | @ -1,27 +0,0 @@ | ||||||
| {self, ...}: { |  | ||||||
|   system.configurationRevision = self.rev or self.dirtyRev or null; |  | ||||||
| 
 |  | ||||||
|   nix = { |  | ||||||
|     gc = { |  | ||||||
|       automatic = true; |  | ||||||
|       interval = [ |  | ||||||
|         { |  | ||||||
|           Hour = 4; |  | ||||||
|           Minute = 15; |  | ||||||
|           Weekday = 7; |  | ||||||
|         } |  | ||||||
|       ]; |  | ||||||
|       options = "--delete-older-than 7d"; |  | ||||||
|     }; |  | ||||||
|     optimise = { |  | ||||||
|       automatic = true; |  | ||||||
|       interval = [ |  | ||||||
|         { |  | ||||||
|           Hour = 4; |  | ||||||
|           Minute = 15; |  | ||||||
|           Weekday = 7; |  | ||||||
|         } |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,16 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   host = config.host; |  | ||||||
| in { |  | ||||||
|   users = { |  | ||||||
|     users = { |  | ||||||
|       leyla = { |  | ||||||
|         name = lib.mkForce host.users.leyla.name; |  | ||||||
|         home = lib.mkForce "/home/${host.users.leyla.name}"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,12 +0,0 @@ | ||||||
| # this folder container modules that are for home manager only |  | ||||||
| {...}: { |  | ||||||
|   imports = [ |  | ||||||
|     ./sops.nix |  | ||||||
|     ./user.nix |  | ||||||
|     ./flipperzero.nix |  | ||||||
|     ./i18n.nix |  | ||||||
|     ./openssh.nix |  | ||||||
|     ./gnome.nix |  | ||||||
|     ./programs |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
|  | @ -1,3 +0,0 @@ | ||||||
| {lib, ...}: { |  | ||||||
|   options.hardware.flipperzero.enable = lib.mkEnableOption "enable flipperzero hardware"; |  | ||||||
| } |  | ||||||
|  | @ -1,106 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   options.gnome = { |  | ||||||
|     extraWindowControls = lib.mkEnableOption "Should we add back in the minimize and maximize window controls?"; |  | ||||||
|     clockFormat = lib.mkOption { |  | ||||||
|       type = lib.types.enum [ |  | ||||||
|         "12h" |  | ||||||
|         "24h" |  | ||||||
|       ]; |  | ||||||
|       default = "24h"; |  | ||||||
|     }; |  | ||||||
|     colorScheme = lib.mkOption { |  | ||||||
|       type = lib.types.enum [ |  | ||||||
|         "default" |  | ||||||
|         "prefer-dark" |  | ||||||
|         "prefer-light" |  | ||||||
|       ]; |  | ||||||
|       default = "default"; |  | ||||||
|     }; |  | ||||||
|     accentColor = lib.mkOption { |  | ||||||
|       type = lib.types.enum [ |  | ||||||
|         "blue" |  | ||||||
|         "teal" |  | ||||||
|         "green" |  | ||||||
|         "yellow" |  | ||||||
|         "orange" |  | ||||||
|         "red" |  | ||||||
|         "pink" |  | ||||||
|         "purple" |  | ||||||
|         "slate" |  | ||||||
|       ]; |  | ||||||
|       default = "blue"; |  | ||||||
|     }; |  | ||||||
|     extensions = lib.mkOption { |  | ||||||
|       type = lib.types.listOf lib.types.package; |  | ||||||
|       default = []; |  | ||||||
|       description = "The set of extensions to install and enable in the user environment."; |  | ||||||
|     }; |  | ||||||
|     hotkeys = lib.mkOption { |  | ||||||
|       type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { |  | ||||||
|         options = { |  | ||||||
|           key = lib.mkOption { |  | ||||||
|             type = lib.types.strMatching "[a-zA-Z0-9-]+"; |  | ||||||
|             default = builtins.replaceStrings [" " "/" "_"] ["-" "-" "-"] name; |  | ||||||
|           }; |  | ||||||
|           name = lib.mkOption { |  | ||||||
|             type = lib.types.str; |  | ||||||
|             default = name; |  | ||||||
|           }; |  | ||||||
|           binding = lib.mkOption { |  | ||||||
|             type = lib.types.str; |  | ||||||
|           }; |  | ||||||
|           command = lib.mkOption { |  | ||||||
|             type = lib.types.str; |  | ||||||
|           }; |  | ||||||
|         }; |  | ||||||
|       })); |  | ||||||
|       default = {}; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = { |  | ||||||
|     home.packages = config.gnome.extensions; |  | ||||||
|     dconf = { |  | ||||||
|       settings = lib.mkMerge [ |  | ||||||
|         { |  | ||||||
|           "org/gnome/shell" = { |  | ||||||
|             disable-user-extensions = false; # enables user extensions |  | ||||||
|             enabled-extensions = builtins.map (extension: extension.extensionUuid) config.gnome.extensions; |  | ||||||
|           }; |  | ||||||
| 
 |  | ||||||
|           "org/gnome/desktop/wm/preferences".button-layout = lib.mkIf config.gnome.extraWindowControls ":minimize,maximize,close"; |  | ||||||
| 
 |  | ||||||
|           "org/gnome/desktop/interface".color-scheme = config.gnome.colorScheme; |  | ||||||
|           "org/gnome/desktop/interface".accent-color = config.gnome.accentColor; |  | ||||||
|           "org/gnome/desktop/interface".clock-format = config.gnome.clockFormat; |  | ||||||
|         } |  | ||||||
|         ( |  | ||||||
|           lib.mkMerge ( |  | ||||||
|             builtins.map (value: let |  | ||||||
|               entry = "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/${value.key}"; |  | ||||||
|             in { |  | ||||||
|               ${entry} = { |  | ||||||
|                 binding = value.binding; |  | ||||||
|                 command = value.command; |  | ||||||
|                 name = value.name; |  | ||||||
|               }; |  | ||||||
| 
 |  | ||||||
|               "org/gnome/settings-daemon/plugins/media-keys" = { |  | ||||||
|                 custom-keybindings = [ |  | ||||||
|                   "/${entry}/" |  | ||||||
|                 ]; |  | ||||||
|               }; |  | ||||||
|             }) |  | ||||||
|             ( |  | ||||||
|               lib.attrsets.mapAttrsToList (_: value: value) config.gnome.hotkeys |  | ||||||
|             ) |  | ||||||
|           ) |  | ||||||
|         ) |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,42 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   options = { |  | ||||||
|     i18n = { |  | ||||||
|       defaultLocale = lib.mkOption { |  | ||||||
|         type = lib.types.str; |  | ||||||
|         default = "en_US.UTF-8"; |  | ||||||
|         example = "nl_NL.UTF-8"; |  | ||||||
|         description = '' |  | ||||||
|           The default locale.  It determines the language for program |  | ||||||
|           messages, the format for dates and times, sort order, and so on. |  | ||||||
|           It also determines the character set, such as UTF-8. |  | ||||||
|         ''; |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       extraLocaleSettings = lib.mkOption { |  | ||||||
|         type = lib.types.attrsOf lib.types.str; |  | ||||||
|         default = {}; |  | ||||||
|         example = { |  | ||||||
|           LC_MESSAGES = "en_US.UTF-8"; |  | ||||||
|           LC_TIME = "de_DE.UTF-8"; |  | ||||||
|         }; |  | ||||||
|         description = '' |  | ||||||
|           A set of additional system-wide locale settings other than |  | ||||||
|           `LANG` which can be configured with |  | ||||||
|           {option}`i18n.defaultLocale`. |  | ||||||
|         ''; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = { |  | ||||||
|     home.sessionVariables = |  | ||||||
|       { |  | ||||||
|         LANG = config.i18n.defaultLocale; |  | ||||||
|       } |  | ||||||
|       // config.i18n.extraLocaleSettings; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,107 +0,0 @@ | ||||||
| { |  | ||||||
|   pkgs, |  | ||||||
|   config, |  | ||||||
|   osConfig, |  | ||||||
|   lib, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   options.programs.openssh = { |  | ||||||
|     enable = lib.mkEnableOption "should we enable openssh"; |  | ||||||
|     authorizedKeys = lib.mkOption { |  | ||||||
|       type = lib.types.listOf lib.types.str; |  | ||||||
|       default = []; |  | ||||||
|     }; |  | ||||||
|     hostKeys = lib.mkOption { |  | ||||||
|       type = lib.types.listOf lib.types.attrs; |  | ||||||
|       default = []; |  | ||||||
|       example = [ |  | ||||||
|         { |  | ||||||
|           type = "rsa"; |  | ||||||
|           bits = 4096; |  | ||||||
|           path = "${config.home.username}_${osConfig.networking.hostName}_rsa"; |  | ||||||
|           rounds = 100; |  | ||||||
|           openSSHFormat = true; |  | ||||||
|         } |  | ||||||
|         { |  | ||||||
|           type = "ed25519"; |  | ||||||
|           path = "${config.home.username}_${osConfig.networking.hostName}_ed25519"; |  | ||||||
|           rounds = 100; |  | ||||||
|           comment = "key comment"; |  | ||||||
|         } |  | ||||||
|       ]; |  | ||||||
|       description = '' |  | ||||||
|         NixOS can automatically generate SSH host keys.  This option |  | ||||||
|         specifies the path, type and size of each key.  See |  | ||||||
|         {manpage}`ssh-keygen(1)` for supported types |  | ||||||
|         and sizes. Paths are relative to home directory |  | ||||||
|       ''; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = lib.mkIf config.programs.openssh.enable ( |  | ||||||
|     lib.mkMerge [ |  | ||||||
|       ( |  | ||||||
|         lib.mkIf ((builtins.length config.programs.openssh.hostKeys) != 0) { |  | ||||||
|           services.ssh-agent.enable = true; |  | ||||||
|           programs.ssh = { |  | ||||||
|             enable = true; |  | ||||||
|             enableDefaultConfig = false; |  | ||||||
|             matchBlocks = { |  | ||||||
|               "*" = { |  | ||||||
|                 compression = true; |  | ||||||
|                 addKeysToAgent = "confirm"; |  | ||||||
|               }; |  | ||||||
|             }; |  | ||||||
|             extraConfig = lib.strings.concatLines ( |  | ||||||
|               builtins.map (hostKey: "IdentityFile ~/.ssh/${hostKey.path}") config.programs.openssh.hostKeys |  | ||||||
|             ); |  | ||||||
|           }; |  | ||||||
| 
 |  | ||||||
|           systemd.user.services = builtins.listToAttrs ( |  | ||||||
|             builtins.map (hostKey: |  | ||||||
|               lib.attrsets.nameValuePair "ssh-gen-keys-${hostKey.path}" { |  | ||||||
|                 Install = { |  | ||||||
|                   WantedBy = ["default.target"]; |  | ||||||
|                 }; |  | ||||||
|                 Service = let |  | ||||||
|                   path = "${config.home.homeDirectory}/.ssh/${hostKey.path}"; |  | ||||||
|                 in { |  | ||||||
|                   Restart = "always"; |  | ||||||
|                   Type = "simple"; |  | ||||||
|                   ExecStart = "${ |  | ||||||
|                     pkgs.writeShellScript "ssh-gen-keys" '' |  | ||||||
|                       if ! [ -s "${path}" ]; then |  | ||||||
|                           if ! [ -h "${path}" ]; then |  | ||||||
|                               rm -f "${path}" |  | ||||||
|                           fi |  | ||||||
|                           mkdir -p "$(dirname '${path}')" |  | ||||||
|                           chmod 0755 "$(dirname '${path}')" |  | ||||||
|                           ${pkgs.openssh}/bin/ssh-keygen \ |  | ||||||
|                             -t "${hostKey.type}" \ |  | ||||||
|                             ${lib.optionalString (hostKey ? bits) "-b ${toString hostKey.bits}"} \ |  | ||||||
|                             ${lib.optionalString (hostKey ? rounds) "-a ${toString hostKey.rounds}"} \ |  | ||||||
|                             ${lib.optionalString (hostKey ? comment) "-C '${hostKey.comment}'"} \ |  | ||||||
|                             ${lib.optionalString (hostKey ? openSSHFormat && hostKey.openSSHFormat) "-o"} \ |  | ||||||
|                             -f "${path}" \ |  | ||||||
|                             -N "" |  | ||||||
|                           chown ${config.home.username} ${path}* |  | ||||||
|                           chgrp ${config.home.username} ${path}* |  | ||||||
|                       fi |  | ||||||
|                     '' |  | ||||||
|                   }"; |  | ||||||
|                 }; |  | ||||||
|               }) |  | ||||||
|             config.programs.openssh.hostKeys |  | ||||||
|           ); |  | ||||||
|         } |  | ||||||
|       ) |  | ||||||
|       (lib.mkIf osConfig.host.impermanence.enable { |  | ||||||
|         home.persistence."/persist${config.home.homeDirectory}" = { |  | ||||||
|           files = lib.lists.flatten ( |  | ||||||
|             builtins.map (hostKey: [".ssh/${hostKey.path}" ".ssh/${hostKey.path}.pub"]) config.programs.openssh.hostKeys |  | ||||||
|           ); |  | ||||||
|         }; |  | ||||||
|       }) |  | ||||||
|     ] |  | ||||||
|   ); |  | ||||||
| } |  | ||||||
|  | @ -1,15 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   osConfig, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   config = lib.mkIf (config.programs.anki.enable && osConfig.host.impermanence.enable) { |  | ||||||
|     home.persistence."/persist${config.home.homeDirectory}" = { |  | ||||||
|       directories = [ |  | ||||||
|         "${config.xdg.dataHome}/Anki2/" |  | ||||||
|       ]; |  | ||||||
|       allowOther = true; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue