meow
This commit is contained in:
parent
350885960e
commit
33ee2f5760
9 changed files with 10909 additions and 45 deletions
|
|
@ -54,9 +54,6 @@ in
|
|||
gimp3
|
||||
anytype
|
||||
monero-gui
|
||||
orca-slicer
|
||||
unstable.kicad
|
||||
dune3d
|
||||
pencil2d
|
||||
python311Packages.brother-ql
|
||||
ptouch-print
|
||||
|
|
|
|||
|
|
@ -62,25 +62,21 @@ in
|
|||
export SWWW_TRANSITION="fade"
|
||||
export SWWW_TRANSITION_DURATION="1"
|
||||
# export SWWW_TRANSITION_STEP="90"
|
||||
|
||||
# queue of images to show
|
||||
images=( $(find $DIR -type f | shuf) )
|
||||
function get_img() {
|
||||
item=''${images[0]}
|
||||
images=("''${images[@]:1}")
|
||||
if [[ ''${#images[@]} == 0 ]]; then
|
||||
images=( $(find $DIR -type f | shuf) )
|
||||
fi
|
||||
echo $item
|
||||
}
|
||||
|
||||
|
||||
images=( ) # array of randomized images
|
||||
|
||||
while true; do
|
||||
img=$(get_img)
|
||||
for d in ''$(swww query | sed -nE 's/^: ([^:]+).*/\1/p'); do # see swww-query(1)
|
||||
swww img --resize "''$RESIZE_TYPE" --outputs "''$d" "''$img"
|
||||
if [[ ''${#images[@]} == 0 ]]; then
|
||||
images=( $(find $DIR -regextype posix-extended -type f -regex '.*\.(jpg|jpeg|gif|png|bmp|dds|exr|ico|tga|tiff|webp)$' | shuf) ) # fill queue if arr empty (rust image crate supported formats)
|
||||
fi
|
||||
|
||||
swww img --resize "''$RESIZE_TYPE" --outputs "''$d" "''${images[0]}" # show first image of arr
|
||||
|
||||
images=("''${images[@]:1}") # pop first image of arr
|
||||
|
||||
done
|
||||
sleep "''${DEFAULT_INTERVAL}"
|
||||
sleep "''${DEFAULT_INTERVAL}" || true # pkill sleep for next wallpaper xd
|
||||
done
|
||||
'';
|
||||
# restartTriggers = [wpaperdConf];
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@
|
|||
./presets/gui.nix
|
||||
./presets/server.nix
|
||||
./presets/home-manager.nix
|
||||
./services/authentik.nix
|
||||
./services/caddy.nix
|
||||
./services/authentik
|
||||
./services/caddy
|
||||
./services/monitoring.nix
|
||||
./services/wireguard.nix
|
||||
./system/impermanence.nix
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ let
|
|||
in
|
||||
{
|
||||
options.xyno.presets.development.enable =
|
||||
mkEnableOption "enables xynos configs for a development machine";
|
||||
mkEnableOption "enables xynos configs for a development/workstation machine";
|
||||
config = mkIf cfg.enable {
|
||||
home-manager.users.${config.xyno.system.user.name} = mkIf config.xyno.presets.home-manager.enable (
|
||||
{ ... }:
|
||||
|
|
@ -25,6 +25,10 @@ in
|
|||
virtualisation.podman.enable = true;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
orca-slicer
|
||||
unstable.kicad
|
||||
freecad
|
||||
dune3d
|
||||
jetbrains.rider
|
||||
# android-studio
|
||||
nixpkgs-manual
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ let
|
|||
terranixConfig = inputs.terranix.lib.terranixConfiguration {
|
||||
system = pkgs.system;
|
||||
modules = [
|
||||
./authentik/provider.nix
|
||||
./provider.nix
|
||||
{
|
||||
inherit (cfg)
|
||||
oauthApps
|
||||
|
|
@ -192,7 +192,7 @@ in
|
|||
|
||||
};
|
||||
sops.secrets."authentik/env" = {
|
||||
sopsFile = ../../instances/${config.networking.hostName}/secrets/authentik.yaml;
|
||||
sopsFile = ../../../instances/${config.networking.hostName}/secrets/authentik.yaml;
|
||||
};
|
||||
|
||||
services.caddy.extraConfig = ''
|
||||
5
modules/services/caddy/caddy-config.nix
Normal file
5
modules/services/caddy/caddy-config.nix
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{ json, lib, ...}: with lib;
|
||||
types.submodule {
|
||||
freeformType = json.type;
|
||||
|
||||
}
|
||||
10711
modules/services/caddy/caddy_schema.json
Normal file
10711
modules/services/caddy/caddy_schema.json
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -30,9 +30,14 @@ let
|
|||
genVHostsFromWildcard = mapAttrs' (
|
||||
n: v: nameValuePair "*.${n}" (genOneWildcard n v)
|
||||
) cfg.wildcardHosts;
|
||||
schema = import ./json-schema.nix { inherit pkgs lib; schema = builtins.fromJSON (builtins.readFile ./caddy_schema.json); };
|
||||
in
|
||||
{
|
||||
options.xyno.services.caddy.enable = mkEnableOption "enables caddy with the desec plugin";
|
||||
options.xyno.services.caddy.config = mkOption {
|
||||
default = {};
|
||||
type = schema.type;
|
||||
};
|
||||
options.xyno.services.caddy.wildcardHosts = mkOption {
|
||||
example = {
|
||||
"hailsatan.eu" = {
|
||||
|
|
@ -77,29 +82,31 @@ in
|
|||
services.caddy = {
|
||||
enable = true;
|
||||
package = pkgs.caddy-desec;
|
||||
virtualHosts = genVHostsFromWildcard;
|
||||
email = mkDefault "ssl@xyno.systems";
|
||||
acmeCA = mkDefault "https://acme-v02.api.letsencrypt.org/directory";
|
||||
globalConfig = ''
|
||||
metrics {
|
||||
per_host
|
||||
}
|
||||
'';
|
||||
extraConfig = ''
|
||||
(blockBots) {
|
||||
@botForbidden header_regexp User-Agent "(?i)AdsBot-Google|Amazonbot|anthropic-ai|Applebot|Applebot-Extended|AwarioRssBot|AwarioSmartBot|Bytespider|CCBot|ChatGPT|ChatGPT-User|Claude-Web|ClaudeBot|cohere-ai|DataForSeoBot|Diffbot|FacebookBot|Google-Extended|GPTBot|ImagesiftBot|magpie-crawler|omgili|Omgilibot|peer39_crawler|PerplexityBot|YouBot"
|
||||
adapter = "json";
|
||||
configFile = json.generate "caddy-config.json" cfg.config;
|
||||
# virtualHosts = genVHostsFromWildcard;
|
||||
# email = mkDefault "ssl@xyno.systems";
|
||||
# acmeCA = mkDefault "https://acme-v02.api.letsencrypt.org/directory";
|
||||
# globalConfig = ''
|
||||
# metrics {
|
||||
# per_host
|
||||
# }
|
||||
# '';
|
||||
# extraConfig = ''
|
||||
# (blockBots) {
|
||||
# @botForbidden header_regexp User-Agent "(?i)AdsBot-Google|Amazonbot|anthropic-ai|Applebot|Applebot-Extended|AwarioRssBot|AwarioSmartBot|Bytespider|CCBot|ChatGPT|ChatGPT-User|Claude-Web|ClaudeBot|cohere-ai|DataForSeoBot|Diffbot|FacebookBot|Google-Extended|GPTBot|ImagesiftBot|magpie-crawler|omgili|Omgilibot|peer39_crawler|PerplexityBot|YouBot"
|
||||
|
||||
handle @botForbidden {
|
||||
redir https://hil-speed.hetzner.com/10GB.bin
|
||||
}
|
||||
handle /robots.txt {
|
||||
respond <<TXT
|
||||
User-Agent: *
|
||||
Disallow: /
|
||||
TXT 200
|
||||
}
|
||||
}
|
||||
'';
|
||||
# handle @botForbidden {
|
||||
# redir https://hil-speed.hetzner.com/10GB.bin
|
||||
# }
|
||||
# handle /robots.txt {
|
||||
# respond <<TXT
|
||||
# User-Agent: *
|
||||
# Disallow: /
|
||||
# TXT 200
|
||||
# }
|
||||
# }
|
||||
# '';
|
||||
};
|
||||
xyno.services.monitoring.exporters.caddy = 2019;
|
||||
|
||||
144
modules/services/caddy/json-schema.nix
Normal file
144
modules/services/caddy/json-schema.nix
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
schema,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
let
|
||||
json = pkgs.formats.json { };
|
||||
submoduleOptions =
|
||||
{
|
||||
spec,
|
||||
depth,
|
||||
extraRequires ? [ ],
|
||||
...
|
||||
}:
|
||||
let
|
||||
isRequired = n: any (x: x == n) (extraRequires ++ (optionals (spec ? required) spec.required));
|
||||
in
|
||||
if spec ? "$ref" then
|
||||
submoduleOptions (getRef x."$ref")
|
||||
else
|
||||
mapAttrs (
|
||||
n: v:
|
||||
buildOption {
|
||||
inherit depth;
|
||||
spec = v;
|
||||
required = isRequired n;
|
||||
}
|
||||
) (if spec ? properties then spec.properties else { });
|
||||
getRef =
|
||||
x:
|
||||
let
|
||||
path = splitString "/" (traceVal x);
|
||||
result = attrByPath (tail path) (throw "ref ${x} not found") schema;
|
||||
in
|
||||
result;
|
||||
deref = x: if x ? "$ref" then getRef x."$ref" else x;
|
||||
buildOptionType =
|
||||
{
|
||||
spec,
|
||||
depth ? 0,
|
||||
...
|
||||
}:
|
||||
let
|
||||
strType = if spec ? enum then types.enum spec.enum else types.str;
|
||||
objType = types.submodule {
|
||||
freeformType = json.type;
|
||||
options = submoduleOptions { inherit spec depth; };
|
||||
};
|
||||
arrType = types.listOf (
|
||||
if spec ? items then
|
||||
buildOptionType {
|
||||
inherit depth;
|
||||
spec = spec.items;
|
||||
}
|
||||
else
|
||||
types.anything
|
||||
);
|
||||
allOfType =
|
||||
let
|
||||
resolve = x: if x ? "if" then x."then" else x; # just ignore conditionals for now
|
||||
resolved = map (x: deref (resolve x)) spec.allOf;
|
||||
# mergedDesc = concatStringsSep "\n" (
|
||||
# map (x: if x ? markdownDescription then x.markdownDescription else "") resolved
|
||||
# );
|
||||
combined = foldl (x: c: recursiveUpdate c x) { } resolved;
|
||||
# options = map (
|
||||
# x:
|
||||
# submoduleOptions {
|
||||
# spec = x;
|
||||
# extraRequires = if spec ? required then spec.required else [ ];
|
||||
# }
|
||||
# ) (traceValSeqN 4 resolved);
|
||||
in
|
||||
buildOptionType {
|
||||
depth = depth + 1;
|
||||
spec = combined;
|
||||
};
|
||||
type =
|
||||
if depth > 3 then
|
||||
types.deferredModule
|
||||
else if spec ? "$ref" then
|
||||
buildOptionType {
|
||||
depth = depth + 1;
|
||||
spec = getRef spec."$ref";
|
||||
}
|
||||
else if spec ? allOf then
|
||||
allOfType
|
||||
else if !spec ? type then
|
||||
json.type
|
||||
|
||||
else if isList spec.type then
|
||||
types.oneOf (map (x: buildOptionType x) spec.type)
|
||||
else if spec.type == "string" then
|
||||
strType
|
||||
else if spec.type == "boolean" then
|
||||
types.bool
|
||||
else if spec.type == "number" then
|
||||
types.number
|
||||
else if spec.type == "array" then
|
||||
arrType
|
||||
else if spec.type == "object" then
|
||||
objType
|
||||
else
|
||||
(throw "unknown json schema type: ${spec.type}");
|
||||
|
||||
in
|
||||
type;
|
||||
|
||||
buildOption =
|
||||
{
|
||||
spec,
|
||||
depth,
|
||||
required ? false,
|
||||
...
|
||||
}:
|
||||
let
|
||||
type = buildOptionType { inherit spec depth; };
|
||||
in
|
||||
mkOption {
|
||||
type = if required then type else types.nullOr type;
|
||||
description = if spec ? markdownDescription then spec.markdownDescription else "no description qwq";
|
||||
default =
|
||||
if required then
|
||||
if spec.type == "object" then
|
||||
{ }
|
||||
else if spec.type == "array" then
|
||||
[ ]
|
||||
else
|
||||
null
|
||||
else
|
||||
null;
|
||||
|
||||
};
|
||||
|
||||
in
|
||||
{
|
||||
generate = json.generate;
|
||||
type = buildOptionType {
|
||||
depth = 0;
|
||||
spec = schema;
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue