Compare commits
3 Commits
9057ebf7fd
...
docs
Author | SHA1 | Date | |
---|---|---|---|
cd5b2528e9
|
|||
d53405e39e
|
|||
f3424680f2
|
26
flake.lock
generated
26
flake.lock
generated
@@ -8,11 +8,11 @@
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1703433843,
|
||||
"narHash": "sha256-nmtA4KqFboWxxoOAA6Y1okHbZh+HsXaMPFkYHsoDRDw=",
|
||||
"lastModified": 1703371241,
|
||||
"narHash": "sha256-f7ZcabJ5iAH2IRfVuI55xSPZ9TbegFzvFxoKtIPNEn8=",
|
||||
"owner": "ryantm",
|
||||
"repo": "agenix",
|
||||
"rev": "417caa847f9383e111d1397039c9d4337d024bf0",
|
||||
"rev": "457669db4259ff69d1ac1183aaa6000420940c1f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -139,11 +139,11 @@
|
||||
},
|
||||
"nixos-hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1703545041,
|
||||
"narHash": "sha256-nvQA+k1rSszrf4kA4eK2i/SGbzoXyoKHzzyzq/Jca1w=",
|
||||
"lastModified": 1702453208,
|
||||
"narHash": "sha256-0wRi9SposfE2wHqjuKt8WO2izKB/ASDOV91URunIqgo=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "a15b6e525f5737a47b4ce28445c836996fb2ea8c",
|
||||
"rev": "7763c6fd1f299cb9361ff2abf755ed9619ef01d6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -186,11 +186,11 @@
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1703467016,
|
||||
"narHash": "sha256-/5A/dNPhbQx/Oa2d+Get174eNI3LERQ7u6WTWOlR1eQ=",
|
||||
"lastModified": 1703068421,
|
||||
"narHash": "sha256-WSw5Faqlw75McIflnl5v7qVD/B3S2sLh+968bpOGrWA=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d02d818f22c777aa4e854efc3242ec451e5d462a",
|
||||
"rev": "d65bceaee0fb1e64363f7871bc43dc1c6ecad99f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -214,11 +214,11 @@
|
||||
"secrets": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1703545643,
|
||||
"narHash": "sha256-FS/acsRQ01Gj39P1t5CQ6cKOdwADmenk//vVmpA/EgU=",
|
||||
"lastModified": 1702936962,
|
||||
"narHash": "sha256-uIZ2uPE26JKJ58463ejHMiAOpqBwflyN6tCmZ89vaSQ=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "ef1f91b155f3bdc4efb2824ad0c47b21b8b1bbfa",
|
||||
"revCount": 9,
|
||||
"rev": "c6db5c3ba8bff0e618fc3e31c9680863c5e53800",
|
||||
"revCount": 5,
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.vimium.com/jordan/nix-secrets.git"
|
||||
},
|
||||
|
@@ -1,4 +1,4 @@
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
@@ -6,19 +6,13 @@
|
||||
../desktop.nix
|
||||
];
|
||||
|
||||
boot = {
|
||||
loader.grub = {
|
||||
enable = true;
|
||||
device = "/dev/sda";
|
||||
zfsSupport = true;
|
||||
};
|
||||
};
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
boot.loader.grub.zfsSupport = true;
|
||||
|
||||
networking = {
|
||||
hostName = "helios";
|
||||
hostId = "47d23505";
|
||||
networkmanager.enable = true;
|
||||
};
|
||||
networking.hostName = "helios";
|
||||
networking.hostId = "47d23505";
|
||||
networking.networkmanager.enable = true;
|
||||
|
||||
nix.package = pkgs.nixFlakes;
|
||||
nix.extraOptions = ''
|
||||
@@ -46,15 +40,6 @@
|
||||
gpg.enable = true;
|
||||
pass.enable = true;
|
||||
};
|
||||
services = {
|
||||
borgmatic = {
|
||||
enable = true;
|
||||
directories = [
|
||||
"/home/jordan/Documents"
|
||||
];
|
||||
repoPath = "ssh://b9cjl9hq@b9cjl9hq.repo.borgbase.com/./repo";
|
||||
};
|
||||
};
|
||||
shell = {
|
||||
git.enable = true;
|
||||
zsh.enable = true;
|
||||
|
30
hosts/new.md
Normal file
30
hosts/new.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# Steps to add a new host
|
||||
|
||||
1. Generate an SSH host key to be used for secrets
|
||||
`ssh-keygen -t ed25519 -f /tmp/ssh_host_ed25519_key -C ""`
|
||||
1. Go to borgmatic.com, add the generated SSH key and create a new
|
||||
repository
|
||||
1. Add a new host entry to nix-secrets/secrets.nix
|
||||
1. Generate a repository passphrase in nix-secrets
|
||||
1. Commit nix-secrets and run `nix flake update` in nix-config
|
||||
1. Add a README.md and default.nix suited to the host
|
||||
1. Define (or generate with `nixos-generate-config`) a
|
||||
hardware-configuration.nix
|
||||
1. Define the disk layout to be used by disko
|
||||
1. Commit nix-config
|
||||
1. Boot the NixOS installer
|
||||
1. Copy the generated SSH host key to `/etc/ssh`
|
||||
1. Run `nix run github:nix-community/nixos-anywhere -- --flake .#<hostname> root@<ip address>`
|
||||
|
||||
## Post install
|
||||
> The backup and Tailscale modules won't work until the following steps are
|
||||
> completed.
|
||||
|
||||
1. Run `sudo borgmatic init --encryption repokey-blake2`
|
||||
1. Restart `borgmatic`
|
||||
1. Run `sudo tailscale up --login-server https://headscale.vimium.net`
|
||||
1. Visit the URL, then SSH onto `vps1` and run
|
||||
`headscale --user mesh nodes register --key <key>`
|
||||
1. (Optionally) Give the Tailscale node a friendly name with
|
||||
`headscale node rename -i <index> <hostname>`
|
||||
|
@@ -1,11 +1,8 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
{ config, pkgs, ... }:
|
||||
let
|
||||
snd-usb-audio-module = pkgs.callPackage ./snd-usb-audio.nix {
|
||||
kernel = config.boot.kernelPackages.kernel;
|
||||
};
|
||||
patched = snd-usb-audio-module.overrideAttrs (prev: {
|
||||
patches = [ ./0001-Update-device-ID-for-PreSonus-1824c.patch ];
|
||||
});
|
||||
upmixConfig = ''
|
||||
stream.properties = {
|
||||
channelmix.upmix = true
|
||||
@@ -13,9 +10,10 @@ let
|
||||
}
|
||||
'';
|
||||
in {
|
||||
boot.kernelModules = [ "snd-usb-audio" ];
|
||||
boot.extraModulePackages = [
|
||||
(patched)
|
||||
(snd-usb-audio-module.overrideAttrs (_: {
|
||||
patches = [ ./0001-Update-device-ID-for-PreSonus-1824c.patch ];
|
||||
}))
|
||||
];
|
||||
|
||||
environment.etc = {
|
||||
|
@@ -52,6 +52,34 @@
|
||||
};
|
||||
};
|
||||
|
||||
age.secrets."passwords/services/borg/odyssey-passphrase" = {
|
||||
file = "${inputs.secrets}/passwords/services/borg/odyssey-passphrase.age";
|
||||
};
|
||||
|
||||
services.borgmatic = {
|
||||
enable = true;
|
||||
settings = {
|
||||
source_directories = [
|
||||
"/home/jordan/Documents"
|
||||
];
|
||||
repositories = [
|
||||
{ label = "borgbase"; path = "ssh://iqwu22oq@iqwu22oq.repo.borgbase.com/./repo"; }
|
||||
];
|
||||
storage = {
|
||||
encryption_passcommand = "cat ${config.age.secrets."passwords/services/borg/odyssey-passphrase".path}";
|
||||
ssh_command = "ssh -i /etc/ssh/ssh_host_ed25519_key";
|
||||
};
|
||||
retention = {
|
||||
keep_daily = 7;
|
||||
keep_weekly = 4;
|
||||
keep_monthly = 6;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Without this override, `cat` is unavailable for `encryption_passcommand`
|
||||
systemd.services.borgmatic.confinement.fullUnit = true;
|
||||
|
||||
modules = {
|
||||
desktop = {
|
||||
apps.qbittorrent.enable = true;
|
||||
@@ -83,15 +111,6 @@
|
||||
gpg.enable = true;
|
||||
pass.enable = true;
|
||||
};
|
||||
services = {
|
||||
borgmatic = {
|
||||
enable = true;
|
||||
directories = [
|
||||
"/home/jordan/Documents"
|
||||
];
|
||||
repoPath = "ssh://iqwu22oq@iqwu22oq.repo.borgbase.com/./repo";
|
||||
};
|
||||
};
|
||||
shell = {
|
||||
git.enable = true;
|
||||
zsh.enable = true;
|
||||
|
@@ -64,9 +64,5 @@
|
||||
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.apfs-fuse
|
||||
];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
||||
|
@@ -29,6 +29,21 @@
|
||||
|
||||
sound.enable = true;
|
||||
|
||||
age.secrets."passwords/networks.age" = {
|
||||
file = "${inputs.secrets}/passwords/networks.age";
|
||||
};
|
||||
|
||||
networking = {
|
||||
wireless = {
|
||||
enable = true;
|
||||
interfaces = [ "wlan0" ];
|
||||
environmentFile = config.age.secrets."passwords/networks.age".path;
|
||||
networks = {
|
||||
"Apollo 600 Mbps".psk = "@PSK_APOLLO@";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
@@ -93,25 +108,35 @@
|
||||
};
|
||||
};
|
||||
|
||||
modules = {
|
||||
networking = {
|
||||
wireless = {
|
||||
enable = true;
|
||||
interfaces = [ "wlan0" ];
|
||||
age.secrets."passwords/services/borg/pi-passphrase" = {
|
||||
file = "${inputs.secrets}/passwords/services/borg/pi-passphrase.age";
|
||||
};
|
||||
|
||||
services.borgmatic = {
|
||||
enable = true;
|
||||
settings = {
|
||||
source_directories = [
|
||||
"/var/lib/mosquitto"
|
||||
"/var/lib/zigbee2mqtt"
|
||||
];
|
||||
repositories = [
|
||||
{ label = "borgbase"; path = "ssh://qcw86s11@qcw86s11.repo.borgbase.com/./repo"; }
|
||||
];
|
||||
storage = {
|
||||
encryption_passcommand = "cat ${config.age.secrets."passwords/services/borg/pi-passphrase".path}";
|
||||
ssh_command = "ssh -i /etc/ssh/ssh_host_ed25519_key";
|
||||
};
|
||||
};
|
||||
services = {
|
||||
borgmatic = {
|
||||
enable = true;
|
||||
directories = [
|
||||
"/var/lib/mosquitto"
|
||||
"/var/lib/zigbee2mqtt"
|
||||
];
|
||||
repoPath = "ssh://qcw86s11@qcw86s11.repo.borgbase.com/./repo";
|
||||
retention = {
|
||||
keep_daily = 7;
|
||||
keep_weekly = 4;
|
||||
keep_monthly = 6;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Without this override, `cat` is unavailable for `encryption_passcommand`
|
||||
systemd.services.borgmatic.confinement.fullUnit = true;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
libraspberrypi
|
||||
raspberrypi-eeprom
|
||||
|
@@ -26,10 +26,8 @@
|
||||
./editors/neovim
|
||||
./editors/vscode.nix
|
||||
./networking/tailscale.nix
|
||||
./networking/wireless.nix
|
||||
./security/gpg.nix
|
||||
./security/pass.nix
|
||||
./services/borgmatic
|
||||
./shell/git
|
||||
./shell/zsh
|
||||
];
|
||||
|
@@ -1,36 +0,0 @@
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let cfg = config.modules.networking.wireless;
|
||||
in {
|
||||
options.modules.networking.wireless = {
|
||||
enable = mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
description = mdDoc "Automatically connect to known networks";
|
||||
};
|
||||
interfaces = mkOption {
|
||||
default = [ ]; # All interfaces
|
||||
example = [ "wlan0" ];
|
||||
description = mdDoc "Interfaces for `wpa_supplicant` to bind to";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
age.secrets."passwords/networks" = {
|
||||
file = "${inputs.secrets}/passwords/networks.age";
|
||||
};
|
||||
|
||||
networking = {
|
||||
wireless = {
|
||||
enable = true;
|
||||
interfaces = cfg.interfaces;
|
||||
environmentFile = config.age.secrets."passwords/networks".path;
|
||||
networks = {
|
||||
"Apollo 600 Mbps".psk = "@PSK_APOLLO@";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
@@ -1,57 +0,0 @@
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.modules.services.borgmatic;
|
||||
hostname = config.networking.hostName;
|
||||
in {
|
||||
options.modules.services.borgmatic = {
|
||||
enable = mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
description = mdDoc "Enable backups on this host with `borgmatic`";
|
||||
};
|
||||
directories = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
example = [
|
||||
"/home/jordan/Documents"
|
||||
];
|
||||
description = mdDoc "List of directories to backup";
|
||||
};
|
||||
repoPath = mkOption {
|
||||
type = types.str;
|
||||
example = "ssh://example@example.repo.borgbase.com/./repo";
|
||||
description = mdDoc "Destination borg repository for backup";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
age.secrets."passwords/services/borg/${hostname}-passphrase" = {
|
||||
file = "${inputs.secrets}/passwords/services/borg/${hostname}-passphrase.age";
|
||||
};
|
||||
|
||||
services.borgmatic = {
|
||||
enable = true;
|
||||
settings = {
|
||||
source_directories = cfg.directories;
|
||||
repositories = [
|
||||
{ label = "borgbase"; path = cfg.repoPath; }
|
||||
];
|
||||
storage = {
|
||||
encryption_passcommand = "cat ${config.age.secrets."passwords/services/borg/${hostname}-passphrase".path}";
|
||||
ssh_command = "ssh -i /etc/ssh/ssh_host_ed25519_key";
|
||||
};
|
||||
retention = {
|
||||
keep_daily = 7;
|
||||
keep_weekly = 4;
|
||||
keep_monthly = 6;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Without this override, `cat` is unavailable for `encryption_passcommand`
|
||||
systemd.services.borgmatic.confinement.fullUnit = true;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user