added syncthing

This commit is contained in:
Leyla Becker 2024-12-30 20:05:52 -06:00
parent 21eea779db
commit 905c4e73b2
5 changed files with 119 additions and 2 deletions

View file

@ -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
@ -57,5 +59,4 @@
- tail scale clients - tail scale clients
- 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

View file

@ -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 = [

View file

@ -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

View 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"];
};
})
];
};
};
};
}

View file

@ -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
];
};
}; };
}; };
} }