forked from jan-leila/nix-config
		
	added syncthing
This commit is contained in:
		
							parent
							
								
									21eea779db
								
							
						
					
					
						commit
						905c4e73b2
					
				
					 5 changed files with 119 additions and 2 deletions
				
			
		|  | @ -10,6 +10,8 @@ | ||||||
| |  `emergent` |      Desktop Computer      |       Eve        |  Desktop  | | |  `emergent` |      Desktop Computer      |       Eve        |  Desktop  | | ||||||
| | `threshold` |           Laptop           |       Eve        |  Laptop   | | | `threshold` |           Laptop           |       Eve        |  Laptop   | | ||||||
| |  `wolfram`  |         Steam Deck         |      House       |  Handheld | | |  `wolfram`  |         Steam Deck         |      House       |  Handheld | | ||||||
|  | |   `ceder`   | A5 Tablet (not using nix)  |      Leyla       |   Tablet  | | ||||||
|  | |   `skate`   | A4 Tablet (not using nix)  |      Leyla       |   Tablet  | | ||||||
| 
 | 
 | ||||||
| # Tooling | # Tooling | ||||||
| ## Rebuilding | ## Rebuilding | ||||||
|  | @ -58,4 +60,3 @@ | ||||||
| - wake on LAN | - wake on LAN | ||||||
| - ISO target that contains authorized keys for nixos-anywhere https://github.com/diegofariasm/yggdrasil/blob/4acc43ebc7bcbf2e41376d14268e382007e94d78/hosts/bootstrap/default.nix | - ISO target that contains authorized keys for nixos-anywhere https://github.com/diegofariasm/yggdrasil/blob/4acc43ebc7bcbf2e41376d14268e382007e94d78/hosts/bootstrap/default.nix | ||||||
| - Immich | - Immich | ||||||
| - Syncthing declarative set up for devices https://nixos.wiki/wiki/Syncthing |  | ||||||
|  | @ -19,6 +19,16 @@ | ||||||
|       ester.isDesktopUser = true; |       ester.isDesktopUser = true; | ||||||
|       eve.isDesktopUser = true; |       eve.isDesktopUser = true; | ||||||
|     }; |     }; | ||||||
|  |     sync = { | ||||||
|  |       enable = true; | ||||||
|  |       folders = { | ||||||
|  |         leyla = { | ||||||
|  |           documents.enable = true; | ||||||
|  |           calendar.enable = true; | ||||||
|  |           notes.enable = true; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   environment.systemPackages = [ |   environment.systemPackages = [ | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ | ||||||
|     ./desktop.nix |     ./desktop.nix | ||||||
|     ./ssh.nix |     ./ssh.nix | ||||||
|     ./i18n.nix |     ./i18n.nix | ||||||
|  |     ./sync.nix | ||||||
|     ./impermanence.nix |     ./impermanence.nix | ||||||
|     ./disko.nix |     ./disko.nix | ||||||
|     ./server |     ./server | ||||||
|  |  | ||||||
							
								
								
									
										87
									
								
								modules/nixos-modules/sync.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								modules/nixos-modules/sync.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,87 @@ | ||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   lib, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   mountDir = "/mnt/sync"; | ||||||
|  | in { | ||||||
|  |   options.host.sync = { | ||||||
|  |     enable = lib.mkEnableOption "should sync thing be enabled on this device"; | ||||||
|  |     folders = { | ||||||
|  |       leyla = { | ||||||
|  |         documents = { | ||||||
|  |           enable = lib.mkEnableOption "should the documents folder be synced"; | ||||||
|  |         }; | ||||||
|  |         calendar = { | ||||||
|  |           enable = lib.mkEnableOption "should the calendar folder be synced"; | ||||||
|  |         }; | ||||||
|  |         notes = { | ||||||
|  |           enable = lib.mkEnableOption "should the notes folder by synced"; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |       extraFolders = lib.mkOption { | ||||||
|  |         type = lib.types.attrsOf (lib.types.submodule ({...}: { | ||||||
|  |           options = { | ||||||
|  |             path = lib.mkOption { | ||||||
|  |               type = lib.types.str; | ||||||
|  |             }; | ||||||
|  |             devices = lib.mkOption { | ||||||
|  |               type = lib.types.listof lib.types.str; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |         })); | ||||||
|  |         default = {}; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = { | ||||||
|  |     systemd = lib.mkIf config.services.syncthing.enable { | ||||||
|  |       tmpfiles.rules = [ | ||||||
|  |         "d ${mountDir} 755 syncthing syncthing -" | ||||||
|  |         "d ${config.services.syncthing.dataDir} 755 syncthing syncthing -" | ||||||
|  |         "d ${config.services.syncthing.configDir} 755 syncthing syncthing -" | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  |     services.syncthing = { | ||||||
|  |       enable = config.host.sync.enable; | ||||||
|  |       user = "syncthing"; | ||||||
|  |       group = "syncthing"; | ||||||
|  |       dataDir = "${mountDir}/default"; | ||||||
|  |       configDir = "/etc/syncthing"; | ||||||
|  |       overrideDevices = true; | ||||||
|  |       overrideFolders = true; | ||||||
|  |       settings = { | ||||||
|  |         devices = { | ||||||
|  |           ceder = { | ||||||
|  |             id = "MGXUJBS-7AENXHB-7YQRNWG-QILKEJD-5462U2E-WAQW4R4-I2TVK5H-SMK6LAA"; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |         folders = lib.mkMerge [ | ||||||
|  |           config.host.sync.folders.extraFolders | ||||||
|  |           (lib.mkIf config.host.sync.folders.leyla.documents.enable { | ||||||
|  |             "documents" = { | ||||||
|  |               id = "hvrj0-9bm1p"; | ||||||
|  |               path = "/mnt/sync/leyla/documents"; | ||||||
|  |               devices = ["ceder"]; | ||||||
|  |             }; | ||||||
|  |           }) | ||||||
|  |           (lib.mkIf config.host.sync.folders.leyla.calendar.enable { | ||||||
|  |             "calendar" = { | ||||||
|  |               id = "8oatl-1rv6w"; | ||||||
|  |               path = "/mnt/sync/leyla/calendar"; | ||||||
|  |               devices = ["ceder"]; | ||||||
|  |             }; | ||||||
|  |           }) | ||||||
|  |           (lib.mkIf config.host.sync.folders.leyla.notes.enable { | ||||||
|  |             "notes" = { | ||||||
|  |               id = "dwbuv-zffnf"; | ||||||
|  |               path = "/mnt/sync/leyla/notes"; | ||||||
|  |               devices = ["ceder"]; | ||||||
|  |             }; | ||||||
|  |           }) | ||||||
|  |         ]; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | @ -22,6 +22,7 @@ | ||||||
|     hass = 2004; |     hass = 2004; | ||||||
|     headscale = 2005; |     headscale = 2005; | ||||||
|     nextcloud = 2006; |     nextcloud = 2006; | ||||||
|  |     syncthing = 2007; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   gids = { |   gids = { | ||||||
|  | @ -36,6 +37,7 @@ | ||||||
|     hass = 2004; |     hass = 2004; | ||||||
|     headscale = 2005; |     headscale = 2005; | ||||||
|     nextcloud = 2006; |     nextcloud = 2006; | ||||||
|  |     syncthing = 2007; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   users = config.users.users; |   users = config.users.users; | ||||||
|  | @ -160,6 +162,12 @@ in { | ||||||
|             isSystemUser = true; |             isSystemUser = true; | ||||||
|             group = config.users.users.nextcloud.name; |             group = config.users.users.nextcloud.name; | ||||||
|           }; |           }; | ||||||
|  | 
 | ||||||
|  |           syncthing = { | ||||||
|  |             uid = lib.mkForce uids.syncthing; | ||||||
|  |             isSystemUser = true; | ||||||
|  |             group = config.users.users.syncthing.name; | ||||||
|  |           }; | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         groups = { |         groups = { | ||||||
|  | @ -250,6 +258,16 @@ in { | ||||||
|               # leyla |               # leyla | ||||||
|             ]; |             ]; | ||||||
|           }; |           }; | ||||||
|  | 
 | ||||||
|  |           syncthing = { | ||||||
|  |             gid = lib.mkForce gids.syncthing; | ||||||
|  |             members = [ | ||||||
|  |               users.syncthing.name | ||||||
|  |               leyla | ||||||
|  |               ester | ||||||
|  |               eve | ||||||
|  |             ]; | ||||||
|  |           }; | ||||||
|         }; |         }; | ||||||
|       }; |       }; | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue