summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/darwin/README.md12
-rw-r--r--modules/darwin/base/default.nix11
-rw-r--r--modules/darwin/base/programs.nix13
-rw-r--r--modules/darwin/default.nix4
-rw-r--r--modules/darwin/defaults/default.nix7
-rw-r--r--modules/darwin/defaults/programs.nix7
-rw-r--r--modules/darwin/profiles/default.nix (renamed from modules/darwin/archetypes/default.nix)0
-rw-r--r--modules/darwin/profiles/personal.nix (renamed from modules/darwin/archetypes/personal.nix)7
-rw-r--r--modules/nixos/README.md20
-rw-r--r--modules/nixos/archetypes/server.nix37
-rw-r--r--modules/nixos/base/networking.nix31
-rw-r--r--modules/nixos/base/nix.nix15
-rw-r--r--modules/nixos/base/programs.nix12
-rw-r--r--modules/nixos/base/security.nix42
-rw-r--r--modules/nixos/base/users.nix58
-rw-r--r--modules/nixos/default.nix7
-rw-r--r--modules/nixos/defaults/default.nix8
-rw-r--r--modules/nixos/defaults/nix.nix10
-rw-r--r--modules/nixos/defaults/programs.nix6
-rw-r--r--modules/nixos/defaults/security.nix13
-rw-r--r--modules/nixos/defaults/users.nix18
-rw-r--r--modules/nixos/desktop/programs.nix24
-rw-r--r--modules/nixos/mixins/acme.nix (renamed from modules/nixos/server/mixins/acme.nix)4
-rw-r--r--modules/nixos/mixins/cloudflared.nix (renamed from modules/nixos/server/mixins/cloudflared.nix)4
-rw-r--r--modules/nixos/mixins/default.nix (renamed from modules/nixos/server/mixins/default.nix)0
-rw-r--r--modules/nixos/mixins/hercules.nix (renamed from modules/nixos/server/mixins/hercules.nix)4
-rw-r--r--modules/nixos/mixins/nginx.nix (renamed from modules/nixos/server/mixins/nginx.nix)4
-rw-r--r--modules/nixos/mixins/promtail.nix (renamed from modules/nixos/server/mixins/promtail.nix)4
-rw-r--r--modules/nixos/profiles/default.nix (renamed from modules/nixos/archetypes/default.nix)0
-rw-r--r--modules/nixos/profiles/personal.nix (renamed from modules/nixos/archetypes/personal.nix)8
-rw-r--r--modules/nixos/profiles/server.nix66
-rw-r--r--modules/nixos/server/default.nix45
-rw-r--r--modules/nixos/server/host-user.nix44
-rw-r--r--modules/nixos/services/default.nix3
-rw-r--r--modules/nixos/services/github-mirror/default.nix (renamed from modules/nixos/server/github-mirror/default.nix)0
-rwxr-xr-xmodules/nixos/services/github-mirror/update-mirror.sh (renamed from modules/nixos/server/github-mirror/update-mirror.sh)0
-rw-r--r--modules/nixos/traits/default.nix2
-rw-r--r--modules/nixos/traits/nvd-diff.nix (renamed from modules/nixos/base/default.nix)18
-rw-r--r--modules/nixos/traits/resolved.nix41
-rw-r--r--modules/nixos/traits/secrets.nix50
-rw-r--r--modules/shared/README.md4
-rw-r--r--modules/shared/base/default.nix24
-rw-r--r--modules/shared/base/nix.nix66
-rw-r--r--modules/shared/base/programs.nix9
-rw-r--r--modules/shared/default.nix2
-rw-r--r--modules/shared/defaults/default.nix11
-rw-r--r--modules/shared/defaults/nix.nix50
-rw-r--r--systems/atlas/default.nix3
-rw-r--r--systems/caroline/default.nix2
-rw-r--r--systems/glados-wsl/default.nix21
-rw-r--r--systems/glados/default.nix7
-rw-r--r--users/seth/programs/default.nix1
52 files changed, 355 insertions, 504 deletions
diff --git a/modules/darwin/README.md b/modules/darwin/README.md
index 249286c..50f07ac 100644
--- a/modules/darwin/README.md
+++ b/modules/darwin/README.md
@@ -1,17 +1,17 @@
# ./modules/darwin/
-## archetypes
+## defaults
-The high-level "type" of a machine (i.e., `personal` or `server`)
-
-## base
-
-Low level options shared for (almost) any kind of system
+Defaults (mostly) shared across all configurations
## desktop
Installs cool GUI stuff for desktops...or laptops too I guess
+## profiles
+
+The high-level "type" of a machine (i.e., `personal` or `server`)
+
## traits
Small, reusable aspects of a machine - like users
diff --git a/modules/darwin/base/default.nix b/modules/darwin/base/default.nix
deleted file mode 100644
index 7e6f3bd..0000000
--- a/modules/darwin/base/default.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ config, lib, ... }:
-let
- cfg = config.base;
-in
-{
- imports = [
- ./programs.nix
- ];
-
- config = lib.mkIf cfg.enable { services.nix-daemon.enable = true; };
-}
diff --git a/modules/darwin/base/programs.nix b/modules/darwin/base/programs.nix
deleted file mode 100644
index 74c059e..0000000
--- a/modules/darwin/base/programs.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{ config, lib, ... }:
-let
- cfg = config.base.defaultPrograms;
-in
-{
- config = lib.mkIf cfg.enable {
- programs = {
- bash.enable = true;
- vim.enable = true;
- zsh.enable = true;
- };
- };
-}
diff --git a/modules/darwin/default.nix b/modules/darwin/default.nix
index e19f29a..26ea30f 100644
--- a/modules/darwin/default.nix
+++ b/modules/darwin/default.nix
@@ -1,9 +1,9 @@
{
imports = [
../shared
- ./archetypes
- ./base
+ ./defaults
./desktop
+ ./profiles
./traits
];
}
diff --git a/modules/darwin/defaults/default.nix b/modules/darwin/defaults/default.nix
new file mode 100644
index 0000000..8068e2d
--- /dev/null
+++ b/modules/darwin/defaults/default.nix
@@ -0,0 +1,7 @@
+{
+ imports = [
+ ./programs.nix
+ ];
+
+ services.nix-daemon.enable = true;
+}
diff --git a/modules/darwin/defaults/programs.nix b/modules/darwin/defaults/programs.nix
new file mode 100644
index 0000000..3f25ad8
--- /dev/null
+++ b/modules/darwin/defaults/programs.nix
@@ -0,0 +1,7 @@
+{
+ programs = {
+ bash.enable = true;
+ vim.enable = true;
+ zsh.enable = true;
+ };
+}
diff --git a/modules/darwin/archetypes/default.nix b/modules/darwin/profiles/default.nix
index 518cc57..518cc57 100644
--- a/modules/darwin/archetypes/default.nix
+++ b/modules/darwin/profiles/default.nix
diff --git a/modules/darwin/archetypes/personal.nix b/modules/darwin/profiles/personal.nix
index a81efdc..62b0cf8 100644
--- a/modules/darwin/archetypes/personal.nix
+++ b/modules/darwin/profiles/personal.nix
@@ -1,14 +1,13 @@
{ config, lib, ... }:
let
- cfg = config.archetypes.personal;
+ cfg = config.profiles.personal;
in
{
- options.archetypes.personal = {
- enable = lib.mkEnableOption "the \"Personal\" archetype";
+ options.profiles.personal = {
+ enable = lib.mkEnableOption "the Personal profile";
};
config = lib.mkIf cfg.enable {
- base.enable = true;
desktop.enable = true;
traits = {
diff --git a/modules/nixos/README.md b/modules/nixos/README.md
index 5a78133..5204795 100644
--- a/modules/nixos/README.md
+++ b/modules/nixos/README.md
@@ -1,20 +1,24 @@
# ./modules/nixos/
-## archetypes
+## defaults
-The high-level "type" of a machine (i.e., `personal` or `server`)
+Defaults (mostly) shared across all configurations
-## base
+## desktop
-Low level options shared for (almost) any kind of system
+Installs cool GUI stuff for desktops and laptops
-## desktop
+## mixins
-Installs cool GUI stuff for desktops...or laptops too I guess
+Small modules that add onto existing ones; mean to be "mixed in" with your regular configurations
+
+## profiles
+
+The high-level "type" of a machine (i.e., `personal` or `server`)
-## server
+## services
-Installs cool daemons and such for servers
+Custom service modules
## traits
diff --git a/modules/nixos/archetypes/server.nix b/modules/nixos/archetypes/server.nix
deleted file mode 100644
index 780e1b4..0000000
--- a/modules/nixos/archetypes/server.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{ config, lib, ... }:
-let
- cfg = config.archetypes.server;
-in
-{
- options.archetypes = {
- server.enable = lib.mkEnableOption "the Server archetype";
- };
-
- config = lib.mkIf cfg.enable {
- base = {
- enable = true;
- defaultPrograms.enable = false;
- };
-
- server = {
- enable = true;
- mixins = {
- cloudflared.enable = true;
- nginx.enable = true;
- };
- };
-
- traits = {
- autoUpgrade.enable = true;
-
- secrets.enable = true;
-
- tailscale = {
- enable = true;
- ssh.enable = true;
- };
-
- zram.enable = true;
- };
- };
-}
diff --git a/modules/nixos/base/networking.nix b/modules/nixos/base/networking.nix
deleted file mode 100644
index c4514df..0000000
--- a/modules/nixos/base/networking.nix
+++ /dev/null
@@ -1,31 +0,0 @@
-{ config, lib, ... }:
-let
- cfg = config.base.networking;
-in
-{
- options.base.networking = {
- enable = lib.mkEnableOption "base network settings" // {
- default = config.base.enable;
- defaultText = lib.literalExpression "config.base.enable";
- };
- };
-
- config = lib.mkIf cfg.enable {
- networking.networkmanager = {
- enable = lib.mkDefault true;
- dns = "systemd-resolved";
- };
-
- services = {
- resolved = {
- enable = lib.mkDefault true;
- dnssec = "allow-downgrade";
- extraConfig = lib.mkDefault ''
- [Resolve]
- DNS=1.1.1.1 1.0.0.1
- DNSOverTLS=yes
- '';
- };
- };
- };
-}
diff --git a/modules/nixos/base/nix.nix b/modules/nixos/base/nix.nix
deleted file mode 100644
index e49eb17..0000000
--- a/modules/nixos/base/nix.nix
+++ /dev/null
@@ -1,15 +0,0 @@
-{ config, lib, ... }:
-let
- cfg = config.base.nixSettings;
-in
-{
- config = lib.mkIf cfg.enable {
- nix = {
- channel.enable = lib.mkDefault false;
- settings.trusted-users = [
- "root"
- "@wheel"
- ];
- };
- };
-}
diff --git a/modules/nixos/base/programs.nix b/modules/nixos/base/programs.nix
deleted file mode 100644
index 55424dc..0000000
--- a/modules/nixos/base/programs.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{ config, lib, ... }:
-let
- cfg = config.base.defaultPrograms;
-in
-{
- config = lib.mkIf cfg.enable {
- programs = {
- git.enable = true;
- vim.defaultEditor = true;
- };
- };
-}
diff --git a/modules/nixos/base/security.nix b/modules/nixos/base/security.nix
deleted file mode 100644
index 66a1e7e..0000000
--- a/modules/nixos/base/security.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{ config, lib, ... }:
-let
- cfg = config.base.security;
-in
-{
- options.base.security = {
- enable = lib.mkEnableOption "basic security settings" // {
- default = config.base.enable;
- defaultText = lib.literalExpression "config.base.enable";
- };
-
- apparmor = lib.mkEnableOption "AppArmor support" // {
- default = true;
- };
-
- auditing = lib.mkEnableOption "auditing support" // {
- default = true;
- };
- };
-
- # much here is sourced from https://xeiaso.net/blog/paranoid-nixos-2021-07-18/
- config = lib.mkIf cfg.enable (
- lib.mkMerge [
- {
- security = {
- polkit.enable = true;
- sudo.execWheelOnly = true;
- };
- }
- (lib.mkIf cfg.auditing {
- security = {
- audit.enable = true;
- auditd.enable = true;
- };
- })
- (lib.mkIf cfg.apparmor {
- security.apparmor.enable = true;
- services.dbus.apparmor = lib.mkDefault "enabled";
- })
- ]
- );
-}
diff --git a/modules/nixos/base/users.nix b/modules/nixos/base/users.nix
deleted file mode 100644
index b757fc5..0000000
--- a/modules/nixos/base/users.nix
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- config,
- lib,
- pkgs,
- secretsDir,
- ...
-}:
-let
- cfg = config.base.users;
-in
-{
- options.base.users = {
- enable = lib.mkEnableOption "basic user configurations" // {
- default = config.base.enable;
- defaultText = lib.literalExpression "config.base.enable";
- };
-
- defaultRoot = {
- enable = lib.mkEnableOption "default root user configuration" // {
- default = false;
- };
-
- manageSecrets = lib.mkEnableOption "automatic management of secrets" // {
- default = config.traits.secrets.enable;
- defaultText = lib.literalExpression "config.traits.secrets.enable";
- };
- };
- };
-
- config = lib.mkIf cfg.enable (
- lib.mkMerge [
- {
- users = {
- defaultUserShell = pkgs.bash;
- mutableUsers = false;
- };
- }
-
- (lib.mkIf cfg.defaultRoot.enable {
- users.users.root = {
- home = lib.mkDefault "/root";
- uid = lib.mkDefault config.ids.uids.root;
- group = lib.mkDefault "root";
- };
- })
-
- (lib.mkIf (cfg.defaultRoot.enable && cfg.defaultRoot.manageSecrets) {
- age.secrets = {
- rootPassword.file = secretsDir + "/rootPassword.age";
- };
-
- users.users.root = {
- hashedPasswordFile = config.age.secrets.rootPassword.path;
- };
- })
- ]
- );
-}
diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix
index acc9d59..82e4b93 100644
--- a/modules/nixos/default.nix
+++ b/modules/nixos/default.nix
@@ -1,10 +1,11 @@
{
imports = [
../shared
- ./archetypes
- ./base
+ ./defaults
./desktop
- ./server
+ ./mixins
+ ./profiles
+ ./services
./traits
];
}
diff --git a/modules/nixos/defaults/default.nix b/modules/nixos/defaults/default.nix
new file mode 100644
index 0000000..bcd3554
--- /dev/null
+++ b/modules/nixos/defaults/default.nix
@@ -0,0 +1,8 @@
+{
+ imports = [
+ ./nix.nix
+ ./programs.nix
+ ./security.nix
+ ./users.nix
+ ];
+}
diff --git a/modules/nixos/defaults/nix.nix b/modules/nixos/defaults/nix.nix
new file mode 100644
index 0000000..8716f00
--- /dev/null
+++ b/modules/nixos/defaults/nix.nix
@@ -0,0 +1,10 @@
+{ lib, ... }:
+{
+ nix = {
+ channel.enable = lib.mkDefault false;
+ settings.trusted-users = [
+ "root"
+ "@wheel"
+ ];
+ };
+}
diff --git a/modules/nixos/defaults/programs.nix b/modules/nixos/defaults/programs.nix
new file mode 100644
index 0000000..c7d655f
--- /dev/null
+++ b/modules/nixos/defaults/programs.nix
@@ -0,0 +1,6 @@
+{
+ programs = {
+ git.enable = true;
+ vim.defaultEditor = true;
+ };
+}
diff --git a/modules/nixos/defaults/security.nix b/modules/nixos/defaults/security.nix
new file mode 100644
index 0000000..65ce729
--- /dev/null
+++ b/modules/nixos/defaults/security.nix
@@ -0,0 +1,13 @@
+# Much of this is sourced from https://xeiaso.net/blog/paranoid-nixos-2021-07-18/
+{ lib, ... }:
+{
+ security = {
+ apparmor.enable = lib.mkDefault true;
+ audit.enable = lib.mkDefault true;
+ auditd.enable = lib.mkDefault true;
+ polkit.enable = true;
+ sudo.execWheelOnly = true;
+ };
+
+ services.dbus.apparmor = lib.mkDefault "enabled";
+}
diff --git a/modules/nixos/defaults/users.nix b/modules/nixos/defaults/users.nix
new file mode 100644
index 0000000..0cec52a
--- /dev/null
+++ b/modules/nixos/defaults/users.nix
@@ -0,0 +1,18 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+{
+ users = {
+ defaultUserShell = pkgs.bash;
+ mutableUsers = false;
+
+ users.root = {
+ home = lib.mkDefault "/root";
+ uid = config.ids.uids.root;
+ group = "root";
+ };
+ };
+}
diff --git a/modules/nixos/desktop/programs.nix b/modules/nixos/desktop/programs.nix
index 01a9928..2830943 100644
--- a/modules/nixos/desktop/programs.nix
+++ b/modules/nixos/desktop/programs.nix
@@ -4,29 +4,17 @@
pkgs,
...
}:
-let
- cfg = config.desktop.defaultPrograms;
-in
{
- options.desktop.defaultPrograms = {
- enable = lib.mkEnableOption "default desktop programs" // {
- default = config.desktop.enable;
- defaultText = lib.literalExpression "config.desktop.enable";
- };
- };
-
- config = lib.mkIf cfg.enable {
- environment.systemPackages = with pkgs; [
- wl-clipboard
- xclip
+ config = lib.mkIf config.desktop.enable {
+ environment.systemPackages = [
+ pkgs.wl-clipboard
];
programs = {
- chromium.enable = true;
- firefox.enable = true;
- xwayland.enable = true;
+ chromium.enable = lib.mkDefault true;
+ firefox.enable = lib.mkDefault true;
};
- xdg.portal.enable = true;
+ xdg.portal.enable = lib.mkDefault true;
};
}
diff --git a/modules/nixos/server/mixins/acme.nix b/modules/nixos/mixins/acme.nix
index 39166f2..3b49caf 100644
--- a/modules/nixos/server/mixins/acme.nix
+++ b/modules/nixos/mixins/acme.nix
@@ -5,10 +5,10 @@
...
}:
let
- cfg = config.server.mixins.acme;
+ cfg = config.mixins.acme;
in
{
- options.server.mixins.acme = {
+ options.mixins.acme = {
enable = lib.mkEnableOption "ACME mixin";
manageSecrets = lib.mkEnableOption "automatic management of secrets" // {
diff --git a/modules/nixos/server/mixins/cloudflared.nix b/modules/nixos/mixins/cloudflared.nix
index 9a56aaa..372103b 100644
--- a/modules/nixos/server/mixins/cloudflared.nix
+++ b/modules/nixos/mixins/cloudflared.nix
@@ -5,11 +5,11 @@
...
}:
let
- cfg = config.server.mixins.cloudflared;
+ cfg = config.mixins.cloudflared;
inherit (config.services) nginx;
in
{
- options.server.mixins.cloudflared = {
+ options.mixins.cloudflared = {
enable = lib.mkEnableOption "cloudflared mixin";
tunnelName = lib.mkOption {
description = ''
diff --git a/modules/nixos/server/mixins/default.nix b/modules/nixos/mixins/default.nix
index 461cd34..461cd34 100644
--- a/modules/nixos/server/mixins/default.nix
+++ b/modules/nixos/mixins/default.nix
diff --git a/modules/nixos/server/mixins/hercules.nix b/modules/nixos/mixins/hercules.nix
index a04f9b1..de209a3 100644
--- a/modules/nixos/server/mixins/hercules.nix
+++ b/modules/nixos/mixins/hercules.nix
@@ -6,10 +6,10 @@
...
}:
let
- cfg = config.server.mixins.hercules-ci;
+ cfg = config.mixins.hercules-ci;
in
{
- options.server.mixins.hercules-ci = {
+ options.mixins.hercules-ci = {
enable = lib.mkEnableOption "Hercules CI mixin";
manageSecrets = lib.mkEnableOption "automatic management of secrets" // {
default = config.traits.secrets.enable;
diff --git a/modules/nixos/server/mixins/nginx.nix b/modules/nixos/mixins/nginx.nix
index e3cc47a..67d0c25 100644
--- a/modules/nixos/server/mixins/nginx.nix
+++ b/modules/nixos/mixins/nginx.nix
@@ -1,9 +1,9 @@
{ config, lib, ... }:
let
- cfg = config.server.mixins.nginx;
+ cfg = config.mixins.nginx;
in
{
- options.server.mixins.nginx = {
+ options.mixins.nginx = {
enable = lib.mkEnableOption "NGINX mixin";
};
diff --git a/modules/nixos/server/mixins/promtail.nix b/modules/nixos/mixins/promtail.nix
index 173a85b..022c271 100644
--- a/modules/nixos/server/mixins/promtail.nix
+++ b/modules/nixos/mixins/promtail.nix
@@ -1,10 +1,10 @@
{ config, lib, ... }:
let
- cfg = config.server.mixins.promtail;
+ cfg = config.mixins.promtail;
inherit (lib) types;
in
{
- options.server.mixins.promtail = {
+ options.mixins.promtail = {
enable = lib.mkEnableOption "Promtail mixin";
clients = lib.mkOption {
diff --git a/modules/nixos/archetypes/default.nix b/modules/nixos/profiles/default.nix
index 0d11285..0d11285 100644
--- a/modules/nixos/archetypes/default.nix
+++ b/modules/nixos/profiles/default.nix
diff --git a/modules/nixos/archetypes/personal.nix b/modules/nixos/profiles/personal.nix
index 4200269..df52696 100644
--- a/modules/nixos/archetypes/personal.nix
+++ b/modules/nixos/profiles/personal.nix
@@ -1,15 +1,13 @@
{ config, lib, ... }:
let
- cfg = config.archetypes.personal;
+ cfg = config.profiles.personal;
in
{
- options.archetypes = {
- personal.enable = lib.mkEnableOption "the Personal archetype";
+ options.profiles.personal = {
+ enable = lib.mkEnableOption "the Personal profile";
};
config = lib.mkIf cfg.enable {
- base.enable = true;
-
traits = {
home-manager.enable = true;
diff --git a/modules/nixos/profiles/server.nix b/modules/nixos/profiles/server.nix
new file mode 100644
index 0000000..e3e785b
--- /dev/null
+++ b/modules/nixos/profiles/server.nix
@@ -0,0 +1,66 @@
+{
+ config,
+ lib,
+ pkgs,
+ inputs,
+ ...
+}:
+let
+ cfg = config.profiles.server;
+in
+{
+ options.profiles.server = {
+ enable = lib.mkEnableOption "the Server profile";
+
+ hostUser = lib.mkEnableOption "a default interactive user" // {
+ default = true;
+ };
+ };
+
+ config = lib.mkIf cfg.enable (
+ lib.mkMerge [
+ {
+ # All servers are most likely on stable, so we want to pull in some newer packages from time to time
+ _module.args.unstable = inputs.nixpkgs.legacyPackages.${pkgs.stdenv.hostPlatform.system};
+
+ boot.tmp.cleanOnBoot = lib.mkDefault true;
+
+ # We don't need it here
+ documentation.enable = false;
+
+ environment.defaultPackages = lib.mkForce [ ];
+
+ mixins = {
+ cloudflared.enable = true;
+ nginx.enable = true;
+ };
+
+ nix.gc = {
+ # Every ~2 days
+ dates = "Mon,Wed,Fri *-*-* 00:00:00";
+ options = "-d --delete-older-than 2d";
+ };
+
+ traits = {
+ autoUpgrade.enable = true;
+ secrets.enable = true;
+ tailscale = {
+ enable = true;
+ ssh.enable = true;
+ };
+ zram.enable = true;
+ };
+ }
+
+ (lib.mkIf cfg.hostUser {
+ # Hardening access to `nix` as no other users *should* ever really touch it
+ nix.settings.allowed-users = [ config.networking.hostName ];
+
+ users.users.${config.networking.hostName} = {
+ isNormalUser = true;
+ extraGroups = [ "wheel" ];
+ };
+ })
+ ]
+ );
+}
diff --git a/modules/nixos/server/default.nix b/modules/nixos/server/default.nix
deleted file mode 100644
index 3cc60fb..0000000
--- a/modules/nixos/server/default.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- config,
- lib,
- pkgs,
- inputs,
- ...
-}:
-let
- cfg = config.server;
-in
-{
- options.server = {
- enable = lib.mkEnableOption "basic server settings";
- };
-
- imports = [
- ./github-mirror
- ./host-user.nix
- ./mixins
- ];
-
- config = lib.mkIf cfg.enable {
- # all servers are most likely on stable, so we may want to pull some newer packages from time to time
- _module.args.unstable = inputs.nixpkgs.legacyPackages.${pkgs.stdenv.hostPlatform.system};
-
- boot.tmp.cleanOnBoot = lib.mkDefault true;
-
- # we don't need it here
- documentation.enable = false;
-
- environment.defaultPackages = lib.mkForce [ ];
-
- nix = {
- gc = {
- # ~every 2 days
- dates = "Mon,Wed,Fri *-*-* 00:00:00";
- options = "-d --delete-older-than 2d";
- };
-
- # hardening access to `nix` on servers as no other users
- # *should* ever really touch it
- settings.allowed-users = [ config.networking.hostName ];
- };
- };
-}
diff --git a/modules/nixos/server/host-user.nix b/modules/nixos/server/host-user.nix
deleted file mode 100644
index c60bfe3..0000000
--- a/modules/nixos/server/host-user.nix
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- config,
- lib,
- secretsDir,
- ...
-}:
-let
- cfg = config.server.hostUser;
- inherit (config.networking) hostName;
-in
-{
- options.server.hostUser = {
- enable = lib.mkEnableOption "a default interactive user" // {
- default = config.server.enable;
- defaultText = lib.literalExpression "config.server.enable";
- };
-
- manageSecrets = lib.mkEnableOption "automatic management of secrets" // {
- default = config.traits.secrets.enable;
- defaultText = lib.literalExpression "config.traits.secrets.enable";
- };
- };
-
- config = lib.mkIf cfg.enable (
- lib.mkMerge [
- {
- users.users.${hostName} = {
- isNormalUser = true;
- extraGroups = [ "wheel" ];
- };
- }
-
- (lib.mkIf cfg.manageSecrets {
- age.secrets = {
- userPassword.file = secretsDir + "/userPassword.age";
- };
-
- users.users.${hostName} = {
- hashedPasswordFile = config.age.secrets.userPassword.path;
- };
- })
- ]
- );
-}
diff --git a/modules/nixos/services/default.nix b/modules/nixos/services/default.nix
new file mode 100644
index 0000000..038c3a6
--- /dev/null
+++ b/modules/nixos/services/default.nix
@@ -0,0 +1,3 @@
+{
+ imports = [ ./github-mirror ];
+}
diff --git a/modules/nixos/server/github-mirror/default.nix b/modules/nixos/services/github-mirror/default.nix
index 9d0d870..9d0d870 100644
--- a/modules/nixos/server/github-mirror/default.nix
+++ b/modules/nixos/services/github-mirror/default.nix
diff --git a/modules/nixos/server/github-mirror/update-mirror.sh b/modules/nixos/services/github-mirror/update-mirror.sh
index c1e392d..c1e392d 100755
--- a/modules/nixos/server/github-mirror/update-mirror.sh
+++ b/modules/nixos/services/github-mirror/update-mirror.sh
diff --git a/modules/nixos/traits/default.nix b/modules/nixos/traits/default.nix
index 88a0b8c..1bb92b2 100644
--- a/modules/nixos/traits/default.nix
+++ b/modules/nixos/traits/default.nix
@@ -6,7 +6,9 @@
./containers.nix
./home-manager.nix
./locale.nix
+ ./nvd-diff.nix
./nvidia.nix
+ ./resolved.nix
./secrets.nix
./tailscale.nix
./users
diff --git a/modules/nixos/base/default.nix b/modules/nixos/traits/nvd-diff.nix
index 3a6412e..4c59287 100644
--- a/modules/nixos/base/default.nix
+++ b/modules/nixos/traits/nvd-diff.nix
@@ -5,22 +5,16 @@
...
}:
let
- cfg = config.base;
+ cfg = config.traits.nvd-diff;
in
{
- imports = [
- ./networking.nix
- ./nix.nix
- ./programs.nix
- ./security.nix
- ./users.nix
- ];
+ options.traits.nvd-diff = {
+ enable = lib.mkEnableOption "showing configuration diffs with NVD on upgrade" // {
+ default = true;
+ };
+ };
config = lib.mkIf cfg.enable {
- services.journald.extraConfig = ''
- MaxRetentionSec=1w
- '';
-
system.activationScripts."upgrade-diff" = {
supportsDryActivation = true;
text = ''
diff --git a/modules/nixos/traits/resolved.nix b/modules/nixos/traits/resolved.nix
new file mode 100644
index 0000000..d6501c9
--- /dev/null
+++ b/modules/nixos/traits/resolved.nix
@@ -0,0 +1,41 @@
+{
+ config,
+ lib,
+ ...
+}:
+let
+ cfg = config.traits.resolved;
+in
+{
+ options.traits.resolved = {
+ enable = lib.mkEnableOption "systemd-resolved as the DNS resolver" // {
+ default = true;
+ };
+
+ networkManagerIntegration = lib.mkEnableOption "integration with network-manager" // {
+ default = config.networking.networkmanager.enable;
+ defaultText = "config.networking.networkmanager.enable";
+ };
+ };
+
+ config = lib.mkIf cfg.enable (
+ lib.mkMerge [
+ {
+ networking.nameservers = [
+ "1.1.1.1#one.one.one.one"
+ "1.0.0.1#one.one.one.one"
+ ];
+
+ services.resolved = {
+ enable = true;
+ dnssec = "allow-downgrade";
+ dnsovertls = "true";
+ };
+ }
+
+ (lib.mkIf cfg.networkManagerIntegration {
+ networking.networkmanager.dns = "systemd-resolved";
+ })
+ ]
+ );
+}
diff --git a/modules/nixos/traits/secrets.nix b/modules/nixos/traits/secrets.nix
index 6624ef8..d7f4e60 100644
--- a/modules/nixos/traits/secrets.nix
+++ b/modules/nixos/traits/secrets.nix
@@ -2,6 +2,7 @@
config,
lib,
inputs,
+ secretsDir,
...
}:
let
@@ -10,17 +11,50 @@ in
{
options.traits.secrets = {
enable = lib.mkEnableOption "secrets management";
- };
-
- imports = [ inputs.agenix.nixosModules.default ];
- config = lib.mkIf cfg.enable {
- _module.args = {
- secretsDir = inputs.self + "/secrets/${config.networking.hostName}";
+ rootUser = lib.mkEnableOption "manage secrets for root user" // {
+ default = true;
};
- age = {
- identityPaths = [ "/etc/age/key" ];
+ hostUser = lib.mkEnableOption "manager secrets for host user (see `profiles.server.hostUser`)" // {
+ default = config.profiles.server.hostUser;
+ defaultText = "config.profiles.server.hostUser";
};
};
+
+ imports = [ inputs.agenix.nixosModules.default ];
+
+ config = lib.mkIf cfg.enable (
+ lib.mkMerge [
+ {
+ _module.args = {
+ secretsDir = inputs.self + "/secrets/${config.networking.hostName}";
+ };
+
+ age = {
+ identityPaths = [ "/etc/age/key" ];
+ };
+ }
+
+ (lib.mkIf cfg.rootUser {
+ age.secrets = {
+ rootPassword.file = secretsDir + "/rootPassword.age";
+ };
+
+ users.users.root = {
+ hashedPasswordFile = config.age.secrets.rootPassword.path;
+ };
+ })
+
+ (lib.mkIf (config.profiles.server.enable && cfg.hostUser) {
+ age.secrets = {
+ userPassword.file = secretsDir + "/userPassword.age";
+ };
+
+ users.users.${config.networking.hostName} = {
+ hashedPasswordFile = config.age.secrets.userPassword.path;
+ };
+ })
+ ]
+ );
}
diff --git a/modules/shared/README.md b/modules/shared/README.md
index 9228717..32054e3 100644
--- a/modules/shared/README.md
+++ b/modules/shared/README.md
@@ -1,8 +1,8 @@
# ./modules/shared/
-## base
+## defaults
-Low level options shared for (almost) any kind of system
+Defaults (mostly) shared across all configurations
## traits
diff --git a/modules/shared/base/default.nix b/modules/shared/base/default.nix
deleted file mode 100644
index c4b013d..0000000
--- a/modules/shared/base/default.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- config,
- lib,
- inputs,
- ...
-}:
-let
- cfg = config.base;
- inherit (inputs) self;
-in
-{
- options.base = {
- enable = lib.mkEnableOption "basic configurations";
- };
-
- imports = [
- ./nix.nix
- ./programs.nix
- ];
-
- config = lib.mkIf cfg.enable {
- system.configurationRevision = self.rev or self.dirtyRev or "dirty-unknown";
- };
-}
diff --git a/modules/shared/base/nix.nix b/modules/shared/base/nix.nix
deleted file mode 100644
index ebae4dc..0000000
--- a/modules/shared/base/nix.nix
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-let
- inherit (pkgs.stdenv.hostPlatform) isLinux;
- cfg = config.base.nixSettings;
-
- # TODO: remove this nonsense when all implementations remove repl-flake
- hasReplFlake =
- lib.versionOlder config.nix.package.version "2.22.0" # repl-flake was removed in nix 2.22.0
- || lib.versionAtLeast config.nix.package.version "2.90.0"; # but not in lix yet
-
- hasAlwaysAllowSubstitutes = lib.versionAtLeast config.nix.package.version "2.19.0";
-in
-{
- options.base.nixSettings = {
- enable = lib.mkEnableOption "basic Nix settings" // {
- default = config.base.enable;
- defaultText = lib.literalExpression "config.base.enable";
- };
-
- lix.enable = lib.mkEnableOption "the use of Lix over Nix";
- };
-
- config = lib.mkIf cfg.enable (
- lib.mkMerge [
- {
- nix = {
- settings = {
- auto-optimise-store = isLinux;
- experimental-features = [
- "nix-command"
- "flakes"
- "auto-allocate-uids"
- ];
-
- trusted-substituters = [ "https://getchoo.cachix.org" ];
- trusted-public-keys = [ "getchoo.cachix.org-1:ftdbAUJVNaFonM0obRGgR5+nUmdLMM+AOvDOSx0z5tE=" ];
- };
-
- gc = {
- automatic = lib.mkDefault true;
- options = lib.mkDefault "--delete-older-than 2d";
- };
- };
-
- nixpkgs.config.allowUnfree = lib.mkDefault true;
- }
-
- (lib.mkIf cfg.lix.enable {
- nix.package = pkgs.lix;
- })
-
- (lib.mkIf hasReplFlake {
- nix.settings.experimental-features = [ "repl-flake" ];
- })
-
- (lib.mkIf hasAlwaysAllowSubstitutes {
- nix.settings.always-allow-substitutes = true;
- })
- ]
- );
-}
diff --git a/modules/shared/base/programs.nix b/modules/shared/base/programs.nix
deleted file mode 100644
index fc853f8..0000000
--- a/modules/shared/base/programs.nix
+++ /dev/null
@@ -1,9 +0,0 @@
-{ config, lib, ... }:
-{
- options.base.defaultPrograms = {
- enable = lib.mkEnableOption "default programs" // {
- default = config.base.enable;
- defaultText = lib.literalExpression "config.base.enable";
- };
- };
-}
diff --git a/modules/shared/default.nix b/modules/shared/default.nix
index cf3dd84..c0f8e18 100644
--- a/modules/shared/default.nix
+++ b/modules/shared/default.nix
@@ -1,6 +1,6 @@
{
imports = [
- ./base
+ ./defaults
./traits
];
}
diff --git a/modules/shared/defaults/default.nix b/modules/shared/defaults/default.nix
new file mode 100644
index 0000000..f2bb28a
--- /dev/null
+++ b/modules/shared/defaults/default.nix
@@ -0,0 +1,11 @@
+{ inputs, ... }:
+let
+ inherit (inputs) self;
+in
+{
+ imports = [
+ ./nix.nix
+ ];
+
+ system.configurationRevision = self.rev or self.dirtyRev or "dirty-unknown";
+}
diff --git a/modules/shared/defaults/nix.nix b/modules/shared/defaults/nix.nix
new file mode 100644
index 0000000..e5d7607
--- /dev/null
+++ b/modules/shared/defaults/nix.nix
@@ -0,0 +1,50 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ inherit (pkgs.stdenv.hostPlatform) isLinux;
+
+ # TODO: remove this nonsense when all implementations remove repl-flake
+ hasReplFlake =
+ lib.versionOlder config.nix.package.version "2.22.0" # repl-flake was removed in nix 2.22.0
+ || lib.versionAtLeast config.nix.package.version "2.90.0"; # but not in lix yet
+
+ hasAlwaysAllowSubstitutes = lib.versionAtLeast config.nix.package.version "2.19.0";
+in
+{
+ config = lib.mkMerge [
+ {
+ nix = {
+ settings = {
+ auto-optimise-store = lib.mkDefault isLinux;
+ experimental-features = [
+ "nix-command"
+ "flakes"
+ "auto-allocate-uids"
+ ];
+
+ trusted-substituters = [ "https://getchoo.cachix.org" ];
+ trusted-public-keys = [ "getchoo.cachix.org-1:ftdbAUJVNaFonM0obRGgR5+nUmdLMM+AOvDOSx0z5tE=" ];
+ };
+
+ gc = {
+ automatic = lib.mkDefault true;
+ options = lib.mkDefault "--delete-older-than 2d";
+ };
+ };
+
+ nixpkgs.config.allowUnfree = lib.mkDefault true;
+ }
+
+ (lib.mkIf hasReplFlake {
+ nix.settings.experimental-features = [ "repl-flake" ];
+ })
+
+ (lib.mkIf hasAlwaysAllowSubstitutes {
+ nix.settings.always-allow-substitutes = true;
+ })
+ ];
+}
diff --git a/systems/atlas/default.nix b/systems/atlas/default.nix
index 70f7c86..7e7bfe7 100644
--- a/systems/atlas/default.nix
+++ b/systems/atlas/default.nix
@@ -11,8 +11,7 @@
inputs.self.nixosModules.default
];
- archetypes.server.enable = true;
- base.networking.enable = false;
+ profiles.server.enable = true;
boot = {
loader.systemd-boot.enable = true;
diff --git a/systems/caroline/default.nix b/systems/caroline/default.nix
index 263d3dd..9e32db3 100644
--- a/systems/caroline/default.nix
+++ b/systems/caroline/default.nix
@@ -4,7 +4,7 @@
inputs.self.darwinModules.default
];
- archetypes.personal.enable = true;
+ profiles.personal.enable = true;
homebrew.casks = [
"altserver"
diff --git a/systems/glados-wsl/default.nix b/systems/glados-wsl/default.nix
index 5c93ccb..b8b1cf1 100644
--- a/systems/glados-wsl/default.nix
+++ b/systems/glados-wsl/default.nix
@@ -5,17 +5,7 @@
inputs.self.nixosModules.default
];
- archetypes.personal.enable = true;
-
- base = {
- # this conflicts with nixos-wsl
- networking.enable = false;
- security = {
- # something, something `resolv.conf` error
- # (nixos-wsl probably doesn't set it)
- apparmor = false;
- };
- };
+ profiles.personal.enable = true;
environment.systemPackages = with pkgs; [
wget
@@ -26,9 +16,16 @@
nixpkgs.hostPlatform = "x86_64-linux";
+ # Something, something `resolv.conf` error
+ # (nixos-wsl probably doesn't set it)
+ security.apparmor.enable = false;
+
system.stateVersion = "23.11";
- traits.tailscale.enable = true;
+ traits = {
+ resolved.enable = false;
+ tailscale.enable = true;
+ };
wsl = {
enable = true;
diff --git a/systems/glados/default.nix b/systems/glados/default.nix
index 157ab90..3de6a8a 100644
--- a/systems/glados/default.nix
+++ b/systems/glados/default.nix
@@ -7,7 +7,7 @@
inputs.self.nixosModules.default
];
- archetypes.personal.enable = true;
+ profiles.personal.enable = true;
desktop = {
enable = true;
@@ -16,7 +16,10 @@
environment.systemPackages = [ pkgs.obs-studio ];
- networking.hostName = "glados";
+ networking = {
+ hostName = "glados";
+ networkmanager.enable = true;
+ };
security.tpm2 = {
enable = true;
diff --git a/users/seth/programs/default.nix b/users/seth/programs/default.nix
index 5149a86..911c202 100644
--- a/users/seth/programs/default.nix
+++ b/users/seth/programs/default.nix
@@ -1,7 +1,6 @@
{
config,
lib,
- pkgs,
inputs,
...
}: