78 lines
2.1 KiB
Nix
78 lines
2.1 KiB
Nix
{ pkgs, ... }:
|
|
{
|
|
home.packages = with pkgs; [ sshfs ];
|
|
|
|
systemd.user.services =
|
|
let
|
|
mountArchive = ''
|
|
${pkgs.sshfs}/bin/sshfs \
|
|
-f \
|
|
-o reconnect \
|
|
-o compression=yes \
|
|
-o ServerAliveInterval=15 \
|
|
-o ServerAliveCountMax=3 \
|
|
-o IdentityFile=%h/.ssh/id_ed25519 \
|
|
-o StrictHostKeyChecking=yes \
|
|
drew@mcp:/tank/archive/drew \
|
|
%h/archive
|
|
'';
|
|
unmountArchive = "/run/wrappers/bin/fusermount -u %h/archive";
|
|
in
|
|
{
|
|
# Mounts the archive when the system is online.
|
|
mcp-archive = {
|
|
Unit = {
|
|
Description = "SSHFS mount for remote archive";
|
|
|
|
# Start only after the network is online
|
|
After = [ "network-online.target" ];
|
|
|
|
# Stop this service if the network stops
|
|
StopPropagatedFrom = [ "network-online.target" ];
|
|
};
|
|
|
|
Service = {
|
|
Type = "simple";
|
|
ExecStartPre = "/run/current-system/sw/bin/mkdir -p %h/archive";
|
|
ExecStart = mountArchive;
|
|
ExecStop = unmountArchive;
|
|
|
|
Restart = "on-failure";
|
|
RestartSec = "10s";
|
|
};
|
|
|
|
Install = {
|
|
WantedBy = [ "default.target" ];
|
|
};
|
|
};
|
|
|
|
# Unmounts the SSHFS mount whenever the system wants to go to sleep. If I
|
|
# don't do this, the service will prevent sleep while it tries to
|
|
# reconnect.
|
|
mcp-archive-unmount-on-sleep = {
|
|
Unit = {
|
|
Description = "Unmount SSHFS archive before sleep";
|
|
|
|
# Run this before the system goes to sleep. It should then be
|
|
# shutdown after the system wakes up.
|
|
Before = [ "sleep.target" ];
|
|
StopWhenUnneeded = true;
|
|
};
|
|
|
|
Service = {
|
|
Type = "oneshot";
|
|
# The service will remain after it runs so that it stays in the
|
|
# service registry as active.
|
|
RemainAfterExit = true;
|
|
ExecStart = unmountArchive;
|
|
ExecStop = mountArchive;
|
|
};
|
|
|
|
Install = {
|
|
WantedBy = [ "sleep.target" ];
|
|
};
|
|
};
|
|
};
|
|
|
|
}
|