Compare commits

..
4 Commits
Author SHA1 Message Date
wymiller 0c1763528e added base configuration for ixion, applied system update, modified power mgmt readme 2025-10-05 23:11:47 -04:00
wymiller 59ed5f0463 created easy wrapper for quadlet-nix 2025-10-05 23:10:47 -04:00
wymiller aa47f720ed Merge branch 'master' into ixion-build 2025-10-04 20:37:41 -04:00
wymiller 831fce71b8 added quadlet-nix input, created initial ixion config, created wrapper around quadlets
also wrote some doucumentation about quadlets, nothing too comprehesive
though as the wrapper might get removed later
2025-06-01 19:04:38 -04:00
63 changed files with 603 additions and 2751 deletions
-40
View File
@@ -1,40 +0,0 @@
name: Update flake lock
on:
schedule:
# Gitea cron schedules use UTC. 07:00 UTC is 03:00 EDT.
- cron: "0 7 * * 0"
workflow_dispatch:
permissions:
contents: write
jobs:
update-flake-lock:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Install upstream Nix
uses: cachix/install-nix-action@v31
- name: Update flake lock
run: nix flake update
- name: Commit and push changes
shell: bash
run: |
set -euo pipefail
if git diff --quiet -- flake.lock; then
echo "flake.lock is already up to date"
exit 0
fi
git config user.name "gitea-actions[bot]"
git config user.email "gitea-actions[bot]@noreply.localhost"
git add flake.lock
git commit -m "chore: update flake lock"
git push
-100
View File
@@ -1,100 +0,0 @@
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'
-3
View File
@@ -12,9 +12,6 @@ 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
}
-56
View File
@@ -1,56 +0,0 @@
local function toggle_tui(cmd, direction, size)
local terminal
local dir = direction or "float"
local term_size = size
return function()
if not terminal then
local Terminal = require("toggleterm.terminal").Terminal
terminal = Terminal:new {
cmd = cmd,
hidden = true,
close_on_exit = true,
direction = dir,
on_open = function() vim.cmd "startinsert!" end,
}
end
terminal:toggle(term_size, dir)
end
end
local toggle_k9s = toggle_tui "k9s"
local toggle_ghdash = toggle_tui "gh-dash"
local toggle_ai_opencode = toggle_tui("opencode", "vertical", 80)
local toggle_ai_copilot = toggle_tui("copilot", "vertical", 80)
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",
},
["<Leader>a"] = { desc = "AI" },
["<Leader>ao"] = {
toggle_ai_opencode,
desc = "opencode",
},
["<Leader>ag"] = {
toggle_ai_copilot,
desc = "GH Copilot",
},
},
},
},
},
}
+82 -7
View File
@@ -1,10 +1,85 @@
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
-- You can also add or configure plugins by creating files in this `plugins/` folder
-- Here are some examples:
---@type LazySpec
return {
{ "nvim-treesitter/nvim-treesitter" },
{ "neovim/nvim-lspconfig" },
{ "kylechui/nvim-surround" },
{ "nvim-neo-tree/neo-tree.nvim" },
{ "akinsho/toggleterm.nvim" },
{ "nvimtools/none-ls.nvim" },
{ "rebelot/heirline.nvim" },
-- == Examples of Adding Plugins ==
"andweeb/presence.nvim",
{
"ray-x/lsp_signature.nvim",
event = "BufRead",
config = function() require("lsp_signature").setup() end,
},
-- == Examples of Overriding Plugins ==
-- customize alpha options
{
"goolord/alpha-nvim",
opts = function(_, opts)
-- customize the dashboard header
opts.section.header.val = {
" █████ ███████ ████████ ██████ ██████",
"██ ██ ██ ██ ██ ██ ██ ██",
"███████ ███████ ██ ██████ ██ ██",
"██ ██ ██ ██ ██ ██ ██ ██",
"██ ██ ███████ ██ ██ ██ ██████",
" ",
" ███  ██ ██  ██ ██ ███  ███",
" ████  ██ ██  ██ ██ ████  ████",
" ██ ██  ██ ██  ██ ██ ██ ████ ██",
" ██  ██ ██  ██  ██  ██ ██  ██  ██",
" ██   ████   ████   ██ ██      ██",
}
return opts
end,
},
-- You can disable default plugins as follows:
{ "max397574/better-escape.nvim", enabled = false },
-- You can also easily customize additional setup of plugins that is outside of the plugin's setup call
{
"L3MON4D3/LuaSnip",
config = function(plugin, opts)
require "astronvim.plugins.configs.luasnip"(plugin, opts) -- include the default astronvim config that calls the setup call
-- add more custom luasnip configuration such as filetype extend or custom snippets
local luasnip = require "luasnip"
luasnip.filetype_extend("javascript", { "javascriptreact" })
end,
},
{
"windwp/nvim-autopairs",
config = function(plugin, opts)
require "astronvim.plugins.configs.nvim-autopairs"(plugin, opts) -- include the default astronvim config that calls the setup call
-- add more custom autopairs configuration such as custom rules
local npairs = require "nvim-autopairs"
local Rule = require "nvim-autopairs.rule"
local cond = require "nvim-autopairs.conds"
npairs.add_rules(
{
Rule("$", "$", { "tex", "latex" })
-- don't add a pair if the next character is %
:with_pair(cond.not_after_regex "%%")
-- don't add a pair if the previous character is xxx
:with_pair(
cond.not_before_regex("xxx", 3)
)
-- don't move right when repeat character
:with_move(cond.none())
-- don't delete if the next character is xx
:with_del(cond.not_after_regex "xx")
-- disable adding a newline when you press <cr>
:with_cr(cond.none()),
},
-- disable for .vim files, but it work for another filetypes
Rule("a", "a", "-vim")
)
end,
},
}
+13 -13
View File
@@ -13,9 +13,9 @@ set $term alacritty
set $menu wofi --term '$term'
### Output configuration
output DP-3 pos 1920 0 res 1920x1080@60Hz
output HDMI-A-1 pos 0 0 res 1920x1080@60Hz
output DP-2 pos 3840 0 res 1920x1080@60Hz
output DP-3 pos 3840 0 res 1920x1080@59Hz
output HDMI-A-1 pos 0 0 res 1920x1080@59Hz
output DP-2 pos 1920 0 res 1920x1080@60Hz
### Wallpaper
output HDMI-A-1 bg ~/.wallpaper/.wallpaper.png fill
@@ -25,22 +25,22 @@ output DP-3 bg ~/.wallpaper/.wallpaper.png fill
### Workspace binding
## DP-3 bindings
workspace 1 output DP-3
workspace 2 output DP-3
workspace 4 output DP-3
workspace 5 output DP-3
workspace 1 output DP-2
workspace 2 output DP-2
workspace 4 output DP-2
workspace 5 output DP-2
## HDMI-A-1 bindings
workspace 3 output HDMI-A-1
workspace 9 output HDMI-A-1
## DP-2 bindings
workspace 6 output DP-2
workspace 7 output DP-2
workspace 8 output DP-2
workspace 6 output DP-3
workspace 7 output DP-3
workspace 8 output DP-3
### Colour options
set $bg #24283b
set $bg #24283b
set $bg-inactive #323232
set $bg-urgent #000000
set $text #eeeeec
@@ -198,8 +198,8 @@ bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
bindsym XF86AudioPlay exec playerctl play-pause
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
bindsym XF86MonBrightnessUp exec brightnessctl set +5%
bindsym XF86MonBrightnessDown exec brightnessctl set 5%-
bindsym XF86MonBrightnessUp exec light -A 5
bindsym XF86MonBrightnessDown exec light -U 5
### Lock the screen
bindsym $mod+Ctrl+q 'swaylock -f -i /home/wyatt/.wallpaper/.wallpaper_lock.png'
Generated
+93 -516
View File
@@ -1,50 +1,5 @@
{
"nodes": {
"aagl": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
],
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1789138122,
"narHash": "sha256-mh+ZiGCtHAo0xIi1yaNjHsftfnlWz9JiYwHCyT16yIE=",
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"rev": "d82d6d6f66caf4b63fb154e62fad83c627874127",
"type": "github"
},
"original": {
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"type": "github"
}
},
"caitsith": {
"inputs": {
"flake-schemas": "flake-schemas",
"nixpkgs": [
"nur",
"nixpkgs"
],
"rust-overlay": "rust-overlay_2"
},
"locked": {
"lastModified": 1789283312,
"narHash": "sha256-Sv/2AyUTydH5d4eNk/ej1lHD1rpDvNjiB5Y3hmg/EGk=",
"ref": "refs/heads/master",
"rev": "31673a5c64497a0f40487d51820d3738dec13d60",
"revCount": 24,
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/caitsith.git"
},
"original": {
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/caitsith.git"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
@@ -52,37 +7,16 @@
]
},
"locked": {
"lastModified": 1783744694,
"narHash": "sha256-2cp6N3rrwnGYLTx9l6N+NI+kwrCWxvJUbj5WJhvB29A=",
"lastModified": 1757432263,
"narHash": "sha256-qHn+/0+IOz5cG68BZUwL9BV3EO/e9eNKCjH3+N7wMdI=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "c3e90c89649b07d1a96e4b9dd6cd0d6e44b91a74",
"rev": "1fef4404de4d1596aa5ab2bd68078370e1b9dcdb",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "nix-darwin-26.05",
"repo": "nix-darwin",
"type": "github"
}
},
"darwin_2": {
"inputs": {
"nixpkgs": [
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1786845137,
"narHash": "sha256-oQFip+v0luP8NIxJzmiW4Wu8bILsbFWom5l0zonl8hQ=",
"owner": "LnL7",
"repo": "nix-darwin",
"rev": "4cff07de74b50e64bdd68cd4e722ab5b6b35ee48",
"type": "github"
},
"original": {
"owner": "LnL7",
"ref": "nix-darwin-25.05",
"repo": "nix-darwin",
"type": "github"
}
@@ -90,11 +24,11 @@
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
@@ -103,82 +37,6 @@
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_4": {
"flake": false,
"locked": {
"lastModified": 1777699697,
"narHash": "sha256-Eg9b/rq/ECYwNwEXs5i9wHyhxNI0JrYx2srdI2uZMaQ=",
"ref": "refs/heads/main",
"rev": "382052b74656a369c5408822af3f2501e9b1af81",
"revCount": 94,
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
},
"original": {
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
}
},
"flake-schemas": {
"locked": {
"lastModified": 1780327564,
"narHash": "sha256-HiRPtA0spK+Dkgbhz/1zW9glXxNVB+L4Rj2VYmdawb8=",
"rev": "6cc9bd98891b1fc6bb2b8cb3277df8bc72799ca6",
"revCount": 149,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.5.0/019e83cf-9af3-78b1-ac5b-70e68ad1efe1/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A"
}
},
"flake-schemas_2": {
"locked": {
"lastModified": 1780327564,
"narHash": "sha256-HiRPtA0spK+Dkgbhz/1zW9glXxNVB+L4Rj2VYmdawb8=",
"rev": "6cc9bd98891b1fc6bb2b8cb3277df8bc72799ca6",
"revCount": 149,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.5.0/019e83cf-9af3-78b1-ac5b-70e68ad1efe1/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
@@ -197,135 +55,28 @@
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat_2",
"nixpkgs": [
"go-overlay",
"nixpkgs"
]
},
"locked": {
"lastModified": 1788267358,
"narHash": "sha256-nt+lUqYVpc9Y6JeMd2WmXzCDojasdadKo0mWcluvY2Y=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "27555e2624241fb116b49095df4caaee85a25691",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"git-hooks_2": {
"inputs": {
"flake-compat": "flake-compat_3",
"nixpkgs": [
"nur",
"go-overlay",
"nixpkgs"
]
},
"locked": {
"lastModified": 1788267358,
"narHash": "sha256-nt+lUqYVpc9Y6JeMd2WmXzCDojasdadKo0mWcluvY2Y=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "27555e2624241fb116b49095df4caaee85a25691",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"go-overlay": {
"ghostty": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"git-hooks": "git-hooks",
"nixpkgs": "nixpkgs"
"nixpkgs": "nixpkgs",
"zig": "zig",
"zon2nix": "zon2nix"
},
"locked": {
"lastModified": 1789623807,
"narHash": "sha256-pqmP+T+fR2+MDen+ro2iF7mdH7S83AUuvNZwVDl3jUk=",
"owner": "purpleclay",
"repo": "go-overlay",
"rev": "b19679b19d64dc29b96caf07e3282c250611ac57",
"lastModified": 1759330332,
"narHash": "sha256-ZKyOgOOm9Itjbc5xi89xMtw+cnnOFfl79zndPMTzKpU=",
"owner": "ghostty-org",
"repo": "ghostty",
"rev": "a5aff0e347b0016e2735d4ec4b4cdca96b5438d1",
"type": "github"
},
"original": {
"owner": "purpleclay",
"repo": "go-overlay",
"owner": "ghostty-org",
"repo": "ghostty",
"type": "github"
}
},
"go-overlay_2": {
"inputs": {
"flake-utils": "flake-utils_2",
"git-hooks": "git-hooks_2",
"nixpkgs": [
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1789623807,
"narHash": "sha256-pqmP+T+fR2+MDen+ro2iF7mdH7S83AUuvNZwVDl3jUk=",
"owner": "purpleclay",
"repo": "go-overlay",
"rev": "b19679b19d64dc29b96caf07e3282c250611ac57",
"type": "github"
},
"original": {
"owner": "purpleclay",
"repo": "go-overlay",
"type": "github"
}
},
"hildibrand": {
"inputs": {
"flake-schemas": "flake-schemas_2",
"nixpkgs": [
"nur",
"nixpkgs"
],
"rust-overlay": "rust-overlay_3"
},
"locked": {
"lastModified": 1789887932,
"narHash": "sha256-ryX9MgESeWwjpFMgxlaF97FgtaRyfIELgFLEeUR8xLQ=",
"ref": "refs/heads/master",
"rev": "70288a728cc39eb5f390f71ae24d4a58763216b1",
"revCount": 14,
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/hildibrand.git"
},
"original": {
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/hildibrand.git"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
@@ -333,56 +84,20 @@
]
},
"locked": {
"lastModified": 1789267039,
"narHash": "sha256-LWiBv9yAYFi2LPbUhDGHPGKYskJQjj2fw12OlyO1uQo=",
"lastModified": 1758463745,
"narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "ec172013fa62135f58fb58dd17ae9651e8f39727",
"rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-26.05",
"ref": "release-25.05",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1789867870,
"narHash": "sha256-sOag/7DTqw4tXLI7UxjrZxPGV+dlTe6zFtJn0VSkgFM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "d2a22a3659a6ae99847ea9176114f6957b8ac62e",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"mnw": {
"locked": {
"lastModified": 1780772958,
"narHash": "sha256-VKKe8r4pwCGWZ3Yr9CPN129R4S3CKLSrlYqdYz3vKpM=",
"owner": "Gerg-L",
"repo": "mnw",
"rev": "0871dbf63a53610c95db04439ed8ea4d6ec9c160",
"type": "github"
},
"original": {
"owner": "Gerg-L",
"repo": "mnw",
"type": "github"
}
},
"nix-flatpak": {
"locked": {
"lastModified": 1739444422,
@@ -401,240 +116,69 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1789286504,
"narHash": "sha256-eiEK7cKZORNEvX0GeF3RtNEF/JXhgf2RqSp3230q13E=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ef34387ddd751e1ab8857adf4676492d32eb24ec",
"type": "github"
"lastModified": 1748189127,
"narHash": "sha256-zRDR+EbbeObu4V2X5QCd2Bk5eltfDlCr5yvhBwUT6pY=",
"rev": "7c43f080a7f28b2774f3b3f43234ca11661bf334",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/25.05/nixos-25.05.802491.7c43f080a7f2/nixexprs.tar.xz"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
"type": "tarball",
"url": "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1789749394,
"narHash": "sha256-cFTsMQz8Hzn8MT49oaeLSHg62tE86NykugCWkeM2ypk=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "cf9d2fb3e50fa1cd5114c47505ea9177f7ff5f49",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-26.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1789749394,
"narHash": "sha256-cFTsMQz8Hzn8MT49oaeLSHg62tE86NykugCWkeM2ypk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "cf9d2fb3e50fa1cd5114c47505ea9177f7ff5f49",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-26.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1787498568,
"narHash": "sha256-FoOSoBG7tEvOlGRTpWnVdY506Ner4y7r7UYO3OGgmE8=",
"rev": "56c02bc00adcf003215cc4bd996d6efaf4cff188",
"lastModified": 1758360447,
"narHash": "sha256-XDY3A83bclygHDtesRoaRTafUd80Q30D/Daf9KSG6bs=",
"rev": "8eaee110344796db060382e15d3af0a9fc396e0e",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1060451.56c02bc00adc/nixexprs.tar.xz"
"url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre864002.8eaee1103447/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
}
},
"nixpkgs_5": {
"nixpkgs_3": {
"locked": {
"lastModified": 1744536153,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
"owner": "NixOS",
"lastModified": 1759281824,
"narHash": "sha256-FIBE1qXv9TKvSNwst6FumyHwCRH3BlWDpfsnqRDCll0=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"rev": "5b5be50345d4113d04ba58c444348849f5585b4a",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"owner": "nixos",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": {
"inputs": {
"caitsith": "caitsith",
"darwin": "darwin_2",
"go-overlay": "go-overlay_2",
"hildibrand": "hildibrand",
"home-manager": "home-manager_2",
"nixpkgs": "nixpkgs_3",
"rust-overlay": "rust-overlay_4"
},
"quadlet-nix": {
"locked": {
"lastModified": 1789887979,
"narHash": "sha256-ln0cOIfvEFNd4IdVbiYfdtxS01E5npnstm0YCTOxpJY=",
"ref": "refs/heads/master",
"rev": "39c33599b191ae2d595b3cc38e8ad4bf2766cd89",
"revCount": 99,
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/nur.git"
},
"original": {
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/nur.git"
}
},
"nvf": {
"inputs": {
"flake-compat": "flake-compat_4",
"mnw": "mnw",
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1789854559,
"narHash": "sha256-6GDssza3F+ukpUujSuTL50vW5AHaoG+4vjsDgWqRyeQ=",
"owner": "notashelf",
"repo": "nvf",
"rev": "85bf39cd0409ad8a7fa5b3ad0d29e89e9da97a0e",
"lastModified": 1758631655,
"narHash": "sha256-EGeZ963L7xsNAY7snvP1JHQe7LWLVCM6f49+PzWjhEE=",
"owner": "SEIAROTg",
"repo": "quadlet-nix",
"rev": "2ebe01b175e2e1e6de3f172d23f0c3b88713eec9",
"type": "github"
},
"original": {
"owner": "notashelf",
"repo": "nvf",
"owner": "SEIAROTg",
"repo": "quadlet-nix",
"type": "github"
}
},
"root": {
"inputs": {
"aagl": "aagl",
"darwin": "darwin",
"go-overlay": "go-overlay",
"ghostty": "ghostty",
"home-manager": "home-manager",
"nix-flatpak": "nix-flatpak",
"nixpkgs": "nixpkgs_2",
"nur": "nur",
"nvf": "nvf",
"rust-overlay": "rust-overlay_5"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"aagl",
"nixpkgs"
]
},
"locked": {
"lastModified": 1785476452,
"narHash": "sha256-/CXwCFPS41rb/JI2VitKCgVK6V5E6/sfw5ke3B9zyVQ=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "6ef009bf4c4873cdc1a621826722bdea7c03e62c",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_2": {
"inputs": {
"nixpkgs": [
"nur",
"caitsith",
"nixpkgs"
]
},
"locked": {
"lastModified": 1789196581,
"narHash": "sha256-yJr1Bt4fKkKIpPYbsKGqJ0VFdoDnURgRwuffmBQ2WzY=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "228ecefb6329d5a531b77b46b581a2f0c26ee056",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_3": {
"inputs": {
"nixpkgs": [
"nur",
"hildibrand",
"nixpkgs"
]
},
"locked": {
"lastModified": 1789802016,
"narHash": "sha256-QVFfArbYaQMGK4dFV+5RUL72Ci+hNHVhaF/R9qJfDhs=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "26a71e661c47bd21a05d06fec749f3f7c75e9d12",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_4": {
"inputs": {
"nixpkgs": [
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1789802016,
"narHash": "sha256-QVFfArbYaQMGK4dFV+5RUL72Ci+hNHVhaF/R9qJfDhs=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "26a71e661c47bd21a05d06fec749f3f7c75e9d12",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_5": {
"inputs": {
"nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1789802016,
"narHash": "sha256-QVFfArbYaQMGK4dFV+5RUL72Ci+hNHVhaF/R9qJfDhs=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "26a71e661c47bd21a05d06fec749f3f7c75e9d12",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
"nixpkgs": "nixpkgs_3",
"quadlet-nix": "quadlet-nix"
}
},
"systems": {
@@ -652,18 +196,51 @@
"type": "github"
}
},
"systems_2": {
"zig": {
"inputs": {
"flake-compat": [
"ghostty",
"flake-compat"
],
"flake-utils": [
"ghostty",
"flake-utils"
],
"nixpkgs": [
"ghostty",
"nixpkgs"
]
},
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"lastModified": 1748261582,
"narHash": "sha256-3i0IL3s18hdDlbsf0/E+5kyPRkZwGPbSFngq5eToiAA=",
"owner": "mitchellh",
"repo": "zig-overlay",
"rev": "aafb1b093fb838f7a02613b719e85ec912914221",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"owner": "mitchellh",
"repo": "zig-overlay",
"type": "github"
}
},
"zon2nix": {
"inputs": {
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1758405547,
"narHash": "sha256-WgaDgvIZMPvlZcZrpPMjkaalTBnGF2lTG+62znXctWM=",
"owner": "jcollie",
"repo": "zon2nix",
"rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245",
"type": "github"
},
"original": {
"owner": "jcollie",
"repo": "zon2nix",
"rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245",
"type": "github"
}
}
+28 -190
View File
@@ -1,24 +1,18 @@
{
description = "Wyatt's nix configuration suite";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05";
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.6.0";
home-manager = {
url = "github:nix-community/home-manager/release-26.05";
url = "github:nix-community/home-manager/release-25.05";
inputs.nixpkgs.follows = "nixpkgs";
};
darwin = {
url = "github:lnl7/nix-darwin/nix-darwin-26.05";
url = "github:lnl7/nix-darwin/nix-darwin-25.05";
inputs.nixpkgs.follows = "nixpkgs";
};
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";
};
nvf.url = "github:notashelf/nvf";
nur.url = "git+https://scm.wyattjmiller.com/wymiller/nur.git";
ghostty.url = "github:ghostty-org/ghostty";
quadlet-nix.url = "github:SEIAROTg/quadlet-nix";
};
outputs = inputs @ {
@@ -27,48 +21,28 @@
nix-flatpak,
darwin,
home-manager,
rust-overlay,
go-overlay,
aagl,
nur,
nvf,
ghostty,
quadlet-nix,
...
}: let
userName = "wyatt";
userEmail = "wyatt@wyattjmiller.com";
extraSpecialArgs = {
inherit userName userEmail nur nvf;
};
myOverlays = { ... }: {
nixpkgs.overlays = [
rust-overlay.overlays.default
go-overlay.overlays.default
aagl.overlays.default
self.common.overlays
];
# use this variable to take inputs and use them as arguments in your modules, this will be the common one
customArgs = {
inherit userName userEmail ghostty quadlet-nix;
};
in {
meta = import ./meta;
formatter = nixpkgs.lib.genAttrs [
"x86_64-linux"
"aarch64-darwin"
] (system: nixpkgs.legacyPackages.${system}.nixfmt);
common = {
overlays = import ./modules/common/overlays.nix;
};
# Primary laptop - MacBook Pro (2023, M3)
darwinConfigurations."sephiroth" = darwin.lib.darwinSystem {
system = "aarch64-darwin";
specialArgs = {
inherit userName userEmail;
specialArgs = customArgs // {
hostname = "sephiroth";
role = "workstation";
role = "devel";
};
modules = [
myOverlays
./modules/common
./modules/machine/sephiroth
@@ -76,9 +50,9 @@
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = false; role = "workstation"; };
# home-manager.extraSpecialArgs = extraSpecialArgs;
home-manager.backupFileExtension = "bak";
home-manager.extraSpecialArgs = customArgs // {
inherit home-manager;
};
home-manager.users.${userName} = import ./home;
}
];
@@ -87,13 +61,11 @@
# Primary desktop computer
nixosConfigurations."cloud" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail aagl nur;
specialArgs = customArgs // {
hostname = "cloud";
role = "workstation";
role = "devel";
};
modules = [
myOverlays
nix-flatpak.nixosModules.nix-flatpak
./modules/common
./modules/machine/cloud
@@ -102,8 +74,9 @@
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = true; role = "workstation"; };
home-manager.backupFileExtension = "bak";
home-manager.extraSpecialArgs = customArgs // {
inherit home-manager;
};
home-manager.users.${userName}.imports = [
./home
];
@@ -114,13 +87,11 @@
# Apartment appliance server
nixosConfigurations."valefor" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail;
specialArgs = customArgs // {
hostname = "valefor";
role = "server";
};
modules = [
myOverlays
./modules/common
./modules/machine/valefor
@@ -128,8 +99,9 @@
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = true; role = "workstation"; };
home-manager.backupFileExtension = "bak";
home-manager.extraSpecialArgs = customArgs // {
inherit home-manager;
};
home-manager.users.${userName}.imports = [
./home
];
@@ -140,159 +112,25 @@
# Storage, status, game, and media server
nixosConfigurations."ixion" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail;
specialArgs = customArgs // {
hostname = "ixion";
role = "server";
};
# modules = [
# myOverlays
# nix-flatpak.nixosModules.nix-flatpak
# nix-ld.nixosModules.nix-ld
# ./modules/nixos/hardware-configuration.nix
# ./modules/nix-core.nix
# ./modules/nixos/configuration.nix
# ./modules/host-users.nix
#
# home-manager.nixosModules.home-manager
# {
# home-manager.useGlobalPkgs = true;
# home-manager.useUserPackages = true;
# home-manager.extraSpecialArgs = extraSpecialArgs;
# home-manager.backupFileExtension = "bak";
# home-manager.users.${userName}.imports = [
# ./home
# ];
# }
# ];
};
# Vintage story server
nixosConfigurations."thancred" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail nur;
hostname = "thancred";
role = "server";
};
modules = [
myOverlays
quadlet-nix.nixosModules.quadlet
./modules/common
./modules/machine/thancred
./modules/machine/ixion
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.extraSpecialArgs = customArgs;
home-manager.users.${userName}.imports = [
./home
];
}
];
};
# Vintage story server - for a friend
nixosConfigurations."raubahn" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail nur;
hostname = "raubahn";
role = "server";
};
modules = [
myOverlays
./modules/common
./modules/machine/raubahn
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
];
}
];
};
# Matrix and Mastodon server
nixosConfigurations."yshtola" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail nur;
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
];
}
];
};
# Discord bot server
nixosConfigurations."estinien" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail nur;
hostname = "estinien";
role = "server";
};
modules = [
myOverlays
./modules/common
./modules/machine/estinien
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 nvf;
isNixOS = false;
role = "workstation";
};
modules = [
{
nixpkgs.overlays = [
rust-overlay.overlays.default
go-overlay.overlays.default
self.common.overlays
];
}
./home
];
};
};
}
+1 -2
View File
@@ -1,7 +1,6 @@
{ pkgs, ...}: {
{...}: {
programs.atuin = {
enable = true;
enableFishIntegration = true;
package = pkgs.atuinLatest;
};
}
+4 -28
View File
@@ -1,7 +1,6 @@
{
pkgs,
lib,
isNixOS ? true,
...
}: {
programs.firefox = {
@@ -10,7 +9,7 @@
};
programs.chromium = {
enable = pkgs.stdenv.isLinux && isNixOS;
enable = pkgs.stdenv.isLinux;
package = pkgs.ungoogled-chromium.override {
enableWideVine = true;
commandLineArgs = [
@@ -41,37 +40,14 @@
id = "cjpalhdlnbpafiamejdnhcphjbkeiagm";
sha256 = "sha256:0pdh1v0vx1d5vnl1zh7nbk6j1fh4k4hhwp1ljs203icn306lahsn";
# sha256 = lib.fakeSha256;
version = "1.67.0";
version = "1.64.0";
})
(createChromiumExtension {
# bitwarden
id = "nngceckbapebfimnlniiiahkandclblb";
sha256 = "sha256:0jxk3cqmgd5qj8hnw7s0k5s4bfrcmr0w0rckp3x0bmng07azw4gi";
version = "2025.10.0";
})
(createChromiumExtension {
# react dev tools
id = "fmkadmapgofadopljbjfkapdkoienihi";
sha256 = "sha256:01vy0x7hdkj4g3m2l4kw5rwldhhpkcxmd2miy5rj2dzxdnbchw2z";
version = "7.0.1";
})
(createChromiumExtension {
# wappalyzer
id = "gppongmhjkpfnbhagpmjfkannfbllamg";
sha256 = "sha256:1mi1wpm714r8yp0zh0yg6kccnld36rj4xb8j4y0c18y9176vc6wx";
version = "6.10.86";
})
(createChromiumExtension {
# obsidian web clipper
id = "cnjifjpddelmedmihgijeibhnjfabmlf";
sha256 = "sha256:0bp6g63g9hk2xbq054lpf5hzwmn73jzh3hswyjfp9r7yqj83mzgy";
version = "0.12.0";
})
(createChromiumExtension {
# dark reader
id = "eimadpbcbfnmbkopoojfekhnkhdbieeh";
sha256 = "sha256:06a9dz589i1da519kivzp7bljksl2xxsd151y7ww0hx28jd1694b";
version = "4.9.113";
# sha256 = lib.fakeSha256;
version = "2025.5.0";
})
];
};
+48 -29
View File
@@ -1,44 +1,63 @@
{ lib
, pkgs
, userName
, ...
{
lib,
pkgs,
userName,
userEmail,
ghostty,
...
}: 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
{
_module.args = {
inherit dirs;
};
in {
# Import sub modules
imports = [
imports = map (module: import module {inherit lib pkgs dirs userName userEmail ghostty;}) [
./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
];
home = lib.mkMerge [
{
username = userName;
homeDirectory =
if pkgs.stdenv.isDarwin
then "/Users/${userName}"
else "/home/${userName}";
# Home Manager needs a bit of information about you and the
# paths it should manage.
home = {
username = userName;
homeDirectory =
if pkgs.stdenv.isDarwin
then "/Users/${userName}"
else "/home/${userName}";
stateVersion = "24.11";
}
sessionVariables = {
XDG_CURRENT_DESKTOP = "sway";
XDG_SESSION_TYPE = "wayland";
XDG_SESSION_DESKTOP="sway";
XDG_CONFIG_HOME = "$HOME/.config";
XDG_CACHE_HOME = "$HOME/.cache";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_STATE_HOME = "$HOME/.local/state";
NIXOS_OZONE_WL = "1";
};
(lib.mkIf pkgs.stdenv.isLinux {
pointerCursor = {
gtk.enable = true;
package = pkgs.catppuccin-cursors.mochaDark;
name = "catppuccin-mocha-dark-cursors";
size = 22;
};
})
];
pointerCursor = lib.mkIf pkgs.stdenv.isLinux {
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;
+2 -12
View File
@@ -13,15 +13,11 @@
userEmail = userEmail;
extraConfig = {
commit.gpgsign = true;
gpg.format = "ssh";
gpg.ssh.allowedSignersFile = "~/.config/git/allowed_signers";
init.defaultBranch = "master";
merge.tool = "nvimdiff";
mergetool.keepBackup = false;
push.autoSetupRemote = true;
pull.rebase = false;
user.signingkey = "~/.ssh/id_ed25519_sk.pub";
merge.tool = "nvimdiff";
mergetool.keepBackup = false;
};
ignores = [
@@ -35,7 +31,6 @@
a = "add";
ap = "add -p";
br = "branch";
cb = "checkout -b";
co = "checkout";
st = "status -sb";
status = "status -sb";
@@ -45,11 +40,6 @@
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
View File
@@ -1,32 +0,0 @@
{ 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
View File
@@ -1,14 +0,0 @@
{ 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}
'';
}
+1 -3
View File
@@ -1,10 +1,8 @@
{ pkgs, ... }: {
{...}: {
programs.lazygit = {
enable = true;
package = pkgs.lazygitLatest;
settings = {
gui.skipDiscardChangeWarning = true;
gui.theme = {
activeBorderColor = ["#a6e3a1" "bold"];
inactiveBorderColor = ["#a6adc8"];
+9 -106
View File
@@ -1,111 +1,14 @@
{ nvf, ... }: {
imports = [
nvf.homeManagerModules.default
];
programs.nvf = {
{dirs, ...}: {
programs.neovim = {
enable = true;
settings = {
vim = {
viAlias = true;
vimAlias = true;
lsp.enable = true;
treesitter.enable = true;
autocomplete.nvim-cmp.enable = true;
autopairs.nvim-autopairs.enable = true;
defaultEditor = true;
vimAlias = true;
};
languages = {
nix.enable = true;
rust.enable = true;
go.enable = true;
python.enable = true;
markdown.enable = true;
css.enable = true;
scss.enable = true;
tsx.enable = true;
typescript = {
enable = true;
lsp.servers = [ "typescript-language-server" "deno" ];
};
};
utility.surround.enable = true;
telescope.enable = true;
mini.icons.enable = true;
notes.obsidian = {
enable = true;
setupOpts.workspaces = [
{
name = "personal";
path = "~/Documents/Obsidian/notes";
}
];
};
terminal.toggleterm = {
enable = true;
lazygit = {
enable = true;
mappings.open = "<leader>gg";
};
};
filetree.neo-tree.enable = true;
binds.whichKey.enable = true;
clipboard = {
enable = true;
registers = "unnamedplus";
providers = {
wl-copy.enable = true;
xclip.enable = true;
};
};
lsp.null-ls = {
enable = true;
setupOpts = {};
};
lsp.trouble.enable = true;
theme = {
enable = true;
name = "catppuccin";
style = "mocha";
transparent = false;
};
dashboard.alpha.enable = true;
statusline.lualine.enable = true;
tabline.nvimBufferline.enable = true;
keymaps = [
{
key = "<C-s>";
mode = "n";
action = "<cmd>w<CR>";
silent = true;
noremap = true;
}
{ key = "<leader>o"; mode = "n"; action = "<cmd>Neotree toggle<CR>"; silent = true; noremap = true; }
{ key = "<leader>tf"; mode = "n"; action = "<cmd>ToggleTerm direction=float<CR>"; silent = true; noremap = true; }
{ key = "<leader>th"; mode = "n"; action = "<cmd>ToggleTerm direction=horizontal<CR>"; silent = true; noremap = true; }
{ key = "<leader>tv"; mode = "n"; action = "<cmd>ToggleTerm direction=vertical<CR>"; silent = true; noremap = true; }
{ key = "<leader>n"; mode = "n"; action = "<nop>"; desc = "Notes"; silent = true; noremap = true; }
{ key = "<leader>nd"; mode = "n"; action = "<cmd>Obsidian today<CR>"; desc = "Obsidian daily note"; silent = true; noremap = true; }
{ key = "<leader>nf"; mode = "n"; action = "<cmd>Obsidian quick_switch<CR>"; desc = "Obsidian find note"; silent = true; noremap = true; }
{ key = "<leader>ns"; mode = "n"; action = "<cmd>Obsidian search<CR>"; desc = "Obsidian search notes"; silent = true; noremap = true; }
{ key = "<leader>nn"; mode = "n"; action = "<cmd>Obsidian new<CR>"; desc = "Obsidian new note"; silent = true; noremap = true; }
{ key = "<leader>ff"; mode = "n"; action = "<cmd>Telescope find_files<CR>"; silent = true; noremap = true; }
{ key = "<leader>fD"; mode = "n"; action = "<cmd>lua require('telescope.builtin').find_files({ cwd = vim.fn.input('Dir: ', vim.loop.cwd() .. '/', 'dir') })<CR>"; silent = true; noremap = true; }
{ key = "<leader>fg"; mode = "n"; action = "<cmd>Telescope live_grep<CR>"; silent = true; noremap = true; }
{ key = "<leader>/"; mode = "n"; action = "<cmd>Telescope current_buffer_fuzzy_find<CR>"; silent = true; noremap = true; }
{ key = "<leader>gb"; mode = "n"; action = "<cmd>Telescope git_branches<CR>"; silent = true; noremap = true; }
{ key = "<leader>gc"; mode = "n"; action = "<cmd>Telescope git_commits<CR>"; silent = true; noremap = true; }
{ key = "<leader>gl"; mode = "n"; action = "<cmd>Telescope git_bcommits<CR>"; silent = true; noremap = true; }
{ key = "<leader>gr"; mode = "n"; action = "<cmd>Telescope git_status<CR>"; silent = true; noremap = true; }
];
};
xdg.configFile = {
nvim = {
onChange = "nvim --headless -c 'if exists(\":LuaCacheClear\") | :LuaCacheClear' +quitall";
source = dirs.defaults + /nvim;
};
};
}
+24 -14
View File
@@ -1,20 +1,11 @@
{
lib,
pkgs,
...
}: {
imports = [
../atuin.nix
../shell.nix
../git.nix
../starship.nix
../eza.nix
../neovim.nix
../bat.nix
];
nixpkgs.config.allowUnfree = true;
home.packages = with pkgs; [
yazi # terminal file manager
# archives
zip
xz
@@ -22,21 +13,40 @@
p7zip
# utils
yazi
tmux
lazygit
bottom
ripgrep
jq
yq-go
fzf
fh
aria2
gnupg
yt-dlp
obsidian
vscode
weechat
inetutils
# misc
cowsay
file
which
tree
gnutar
gnupg
zoxide
babelfish
# language-specific package managers
nodejs
cargo
python3
# nix specific stuff
nixd
deadnix
alejandra
statix
];
}
+7 -4
View File
@@ -1,7 +1,10 @@
{ lib, pkgs, ... }:
lib.mkIf pkgs.stdenv.isDarwin {
home.packages = with pkgs; [
{
pkgs,
lib,
...
}: {
home.packages = lib.mkIf pkgs.stdenv.isDarwin (with pkgs; [
discord
ollama
];
]);
}
+9 -9
View File
@@ -1,11 +1,11 @@
{ lib, role ? "workstation", ... }:
{
imports =
[
./common.nix
./darwin.nix
./linux.nix
]
++ lib.optional (role == "workstation") ./workstation.nix
++ lib.optional (role == "server") ./server.nix;
pkgs,
lib,
...
}: {
imports = [
./common.nix
./darwin.nix
./linux.nix
];
}
+14 -15
View File
@@ -1,21 +1,20 @@
{ lib, pkgs, isNixOS ? true, ... }:
lib.mkIf pkgs.stdenv.isLinux {
home.packages = with pkgs; [
{
pkgs,
lib,
...
}: {
home.packages = lib.mkIf pkgs.stdenv.isLinux (with pkgs; [
imv
xdg-utils
] ++ lib.optionals isNixOS [
betterdiscordctl
vesktop
thunar
thunar-volman
thunar-shares-plugin
thunar-vcs-plugin
thunar-archive-plugin
thunar-media-tags-plugin
xdg-utils
mcrcon
xfce.thunar
pavucontrol
zathura
godot
aseprite
gpu-screen-recorder
gpu-screen-recorder-gtk
inetutils
easyeffects
];
# ungoogled-chromium
]);
}
-4
View File
@@ -1,4 +0,0 @@
{ pkgs, ... }: {
home.packages = [
];
}
-37
View File
@@ -1,37 +0,0 @@
{
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
];
}
+6 -30
View File
@@ -1,11 +1,9 @@
{pkgs, lib, ...}: {
programs.fish = {
enable = true;
shellInit = ''
if test -d $HOME/.krew/bin
set -gx PATH $HOME/.krew/bin $PATH
end
'';
# initExtra = ''
# export PATH="$PATH:$HOME/bin:$HOME/.local/bin:$HOME/go/bin"
# '';
shellAliases = {
# ls aliases
@@ -31,6 +29,7 @@
body = ''
set memes \
"Crazy? I was crazy once. They locked me in a room. A rubber room. A rubber room with rats. And rats make me crazy." \
"Daddy, chill!" \
"What the hell is even that?!" \
"Road work ahead? Yeah, I sure hope it does!" \
"Look at all those chickens!" \
@@ -39,35 +38,12 @@
"I didn't get no sleep cause of y'all, y'all not gone get any sleep cause of me!" \
"This is the dollar store, how good can it be?" \
"That was legitness" \
"Deez nuts" \
"I wanna be a cowboy baby" \
"Can I get a waffle? Can I please get a waffle?" \
"I'm lesbian. I thought you were American." \
"You gotta give 'em that 'hawk tuah' and spit on that thang!" \
"We don't do that here..." \
"What are those?! They are my crocs..." \
"It's an avocado... Thanks!" \
"I am once again asking for your financial support" \
"Is that a weed?" \
"No, this is Patrick!" \
"Come ride, heroes, ride" \
"Away with the tide" \
"Concede your mind unto the fiend" \
"Darkness come, rend the shield of light" \
"The sun is setting, darkness taking over - a date with chaos and you're dressed to the nines" \
"Now kneel overdweller, your lord commands, there's no salvation for the sons of man" \
"Snap click clank whirr whizz wham boom!" \
"Rohs an kyn ala na" \
"If you’ve brought your ivory standard, I’ll 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 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!"
"We don't do that here..."
set choose_meme (random)"%"(count $memes)
set choose_meme $memes[(math $choose_meme"+1")]
+1 -8
View File
@@ -1,7 +1,6 @@
{
lib,
pkgs,
nur,
...
}: let
dirs = {
@@ -16,12 +15,6 @@
hash = "sha256-ZDFbI69ECsUTjbhlw2kHRufZbQMu+FQSMmncCJ5pagg=";
};
in {
imports = [
nur.homeManagerModules.swaytreesave
];
programs.swaytreesave.enable = if pkgs.stdenv.isLinux then true else false;
wayland.windowManager.sway = {
enable = pkgs.stdenv.isLinux;
extraOptions = []; # Extra arguments to pass into sway. If sway goes haywire, we might need something in here
@@ -153,6 +146,6 @@ in {
programs.waybar = {
enable = pkgs.stdenv.isLinux;
systemd.enable = false;
systemd.enable = true;
};
}
+6 -1
View File
@@ -1,4 +1,4 @@
{ pkgs, ... }: {
{ lib, pkgs, ghostty, ... }: {
programs.alacritty = {
enable = pkgs.stdenv.isLinux;
settings = {
@@ -103,4 +103,9 @@
programs.kitty = {
enable = false; # TODO: to enable later
};
home.packages = if pkgs.stdenv.isLinux then
[ ghostty.packages.${pkgs.system}.default ]
else
[ ];
}
+14 -110
View File
@@ -1,17 +1,11 @@
{
{
config,
lib,
pkgs,
aagl,
nur,
...
}: let
cfg = config.gaming;
in {
imports = [
aagl.nixosModules.default
];
options.gaming = {
steam = {
enable = lib.mkEnableOption "Steam gaming platform";
@@ -68,24 +62,6 @@ in {
};
};
vkbasalt = {
enable = lib.mkEnableOption "vkBasalt/ReShade/GShade post processing shaders";
};
mangohud = {
enable = lib.mkEnableOption "OpenGL/Vulkan overlay tool shown in games presenting FPS, CPU/GPU/memory utilization, load, etc.";
};
proton = {
enable = lib.mkEnableOption "Proton compatibility tool management";
manager = lib.mkOption {
type = lib.types.enum ["protonplus" "protonup-qt"];
default = "protonup-qt";
description = "Graphical Proton compatibility tool manager to install";
};
};
lutris = {
enable = lib.mkEnableOption "Lutris game manager and launcher";
package = lib.mkOption {
@@ -103,7 +79,14 @@ in {
};
};
# Compatibility layers for Lutris
compatibility = {
protonSupport = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable Proton-like compatibility layers for Lutris";
};
extraTools = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
@@ -125,58 +108,11 @@ in {
ffxiv = {
enable = lib.mkEnableOption "Final Fantasy XIV and it's accompanied (unofficial) launcher";
};
# TODO: when aagl gets it's unified launcher all finished/in a stable state, transition to that launcher
aagl = {
anime-game-launcher = {
enable = lib.mkEnableOption "Genshin Impact launcher (legacy)";
};
honkers-railway-launcher = {
enable = lib.mkEnableOption "Honkai: Star Rail launcher";
};
honkers-launcher = {
enable = lib.mkEnableOption "Honkai: Impact 3rd launcher";
};
wavey-launcher = {
enable = lib.mkEnableOption "Wuthering Waves launcher";
};
sleepy-launcher = {
enable = lib.mkEnableOption "Zenless Zone Zero (ZZZ) launcher";
};
};
vintage-story = {
enable = lib.mkEnableOption "Vintage Story client and server";
};
archon = {
enable = lib.mkEnableOption "Archon from NUR";
};
opengoal = {
enable = lib.mkEnableOption "OpenGOAL, a game engine used in a certain PlayStation 2 franchise";
};
};
config = let
agl = cfg.aagl;
nurPkgs = import "${nur.outPath}/pkgs" { inherit pkgs; };
protonManager = {
protonplus = pkgs.protonplus;
protonup-qt = pkgs.protonup-qt;
}.${cfg.proton.manager};
in {
config = {
programs.steam = lib.mkIf cfg.steam.enable {
enable = true;
extraPackages = with pkgs; [
gamescope
gamemode
];
remotePlay.openFirewall = cfg.steam.firewall.remotePlay;
localNetworkGameTransfers.openFirewall = cfg.steam.firewall.localNetworkGameTransfers;
};
@@ -203,26 +139,6 @@ in {
];
};
programs.anime-game-launcher = lib.mkIf agl.anime-game-launcher.enable {
enable = true;
};
programs.honkers-railway-launcher = lib.mkIf agl.honkers-railway-launcher.enable {
enable = true;
};
programs.honkers-launcher = lib.mkIf agl.honkers-launcher.enable {
enable = true;
};
programs.wavey-launcher = lib.mkIf agl.wavey-launcher.enable {
enable = true;
};
programs.sleepy-launcher = lib.mkIf agl.sleepy-launcher.enable {
enable = true;
};
environment.systemPackages =
(lib.optionals cfg.lutris.enable (
[cfg.lutris.package] ++
@@ -230,26 +146,14 @@ in {
cfg.lutris.wine.package
pkgs.winetricks
]) ++
(lib.optionals cfg.lutris.compatibility.protonSupport [
pkgs.protonup-ng
pkgs.protonup-qt
]) ++
cfg.lutris.compatibility.extraTools ++
cfg.lutris.extraPackages
)) ++
(lib.optionals cfg.proton.enable [protonManager]) ++
(lib.optionals cfg.minecraft.enable [pkgs.prismlauncher]) ++
(lib.optionals cfg.ffxiv.enable [pkgs.xivlauncher pkgs.fflogs]) ++
(lib.optionals cfg.vintage-story.enable [nurPkgs.vintage-story]) ++
(lib.optionals cfg.archon.enable [nurPkgs.archon]) ++
(lib.optionals cfg.vkbasalt.enable [pkgs.vkbasalt pkgs.vkbasalt-cli]) ++
(lib.optionals cfg.mangohud.enable [pkgs.mangohud]) ++
(lib.optionals (cfg.vkbasalt.enable || cfg.mangohud.enable) [pkgs.goverlay pkgs.mesa-demos pkgs.vulkan-tools]);
nix.settings = let
inherit agl;
in (lib.mkIf
(agl.anime-game-launcher.enable || agl.honkers-railway-launcher.enable || agl.honkers-launcher.enable || agl.wavey-launcher.enable || agl.sleepy-launcher.enable)
{
substituters = [ "https://ezkea.cachix.org" ];
trusted-public-keys = [ "ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI=" ];
}
);
(lib.optionals cfg.ffxiv.enable [pkgs.xivlauncher]);
};
}
-8
View File
@@ -7,11 +7,3 @@ Licensed by the Mozilla Public License v2
## Synopsis
This is the directory that holds shared configuration files amongst computers that I own. They are called by the root `flake.nix` file.
Here's a quick synopsis of each file:
- core: Sane Nix options that I set for myself
- environment: Core packages and environment variables to be set and installed
- fonts: Fonts and icons that are to be installed
- overlays: Customized packages tailored to my needs
- users: Users to be set on my system
-3
View File
@@ -8,9 +8,6 @@
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
nixpkgs.config.permittedInsecurePackages = [
"mbedtls-2.28.10"
];
nix.package = pkgs.nix;
+5 -2
View File
@@ -1,9 +1,12 @@
{ ... }: {
{
pkgs,
lib,
...
}: {
imports = [
./core.nix
./environment.nix
./fonts.nix
# ./overlays.nix
./users.nix
];
}
+1
View File
@@ -13,6 +13,7 @@
systemd
lshw
dmidecode
nix-ld
]) ++
lib.optionals pkgs.stdenv.isDarwin (with pkgs; [
# nothing here, yet ;)
+1 -5
View File
@@ -6,14 +6,10 @@
fonts.packages = with pkgs;
[
noto-fonts
noto-fonts-color-emoji
noto-fonts-emoji
liberation_ttf
noto-fonts-cjk-sans
monaspace
]
++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);
environment.systemPackages = with pkgs; [
adwaita-icon-theme
];
}
-62
View File
@@ -1,62 +0,0 @@
{ pkgs, ... }: {
programs.nix-ld = {
enable = true;
libraries = with pkgs;
[
acl
attr
bzip2
dbus
expat
fontconfig
freetype
fuse3
icu
libnotify
libsodium
libssh
libunwind
libusb1
libuuid
nspr
nss
stdenv.cc.cc
util-linux
zlib
zstd
pipewire
cups
libxkbcommon
pango
mesa
libdrm
libglvnd
libpulseaudio
atk
cairo
alsa-lib
at-spi2-atk
at-spi2-core
gdk-pixbuf
glib
gtk3
libGL
libappindicator-gtk3
vulkan-loader
xorg.libX11
xorg.libXScrnSaver
xorg.libXcomposite
xorg.libXcursor
xorg.libXdamage
xorg.libXext
xorg.libXfixes
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXtst
xorg.libxcb
xorg.libxkbfile
xorg.libxshmfence
];
};
}
-128
View File
@@ -1,128 +0,0 @@
final: prev: let
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_latest;
rustc = rust_latest;
};
in {
lazygitLatest = prev.lazygit.overrideAttrs (_: rec {
version = "0.61.0";
src = prev.fetchFromGitHub {
owner = "jesseduffield";
repo = "lazygit";
rev = "v${version}";
hash = "sha256-G7JulCK9WUVWbp1V7lYuM3fehCdn1cNAJHYjr3aKDvQ=";
};
vendorHash = null;
subPackages = [ "." ];
ldflags = [
"-X main.version=${version}"
"-X main.buildSource=nix"
];
});
atuinLatest = (prev.atuin.override {
rustPlatform = myRustPlatform;
}).overrideAttrs (oldAttrs: rec {
version = "18.13.6";
src = prev.fetchFromGitHub {
owner = "atuinsh";
repo = "atuin";
rev = "v${version}";
hash = "sha256-yAw+ty6FUnFbiRTdAe2QQHzj6uU24fZ/bEIXcHl/thg=";
};
cargoDeps = myRustPlatform.fetchCargoVendor {
# name = "atuin-${version}-vendor.tar.gz";
inherit src;
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"
export XDG_DATA_HOME="$TMPDIR/.local/share"
export XDG_STATE_HOME="$TMPDIR/.local/state"
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"
];
});
}
-178
View File
@@ -1,178 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.desktop;
defaultWaylandPackages = with pkgs; [
brightnessctl
cliphist
foot
grim
libnotify
mako
networkmanagerapplet
playerctl
polkit_gnome
pavucontrol
rofi
slurp
waybar
wl-clipboard
xdg-utils
];
defaultSwayPackages =
defaultWaylandPackages
++ (with pkgs; [
pulseaudio
swayidle
swaylock
wmenu
]);
resolvedDisplayManager =
if cfg.displayManager != "auto"
then cfg.displayManager
else if cfg.gnome.enable
then "gdm"
else if cfg.xfce.enable
then "lightdm"
else "none";
in {
imports = [./xdg.nix];
options.desktop = {
displayManager = lib.mkOption {
type = lib.types.enum ["auto" "none" "gdm" "lightdm" "ly"];
default = "auto";
description = ''
Display manager to enable. In auto mode, GDM is used when GNOME is
enabled, LightDM is used when XFCE is enabled, and no display manager
is enabled for compositor-only configurations.
'';
};
gnome.enable = lib.mkEnableOption "the vanilla GNOME desktop environment";
xfce.enable = lib.mkEnableOption "the vanilla XFCE desktop environment";
sway = {
enable = lib.mkEnableOption "the Sway Wayland compositor";
extraPackages = lib.mkOption {
type = with lib.types; listOf package;
default = defaultSwayPackages;
defaultText = lib.literalExpression ''
with pkgs; [
brightnessctl
cliphist
foot
grim
libnotify
mako
networkmanagerapplet
playerctl
polkit_gnome
pulseaudio
pavucontrol
rofi
slurp
swayidle
swaylock
waybar
wl-clipboard
wmenu
xdg-utils
]
'';
description = "Packages installed alongside Sway.";
};
};
hyprland = {
enable = lib.mkEnableOption "the Hyprland Wayland compositor";
extraPackages = lib.mkOption {
type = with lib.types; listOf package;
default = defaultWaylandPackages;
defaultText = lib.literalExpression ''
with pkgs; [
brightnessctl
cliphist
foot
grim
libnotify
mako
networkmanagerapplet
playerctl
polkit_gnome
pavucontrol
rofi
slurp
waybar
wl-clipboard
xdg-utils
]
'';
description = ''
Packages installed alongside Hyprland. Hyprlock and Hypridle are
enabled separately so their NixOS integration, including PAM, is
configured as well.
'';
};
};
};
config = lib.mkMerge [
(lib.mkIf cfg.gnome.enable {
services.desktopManager.gnome.enable = true;
})
(lib.mkIf cfg.xfce.enable {
services.xserver = {
enable = true;
desktopManager.xfce.enable = true;
};
})
(lib.mkIf cfg.sway.enable {
programs.sway = {
enable = true;
wrapperFeatures.gtk = true;
extraPackages = cfg.sway.extraPackages;
extraSessionCommands = ''
export XDG_SESSION_TYPE=wayland
export XDG_SESSION_DESKTOP=sway
export NIXOS_OZONE_WL=1
'';
};
})
(lib.mkIf cfg.hyprland.enable {
programs = {
hyprland.enable = true;
hyprlock.enable = lib.mkDefault true;
};
environment.systemPackages = cfg.hyprland.extraPackages;
})
(lib.mkIf (resolvedDisplayManager == "gdm") {
services.displayManager.gdm.enable = true;
})
(lib.mkIf (resolvedDisplayManager == "lightdm") {
services.xserver = {
enable = true;
displayManager.lightdm.enable = true;
};
})
(lib.mkIf (resolvedDisplayManager == "ly") {
services.displayManager.ly.enable = true;
})
];
}
-42
View File
@@ -1,42 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.desktop;
needsGtkPortal = cfg.xfce.enable || cfg.hyprland.enable;
usesPortal = cfg.gnome.enable || cfg.xfce.enable || cfg.sway.enable || cfg.hyprland.enable;
in {
config = lib.mkMerge [
# GNOME and Sway configure their own portals in NixOS. XFCE needs a
# portal; Hyprland benefits from GTK as a fallback to its native one.
(lib.mkIf needsGtkPortal {
xdg.portal = {
enable = true;
extraPortals = [pkgs.xdg-desktop-portal-gtk];
};
})
(lib.mkIf (cfg.sway.enable || needsGtkPortal) {
xdg.portal.config.common.default = ["gtk"];
})
(lib.mkIf (usesPortal && config.services.gnome.gnome-keyring.enable) {
xdg.portal.config.common."org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
})
(lib.mkIf (cfg.sway.enable && config.services.gnome.gnome-keyring.enable) {
xdg.portal.config.sway."org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
})
# A per-desktop config takes precedence over Hyprland's packaged config,
# so include its native portal whenever adding a Secret preference.
(lib.mkIf (cfg.hyprland.enable && config.services.gnome.gnome-keyring.enable) {
xdg.portal.config.hyprland = {
default = ["hyprland" "gtk"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
})
];
}
+5 -5
View File
@@ -40,14 +40,10 @@ in {
config = mkIf cfg.enable (mkMerge [
{
environment.systemPackages = with pkgs; [
glxinfo
vulkan-tools
mesa-demos
];
hardware.graphics = {
enable = true;
enable32Bit = true;
};
}
(mkIf (cfg.gpuVendor == "nvidia") {
@@ -66,6 +62,9 @@ in {
(mkIf (cfg.gpuVendor == "amd") {
services.xserver.videoDrivers = ["amdgpu"];
hardware.graphics.extraPackages = with pkgs; [
amdvlk
];
environment.systemPackages = with pkgs; [
radeontop
];
@@ -84,6 +83,7 @@ in {
environment.sessionVariables = {
MOZ_ENABLE_WAYLAND = "1";
QT_QPA_PLATFORM = "wayland";
SDL_VIDEODRIVER = "wayland";
};
})
+2 -6
View File
@@ -10,10 +10,6 @@ I like Final Fantasy, alright? Isn't everyone supposed to have a hobby?
These are named after Final Fantasy VII characters.
### Servers/Network Infrastructure (bare metal)
### Servers/Network Infrastructure
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).
These are named after Final Fantasy summons.
+32 -55
View File
@@ -1,8 +1,8 @@
{
config,
lib,
pkgs,
userName,
aagl,
...
}: let
flatpakPackages = [
@@ -18,15 +18,13 @@
in {
imports = [
(import ../../apps/flatpak.nix {
inherit lib pkgs flatpakPackages userName aagl;
inherit lib pkgs flatpakPackages;
})
../../apps/gaming.nix
../../apps/appimage.nix
../../desktop
../../graphics
../../pwrMgmt
../../networking/core.nix
../../security/yubico.nix
../../sound/pipewire.nix
../../sound/shairport.nix
../../sound/focusrite.nix
@@ -35,20 +33,7 @@ in {
];
# Enable flakes for NixOS
nix.settings = {
experimental-features = ["nix-command" "flakes"];
substituters = [
"https://attic.home.wyattjmiller.com/wyatt"
];
trusted-substituters = [
"https://attic.home.wyattjmiller.com/wyatt"
];
trusted-public-keys = [
"wyatt:KBM2U2fVUomYUdMsxeNp0MDrUrCU5BECZHLF72o8TOI="
];
};
nix.settings.experimental-features = ["nix-command" "flakes"];
# Custom kernel/boot stuff
boot = {
@@ -71,28 +56,22 @@ in {
grim
slurp
playerctl
# light - UNMAINTAINED, brightnessctl is the replacement
light
brightnessctl
wttrbar
cliphist
xdg-desktop-portal-gtk
xdg-utils
flatpak-xdg-utils
desktop-file-utils
shared-mime-info
wl-clipboard
wl-clip-persist
ollama-rocm
newelle
vlc
];
# Enable Polkit
security.polkit.enable = true;
# Enable desktop support (sway)
desktop.sway.enable = true;
desktop.displayManager = "ly";
# Graphics module (../../graphics/default.nix)
graphics = {
enable = true;
@@ -110,29 +89,27 @@ in {
localNetworkGameTransfers = true;
};
};
vkbasalt.enable = true;
gamemode.enable = true;
gamescope.enable = true;
mangohud.enable = true;
proton = {
enable = true;
manager = "protonplus";
};
lutris = {
enable = true;
wine = {
enable = true;
package = pkgs.wine-staging;
};
compatibility = {
protonSupport = true;
};
extraPackages = with pkgs; [
gamemode
mangohud
];
};
ffxiv.enable = true;
archon.enable = true;
minecraft.enable = true;
vintage-story.enable = true;
};
# Power management (see ../../pwrMgmt/default.nix)
pwrMgmt = {
enable = true;
@@ -174,7 +151,7 @@ in {
};
# Add username to groups "wheel" and "video" - more may be added here later
users.users.${userName}.extraGroups = ["wheel" "video" "gamemode" "podman" "network" "libvirtd"];
users.users.${userName}.extraGroups = ["wheel" "video" "gamemode" "podman" "network"];
services = {
# Enable OpenSSH
@@ -193,26 +170,26 @@ in {
# AppImage support
appimage.enable = true;
# sched_ext userspace CPU scheduling stuff - idk
services.scx = {
enable = true;
scheduler = "scx_bpfland";
# XDG stuff
xdg = {
portal = {
enable = true;
config = {
sway = {
default = ["wlr" "gtk"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
common = {
default = ["gtk"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
};
extraPortals = with pkgs; [
xdg-desktop-portal-wlr
xdg-desktop-portal-gtk
];
};
};
programs.obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
obs-vaapi #optional AMD hardware acceleration
obs-gstreamer
obs-vkcapture
];
};
# Tailscale service
services.tailscale.enable = true;
system.stateVersion = "24.11";
}
-1
View File
@@ -2,6 +2,5 @@
imports = [
./configuration.nix
./hardware-configuration.nix
../../common/linker.nix
];
}
@@ -12,24 +12,24 @@
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "thunderbolt" "ahci" "usb_storage" "usbhid" "sd_mod"];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-amd"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-uuid/f8f39aae-61d2-437d-a8e1-01066bbb3c5c";
device = "/dev/disk/by-label/COMPUTER";
fsType = "xfs";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/B72F-087F";
device = "/dev/disk/by-label/BOOT";
fsType = "vfat";
options = ["fmask=0022" "dmask=0022"];
};
swapDevices = [
{device = "/dev/disk/by-uuid/6d6bcc02-20a9-4ae8-9c1e-5124fb2b2634";}
{device = "/dev/disk/by-label/SWAP";}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
-100
View File
@@ -1,100 +0,0 @@
{
pkgs,
userName,
nur,
...
}: let
hildibrand = nur.packages.${pkgs.stdenv.hostPlatform.system}.hildibrand;
in {
imports = [
../../pwrMgmt
../../networking/core.nix
];
# Enable flakes for NixOS
nix.settings.experimental-features = ["nix-command" "flakes"];
# Custom kernel/boot stuff
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# Set your timezone
time.timeZone = "America/Detroit";
# Enable OpenSSH
services.openssh.enable = true;
# 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;
};
network = {
firewall = {
enable = true;
};
networkManager.enable = true;
};
environment.systemPackages = [
hildibrand
];
systemd.services.hildibrand = {
description = "Hildibrand - trivia buzzer bot";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
Type = "simple";
User = userName;
WorkingDirectory = "/home/${userName}";
ExecStart = "${hildibrand}/bin/hildebrand";
Restart = "on-failure";
RestartSec = "5s";
};
};
# Add username to groups "wheel" and "video" - more may be added here later
users = {
users = {
${userName} = {
extraGroups = [ "wheel" "network" ];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFV9eSc9L+aJLoKoexq2f/jb5rpyZnhuGiyhS8YQAbaS wyatt@wyattjmiller.com"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WKvKnnYpTbzZHFEslOKyfiiMqWxhW3AfX6E7ACmYU wyatt@wyattjmiller.com"
];
};
};
};
services.fail2ban = {
enable = true;
package = pkgs.fail2ban;
maxretry = 5;
bantime = "3h";
bantime-increment = {
enable = true;
rndtime = "10m";
};
};
system.stateVersion = "24.11";
}
-6
View File
@@ -1,6 +0,0 @@
{ ... }: {
imports = [
./configuration.nix
./hardware-configuration.nix
];
}
@@ -1,32 +0,0 @@
# 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/498ce176-f090-46d8-96bf-9e6141cffa19";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/09A6-B803";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices =
[ { device = "/dev/disk/by-uuid/4a64a2ee-2b32-4e53-b00f-7b1f127162aa"; }
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}
+84
View File
@@ -0,0 +1,84 @@
{
pkgs,
userName,
...
}: {
imports = [
../../pwrMgmt
../../networking/core.nix
../../virtualization/podman.nix
../../virtualization/quadlet.nix
../../virtualization/hardware.nix
];
# Enable flakes for NixOS
nix.settings.experimental-features = ["nix-command" "flakes"];
# Custom kernel/boot stuff
boot = {
kernelPackages = pkgs.linuxPackages_latest;
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
};
# Enable Polkit
security.polkit.enable = true;
# Make sure Bluetooth is off!
hardware.bluetooth.enable = false;
# Set your timezone
time.timeZone = "America/Detroit";
# Power management module
pwrMgmt = {
enable = true;
cpuFreqGovernor = "performance";
powertop.enable = false;
};
# Podman module (see ../../virtualization/podman.nix)
podman = {
enable = true;
extraPackages = with pkgs; [
docker-credential-helpers
toolbox
cosign
crane
podman-tui
];
};
# Core networking module (see ../../networking/core.nix)
network = {
firewall.enable = true;
networkManager.enable = true;
};
programs = {
# Enable GnuPG
gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# Enable SUID wrappers (some programs need them)
mtr.enable = true;
};
users.users.${userName}.extraGroups = ["wheel" "video" "podman" "network"];
services = {
# Enable OpenSSH
openssh.enable = true;
};
# Install packages to be installed system-wide
environment.systemPackages = with pkgs; [
wireguard-tools
];
system.stateVersion = "25.05";
}
@@ -1,4 +1,4 @@
{ ... }: {
{...}: {
imports = [
./configuration.nix
./hardware-configuration.nix
@@ -0,0 +1,46 @@
# --- DO NOT USE ---
#
# this is copied from ../valefor/hardware-configuration.nix
# generate a new hardware-configuration.nix before using this!
#
# ------------------
#
# 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 + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/ff89bde1-4b33-4277-b649-b92700b2406c";
fsType = "xfs";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/3A4B-6866";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
-105
View File
@@ -1,105 +0,0 @@
{
pkgs,
userName,
nur,
...
}: {
imports = [
../../pwrMgmt
../../networking/core.nix
../../virtualization/podman.nix
];
# Enable flakes for NixOS
nix.settings.experimental-features = ["nix-command" "flakes"];
# Custom kernel/boot stuff
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# Set your timezone
time.timeZone = "America/Detroit";
# Enable OpenSSH
services.openssh.enable = true;
# 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;
};
network = {
firewall = {
enable = true;
tcpPorts = {
allowedPorts = [ 42420 ];
};
udpPorts = {
allowedPorts = [ 42420 ];
};
};
networkManager.enable = true;
};
environment.systemPackages = [
nur.packages.${pkgs.system}.vintage-story
];
systemd.services.vintagestory-server = {
description = "Vintage Story Server";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
Type = "simple";
User = userName;
WorkingDirectory = "/home/${userName}";
ExecStart = "${nur.packages.${pkgs.system}.vintage-story}/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" "network" ];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFV9eSc9L+aJLoKoexq2f/jb5rpyZnhuGiyhS8YQAbaS wyatt@wyattjmiller.com"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WKvKnnYpTbzZHFEslOKyfiiMqWxhW3AfX6E7ACmYU wyatt@wyattjmiller.com"
];
};
};
};
services.fail2ban = {
enable = true;
package = pkgs.fail2ban;
maxretry = 5;
bantime = "3h";
bantime-increment = {
enable = true;
rndtime = "10m";
};
};
system.stateVersion = "24.11";
}
-6
View File
@@ -1,6 +0,0 @@
{ ... }: {
imports = [
./configuration.nix
./hardware-configuration.nix
];
}
@@ -1,32 +0,0 @@
# 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/ec4c43ec-efcc-40ea-a4c8-411e60ee7c4e";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/140E-FE19";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices =
[ { device = "/dev/disk/by-uuid/547bbd78-85be-4d17-a519-c4a2a923bdab"; }
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}
-1
View File
@@ -2,7 +2,6 @@
environment.systemPackages = with pkgs; [
neovim
git
tailscale
];
environment.variables.EDITOR = "nvim";
-121
View File
@@ -1,121 +0,0 @@
{
pkgs,
userName,
nur,
...
}: {
imports = [
../../pwrMgmt
../../networking/core.nix
../../virtualization/podman.nix
];
# Enable flakes for NixOS
nix.settings.experimental-features = ["nix-command" "flakes"];
# Custom kernel/boot stuff
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# Set your timezone
time.timeZone = "America/Detroit";
# Enable OpenSSH
services.openssh.enable = true;
# 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;
};
network = {
firewall = {
enable = true;
tcpPorts = {
allowedPorts = [ 42420 ];
};
udpPorts = {
allowedPorts = [ 42420 ];
};
};
networkManager.enable = true;
};
environment.systemPackages = [
nur.packages.${pkgs.system}.vintage-story
];
systemd.services.vintagestory-server = {
description = "Vintage Story Server";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
Type = "simple";
User = userName;
WorkingDirectory = "/home/${userName}";
ExecStart = "${nur.packages.${pkgs.system}.vintage-story}/bin/vintagestory-server";
Restart = "on-failure";
RestartSec = "5s";
};
};
# Add username to groups "wheel" and "video" - more may be added here later
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";
}
-6
View File
@@ -1,6 +0,0 @@
{ ... }: {
imports = [
./configuration.nix
./hardware-configuration.nix
];
}
@@ -1,32 +0,0 @@
# 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";
}
-351
View File
@@ -1,351 +0,0 @@
{
nur,
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";
sableWeb = nur.packages.${pkgs.stdenv.hostPlatform.system}.sable-web;
sableConfig = pkgs.writeTextDir "config.json" (
builtins.toJSON {
defaultHomeserver = 0;
homeserverList = [ matrixFqdn ];
allowCustomHomeservers = false;
disableAccountSwitcher = false;
hideUsernamePasswordFields = false;
hashRouter = {
enabled = false;
basename = "/";
};
featuredCommunities = {
spaces = [
"#seventhdawn:chat.wyattjmiller.com"
];
rooms = [
"#general:chat.wyattjmiller.com"
"#gposeglams:chat.wyattjmiller.com"
"#lobby-vc:chat.wyattjmiller.com"
"#annoucements:chat.wyattjmiller.com"
];
};
}
);
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 = ''
@matrixEndpoints path \
/_matrix/* \
/_tuwunel/* \
/.well-known/matrix/*
handle @matrixEndpoints {
reverse_proxy 127.0.0.1:8008
}
@sableConfig path /config.json
handle @sableConfig {
root * ${sableConfig}
header Cache-Control "no-store"
file_server
}
handle {
root * ${sableWeb}
encode zstd gzip
try_files {path} /index.html
file_server {
precompressed br
}
header /assets/* Cache-Control "public, max-age=31536000, immutable"
header /sw.js Cache-Control "no-cache"
header /index.html Cache-Control "no-cache"
header Document-Policy "js-profiling"
}
'';
};
"${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";
}
@@ -1,35 +0,0 @@
# 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";
}
+2 -2
View File
@@ -1,12 +1,12 @@
# Power management modules
This directory houses my own custom defined power management settings. These are set in the machine-specific configurations (typically).
This directory houses my own custom defined power management settings as NixOS modules. These are set in the machine-specific configurations (typically).
## Examples
Given that this configuration is in the `machine/<hostname>` directory (where hostname is the name of the computer your configuring):
### Desktop configuration
### Desktop/server configuration
```nix
imports = [
-8
View File
@@ -1,8 +0,0 @@
{
...
}: let in {
security.pam.services = {
login.u2fAuth = true;
sudo.u2fAuth = true;
};
}
+1 -12
View File
@@ -1,17 +1,6 @@
# TODO: refactor into module
{ pkgs, ...}: {
{...}: {
services.pipewire = {
enable = true;
pulse.enable = true;
alsa = {
enable = true;
support32Bit = true;
};
};
environment.systemPackages = with pkgs; [
# helvum - UNMAINTAINED
crosspipe
];
}
+2 -11
View File
@@ -1,16 +1,7 @@
{ lib, pkgs, userName, ...}: {
{pkgs, ...}: {
services.shairport-sync = {
enable = pkgs.stdenv.isLinux;
openFirewall = pkgs.stdenv.isLinux;
# arguments = "-v -o pa";
};
systemd.services.shairport-sync = {
serviceConfig = {
User = lib.mkForce "${userName}";
};
environment = {
XDG_RUNTIME_DIR = "/run/user/1000";
};
arguments = "-v -o pw";
};
}
+7 -1
View File
@@ -40,7 +40,13 @@ Example:
};
```
To get a full, comprehensive list of what you can do with the podman module, please check out (podman.nix)[./podman.nix]!
To get a full, comprehensive list of what you can do with the podman module, please check out [podman.nix](./podman.nix)!
### Podman Quadlets
This is a wrapper around a project called [`quadlet-nix`](https://github.com/SEIAROTg/quadlet-nix), a way of defining systemd services as containers with Nix! Since I have existing services running inside of containers and don't want to risk breaking _everything_ that I have running, I figured this would be a safe, transitionary approach to handle this.
This is still a work-in-progress, check back soon on progress on this.
## Kubernetes
+1 -7
View File
@@ -1,10 +1,4 @@
{ pkgs, ... }: {
{...}: {
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
services.qemuGuest.enable = true;
services.spice-vdagentd.enable = true;
environment.systemPackages = with pkgs; [
qemu
quickemu
];
}
+47
View File
@@ -0,0 +1,47 @@
# ----------------------
# Wrapper for defining Quadlets in Nix via quadlet-nix
#
# Still WIP
# ----------------------
{
config,
lib,
...
}:
let
cfg = config.quadlet;
in {
options = {
quadlet = {
enable = lib.mkEnableOption "Enable Podman's Quadlet systemd integration";
autoUpdate = {
enable = lib.mkEnableOption "Enable the auto update mechanism";
calendar = lib.mkOption {
type = lib.types.str;
default = "*-*-* 03:30:00";
description = "When the auto update mechanism is triggered, the calendar option will tell the auto update when to start";
};
};
extraPackages = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
description = "Additional container-related packages to install (these likely will be installed with Podman though)";
};
};
};
config = lib.mkIf cfg.enable {
virtualisation.quadlet = {
enable = true;
autoUpdate = {
enable = cfg.autoUpdate.enable;
calendar = cfg.autoUpdate.calendar;
};
};
environment.systemPackages = cfg.extraPackages;
};
}