Personal Nix setup

Merge branch 'tangled'

+176
flake.lock
···
"type": "github"
}
},
+
"flake-utils_2": {
+
"inputs": {
+
"systems": "systems_3"
+
},
+
"locked": {
+
"lastModified": 1694529238,
+
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
+
"owner": "numtide",
+
"repo": "flake-utils",
+
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
+
"type": "github"
+
},
+
"original": {
+
"owner": "numtide",
+
"repo": "flake-utils",
+
"type": "github"
+
}
+
},
"gitignore": {
"inputs": {
"nixpkgs": [
···
"type": "github"
}
},
+
"gomod2nix": {
+
"inputs": {
+
"flake-utils": "flake-utils_2",
+
"nixpkgs": [
+
"tangled",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1754078208,
+
"narHash": "sha256-YVoIFDCDpYuU3riaDEJ3xiGdPOtsx4sR5eTzHTytPV8=",
+
"owner": "nix-community",
+
"repo": "gomod2nix",
+
"rev": "7f963246a71626c7fc70b431a315c4388a0c95cf",
+
"type": "github"
+
},
+
"original": {
+
"owner": "nix-community",
+
"repo": "gomod2nix",
+
"type": "github"
+
}
+
},
"hardline-nvim": {
"flake": false,
"locked": {
···
"type": "github"
}
},
+
"htmx-src": {
+
"flake": false,
+
"locked": {
+
"narHash": "sha256-nm6avZuEBg67SSyyZUhjpXVNstHHgUxrtBHqJgowU08=",
+
"type": "file",
+
"url": "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js"
+
},
+
"original": {
+
"type": "file",
+
"url": "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js"
+
}
+
},
+
"htmx-ws-src": {
+
"flake": false,
+
"locked": {
+
"narHash": "sha256-2fg6KyEJoO24q0fQqbz9RMaYNPQrMwpZh29tkSqdqGY=",
+
"type": "file",
+
"url": "https://cdn.jsdelivr.net/npm/htmx-ext-ws@2.0.2"
+
},
+
"original": {
+
"type": "file",
+
"url": "https://cdn.jsdelivr.net/npm/htmx-ext-ws@2.0.2"
+
}
+
},
+
"ibm-plex-mono-src": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1731402384,
+
"narHash": "sha256-OwUmrPfEehLDz0fl2ChYLK8FQM2p0G1+EMrGsYEq+6g=",
+
"type": "tarball",
+
"url": "https://github.com/IBM/plex/releases/download/@ibm/plex-mono@1.1.0/ibm-plex-mono.zip"
+
},
+
"original": {
+
"type": "tarball",
+
"url": "https://github.com/IBM/plex/releases/download/@ibm/plex-mono@1.1.0/ibm-plex-mono.zip"
+
}
+
},
+
"indigo": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1753693716,
+
"narHash": "sha256-DMIKnCJRODQXEHUxA+7mLzRALmnZhkkbHlFT2rCQYrE=",
+
"owner": "oppiliappan",
+
"repo": "indigo",
+
"rev": "5f170569da9360f57add450a278d73538092d8ca",
+
"type": "github"
+
},
+
"original": {
+
"owner": "oppiliappan",
+
"repo": "indigo",
+
"type": "github"
+
}
+
},
+
"inter-fonts-src": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1731687360,
+
"narHash": "sha256-5vdKKvHAeZi6igrfpbOdhZlDX2/5+UvzlnCQV6DdqoQ=",
+
"type": "tarball",
+
"url": "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip"
+
},
+
"original": {
+
"type": "tarball",
+
"url": "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip"
+
}
+
},
"language-servers": {
"inputs": {
"flake-utils": [
···
"owner": "onsails",
"repo": "lspkind-nvim",
"type": "github"
+
}
+
},
+
"lucide-src": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1754044466,
+
"narHash": "sha256-+exBR2OToB1iv7ZQI2S4B0lXA/QRvC9n6U99UxGpJGs=",
+
"type": "tarball",
+
"url": "https://github.com/lucide-icons/lucide/releases/download/0.536.0/lucide-icons-0.536.0.zip"
+
},
+
"original": {
+
"type": "tarball",
+
"url": "https://github.com/lucide-icons/lucide/releases/download/0.536.0/lucide-icons-0.536.0.zip"
}
},
"mini-nvim": {
···
"nixpkgs": "nixpkgs",
"nvim-plugins": "nvim-plugins",
"system-shell": "system-shell",
+
"tangled": "tangled",
"yeetmouse": "yeetmouse",
"zen-browser": "zen-browser"
}
···
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
+
}
+
},
+
"sqlite-lib-src": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1706631843,
+
"narHash": "sha256-bJoMjirsBjm2Qk9KPiy3yV3+8b/POlYe76/FQbciHro=",
+
"type": "tarball",
+
"url": "https://sqlite.org/2024/sqlite-amalgamation-3450100.zip"
+
},
+
"original": {
+
"type": "tarball",
+
"url": "https://sqlite.org/2024/sqlite-amalgamation-3450100.zip"
}
},
"system-shell": {
···
"owner": "nix-systems",
"repo": "default",
"type": "github"
+
}
+
},
+
"systems_3": {
+
"locked": {
+
"lastModified": 1681028828,
+
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+
"owner": "nix-systems",
+
"repo": "default",
+
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+
"type": "github"
+
},
+
"original": {
+
"owner": "nix-systems",
+
"repo": "default",
+
"type": "github"
+
}
+
},
+
"tangled": {
+
"inputs": {
+
"gomod2nix": "gomod2nix",
+
"htmx-src": "htmx-src",
+
"htmx-ws-src": "htmx-ws-src",
+
"ibm-plex-mono-src": "ibm-plex-mono-src",
+
"indigo": "indigo",
+
"inter-fonts-src": "inter-fonts-src",
+
"lucide-src": "lucide-src",
+
"nixpkgs": [
+
"nixpkgs"
+
],
+
"sqlite-lib-src": "sqlite-lib-src"
+
},
+
"locked": {
+
"lastModified": 1755122974,
+
"narHash": "sha256-QVBmpoPzw9F3RbwlzptiiM4vOKSOwZ/pDmQH0nudjbg=",
+
"ref": "refs/heads/master",
+
"rev": "9200ee979f28fcf5b724768cc4042bf93f1f1c77",
+
"revCount": 1131,
+
"type": "git",
+
"url": "ssh://git@tangled.sh/tangled.sh/core"
+
},
+
"original": {
+
"type": "git",
+
"url": "ssh://git@tangled.sh/tangled.sh/core"
}
},
"telescope-nvim": {
+6
flake.nix
···
home-manager.follows = "home-manager";
};
};
+
+
tangled = {
+
url = "git+ssh://git@tangled.sh/tangled.sh/core";
+
inputs.nixpkgs.follows = "nixpkgs";
+
};
};
outputs = inputs @ { self, ... }: let
···
inherit overlays;
system = "aarch64-linux";
hostname = "ramune";
+
modules = [ inputs.tangled.nixosModules.knot ];
};
overlays = {
+1
machines/ramune/configuration.nix
···
tailscale.enable = true;
caddy.enable = true;
vaultwarden.enable = true;
+
tangled.enable = true;
};
};
+11
modules/server/caddy.nix
···
cfg = config.modules.server;
domain = config.networking.domain;
+
knotEnabled = cfg.tangled.enable;
tailscaleEnabled = cfg.tailscale.enable;
vaultwardenEnabled = cfg.vaultwarden.enable;
jellyfinEnabled = cfg.jellyfin.enable;
···
}
'' else "";
+
knotConfig = if knotEnabled then ''
+
${cfg.tangled.hostname} {
+
reverse_proxy localhost:5555
+
}
+
'' else "";
+
exposeConfig = let
configs = attrsets.mapAttrsToList (name: root: ''
handle_path /${name} {
···
}
${tailscaleConfig}
+
${knotConfig}
:80 {
import network_paths
···
}
'';
};
+
+
networking.firewall.allowedTCPPorts = [ 80 443 ];
+
networking.firewall.allowedUDPPorts = [ 443 ];
};
}
+1
modules/server/default.nix
···
./home-assistant.nix
./podman.nix
./macos.nix
+
./tangled.nix
];
}
+5
modules/server/encrypt/tangled-knot-secret.age
···
+
age-encryption.org/v1
+
-> ssh-ed25519 QwbpPw 33WczOs4JEiVVA8CzFii7hWMA+N2FxeMj0ya1JHim1A
+
kfxuJo5DLQJ0vZ6P3ubiadIb0nO3YFFdiMGsTCG00N4
+
--- M5dUQ19fOQdclRb1kt0DbAv8BrFMih+Uy2dlxskeVzg
+
�S*ɀ�!Q]�T�����^�C��-X��Tҕ�r�^��D�m�잫�aD��;k�t@��/��i����A��A��A@I���Ù�8�����E=^���>����B^۰�):�
+42
modules/server/tangled.nix
···
+
{ lib, config, hostname, helpers, ... }:
+
+
with lib;
+
let
+
address = config.modules.router.adress;
+
cfg = config.modules.server;
+
in helpers.linuxAttrs {
+
options.modules.server.tangled = {
+
enable = mkOption {
+
default = false;
+
example = true;
+
description = "Whether to enable Tangled Knot.";
+
type = types.bool;
+
};
+
+
hostname = mkOption {
+
default = "knot.kitten.sh";
+
type = types.str;
+
};
+
};
+
+
config = mkIf (cfg.enable && cfg.tangled.enable) {
+
age.secrets."tangled-knot" = let
+
inherit (config.services.tangled-knot) gitUser;
+
in {
+
file = ./encrypt/tangled-knot-secret.age;
+
owner = gitUser;
+
group = gitUser;
+
mode = "0440";
+
};
+
+
services.tangled-knot = {
+
enable = true;
+
openFirewall = true;
+
server = {
+
hostname = cfg.tangled.hostname;
+
listenAddr = "127.0.0.1:5555";
+
secretFile = config.age.secrets."tangled-knot".path;
+
};
+
};
+
};
+
}
+1
secrets.nix
···
"./modules/server/encrypt/tailscale.age".publicKeys = keys;
"./modules/server/encrypt/rclone.conf.age".publicKeys = keys;
+
"./modules/server/encrypt/tangled-knot-secret.age".publicKeys = keys;
"./home/fonts/encrypt/DankMono-Regular.otf.age".publicKeys = keys;
"./home/fonts/encrypt/DankMono-Bold.otf.age".publicKeys = keys;