Initial commit.
This commit is contained in:
commit
67823cbed6
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
*.iso
|
||||||
|
result
|
21
base.nix
Normal file
21
base.nix
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.openssh.enable = true;
|
||||||
|
security.sudo.wheelNeedsPassword = false;
|
||||||
|
users.mutableUsers = false;
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
file
|
||||||
|
vim
|
||||||
|
curl
|
||||||
|
wget
|
||||||
|
git
|
||||||
|
git-crypt
|
||||||
|
tmux
|
||||||
|
psmisc
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.variables.EDITOR = "vim";
|
||||||
|
}
|
3
boot-iso.sh
Executable file
3
boot-iso.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
qemu-system-x86_64 -nographic -smp 4 -m 2048 -audiodev pa,id=Sound -device intel-hda -device hda-output,audiodev=Sound -cdrom result/iso/nixos-*.iso
|
41
espeakup.nix
Normal file
41
espeakup.nix
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.services.espeakup;
|
||||||
|
inherit (lib)
|
||||||
|
mkEnableOption
|
||||||
|
mkIf
|
||||||
|
mkPackageOption
|
||||||
|
mkOption
|
||||||
|
types
|
||||||
|
;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.espeakup = {
|
||||||
|
enable = mkEnableOption "Espeakup screen reader";
|
||||||
|
package = mkPackageOption pkgs "espeakup" { };
|
||||||
|
defaultVoice = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "en-gb";
|
||||||
|
description = "Default voice for espeakup";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
boot.kernelModules = [ "speakup_soft" ];
|
||||||
|
systemd.packages = [ pkgs.espeakup ];
|
||||||
|
systemd.services.espeakup = {
|
||||||
|
wantedBy = [ "sound.target" ];
|
||||||
|
environment = {
|
||||||
|
default_voice = cfg.defaultVoice;
|
||||||
|
};
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStartPre = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
298
flake.lock
generated
Normal file
298
flake.lock
generated
Normal file
@ -0,0 +1,298 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"agenix": {
|
||||||
|
"inputs": {
|
||||||
|
"darwin": "darwin",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1723293904,
|
||||||
|
"narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=",
|
||||||
|
"owner": "ryantm",
|
||||||
|
"repo": "agenix",
|
||||||
|
"rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "ryantm",
|
||||||
|
"repo": "agenix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"blobs": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1604995301,
|
||||||
|
"narHash": "sha256-wcLzgLec6SGJA8fx1OEN1yV/Py5b+U5iyYpksUY/yLw=",
|
||||||
|
"owner": "simple-nixos-mailserver",
|
||||||
|
"repo": "blobs",
|
||||||
|
"rev": "2cccdf1ca48316f2cfd1c9a0017e8de5a7156265",
|
||||||
|
"type": "gitlab"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "simple-nixos-mailserver",
|
||||||
|
"repo": "blobs",
|
||||||
|
"type": "gitlab"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"darwin": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"agenix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1700795494,
|
||||||
|
"narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=",
|
||||||
|
"owner": "lnl7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "lnl7",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1696426674,
|
||||||
|
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"agenix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1703113217,
|
||||||
|
"narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1733951536,
|
||||||
|
"narHash": "sha256-Zb5ZCa7Xj+0gy5XVXINTSr71fCfAv+IKtmIXNrykT54=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "1318c3f3b068cdcea922fa7c1a0a1f0c96c22f5f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"ref": "release-24.11",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixos-hardware": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1733861262,
|
||||||
|
"narHash": "sha256-+jjPup/ByS0LEVIrBbt7FnGugJgLeG9oc+ivFASYn2U=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixos-hardware",
|
||||||
|
"rev": "cf737e2eba82b603f54f71b10cb8fd09d22ce3f5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "nixos-hardware",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1703013332,
|
||||||
|
"narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-24_05": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1717144377,
|
||||||
|
"narHash": "sha256-F/TKWETwB5RaR8owkPPi+SPJh83AQsm6KrQAlJ8v/uA=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "805a384895c696f802a9bf5bf4720f37385df547",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"ref": "nixos-24.05",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgsUnstable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1733759999,
|
||||||
|
"narHash": "sha256-463SNPWmz46iLzJKRzO3Q2b0Aurff3U1n0nYItxq7jU=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "a73246e2eef4c6ed172979932bc80e1404ba2d56",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1733808091,
|
||||||
|
"narHash": "sha256-KWwINTQelKOoQgrXftxoqxmKFZb9pLVfnRvK270nkVk=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "a0f3e10d94359665dba45b71b4227b0aeb851f8e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-24.11",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1717602782,
|
||||||
|
"narHash": "sha256-pL9jeus5QpX5R+9rsp3hhZ+uplVHscNJh8n8VpqscM0=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "e8057b67ebf307f01bdcc8fba94d94f75039d1f6",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"agenix": "agenix",
|
||||||
|
"home-manager": "home-manager_2",
|
||||||
|
"nixos-hardware": "nixos-hardware",
|
||||||
|
"nixpkgs": "nixpkgs_2",
|
||||||
|
"nixpkgsUnstable": "nixpkgsUnstable",
|
||||||
|
"simple-nixos-mailserver": "simple-nixos-mailserver"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"simple-nixos-mailserver": {
|
||||||
|
"inputs": {
|
||||||
|
"blobs": "blobs",
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"nixpkgs": "nixpkgs_3",
|
||||||
|
"nixpkgs-24_05": "nixpkgs-24_05",
|
||||||
|
"utils": "utils"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1718084203,
|
||||||
|
"narHash": "sha256-Cx1xoVfSMv1XDLgKg08CUd1EoTYWB45VmB9XIQzhmzI=",
|
||||||
|
"owner": "simple-nixos-mailserver",
|
||||||
|
"repo": "nixos-mailserver",
|
||||||
|
"rev": "29916981e7b3b5782dc5085ad18490113f8ff63b",
|
||||||
|
"type": "gitlab"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "simple-nixos-mailserver",
|
||||||
|
"ref": "nixos-24.05",
|
||||||
|
"repo": "nixos-mailserver",
|
||||||
|
"type": "gitlab"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1709126324,
|
||||||
|
"narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "d465f4819400de7c8d874d50b982301f28a84605",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
102
flake.nix
Normal file
102
flake.nix
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
|
||||||
|
nixpkgsUnstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager/release-24.11";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
agenix.url = "github:ryantm/agenix";
|
||||||
|
simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-24.05";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{
|
||||||
|
nixpkgs,
|
||||||
|
nixpkgsUnstable,
|
||||||
|
home-manager,
|
||||||
|
nixos-hardware,
|
||||||
|
agenix,
|
||||||
|
simple-nixos-mailserver,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
overlayUnstable = final: prev: {
|
||||||
|
unstable = import nixpkgsUnstable {
|
||||||
|
inherit system;
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
nixosConfigurations = {
|
||||||
|
nixbox = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
modules = [
|
||||||
|
agenix.nixosModules.default
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ agenix.packages.${system}.default ];
|
||||||
|
}
|
||||||
|
(
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
nixpkgs.overlays = [ overlayUnstable ];
|
||||||
|
}
|
||||||
|
)
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
}
|
||||||
|
./hosts/nixbox
|
||||||
|
];
|
||||||
|
};
|
||||||
|
flynode = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
modules = [
|
||||||
|
agenix.nixosModules.default
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ agenix.packages.${system}.default ];
|
||||||
|
}
|
||||||
|
(
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
nixpkgs.overlays = [ overlayUnstable ];
|
||||||
|
}
|
||||||
|
)
|
||||||
|
nixos-hardware.nixosModules.lenovo-thinkpad-z13-gen1
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
}
|
||||||
|
./hosts/flynode
|
||||||
|
];
|
||||||
|
};
|
||||||
|
thewordnerd = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
modules = [
|
||||||
|
agenix.nixosModules.default
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ agenix.packages.${system}.default ];
|
||||||
|
}
|
||||||
|
(
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
nixpkgs.overlays = [ overlayUnstable ];
|
||||||
|
}
|
||||||
|
)
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
}
|
||||||
|
simple-nixos-mailserver.nixosModule
|
||||||
|
./hosts/hub
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
69
hosts/flynode/default.nix
Normal file
69
hosts/flynode/default.nix
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# Edit this configuration file to define what should be installed on
|
||||||
|
# your system. Help is available in the configuration.nix(5) man page, on
|
||||||
|
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
../../roles/zfs.nix
|
||||||
|
../../base.nix
|
||||||
|
../../users/root.nix
|
||||||
|
../../users/nolan/desktop.nix
|
||||||
|
../../roles/espeakup.nix
|
||||||
|
../../roles/networkmanager.nix
|
||||||
|
../../roles/nix-ld.nix
|
||||||
|
../../roles/tailscale.nix
|
||||||
|
../../roles/podman.nix
|
||||||
|
../../roles/mate.nix
|
||||||
|
../../roles/flatpak.nix
|
||||||
|
../../roles/games.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.loader.grub = {
|
||||||
|
enable = true;
|
||||||
|
zfsSupport = true;
|
||||||
|
efiSupport = true;
|
||||||
|
efiInstallAsRemovable = true;
|
||||||
|
mirroredBoots = [
|
||||||
|
{
|
||||||
|
devices = [ "nodev" ];
|
||||||
|
path = "/boot";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
hostName = "flynode";
|
||||||
|
hostId = "9dfa34d8";
|
||||||
|
};
|
||||||
|
|
||||||
|
time.timeZone = "America/Chicago";
|
||||||
|
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
console.keyMap = "us";
|
||||||
|
|
||||||
|
# Enable the Flakes feature and the accompanying new nix command-line tool
|
||||||
|
nix.settings.experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
|
||||||
|
# This option defines the first version of NixOS you have installed on this particular machine,
|
||||||
|
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
|
||||||
|
#
|
||||||
|
# Most users should NEVER change this value after the initial install, for any reason,
|
||||||
|
# even if you've upgraded your system to a new NixOS release.
|
||||||
|
#
|
||||||
|
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
|
||||||
|
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
|
||||||
|
# to actually do that.
|
||||||
|
#
|
||||||
|
# This value being lower than the current NixOS release does NOT mean your system is
|
||||||
|
# out of date, out of support, or vulnerable.
|
||||||
|
#
|
||||||
|
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
|
||||||
|
# and migrated your data accordingly.
|
||||||
|
#
|
||||||
|
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
|
||||||
|
system.stateVersion = "24.05"; # Did you read the comment?
|
||||||
|
}
|
55
hosts/flynode/hardware-configuration.nix
Normal file
55
hosts/flynode/hardware-configuration.nix
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" =
|
||||||
|
{ device = "zpool/root";
|
||||||
|
fsType = "zfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/nix" =
|
||||||
|
{ device = "zpool/nix";
|
||||||
|
fsType = "zfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/var" =
|
||||||
|
{ device = "zpool/var";
|
||||||
|
fsType = "zfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/home" =
|
||||||
|
{ device = "zpool/home";
|
||||||
|
fsType = "zfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" =
|
||||||
|
{ device = "/dev/disk/by-uuid/0642-E087";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [ "fmask=0022" "dmask=0022" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices =
|
||||||
|
[ { device = "/dev/disk/by-uuid/c9a2faf8-4e35-4946-a70f-c84d0fa359df"; }
|
||||||
|
];
|
||||||
|
|
||||||
|
# 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
|
||||||
|
# still possible to use this option, but it's recommended to use it in conjunction
|
||||||
|
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||||
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
84
hosts/hub/apps/dev.nix
Normal file
84
hosts/hub/apps/dev.nix
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
{
|
||||||
|
services = {
|
||||||
|
postgresql = {
|
||||||
|
ensureDatabases = [ "dev" ];
|
||||||
|
ensureUsers = [
|
||||||
|
{
|
||||||
|
name = "dev";
|
||||||
|
ensureDBOwnership = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
authelia.instances.main.settings.access_control.rules = [
|
||||||
|
{
|
||||||
|
domain = "dev.thewordnerd.info";
|
||||||
|
policy = "bypass";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
containers.dev = {
|
||||||
|
autoStart = true;
|
||||||
|
privateNetwork = true;
|
||||||
|
hostAddress = "192.168.0.1";
|
||||||
|
localAddress = "192.168.0.2";
|
||||||
|
config =
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
services.gitea = {
|
||||||
|
enable = true;
|
||||||
|
appName = "Nolan's projects";
|
||||||
|
settings = {
|
||||||
|
server = {
|
||||||
|
ROOT_URL = "https://dev.thewordnerd.info";
|
||||||
|
DOMAIN = "dev.thewordnerd.info";
|
||||||
|
DISABLE_SSH = true;
|
||||||
|
LANDING_PAGE = "explore";
|
||||||
|
};
|
||||||
|
service = {
|
||||||
|
DISABLE_REGISTRATION = true;
|
||||||
|
# ENABLE_REVERSE_PROXY_AUTHENTICATION = true;
|
||||||
|
# ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = true;
|
||||||
|
};
|
||||||
|
security = {
|
||||||
|
REVERSE_PROXY_AUTHENTICATION_USER = "Remote-User";
|
||||||
|
REVERSE_PROXY_AUTHENTICATION_EMAIL = "Remote-Email";
|
||||||
|
REVERSE_PROXY_AUTHENTICATION_FULL_NAME = "Remote-Name";
|
||||||
|
REVERSE_PROXY_TRUSTED_PROXIES = "192.168.0.0/24";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
lfs.enable = true;
|
||||||
|
database = {
|
||||||
|
type = "postgres";
|
||||||
|
name = "dev";
|
||||||
|
user = "dev";
|
||||||
|
socket = "/run/postgresql";
|
||||||
|
createDatabase = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
networking = {
|
||||||
|
firewall.allowedTCPPorts = [ 3000 ];
|
||||||
|
useHostResolvConf = lib.mkForce false;
|
||||||
|
};
|
||||||
|
services.resolved.enable = true;
|
||||||
|
};
|
||||||
|
bindMounts = {
|
||||||
|
"/run/postgresql/.s.PGSQL.5432" = {
|
||||||
|
hostPath = "/run/postgresql/.s.PGSQL.5432";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.caddy.virtualHosts."dev.thewordnerd.info".extraConfig = ''
|
||||||
|
forward_auth localhost:9091 {
|
||||||
|
uri /api/authz/forward-auth
|
||||||
|
copy_headers Remote-User Remote-Groups Remote-Email Remote-Name
|
||||||
|
}
|
||||||
|
reverse_proxy dev:3000
|
||||||
|
'';
|
||||||
|
}
|
72
hosts/hub/apps/nextcloud.nix
Normal file
72
hosts/hub/apps/nextcloud.nix
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
services.postgresql = {
|
||||||
|
ensureDatabases = [ "nextcloud" ];
|
||||||
|
ensureUsers = [
|
||||||
|
{
|
||||||
|
name = "nextcloud";
|
||||||
|
ensureDBOwnership = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
containers.nextcloud = {
|
||||||
|
autoStart = true;
|
||||||
|
privateNetwork = true;
|
||||||
|
hostAddress = "192.168.0.1";
|
||||||
|
localAddress = "192.168.0.3";
|
||||||
|
config =
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
environment.etc."nextcloud-admin-pass".text = "admin";
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
services = {
|
||||||
|
nextcloud = {
|
||||||
|
enable = true;
|
||||||
|
hostName = "nextcloud.thewordnerd.info";
|
||||||
|
package = pkgs.nextcloud30;
|
||||||
|
configureRedis = true;
|
||||||
|
maxUploadSize = "16G";
|
||||||
|
autoUpdateApps.enable = true;
|
||||||
|
notify_push.enable = true;
|
||||||
|
webfinger = true;
|
||||||
|
settings = {
|
||||||
|
overwriteprotocol = "https";
|
||||||
|
trusted_proxies = [ "192.168.0.1" ];
|
||||||
|
default_phone_region = "US";
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
dbtype = "pgsql";
|
||||||
|
dbhost = "/run/postgresql";
|
||||||
|
adminpassFile = "/etc/nextcloud-admin-pass";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
onlyoffice = {
|
||||||
|
enable = true;
|
||||||
|
hostname = "onlyoffice.thewordnerd.info";
|
||||||
|
};
|
||||||
|
resolved.enable = true;
|
||||||
|
};
|
||||||
|
networking = {
|
||||||
|
firewall.allowedTCPPorts = [ 80 ];
|
||||||
|
useHostResolvConf = lib.mkForce false;
|
||||||
|
};
|
||||||
|
virtualisation.podman = {
|
||||||
|
enable = true;
|
||||||
|
dockerCompat = true;
|
||||||
|
dockerSocket.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
bindMounts = {
|
||||||
|
"/run/postgresql/.s.PGSQL.5432" = {
|
||||||
|
hostPath = "/run/postgresql/.s.PGSQL.5432";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.caddy.virtualHosts."nextcloud.thewordnerd.info".extraConfig = ''reverse_proxy nextcloud'';
|
||||||
|
}
|
137
hosts/hub/default.nix
Normal file
137
hosts/hub/default.nix
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
# Edit this configuration file to define what should be installed on
|
||||||
|
# your system. Help is available in the configuration.nix(5) man page, on
|
||||||
|
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||||
|
|
||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
../../roles/zfs.nix
|
||||||
|
../../base.nix
|
||||||
|
../../users/root.nix
|
||||||
|
../../roles/tailscale.nix
|
||||||
|
../../roles/lldap.nix
|
||||||
|
../../roles/authelia.nix
|
||||||
|
../../roles/podman.nix
|
||||||
|
../../roles/minio.nix
|
||||||
|
../../roles/caddy.nix
|
||||||
|
../../roles/vscode-remote.nix
|
||||||
|
../../roles/postgres.nix
|
||||||
|
./apps/dev.nix
|
||||||
|
./apps/nextcloud.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.loader.grub = {
|
||||||
|
enable = true;
|
||||||
|
zfsSupport = true;
|
||||||
|
efiSupport = true;
|
||||||
|
efiInstallAsRemovable = true;
|
||||||
|
mirroredBoots = [
|
||||||
|
{
|
||||||
|
devices = [ "nodev" ];
|
||||||
|
path = "/boot";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
hostName = "thewordnerd";
|
||||||
|
hostId = "91312b0a";
|
||||||
|
nat = {
|
||||||
|
enable = true;
|
||||||
|
internalInterfaces = [ "ve-+" ];
|
||||||
|
externalInterface = "enp5s0";
|
||||||
|
enableIPv6 = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.openssh.openFirewall = false;
|
||||||
|
|
||||||
|
time.timeZone = "America/Chicago";
|
||||||
|
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
console.keyMap = "us";
|
||||||
|
|
||||||
|
# Enable the Flakes feature and the accompanying new nix command-line tool
|
||||||
|
nix.settings.experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
|
||||||
|
age.secrets.cloudflareApi.file = ../../secrets/cloudflare_api.age;
|
||||||
|
security.acme = {
|
||||||
|
acceptTerms = true;
|
||||||
|
defaults.email = "nolan@thewordnerd.info";
|
||||||
|
certs."thewordnerd.info" = {
|
||||||
|
domain = "*.thewordnerd.info";
|
||||||
|
dnsProvider = "cloudflare";
|
||||||
|
environmentFile = config.age.secrets.cloudflareApi.path;
|
||||||
|
};
|
||||||
|
certs."hub.thewordnerd.info" = {
|
||||||
|
dnsProvider = "cloudflare";
|
||||||
|
environmentFile = config.age.secrets.cloudflareApi.path;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
age.secrets.ldap.file = ../../secrets/ldap.age;
|
||||||
|
mailserver = {
|
||||||
|
enable = true;
|
||||||
|
fqdn = "thewordnerd.info";
|
||||||
|
domains = [
|
||||||
|
"thewordnerd.info"
|
||||||
|
"lightsout.games"
|
||||||
|
];
|
||||||
|
ldap = {
|
||||||
|
enable = true;
|
||||||
|
uris = [ "ldap://localhost:3890" ];
|
||||||
|
bind = {
|
||||||
|
dn = "uid=service,ou=people,dc=thewordnerd,dc=info";
|
||||||
|
passwordFile = config.age.secrets.ldap.path;
|
||||||
|
};
|
||||||
|
searchBase = "ou=people,dc=thewordnerd,dc=info";
|
||||||
|
};
|
||||||
|
certificateScheme = "acme";
|
||||||
|
enableManageSieve = true;
|
||||||
|
fullTextSearch = {
|
||||||
|
enable = true;
|
||||||
|
# index new email as they arrive
|
||||||
|
autoIndex = true;
|
||||||
|
# this only applies to plain text attachments, binary attachments are never indexed
|
||||||
|
indexAttachments = true;
|
||||||
|
enforced = "body";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.caddy.virtualHosts."users.thewordnerd.info".extraConfig =
|
||||||
|
''reverse_proxy localhost:17170'';
|
||||||
|
|
||||||
|
services.caddy.virtualHosts."auth.thewordnerd.info".extraConfig = ''
|
||||||
|
reverse_proxy localhost:9091
|
||||||
|
'';
|
||||||
|
|
||||||
|
services.caddy.virtualHosts."www.thewordnerd.info".extraConfig = ''
|
||||||
|
file_server
|
||||||
|
root * /var/www/thewordnerd.info
|
||||||
|
header /.well-known/matrix/* content-type application/json
|
||||||
|
'';
|
||||||
|
|
||||||
|
# This option defines the first version of NixOS you have installed on this particular machine,
|
||||||
|
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
|
||||||
|
#
|
||||||
|
# Most users should NEVER change this value after the initial install, for any reason,
|
||||||
|
# even if you've upgraded your system to a new NixOS release.
|
||||||
|
#
|
||||||
|
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
|
||||||
|
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
|
||||||
|
# to actually do that.
|
||||||
|
#
|
||||||
|
# This value being lower than the current NixOS release does NOT mean your system is
|
||||||
|
# out of date, out of support, or vulnerable.
|
||||||
|
#
|
||||||
|
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
|
||||||
|
# and migrated your data accordingly.
|
||||||
|
#
|
||||||
|
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
|
||||||
|
system.stateVersion = "24.11"; # Did you read the comment?
|
||||||
|
}
|
53
hosts/hub/hardware-configuration.nix
Normal file
53
hosts/hub/hardware-configuration.nix
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" =
|
||||||
|
{ device = "zpool/root";
|
||||||
|
fsType = "zfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/nix" =
|
||||||
|
{ device = "zpool/nix";
|
||||||
|
fsType = "zfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/var" =
|
||||||
|
{ device = "zpool/var";
|
||||||
|
fsType = "zfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/home" =
|
||||||
|
{ device = "zpool/home";
|
||||||
|
fsType = "zfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" =
|
||||||
|
{ device = "/dev/disk/by-uuid/8ADD-D5B1";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [ "fmask=0022" "dmask=0022" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [ ];
|
||||||
|
|
||||||
|
# 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
|
||||||
|
# still possible to use this option, but it's recommended to use it in conjunction
|
||||||
|
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||||
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.enp5s0.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
64
hosts/nixbox/default.nix
Normal file
64
hosts/nixbox/default.nix
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# Edit this configuration file to define what should be installed on
|
||||||
|
# your system. Help is available in the configuration.nix(5) man page, on
|
||||||
|
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
../../base.nix
|
||||||
|
../../users/root.nix
|
||||||
|
../../users/nolan/desktop-minimal.nix
|
||||||
|
../../roles/espeakup.nix
|
||||||
|
../../roles/networkmanager.nix
|
||||||
|
../../roles/tailscale.nix
|
||||||
|
../../roles/minio.nix
|
||||||
|
../../roles/vscode-remote.nix
|
||||||
|
../../roles/mate.nix
|
||||||
|
../../roles/media-pc.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
services.minio = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Use the systemd-boot EFI boot loader.
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
networking.hostName = "nixbox";
|
||||||
|
|
||||||
|
time.timeZone = "America/Chicago";
|
||||||
|
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
console.keyMap = "us";
|
||||||
|
|
||||||
|
# Enable the Flakes feature and the accompanying new nix command-line tool
|
||||||
|
nix.settings.experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
|
||||||
|
services.mediaPC = {
|
||||||
|
enable = true;
|
||||||
|
autoLoginUser = "nolan";
|
||||||
|
};
|
||||||
|
|
||||||
|
# This option defines the first version of NixOS you have installed on this particular machine,
|
||||||
|
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
|
||||||
|
#
|
||||||
|
# Most users should NEVER change this value after the initial install, for any reason,
|
||||||
|
# even if you've upgraded your system to a new NixOS release.
|
||||||
|
#
|
||||||
|
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
|
||||||
|
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
|
||||||
|
# to actually do that.
|
||||||
|
#
|
||||||
|
# This value being lower than the current NixOS release does NOT mean your system is
|
||||||
|
# out of date, out of support, or vulnerable.
|
||||||
|
#
|
||||||
|
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
|
||||||
|
# and migrated your data accordingly.
|
||||||
|
#
|
||||||
|
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
|
||||||
|
system.stateVersion = "24.05"; # Did you read the comment?
|
||||||
|
}
|
39
hosts/nixbox/hardware-configuration.nix
Normal file
39
hosts/nixbox/hardware-configuration.nix
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" "sdhci_pci" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" =
|
||||||
|
{ device = "/dev/disk/by-uuid/a0df6959-f878-48d0-aabe-5f46915c1921";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" =
|
||||||
|
{ device = "/dev/disk/by-uuid/7EEE-698D";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [ "fmask=0077" "dmask=0077" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [ ];
|
||||||
|
|
||||||
|
# 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
|
||||||
|
# still possible to use this option, but it's recommended to use it in conjunction
|
||||||
|
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||||
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.enp89s0.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
37
iso.nix
Normal file
37
iso.nix
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
<nixpkgs/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix>
|
||||||
|
|
||||||
|
# Provide an initial copy of the NixOS channel so that the user
|
||||||
|
# doesn't need to run "nix-channel --update" first.
|
||||||
|
<nixpkgs/nixos/modules/installer/cd-dvd/channel.nix>
|
||||||
|
./espeakup.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# Added to support `-nographic` for text console access via qemu
|
||||||
|
boot.kernelParams = [ "console=ttyS0,115200" ];
|
||||||
|
|
||||||
|
# System-wide Pipewire for Espeakup
|
||||||
|
sound.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
systemWide = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.espeakup.enable = true;
|
||||||
|
|
||||||
|
# Set up SSH access
|
||||||
|
systemd.services.sshd.wantedBy = pkgs.lib.mkForce [ "multi-user.target" ];
|
||||||
|
users.users.root.openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPk6C4eOYzTZ8XOuUA2tErGnSTLS/l9kRDl9+5Ql+m7VtaH/KRFbu6x+C0QAIKOrRcQOjpGYUjL1aIn0HCcoEW2PSihDmOHC+W8cy8ucScy4fPI5KpFFqTZU336Fje+NS4n587gcoaa5LjKcr2KZy/ljgzl4eNSRIqy85khfH4puxsj7LwTIqsZoqDhtD/jSqaKP1C2wuYSsijLF85UnRcT9jErnL757yUv/4xb4Is+gB0zan9GiBXRca4lzb0mY8rmMXmKhc2lm/mu8ogZRdYX5R2JP1AukzYGSdOFs4iUauihgvakuou9AugD2CC+ygYIEbWkUjwKfT9nRN93Qi9 id_rsa"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Not sure if this does anything, but may make the system easier to find on
|
||||||
|
# the network
|
||||||
|
services.avahi.enable = true;
|
||||||
|
}
|
3
make-iso.sh
Executable file
3
make-iso.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
nix-build '<nixpkgs/nixos>' -A config.system.build.isoImage -I nixos-config=iso.nix
|
110
roles/authelia.nix
Normal file
110
roles/authelia.nix
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
age.secrets = {
|
||||||
|
ldap = {
|
||||||
|
mode = "440";
|
||||||
|
group = "authelia-main";
|
||||||
|
};
|
||||||
|
jwt = {
|
||||||
|
file = ../secrets/jwt.age;
|
||||||
|
owner = "authelia-main";
|
||||||
|
group = "authelia-main";
|
||||||
|
mode = "440";
|
||||||
|
};
|
||||||
|
autheliaSession = {
|
||||||
|
file = ../secrets/authelia_session.age;
|
||||||
|
owner = "authelia-main";
|
||||||
|
group = "authelia-main";
|
||||||
|
mode = "440";
|
||||||
|
};
|
||||||
|
autheliaStorageEncryptionKey = {
|
||||||
|
file = ../secrets/authelia_storage.age;
|
||||||
|
owner = "authelia-main";
|
||||||
|
group = "authelia-main";
|
||||||
|
mode = "440";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services = {
|
||||||
|
postgresql = {
|
||||||
|
ensureDatabases = [ "authelia" ];
|
||||||
|
ensureUsers = [
|
||||||
|
{
|
||||||
|
name = "authelia";
|
||||||
|
ensureDBOwnership = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
authelia.instances.main = {
|
||||||
|
enable = true;
|
||||||
|
secrets = {
|
||||||
|
jwtSecretFile = config.age.secrets.jwt.path;
|
||||||
|
sessionSecretFile = config.age.secrets.autheliaSession.path;
|
||||||
|
storageEncryptionKeyFile = config.age.secrets.autheliaStorageEncryptionKey.path;
|
||||||
|
};
|
||||||
|
environmentVariables = {
|
||||||
|
AUTHELIA_AUTHENTICATION_BACKEND_LDAP_PASSWORD_FILE = config.age.secrets.ldap.path;
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
authentication_backend = {
|
||||||
|
password_reset.disable = false;
|
||||||
|
refresh_interval = "1m";
|
||||||
|
|
||||||
|
ldap = {
|
||||||
|
implementation = "custom";
|
||||||
|
address = "ldap://localhost:3890";
|
||||||
|
timeout = "5s";
|
||||||
|
start_tls = false;
|
||||||
|
base_dn = "dc=thewordnerd,dc=info";
|
||||||
|
additional_users_dn = "ou=people";
|
||||||
|
users_filter = "(&({username_attribute}={input})(objectClass=person))";
|
||||||
|
additional_groups_dn = "ou=groups";
|
||||||
|
groups_filter = "(member={dn})";
|
||||||
|
user = "uid=service,ou=people,dc=thewordnerd,dc=info";
|
||||||
|
attributes = {
|
||||||
|
username = "uid";
|
||||||
|
display_name = "displayName";
|
||||||
|
group_name = "cn";
|
||||||
|
mail = "mail";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
storage = {
|
||||||
|
postgres = {
|
||||||
|
address = "/run/postgresql";
|
||||||
|
database = "authelia";
|
||||||
|
username = "authelia";
|
||||||
|
password = "trusted";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
access_control = {
|
||||||
|
rules = [
|
||||||
|
{
|
||||||
|
domain = "*.thewordnerd.info";
|
||||||
|
policy = "one_factor";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
session = {
|
||||||
|
cookies = [
|
||||||
|
{
|
||||||
|
domain = "thewordnerd.info";
|
||||||
|
authelia_url = "https://auth.thewordnerd.info";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
notifier = {
|
||||||
|
filesystem = {
|
||||||
|
filename = "/tmp/authelia.txt";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
server.endpoints.authz.forward-auth.implementation = "ForwardAuth";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
caddy.globalConfig = ''
|
||||||
|
servers {
|
||||||
|
trusted_proxies static 192.168.0.1
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
10
roles/caddy.nix
Normal file
10
roles/caddy.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
services.caddy = {
|
||||||
|
enable = true;
|
||||||
|
email = "nolan@thewordnerd.info";
|
||||||
|
};
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
80
|
||||||
|
443
|
||||||
|
];
|
||||||
|
}
|
5
roles/espeakup.nix
Normal file
5
roles/espeakup.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
imports = [ ../espeakup.nix ];
|
||||||
|
|
||||||
|
services.espeakup.enable = true;
|
||||||
|
}
|
7
roles/flatpak.nix
Normal file
7
roles/flatpak.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
services.flatpak.enable = true;
|
||||||
|
xdg.portal.enable = true;
|
||||||
|
environment.profileRelativeSessionVariables.PATH = [
|
||||||
|
"$HOME/.local/share/flatpak/exports/bin"
|
||||||
|
];
|
||||||
|
}
|
18
roles/games.nix
Normal file
18
roles/games.nix
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./nix-ld.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.steam = {
|
||||||
|
enable = true;
|
||||||
|
remotePlay.openFirewall = true;
|
||||||
|
localNetworkGameTransfers.openFirewall = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
steam-tui
|
||||||
|
steamcmd
|
||||||
|
];
|
||||||
|
}
|
19
roles/gnome.nix
Normal file
19
roles/gnome.nix
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./gui.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
services = {
|
||||||
|
xserver.desktopManager.gnome.enable = true;
|
||||||
|
gnome.gnome-browser-connector.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.gnome-terminal.enable = true;
|
||||||
|
environment.gnome.excludePackages = with pkgs; [
|
||||||
|
gnome-console
|
||||||
|
gnome-tour
|
||||||
|
];
|
||||||
|
}
|
35
roles/gui.nix
Normal file
35
roles/gui.nix
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./pipewire.nix
|
||||||
|
./non-virtual.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
services = {
|
||||||
|
orca = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.unstable.orca;
|
||||||
|
};
|
||||||
|
xserver = {
|
||||||
|
enable = true;
|
||||||
|
xkb.layout = "us";
|
||||||
|
displayManager.lightdm = {
|
||||||
|
enable = true;
|
||||||
|
greeters.gtk = {
|
||||||
|
extraConfig = ''
|
||||||
|
a11y-states = +reader
|
||||||
|
reader = orca
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
excludePackages = [ pkgs.xterm ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
users.users.lightdm.extraGroups = [
|
||||||
|
"pipewire"
|
||||||
|
"pulse-access"
|
||||||
|
];
|
||||||
|
}
|
26
roles/k3s.nix
Normal file
26
roles/k3s.nix
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
networking.firewall = {
|
||||||
|
allowedTCPPorts = [
|
||||||
|
6443 # k3s: required so that pods can reach the API server (running on port 6443 by default)
|
||||||
|
# 2379 # k3s, etcd clients: required if using a "High Availability Embedded etcd" configuration
|
||||||
|
# 2380 # k3s, etcd peers: required if using a "High Availability Embedded etcd" configuration
|
||||||
|
];
|
||||||
|
# allowedUDPPorts = [
|
||||||
|
# 8472 # k3s, flannel: required if using multi-node for inter-node networking
|
||||||
|
# ];
|
||||||
|
};
|
||||||
|
services.k3s = {
|
||||||
|
enable = true;
|
||||||
|
role = "server";
|
||||||
|
};
|
||||||
|
environment.systemPackages = [ pkgs.nfs-utils ];
|
||||||
|
services.openiscsi = {
|
||||||
|
enable = true;
|
||||||
|
name = "${config.networking.hostName}-initiatorhost";
|
||||||
|
};
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"L+ /usr/local/bin - - - - /run/current-system/sw/bin/"
|
||||||
|
];
|
||||||
|
}
|
25
roles/lldap.nix
Normal file
25
roles/lldap.nix
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
services = {
|
||||||
|
postgresql = {
|
||||||
|
ensureDatabases = [ "lldap" ];
|
||||||
|
ensureUsers = [
|
||||||
|
{
|
||||||
|
name = "lldap";
|
||||||
|
ensureDBOwnership = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
lldap = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
ldap_user_email = "nolan@thewordnerd.info";
|
||||||
|
ldap_base_dn = "dc=thewordnerd,dc=info";
|
||||||
|
http_url = "https://users.thewordnerd.info";
|
||||||
|
database_url = "postgres://lldap@localhost/lldap";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
networking.firewall.interfaces."ve-+".allowedTCPPorts = [
|
||||||
|
3890
|
||||||
|
];
|
||||||
|
}
|
19
roles/mate.nix
Normal file
19
roles/mate.nix
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./gui.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
hardware.bluetooth.enable = true;
|
||||||
|
services = {
|
||||||
|
xserver.desktopManager.mate.enable = true;
|
||||||
|
blueman.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.nm-applet = {
|
||||||
|
enable = true;
|
||||||
|
indicator = false;
|
||||||
|
};
|
||||||
|
}
|
18
roles/media-pc.nix
Normal file
18
roles/media-pc.nix
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
options.services.mediaPC = {
|
||||||
|
enable = lib.mkEnableOption "Media PC";
|
||||||
|
autoLoginUser = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "User to autologin as";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.services.mediaPC.enable {
|
||||||
|
programs.firefox = {
|
||||||
|
enable = true;
|
||||||
|
# package = pkgs.firefox.override { nativeMessagingHosts = [ pkgs.gnome-browser-connector ]; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
6
roles/minio.nix
Normal file
6
roles/minio.nix
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.minio.enable = true;
|
||||||
|
environment.systemPackages = with pkgs; [ minio-client ];
|
||||||
|
}
|
3
roles/networkmanager.nix
Normal file
3
roles/networkmanager.nix
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
}
|
17
roles/nginx.nix
Normal file
17
roles/nginx.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
recommendedProxySettings = true;
|
||||||
|
recommendedTlsSettings = true;
|
||||||
|
recommendedGzipSettings = true;
|
||||||
|
recommendedOptimisation = true;
|
||||||
|
};
|
||||||
|
security.acme = {
|
||||||
|
acceptTerms = true;
|
||||||
|
defaults.email = "nolan@thewordnerd.info";
|
||||||
|
};
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
80
|
||||||
|
443
|
||||||
|
];
|
||||||
|
}
|
8
roles/nix-ld.nix
Normal file
8
roles/nix-ld.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.nix-ld = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.nix-ld-rs;
|
||||||
|
};
|
||||||
|
}
|
7
roles/non-virtual.nix
Normal file
7
roles/non-virtual.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
usbutils
|
||||||
|
pciutils
|
||||||
|
];
|
||||||
|
}
|
14
roles/pipewire.nix
Normal file
14
roles/pipewire.nix
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
hardware.pulseaudio.enable = false;
|
||||||
|
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
systemWide = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
jack.enable = true;
|
||||||
|
};
|
||||||
|
}
|
7
roles/podman.nix
Normal file
7
roles/podman.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
virtualisation.podman = {
|
||||||
|
enable = true;
|
||||||
|
dockerCompat = true;
|
||||||
|
dockerSocket.enable = true;
|
||||||
|
};
|
||||||
|
}
|
14
roles/portunus.nix
Normal file
14
roles/portunus.nix
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
services = {
|
||||||
|
portunus = {
|
||||||
|
enable = true;
|
||||||
|
domain = "users.thewordnerd.info";
|
||||||
|
ldap = {
|
||||||
|
suffix = "dc=thewordnerd,dc=info";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
networking.firewall.interfaces."ve-+".allowedTCPPorts = [
|
||||||
|
389
|
||||||
|
];
|
||||||
|
}
|
20
roles/postgres.nix
Normal file
20
roles/postgres.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.postgresql = {
|
||||||
|
enable = true;
|
||||||
|
identMap = ''
|
||||||
|
# ArbitraryMapName systemUser DBUser
|
||||||
|
superuser_map root postgres
|
||||||
|
superuser_map postgres postgres
|
||||||
|
# Let other names login as themselves
|
||||||
|
superuser_map /^(.*)$ \1
|
||||||
|
'';
|
||||||
|
authentication = pkgs.lib.mkOverride 10 ''
|
||||||
|
local all postgres peer map=superuser_map
|
||||||
|
local sameuser all trust
|
||||||
|
host all all 127.0.0.1/32 trust
|
||||||
|
host all all ::1/128 trust
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
5
roles/tailscale.nix
Normal file
5
roles/tailscale.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.tailscale.enable = true;
|
||||||
|
}
|
39
roles/traefik.nix
Normal file
39
roles/traefik.nix
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.traefik = {
|
||||||
|
enable = true;
|
||||||
|
staticConfigOptions = {
|
||||||
|
providers = {
|
||||||
|
docker = { };
|
||||||
|
};
|
||||||
|
entryPoints = {
|
||||||
|
web = {
|
||||||
|
address = ":80";
|
||||||
|
asDefault = true;
|
||||||
|
http.redirections.entrypoint = {
|
||||||
|
to = "websecure";
|
||||||
|
scheme = "https";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
websecure = {
|
||||||
|
address = ":443";
|
||||||
|
asDefault = true;
|
||||||
|
http.tls.certResolver = "letsencrypt";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
certificatesResolvers.letsencrypt.acme = {
|
||||||
|
email = "nolan@thewordnerd.info";
|
||||||
|
storage = "${config.services.traefik.dataDir}/acme.json";
|
||||||
|
httpChallenge.entryPoint = "web";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
80
|
||||||
|
443
|
||||||
|
];
|
||||||
|
users.users.traefik.extraGroups = [ "podman" ];
|
||||||
|
}
|
12
roles/vscode-remote.nix
Normal file
12
roles/vscode-remote.nix
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./nix-ld.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
nil
|
||||||
|
nixfmt-rfc-style
|
||||||
|
];
|
||||||
|
}
|
27
roles/zfs.nix
Normal file
27
roles/zfs.nix
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
services.zfs.autoScrub.enable = true;
|
||||||
|
|
||||||
|
services.sanoid = {
|
||||||
|
enable = true;
|
||||||
|
templates.backup = {
|
||||||
|
hourly = 36;
|
||||||
|
daily = 30;
|
||||||
|
monthly = 12;
|
||||||
|
yearly = 1;
|
||||||
|
autoprune = true;
|
||||||
|
autosnap = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
datasets."zpool/root" = {
|
||||||
|
useTemplate = [ "backup" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
datasets."zpool/home" = {
|
||||||
|
useTemplate = [ "backup" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
datasets."zpool/var" = {
|
||||||
|
useTemplate = [ "backup" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
5
secrets/authelia_session.age
Normal file
5
secrets/authelia_session.age
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 5X7MKw K1n77De40xbtpteiDbcEGDI2pxp7yXE5gCRfMIqfpR0
|
||||||
|
j0aimYoTMmi6fvF9q8czuWcxf1GDHy1C7w9F3JFjQ+8
|
||||||
|
--- 0+nNt0VIn4aaFh8l5bDDgDcYzFk3d7VRPdnUWemrofA
|
||||||
|
?…¦—PÈ¡"ÓxkÕFEÚTÕH›ÔüX<C3BC>T>w¡¦.d’f[EÊ*Óq Úšˆ•3¬ü[<5B>o³÷p§KXž‡™€A0Õ
|
5
secrets/authelia_storage.age
Normal file
5
secrets/authelia_storage.age
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 5X7MKw UUTkDtqwfmdl0Ac7qFKrMYbTpD6V9l+WpvqR0PrWEE4
|
||||||
|
6uQTrBqGVG7qvRpJ4tQFBL4p3fLqs/4jAdAG21bzFJw
|
||||||
|
--- JD9/tI+EThIt3exh4MFyhYhmuBdLpQFe7Y1KqJD4euo
|
||||||
|
—ci¢–)øÜhTÉ2mU<ãžÈÞ#л<C390>–°³|-q<>³PpÆ’W‚F<E2809A>©".¢ Û€É^QKGbÝU~†àbó‚
|
BIN
secrets/cloudflare_api.age
Normal file
BIN
secrets/cloudflare_api.age
Normal file
Binary file not shown.
6
secrets/jwt.age
Normal file
6
secrets/jwt.age
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 5X7MKw QqTrVxbTZn4qYGBYiBy1YtLGbgOWQ+Jz6s/uY7vfrDY
|
||||||
|
y70KrtxpcydHq44puJ+vlyHerrw2sOzGegEaEZmHo2E
|
||||||
|
--- K9qJiVT5wv9b4H3p19wDsboH9plQi+0r2yHATfYDaes
|
||||||
|
¾Ý' ;ÅØÌ ‡ÎÇ`
|
||||||
|
¼ƒ <07>•-uûëñàDÞ¦˜g™<14>G]GÉ«˜mXíßè¹9š!„Ì^ÑuÉÔõµÁ”€a^ß#$y
|
5
secrets/ldap.age
Normal file
5
secrets/ldap.age
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 5X7MKw 28VQn9+R9TgBPlelo6l0EiA2bSE7nZ9/PwnkIZmJE28
|
||||||
|
6Q5VK2vfBj6/mOo50sADbT1518foTU9bKvUIoN1B4iY
|
||||||
|
--- tDmsyfEmqI3MTv+68SqOudje1QppvOL8foHTLgJIh5M
|
||||||
|
Gn÷Àç‘b”^§CÞØ—!EZ®<5A>ýžhgÙàW–€·<0C>ƒ<{j%œ€_夿äi/ÓVŒ}™õ<08>ål,%1ê*êÓ
|
5
secrets/nolan.age
Normal file
5
secrets/nolan.age
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 WXu6hQ xPIs0RMmg8qzbe5u0fkmd52vwUWtPFbp8OT+PWKfBmk
|
||||||
|
AlgW3FNZMZZKQP2WBxBtkz/fkn7D36jH6RQqQqPTFLQ
|
||||||
|
--- Fbjl6JMOoyxErJQ2vxx/JiZyjMK7aoWFqIH3WMZxbrk
|
||||||
|
>2ïïæ”ø÷[\R!ùìVlC/v5iFbšN´É‡oí}tÏ\|ñ‘0F;·2{í¥ÏõqúÁp2£Ð‹•í¯*‘žéŠB.JAÙCŸ‰Äöñ7?Þ[à‡¨Ûy%óäÂxÚ
|
16
secrets/secrets.nix
Normal file
16
secrets/secrets.nix
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
let
|
||||||
|
nolan = "ssh-rsa
|
||||||
|
AAAAB3NzaC1yc2EAAAADAQABAAABAQDPk6C4eOYzTZ8XOuUA2tErGnSTLS/l9kRDl9+5Ql+m7VtaH/KRFbu6x+C0QAIKOrRcQOjpGYUjL1aIn0HCcoEW2PSihDmOHC+W8cy8ucScy4fPI5KpFFqTZU336Fje+NS4n587gcoaa5LjKcr2KZy/ljgzl4eNSRIqy85khfH4puxsj7LwTIqsZoqDhtD/jSqaKP1C2wuYSsijLF85UnRcT9jErnL757yUv/4xb4Is+gB0zan9GiBXRca4lzb0mY8rmMXmKhc2lm/mu8ogZRdYX5R2JP1AukzYGSdOFs4iUauihgvakuou9AugD2CC+ygYIEbWkUjwKfT9nRN93Qi9
|
||||||
|
id_rsa";
|
||||||
|
nixbox = "ssh-ed25519
|
||||||
|
AAAAC3NzaC1lZDI1NTE5AAAAIPChjQ4PCvOkknZitrMS89GVjyxIbb/TPfczOWZ+rY6C";
|
||||||
|
hub = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHygBPmz5T8IH/D60CiA5mOlKFTtYnk8JaK6cB+RJ4rk";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"nolan.age".publicKeys = [ nixbox ];
|
||||||
|
"ldap.age".publicKeys = [ hub ];
|
||||||
|
"jwt.age".publicKeys = [ hub ];
|
||||||
|
"authelia_session.age".publicKeys = [ hub ];
|
||||||
|
"authelia_storage.age".publicKeys = [ hub ];
|
||||||
|
"cloudflare_api.age".publicKeys = [ hub ];
|
||||||
|
}
|
37
users/nolan/default.nix
Normal file
37
users/nolan/default.nix
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
users.users.nolan = {
|
||||||
|
description = "Nolan Darilek";
|
||||||
|
isNormalUser = true;
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPk6C4eOYzTZ8XOuUA2tErGnSTLS/l9kRDl9+5Ql+m7VtaH/KRFbu6x+C0QAIKOrRcQOjpGYUjL1aIn0HCcoEW2PSihDmOHC+W8cy8ucScy4fPI5KpFFqTZU336Fje+NS4n587gcoaa5LjKcr2KZy/ljgzl4eNSRIqy85khfH4puxsj7LwTIqsZoqDhtD/jSqaKP1C2wuYSsijLF85UnRcT9jErnL757yUv/4xb4Is+gB0zan9GiBXRca4lzb0mY8rmMXmKhc2lm/mu8ogZRdYX5R2JP1AukzYGSdOFs4iUauihgvakuou9AugD2CC+ygYIEbWkUjwKfT9nRN93Qi9 id_rsa"
|
||||||
|
];
|
||||||
|
extraGroups = [
|
||||||
|
"wheel"
|
||||||
|
"networkmanager"
|
||||||
|
"pipewire"
|
||||||
|
"pulse-access"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.nolan = {
|
||||||
|
home.stateVersion = "24.05";
|
||||||
|
programs = {
|
||||||
|
bash.enable = true;
|
||||||
|
direnv = {
|
||||||
|
enable = true;
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
};
|
||||||
|
git = {
|
||||||
|
enable = true;
|
||||||
|
lfs.enable = true;
|
||||||
|
userName = "Nolan Darilek";
|
||||||
|
userEmail = "nolan@thewordnerd.info";
|
||||||
|
extraConfig = {
|
||||||
|
pull = {
|
||||||
|
rebase = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
21
users/nolan/desktop-minimal.nix
Normal file
21
users/nolan/desktop-minimal.nix
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{ pkgs, config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [ ./default.nix ];
|
||||||
|
|
||||||
|
age.secrets.nolan.file = ../../secrets/nolan.age;
|
||||||
|
|
||||||
|
users.users.nolan = {
|
||||||
|
hashedPasswordFile = config.age.secrets.nolan.path;
|
||||||
|
packages = with pkgs; [ wget ];
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.nolan = {
|
||||||
|
programs = {
|
||||||
|
firefox = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.firefox.override { nativeMessagingHosts = [ pkgs.gnome-browser-connector ]; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
56
users/nolan/desktop.nix
Normal file
56
users/nolan/desktop.nix
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [ ./desktop-minimal.nix ];
|
||||||
|
|
||||||
|
users.users.nolan = {
|
||||||
|
packages = with pkgs; [
|
||||||
|
keepassxc
|
||||||
|
podman-desktop
|
||||||
|
devpod
|
||||||
|
unstable.fractal
|
||||||
|
element-desktop
|
||||||
|
discord
|
||||||
|
spotify
|
||||||
|
thunderbird
|
||||||
|
slack
|
||||||
|
zoom
|
||||||
|
nil
|
||||||
|
nixfmt-rfc-style
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.firefox.nativeMessagingHosts.gsconnect = true;
|
||||||
|
|
||||||
|
programs.kdeconnect = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.gnomeExtensions.gsconnect;
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.nolan = {
|
||||||
|
services = {
|
||||||
|
kdeconnect = {
|
||||||
|
enable = true;
|
||||||
|
indicator = true;
|
||||||
|
};
|
||||||
|
nextcloud-client.enable = true;
|
||||||
|
};
|
||||||
|
programs = {
|
||||||
|
git = {
|
||||||
|
extraConfig = {
|
||||||
|
credential.helper = "${pkgs.git.override { withLibsecret = true; }}/bin/git-credential-libsecret";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
obs-studio = {
|
||||||
|
enable = true;
|
||||||
|
plugins = with pkgs.obs-studio-plugins; [
|
||||||
|
obs-pipewire-audio-capture
|
||||||
|
];
|
||||||
|
};
|
||||||
|
vscode = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.unstable.vscode.fhs;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
7
users/root.nix
Normal file
7
users/root.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
users.users.root.openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPk6C4eOYzTZ8XOuUA2tErGnSTLS/l9kRDl9+5Ql+m7VtaH/KRFbu6x+C0QAIKOrRcQOjpGYUjL1aIn0HCcoEW2PSihDmOHC+W8cy8ucScy4fPI5KpFFqTZU336Fje+NS4n587gcoaa5LjKcr2KZy/ljgzl4eNSRIqy85khfH4puxsj7LwTIqsZoqDhtD/jSqaKP1C2wuYSsijLF85UnRcT9jErnL757yUv/4xb4Is+gB0zan9GiBXRca4lzb0mY8rmMXmKhc2lm/mu8ogZRdYX5R2JP1AukzYGSdOFs4iUauihgvakuou9AugD2CC+ygYIEbWkUjwKfT9nRN93Qi9 id_rsa"
|
||||||
|
];
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user