diff --git a/.sops.yaml b/.sops.yaml index 024fa58..1075f8a 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -7,6 +7,7 @@ keys: - &admin age1m0pk94ysjlw3lmf6pyuv5l5pepvdjss8w0vxjv90dq6ndp02tdgsdwdvue # Generated on the machine it names. - &neogaia age14a04vphzjq74epfrz9a09wjw8lzchtru84awzuq2n45d8f42ychqjs89qe + - &pikachu age1wf5s0n0tgt6ld2ysgu9dc67mj8ylwecgl4utzg7hqwy3kut9zyms7aglmh creation_rules: # Material belonging to one machine. @@ -24,3 +25,4 @@ creation_rules: - age: - *admin - *neogaia + - *pikachu diff --git a/flake.lock b/flake.lock index a7c9725..6b945ca 100644 --- a/flake.lock +++ b/flake.lock @@ -562,11 +562,11 @@ ] }, "locked": { - "lastModified": 1785622772, - "narHash": "sha256-0mOr+Jxerr4SU1ksLoSkztYlZ9P/nMB6RlgWygoCHWc=", + "lastModified": 1785695024, + "narHash": "sha256-DLLk6X5zu3cRT50p18uHVdwjGVtiS0t/661M34q02zU=", "ref": "refs/heads/main", - "rev": "40b16b87963b085817bfb82c26eef7d0408fa8a5", - "revCount": 52, + "rev": "9b2a6bcd583d7d6bf7e5377c3632f601692df209", + "revCount": 54, "type": "git", "url": "https://git.alexion.dev/alexion/skills" }, diff --git a/hosts/pikachu/default.nix b/hosts/pikachu/default.nix new file mode 100644 index 0000000..b09375f --- /dev/null +++ b/hosts/pikachu/default.nix @@ -0,0 +1,58 @@ +{ + config, + pkgs, + ... +}: +# pikachu — AZW ME Pro server. +# Disk layout is in ./disk.nix. +# `fileSystems` for the root disk are derived from it. +{ + imports = [ + ./hardware-configuration.nix + ./disk.nix + ]; + + system.stateVersion = "26.05"; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + hardware.cpu.intel.updateMicrocode = true; + hardware.enableRedistributableFirmware = true; + + zramSwap.enable = true; + + systemd.network = { + enable = true; + networks."10-uplink" = { + matchConfig.MACAddress = "78:55:36:07:af:49"; + networkConfig.DHCP = "yes"; + linkConfig.RequiredForOnline = "routable"; + }; + }; + networking.useDHCP = false; + + boot.zfs.forceImportRoot = false; + + modules.zfs = { + enable = true; + hostId = "2346edbd"; + pools.pikachu = { }; + }; + + modules.ssh.enable = true; + modules.ssh.hostKeys.restore = false; + modules.ssh.authorizedKeys = config.modules.ssh.workstationKeys; + + modules.git.enable = true; + modules.toolkit.enable = true; + + environment.systemPackages = with pkgs; [ + pciutils + smartmontools + usbutils + ]; + + time.timeZone = "America/New_York"; + i18n.defaultLocale = "en_GB.UTF-8"; +} diff --git a/hosts/pikachu/disk.nix b/hosts/pikachu/disk.nix new file mode 100644 index 0000000..8d6b5f6 --- /dev/null +++ b/hosts/pikachu/disk.nix @@ -0,0 +1,32 @@ +{ ... }: +# pikachu's install layout for disko: one NVMe boot disk with an EFI system partition and ext4 root. +# The existing 8 TB ZFS mirror is imported by name and is never declared here. +{ + disko.devices.disk.main = { + type = "disk"; + device = "/dev/nvme0n1"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "2G"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + root = { + size = "100%"; + content = { + type = "filesystem"; + format = "ext4"; + mountpoint = "/"; + }; + }; + }; + }; + }; +} diff --git a/hosts/pikachu/hardware-configuration.nix b/hosts/pikachu/hardware-configuration.nix new file mode 100644 index 0000000..dae3249 --- /dev/null +++ b/hosts/pikachu/hardware-configuration.nix @@ -0,0 +1,18 @@ +{ lib, modulesPath, ... }: +# Hardware detected from the Proxmox inventory for this machine. +# disko derives the root disk filesystems, none declared here. +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + + boot.initrd.availableKernelModules = [ + "ahci" + "nvme" + "sd_mod" + "xhci_pci" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; +} diff --git a/secrets/shared.yaml b/secrets/shared.yaml index 1665f91..b5e96e6 100644 --- a/secrets/shared.yaml +++ b/secrets/shared.yaml @@ -3,22 +3,31 @@ sops: age: - enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVYzZuaERsRjMyaTAwL3Ri - b2RhaGZ1aHNOSzVMamVxWkdKb3VKTk9QMmk4CmV0R3hYN3hkMU1tVDJLNkFlT08y - SUdUeUZ4d2JwNmdyOWVJcmZNcEtCb1EKLS0tIHhDV1NZWWdDZUNMYjVqYUVlc0ty - Y1owUFZPMXBHbDhjVWxTUjZGRk1IUzQK7VENq6TjuOFlon+CJqUxbIJZ9qka78C/ - LDsgaTD+7zCBPgASwPbF88pH6tdK7bvNLJnznlZdZBL12eOy25BmOQ== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvdGQ0ZnZ2UlVaTFVuRmJI + aVZNVjZVNGdiVGVhUTVXN3luU0V1eUZFb0ZRCkVrY3lKRE9GTUEzV0ZjUnk4UHdl + QnFMVDhMcGVUTWFQemxrSnNEMStpSEEKLS0tIFFIQndkZHp1NkRmRlB4RXlwdk5C + cTJVQW9iMWhaMlk1dUxBK1ZvQTRuV0kKm7/z24q4NcDFlVuxZViDFlJodjRzRqhY + 7X9LqouIXcGhDgwq0hh+JXRfYCz9LDiUJtOLHR7Lu/oscCBCnk7N6Q== -----END AGE ENCRYPTED FILE----- recipient: age1m0pk94ysjlw3lmf6pyuv5l5pepvdjss8w0vxjv90dq6ndp02tdgsdwdvue - enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHY0ZXT3lRWS9DMFA1MHhl - MDZiWHhEMy9INGtpd1ZOdzh0OFRoUlZDa0hZCkJwTUV4c01YWlE1QjNDd3pRN3F0 - SGJWWmFTT1NMQktNejVHY1RrRlZJNFEKLS0tIHlRZG9ZV3FrQktSN2tURVV1NmlW - UTBZbFlqMmFGZ0VPSlA1dmNMU2Q3TFUKtL2V8t9+Qw5vjXursvCVRatflX8JKXJr - VuA8oe0nKpk7wh4fCzcT7RoRKpJY0gPFjIzeTZGVfoAmZIUWMhzRuw== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTOENXYmRRNmVQeUtvOVFy + eElWVUhnUnJDTk93aVJCVmpTcHd2aVpKSFhJCk9oUk5ObHNSZHNwSisrSE9JbjRI + WVllODlYek1VMDZpMmh3M2JRTU92ZEkKLS0tIFVVNG9RNnlzS0ZvMUM3bVN2Mldo + N0MvcXEraDcwUHVxbTJqWGdxTGhOVG8KIhIY9QGbt/eWy9bfST4tEkjLQLylaHRm + AwYIwU1Hw6HXR1TX3t0YciI3c8HcWISruY/tBR3xIHIdBlQR5OTaeA== -----END AGE ENCRYPTED FILE----- recipient: age14a04vphzjq74epfrz9a09wjw8lzchtru84awzuq2n45d8f42ychqjs89qe + - enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4ODgyNjQ1RFMwOGpUaG5U + UDNjTENrYzY5UFVTNlRONlBhNmVUUXk2OVd3ClFQUUhFaUM4YmR6dVNlMXRwWUFY + ais3L0FyQ1ozWjFMMHhjWmU1NU5JdVUKLS0tIG1tS1NoZjhBb3JRak9XdEpOT3Vy + Uk5HdUd6NUsrZWx2Y1lrWGdHRXcxZEUK470gSumRCpgYvIWJcmylw0VTgyV3et/B + QkVLBz5x+ShVun27nN3oz8And0qXfwgXojhM3yWnBSUa9CFBsbTOJQ== + -----END AGE ENCRYPTED FILE----- + recipient: age1wf5s0n0tgt6ld2ysgu9dc67mj8ylwecgl4utzg7hqwy3kut9zyms7aglmh lastmodified: "2026-07-20T03:22:00Z" mac: ENC[AES256_GCM,data:ei7PKVAIjJ6fGkxqJFc5wdYapq1gElel3fTJ+yKhvWHU+39aKcllG66T3d9FitRztgyt69phykHdKvxDHRUwYeyl1YBzyf1ZpPU5mXJb+hkLtVB1Am7StcP+m7jFqKSmqtYhIT9OxUrH0MJ8qeoU9216otwkhhpPz2hr1s7KYFk=,iv:Pp03KmlinjJiiTZezr0LzzkcHb1a5XWgDpu38jhl9Rk=,tag:HAqFitge+KTCtDE24t8/ig==,type:str] unencrypted_suffix: _unencrypted