Completely reformat to satisfy nixfmt
This commit is contained in:
+8
-4
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
fsid = "749bf0ea-acf5-4a5e-b33e-9a057455c06b";
|
fsid = "749bf0ea-acf5-4a5e-b33e-9a057455c06b";
|
||||||
clusterName = "home";
|
clusterName = "home";
|
||||||
initialMonitors = [{
|
initialMonitors = [
|
||||||
|
{
|
||||||
hostname = "myself.thehellings.lan";
|
hostname = "myself.thehellings.lan";
|
||||||
ipAddress = "10.42.1.6";
|
ipAddress = "10.42.1.6";
|
||||||
}
|
}
|
||||||
@@ -12,11 +13,14 @@
|
|||||||
{
|
{
|
||||||
hostname = "hosea.thehellings.lan";
|
hostname = "hosea.thehellings.lan";
|
||||||
ipAddress = "10.42.1.7";
|
ipAddress = "10.42.1.7";
|
||||||
}];
|
}
|
||||||
mdsNodes = [{
|
];
|
||||||
|
mdsNodes = [
|
||||||
|
{
|
||||||
hostname = "jeremiah.thehellings.lan";
|
hostname = "jeremiah.thehellings.lan";
|
||||||
ipAddress = "10.42.1.8";
|
ipAddress = "10.42.1.8";
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
publicNetworks = [ "10.42.0.0/16" ];
|
publicNetworks = [ "10.42.0.0/16" ];
|
||||||
clusterNetworks = [ "10.201.0.0/16" ];
|
clusterNetworks = [ "10.201.0.0/16" ];
|
||||||
adminKeyring = ../secrets/home.client.admin.keyring;
|
adminKeyring = ../secrets/home.client.admin.keyring;
|
||||||
|
|||||||
+16
-10
@@ -1,28 +1,34 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, modulesPath, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
[
|
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "uas" "sd_mod" ];
|
boot.initrd.availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"thunderbolt"
|
||||||
|
"nvme"
|
||||||
|
"uas"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/607b933f-2967-4652-b478-4d8e9aa38a0d";
|
device = "/dev/disk/by-uuid/607b933f-2967-4652-b478-4d8e9aa38a0d";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
options = [ "subvol=@" ];
|
options = [ "subvol=@" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot" =
|
fileSystems."/boot" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/B31C-C1F4";
|
device = "/dev/disk/by-uuid/B31C-C1F4";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
|
|||||||
+7
-9
@@ -1,8 +1,9 @@
|
|||||||
{ pkgs
|
{
|
||||||
, lib
|
pkgs,
|
||||||
, host ? "most"
|
lib,
|
||||||
, nixvim
|
host ? "most",
|
||||||
, ...
|
nixvim,
|
||||||
|
...
|
||||||
}:
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -12,15 +13,12 @@
|
|||||||
./modules
|
./modules
|
||||||
] ++ lib.optionals (builtins.pathExists ./hosts/${host}) [ ./hosts/${host} ];
|
] ++ lib.optionals (builtins.pathExists ./hosts/${host}) [ ./hosts/${host} ];
|
||||||
|
|
||||||
|
|
||||||
programs.tmux = {
|
programs.tmux = {
|
||||||
enable = true;
|
enable = true;
|
||||||
keyMode = "vi";
|
keyMode = "vi";
|
||||||
terminal = "xterm-256color";
|
terminal = "xterm-256color";
|
||||||
customPaneNavigationAndResize = true;
|
customPaneNavigationAndResize = true;
|
||||||
extraConfig = (lib.strings.concatStringsSep "\n" [
|
extraConfig = (lib.strings.concatStringsSep "\n" [ "bind P paste-buffer" ]);
|
||||||
"bind P paste-buffer"
|
|
||||||
]);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
home.stateVersion = "23.05";
|
home.stateVersion = "23.05";
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{ ... }:
|
{ ... }:
|
||||||
|
|
||||||
{ }
|
{
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,7 +3,5 @@
|
|||||||
{
|
{
|
||||||
greg.vscodium.enable = true;
|
greg.vscodium.enable = true;
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [ brew ];
|
||||||
brew
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,16 +15,18 @@
|
|||||||
|
|
||||||
matchBlocks =
|
matchBlocks =
|
||||||
let
|
let
|
||||||
nas = { user = "admin"; };
|
nas = {
|
||||||
owned = { user = "greg"; };
|
user = "admin";
|
||||||
|
};
|
||||||
|
owned = {
|
||||||
|
user = "greg";
|
||||||
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
inherit nas;
|
inherit nas;
|
||||||
|
|
||||||
"*" = {
|
"*" = {
|
||||||
dynamicForwards = [{
|
dynamicForwards = [ { port = 10240; } ];
|
||||||
port = 10240;
|
|
||||||
}];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
"10.42.1.4" = lib.hm.dag.entryBefore [ "10.42.*" ] nas;
|
"10.42.1.4" = lib.hm.dag.entryBefore [ "10.42.*" ] nas;
|
||||||
@@ -33,7 +35,10 @@
|
|||||||
chronicles = nas;
|
chronicles = nas;
|
||||||
"chronicles.thehellings.lan" = lib.hm.dag.entryBefore [ "*.thehellings.lan" ] nas;
|
"chronicles.thehellings.lan" = lib.hm.dag.entryBefore [ "*.thehellings.lan" ] nas;
|
||||||
|
|
||||||
gh = { user = "git"; hostname = "github.com"; };
|
gh = {
|
||||||
|
user = "git";
|
||||||
|
hostname = "github.com";
|
||||||
|
};
|
||||||
"src" = {
|
"src" = {
|
||||||
user = "gitlab";
|
user = "gitlab";
|
||||||
hostname = "git.thehellings.lan";
|
hostname = "git.thehellings.lan";
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
# The Hack font is used in the Fugitive sidebars
|
# The Hack font is used in the Fugitive sidebars
|
||||||
fonts.fontconfig.enable = true;
|
fonts.fontconfig.enable = true;
|
||||||
home.packages = [ (pkgs.nerdfonts.override { fonts = [ "Hack" ]; }) ];
|
home.packages = [ (pkgs.nerdfonts.override { fonts = [ "Hack" ]; }) ];
|
||||||
|
|
||||||
programs.nixvim = (import ./vim/config.nix { inherit config pkgs lib; }) // { enable = true; };
|
programs.nixvim = (import ./vim/config.nix { inherit config pkgs lib; }) // {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,7 +67,9 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
configHeader = builtins.readFile ./xonsh_header.xsh;
|
configHeader = builtins.readFile ./xonsh_header.xsh;
|
||||||
configFooter = (builtins.readFile ./xonsh_footer.xsh) + (builtins.concatStringsSep "\n" [
|
configFooter =
|
||||||
|
(builtins.readFile ./xonsh_footer.xsh)
|
||||||
|
+ (builtins.concatStringsSep "\n" [
|
||||||
"with open('${pkgs.stdenv.cc}/nix-support/dynamic-linker', 'r') as fp:"
|
"with open('${pkgs.stdenv.cc}/nix-support/dynamic-linker', 'r') as fp:"
|
||||||
" $NIX_LD = fp.read().strip()"
|
" $NIX_LD = fp.read().strip()"
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
bruno # but let's not talk about it
|
bruno # but let's not talk about it
|
||||||
@@ -16,10 +21,9 @@ let
|
|||||||
zed-editor
|
zed-editor
|
||||||
];
|
];
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options.greg.development = mkEnableOption "Setup necessary development packages";
|
options.greg.development = mkEnableOption "Setup necessary development packages";
|
||||||
|
|
||||||
config = mkIf config.greg.development {
|
config = mkIf config.greg.development { home.packages = packages; };
|
||||||
home.packages = packages;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-5
@@ -1,4 +1,9 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.greg.gnome;
|
cfg = config.greg.gnome;
|
||||||
@@ -6,7 +11,8 @@ in
|
|||||||
{
|
{
|
||||||
options.greg.gnome = lib.mkEnableOption "Enable Gnome support and settings";
|
options.greg.gnome = lib.mkEnableOption "Enable Gnome support and settings";
|
||||||
|
|
||||||
config = (lib.mkIf cfg {
|
config = (
|
||||||
|
lib.mkIf cfg {
|
||||||
programs.gnome-terminal = lib.mkIf (pkgs.system != "x86_64-darwin") {
|
programs.gnome-terminal = lib.mkIf (pkgs.system != "x86_64-darwin") {
|
||||||
enable = true;
|
enable = true;
|
||||||
showMenubar = true;
|
showMenubar = true;
|
||||||
@@ -112,9 +118,16 @@ in
|
|||||||
show-toolbar = true;
|
show-toolbar = true;
|
||||||
};
|
};
|
||||||
"org/virt-manager/virt-manager/connections" = {
|
"org/virt-manager/virt-manager/connections" = {
|
||||||
autoconnect = [ "qemu:///session" "qemu:///system" ];
|
autoconnect = [
|
||||||
uris = [ "qemu:///session" "qemu:///system" ];
|
"qemu:///session"
|
||||||
|
"qemu:///system"
|
||||||
|
];
|
||||||
|
uris = [
|
||||||
|
"qemu:///session"
|
||||||
|
"qemu:///system"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
});
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
{
|
{
|
||||||
options.greg.pypackage = lib.mkOption {
|
options.greg.pypackage = lib.mkOption {
|
||||||
description = "Enable Gnome support and settings";
|
description = "Enable Gnome support and settings";
|
||||||
|
|||||||
+19
-10
@@ -1,4 +1,9 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.greg.sway;
|
cfg = config.greg.sway;
|
||||||
@@ -9,7 +14,8 @@ let
|
|||||||
term = "${pkgs.alacritty}/bin/alacritty";
|
term = "${pkgs.alacritty}/bin/alacritty";
|
||||||
msg = "${pkgs.sway}/bin/swaymsg";
|
msg = "${pkgs.sway}/bin/swaymsg";
|
||||||
sleep = "${pkgs.coreutils}/bin/sleep";
|
sleep = "${pkgs.coreutils}/bin/sleep";
|
||||||
workstation1 = pkgs.writeScriptBin "workstation1" (builtins.concatStringsSep "\n" [
|
workstation1 = pkgs.writeScriptBin "workstation1" (
|
||||||
|
builtins.concatStringsSep "\n" [
|
||||||
"${msg} \"workspace 1 ; exec ${pkgs.firefox}/bin/firefox ; split horizontal ; exec ${pkgs.element-desktop}/bin/element-desktop \""
|
"${msg} \"workspace 1 ; exec ${pkgs.firefox}/bin/firefox ; split horizontal ; exec ${pkgs.element-desktop}/bin/element-desktop \""
|
||||||
"${sleep} 1"
|
"${sleep} 1"
|
||||||
"${msg} '[app_id=\"firefox\"]' move left"
|
"${msg} '[app_id=\"firefox\"]' move left"
|
||||||
@@ -18,16 +24,20 @@ let
|
|||||||
"${sleep} 0.3"
|
"${sleep} 0.3"
|
||||||
"${msg} '[app_id=\"Alacritty\" workspace=\"1\"]' move right"
|
"${msg} '[app_id=\"Alacritty\" workspace=\"1\"]' move right"
|
||||||
"${msg} '[app_id=\"firefox\"]' resize grow width 300 px"
|
"${msg} '[app_id=\"firefox\"]' resize grow width 300 px"
|
||||||
]);
|
]
|
||||||
workstation2 = pkgs.writeScriptBin "workstation2" (builtins.concatStringsSep "\n" [
|
);
|
||||||
|
workstation2 = pkgs.writeScriptBin "workstation2" (
|
||||||
|
builtins.concatStringsSep "\n" [
|
||||||
"${sleep} 5"
|
"${sleep} 5"
|
||||||
"${msg} \"workspace 2 ; exec ${term} ; layout tabbed\""
|
"${msg} \"workspace 2 ; exec ${term} ; layout tabbed\""
|
||||||
]);
|
]
|
||||||
|
);
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.greg.sway = lib.mkEnableOption "Enable Sway support and settings";
|
options.greg.sway = lib.mkEnableOption "Enable Sway support and settings";
|
||||||
|
|
||||||
config = (lib.mkIf cfg {
|
config = (
|
||||||
|
lib.mkIf cfg {
|
||||||
programs.swaylock.enable = true;
|
programs.swaylock.enable = true;
|
||||||
|
|
||||||
wayland.windowManager.sway =
|
wayland.windowManager.sway =
|
||||||
@@ -64,9 +74,7 @@ in
|
|||||||
{ command = "${workstation2}/bin/workstation2"; }
|
{ command = "${workstation2}/bin/workstation2"; }
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
extraOptions = [
|
extraOptions = [ "--unsupported-gpu" ];
|
||||||
"--unsupported-gpu"
|
|
||||||
];
|
|
||||||
extraSessionCommands = ''
|
extraSessionCommands = ''
|
||||||
export WLR_NO_HARDWARE_CURSORS=1
|
export WLR_NO_HARDWARE_CURSORS=1
|
||||||
'';
|
'';
|
||||||
@@ -102,5 +110,6 @@ in
|
|||||||
xorg.xmodmap
|
xorg.xmodmap
|
||||||
xxdiff
|
xxdiff
|
||||||
];
|
];
|
||||||
});
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-12
@@ -4,7 +4,8 @@ let
|
|||||||
cfg = config.programs.xonsh;
|
cfg = config.programs.xonsh;
|
||||||
|
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options = {
|
options = {
|
||||||
programs.xonsh = {
|
programs.xonsh = {
|
||||||
enable = mkEnableOption "Enable the xonsh program";
|
enable = mkEnableOption "Enable the xonsh program";
|
||||||
@@ -12,7 +13,9 @@ with lib; {
|
|||||||
sessionVariables = mkOption {
|
sessionVariables = mkOption {
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
default = { };
|
default = { };
|
||||||
example = { XONSH_TRACE_SUBPROC = true; };
|
example = {
|
||||||
|
XONSH_TRACE_SUBPROC = true;
|
||||||
|
};
|
||||||
description = ''
|
description = ''
|
||||||
Environment variables that will be set for the Xonsh session.
|
Environment variables that will be set for the Xonsh session.
|
||||||
'';
|
'';
|
||||||
@@ -59,29 +62,26 @@ with lib; {
|
|||||||
|
|
||||||
config =
|
config =
|
||||||
let
|
let
|
||||||
shortAliases = concatStringsSep "\n" (
|
shortAliases = concatStringsSep "\n" (mapAttrsToList (k: v: "aliases['${k}']=r'${v}'") cfg.aliases);
|
||||||
mapAttrsToList (k: v: "aliases['${k}']=r'${v}'") cfg.aliases
|
|
||||||
);
|
|
||||||
|
|
||||||
listToPythonList =
|
listToPythonList =
|
||||||
let
|
let
|
||||||
listInternals = args:
|
listInternals = args: concatStringsSep "\n" (map (v: "'${v}'") args);
|
||||||
concatStringsSep "\n" (map (v: "'${v}'") args);
|
|
||||||
in
|
in
|
||||||
list: "[${listInternals list}]";
|
list: "[${listInternals list}]";
|
||||||
|
|
||||||
sessionVars = concatStringsSep "\n" (
|
sessionVars = concatStringsSep "\n" (
|
||||||
mapAttrsToList
|
mapAttrsToList (
|
||||||
(k: v:
|
k: v:
|
||||||
if builtins.typeOf v == "string" then
|
if builtins.typeOf v == "string" then
|
||||||
"\$${k} = '${v}'"
|
"\$${k} = '${v}'"
|
||||||
else if builtins.typeOf v == "list" then
|
else if builtins.typeOf v == "list" then
|
||||||
"\$${k} = ${listToPythonList}"
|
"\$${k} = ${listToPythonList}"
|
||||||
else if builtins.typeOf v == "int" then
|
else if builtins.typeOf v == "int" then
|
||||||
"\$${k} = ${toString v}"
|
"\$${k} = ${toString v}"
|
||||||
else ""
|
else
|
||||||
)
|
""
|
||||||
cfg.sessionVariables
|
) cfg.sessionVariables
|
||||||
);
|
);
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|||||||
@@ -1,28 +1,34 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, modulesPath, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
[
|
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "uas" "sd_mod" ];
|
boot.initrd.availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"thunderbolt"
|
||||||
|
"nvme"
|
||||||
|
"uas"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/607b933f-2967-4652-b478-4d8e9aa38a0d";
|
device = "/dev/disk/by-uuid/607b933f-2967-4652-b478-4d8e9aa38a0d";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
options = [ "subvol=@" ];
|
options = [ "subvol=@" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot" =
|
fileSystems."/boot" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/B31C-C1F4";
|
device = "/dev/disk/by-uuid/B31C-C1F4";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
|
|||||||
+17
-5
@@ -1,9 +1,16 @@
|
|||||||
{ pkgs, config, lib, ... }:
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
address = (builtins.elemAt config.networking.interfaces.ens18.ipv4.addresses 0).address;
|
address = (builtins.elemAt config.networking.interfaces.ens18.ipv4.addresses 0).address;
|
||||||
root_ca = pkgs.writeText "root_ca.crt" (builtins.readFile ../../ca/root_ca.crt);
|
root_ca = pkgs.writeText "root_ca.crt" (builtins.readFile ../../ca/root_ca.crt);
|
||||||
intermediate_ca = pkgs.writeText "intermediate_ca.crt" (builtins.readFile ../../ca/intermediate_ca.crt);
|
intermediate_ca = pkgs.writeText "intermediate_ca.crt" (
|
||||||
|
builtins.readFile ../../ca/intermediate_ca.crt
|
||||||
|
);
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
age.secrets.acme_password = {
|
age.secrets.acme_password = {
|
||||||
@@ -13,7 +20,10 @@ in
|
|||||||
file = ../../secrets/ca/intermediate_key.age;
|
file = ../../secrets/ca/intermediate_key.age;
|
||||||
};
|
};
|
||||||
age.secrets.root_ca_key.file = ../../secrets/ca/root_key.age;
|
age.secrets.root_ca_key.file = ../../secrets/ca/root_key.age;
|
||||||
systemd.services.step-ca.serviceConfig.Environment = lib.mkForce [ "STEPDEBUG=1" "HOME=%S/step-ca" ];
|
systemd.services.step-ca.serviceConfig.Environment = lib.mkForce [
|
||||||
|
"STEPDEBUG=1"
|
||||||
|
"HOME=%S/step-ca"
|
||||||
|
];
|
||||||
services.step-ca = {
|
services.step-ca = {
|
||||||
inherit address;
|
inherit address;
|
||||||
enable = false;
|
enable = false;
|
||||||
@@ -35,7 +45,8 @@ in
|
|||||||
dataSource = "/var/lib/step-ca/db";
|
dataSource = "/var/lib/step-ca/db";
|
||||||
badgerFileLoadingMode = "";
|
badgerFileLoadingMode = "";
|
||||||
};
|
};
|
||||||
authority.provisioners = [{
|
authority.provisioners = [
|
||||||
|
{
|
||||||
type = "JWK";
|
type = "JWK";
|
||||||
name = "greg@thehellings.com";
|
name = "greg@thehellings.com";
|
||||||
key = {
|
key = {
|
||||||
@@ -48,7 +59,8 @@ in
|
|||||||
y = "MEpqnJp60VV-SpFtb6m8U-VAYut7R_PKFm07xl7MjBk";
|
y = "MEpqnJp60VV-SpFtb6m8U-VAYut7R_PKFm07xl7MjBk";
|
||||||
};
|
};
|
||||||
encryptedKey = "eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjdHkiOiJqd2sranNvbiIsImVuYyI6IkEyNTZHQ00iLCJwMmMiOjYwMDAwMCwicDJzIjoieWdfb0lfbWgwbHhPRXdjUTBsd0FnUSJ9.ivdQUFEhs2U8PUBYr8AhQl3hHdb4spF4jvXgqY_hiVgpjB-z3Nn9Uw.u7vrNht_3WD1G97q.mbydlpAQxjtKLkOmmDOUczqscRDPqrUyoPJ1uqXcJDH3vs4KiYlrKRcFLjPy9sWzEL1iIrqjwf3U-3AAx1KNAg7frs2D__MGfOO-U5SdQDVJVAND7KpWOJGJVSb0xioCA6-8ldlP_REqu4ENmkkdw0_6Is2b0p7ZFKqke_fqOOs7osqFAfbMb_WzEWrACLn5A5-Teh2rpEgR-z9zipN6MSEqE6VIQ2BXuv70aHWhslNe1MK1OgTYm9CqA47EMYvQ7HQLPDZAbP56WK84yJLktoXMmnkaKeTtvER0dh4ufyjJHBhecnEranbR5rHc_jV8_qvyWhlqbCrOU_8bWrk.a9SH_q3GKIUsOUSRWkDxQg";
|
encryptedKey = "eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjdHkiOiJqd2sranNvbiIsImVuYyI6IkEyNTZHQ00iLCJwMmMiOjYwMDAwMCwicDJzIjoieWdfb0lfbWgwbHhPRXdjUTBsd0FnUSJ9.ivdQUFEhs2U8PUBYr8AhQl3hHdb4spF4jvXgqY_hiVgpjB-z3Nn9Uw.u7vrNht_3WD1G97q.mbydlpAQxjtKLkOmmDOUczqscRDPqrUyoPJ1uqXcJDH3vs4KiYlrKRcFLjPy9sWzEL1iIrqjwf3U-3AAx1KNAg7frs2D__MGfOO-U5SdQDVJVAND7KpWOJGJVSb0xioCA6-8ldlP_REqu4ENmkkdw0_6Is2b0p7ZFKqke_fqOOs7osqFAfbMb_WzEWrACLn5A5-Teh2rpEgR-z9zipN6MSEqE6VIQ2BXuv70aHWhslNe1MK1OgTYm9CqA47EMYvQ7HQLPDZAbP56WK84yJLktoXMmnkaKeTtvER0dh4ufyjJHBhecnEranbR5rHc_jV8_qvyWhlqbCrOU_8bWrk.a9SH_q3GKIUsOUSRWkDxQg";
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
tls = {
|
tls = {
|
||||||
cipherSuites = [
|
cipherSuites = [
|
||||||
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"
|
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"
|
||||||
|
|||||||
@@ -4,24 +4,25 @@
|
|||||||
{ lib, modulesPath, ... }:
|
{ lib, modulesPath, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
|
||||||
[
|
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "sr_mod" "virtio_blk" ];
|
boot.initrd.availableKernelModules = [
|
||||||
|
"ata_piix"
|
||||||
|
"uhci_hcd"
|
||||||
|
"virtio_pci"
|
||||||
|
"sr_mod"
|
||||||
|
"virtio_blk"
|
||||||
|
];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [ ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/a13f941e-4985-47ab-a8c6-374a627c5ce1";
|
device = "/dev/disk/by-uuid/a13f941e-4985-47ab-a8c6-374a627c5ce1";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [ { device = "/dev/disk/by-uuid/ac4557de-1ad5-4d3c-b9f4-5ec50dbf76f1"; } ];
|
||||||
[{ device = "/dev/disk/by-uuid/ac4557de-1ad5-4d3c-b9f4-5ec50dbf76f1"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|||||||
@@ -26,16 +26,17 @@
|
|||||||
"wyoming"
|
"wyoming"
|
||||||
"zwave_js"
|
"zwave_js"
|
||||||
];
|
];
|
||||||
customComponents = with pkgs.home-assistant-custom-components; [
|
customComponents = with pkgs.home-assistant-custom-components; [ smartthinq-sensors ];
|
||||||
smartthinq-sensors
|
|
||||||
];
|
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
default_config = { };
|
default_config = { };
|
||||||
tts = [ { platform = "google_translate"; } ];
|
tts = [ { platform = "google_translate"; } ];
|
||||||
http = {
|
http = {
|
||||||
use_x_forwarded_for = true;
|
use_x_forwarded_for = true;
|
||||||
trusted_proxies = [ "127.0.0.1" "::1" ];
|
trusted_proxies = [
|
||||||
|
"127.0.0.1"
|
||||||
|
"::1"
|
||||||
|
];
|
||||||
server_host = "127.0.0.1";
|
server_host = "127.0.0.1";
|
||||||
};
|
};
|
||||||
#"automation manual" = *nix config here* and so on
|
#"automation manual" = *nix config here* and so on
|
||||||
@@ -75,7 +76,10 @@
|
|||||||
containers.zwave = {
|
containers.zwave = {
|
||||||
autoStart = false; # We will try to start it with udev.extraRules listed below, as this option starts it too quickly
|
autoStart = false; # We will try to start it with udev.extraRules listed below, as this option starts it too quickly
|
||||||
image = "zwavejs/zwave-js-ui:latest";
|
image = "zwavejs/zwave-js-ui:latest";
|
||||||
ports = [ "8091:8091" "3000:3000" ];
|
ports = [
|
||||||
|
"8091:8091"
|
||||||
|
"3000:3000"
|
||||||
|
];
|
||||||
volumes = [ "/var/lib/zwave:/usr/src/app/store" ];
|
volumes = [ "/var/lib/zwave:/usr/src/app/store" ];
|
||||||
extraOptions = [
|
extraOptions = [
|
||||||
"--device"
|
"--device"
|
||||||
@@ -93,8 +97,12 @@
|
|||||||
# the container. So we add the creation of /var/lib/{zwave,hass} to the systemd Unit files
|
# the container. So we add the creation of /var/lib/{zwave,hass} to the systemd Unit files
|
||||||
systemd.services = {
|
systemd.services = {
|
||||||
"podman-zwave" = {
|
"podman-zwave" = {
|
||||||
after = [ "sys-devices-pci0000:00-0000:00:1e.0-0000:02:1b.0-usb2-2\\x2d1-2\\x2d1:1.0-tty-ttyACM0.device" ];
|
after = [
|
||||||
wantedBy = [ "sys-devices-pci0000:00-0000:00:1e.0-0000:02:1b.0-usb2-2\\x2d1-2\\x2d1:1.0-tty-ttyACM0.device" ];
|
"sys-devices-pci0000:00-0000:00:1e.0-0000:02:1b.0-usb2-2\\x2d1-2\\x2d1:1.0-tty-ttyACM0.device"
|
||||||
|
];
|
||||||
|
wantedBy = [
|
||||||
|
"sys-devices-pci0000:00-0000:00:1e.0-0000:02:1b.0-usb2-2\\x2d1-2\\x2d1:1.0-tty-ttyACM0.device"
|
||||||
|
];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
StateDirectory = "zwave";
|
StateDirectory = "zwave";
|
||||||
StateDirectoryMode = pkgs.lib.mkForce "0777";
|
StateDirectoryMode = pkgs.lib.mkForce "0777";
|
||||||
@@ -106,7 +114,6 @@
|
|||||||
SUBSYSTEM=="tty", KERNEL=="ttyACM0", TAG+="systemd"
|
SUBSYSTEM=="tty", KERNEL=="ttyACM0", TAG+="systemd"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
|
||||||
greg.proxies = {
|
greg.proxies = {
|
||||||
"smart.home".target = "http://127.0.0.1:8123/";
|
"smart.home".target = "http://127.0.0.1:8123/";
|
||||||
"smart.thehellings.lan".target = "http://127.0.0.1:8123/";
|
"smart.thehellings.lan".target = "http://127.0.0.1:8123/";
|
||||||
@@ -116,7 +123,10 @@
|
|||||||
# Ensure that both ports are up and running. We keep 8123 directly open because we are on the LAN and sometimes want to connect
|
# Ensure that both ports are up and running. We keep 8123 directly open because we are on the LAN and sometimes want to connect
|
||||||
# directly for troubleshooting Nginx configuration
|
# directly for troubleshooting Nginx configuration
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
allowedTCPPorts = [ 80 443 ];
|
allowedTCPPorts = [
|
||||||
|
80
|
||||||
|
443
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
greg.backup.jobs.zwave = {
|
greg.backup.jobs.zwave = {
|
||||||
|
|||||||
@@ -37,18 +37,22 @@ in
|
|||||||
# This is our LAN port
|
# This is our LAN port
|
||||||
"${lan}" = {
|
"${lan}" = {
|
||||||
useDHCP = false;
|
useDHCP = false;
|
||||||
ipv4.addresses = [{
|
ipv4.addresses = [
|
||||||
|
{
|
||||||
address = "${lanIP}";
|
address = "${lanIP}";
|
||||||
prefixLength = 16;
|
prefixLength = 16;
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
"${iot}" = {
|
"${iot}" = {
|
||||||
useDHCP = false;
|
useDHCP = false;
|
||||||
ipv4.addresses = [{
|
ipv4.addresses = [
|
||||||
|
{
|
||||||
address = "${iotIP}";
|
address = "${iotIP}";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
firewall = {
|
firewall = {
|
||||||
@@ -90,15 +94,19 @@ in
|
|||||||
########
|
########
|
||||||
_3proxy = {
|
_3proxy = {
|
||||||
enable = true;
|
enable = true;
|
||||||
services = [{
|
services = [
|
||||||
|
{
|
||||||
type = "socks";
|
type = "socks";
|
||||||
auth = [ "strong" ];
|
auth = [ "strong" ];
|
||||||
bindPort = proxyPort;
|
bindPort = proxyPort;
|
||||||
acl = [{
|
acl = [
|
||||||
|
{
|
||||||
rule = "allow";
|
rule = "allow";
|
||||||
users = [ "greg" ];
|
users = [ "greg" ];
|
||||||
}];
|
}
|
||||||
}];
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
#usersFile = "/run/agenix/3proxy";
|
#usersFile = "/run/agenix/3proxy";
|
||||||
denyPrivate = false;
|
denyPrivate = false;
|
||||||
};
|
};
|
||||||
@@ -140,7 +148,7 @@ in
|
|||||||
"4c:a1:61:05:cd:52,192.168.66.61" # Rainbird
|
"4c:a1:61:05:cd:52,192.168.66.61" # Rainbird
|
||||||
"48:d6:d5:5d:81:21,192.168.66.65" # Google Home
|
"48:d6:d5:5d:81:21,192.168.66.65" # Google Home
|
||||||
"6c:29:90:3e:e2:02,192.168.66.66" # wiz
|
"6c:29:90:3e:e2:02,192.168.66.66" # wiz
|
||||||
"28:87:ba:0e:ca:da,192.168.66.74" #
|
"28:87:ba:0e:ca:da,192.168.66.74"
|
||||||
"28:87:ba:0e:c9:fd,192.168.66.75" # Master closet
|
"28:87:ba:0e:c9:fd,192.168.66.75" # Master closet
|
||||||
"54:af:97:c2:0f:a1,192.168.66.76" # Master toilet
|
"54:af:97:c2:0f:a1,192.168.66.76" # Master toilet
|
||||||
"54:af:97:83:ed:33,192.168.66.80"
|
"54:af:97:83:ed:33,192.168.66.80"
|
||||||
@@ -174,9 +182,7 @@ in
|
|||||||
# Update adblock list
|
# Update adblock list
|
||||||
cron = {
|
cron = {
|
||||||
enable = true;
|
enable = true;
|
||||||
systemCronJobs = [
|
systemCronJobs = [ "* * * * * root ${adblockUpdate} 2>&1 > /var/log/adblock.log" ];
|
||||||
"* * * * * root ${adblockUpdate} 2>&1 > /var/log/adblock.log"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}; # End of services configuration
|
}; # End of services configuration
|
||||||
|
|
||||||
|
|||||||
@@ -41,9 +41,7 @@ in
|
|||||||
listen = true;
|
listen = true;
|
||||||
rpc = {
|
rpc = {
|
||||||
address = ip;
|
address = ip;
|
||||||
allowip = [
|
allowip = [ "100.1.1.1/8" ];
|
||||||
"100.1.1.1/8"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
clightning = {
|
clightning = {
|
||||||
@@ -74,6 +72,5 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [ ];
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,35 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, modulesPath, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
[
|
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "uas" "sd_mod" ];
|
boot.initrd.availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"ahci"
|
||||||
|
"nvme"
|
||||||
|
"usbhid"
|
||||||
|
"uas"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/d4ac74f7-62bb-421a-aad8-566277c9d8ba";
|
device = "/dev/disk/by-uuid/d4ac74f7-62bb-421a-aad8-566277c9d8ba";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
options = [ "subvol=@" ];
|
options = [ "subvol=@" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot" =
|
fileSystems."/boot" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/1F51-B638";
|
device = "/dev/disk/by-uuid/1F51-B638";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,7 +19,10 @@
|
|||||||
users.users.greg = {
|
users.users.greg = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
description = "Gregory Hellings";
|
description = "Gregory Hellings";
|
||||||
extraGroups = [ "networkmanager" "wheel" ];
|
extraGroups = [
|
||||||
|
"networkmanager"
|
||||||
|
"wheel"
|
||||||
|
];
|
||||||
packages = with pkgs; [ ];
|
packages = with pkgs; [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
{ ... }:
|
{ ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
fileSystems."serve" = {
|
fileSystems."serve" = {
|
||||||
#device = "10.42.1.4:/volume1/icdm-mysql/";
|
#device = "10.42.1.4:/volume1/icdm-mysql/";
|
||||||
#fsType = "nfs";
|
#fsType = "nfs";
|
||||||
|
|||||||
@@ -1,40 +1,45 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, modulesPath, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
[
|
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
|
boot.initrd.availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"ehci_pci"
|
||||||
|
"ahci"
|
||||||
|
"usbhid"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/dab0d455-e25e-4445-8fa4-5320047d7e7b";
|
device = "/dev/disk/by-uuid/dab0d455-e25e-4445-8fa4-5320047d7e7b";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
options = [ "subvol=@" ];
|
options = [ "subvol=@" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot" =
|
fileSystems."/boot" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/5aedbb07-5761-423b-909d-2560405eae32";
|
device = "/dev/disk/by-uuid/5aedbb07-5761-423b-909d-2560405eae32";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/var" =
|
fileSystems."/var" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/57968536-c29d-417d-997e-85223d1d1f65";
|
device = "/dev/disk/by-uuid/57968536-c29d-417d-997e-85223d1d1f65";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [ { device = "/dev/disk/by-uuid/09691dce-375a-43c6-8d40-4498d20a6d9a"; } ];
|
||||||
[{ device = "/dev/disk/by-uuid/09691dce-375a-43c6-8d40-4498d20a6d9a"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
{ ... }:
|
{ ... }:
|
||||||
let
|
let
|
||||||
dnsHosts = builtins.concatStringsSep "\n" [
|
dnsHosts = builtins.concatStringsSep "\n" [ "wiki.icdm.lan 10.42.101.1" ];
|
||||||
"wiki.icdm.lan 10.42.101.1"
|
|
||||||
];
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# If we have to do proxying in Bayonnais, we can start to work on that here
|
# If we have to do proxying in Bayonnais, we can start to work on that here
|
||||||
@@ -11,24 +9,32 @@ in
|
|||||||
hostName = "icdm-root";
|
hostName = "icdm-root";
|
||||||
useDHCP = false;
|
useDHCP = false;
|
||||||
defaultGateway = "10.42.1.1";
|
defaultGateway = "10.42.1.1";
|
||||||
nameservers = [ "100.100.100.100" "10.42.1.2" ];
|
nameservers = [
|
||||||
|
"100.100.100.100"
|
||||||
|
"10.42.1.2"
|
||||||
|
];
|
||||||
enableIPv6 = false;
|
enableIPv6 = false;
|
||||||
|
|
||||||
interfaces = {
|
interfaces = {
|
||||||
eno1.ipv4.addresses = [{
|
eno1.ipv4.addresses = [
|
||||||
|
{
|
||||||
address = "10.42.101.1";
|
address = "10.42.101.1";
|
||||||
prefixLength = 16;
|
prefixLength = 16;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
address = "10.77.1.2";
|
address = "10.77.1.2";
|
||||||
prefixLength = 16;
|
prefixLength = 16;
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
# Allow traffic through
|
# Allow traffic through
|
||||||
firewall = {
|
firewall = {
|
||||||
enable = true;
|
enable = true;
|
||||||
allowedTCPPorts = [ 53 ];
|
allowedTCPPorts = [ 53 ];
|
||||||
allowedUDPPorts = [ 53 67 ];
|
allowedUDPPorts = [
|
||||||
|
53
|
||||||
|
67
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
extraHosts = "${dnsHosts}";
|
extraHosts = "${dnsHosts}";
|
||||||
@@ -38,9 +44,7 @@ in
|
|||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
domain = "icdm.lan";
|
domain = "icdm.lan";
|
||||||
dhcp-range = [
|
dhcp-range = [ "eno1,10.77.1.10,10.77.1.255,255.255.0.0,12h" ];
|
||||||
"eno1,10.77.1.10,10.77.1.255,255.255.0.0,12h"
|
|
||||||
];
|
|
||||||
dhcp-option = [
|
dhcp-option = [
|
||||||
"eno1,option:router,10.77.1.1"
|
"eno1,option:router,10.77.1.1"
|
||||||
"eno1,option:dns-server,10.77.1.2,1.1.1.1"
|
"eno1,option:dns-server,10.77.1.2,1.1.1.1"
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ pkgs, lib, modulesPath, ... }:
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
{
|
{
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
@@ -9,7 +14,5 @@
|
|||||||
networking.networkmanager.enable = lib.mkForce false;
|
networking.networkmanager.enable = lib.mkForce false;
|
||||||
users.users.greg.initialPassword = "";
|
users.users.greg.initialPassword = "";
|
||||||
#services.getty.autologinUser = lib.mkForce "greg";
|
#services.getty.autologinUser = lib.mkForce "greg";
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [ tree ];
|
||||||
tree
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-11
@@ -2,11 +2,15 @@
|
|||||||
# your system. Help is available in the configuration.nix(5) man page
|
# your system. Help is available in the configuration.nix(5) man page
|
||||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||||
|
|
||||||
{ config, pkgs, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [
|
||||||
[
|
|
||||||
# Include the results of the hardware scan.
|
# Include the results of the hardware scan.
|
||||||
./ceph.nix
|
./ceph.nix
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
@@ -32,26 +36,28 @@
|
|||||||
};
|
};
|
||||||
interfaces = {
|
interfaces = {
|
||||||
enp68s0 = {
|
enp68s0 = {
|
||||||
ipv4.addresses = [{
|
ipv4.addresses = [
|
||||||
|
{
|
||||||
address = "10.42.1.8";
|
address = "10.42.1.8";
|
||||||
prefixLength = 16;
|
prefixLength = 16;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
address = "10.42.100.1";
|
address = "10.42.100.1";
|
||||||
prefixLength = 16;
|
prefixLength = 16;
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
san = {
|
san = {
|
||||||
ipv4.addresses = [{
|
ipv4.addresses = [
|
||||||
|
{
|
||||||
address = "10.201.1.2";
|
address = "10.201.1.2";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
}];
|
}
|
||||||
};
|
|
||||||
};
|
|
||||||
nameservers = [
|
|
||||||
"10.42.1.5"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
nameservers = [ "10.42.1.5" ];
|
||||||
|
};
|
||||||
greg = {
|
greg = {
|
||||||
home = true;
|
home = true;
|
||||||
tailscale.enable = true;
|
tailscale.enable = true;
|
||||||
|
|||||||
@@ -1,27 +1,34 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, modulesPath, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
[
|
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "uas" "usbhid" "sd_mod" ];
|
boot.initrd.availableKernelModules = [
|
||||||
|
"nvme"
|
||||||
|
"xhci_pci"
|
||||||
|
"ahci"
|
||||||
|
"uas"
|
||||||
|
"usbhid"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ "kvm-amd" ];
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/ffc167f5-d9e4-4b11-a5f1-f7da0550ad24";
|
device = "/dev/disk/by-uuid/ffc167f5-d9e4-4b11-a5f1-f7da0550ad24";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot" =
|
fileSystems."/boot" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/3047-870E";
|
device = "/dev/disk/by-uuid/3047-870E";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
|
|||||||
+13
-8
@@ -12,23 +12,28 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
configurationLimit = 20;
|
configurationLimit = 20;
|
||||||
extraEntries = {
|
extraEntries = {
|
||||||
"Windows.conf" = (lib.strings.concatStringsSep "\n" [
|
"Windows.conf" = (
|
||||||
|
lib.strings.concatStringsSep "\n" [
|
||||||
"title Windows"
|
"title Windows"
|
||||||
"efi /EFI/Microsoft/EFI/bootmgfw.efi"
|
"efi /EFI/Microsoft/EFI/bootmgfw.efi"
|
||||||
]);
|
]
|
||||||
"Win2.conf" = (lib.strings.concatStringsSep "\n" [
|
);
|
||||||
|
"Win2.conf" = (
|
||||||
|
lib.strings.concatStringsSep "\n" [
|
||||||
"title Windows 11"
|
"title Windows 11"
|
||||||
"efi /shellx64.efi"
|
"efi /shellx64.efi"
|
||||||
"options -nointerrupt -noconsolein -noconsoleout windows11.nsh"
|
"options -nointerrupt -noconsolein -noconsoleout windows11.nsh"
|
||||||
]);
|
]
|
||||||
"Shell.conf" = (lib.strings.concatStringsSep "\n" [
|
);
|
||||||
|
"Shell.conf" = (
|
||||||
|
lib.strings.concatStringsSep "\n" [
|
||||||
"title EFI Shell"
|
"title EFI Shell"
|
||||||
"efi /shell.efi"
|
"efi /shell.efi"
|
||||||
]);
|
]
|
||||||
|
);
|
||||||
};
|
};
|
||||||
extraFiles = {
|
extraFiles = {
|
||||||
"windows11.nsh" = (pkgs.writeText "windows11.nsh" (lib.strings.concatStringsSep "\n" [
|
"windows11.nsh" = (pkgs.writeText "windows11.nsh" (lib.strings.concatStringsSep "\n" [ ]));
|
||||||
]));
|
|
||||||
"shell.efi" = "${pkgs.edk2-uefi-shell}/shell.efi";
|
"shell.efi" = "${pkgs.edk2-uefi-shell}/shell.efi";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -25,7 +25,10 @@
|
|||||||
firewall = {
|
firewall = {
|
||||||
enable = false;
|
enable = false;
|
||||||
allowedTCPPorts = [ 21000 ];
|
allowedTCPPorts = [ 21000 ];
|
||||||
allowedUDPPorts = [ 21000 21010 ];
|
allowedUDPPorts = [
|
||||||
|
21000
|
||||||
|
21010
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
greg = {
|
greg = {
|
||||||
@@ -38,7 +41,9 @@
|
|||||||
|
|
||||||
boot.extraModulePackages = [ config.boot.kernelPackages.v4l2loopback ];
|
boot.extraModulePackages = [ config.boot.kernelPackages.v4l2loopback ];
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; lib.mkMerge [
|
environment.systemPackages =
|
||||||
|
with pkgs;
|
||||||
|
lib.mkMerge [
|
||||||
[
|
[
|
||||||
# for Immersed
|
# for Immersed
|
||||||
cudatoolkit
|
cudatoolkit
|
||||||
|
|||||||
@@ -1,21 +1,29 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, modulesPath, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
[
|
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
|
boot.initrd.availableKernelModules = [
|
||||||
|
"nvme"
|
||||||
|
"xhci_pci"
|
||||||
|
"ahci"
|
||||||
|
"usbhid"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ "kvm-amd" ];
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
|
||||||
#device = "/dev/disk/by-uuid/27ae91ed-32e9-411e-8227-0d99e360fbbf";
|
#device = "/dev/disk/by-uuid/27ae91ed-32e9-411e-8227-0d99e360fbbf";
|
||||||
device = "/dev/nvme0n1p4";
|
device = "/dev/nvme0n1p4";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ pkgs, lib, config, ... }:
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
@@ -29,9 +34,7 @@
|
|||||||
networkmanager.enable = lib.mkForce false;
|
networkmanager.enable = lib.mkForce false;
|
||||||
hostName = "linode";
|
hostName = "linode";
|
||||||
domain = "thehellings.com";
|
domain = "thehellings.com";
|
||||||
nameservers = [
|
nameservers = [ "100.88.91.27" ];
|
||||||
"100.88.91.27"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
age.secrets.runner-deployer = {
|
age.secrets.runner-deployer = {
|
||||||
@@ -58,17 +61,21 @@
|
|||||||
User = "gitlab-runner";
|
User = "gitlab-runner";
|
||||||
};
|
};
|
||||||
|
|
||||||
security.sudo.extraRules = [{
|
security.sudo.extraRules = [
|
||||||
|
{
|
||||||
users = [ "gitlab-runner" ];
|
users = [ "gitlab-runner" ];
|
||||||
commands = [{
|
commands = [
|
||||||
|
{
|
||||||
command = "/run/current-system/sw/bin/systemctl";
|
command = "/run/current-system/sw/bin/systemctl";
|
||||||
options = [ "NOPASSWD" ];
|
options = [ "NOPASSWD" ];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
command = "/run/current-system/sw/bin/podman";
|
command = "/run/current-system/sw/bin/podman";
|
||||||
options = [ "NOPASSWD" ];
|
options = [ "NOPASSWD" ];
|
||||||
}];
|
}
|
||||||
}];
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
bind
|
bind
|
||||||
|
|||||||
@@ -1,14 +1,22 @@
|
|||||||
# Do not modify this file! It was generated by "nixos-generate-config"
|
# Do not modify this file! It was generated by "nixos-generate-config"
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, modulesPath, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
|
boot.initrd.availableKernelModules = [
|
||||||
|
"virtio_pci"
|
||||||
|
"virtio_scsi"
|
||||||
|
"ahci"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [ ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
@@ -18,9 +26,7 @@
|
|||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices = [
|
swapDevices = [ { device = "/dev/sdb"; } ];
|
||||||
{ device = "/dev/sdb"; }
|
|
||||||
];
|
|
||||||
|
|
||||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-4
@@ -19,7 +19,9 @@ in
|
|||||||
# the actual application server at matrix.thehellings.com
|
# the actual application server at matrix.thehellings.com
|
||||||
locations."= /.well-known/matrix/server".extraConfig =
|
locations."= /.well-known/matrix/server".extraConfig =
|
||||||
let
|
let
|
||||||
server = { "m.server" = "${fqdn}:443"; };
|
server = {
|
||||||
|
"m.server" = "${fqdn}:443";
|
||||||
|
};
|
||||||
in
|
in
|
||||||
''
|
''
|
||||||
add_header Content-Type application/json;
|
add_header Content-Type application/json;
|
||||||
@@ -29,8 +31,12 @@ in
|
|||||||
locations."= /.well-known/matrix/client".extraConfig =
|
locations."= /.well-known/matrix/client".extraConfig =
|
||||||
let
|
let
|
||||||
client = {
|
client = {
|
||||||
"m.homeserver" = { "base_url" = "https://${fqdn}"; };
|
"m.homeserver" = {
|
||||||
"m.identity_server" = { "base_url" = "https://vector.im"; };
|
"base_url" = "https://${fqdn}";
|
||||||
|
};
|
||||||
|
"m.identity_server" = {
|
||||||
|
"base_url" = "https://vector.im";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
''
|
''
|
||||||
@@ -58,6 +64,9 @@ in
|
|||||||
# Open networking ports for the server
|
# Open networking ports for the server
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
enable = true;
|
enable = true;
|
||||||
allowedTCPPorts = [ 80 443 ];
|
allowedTCPPorts = [
|
||||||
|
80
|
||||||
|
443
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +1,24 @@
|
|||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [ pkgs.upgrade-pg-cluster ];
|
||||||
pkgs.upgrade-pg-cluster
|
|
||||||
];
|
|
||||||
|
|
||||||
services.postgresql = {
|
services.postgresql = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.postgresql_15;
|
package = pkgs.postgresql_15;
|
||||||
checkConfig = true;
|
checkConfig = true;
|
||||||
ensureDatabases = [
|
ensureDatabases = [ "nextcloud" ];
|
||||||
"nextcloud"
|
|
||||||
];
|
|
||||||
#initialScript = pkgs.writeText "create-matrix-db.sql" ''
|
#initialScript = pkgs.writeText "create-matrix-db.sql" ''
|
||||||
# CREATE ROLE "matrix-synapse" WITH LOGIN;
|
# CREATE ROLE "matrix-synapse" WITH LOGIN;
|
||||||
# CREATE DATABASE "synapse" WITH OWNER "matrix-synapse" TEMPLATE template0 LC_COLLATE = "C" LC_CTYPE = "C";
|
# CREATE DATABASE "synapse" WITH OWNER "matrix-synapse" TEMPLATE template0 LC_COLLATE = "C" LC_CTYPE = "C";
|
||||||
# GRANT ALL PRIVILEGES ON DATABASE "synapse" TO "matrix-synapse";
|
# GRANT ALL PRIVILEGES ON DATABASE "synapse" TO "matrix-synapse";
|
||||||
#''; # These are done manually in order to set the LC_COLLATE values properly
|
#''; # These are done manually in order to set the LC_COLLATE values properly
|
||||||
ensureUsers = [{
|
ensureUsers = [
|
||||||
|
{
|
||||||
name = "nextcloud";
|
name = "nextcloud";
|
||||||
ensureDBOwnership = true;
|
ensureDBOwnership = true;
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
settings = {
|
settings = {
|
||||||
log_connections = true;
|
log_connections = true;
|
||||||
log_statement = "all";
|
log_statement = "all";
|
||||||
@@ -34,9 +32,7 @@
|
|||||||
|
|
||||||
services.postgresqlBackup = {
|
services.postgresqlBackup = {
|
||||||
enable = true;
|
enable = true;
|
||||||
databases = [
|
databases = [ "nextcloud" ];
|
||||||
"nextcloud"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services.logrotate = {
|
services.logrotate = {
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
registryPort = 5000;
|
registryPort = 5000;
|
||||||
vpnIp = "100.78.226.76";
|
vpnIp = "100.78.226.76";
|
||||||
@@ -8,7 +13,12 @@ in
|
|||||||
age.secretsMountPoint = "/run/derp";
|
age.secretsMountPoint = "/run/derp";
|
||||||
age.secrets =
|
age.secrets =
|
||||||
let
|
let
|
||||||
cfg = n: { file = ../../secrets/gitlab/${n}.age; owner = "gitlab"; group = "gitlab"; mode = "0444"; };
|
cfg = n: {
|
||||||
|
file = ../../secrets/gitlab/${n}.age;
|
||||||
|
owner = "gitlab";
|
||||||
|
group = "gitlab";
|
||||||
|
mode = "0444";
|
||||||
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
gitlab-secret = cfg "secret";
|
gitlab-secret = cfg "secret";
|
||||||
@@ -32,7 +42,10 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [ 80 registryPort ];
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
80
|
||||||
|
registryPort
|
||||||
|
];
|
||||||
|
|
||||||
greg.proxies =
|
greg.proxies =
|
||||||
let
|
let
|
||||||
@@ -115,13 +128,22 @@ in
|
|||||||
provider = "AWS";
|
provider = "AWS";
|
||||||
endpoint = "http://s3.thehellings.lan:9000";
|
endpoint = "http://s3.thehellings.lan:9000";
|
||||||
region = "us-east-1";
|
region = "us-east-1";
|
||||||
aws_access_key_id = { _secret = config.age.secrets.minio_access_key_id.path; };
|
aws_access_key_id = {
|
||||||
aws_secret_access_key = { _secret = config.age.secrets.minio_secret_access_key.path; };
|
_secret = config.age.secrets.minio_access_key_id.path;
|
||||||
|
};
|
||||||
|
aws_secret_access_key = {
|
||||||
|
_secret = config.age.secrets.minio_secret_access_key.path;
|
||||||
|
};
|
||||||
path_style = true; # True for MinIO
|
path_style = true; # True for MinIO
|
||||||
aws_signature_version = 2;
|
aws_signature_version = 2;
|
||||||
};
|
};
|
||||||
#storage_options = ...;
|
#storage_options = ...;
|
||||||
objects = builtins.listToAttrs (builtins.map (x: lib.attrsets.nameValuePair x { bucket = "gitlab-${builtins.replaceStrings [ "_" ] [ "-" ] x}"; }) [
|
objects = builtins.listToAttrs (
|
||||||
|
builtins.map
|
||||||
|
(
|
||||||
|
x: lib.attrsets.nameValuePair x { bucket = "gitlab-${builtins.replaceStrings [ "_" ] [ "-" ] x}"; }
|
||||||
|
)
|
||||||
|
[
|
||||||
"artifacts"
|
"artifacts"
|
||||||
"ci_secure_files"
|
"ci_secure_files"
|
||||||
"dependency_proxy"
|
"dependency_proxy"
|
||||||
@@ -131,17 +153,20 @@ in
|
|||||||
"pages"
|
"pages"
|
||||||
"terraform_state"
|
"terraform_state"
|
||||||
"uploads"
|
"uploads"
|
||||||
]);
|
]
|
||||||
|
);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
nginx.virtualHosts."gitlab.shire-zebra.ts.net" = {
|
nginx.virtualHosts."gitlab.shire-zebra.ts.net" = {
|
||||||
listen = [{
|
listen = [
|
||||||
|
{
|
||||||
addr = vpnIp;
|
addr = vpnIp;
|
||||||
port = registryPort;
|
port = registryPort;
|
||||||
ssl = true;
|
ssl = true;
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://127.0.0.1:5000/";
|
proxyPass = "http://127.0.0.1:5000/";
|
||||||
recommendedProxySettings = true;
|
recommendedProxySettings = true;
|
||||||
@@ -156,17 +181,21 @@ in
|
|||||||
# Fetch the SSL certificates for nginx to use
|
# Fetch the SSL certificates for nginx to use
|
||||||
cron = {
|
cron = {
|
||||||
enable = true;
|
enable = true;
|
||||||
systemCronJobs = [ "0 0 1 */2 * cd /etc/certs && tailscale cert gitlab.shire-zebra.ts.net && chown nginx * && systemctl reload nginx" ];
|
systemCronJobs = [
|
||||||
|
"0 0 1 */2 * cd /etc/certs && tailscale cert gitlab.shire-zebra.ts.net && chown nginx * && systemctl reload nginx"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
postgresql = {
|
postgresql = {
|
||||||
enable = true;
|
enable = true;
|
||||||
checkConfig = true;
|
checkConfig = true;
|
||||||
ensureDatabases = [ "gitlab" ];
|
ensureDatabases = [ "gitlab" ];
|
||||||
ensureUsers = [{
|
ensureUsers = [
|
||||||
|
{
|
||||||
name = "gitlab";
|
name = "gitlab";
|
||||||
ensureDBOwnership = true;
|
ensureDBOwnership = true;
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
settings = {
|
settings = {
|
||||||
log_connections = true;
|
log_connections = true;
|
||||||
log_statement = "all";
|
log_statement = "all";
|
||||||
@@ -186,9 +215,7 @@ in
|
|||||||
# to the 100.* addresses
|
# to the 100.* addresses
|
||||||
systemd.services = {
|
systemd.services = {
|
||||||
nginx = rec {
|
nginx = rec {
|
||||||
after = [
|
after = [ "network-online.target" ];
|
||||||
"network-online.target"
|
|
||||||
];
|
|
||||||
wants = after;
|
wants = after;
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
RestartMaxDelaySec = "30s";
|
RestartMaxDelaySec = "30s";
|
||||||
|
|||||||
@@ -1,41 +1,47 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, modulesPath, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
[
|
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "sr_mod" ];
|
boot.initrd.availableKernelModules = [
|
||||||
|
"nvme"
|
||||||
|
"xhci_pci"
|
||||||
|
"ahci"
|
||||||
|
"usb_storage"
|
||||||
|
"usbhid"
|
||||||
|
"sd_mod"
|
||||||
|
"sr_mod"
|
||||||
|
];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ "kvm-amd" ];
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/714744ca-dd9d-4713-b571-c6ccfbf56d79";
|
device = "/dev/disk/by-uuid/714744ca-dd9d-4713-b571-c6ccfbf56d79";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
options = [ "subvol=nixos" ];
|
options = [ "subvol=nixos" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/home" =
|
fileSystems."/home" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/714744ca-dd9d-4713-b571-c6ccfbf56d79";
|
device = "/dev/disk/by-uuid/714744ca-dd9d-4713-b571-c6ccfbf56d79";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
options = [ "subvol=home" ];
|
options = [ "subvol=home" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot" =
|
fileSystems."/boot" = {
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/29E7-E20C";
|
device = "/dev/disk/by-uuid/29E7-E20C";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/myvol" =
|
fileSystems."/myvol" = {
|
||||||
{
|
|
||||||
device = "/dev/nvme0n1p1";
|
device = "/dev/nvme0n1p1";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
};
|
};
|
||||||
|
|||||||
+15
-5
@@ -8,7 +8,9 @@ in
|
|||||||
greg.containers.matrix = {
|
greg.containers.matrix = {
|
||||||
tailscale = true;
|
tailscale = true;
|
||||||
subnet = "204";
|
subnet = "204";
|
||||||
builder = { config, ... }: {
|
builder =
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
networking.firewall.allowedTCPPorts = [ config.services.dendrite.httpPort ];
|
networking.firewall.allowedTCPPorts = [ config.services.dendrite.httpPort ];
|
||||||
|
|
||||||
# Environment secrets
|
# Environment secrets
|
||||||
@@ -42,7 +44,14 @@ in
|
|||||||
# Identify ourselves as the root of our own domain
|
# Identify ourselves as the root of our own domain
|
||||||
settings = (
|
settings = (
|
||||||
(builtins.listToAttrs (
|
(builtins.listToAttrs (
|
||||||
(map (x: { name = x; value = { database.connection_string = conn; }; }) [
|
(map
|
||||||
|
(x: {
|
||||||
|
name = x;
|
||||||
|
value = {
|
||||||
|
database.connection_string = conn;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
[
|
||||||
"app_service_api"
|
"app_service_api"
|
||||||
"federation_api"
|
"federation_api"
|
||||||
"key_server"
|
"key_server"
|
||||||
@@ -51,9 +60,10 @@ in
|
|||||||
"relay_api"
|
"relay_api"
|
||||||
"room_server"
|
"room_server"
|
||||||
"sync_api"
|
"sync_api"
|
||||||
])
|
]
|
||||||
)) //
|
)
|
||||||
{
|
))
|
||||||
|
// {
|
||||||
user_api.account_database.connection_string = conn;
|
user_api.account_database.connection_string = conn;
|
||||||
user_api.device_database.connection_string = conn;
|
user_api.device_database.connection_string = conn;
|
||||||
global = {
|
global = {
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
{ ... }:
|
{ ... }:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [ ../baseline.nix ];
|
||||||
../baseline.nix
|
|
||||||
];
|
|
||||||
system.stateVersion = 4;
|
system.stateVersion = 4;
|
||||||
home-manager = {
|
home-manager = {
|
||||||
useGlobalPkgs = true;
|
useGlobalPkgs = true;
|
||||||
|
|||||||
+18
-10
@@ -1,4 +1,9 @@
|
|||||||
{ lib, config, pkgs, ... }:
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.greg.backup;
|
cfg = config.greg.backup;
|
||||||
@@ -14,7 +19,8 @@ let
|
|||||||
type = "sendonly";
|
type = "sendonly";
|
||||||
};
|
};
|
||||||
|
|
||||||
makeRestic = _: job:
|
makeRestic =
|
||||||
|
_: job:
|
||||||
let
|
let
|
||||||
who = "${config.services.syncthing.user}:${config.services.syncthing.group}";
|
who = "${config.services.syncthing.user}:${config.services.syncthing.group}";
|
||||||
in
|
in
|
||||||
@@ -27,13 +33,17 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options = {
|
options = {
|
||||||
greg.backup = {
|
greg.backup = {
|
||||||
jobs = mkOption {
|
jobs = mkOption {
|
||||||
default = { };
|
default = { };
|
||||||
|
|
||||||
type = with types; attrsOf (submodule (
|
type =
|
||||||
|
with types;
|
||||||
|
attrsOf (
|
||||||
|
submodule (
|
||||||
{ ... }:
|
{ ... }:
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
@@ -42,9 +52,7 @@ with lib; {
|
|||||||
description = "Local path (string form) to backup from";
|
description = "Local path (string form) to backup from";
|
||||||
};
|
};
|
||||||
|
|
||||||
dest = mkOption {
|
dest = mkOption { type = types.str; };
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
id = mkOption {
|
id = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
@@ -52,13 +60,13 @@ with lib; {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
));
|
)
|
||||||
|
);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf ((attrValues cfg.jobs) != [ ])
|
config = mkIf ((attrValues cfg.jobs) != [ ]) {
|
||||||
{
|
|
||||||
age.secrets = {
|
age.secrets = {
|
||||||
restic-pw.file = ../../secrets/restic-pw.age;
|
restic-pw.file = ../../secrets/restic-pw.age;
|
||||||
restic-env.file = ../../secrets/restic-env.age;
|
restic-env.file = ../../secrets/restic-env.age;
|
||||||
|
|||||||
+130
-64
@@ -1,6 +1,11 @@
|
|||||||
# This is a good source for a Ceph dealio
|
# This is a good source for a Ceph dealio
|
||||||
# https://gist.github.com0/nh2/13425a1f18b4c1ce82edb63c10b163c9
|
# https://gist.github.com0/nh2/13425a1f18b4c1ce82edb63c10b163c9
|
||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
@@ -8,13 +13,12 @@ let
|
|||||||
cfg = config.services.ceph-benaco;
|
cfg = config.services.ceph-benaco;
|
||||||
commaSep = builtins.concatStringsSep ",";
|
commaSep = builtins.concatStringsSep ",";
|
||||||
|
|
||||||
ensureUnitExists = c': name:
|
ensureUnitExists =
|
||||||
|
c': name:
|
||||||
let
|
let
|
||||||
#unitName = (builtins.elemAt (builtins.split "\\." name) 0);
|
|
||||||
in
|
in
|
||||||
if c'.systemd.services ? unitName
|
#unitName = (builtins.elemAt (builtins.split "\\." name) 0);
|
||||||
then name
|
if c'.systemd.services ? unitName then name else name; # "Unable to locate ${name} at ${commaSep (builtins.attrNames c')}";
|
||||||
else name; # "Unable to locate ${name} at ${commaSep (builtins.attrNames c')}";
|
|
||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -46,7 +50,8 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
initialMonitors = mkOption {
|
initialMonitors = mkOption {
|
||||||
type = types.listOf (types.submodule {
|
type = types.listOf (
|
||||||
|
types.submodule {
|
||||||
options = {
|
options = {
|
||||||
hostname = mkOption {
|
hostname = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
@@ -58,12 +63,14 @@ in
|
|||||||
description = "Initial monitor IP address.";
|
description = "Initial monitor IP address.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
});
|
}
|
||||||
|
);
|
||||||
description = "Initial monitors.";
|
description = "Initial monitors.";
|
||||||
};
|
};
|
||||||
|
|
||||||
mdsNodes = mkOption {
|
mdsNodes = mkOption {
|
||||||
type = types.listOf (types.submodule {
|
type = types.listOf (
|
||||||
|
types.submodule {
|
||||||
options = {
|
options = {
|
||||||
hostname = mkOption {
|
hostname = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
@@ -75,7 +82,8 @@ in
|
|||||||
description = "MDS IP address.";
|
description = "MDS IP address.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
});
|
}
|
||||||
|
);
|
||||||
description = "MDS nodes.";
|
description = "MDS nodes.";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -177,7 +185,8 @@ in
|
|||||||
current machine only, used only to name the systemd service
|
current machine only, used only to name the systemd service
|
||||||
for that OSD.
|
for that OSD.
|
||||||
'';
|
'';
|
||||||
type = types.attrsOf (types.submodule {
|
type = types.attrsOf (
|
||||||
|
types.submodule {
|
||||||
options = {
|
options = {
|
||||||
|
|
||||||
enable = mkEnableOption "Activate a Ceph OSD on this machine.";
|
enable = mkEnableOption "Activate a Ceph OSD on this machine.";
|
||||||
@@ -293,7 +302,8 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
});
|
}
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
mds = {
|
mds = {
|
||||||
@@ -367,10 +377,12 @@ in
|
|||||||
sudoersExtraRule = {
|
sudoersExtraRule = {
|
||||||
# entry for `security.sudo.extraRules`
|
# entry for `security.sudo.extraRules`
|
||||||
users = [ config.users.users.ceph.name ];
|
users = [ config.users.users.ceph.name ];
|
||||||
commands = [{
|
commands = [
|
||||||
|
{
|
||||||
command = "${lib.getBin pkgs.smartmontools}/bin/smartctl -x --json=o /dev/*";
|
command = "${lib.getBin pkgs.smartmontools}/bin/smartctl -x --json=o /dev/*";
|
||||||
options = [ "NOPASSWD" ];
|
options = [ "NOPASSWD" ];
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -378,24 +390,30 @@ in
|
|||||||
sudoersExtraRule = {
|
sudoersExtraRule = {
|
||||||
# entry for `security.sudo.extraRules`
|
# entry for `security.sudo.extraRules`
|
||||||
users = [ config.users.users.ceph.name ];
|
users = [ config.users.users.ceph.name ];
|
||||||
commands = [{
|
commands = [
|
||||||
|
{
|
||||||
command = "${lib.getBin pkgs.nvme-cli}/bin/nvme * smart-log-add --json /dev/*";
|
command = "${lib.getBin pkgs.nvme-cli}/bin/nvme * smart-log-add --json /dev/*";
|
||||||
options = [ "NOPASSWD" ];
|
options = [ "NOPASSWD" ];
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
cephDeviceHealthMonitoringPathsOrPackages = with pkgs; [
|
cephDeviceHealthMonitoringPathsOrPackages =
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
# Contains `sudo`. Ceph wraps this around the other health check programs.
|
# Contains `sudo`. Ceph wraps this around the other health check programs.
|
||||||
# Cannot use `pkgs.sudo` because that one is not SUID, see:
|
# Cannot use `pkgs.sudo` because that one is not SUID, see:
|
||||||
# https://discourse.nixos.org/t/sudo-uid-issues/9133
|
# https://discourse.nixos.org/t/sudo-uid-issues/9133
|
||||||
"/run/wrappers" # `systemd.services.<name>.path` adds the `bin/` subdir of this
|
"/run/wrappers" # `systemd.services.<name>.path` adds the `bin/` subdir of this
|
||||||
] ++ map ({ package, ... }: package) cephMonitoringSudoersCommandsAndPackages;
|
]
|
||||||
|
++ map ({ package, ... }: package) cephMonitoringSudoersCommandsAndPackages;
|
||||||
|
|
||||||
# Unused localOsdServiceName in the following line
|
# Unused localOsdServiceName in the following line
|
||||||
# deadnix: skip
|
# deadnix: skip
|
||||||
makeCephOsdSetupSystemdService = localOsdServiceName: osdConfig:
|
makeCephOsdSetupSystemdService =
|
||||||
|
_localOsdServiceName: osdConfig:
|
||||||
let
|
let
|
||||||
osdExistenceFile = "/var/lib/ceph/osd/.${toString osdConfig.id}.${osdConfig.uuid}.nix-existence";
|
osdExistenceFile = "/var/lib/ceph/osd/.${toString osdConfig.id}.${osdConfig.uuid}.nix-existence";
|
||||||
in
|
in
|
||||||
@@ -414,7 +432,8 @@ in
|
|||||||
# TODO Use `udevadm trigger --settle` instead of the separate `udevadm settle`
|
# TODO Use `udevadm trigger --settle` instead of the separate `udevadm settle`
|
||||||
# once that feature is available to us with systemd >= 238;
|
# once that feature is available to us with systemd >= 238;
|
||||||
# see https://github.com/systemd/systemd/commit/792cc203a67edb201073351f5c766fce3d5eab45
|
# see https://github.com/systemd/systemd/commit/792cc203a67edb201073351f5c766fce3d5eab45
|
||||||
preStart = ''
|
preStart =
|
||||||
|
''
|
||||||
set -x
|
set -x
|
||||||
${ensureCephDirs}
|
${ensureCephDirs}
|
||||||
install -m 755 -o ${config.users.users.ceph.name} -g ${config.users.groups.ceph.name} -d /var/lib/ceph/bootstrap-osd
|
install -m 755 -o ${config.users.users.ceph.name} -g ${config.users.groups.ceph.name} -d /var/lib/ceph/bootstrap-osd
|
||||||
@@ -427,22 +446,26 @@ in
|
|||||||
|
|
||||||
# Trigger udev rules for permissions of block devices and wait for them to settle.
|
# Trigger udev rules for permissions of block devices and wait for them to settle.
|
||||||
udevadm trigger --name-match=${osdConfig.blockDevice}
|
udevadm trigger --name-match=${osdConfig.blockDevice}
|
||||||
'' + lib.optionalString (osdConfig.dbBlockDevice != null) ''
|
|
||||||
udevadm trigger --name-match=${osdConfig.dbBlockDevice}
|
|
||||||
'' +
|
|
||||||
''
|
''
|
||||||
|
+ lib.optionalString (osdConfig.dbBlockDevice != null) ''
|
||||||
|
udevadm trigger --name-match=${osdConfig.dbBlockDevice}
|
||||||
|
''
|
||||||
|
+ ''
|
||||||
udevadm settle
|
udevadm settle
|
||||||
'' + (optionalString (!osdConfig.skipZap) (
|
''
|
||||||
|
+ (optionalString (!osdConfig.skipZap) (
|
||||||
''
|
''
|
||||||
# Zap OSD block devices, otherwise `ceph-osd` below will try to fsck if there's some old
|
# Zap OSD block devices, otherwise `ceph-osd` below will try to fsck if there's some old
|
||||||
# ceph data on the block device (see https://tracker.ceph.com/issues/24099).
|
# ceph data on the block device (see https://tracker.ceph.com/issues/24099).
|
||||||
${cfg.package}/bin/ceph-volume lvm zap ${osdConfig.blockDevice}
|
${cfg.package}/bin/ceph-volume lvm zap ${osdConfig.blockDevice}
|
||||||
'' + lib.optionalString (osdConfig.dbBlockDevice != null) ''
|
''
|
||||||
|
+ lib.optionalString (osdConfig.dbBlockDevice != null) ''
|
||||||
${cfg.package}/bin/ceph-volume lvm zap ${osdConfig.dbBlockDevice}
|
${cfg.package}/bin/ceph-volume lvm zap ${osdConfig.dbBlockDevice}
|
||||||
''
|
''
|
||||||
));
|
));
|
||||||
|
|
||||||
script = ''
|
script =
|
||||||
|
''
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
set -x
|
set -x
|
||||||
until [ -f /etc/ceph/${cfg.clusterName}.client.admin.keyring ]
|
until [ -f /etc/ceph/${cfg.clusterName}.client.admin.keyring ]
|
||||||
@@ -457,10 +480,11 @@ in
|
|||||||
mkdir -p /var/lib/ceph/osd/${cfg.clusterName}-${toString osdConfig.id}
|
mkdir -p /var/lib/ceph/osd/${cfg.clusterName}-${toString osdConfig.id}
|
||||||
|
|
||||||
ln -s ${osdConfig.blockDevice} /var/lib/ceph/osd/${cfg.clusterName}-${toString osdConfig.id}/block
|
ln -s ${osdConfig.blockDevice} /var/lib/ceph/osd/${cfg.clusterName}-${toString osdConfig.id}/block
|
||||||
'' + lib.optionalString (osdConfig.dbBlockDevice != null) ''
|
|
||||||
ln -s ${osdConfig.dbBlockDevice} /var/lib/ceph/osd/${cfg.clusterName}-${toString osdConfig.id}/block.db
|
|
||||||
'' +
|
|
||||||
''
|
''
|
||||||
|
+ lib.optionalString (osdConfig.dbBlockDevice != null) ''
|
||||||
|
ln -s ${osdConfig.dbBlockDevice} /var/lib/ceph/osd/${cfg.clusterName}-${toString osdConfig.id}/block.db
|
||||||
|
''
|
||||||
|
+ ''
|
||||||
|
|
||||||
${cfg.package}/bin/ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${toString osdConfig.id}/keyring \
|
${cfg.package}/bin/ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${toString osdConfig.id}/keyring \
|
||||||
--name osd.${toString osdConfig.id} --add-key $OSD_SECRET
|
--name osd.${toString osdConfig.id} --add-key $OSD_SECRET
|
||||||
@@ -481,14 +505,14 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
makeCephOsdSystemdService = localOsdServiceName: osdConfig: mkIf osdConfig.enable {
|
makeCephOsdSystemdService =
|
||||||
|
localOsdServiceName: osdConfig:
|
||||||
|
mkIf osdConfig.enable {
|
||||||
description = "Ceph OSD";
|
description = "Ceph OSD";
|
||||||
|
|
||||||
# Note we do not have to add `osdConfig.systemdExtraRequiresAfter` here because
|
# Note we do not have to add `osdConfig.systemdExtraRequiresAfter` here because
|
||||||
# that's already a dependency of our dependency `ceph-osd-setup-*`.
|
# that's already a dependency of our dependency `ceph-osd-setup-*`.
|
||||||
requires = [
|
requires = [ (ensureUnitExists config "ceph-osd-setup-${localOsdServiceName}.service") ];
|
||||||
(ensureUnitExists config "ceph-osd-setup-${localOsdServiceName}.service")
|
|
||||||
];
|
|
||||||
requiredBy = [ "multi-user.target" ];
|
requiredBy = [ "multi-user.target" ];
|
||||||
after = [
|
after = [
|
||||||
"network.target"
|
"network.target"
|
||||||
@@ -505,9 +529,7 @@ in
|
|||||||
path = [
|
path = [
|
||||||
# TODO: use wrapProgram in the ceph package for this in the future
|
# TODO: use wrapProgram in the ceph package for this in the future
|
||||||
pkgs.getopt
|
pkgs.getopt
|
||||||
]
|
] ++ cephDeviceHealthMonitoringPathsOrPackages;
|
||||||
++ cephDeviceHealthMonitoringPathsOrPackages
|
|
||||||
;
|
|
||||||
|
|
||||||
restartTriggers = [ config.environment.etc."ceph/${cfg.clusterName}.conf".source ];
|
restartTriggers = [ config.environment.etc."ceph/${cfg.clusterName}.conf".source ];
|
||||||
|
|
||||||
@@ -518,7 +540,9 @@ in
|
|||||||
|
|
||||||
serviceConfig =
|
serviceConfig =
|
||||||
let
|
let
|
||||||
clusterIpArg = lib.optionalString (osdConfig.clusterAddress != null) "--cluster_addr=${osdConfig.clusterAddress}";
|
clusterIpArg = lib.optionalString (
|
||||||
|
osdConfig.clusterAddress != null
|
||||||
|
) "--cluster_addr=${osdConfig.clusterAddress}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
LimitNOFILE = "1048576";
|
LimitNOFILE = "1048576";
|
||||||
@@ -551,7 +575,10 @@ in
|
|||||||
3300 # ceph msgr-v2
|
3300 # ceph msgr-v2
|
||||||
];
|
];
|
||||||
allowedTCPPortRanges = [
|
allowedTCPPortRanges = [
|
||||||
{ from = 6800; to = 7300; } # https://docs.ceph.com/en/pacific/rados/configuration/network-config-ref/
|
{
|
||||||
|
from = 6800;
|
||||||
|
to = 7300;
|
||||||
|
} # https://docs.ceph.com/en/pacific/rados/configuration/network-config-ref/
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -565,8 +592,7 @@ in
|
|||||||
# if you want to override an option you've set in `global`.
|
# if you want to override an option you've set in `global`.
|
||||||
#
|
#
|
||||||
# Sample: https://github.com/ceph/ceph/blob/master/src/sample.ceph.conf
|
# Sample: https://github.com/ceph/ceph/blob/master/src/sample.ceph.conf
|
||||||
environment.etc."ceph/${cfg.clusterName}.conf".text =
|
environment.etc."ceph/${cfg.clusterName}.conf".text = ''
|
||||||
''
|
|
||||||
[global]
|
[global]
|
||||||
fsid = ${cfg.fsid}
|
fsid = ${cfg.fsid}
|
||||||
mon_initial_members = ${commaSep (map (mon: mon.hostname) cfg.initialMonitors)}
|
mon_initial_members = ${commaSep (map (mon: mon.hostname) cfg.initialMonitors)}
|
||||||
@@ -649,27 +675,25 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Allow ceph daemons (which run as user ceph) to collect device health metrics.
|
# Allow ceph daemons (which run as user ceph) to collect device health metrics.
|
||||||
security.sudo.extraRules =
|
security.sudo.extraRules = map (
|
||||||
map ({ sudoersExtraRule, ... }: sudoersExtraRule) cephMonitoringSudoersCommandsAndPackages;
|
{ sudoersExtraRule, ... }: sudoersExtraRule
|
||||||
|
) cephMonitoringSudoersCommandsAndPackages;
|
||||||
|
|
||||||
# The udevadm trigger/settle in `makeCephOsdSetupSystemdService` waits for these rules rule to be applied.
|
# The udevadm trigger/settle in `makeCephOsdSetupSystemdService` waits for these rules rule to be applied.
|
||||||
services.udev.extraRules =
|
services.udev.extraRules = lib.concatStringsSep "\n" (
|
||||||
lib.concatStringsSep "\n" (
|
lib.mapAttrsToList (
|
||||||
lib.mapAttrsToList
|
_localOsdServiceName: osdConfig:
|
||||||
(_localOsdServiceName: osdConfig:
|
|
||||||
''
|
''
|
||||||
SUBSYSTEM=="block", ${osdConfig.blockDeviceUdevRuleMatcher}, OWNER="${config.users.users.ceph.name}", GROUP="${config.users.groups.ceph.name}", MODE="0660"
|
SUBSYSTEM=="block", ${osdConfig.blockDeviceUdevRuleMatcher}, OWNER="${config.users.users.ceph.name}", GROUP="${config.users.groups.ceph.name}", MODE="0660"
|
||||||
''
|
''
|
||||||
+ lib.optionalString (osdConfig.dbBlockDeviceUdevRuleMatcher != null) (
|
+ lib.optionalString (osdConfig.dbBlockDeviceUdevRuleMatcher != null) (''
|
||||||
''
|
|
||||||
SUBSYSTEM=="block", ${osdConfig.dbBlockDeviceUdevRuleMatcher}, OWNER="${config.users.users.ceph.name}", GROUP="${config.users.groups.ceph.name}", MODE="0660"
|
SUBSYSTEM=="block", ${osdConfig.dbBlockDeviceUdevRuleMatcher}, OWNER="${config.users.users.ceph.name}", GROUP="${config.users.groups.ceph.name}", MODE="0660"
|
||||||
''
|
'')
|
||||||
)
|
) cfg.osds
|
||||||
)
|
|
||||||
cfg.osds
|
|
||||||
);
|
);
|
||||||
|
|
||||||
systemd.services = {
|
systemd.services =
|
||||||
|
{
|
||||||
|
|
||||||
ceph-mon-setup = mkIf cfg.monitor.enable {
|
ceph-mon-setup = mkIf cfg.monitor.enable {
|
||||||
description = "Initialize ceph monitor";
|
description = "Initialize ceph monitor";
|
||||||
@@ -680,9 +704,15 @@ in
|
|||||||
let
|
let
|
||||||
# `--addv` seems currently required to get msgr-v2 working, see:
|
# `--addv` seems currently required to get msgr-v2 working, see:
|
||||||
# https://tracker.ceph.com/issues/53751#note-11
|
# https://tracker.ceph.com/issues/53751#note-11
|
||||||
monmapNodes = builtins.concatStringsSep " " (lib.concatMap (mon: [ "--addv" mon.hostname "[v2:${mon.ipAddress}:3300,v1:${mon.ipAddress}:6789]" ]) cfg.initialMonitors);
|
monmapNodes = builtins.concatStringsSep " " (
|
||||||
# Monitors cannot simply be changed in config, one has to update the monmap, see note [replacing-ceph-monmap-ips-for-existing-cluster]
|
lib.concatMap (mon: [
|
||||||
|
"--addv"
|
||||||
|
mon.hostname
|
||||||
|
"[v2:${mon.ipAddress}:3300,v1:${mon.ipAddress}:6789]"
|
||||||
|
]) cfg.initialMonitors
|
||||||
|
);
|
||||||
in
|
in
|
||||||
|
# Monitors cannot simply be changed in config, one has to update the monmap, see note [replacing-ceph-monmap-ips-for-existing-cluster]
|
||||||
''
|
''
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
rm -rf "${monDir}" # Start from scratch.
|
rm -rf "${monDir}" # Start from scratch.
|
||||||
@@ -711,8 +741,17 @@ in
|
|||||||
|
|
||||||
requires = [ (ensureUnitExists config "ceph-mon-setup.service") ];
|
requires = [ (ensureUnitExists config "ceph-mon-setup.service") ];
|
||||||
requiredBy = [ "multi-user.target" ];
|
requiredBy = [ "multi-user.target" ];
|
||||||
after = [ "network.target" "local-fs.target" "time-sync.target" (ensureUnitExists config "ceph-mon-setup.service") ];
|
after = [
|
||||||
wants = [ "network.target" "local-fs.target" "time-sync.target" ];
|
"network.target"
|
||||||
|
"local-fs.target"
|
||||||
|
"time-sync.target"
|
||||||
|
(ensureUnitExists config "ceph-mon-setup.service")
|
||||||
|
];
|
||||||
|
wants = [
|
||||||
|
"network.target"
|
||||||
|
"local-fs.target"
|
||||||
|
"time-sync.target"
|
||||||
|
];
|
||||||
|
|
||||||
restartTriggers = [ config.environment.etc."ceph/${cfg.clusterName}.conf".source ];
|
restartTriggers = [ config.environment.etc."ceph/${cfg.clusterName}.conf".source ];
|
||||||
|
|
||||||
@@ -774,8 +813,17 @@ in
|
|||||||
|
|
||||||
requires = [ (ensureUnitExists config "ceph-mgr-setup.service") ];
|
requires = [ (ensureUnitExists config "ceph-mgr-setup.service") ];
|
||||||
requiredBy = [ "multi-user.target" ];
|
requiredBy = [ "multi-user.target" ];
|
||||||
after = [ "network.target" "local-fs.target" "time-sync.target" (ensureUnitExists config "ceph-mgr-setup.service") ];
|
after = [
|
||||||
wants = [ "network.target" "local-fs.target" "time-sync.target" ];
|
"network.target"
|
||||||
|
"local-fs.target"
|
||||||
|
"time-sync.target"
|
||||||
|
(ensureUnitExists config "ceph-mgr-setup.service")
|
||||||
|
];
|
||||||
|
wants = [
|
||||||
|
"network.target"
|
||||||
|
"local-fs.target"
|
||||||
|
"time-sync.target"
|
||||||
|
];
|
||||||
|
|
||||||
restartTriggers = [ config.environment.etc."ceph/${cfg.clusterName}.conf".source ];
|
restartTriggers = [ config.environment.etc."ceph/${cfg.clusterName}.conf".source ];
|
||||||
|
|
||||||
@@ -831,8 +879,17 @@ in
|
|||||||
|
|
||||||
requires = [ (ensureUnitExists config "ceph-mds-setup.service") ];
|
requires = [ (ensureUnitExists config "ceph-mds-setup.service") ];
|
||||||
requiredBy = [ "multi-user.target" ];
|
requiredBy = [ "multi-user.target" ];
|
||||||
after = [ "network.target" "local-fs.target" "time-sync.target" (ensureUnitExists config "ceph-mds-setup.service") ];
|
after = [
|
||||||
wants = [ "network.target" "local-fs.target" "time-sync.target" ];
|
"network.target"
|
||||||
|
"local-fs.target"
|
||||||
|
"time-sync.target"
|
||||||
|
(ensureUnitExists config "ceph-mds-setup.service")
|
||||||
|
];
|
||||||
|
wants = [
|
||||||
|
"network.target"
|
||||||
|
"local-fs.target"
|
||||||
|
"time-sync.target"
|
||||||
|
];
|
||||||
|
|
||||||
restartTriggers = [ config.environment.etc."ceph/${cfg.clusterName}.conf".source ];
|
restartTriggers = [ config.environment.etc."ceph/${cfg.clusterName}.conf".source ];
|
||||||
|
|
||||||
@@ -856,8 +913,17 @@ in
|
|||||||
|
|
||||||
}
|
}
|
||||||
# Make one OSD service for each configured OSD.
|
# Make one OSD service for each configured OSD.
|
||||||
// lib.mapAttrs' (localOsdServiceName: osdConfig: nameValuePair "ceph-osd-setup-${localOsdServiceName}" (makeCephOsdSetupSystemdService localOsdServiceName osdConfig)) cfg.osds
|
// lib.mapAttrs' (
|
||||||
// lib.mapAttrs' (localOsdServiceName: osdConfig: nameValuePair "ceph-osd-${localOsdServiceName}" (makeCephOsdSystemdService localOsdServiceName osdConfig)) cfg.osds;
|
localOsdServiceName: osdConfig:
|
||||||
|
nameValuePair "ceph-osd-setup-${localOsdServiceName}" (
|
||||||
|
makeCephOsdSetupSystemdService localOsdServiceName osdConfig
|
||||||
|
)
|
||||||
|
) cfg.osds
|
||||||
|
// lib.mapAttrs' (
|
||||||
|
localOsdServiceName: osdConfig:
|
||||||
|
nameValuePair "ceph-osd-${localOsdServiceName}" (
|
||||||
|
makeCephOsdSystemdService localOsdServiceName osdConfig
|
||||||
|
)
|
||||||
|
) cfg.osds;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+18
-5
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.greg.databases;
|
cfg = config.greg.databases;
|
||||||
@@ -7,12 +12,17 @@ in
|
|||||||
{
|
{
|
||||||
options.greg.databases = lib.mkOption {
|
options.greg.databases = lib.mkOption {
|
||||||
default = { };
|
default = { };
|
||||||
type = with lib.types; attrsOf (submodule (
|
type =
|
||||||
{ ... }: {
|
with lib.types;
|
||||||
|
attrsOf (
|
||||||
|
submodule (
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
# Options reserved for future expansion
|
# Options reserved for future expansion
|
||||||
options = { };
|
options = { };
|
||||||
}
|
}
|
||||||
));
|
)
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf (dbs != [ ]) {
|
config = lib.mkIf (dbs != [ ]) {
|
||||||
@@ -22,7 +32,10 @@ in
|
|||||||
package = pkgs.postgresql_15;
|
package = pkgs.postgresql_15;
|
||||||
checkConfig = true;
|
checkConfig = true;
|
||||||
ensureDatabases = dbs;
|
ensureDatabases = dbs;
|
||||||
ensureUsers = map (db: { name = db; ensureDBOwnership = true; }) dbs;
|
ensureUsers = map (db: {
|
||||||
|
name = db;
|
||||||
|
ensureDBOwnership = true;
|
||||||
|
}) dbs;
|
||||||
settings = {
|
settings = {
|
||||||
log_connections = true;
|
log_connections = true;
|
||||||
log_statement = "all";
|
log_statement = "all";
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.greg.gnome;
|
cfg = config.greg.gnome;
|
||||||
|
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options = {
|
options = {
|
||||||
greg.gnome.enable = mkEnableOption "Enable my default Gnome3 setup";
|
greg.gnome.enable = mkEnableOption "Enable my default Gnome3 setup";
|
||||||
};
|
};
|
||||||
@@ -24,9 +30,7 @@ with lib; {
|
|||||||
xkb.layout = "us";
|
xkb.layout = "us";
|
||||||
};
|
};
|
||||||
|
|
||||||
udev.packages = with pkgs; [
|
udev.packages = with pkgs; [ gnome-settings-daemon ];
|
||||||
gnome-settings-daemon
|
|
||||||
];
|
|
||||||
|
|
||||||
pipewire.enable = true;
|
pipewire.enable = true;
|
||||||
|
|
||||||
|
|||||||
+13
-4
@@ -1,17 +1,25 @@
|
|||||||
{ config, pkgs, lib, options, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.greg.kde;
|
cfg = config.greg.kde;
|
||||||
|
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options = {
|
options = {
|
||||||
greg.kde.enable = mkEnableOption "Enable my default KDE setup";
|
greg.kde.enable = mkEnableOption "Enable my default KDE setup";
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
# Sets up a basic KDE installation
|
# Sets up a basic KDE installation
|
||||||
services = {
|
services =
|
||||||
|
{
|
||||||
xserver = {
|
xserver = {
|
||||||
enable = true;
|
enable = true;
|
||||||
xkb.layout = "us";
|
xkb.layout = "us";
|
||||||
@@ -25,7 +33,8 @@ with lib; {
|
|||||||
alsa.support32Bit = true;
|
alsa.support32Bit = true;
|
||||||
pulse.enable = true;
|
pulse.enable = true;
|
||||||
};
|
};
|
||||||
} // (optionalAttrs (builtins.hasAttr "plasma6" options.services.xserver.desktopManager) {
|
}
|
||||||
|
// (optionalAttrs (builtins.hasAttr "plasma6" options.services.xserver.desktopManager) {
|
||||||
desktopManager.plasma6.enable = true;
|
desktopManager.plasma6.enable = true;
|
||||||
displayManager = {
|
displayManager = {
|
||||||
defaultSession = "plasma";
|
defaultSession = "plasma";
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.services.kiwix-serve;
|
cfg = config.services.kiwix-serve;
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options.services.kiwix-serve = {
|
options.services.kiwix-serve = {
|
||||||
enable = mkEnableOption "Enable the Kiwix web server";
|
enable = mkEnableOption "Enable the Kiwix web server";
|
||||||
|
|
||||||
@@ -22,16 +28,15 @@ with lib; {
|
|||||||
proxy = mkOption {
|
proxy = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "";
|
default = "";
|
||||||
description = ''Upstream proxy, if any, to configure with kiwix. Specify
|
description = ''
|
||||||
|
Upstream proxy, if any, to configure with kiwix. Specify
|
||||||
host and port. E.g. "localhost:8080"
|
host and port. E.g. "localhost:8080"
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [ pkgs.kiwix-tools ];
|
||||||
pkgs.kiwix-tools
|
|
||||||
];
|
|
||||||
|
|
||||||
systemd.services.kiwix-serve = {
|
systemd.services.kiwix-serve = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.greg.linode;
|
cfg = config.greg.linode;
|
||||||
|
|||||||
+11
-6
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.greg.print;
|
cfg = config.greg.print;
|
||||||
@@ -16,12 +21,11 @@ with lib;
|
|||||||
# ipp://printer.thehellings.lan:631/ - generic postscript printer
|
# ipp://printer.thehellings.lan:631/ - generic postscript printer
|
||||||
services.printing = {
|
services.printing = {
|
||||||
enable = true;
|
enable = true;
|
||||||
drivers = with pkgs; [
|
drivers = with pkgs; [ gutenprint ] ++ (lib.optional pkgs.stdenv.isx86_64 gutenprintBin);
|
||||||
gutenprint
|
|
||||||
] ++ (lib.optional pkgs.stdenv.isx86_64 gutenprintBin);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.printers.ensurePrinters = [{
|
hardware.printers.ensurePrinters = [
|
||||||
|
{
|
||||||
name = "HomeLexmarkColorPrinter";
|
name = "HomeLexmarkColorPrinter";
|
||||||
location = "Home office";
|
location = "Home office";
|
||||||
deviceUri = "ipp://printer.thehellings.lan:631/";
|
deviceUri = "ipp://printer.thehellings.lan:631/";
|
||||||
@@ -29,6 +33,7 @@ with lib;
|
|||||||
ppdOptions = {
|
ppdOptions = {
|
||||||
PageSize = "Letter";
|
PageSize = "Letter";
|
||||||
};
|
};
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-5
@@ -10,17 +10,20 @@ let
|
|||||||
enableACME = dest.ssl;
|
enableACME = dest.ssl;
|
||||||
locations."${dest.path}" = {
|
locations."${dest.path}" = {
|
||||||
proxyPass = dest.target;
|
proxyPass = dest.target;
|
||||||
extraConfig = ''
|
extraConfig =
|
||||||
|
''
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
proxy_set_header Connection $connection_upgrade;
|
proxy_set_header Connection $connection_upgrade;
|
||||||
'' + dest.extraConfig;
|
''
|
||||||
|
+ dest.extraConfig;
|
||||||
};
|
};
|
||||||
serverAliases = lib.mkIf dest.genAliases [ "${alias name}" ];
|
serverAliases = lib.mkIf dest.genAliases [ "${alias name}" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options = {
|
options = {
|
||||||
greg.proxies = mkOption {
|
greg.proxies = mkOption {
|
||||||
default = { };
|
default = { };
|
||||||
@@ -37,7 +40,10 @@ with lib; {
|
|||||||
enablement.
|
enablement.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
type = with types; attrsOf (submodule (
|
type =
|
||||||
|
with types;
|
||||||
|
attrsOf (
|
||||||
|
submodule (
|
||||||
{ ... }:
|
{ ... }:
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
@@ -72,7 +78,8 @@ with lib; {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
));
|
)
|
||||||
|
);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+32
-12
@@ -1,22 +1,39 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
names = mylist: (lib.strings.concatMapStringsSep "," (x: ''"${x}"'') mylist);
|
names = mylist: (lib.strings.concatMapStringsSep "," (x: ''"${x}"'') mylist);
|
||||||
# Pass the names of the wan/lan ports
|
# Pass the names of the wan/lan ports
|
||||||
nftConfig =
|
nftConfig =
|
||||||
{ wan
|
{
|
||||||
, lan
|
wan,
|
||||||
, limitedLan ? [ ]
|
lan,
|
||||||
, openPorts ? [ "ssh" "67" "53" ]
|
limitedLan ? [ ],
|
||||||
, # ssh, dhcpd, dns
|
openPorts ? [
|
||||||
openUDPPorts ? [ "67" "53" ] # dhcpd, dns
|
"ssh"
|
||||||
|
"67"
|
||||||
|
"53"
|
||||||
|
],
|
||||||
|
# ssh, dhcpd, dns
|
||||||
|
openUDPPorts ? [
|
||||||
|
"67"
|
||||||
|
"53"
|
||||||
|
], # dhcpd, dns
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
lanList = names lan;
|
lanList = names lan;
|
||||||
allLan = names (lan ++ limitedLan);
|
allLan = names (lan ++ limitedLan);
|
||||||
wanName = names wan;
|
wanName = names wan;
|
||||||
portsString = lib.strings.concatMapStringsSep "\n" (x: "iifname { ${lanList}, \"tailscale0\" } tcp dport ${toString x} accept") openPorts;
|
portsString = lib.strings.concatMapStringsSep "\n" (
|
||||||
udpPortsString = lib.strings.concatMapStringsSep "\n" (x: "iifname { ${lanList}, \"tailscale0\" } udp dport ${toString x} accept") openUDPPorts;
|
x: "iifname { ${lanList}, \"tailscale0\" } tcp dport ${toString x} accept"
|
||||||
|
) openPorts;
|
||||||
|
udpPortsString = lib.strings.concatMapStringsSep "\n" (
|
||||||
|
x: "iifname { ${lanList}, \"tailscale0\" } udp dport ${toString x} accept"
|
||||||
|
) openUDPPorts;
|
||||||
in
|
in
|
||||||
lib.strings.concatStringsSep "\n" [
|
lib.strings.concatStringsSep "\n" [
|
||||||
"table ip filter {"
|
"table ip filter {"
|
||||||
@@ -61,7 +78,8 @@ let
|
|||||||
cfg = config.greg.router;
|
cfg = config.greg.router;
|
||||||
|
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options.greg.router = {
|
options.greg.router = {
|
||||||
enable = mkEnableOption "Enable NFTables and routing";
|
enable = mkEnableOption "Enable NFTables and routing";
|
||||||
wan = mkOption {
|
wan = mkOption {
|
||||||
@@ -82,11 +100,13 @@ with lib; {
|
|||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
networking.nftables = {
|
networking.nftables = {
|
||||||
enable = true;
|
enable = true;
|
||||||
ruleset = (nftConfig {
|
ruleset = (
|
||||||
|
nftConfig {
|
||||||
inherit (cfg) lan wan;
|
inherit (cfg) lan wan;
|
||||||
openPorts = config.networking.firewall.allowedTCPPorts;
|
openPorts = config.networking.firewall.allowedTCPPorts;
|
||||||
openUDPPorts = config.networking.firewall.allowedUDPPorts;
|
openUDPPorts = config.networking.firewall.allowedUDPPorts;
|
||||||
});
|
}
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.greg.rpi4;
|
cfg = config.greg.rpi4;
|
||||||
|
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options = {
|
options = {
|
||||||
greg.rpi4 = {
|
greg.rpi4 = {
|
||||||
enable = mkEnableOption "Enable support for Raspberry Pi 4s";
|
enable = mkEnableOption "Enable support for Raspberry Pi 4s";
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ let
|
|||||||
cfg = config.greg.sway;
|
cfg = config.greg.sway;
|
||||||
|
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options = {
|
options = {
|
||||||
greg.sway.enable = mkEnableOption "Enable my default Gnome3 setup";
|
greg.sway.enable = mkEnableOption "Enable my default Gnome3 setup";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
let
|
let
|
||||||
cfg = config.greg.syncthing;
|
cfg = config.greg.syncthing;
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options.greg.syncthing = {
|
options.greg.syncthing = {
|
||||||
enable = mkEnableOption "Setup my personal minimal configuration for Syncthing";
|
enable = mkEnableOption "Setup my personal minimal configuration for Syncthing";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ pkgs, lib, config, ... }:
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.greg.vmdev;
|
cfg = config.greg.vmdev;
|
||||||
|
|||||||
+12
-12
@@ -1,24 +1,26 @@
|
|||||||
{ lib
|
{
|
||||||
, stdenv
|
lib,
|
||||||
, python3
|
stdenv,
|
||||||
, fetchFromGitHub
|
python3,
|
||||||
, installShellFiles
|
fetchFromGitHub,
|
||||||
|
installShellFiles,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with python3.pkgs;
|
with python3.pkgs;
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
runtimeDeps = ps: with ps; [
|
runtimeDeps =
|
||||||
|
ps:
|
||||||
|
with ps;
|
||||||
|
[
|
||||||
certifi
|
certifi
|
||||||
setuptools
|
setuptools
|
||||||
pip
|
pip
|
||||||
virtualenv
|
virtualenv
|
||||||
virtualenv-clone
|
virtualenv-clone
|
||||||
]
|
]
|
||||||
++ lib.optionals stdenv.hostPlatform.isAndroid [
|
++ lib.optionals stdenv.hostPlatform.isAndroid [ pyjnius ];
|
||||||
pyjnius
|
|
||||||
];
|
|
||||||
|
|
||||||
pythonEnv = python3.withPackages runtimeDeps;
|
pythonEnv = python3.withPackages runtimeDeps;
|
||||||
|
|
||||||
@@ -71,9 +73,7 @@ buildPythonApplication rec {
|
|||||||
"test_download_file"
|
"test_download_file"
|
||||||
];
|
];
|
||||||
|
|
||||||
disabledTestPaths = [
|
disabledTestPaths = [ "tests/integration" ];
|
||||||
"tests/integration"
|
|
||||||
];
|
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
installShellCompletion --cmd pipenv \
|
installShellCompletion --cmd pipenv \
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
{ lib
|
{
|
||||||
, buildPythonPackage
|
lib,
|
||||||
, fetchFromGitHub
|
buildPythonPackage,
|
||||||
, toPythonModule
|
fetchFromGitHub,
|
||||||
, pipenv
|
toPythonModule,
|
||||||
,
|
pipenv,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
@@ -19,9 +19,7 @@ buildPythonPackage rec {
|
|||||||
|
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [ (toPythonModule pipenv) ];
|
||||||
(toPythonModule pipenv)
|
|
||||||
];
|
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
description = "Auto pipenv support for Xonsh";
|
description = "Auto pipenv support for Xonsh";
|
||||||
|
|||||||
+8
-2
@@ -5,7 +5,14 @@ let
|
|||||||
genesis = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEI9jbTPmEWQ0F2bLYmnIOLmBnag1fkKxHRjz3X8lB/k root@genesis";
|
genesis = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEI9jbTPmEWQ0F2bLYmnIOLmBnag1fkKxHRjz3X8lB/k root@genesis";
|
||||||
hosea = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKLIwkTTXA56sUlUjEulXXZRvZy5H4a5ZwgKWLlpkQDz";
|
hosea = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKLIwkTTXA56sUlUjEulXXZRvZy5H4a5ZwgKWLlpkQDz";
|
||||||
jeremiah = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOjQjXq9WYU2Ki27BR9WwJ4ZruS/lJXbjC1b0Q42Adi0";
|
jeremiah = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOjQjXq9WYU2Ki27BR9WwJ4ZruS/lJXbjC1b0Q42Adi0";
|
||||||
systems = [ genesis linode jude myself hosea jeremiah ];
|
systems = [
|
||||||
|
genesis
|
||||||
|
linode
|
||||||
|
jude
|
||||||
|
myself
|
||||||
|
hosea
|
||||||
|
jeremiah
|
||||||
|
];
|
||||||
|
|
||||||
user_genesis_virt = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFWPSFQT0AH77wrwRhiskcBS0w4ZakBRdJywYYBsnm3S greg@genesis";
|
user_genesis_virt = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFWPSFQT0AH77wrwRhiskcBS0w4ZakBRdJywYYBsnm3S greg@genesis";
|
||||||
user_ivr = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMYzms+KIe5/bYF3uCyFjA5e1AgMPLIA3c4k417coqBe gregory.hellings@ls23003";
|
user_ivr = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMYzms+KIe5/bYF3uCyFjA5e1AgMPLIA3c4k417coqBe gregory.hellings@ls23003";
|
||||||
@@ -44,7 +51,6 @@ in
|
|||||||
"restic-env.age".publicKeys = everyone;
|
"restic-env.age".publicKeys = everyone;
|
||||||
"restic-pw.age".publicKeys = everyone;
|
"restic-pw.age".publicKeys = everyone;
|
||||||
|
|
||||||
|
|
||||||
"dendrite.age".publicKeys = everyone;
|
"dendrite.age".publicKeys = everyone;
|
||||||
"dendrite_key.age".publicKeys = everyone;
|
"dendrite_key.age".publicKeys = everyone;
|
||||||
"gitlab/secret.age".publicKeys = everyone;
|
"gitlab/secret.age".publicKeys = everyone;
|
||||||
|
|||||||
Reference in New Issue
Block a user