mirror of
https://gitlab.com/upRootNutrition/dotfiles.git
synced 2025-12-06 21:17:14 -06:00
chore: init
This commit is contained in:
commit
1b2c1ea359
891 changed files with 37053 additions and 0 deletions
310
modules/config/default.nix
Executable file
310
modules/config/default.nix
Executable file
|
|
@ -0,0 +1,310 @@
|
|||
{ lib, ... }:
|
||||
let
|
||||
attrList = lib.mkOption {
|
||||
type = lib.types.attrsOf lib.types.str;
|
||||
};
|
||||
boolType = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
};
|
||||
stringType = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
};
|
||||
intType = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
};
|
||||
listType = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
};
|
||||
|
||||
numOptions = 20;
|
||||
|
||||
genOptions =
|
||||
config: prefix:
|
||||
builtins.listToAttrs (
|
||||
map (i: {
|
||||
name = "${prefix}${toString i}";
|
||||
value = config;
|
||||
}) (builtins.genList (i: i) numOptions)
|
||||
);
|
||||
|
||||
mkOptionsFromDir =
|
||||
path:
|
||||
builtins.listToAttrs (
|
||||
map
|
||||
(name: {
|
||||
name = builtins.substring 0 (builtins.stringLength name - 4) name;
|
||||
value = stringType;
|
||||
})
|
||||
(
|
||||
builtins.filter (name: builtins.match ".*\\.nix$" name != null) (
|
||||
builtins.attrNames (builtins.readDir path)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
userSubmodule = lib.types.submodule {
|
||||
options = {
|
||||
name = stringType;
|
||||
label = stringType;
|
||||
sshKeys = listType;
|
||||
group = stringType;
|
||||
aliases = genOptions stringType "name";
|
||||
email = genOptions stringType "address";
|
||||
paths = genOptions stringType "path";
|
||||
};
|
||||
};
|
||||
|
||||
instanceSubmodule = lib.types.submodule {
|
||||
options = {
|
||||
subdomain = stringType;
|
||||
label = stringType;
|
||||
name = stringType;
|
||||
short = stringType;
|
||||
hostname = stringType;
|
||||
tags = listType;
|
||||
domains = genOptions stringType "url";
|
||||
dns = genOptions stringType "provider";
|
||||
localhost = genOptions stringType "address";
|
||||
wireguard = genOptions stringType "interface";
|
||||
remotehost = genOptions stringType "address";
|
||||
email = genOptions stringType "address";
|
||||
sops = genOptions stringType "path";
|
||||
paths = genOptions stringType "path";
|
||||
ports = genOptions intType "port";
|
||||
ssl = {
|
||||
cert = stringType;
|
||||
key = stringType;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
deviceSubmodule = lib.types.submodule {
|
||||
options =
|
||||
let
|
||||
mountConfig = {
|
||||
mount = stringType;
|
||||
device = stringType;
|
||||
options = listType;
|
||||
};
|
||||
in
|
||||
{
|
||||
boot = mountConfig;
|
||||
ip = genOptions stringType "address";
|
||||
label = stringType;
|
||||
name = stringType;
|
||||
sync = genOptions stringType "address";
|
||||
wireguard = genOptions stringType "ip";
|
||||
}
|
||||
// genOptions mountConfig "folder"
|
||||
// genOptions mountConfig "samba"
|
||||
// genOptions mountConfig "remote"
|
||||
// genOptions mountConfig "storage";
|
||||
};
|
||||
|
||||
themesSubmodule = lib.types.submodule {
|
||||
options = {
|
||||
currentTheme = stringType;
|
||||
windowManager = {
|
||||
gaps = intType;
|
||||
borders = intType;
|
||||
rounding = intType;
|
||||
enabled = {
|
||||
hyprland = boolType;
|
||||
niri = boolType;
|
||||
};
|
||||
};
|
||||
fonts = {
|
||||
name = stringType;
|
||||
sizes = {
|
||||
applications = intType;
|
||||
desktop = intType;
|
||||
popups = intType;
|
||||
terminal = intType;
|
||||
};
|
||||
};
|
||||
cursor = {
|
||||
name = stringType;
|
||||
size = intType;
|
||||
};
|
||||
palettes = lib.mkOption {
|
||||
type = lib.types.attrsOf (
|
||||
lib.types.submodule {
|
||||
options = {
|
||||
colours = attrList;
|
||||
font = stringType;
|
||||
};
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
options = {
|
||||
services = lib.mkOption {
|
||||
type = lib.types.submodule {
|
||||
options = mkOptionsFromDir ./instances/config // {
|
||||
instances = lib.mkOption {
|
||||
type = lib.types.attrsOf instanceSubmodule;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
machines = lib.mkOption {
|
||||
type = lib.types.submodule {
|
||||
options =
|
||||
let
|
||||
devicesPath = ./devices/config;
|
||||
printerPath = devicesPath + /printers;
|
||||
in
|
||||
mkOptionsFromDir devicesPath
|
||||
// mkOptionsFromDir printerPath
|
||||
// {
|
||||
devices = lib.mkOption {
|
||||
type = lib.types.attrsOf deviceSubmodule;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
people = lib.mkOption {
|
||||
type = lib.types.submodule {
|
||||
options = mkOptionsFromDir ./users/config // {
|
||||
users = lib.mkOption {
|
||||
type = lib.types.attrsOf userSubmodule;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
aesthetics = lib.mkOption {
|
||||
type = lib.types.submodule {
|
||||
options = mkOptionsFromDir ./themes // {
|
||||
themes = lib.mkOption {
|
||||
type = themesSubmodule;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config =
|
||||
let
|
||||
moduleFunctions = {
|
||||
devicesFunctions = {
|
||||
ownerWriteOthersReadMask = [
|
||||
"fmask=0022"
|
||||
"dmask=0022"
|
||||
];
|
||||
ownerExclusiveReadWriteMask = [
|
||||
"fmask=0077"
|
||||
"dmask=0077"
|
||||
];
|
||||
readWritePermissions = [
|
||||
"rw"
|
||||
];
|
||||
sambaPermissions = [
|
||||
"rw"
|
||||
"gid=100"
|
||||
"vers=3.0"
|
||||
"x-systemd.automount"
|
||||
"x-systemd.requires=network-online.target"
|
||||
];
|
||||
sshfsOptions = [
|
||||
"allow_other"
|
||||
"_netdev"
|
||||
"x-systemd.automount"
|
||||
"reconnect"
|
||||
"user"
|
||||
"ServerAliveInterval=15"
|
||||
"IdentityFile=/var/run/secrets/ssh/private"
|
||||
];
|
||||
fileModeAndDirMode = [
|
||||
"file_mode=0644"
|
||||
"dir_mode=0755"
|
||||
];
|
||||
userIdForUser0 = [
|
||||
"uid=1000"
|
||||
];
|
||||
userIdForUser1 = [
|
||||
"uid=1002"
|
||||
];
|
||||
dummy = [
|
||||
];
|
||||
|
||||
ceresStorageDriveName = "NAS1";
|
||||
ceresIP = "192.168.50.140";
|
||||
deimosIP = "192.168.50.142";
|
||||
marsIP = "192.168.50.218";
|
||||
phoneIP = "192.168.50.243";
|
||||
phobosIP = "192.168.50.180";
|
||||
synologyIP = "192.168.50.209";
|
||||
brotherIP = "192.168.50.195";
|
||||
externalIP = "24.76.173.0";
|
||||
|
||||
deviceNames = {
|
||||
desktop = "mars";
|
||||
desktopLabel = "Mars";
|
||||
server = "ceres";
|
||||
serverLabel = "Ceres";
|
||||
laptop = "deimos";
|
||||
laptopLabel = "Deimos";
|
||||
laptop2 = "phobos";
|
||||
laptop2Label = "Phobos";
|
||||
nas = "synology";
|
||||
nasLabel = "Synology";
|
||||
phone = "pixel";
|
||||
phoneLabel = "Pixel";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
instancesFunctions = {
|
||||
domain0 = "cloudbert.fun";
|
||||
domain1 = "the-nutrivore.social";
|
||||
domain2 = "the-nutrivore.com";
|
||||
domain3 = "uprootnutrition.com";
|
||||
servicePath = "/mnt/media/NAS1";
|
||||
sopsPath = "/var/lib/secrets";
|
||||
sslPath = "/var/lib/acme";
|
||||
varLib = "/var/lib";
|
||||
synologyName = "synology";
|
||||
dummy = "";
|
||||
};
|
||||
|
||||
themesFunctions = {
|
||||
brogrammer = "brogrammer";
|
||||
catppuccin-frappe = "catppuccin-frappe";
|
||||
catppuccin-latte = "catppuccin-latte";
|
||||
catppuccin-macchiato = "catppuccin-macchiato";
|
||||
catppuccin-mocha = "catppuccin-mocha";
|
||||
chalk = "chalk";
|
||||
deep-oceanic-next = "deep-oceanic-next";
|
||||
dracula = "dracula";
|
||||
espresso = "espresso";
|
||||
flat = "flat";
|
||||
framer = "framer";
|
||||
github = "github";
|
||||
hardcore = "hardcore";
|
||||
one-black = "one-black";
|
||||
one-dark = "one-dark";
|
||||
one-light = "one light";
|
||||
sparky = "sparky";
|
||||
};
|
||||
|
||||
usersFunctions = {
|
||||
user0 = "nick";
|
||||
user0Label = "Nick";
|
||||
user1 = "streaming";
|
||||
user1Label = "Streaming";
|
||||
};
|
||||
};
|
||||
|
||||
inheritFunctions = { inherit moduleFunctions; };
|
||||
in
|
||||
{
|
||||
people = import ./users inheritFunctions;
|
||||
services = import ./instances inheritFunctions;
|
||||
machines = import ./devices inheritFunctions;
|
||||
aesthetics = import ./themes inheritFunctions;
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue