Skip to content

Commit af0b90e

Browse files
Merge pull request #13 from 99linesofcode/add-support-for-kubernetes
Add support for kubernetes (K3s)
2 parents 314bcf8 + b1ee287 commit af0b90e

File tree

13 files changed

+117
-42
lines changed

13 files changed

+117
-42
lines changed

flake.lock

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
{
3838
nixpkgs,
3939
self,
40+
disko,
4041
sops-nix,
4142
...
4243
}@inputs:
@@ -65,13 +66,16 @@
6566
args:
6667
nixpkgs.lib.nixosSystem {
6768
modules = [
69+
disko.nixosModules.disko
6870
sops-nix.nixosModules.sops
6971
(import ./modules)
7072
(import ./users)
71-
] ++ args.modules;
73+
]
74+
++ args.modules;
7275
specialArgs = {
7376
inherit self inputs outputs;
74-
} // (args.specialArgs or { });
77+
}
78+
// (args.specialArgs or { });
7579
};
7680
in
7781
{

hosts/luna/default.nix

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
inputs,
3+
modulesPath,
34
pkgs,
45
self,
56
...
@@ -10,7 +11,7 @@ let
1011
in
1112
{
1213
imports = [
13-
inputs.disko.nixosModules.disko
14+
(modulesPath + "/installer/scan/not-detected.nix")
1415
./disko.nix
1516
./hardware-configuration.nix
1617
../shared
@@ -55,10 +56,14 @@ in
5556
avahi.enable = true;
5657
bluetooth.enable = true;
5758
catt.enable = true;
58-
docker.enable = true;
59+
docker = {
60+
enable = true;
61+
rootless.enable = false;
62+
};
5963
graphics.enable = true;
6064
hyprland.enable = true;
6165
intel.enable = true;
66+
k3s.enable = true;
6267
nvidia.enable = true;
6368
power-management.enable = true;
6469
sound.enable = true;

hosts/luna/hardware-configuration.nix

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@
1010
}:
1111

1212
{
13-
imports = [
14-
(modulesPath + "/installer/scan/not-detected.nix")
15-
];
16-
1713
boot.initrd.availableKernelModules = [
1814
"xhci_pci"
1915
"nvme"

hosts/shared/default.nix

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
{ ... }:
1+
{ lib, ... }:
22

3+
with lib;
34
{
45
imports = [
56
./home-manager.nix
@@ -10,8 +11,10 @@
1011

1112
services = {
1213
automatic-timezoned.enable = true;
13-
geoclue2.geoProviderUrl = "https://beacondb.net/v1/geolocate";
14-
# keyd - low level key remapping daemon
14+
geoclue2 = {
15+
enableDemoAgent = mkForce true; # FIXME: see https://github.com/NixOS/nixpkgs/issues/68489#issuecomment-1484030107
16+
geoProviderUrl = "https://beacondb.net/v1/geolocate";
17+
};
1518
keyd = {
1619
enable = true;
1720
keyboards.default.settings = {

hosts/shared/nix.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
settings = {
1212
accept-flake-config = true;
1313
auto-optimise-store = true;
14+
download-buffer-size = 524288000; # 500MB
1415
experimental-features = [
1516
"nix-command"
1617
"flakes"

modules/docker.nix

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,39 @@ let
1515
in
1616
with lib;
1717
{
18-
options = {
19-
host.docker.enable = mkEnableOption "docker";
18+
options.host.docker = with types; {
19+
enable = mkEnableOption "docker";
20+
rootless.enable = mkEnableOption "rootless mode";
2021
};
2122

2223
config = mkIf cfg.enable {
23-
environment = {
24-
# TODO: docker should fallback to gnome-keyring by default
25-
# systemPackages = with pkgs; [
26-
# docker-credential-helpers
27-
# ];
28-
};
29-
30-
hardware.nvidia-container-toolkit.enable = true;
24+
hardware.nvidia-container-toolkit.enable = mkIf config.host.nvidia.enable true;
3125

3226
virtualisation.docker = {
3327
enable = true;
3428
autoPrune.enable = true;
35-
rootless = {
29+
daemon.settings = mkIf (!config.host.docker.rootless.enable) {
30+
dns = dnsServers;
31+
log-driver = "json-file"; # fix kubernetes logging
32+
};
33+
rootless = mkIf config.host.docker.rootless.enable {
3634
enable = true;
3735
setSocketVariable = true;
38-
daemon.settings.dns = dnsServers;
36+
daemon.settings = {
37+
dns = dnsServers;
38+
log-driver = "json-file"; # fix kubernetes logging
39+
};
3940
};
4041
storageDriver = mkIf config.host.btrfs.enable "btrfs";
4142
};
4243

43-
security.wrappers = {
44+
networking = {
45+
firewall.allowedTCPPorts = [
46+
9003 # required so PHP XDebug can reach host machine
47+
];
48+
};
49+
50+
security.wrappers = mkIf config.host.docker.rootless.enable {
4451
docker-rootlesskit = {
4552
owner = "root";
4653
group = "root";

modules/intel.nix

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ with lib;
2525
graphics = {
2626
extraPackages = with pkgs; [
2727
intel-compute-runtime # OpenCL for gen8 and beyond
28-
intel-media-sdk # Quick Sync Video for older processors
2928
intel-media-driver # Accelerated Video Playback for Broadwell or newer processors. LIBVA_DRIVER_NAME=iHD
3029
# intel-vaapi-driver # Accelerated Video Playback for older processors. LIBVA_DRIVER_NAME=i965
3130
];

modules/k3s.nix

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
config,
3+
lib,
4+
pkgs,
5+
...
6+
}:
7+
8+
let
9+
cfg = config.host.k3s;
10+
in
11+
with lib;
12+
{
13+
options = {
14+
host.k3s.enable = mkEnableOption "k3s - lightweight Kubernetes distribution";
15+
};
16+
17+
config = mkIf cfg.enable {
18+
environment.systemPackages = with pkgs; [
19+
kubernetes-helm
20+
];
21+
22+
environment.etc."kube/config" = {
23+
source = "/var/lib/rancher/k3s/server/cred/admin.kubeconfig";
24+
target = "/home/shorty/.kube/config";
25+
mode = "0600";
26+
user = "shorty";
27+
group = "users";
28+
};
29+
30+
services.k3s = {
31+
enable = true;
32+
extraFlags = [
33+
"--disable=traefik"
34+
"--disable=servicelb"
35+
"--docker"
36+
"--write-kubeconfig-mode=0644"
37+
];
38+
role = "server";
39+
# autoDeployCharts = {
40+
# traefik = {
41+
# name = "traefik";
42+
# repo = "https://traefik.github.io/charts";
43+
# version = "36.1.0";
44+
# hash = "sha256-APQuQjKEpNwIaNi0RujZS1RcVLuPKC2PEXNLeM8/1F0=";
45+
# values = {
46+
# providers = {
47+
# kubernetesIngress.enabled = false;
48+
# kubernetesGateway.enabled = true;
49+
# };
50+
# gateway.namespacePolicy = "All";
51+
# };
52+
# };
53+
# };
54+
};
55+
56+
networking = {
57+
firewall.allowedTCPPorts = [
58+
6443 # required so pods can reach API server
59+
];
60+
};
61+
};
62+
}

modules/nvidia.nix

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ with lib;
3131
};
3232

3333
nvidia = {
34-
modesetting.enable = true;
34+
modesetting.enable = true; # default since 535
3535
nvidiaSettings = true;
3636
open = false;
3737
package = config.boot.kernelPackages.nvidiaPackages.beta;

0 commit comments

Comments
 (0)