Root commit
This commit is contained in:
commit
b11aeb6664
23 changed files with 514 additions and 0 deletions
29
README.md
Normal file
29
README.md
Normal file
|
@ -0,0 +1,29 @@
|
|||
# Infrastructure
|
||||
|
||||
Hello this is my new and improved Nix infrastructure.
|
||||
|
||||
## General layout
|
||||
|
||||
There are three main directories:
|
||||
|
||||
- `secret`, which contains secrets
|
||||
- `shared`, which contains shared config modules
|
||||
- `system`, which contains the configurations for specific machines
|
||||
|
||||
I have some machines that don't run NixOS so I have separated the home-manager stuff (`home`)
|
||||
from the NixOS system-level stuff (`core`).
|
||||
|
||||
For example, `thor` and `odin` are both NixOS machines, so for these machines, there is both
|
||||
a `home.nix` for the home config of my user account, and a `core.nix` containing the
|
||||
system-level configuration of the machine.
|
||||
|
||||
### Shared configuration
|
||||
|
||||
NixOS and home-manager modules are used to organize the config.
|
||||
|
||||
A lot of config is shared between machines. This is stored within the `shared/` directory,
|
||||
under either `shared/core/` for system-level NixOS modules or `shared/home/` for home-manager
|
||||
modules.
|
||||
|
||||
There's also a shared key used by the `nix` user of each machine, for which the public key
|
||||
is in `shared/data/`. This key is used to let other machines serve as remote builders.
|
133
flake.lock
Normal file
133
flake.lock
Normal file
|
@ -0,0 +1,133 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"locked": {
|
||||
"lastModified": 1667395993,
|
||||
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1684596126,
|
||||
"narHash": "sha256-4RZZmygeEXpuBqEXGs38ZAcWjWKGwu13Iqbxub6wuJk=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "27ef11f0218d9018ebb2948d40133df2b1de622d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"jwt-tool": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1638313307,
|
||||
"narHash": "sha256-k92mXf7H/n+gkOyStFQ+EWPXE0f7odCqqAexxAUK2jM=",
|
||||
"owner": "MaeIsBad",
|
||||
"repo": "jwt_tool",
|
||||
"rev": "d2c8b3b934f91ec5fefea460deb97be31401550c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "MaeIsBad",
|
||||
"repo": "jwt_tool",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1683286087,
|
||||
"narHash": "sha256-xseOd7W7xwF5GOF2RW8qhjmVGrKoBz+caBlreaNzoeI=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3e313808bd2e0a0669430787fb22e43b2f4bf8bf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1684570954,
|
||||
"narHash": "sha256-FX5y4Sm87RWwfu9PI71XFvuRpZLowh00FQpIJ1WfXqE=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3005f20ce0aaa58169cdee57c8aa12e5f1b6e1b3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pwnix": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"jwt-tool": "jwt-tool",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"pycdc": "pycdc"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1667669150,
|
||||
"narHash": "sha256-woULzWmHqrpfSDCo10QhZOGa6rB+E9ZqL4cjwX6u8TA=",
|
||||
"ref": "refs/heads/mistress",
|
||||
"rev": "6ee2339943853341cdc07bc6505df5125a1c45c3",
|
||||
"revCount": 5,
|
||||
"type": "git",
|
||||
"url": "https://im.badat.dev/bad/pwnix.git"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://im.badat.dev/bad/pwnix.git"
|
||||
}
|
||||
},
|
||||
"pycdc": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1664922278,
|
||||
"narHash": "sha256-whpsEjk/nnnAUH68kzZBCs7azA13B0FTUy5NuF7kQrA=",
|
||||
"owner": "zrax",
|
||||
"repo": "pycdc",
|
||||
"rev": "44a730f3a889503014fec94ae6e62d8401cb75e5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "zrax",
|
||||
"repo": "pycdc",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"pwnix": "pwnix"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
64
flake.nix
Normal file
64
flake.nix
Normal file
|
@ -0,0 +1,64 @@
|
|||
{
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable;
|
||||
home-manager.url = github:nix-community/home-manager;
|
||||
pwnix = {
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
url = git+https://im.badat.dev/bad/pwnix.git;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = args@{ home-manager, nixpkgs, ... }: with nixpkgs; {
|
||||
|
||||
# Configurations for NixOS machines.
|
||||
nixosConfigurations =
|
||||
let mkUserConfig = path: {
|
||||
imports = [ home-manager.nixosModules.home-manager ];
|
||||
config = {
|
||||
home-manager.users."riley" = a: lib.pipe a [
|
||||
(import path)
|
||||
(x: x // {
|
||||
imports = [ ./shared/home ];
|
||||
})
|
||||
];
|
||||
};
|
||||
}; in {
|
||||
|
||||
# Desktop system
|
||||
"thor" = lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
(mkUserConfig ./system/thor/home.nix)
|
||||
./system/thor/core.nix
|
||||
./shared/core
|
||||
];
|
||||
specialArgs = args;
|
||||
};
|
||||
|
||||
# Pinebook
|
||||
"odin" = lib.nixosSystem {
|
||||
system = "aarch64-linux";
|
||||
modules = [
|
||||
(mkUserConfig ./system/odin/home.nix)
|
||||
./system/odin/core.nix
|
||||
./shared/core
|
||||
];
|
||||
specialArgs = args;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
# Configurations for non-NixOS machines.
|
||||
homeConfigurations = {
|
||||
|
||||
"dev-lt-63" = home-manager.lib.homeManagerConfiguration {
|
||||
pkgs = nixpkgs.legacyPackages."x86_64-linux";
|
||||
modules = [ ./system/dev-lt-63/home.nix ];
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
28
shared/core/default.nix
Normal file
28
shared/core/default.nix
Normal file
|
@ -0,0 +1,28 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
imports = [
|
||||
./gui/pipewire.nix
|
||||
./gui/sway.nix
|
||||
./nix.nix
|
||||
];
|
||||
|
||||
config = {
|
||||
users.users."riley" = {
|
||||
|
||||
shell = pkgs.fish;
|
||||
|
||||
isNormalUser = true;
|
||||
extraGroups = ["wheel"];
|
||||
packages = [ pkgs.helix ];
|
||||
|
||||
};
|
||||
|
||||
environment.systemPackages = (import ../env.nix pkgs);
|
||||
|
||||
programs.fish.enable = true;
|
||||
services.earlyoom.enable = true;
|
||||
};
|
||||
|
||||
}
|
24
shared/core/gui/pipewire.nix
Normal file
24
shared/core/gui/pipewire.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{ pkgs, lib, config, ... }:
|
||||
|
||||
let cfg = config.custom.gui.pipewire;
|
||||
|
||||
in with lib; {
|
||||
|
||||
options.custom.gui.pipewire = {
|
||||
enable = mkEnableOption "pipewire";
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable) {
|
||||
|
||||
environment.defaultPackages = with pkgs; [
|
||||
pavucontrol
|
||||
];
|
||||
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
10
shared/core/gui/sway.nix
Normal file
10
shared/core/gui/sway.nix
Normal file
|
@ -0,0 +1,10 @@
|
|||
{ ... }: {
|
||||
hardware.opengl.enable = true;
|
||||
services.xserver.enable = true;
|
||||
services.xserver.displayManager.gdm = {
|
||||
enable = true;
|
||||
};
|
||||
programs.sway.enable = true;
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
hardware.nvidia.modesetting.enable = true;
|
||||
}
|
18
shared/core/nix.nix
Normal file
18
shared/core/nix.nix
Normal file
|
@ -0,0 +1,18 @@
|
|||
{ pkgs, lib, config, nixpkgs, pwnix, ... }:
|
||||
|
||||
let cfg = config.custom.nix;
|
||||
|
||||
in with lib; {
|
||||
|
||||
options.custom.nix = {};
|
||||
|
||||
config = {
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
nix.extraOptions = ''
|
||||
experimental-features = nix-command flakes
|
||||
'';
|
||||
nix.registry.nixpkgs.flake = nixpkgs;
|
||||
nix.registry.pwnix.flake = pwnix;
|
||||
};
|
||||
|
||||
}
|
0
shared/data/nix.key.pub
Normal file
0
shared/data/nix.key.pub
Normal file
BIN
shared/data/wallpaper.jpg
Normal file
BIN
shared/data/wallpaper.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 598 KiB |
20
shared/env.nix
Normal file
20
shared/env.nix
Normal file
|
@ -0,0 +1,20 @@
|
|||
# On NixOS-managed machines these packages are installed system-wide
|
||||
|
||||
pkgs: with pkgs; [
|
||||
bat
|
||||
bottom
|
||||
coreutils
|
||||
curl
|
||||
exa
|
||||
fd
|
||||
file
|
||||
git
|
||||
iputils
|
||||
jq
|
||||
kakoune
|
||||
moreutils
|
||||
ripgrep
|
||||
sd
|
||||
skim
|
||||
wget
|
||||
]
|
12
shared/home/default.nix
Normal file
12
shared/home/default.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
|
||||
imports = [
|
||||
./fish.nix
|
||||
./git.nix
|
||||
./nix.nix
|
||||
./gui
|
||||
];
|
||||
|
||||
}
|
32
shared/home/fish.nix
Normal file
32
shared/home/fish.nix
Normal file
|
@ -0,0 +1,32 @@
|
|||
# Shell configuration, including common tools used within the shell and
|
||||
# shell functions/aliases.
|
||||
|
||||
{ pkgs, lib, config, ... }:
|
||||
|
||||
let cfg = config.custom.fish;
|
||||
|
||||
in with lib; {
|
||||
|
||||
options.custom.fish = with types; {
|
||||
extraAliases = mkOption {
|
||||
default = {};
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
|
||||
# Configure the shell itself
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
shellAliases = {} // cfg.extraAliases;
|
||||
};
|
||||
|
||||
# Configure useful additions to the shell
|
||||
programs.direnv.enable = true;
|
||||
programs.skim.enable = true;
|
||||
programs.starship.enable = true;
|
||||
programs.zoxide.enable = true;
|
||||
|
||||
};
|
||||
|
||||
}
|
30
shared/home/git.nix
Normal file
30
shared/home/git.nix
Normal file
|
@ -0,0 +1,30 @@
|
|||
{ pkgs, lib, config, ... }:
|
||||
|
||||
let cfg = config.custom.git;
|
||||
|
||||
in with lib; {
|
||||
|
||||
options.custom.git = {
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
default = "Riley Apeldoorn";
|
||||
};
|
||||
mail = mkOption {
|
||||
type = types.str;
|
||||
default = "me@riley.lgbt";
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
programs.git = {
|
||||
enable = true;
|
||||
userName = cfg.name;
|
||||
userEmail = cfg.mail;
|
||||
extraConfig = {
|
||||
pull.rebase = false;
|
||||
init.defaultBranch = "mistress";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
}
|
10
shared/home/gui/default.nix
Normal file
10
shared/home/gui/default.nix
Normal file
|
@ -0,0 +1,10 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
|
||||
imports = [
|
||||
./sway.nix
|
||||
./term.nix
|
||||
];
|
||||
|
||||
}
|
26
shared/home/gui/sway.nix
Normal file
26
shared/home/gui/sway.nix
Normal file
|
@ -0,0 +1,26 @@
|
|||
{ pkgs, lib, config, ... }:
|
||||
|
||||
let cfg = config.custom.gui.sway;
|
||||
|
||||
in with lib; {
|
||||
|
||||
options.custom.gui.sway = {
|
||||
enable = mkEnableOption "sway window manager";
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable) {
|
||||
|
||||
home.packages = [];
|
||||
|
||||
wayland.windowManager.sway = {
|
||||
# This is all required to get it to not die.
|
||||
enable = true;
|
||||
extraSessionCommands = "export WLR_NO_HARDWARE_CURSORS=1";
|
||||
extraOptions = [ "--unsupported-gpu" ];
|
||||
|
||||
config.output."*".bg = "${../../data/wallpaper.jpg} fill";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
5
shared/home/gui/term.nix
Normal file
5
shared/home/gui/term.nix
Normal file
|
@ -0,0 +1,5 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
programs.kitty.enable = true;
|
||||
}
|
13
shared/home/nix.nix
Normal file
13
shared/home/nix.nix
Normal file
|
@ -0,0 +1,13 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
|
||||
nix.settings = {
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
};
|
||||
|
||||
nixpkgs.config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
|
||||
}
|
4
switch.sh
Executable file
4
switch.sh
Executable file
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||
nixos-rebuild switch --flake path://$SCRIPT_DIR# --use-remote-sudo
|
0
system/dev-lt-63/home.nix
Normal file
0
system/dev-lt-63/home.nix
Normal file
0
system/odin/core.nix
Normal file
0
system/odin/core.nix
Normal file
0
system/odin/home.nix
Normal file
0
system/odin/home.nix
Normal file
51
system/thor/core.nix
Normal file
51
system/thor/core.nix
Normal file
|
@ -0,0 +1,51 @@
|
|||
{ ... }: {
|
||||
|
||||
custom = {
|
||||
gui.pipewire.enable = true;
|
||||
};
|
||||
|
||||
system.stateVersion = "21.11";
|
||||
home-manager.users.riley.home.stateVersion = "21.11";
|
||||
|
||||
networking = {
|
||||
hostName = "thor";
|
||||
interfaces."enp9s0".useDHCP = true;
|
||||
};
|
||||
|
||||
boot = {
|
||||
initrd.availableKernelModules = [
|
||||
"nvme"
|
||||
"xhci_pci"
|
||||
"ahci"
|
||||
"usbhid"
|
||||
"usb_storage"
|
||||
"sd_mod"
|
||||
];
|
||||
kernelModules = [ "kvm-amd" ];
|
||||
binfmt.emulatedSystems = [ "aarch64-linux" ];
|
||||
loader.systemd-boot = {
|
||||
enable = true;
|
||||
editor = false;
|
||||
configurationLimit = 10;
|
||||
};
|
||||
loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
initrd.luks.devices.nixos.device = "/dev/disk/by-uuid/6bd51990-1584-422c-94bb-32ea952e5cd2";
|
||||
};
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/f3cdd2ab-62ba-4d72-8a28-b3adc0ec3997";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/A6C8-03F3";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
#TODO
|
||||
|
||||
swapDevices = [
|
||||
{device = "/dev/nixos/swap";}
|
||||
];
|
||||
}
|
5
system/thor/home.nix
Normal file
5
system/thor/home.nix
Normal file
|
@ -0,0 +1,5 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
custom.gui.sway.enable = true;
|
||||
}
|
Loading…
Reference in a new issue