Compare commits
4 Commits
318afdf9a8
...
343ab84f42
| Author | SHA1 | Date | |
|---|---|---|---|
| 343ab84f42 | |||
| 8a3b4e1d49 | |||
| 0c3ae83422 | |||
| 6c69401e21 |
@@ -0,0 +1,7 @@
|
|||||||
|
keys:
|
||||||
|
- &server age1xhpcja6q6us9r44qvwxeqdq4y03n8l9xlq68uumew6gzm2tshgwq4ufd2l
|
||||||
|
creation_rules:
|
||||||
|
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *server
|
||||||
+15
-2
@@ -17,6 +17,10 @@
|
|||||||
|
|
||||||
programs.fish.enable = true;
|
programs.fish.enable = true;
|
||||||
programs.tmux.enable = true;
|
programs.tmux.enable = true;
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
};
|
||||||
|
|
||||||
# Set your time zone.
|
# Set your time zone.
|
||||||
time.timeZone = "Europe/London";
|
time.timeZone = "Europe/London";
|
||||||
@@ -34,7 +38,8 @@
|
|||||||
shell = pkgs.fish;
|
shell = pkgs.fish;
|
||||||
extraGroups = [ "wheel" ];
|
extraGroups = [ "wheel" ];
|
||||||
openssh.authorizedKeys.keys = [
|
openssh.authorizedKeys.keys = [
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJFUwk54CNtSLUyXSTLsIs5KXgEsjOgE4HGlA4FacKjV syed@tardis"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJFUwk54CNtSLUyXSTLsIs5KXgEsjOgE4HGlA4FacKjV syed@tardis # msi laptop"
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILMeU7L0yQ4+O1GME4D4UM4f6nqua+pWt/zdsMvyHV94 u0_a309@localhost # mobile"
|
||||||
];
|
];
|
||||||
packages = with pkgs; [];
|
packages = with pkgs; [];
|
||||||
};
|
};
|
||||||
@@ -42,11 +47,12 @@
|
|||||||
# List packages installed in system profile.
|
# List packages installed in system profile.
|
||||||
# You can use https://search.nixos.org/ to find more packages (and options).
|
# You can use https://search.nixos.org/ to find more packages (and options).
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
|
sops
|
||||||
|
age
|
||||||
eza
|
eza
|
||||||
yazi
|
yazi
|
||||||
gitui
|
gitui
|
||||||
bind
|
bind
|
||||||
neovim
|
|
||||||
wget
|
wget
|
||||||
curl
|
curl
|
||||||
stow
|
stow
|
||||||
@@ -54,6 +60,13 @@
|
|||||||
git
|
git
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# Secrets file
|
||||||
|
sops.age.keyFile = "/home/me/.config/sops/age/keys.txt";
|
||||||
|
sops.secrets."main.env" = {
|
||||||
|
sopsFile = ../secrets/main.env;
|
||||||
|
format = "dotenv";
|
||||||
|
};
|
||||||
|
|
||||||
# Enable the OpenSSH daemon.
|
# Enable the OpenSSH daemon.
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
|
|
||||||
|
|||||||
Generated
+36
-1
@@ -16,9 +16,44 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1775888245,
|
||||||
|
"narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "13043924aaa7375ce482ebe2494338e058282925",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs",
|
||||||
|
"sops-nix": "sops-nix"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sops-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1782165805,
|
||||||
|
"narHash": "sha256-478kKQBvK6SYTOdN2h9jhKJv94nbXRbFMfuL1WshErg=",
|
||||||
|
"owner": "Mic92",
|
||||||
|
"repo": "sops-nix",
|
||||||
|
"rev": "56b24064fdcaedca53553b1a6d607fd23b613a24",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "Mic92",
|
||||||
|
"repo": "sops-nix",
|
||||||
|
"type": "github"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
+13
-3
@@ -1,11 +1,21 @@
|
|||||||
{
|
{
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
|
||||||
|
sops-nix.url = "github:Mic92/sops-nix";
|
||||||
};
|
};
|
||||||
outputs = inputs@{ self, nixpkgs, ... }: {
|
|
||||||
|
outputs = inputs@{ self, nixpkgs, sops-nix, ... }:
|
||||||
|
let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
in {
|
||||||
nixosConfigurations.syedm = nixpkgs.lib.nixosSystem {
|
nixosConfigurations.syedm = nixpkgs.lib.nixosSystem {
|
||||||
modules = [ ./configuration.nix ];
|
inherit system;
|
||||||
|
|
||||||
|
modules = [
|
||||||
|
./configuration.nix
|
||||||
|
sops-nix.nixosModules.sops
|
||||||
|
./flakes/cloudflare-ddns.nix
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
script = pkgs.replaceVars ../../scripts/cloudflare-ddns.sh {
|
||||||
|
bash = pkgs.bash;
|
||||||
|
curl = pkgs.curl;
|
||||||
|
jq = pkgs.jq;
|
||||||
|
};
|
||||||
|
|
||||||
|
cloudflare-ddns = pkgs.writeShellScriptBin "cloudflare-ddns" (builtins.readFile script);
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ cloudflare-ddns ];
|
||||||
|
|
||||||
|
systemd.services.cloudflare-ddns = {
|
||||||
|
description = "Cloudflare DDNS updater";
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
User = "root";
|
||||||
|
};
|
||||||
|
|
||||||
|
script = "${cloudflare-ddns}/bin/cloudflare-ddns";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.timers.cloudflare-ddns = {
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
|
||||||
|
timerConfig = {
|
||||||
|
OnBootSec = "2min";
|
||||||
|
OnUnitActiveSec = "5min";
|
||||||
|
Persistent = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d /var/lib/cloudflare-ddns 0750 root root -"
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#!@bash@/bin/bash
|
||||||
|
|
||||||
|
source /run/secrets/main.env
|
||||||
|
|
||||||
|
cache=/var/lib/cloudflare-ddns/old_ip
|
||||||
|
IP=$(@curl@/bin/curl -s 'https://api.ipify.org')
|
||||||
|
arr=("" "git." "www.")
|
||||||
|
|
||||||
|
if [[ -f "$cache" ]]; then
|
||||||
|
old_ip=$(cat "$cache")
|
||||||
|
else
|
||||||
|
old_ip=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$IP" != "$old_ip" ]]; then
|
||||||
|
for sub in "${arr[@]}"; do
|
||||||
|
RECORD_ID=$(@curl@/bin/curl -s -X GET \
|
||||||
|
"https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \
|
||||||
|
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
| @jq@/bin/jq -r ".result[] | select(.name==\"${sub}syedm.dev\" and .type==\"A\") | .id")
|
||||||
|
|
||||||
|
if [ -n "$RECORD_ID" ]; then
|
||||||
|
@curl@/bin/curl -s -X PUT \
|
||||||
|
"https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
|
||||||
|
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"type\":\"A\",\"name\":\"${sub}syedm.dev\",\"content\":\"$IP\",\"ttl\":3600,\"proxied\":false}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "$IP" > "$cache"
|
||||||
|
fi
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
CLOUDFLARE_API_TOKEN=ENC[AES256_GCM,data:qUc5v0dwbAedM/uQ1s2A0/c8nU/NipWz79mkAkdm2l/pC+NcmCEhsA==,iv:u/G6hR32Xay8j23XGHcKWnZo/6q9mDfIMQOgG+KMO78=,tag:0hGvWe9Gj0PsYdRqnFKeBA==,type:str]
|
||||||
|
ZONE_ID=ENC[AES256_GCM,data:o3fUyWND1dE1I5nAiRYKyPZTqCvOTPl/r1i98PC0ZPk=,iv:pXb+IZblnePYmMxr9J4Y7Ie8DdzP0yI5JXRPr2C+kWE=,tag:7cjM891ard+GZoyiCqDoow==,type:str]
|
||||||
|
sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJVXJaQjU0eEErUU94NG1j\ndllZbjhNcW5qY0pueFJmWkZlb1dPcXBuS1hZCnZSMlJhRzhGWFJSTVNnWndOaHJP\nd3FzQXY5TGoxTmZiVFJhYy83RHI1dGcKLS0tIElGNktpZ0QrWXROcExqZEhPbVN1\nalJPS0tNQXY2N0NrZlNTT3FvMG1tSlkKrX+LWOibAN79q5kQiBqnRHpiGAqej/Co\nFm8GMQKFYK3UJGidIXDz2JfMy5I26kBXKBlup2hGwGIA7veghkskVQ==\n-----END AGE ENCRYPTED FILE-----\n
|
||||||
|
sops_age__list_0__map_recipient=age1xhpcja6q6us9r44qvwxeqdq4y03n8l9xlq68uumew6gzm2tshgwq4ufd2l
|
||||||
|
sops_lastmodified=2026-07-02T20:21:19Z
|
||||||
|
sops_mac=ENC[AES256_GCM,data:BsZxChuzgqTMnSgpRqe1UFqdhXPaA03hXnTXbzuQPal1OCTJ1YIAEbcjvkxf69dQ0zTm68vcl4nV2fS7pLmz5wkexiU5/tfuHEcVhRu1eAtHj5LpR9wBWOoOLH1BkZQWDOWPhCm91+K+3LQZg6dfOj5Vq0ukHHfXwSBPFiAEWcs=,iv:pK0I5ho6cN+lmAnhxugcTRoDZ2IiDyYemxP4jpnpkk0=,tag:MMIy8lPUKhhY2F4JRRN3Lw==,type:str]
|
||||||
|
sops_unencrypted_suffix=_unencrypted
|
||||||
|
sops_version=3.13.1
|
||||||
Reference in New Issue
Block a user