58 Commits

Author SHA1 Message Date
67648eda89 Merge branch 'master' into overlay-update 2026-04-14 19:11:01 -05:00
76ac41a965 update community packages 2026-04-14 16:04:17 -04:00
5c70cdc20f Merge pull request 'Neovim editor updates' (#9) from wm/term-editor-updates into master
Reviewed-on: #9
2026-04-10 20:37:34 -05:00
c21066e810 added k9s skin, modified k9s settings 2026-04-10 17:02:30 -04:00
93b15391ca feat: added k9s, gh-dash to nvim config 2026-04-10 16:36:47 -04:00
317571499e update atuin, lazygit
there are overlays and are out of date
2026-04-09 10:29:20 -04:00
971a263963 Merge branch 'master' of https://scm.wyattjmiller.com/wymiller/nix-config-v2 2026-04-09 09:44:52 -04:00
2fb3e2867c added overlay packages, added go overlay
needed go overlay for diffnav
2026-04-09 09:44:50 -04:00
4492dcdff5 added easyeffects 2026-04-08 19:53:03 -04:00
7d8dcee57c Merge pull request 'Thancred (Game server)' (#8) from thancred into master
Reviewed-on: #8
2026-04-04 22:25:32 -05:00
3bd43f72a2 Merge branch 'master' into thancred 2026-04-02 13:00:37 -05:00
915ecc73e8 fixed new aliases 2026-03-25 11:33:20 -04:00
43c5308feb added more git aliases 2026-03-25 02:11:06 -04:00
a1c0407f02 update flake lock 2026-03-24 20:13:51 -04:00
33f590b214 added systemd service for vintagestory-server 2026-03-23 21:46:54 -04:00
89cdef92a7 Merge remote-tracking branch 'origin' into thancred 2026-03-23 21:25:36 -04:00
2f378ddc22 added some shell quotes 2026-03-23 21:15:36 -04:00
937deb7079 added some git aliases 2026-03-23 20:39:02 -04:00
4c462c21f3 Merge branch 'master' of ssh://scm.wyattjmiller.com:222/wymiller/nix-config-v2 2026-03-23 20:21:55 -04:00
eb26a93944 modified linux home packages
why did i ever get rid of this in the first place?
2026-03-23 20:21:52 -04:00
098478fa0f added login quotes 2026-03-18 11:42:59 -04:00
80fd89c5ac added groups 2026-02-25 21:52:36 -05:00
1a8c910e3a group, extraGroups fix 2026-02-25 21:44:12 -05:00
3992cab7c8 added user to thancred 2026-02-25 21:39:35 -05:00
f0eb5678c8 modifications 2026-02-25 20:09:06 -05:00
bd262d3fb6 wtf is that doing here?? 2026-02-25 20:00:40 -05:00
f1a426bd2e Merge branch 'master' of https://scm.wyattjmiller.com/wymiller/nix-config-v2 2026-02-24 01:00:44 -05:00
9fe67f2b97 updated machine module readme 2026-02-24 01:00:06 -05:00
245b5b1e08 Merge pull request 'Y'shtola (Matrix server)' (#7) from yshtola-build into master
Reviewed-on: #7
2026-02-23 23:45:39 -06:00
b3954838d2 modularized yshtola
pulled out the FQDNs and repeating strings that i don't need repeated
2026-02-24 00:42:55 -05:00
6b586d80ab final touches to matrix, livekit, lk-jwt-service 2026-02-24 00:08:30 -05:00
0718c9f18d Merge branch 'yshtola-build' of https://scm.wyattjmiller.com/wymiller/nix-config-v2 into yshtola-build 2026-02-23 22:31:15 -05:00
14dbc1363e things happened 2026-02-23 22:30:45 -05:00
7e0d58c097 wip: modified livekit-key service 2026-02-23 21:29:11 -06:00
f2ae159c67 wip: added configuration changes to tuwunel, livekit, lk-jwt-service 2026-02-23 21:53:20 -05:00
a3ef9fa59e changes to hardware config 2026-02-19 02:44:23 +00:00
aea71bb49b wip: ready for hardware configuration 2026-02-18 19:55:43 -05:00
e7b2a1bc1e wip: still in progress 2026-02-18 14:57:21 -05:00
bdf4d54e99 wip: build still in progress 2026-02-18 08:40:47 -05:00
26662e1419 wip: yshtola build in progress 2026-02-17 18:24:34 -05:00
f2ee981953 modifying thancred to match updated flake config 2026-02-16 20:39:20 -05:00
eb666f6a01 Merge remote-tracking branch 'origin' into thancred 2026-02-16 20:34:09 -05:00
b8db103e08 Merge pull request 'Standalone Home Manager configuration' (#6) from hm-standalone-config into master
Reviewed-on: #6
2026-02-16 19:24:07 -06:00
08adc255d6 darwin changes 2026-02-16 19:59:35 -05:00
c81ca5ee4c works on cloud 2026-02-16 19:33:25 -05:00
9cfe456cb9 Merge remote-tracking branch 'origin' into hm-standalone-config 2026-02-16 19:19:04 -05:00
6dbfc5805e updated flake to 25.11 2026-02-01 21:32:32 -05:00
7a3c83f088 add shell init path 2025-12-19 15:37:16 -05:00
1cbfb37409 darwin build success
ready for pr ig
2025-12-13 17:04:28 -05:00
83d1494d4a nixos build success
darwin next maybe?
2025-12-13 14:04:54 -05:00
f8da56fe52 working build
fixed up krew home module
2025-12-12 15:52:04 -05:00
bcf5b224cb trying this 2025-12-12 15:39:23 -05:00
b762b06f05 cleanup? 2025-12-12 14:15:19 -05:00
9fedd2d61e removed k9s overlay
this commit got builds working, working in the sense that the build
actually threw an error! have to fix that
2025-12-10 17:09:19 -05:00
4207b320c9 working? plus cleanup and fallbacks 2025-11-17 12:12:17 -05:00
6561e37119 wip: still broken 2025-11-06 17:14:39 -05:00
717e8c452d wip: broken, still working on it' 2025-10-31 17:07:59 -04:00
8fd3ca8c9a wip: modularizing? 2025-10-30 17:34:55 -04:00
26 changed files with 970 additions and 262 deletions

View File

@@ -0,0 +1,100 @@
k9s:
body:
fgColor: '#cdd6f4'
bgColor: '#1e1e2e'
logoColor: '#cba6f7'
prompt:
fgColor: '#cdd6f4'
bgColor: '#181825'
suggestColor: '#89b4fa'
help:
fgColor: '#cdd6f4'
bgColor: '#1e1e2e'
sectionColor: '#a6e3a1'
keyColor: '#89b4fa'
numKeyColor: '#eba0ac'
frame:
title:
fgColor: '#94e2d5'
bgColor: '#1e1e2e'
highlightColor: '#f5c2e7'
counterColor: '#f9e2af'
filterColor: '#a6e3a1'
border:
fgColor: '#cba6f7'
focusColor: '#b4befe'
menu:
fgColor: '#cdd6f4'
keyColor: '#89b4fa'
numKeyColor: '#eba0ac'
crumbs:
fgColor: '#1e1e2e'
bgColor: '#eba0ac'
activeColor: '#f2cdcd'
status:
newColor: '#89b4fa'
modifyColor: '#b4befe'
addColor: '#a6e3a1'
pendingColor: '#fab387'
errorColor: '#f38ba8'
highlightColor: '#89dceb'
killColor: '#cba6f7'
completedColor: '#6c7086'
info:
fgColor: '#fab387'
sectionColor: '#cdd6f4'
views:
table:
fgColor: '#cdd6f4'
bgColor: '#1e1e2e'
cursorFgColor: '#313244'
cursorBgColor: '#45475a'
markColor: '#f5e0dc'
header:
fgColor: '#f9e2af'
bgColor: '#1e1e2e'
sorterColor: '#89dceb'
xray:
fgColor: '#cdd6f4'
bgColor: '#1e1e2e'
cursorColor: '#45475a'
cursorTextColor: '#1e1e2e'
graphicColor: '#f5c2e7'
charts:
bgColor: '#1e1e2e'
chartBgColor: '#1e1e2e'
dialBgColor: '#1e1e2e'
defaultDialColors:
- '#a6e3a1'
- '#f38ba8'
defaultChartColors:
- '#a6e3a1'
- '#f38ba8'
resourceColors:
cpu:
- '#cba6f7'
- '#89b4fa'
mem:
- '#f9e2af'
- '#fab387'
yaml:
keyColor: '#89b4fa'
valueColor: '#cdd6f4'
colonColor: '#a6adc8'
logs:
fgColor: '#cdd6f4'
bgColor: '#1e1e2e'
indicator:
fgColor: '#b4befe'
bgColor: '#1e1e2e'
toggleOnColor: '#a6e3a1'
toggleOffColor: '#a6adc8'
dialog:
fgColor: '#f9e2af'
bgColor: '#9399b2'
buttonFgColor: '#1e1e2e'
buttonBgColor: '#7f849c'
buttonFocusFgColor: '#1e1e2e'
buttonFocusBgColor: '#f5c2e7'
labelFgColor: '#f5e0dc'
fieldFgColor: '#cdd6f4'

View File

@@ -12,6 +12,9 @@ return {
-- { import = "astrocommunity.pack.go "}, -- golang support
{ import = "astrocommunity.pack.fish" }, -- fish support
-- { import = "astrocommunity.pack.cs" }, -- csharp/dotnet support
{ import = "astrocommunity.completion.copilot-lua" }, -- copilot
{ import = "astrocommunity.completion.copilot-lua-cmp" }, -- copilot
{ import = "astrocommunity.recipes.heirline-mode-text-statusline" }, -- statusline customization
-- import/override with your plugins folder
}

View File

@@ -0,0 +1,43 @@
local function toggle_floating_tui(cmd)
local terminal
return function()
if not terminal then
local Terminal = require("toggleterm.terminal").Terminal
terminal = Terminal:new {
cmd = cmd,
hidden = true,
close_on_exit = true,
direction = "float",
on_open = function() vim.cmd "startinsert!" end,
}
end
terminal:toggle()
end
end
local toggle_k9s = toggle_floating_tui "k9s"
local toggle_ghdash = toggle_floating_tui "gh-dash"
return {
{
"AstroNvim/astrocore",
---@type AstroCoreOpts
opts = {
mappings = {
n = {
["<Leader>k"] = { desc = "Kubernetes" },
["<Leader>ki"] = {
toggle_k9s,
desc = "K9s",
},
["<Leader>gD"] = {
toggle_ghdash,
desc = "GitHub dashboard",
},
},
},
},
},
}

209
flake.lock generated
View File

@@ -9,11 +9,11 @@
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1767520119,
"narHash": "sha256-+OmNQLA9Fv5WBaxYHlPghS9XmnYWDaLt+AatCGhG+hc=",
"lastModified": 1774186997,
"narHash": "sha256-hyNVlhAqmwcBPl7XRkxbGcMt1BfCOdvuEfBDUf0k8Oo=",
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"rev": "5720d3282844b6b23b26dfac075a5f1f58ea8844",
"rev": "546e95f7ec74892a31f883a10b1723c35f2c2edd",
"type": "github"
},
"original": {
@@ -29,11 +29,11 @@
]
},
"locked": {
"lastModified": 1767634391,
"narHash": "sha256-owcSz2ICqTSvhBbhPP+1eWzi88e54rRZtfCNE5E/wwg=",
"lastModified": 1772129556,
"narHash": "sha256-Utk0zd8STPsUJPyjabhzPc5BpPodLTXrwkpXBHYnpeg=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "08585aacc3d6d6c280a02da195fdbd4b9cf083c2",
"rev": "ebec37af18215214173c98cf6356d0aca24a2585",
"type": "github"
},
"original": {
@@ -46,11 +46,11 @@
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1761588595,
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
@@ -108,11 +108,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github"
},
"original": {
@@ -121,62 +121,83 @@
"type": "github"
}
},
"ghostty": {
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-utils": "flake-utils",
"home-manager": "home-manager",
"nixpkgs": "nixpkgs_2",
"zig": "zig",
"zon2nix": "zon2nix"
"gitignore": "gitignore",
"nixpkgs": [
"go-overlay",
"nixpkgs"
]
},
"locked": {
"lastModified": 1769985646,
"narHash": "sha256-ubfC9fLfdQ0xpQuFmGQCYIRyEEmOzXd+ya5rShM217k=",
"owner": "ghostty-org",
"repo": "ghostty",
"rev": "769fff5dfb322594c0dc7a379ee70897a7db773f",
"lastModified": 1765016596,
"narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c",
"type": "github"
},
"original": {
"owner": "ghostty-org",
"repo": "ghostty",
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"go-overlay",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"go-overlay": {
"inputs": {
"flake-utils": "flake-utils",
"git-hooks": "git-hooks",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1775676807,
"narHash": "sha256-l7B5l6cGBZoW4bs+4Zq/FMgxaZWWJqdUDkCVuH98hMY=",
"owner": "purpleclay",
"repo": "go-overlay",
"rev": "c5bd812957211f42c207da6b1415f49de30e183f",
"type": "github"
},
"original": {
"owner": "purpleclay",
"repo": "go-overlay",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"ghostty",
"nixpkgs"
]
},
"locked": {
"lastModified": 1768068402,
"narHash": "sha256-bAXnnJZKJiF7Xr6eNW6+PhBf1lg2P1aFUO9+xgWkXfA=",
"lastModified": 1774274588,
"narHash": "sha256-dnHvv5EMUgTzGZmA+3diYjQU2O6BEpGLEOgJ1Qe9LaY=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "8bc5473b6bc2b6e1529a9c4040411e1199c43b4c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1769580047,
"narHash": "sha256-tNqCP/+2+peAXXQ2V8RwsBkenlfWMERb+Uy6xmevyhM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "366d78c2856de6ab3411c15c1cb4fb4c2bf5c826",
"rev": "cf9686ba26f5ef788226843bc31fda4cf72e373b",
"type": "github"
},
"original": {
@@ -220,24 +241,27 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1768032153,
"narHash": "sha256-zvxtwlM8ZlulmZKyYCQAPpkm5dngSEnnHjmjV7Teloc=",
"rev": "3146c6aa9995e7351a398e17470e15305e6e18ff",
"type": "tarball",
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre925418.3146c6aa9995/nixexprs.tar.xz"
"lastModified": 1765779637,
"narHash": "sha256-KJ2wa/BLSrTqDjbfyNx70ov/HdgNBCBBSQP3BIzKnv4=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "1306659b587dc277866c7b69eb97e5f07864d8c4",
"type": "github"
},
"original": {
"type": "tarball",
"url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1769900590,
"narHash": "sha256-I7Lmgj3owOTBGuauy9FL6qdpeK2umDoe07lM4V+PnyA=",
"lastModified": 1774244481,
"narHash": "sha256-4XfMXU0DjN83o6HWZoKG9PegCvKvIhNUnRUI19vzTcQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "41e216c0ca66c83b12ab7a98cc326b5db01db646",
"rev": "4590696c8693fea477850fe379a01544293ca4e2",
"type": "github"
},
"original": {
@@ -295,8 +319,8 @@
"inputs": {
"aagl": "aagl",
"darwin": "darwin",
"ghostty": "ghostty",
"home-manager": "home-manager_2",
"go-overlay": "go-overlay",
"home-manager": "home-manager",
"nix-flatpak": "nix-flatpak",
"nixpkgs": "nixpkgs_3",
"rust-overlay": "rust-overlay_2",
@@ -309,11 +333,11 @@
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1764470739,
"narHash": "sha256-sa9f81B1dWO16QtgDTWHX8DQbiHKzHndpaunY5EQtwE=",
"lastModified": 1770952264,
"narHash": "sha256-CjymNrJZWBtpavyuTkfPVPaZkwzIzGaf0E/3WgcwM14=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "3bfa664055e1a09c6aedab5533c5fc8d6ca5741a",
"rev": "ec6a3d5cdf14bb5a1dd03652bd3f6351004d2188",
"type": "github"
},
"original": {
@@ -327,11 +351,11 @@
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1769915446,
"narHash": "sha256-f1F/umtX3ZD7fF9DHSloVHc0mnAT0ry0YK2jI/6E0aI=",
"lastModified": 1774321696,
"narHash": "sha256-g18xMjMNla/nsF5XyQCNyWmtb2UlZpkY0XE8KinIXAA=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "bc00300f010275e46feb3c3974df6587ff7b7808",
"rev": "49a67e6894d4cb782842ee6faa466aa90c92812d",
"type": "github"
},
"original": {
@@ -392,57 +416,6 @@
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/vintage-story-nix.git"
}
},
"zig": {
"inputs": {
"flake-compat": [
"ghostty",
"flake-compat"
],
"flake-utils": [
"ghostty",
"flake-utils"
],
"nixpkgs": [
"ghostty",
"nixpkgs"
]
},
"locked": {
"lastModified": 1763295135,
"narHash": "sha256-sGv/NHCmEnJivguGwB5w8LRmVqr1P72OjS+NzcJsssE=",
"owner": "mitchellh",
"repo": "zig-overlay",
"rev": "64f8b42cfc615b2cf99144adf2b7728c7847c72a",
"type": "github"
},
"original": {
"owner": "mitchellh",
"repo": "zig-overlay",
"type": "github"
}
},
"zon2nix": {
"inputs": {
"nixpkgs": [
"ghostty",
"nixpkgs"
]
},
"locked": {
"lastModified": 1768231828,
"narHash": "sha256-wL/8Iij4T2OLkhHcc4NieOjf7YeJffaUYbCiCqKv/+0=",
"owner": "jcollie",
"repo": "zon2nix",
"rev": "c28e93f3ba133d4c1b1d65224e2eebede61fd071",
"type": "github"
},
"original": {
"owner": "jcollie",
"repo": "zon2nix",
"rev": "c28e93f3ba133d4c1b1d65224e2eebede61fd071",
"type": "github"
}
}
},
"root": "root",

View File

@@ -11,8 +11,8 @@
url = "github:lnl7/nix-darwin/nix-darwin-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
ghostty.url = "github:ghostty-org/ghostty";
rust-overlay.url = "github:oxalica/rust-overlay";
go-overlay.url = "github:purpleclay/go-overlay";
aagl = {
url = "github:ezKEa/aagl-gtk-on-nix";
inputs.nixpkgs.follows = "nixpkgs";
@@ -29,8 +29,8 @@
nix-flatpak,
darwin,
home-manager,
ghostty,
rust-overlay,
go-overlay,
aagl,
swaytreesave,
vintage-story,
@@ -39,12 +39,13 @@
userName = "wyatt";
userEmail = "wyatt@wyattjmiller.com";
extraSpecialArgs = {
inherit userName userEmail ghostty swaytreesave;
inherit userName userEmail swaytreesave;
};
myOverlays = { ... }: {
nixpkgs.overlays = [
rust-overlay.overlays.default
go-overlay.overlays.default
aagl.overlays.default
self.common.overlays
];
@@ -60,9 +61,9 @@
darwinConfigurations."sephiroth" = darwin.lib.darwinSystem {
system = "aarch64-darwin";
specialArgs = {
inherit userName userEmail ghostty;
inherit userName userEmail;
hostname = "sephiroth";
role = "devel";
role = "workstation";
};
modules = [
myOverlays
@@ -73,7 +74,8 @@
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs;
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = false; role = "workstation"; };
# home-manager.extraSpecialArgs = extraSpecialArgs;
home-manager.backupFileExtension = "bak";
home-manager.users.${userName} = import ./home;
}
@@ -84,9 +86,9 @@
nixosConfigurations."cloud" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail ghostty aagl vintage-story;
inherit userName userEmail aagl vintage-story;
hostname = "cloud";
role = "devel";
role = "workstation";
};
modules = [
myOverlays
@@ -98,7 +100,7 @@
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs;
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = true; role = "workstation"; };
home-manager.backupFileExtension = "bak";
home-manager.users.${userName}.imports = [
./home
@@ -163,6 +165,7 @@
# ];
};
# Vintage story server
nixosConfigurations."thancred" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
@@ -179,7 +182,7 @@
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs;
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = true; role = "server"; };
home-manager.backupFileExtension = "bak";
home-manager.users.${userName}.imports = [
./home
@@ -187,5 +190,55 @@
}
];
};
# Matrix and Mastodon server
nixosConfigurations."yshtola" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail;
hostname = "yshtola";
role = "server";
};
modules = [
myOverlays
./modules/common
./modules/machine/yshtola
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = true; role = "server"; };
home-manager.backupFileExtension = "bak";
home-manager.users.${userName}.imports = [
./home
];
}
];
};
# generic non-NixOS Linux machine
homeConfigurations."generic" = let
hostname = builtins.getEnv "HOSTNAME";
system = "x86_64-linux";
in home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.${system};
extraSpecialArgs = {
inherit userName userEmail hostname;
isNixOS = false;
role = "workstation";
};
modules = [
{
nixpkgs.overlays = [
rust-overlay.overlays.default
go-overlay.overlays.default
self.common.overlays
];
}
./home
];
};
};
}

View File

@@ -1,6 +1,7 @@
{
pkgs,
lib,
isNixOS ? true,
...
}: {
programs.firefox = {
@@ -9,7 +10,7 @@
};
programs.chromium = {
enable = pkgs.stdenv.isLinux;
enable = pkgs.stdenv.isLinux && isNixOS;
package = pkgs.ungoogled-chromium.override {
enableWideVine = true;
commandLineArgs = [

View File

@@ -1,45 +1,38 @@
{
lib,
pkgs,
userName,
userEmail,
ghostty,
swaytreesave,
...
{ lib
, pkgs
, userName
, swaytreesave
, isNixOS ? true
, ...
}: let
# Have a file sturcture that holds all the configuration files that can't be configured by Nix
# or maybe I'm too lazy to do anything about it? I dunno
dirs = {
defaults = ../defaults;
};
in {
in
{
_module.args = {
inherit dirs;
};
# Import sub modules
imports = [
./atuin.nix
./shell.nix
./packages
./git.nix
./starship.nix
./eza.nix
./neovim.nix
./direnv.nix
./sway.nix
./terminal.nix
./browser.nix
./zellij.nix
./bat.nix
./lazygit.nix
];
# Home Manager needs a bit of information about you and the
# paths it should manage.
home = {
home = lib.mkMerge [
{
username = userName;
homeDirectory =
if pkgs.stdenv.isDarwin
then "/Users/${userName}"
else "/home/${userName}";
stateVersion = "24.11";
}
(lib.mkIf isNixOS {
sessionVariables = {
XDG_CURRENT_DESKTOP = "sway";
XDG_SESSION_TYPE = "wayland";
@@ -50,16 +43,17 @@ in {
XDG_STATE_HOME = "$HOME/.local/state";
NIXOS_OZONE_WL = "1";
};
})
pointerCursor = lib.mkIf pkgs.stdenv.isLinux {
(lib.mkIf pkgs.stdenv.isLinux {
pointerCursor = {
gtk.enable = true;
package = pkgs.catppuccin-cursors.mochaDark;
name = "catppuccin-mocha-dark-cursors";
size = 22;
};
stateVersion = "24.11";
};
})
];
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;

View File

@@ -31,6 +31,7 @@
a = "add";
ap = "add -p";
br = "branch";
cb = "checkout -b";
co = "checkout";
st = "status -sb";
status = "status -sb";
@@ -40,6 +41,11 @@
ca = "commit -am";
dc = "diff --cached";
amend = "commit --amend -m";
wipe = "reset --hard";
gg = "reset --hard";
ggs = "reset --hard";
sw = "switch";
r = "restore";
# aliases for submodules
update = "submodule update --init --recursive";

32
home/k9s.nix Normal file
View File

@@ -0,0 +1,32 @@
{ pkgs, ... }: {
programs.k9s = {
enable = true;
package = pkgs.k9s;
settings.k9s = {
refreshRate = "2s";
liveViewAutoRefresh = false;
apiServerTimeout = "30s";
maxConnRetry = 5;
# readOnly = true;
noExitOnCtrlC = false;
portForwardAddress = "localhost";
skipLatestRevCheck = false;
skin = {
catppuccin-mocha = ../defaults/k9s/catppuccin-mocha.yaml;
};
ui = {
skin = "catppuccin-mocha";
enableMouse = true;
headless = false;
logoless = true;
crumbsless = false;
splashless = true;
reactive = false;
noIcons = false;
defaultsToFullscreen = false;
};
};
};
}

14
home/krew.nix Normal file
View File

@@ -0,0 +1,14 @@
{ pkgs, lib, ... }:
with pkgs;
let
plugins = [
"krew"
"oidc-login"
];
in {
home.activation.krew = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
${lib.concatMapStringsSep "\n" (plugin: ''
$DRY_RUN_CMD ${krew}/bin/krew install ${plugin} || true
'') plugins}
'';
}

View File

@@ -2,9 +2,19 @@
pkgs,
...
}: {
home.packages = with pkgs; [
yazi # terminal file manager
imports = [
../atuin.nix
../shell.nix
../git.nix
../starship.nix
../eza.nix
../neovim.nix
../bat.nix
];
nixpkgs.config.allowUnfree = true;
home.packages = with pkgs; [
# archives
zip
xz
@@ -12,39 +22,21 @@
p7zip
# utils
yazi
tmux
bottom
ripgrep
jq
yq-go
fzf
fh
aria2
yt-dlp
obsidian
vscode
weechat
inetutils
gnupg
# misc
cowsay
file
which
tree
gnutar
gnupg
zoxide
babelfish
# language-specific package managers
nodejs
cargo
python3
# nix specific stuff
nixd
deadnix
alejandra
statix
];
}

View File

@@ -1,10 +1,7 @@
{
pkgs,
lib,
...
}: {
home.packages = lib.mkIf pkgs.stdenv.isDarwin (with pkgs; [
{ lib, pkgs, ... }:
lib.mkIf pkgs.stdenv.isDarwin {
home.packages = with pkgs; [
discord
ollama
]);
];
}

View File

@@ -1,11 +1,11 @@
{ lib, role ? "workstation", ... }:
{
pkgs,
lib,
...
}: {
imports = [
imports =
[
./common.nix
./darwin.nix
./linux.nix
];
]
++ lib.optional (role == "workstation") ./workstation.nix
++ lib.optional (role == "server") ./server.nix;
}

View File

@@ -1,21 +1,16 @@
{
pkgs,
lib,
...
}: {
home.packages = lib.mkIf pkgs.stdenv.isLinux (with pkgs; [
{ lib, pkgs, isNixOS ? true, ... }:
lib.mkIf pkgs.stdenv.isLinux {
home.packages = with pkgs; [
imv
betterdiscordctl
vesktop
xdg-utils
mcrcon
] ++ lib.optionals isNixOS [
vesktop
xfce.thunar
pavucontrol
godot
aseprite
zathura
gpu-screen-recorder
gpu-screen-recorder-gtk
# ungoogled-chromium
]);
inetutils
easyeffects
];
}

View File

@@ -0,0 +1,4 @@
{ pkgs, ... }: {
home.packages = [
];
}

View File

@@ -0,0 +1,37 @@
{
lib,
pkgs,
isNixOS ? true,
...
}: {
imports = [
../terminal.nix
../browser.nix
../zellij.nix
../lazygit.nix
../k9s.nix
../krew.nix
../direnv.nix
] ++ lib.optional isNixOS ../sway.nix;
home.packages = with pkgs; [
fh
kubectl # kube config is deliberately not included
kubectx
vscode
yt-dlp
weechat
nodejs
cargo
python3
nixd
deadnix
alejandra
statix
gh
ghDashLatest
diffNavLatest
] ++ lib.optionals isNixOS [
obsidian
];
}

View File

@@ -1,9 +1,11 @@
{pkgs, lib, ...}: {
programs.fish = {
enable = true;
# initExtra = ''
# export PATH="$PATH:$HOME/bin:$HOME/.local/bin:$HOME/go/bin"
# '';
shellInit = ''
if test -d $HOME/.krew/bin
set -gx PATH $HOME/.krew/bin $PATH
end
'';
shellAliases = {
# ls aliases
@@ -60,7 +62,13 @@
"If youve brought your ivory standard, Ill be happy to tell you where you can stick it" \
"Speeches? Oh, yes, I love them. There's nothing like a good exposition when you're having trouble sleeping!" \
"Somehow, the boy just isn't very buoyant" \
"I am...not interested, little sun. Try again when you have become a man"
"I am...not interested, little sun. Try again when you have become a man" \
"I am rightousness! And rightousness shall previal!" \
"Ahhh such bliss!" \
"The gods themselves will be my meal. Your dear companions my dessert. Upon this world I'll feast, and death shall follow in my wake. All your hate, all your rage, you will render unto me." \
"Boring, boring, boring" \
"Would you be 'happier' had I a 'good reason'?" \
"A test of your reflexes!"
set choose_meme (random)"%"(count $memes)

View File

@@ -1,4 +1,4 @@
{ lib, pkgs, ghostty, ... }: {
{ pkgs, ... }: {
programs.alacritty = {
enable = pkgs.stdenv.isLinux;
settings = {
@@ -103,9 +103,4 @@
programs.kitty = {
enable = false; # TODO: to enable later
};
home.packages = if pkgs.stdenv.isLinux then
[ ghostty.packages.${pkgs.system}.default ]
else
[ ];
}

0
lib/checkSystem.nix Normal file
View File

View File

@@ -1,18 +1,23 @@
final: prev: let
rust_1_90_0 = prev.rust-bin.stable."1.90.0".default;
rust_latest = prev.rust-bin.stable.latest.default;
golang_latest = prev.go-bin.latestStable;
buildGoModuleLatest = prev.buildGoModule.override {
go = golang_latest;
};
myRustPlatform = prev.makeRustPlatform {
cargo = rust_1_90_0;
rustc = rust_1_90_0;
cargo = rust_latest;
rustc = rust_latest;
};
in {
lazygitLatest = prev.lazygit.overrideAttrs (_: rec {
version = "0.55.1";
version = "0.61.0";
src = prev.fetchFromGitHub {
owner = "jesseduffield";
repo = "lazygit";
rev = "v${version}";
hash = "sha256-UofhgILZhVXnYiGpb25m4Ct4sbu5pRmjVgj3oEf5Uyk=";
hash = "sha256-G7JulCK9WUVWbp1V7lYuM3fehCdn1cNAJHYjr3aKDvQ=";
};
vendorHash = null;
subPackages = [ "." ];
ldflags = [
@@ -24,21 +29,31 @@ in {
atuinLatest = (prev.atuin.override {
rustPlatform = myRustPlatform;
}).overrideAttrs (oldAttrs: rec {
version = "18.10.0";
version = "18.13.6";
src = prev.fetchFromGitHub {
owner = "atuinsh";
repo = "atuin";
rev = "v${version}";
hash = "sha256-bfSa3RtVXxHt3usDqqpE/oXKKDUZOrf+tD9uL59fr6M=";
hash = "sha256-yAw+ty6FUnFbiRTdAe2QQHzj6uU24fZ/bEIXcHl/thg=";
};
cargoDeps = myRustPlatform.fetchCargoVendor {
# name = "atuin-${version}-vendor.tar.gz";
inherit src;
hash = "sha256-67ffivZVCly1GWA3fJ9mT8nGv2EGd6eCthbaIu/IW3M=";
hash = "sha256-jirVe0+N5+UHZWioj8AipUhawMBameqEJJpa8HPTnfw=";
};
cargoBuildFeatures = [
"ai"
"client"
"clipboard"
"daemon"
"hex"
"sync"
];
cargoCheckFeatures = cargoBuildFeatures;
preCheck = (oldAttrs.preCheck or "") + ''
export HOME="$TMPDIR"
export XDG_CONFIG_HOME="$TMPDIR/.config"
@@ -47,4 +62,67 @@ in {
mkdir -p "$XDG_CONFIG_HOME" "$XDG_DATA_HOME" "$XDG_STATE_HOME"
'';
});
# k9sLatest = prev.k9s.overrideAttrs (oldAttrs: rec {
# version = "0.30.16";
# src = prev.fetchFromGitHub {
# owner = "derailed";
# repo = "k9s";
# rev = "v${version}";
# hash = "sha256-1z6r6v3n1p6vd2q6n4pl5q3f7q3q7q1p7j5j1k3l4m5n6o7p8q9r";
# };
# ldflags = [
# "-X github.com/derailed/k9s/version.Version=${version}"
# "-X github.com/derailed/k9s/version.BuildSource=nix"
# ];
# });
ghDashLatest = (prev.gh-dash.override {
buildGoModule = buildGoModuleLatest;
}).overrideAttrs (oldAttrs: rec {
version = "4.23.2";
src = prev.fetchFromGitHub {
owner = "dlvhdr";
repo = "gh-dash";
rev = "v${version}";
hash = "sha256-C06LPVoE23ITJpMG0x75Djgeup+eb5uYwA8wL7xxvWU=";
};
vendorHash = "sha256-4AbeoH0l7eIS7d0yyJxM7+woC7Q/FCh0BOJj3d1zyX4=";
doCheck = false;
checkFlags = [
"-skip=TestFullOutput"
];
ldflags = [
"-s"
"-w"
"-X github.com/dlvhdr/gh-dash/v4/cmd.Version=${version}"
];
passthru = (oldAttrs.passthru or {}) // {
tests = {
version = oldAttrs.testers.testVersion { package = final.ghDashLatest; };
};
};
});
diffNavLatest = (prev.diffnav.override {
buildGoModule = buildGoModuleLatest;
}).overrideAttrs (_: rec {
version = "0.10.0";
src = prev.fetchFromGitHub {
owner = "dlvhdr";
repo = "diffnav";
rev = "v${version}";
hash = "sha256-6VtAQzZNLQrf8QYVXxLUgb3F6xguFDbwaE9kahPhbSE=";
};
vendorHash = "sha256-gmmckzR0D1oFuTG5TAb6gLMoNbcZl9EsjbFjhPfJqnQ=";
ldflags = [
"-s"
"-w"
];
});
}

View File

@@ -10,6 +10,10 @@ I like Final Fantasy, alright? Isn't everyone supposed to have a hobby?
These are named after Final Fantasy VII characters.
### Servers/Network Infrastructure
### Servers/Network Infrastructure (bare metal)
These are named after Final Fantasy summons. There is some infrastructure missing here like my routers and switches that I also name after summons.
### Servers/Network Infrastructure (virtual machines)
These are named after Final Fantasy XIV Online characters (currently, these are named after the Scions of the Seventh Dawn).

View File

@@ -63,21 +63,59 @@
vintage-story.packages.${pkgs.system}.default
];
# Podman module (see ../../virtualization/podman.nix)
# podman = {
# enable = true;
# extraPackages = with pkgs; [
# docker-credential-helpers
# toolbox
# cosign
# crane
# podman-tui
# podman-desktop
# ];
# };
systemd.services.vintagestory-server = {
description = "Vintage Story Server";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
Type = "simple";
User = userName;
WorkingDirectory = "/home/${userName}";
ExecStart = "${vintage-story.packages.${pkgs.system}.default}/bin/vintagestory-server";
Restart = "on-failure";
RestartSec = "5s";
};
};
# Add username to groups "wheel" and "video" - more may be added here later
users.users.${userName}.extraGroups = ["wheel" "podman" "network"];
users = {
groups.hazel = {};
users = {
${userName} = {
extraGroups = [ "wheel" "network" ];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFV9eSc9L+aJLoKoexq2f/jb5rpyZnhuGiyhS8YQAbaS wyatt@wyattjmiller.com"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WKvKnnYpTbzZHFEslOKyfiiMqWxhW3AfX6E7ACmYU wyatt@wyattjmiller.com"
];
};
"hazel" = {
home = "/home/hazel";
group = "hazel";
extraGroups = [ "wheel" ];
description = "hazel";
isNormalUser = true;
openssh.authorizedKeys.keys = [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDZnyiQx+k1ygX8E1lsUCB6aTdMc+OKzlZ4admlzknc5ulj0YrtUyqhbNhkNd6pP0QDBFMnXO/rzUvHp4TAyZXKFfpcBCa4zhK97ufymAfvzAjM4vRBqRNcr2n+2iRzxtolbklfjs3ocBQVxXW+pRT5wWxTgK2fcmP2xviDVldr7qte37x5YkQb5SAhYNH8tqJRnuGPe+Q0A3oN4HyHZFnrMq/HlbL5yg/0VKPTtF/IgHf+2dDz5OQQpBx3/N9u/QLwuIm9lkyOG03s0TGmE7up/i0jX2vIqp2BbGSnwdQEL/eSVZx73qQB/J62VFafg13P5yQWDJ33WSoiwhac6bg26HPmPOnCJp5R3c+7jM8N1F1ZbtsKicHSVsRg1RQSree4lchPy7FOPkCuUrB7LNE71mbpOzZNR767S6UAPaXxRw6QNYGBaDqQBwhlU8ZDF5F7EW6ahSUMOI6ECyoibzIMb56xs9osuNeUhB/BcL5sHSFpJjIbdcDLNkEKggrBl6s="
];
};
};
};
services.fail2ban = {
enable = true;
package = pkgs.fail2ban;
maxretry = 5;
bantime = "3h";
bantime-increment = {
enable = true;
rndtime = "10m";
};
};
services.tailscale = {
enable = true;
package = pkgs.tailscale;
};
system.stateVersion = "24.11";
}

View File

@@ -1,3 +1,32 @@
{ ... }: {
# TODO: needs to filled out later
# 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 + "/profiles/qemu-guest.nix")
];
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sr_mod" "virtio_blk" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/e2e621c1-0090-472a-99d9-61c6a87bd068";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/663E-15C0";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices =
[ { device = "/dev/disk/by-uuid/60104b1a-4285-4dd1-be5e-3c3dee24515a"; }
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View File

@@ -0,0 +1,271 @@
{
pkgs,
userName,
...
}: let
# INFO: set these to your liking
matrixFqdn = "chat.wyattjmiller.com";
rtcFqdn = "rtc.wyattjmiller.com";
supportEmail = "wyatt@wyattjmiller.com";
livekitKeyFile = "/var/lib/livekit/livekit.key";
matrixRegistrationTokenFile = "/var/lib/matrix.key";
in {
imports = [
../../pwrMgmt
];
# Enable flakes for NixOS
nix.settings.experimental-features = ["nix-command" "flakes"];
nix.settings = {
download-buffer-size = 134217728; # 128 MiB in bytes
};
# Custom kernel/boot stuff
boot.kernelPackages = pkgs.linuxPackages_latest;
# Set your timezone
time.timeZone = "America/Detroit";
# Enable OpenSSH
services.openssh = {
enable = true;
settings.PermitRootLogin = "no";
settings.PasswordAuthentication = false;
};
# Enable keyring
services.gnome.gnome-keyring.enable = true;
# Enable GnuPG
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# Enable SUID wrappers (some programs need them)
programs.mtr.enable = true;
# Enable Polkit
security.polkit.enable = true;
# Power management (see ../../pwrMgmt/default.nix)
pwrMgmt = {
enable = true;
cpuFreqGovernor = "performance";
powertop.enable = false;
};
# Firewall settings (fallback, upstream way of doing things)
networking.firewall = {
enable = true;
allowedTCPPorts = [
80
443
8448
3478
5349
7880
7881
8080
8081
];
allowedUDPPorts = [
3478
7881
8448
];
allowedUDPPortRanges =[
# TURN UDP relays
{
from = 49000;
to = 50000;
}
#
{
from = 50100;
to = 50200;
}
];
};
# Add username to groups "wheel" and "video" - more may be added here later
users.users.${userName} = {
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFV9eSc9L+aJLoKoexq2f/jb5rpyZnhuGiyhS8YQAbaS wyatt@wyattjmiller.com"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WKvKnnYpTbzZHFEslOKyfiiMqWxhW3AfX6E7ACmYU wyatt@wyattjmiller.com"
];
extraGroups = ["wheel" "video" "network"];
};
# fail2ban
services.fail2ban = {
enable = true;
package = pkgs.fail2ban;
maxretry = 5;
bantime = "3h";
bantime-increment = {
enable = true;
rndtime = "10m";
};
};
# Matrix server
services.matrix-tuwunel = {
enable = true;
package = pkgs.matrix-tuwunel;
settings = {
global = {
server_name = matrixFqdn;
allow_encryption = true;
allow_federation = true;
allow_registration = true;
registration_token = matrixRegistrationTokenFile;
allow_unstable_room_versions = false;
allow_experimental_room_versions = false;
zstd_compression = true;
new_user_displayname_suffix = "";
max_request_size = 1048575600; # 100MB in bytes, for file uploads
database_backup_path = "/var/lib/tuwunel/database_backups";
database_backups_to_keep = 2;
address = [
"127.0.0.1"
"::1"
];
port = [ 8008 ];
well_known = {
client = "https://${matrixFqdn}";
server = "${matrixFqdn}:443";
support_email = supportEmail;
support_mxid = "@wymiller:${matrixFqdn}";
rtc_transports = [{
type = "livekit";
livekit_service_url = "https://${rtcFqdn}";
}];
};
};
};
};
# LiveKit (Matrix RTC)
services.livekit = {
enable = true;
package = pkgs.livekit;
openFirewall = true;
keyFile = livekitKeyFile;
settings = {
port = 7880;
room.auto_create = true;
rtc = {
use_external_ip = true;
};
};
};
# Reverse proxy
services.caddy = {
enable = true;
package = pkgs.caddy;
virtualHosts = {
"${matrixFqdn}" = {
extraConfig = ''
encode zstd gzip
reverse_proxy localhost:8008
'';
};
"${matrixFqdn}:8448" = {
extraConfig = ''
encode zstd gzip
reverse_proxy localhost:8008
'';
};
"${rtcFqdn}" = {
extraConfig = ''
@jwt_service {
path /sfu/get* /healthz*
}
handle @jwt_service {
reverse_proxy localhost:8080
}
handle {
reverse_proxy localhost:7880 {
header_up Connection "upgrade"
header_up Upgrade {http.request.header.Upgrade}
}
}
'';
};
};
};
# LiveKit JWT service
services.lk-jwt-service = {
enable = true;
port = 8080;
livekitUrl = "wss://rtc.wyattjmiller.com";
keyFile = livekitKeyFile;
};
# Generate LiveKit key if it doesn't exist
systemd.services = {
matrix-registration-token-gen = {
before = [ "tuwunel.service" ];
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ coreutils openssl ];
script = ''
set -eu
if [ -f "${matrixRegistrationTokenFile}" ]; then
exit 0
fi
install -d -m 0700 "$(dirname "${matrixRegistrationTokenFile}")"
TOKEN="$(openssl rand -hex 32)"
umask 077
printf '%s\n' "$TOKEN" > "${matrixRegistrationTokenFile}"
'';
serviceConfig = {
Type = "oneshot";
User = "root";
};
};
livekit-key-gen = {
before = [ "lk-jwt-service.service" "livekit.service" ];
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ coreutils openssl ];
script = ''
set -eu
if [ -f "${livekitKeyFile}" ]; then
exit 0
fi
install -d -m 0700 "$(dirname "${livekitKeyFile}")"
API_KEY="$(openssl rand -hex 8)"
API_SECRET="$(openssl rand -hex 32)"
umask 077
printf '%s: %s\n' "$API_KEY" "$API_SECRET" > "${livekitKeyFile}"
'';
serviceConfig = {
Type = "oneshot";
User = "root";
};
};
};
system.stateVersion = "25.11";
}

View File

@@ -0,0 +1,6 @@
{ ... }: {
imports = [
./configuration.nix
./hardware-configuration.nix
];
}

View File

@@ -0,0 +1,35 @@
# 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 + "/profiles/qemu-guest.nix")
];
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
boot.kernelParams = [ "console=ttyS0,19200n8" ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
boot.loader.grub.extraConfig = ''
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1;
terminal_input serial;
terminal_output serial;
'';
boot.loader.grub.forceInstall = true;
# boot.loader.grub.enable = true;
boot.loader.grub.device = "nodev";
boot.loader.timeout = 10;
fileSystems."/" =
{ device = "/dev/sda";
fsType = "ext4";
};
swapDevices =
[ { device = "/dev/sdb"; }
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}