106 Commits

Author SHA1 Message Date
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
ad7f01e41e commit 2026-02-15 19:10:58 -05:00
c452ebff3c real commit this time 2026-02-15 19:05:42 -05:00
a1e71488d8 Revert "modified gaming apps"
This reverts commit 67fda15ca9.
2026-02-15 18:52:30 -05:00
45c8f7ec27 Revert "added hardware config"
This reverts commit 769ab6f72d.
2026-02-15 18:51:41 -05:00
67fda15ca9 modified gaming apps 2026-02-15 18:31:15 -05:00
769ab6f72d added hardware config 2026-02-15 22:49:56 +00:00
1769e583d8 created vs vm 2026-02-14 19:21:25 -05:00
2592a1cd72 update flake 2026-02-14 18:30:51 -05:00
6dbfc5805e updated flake to 25.11 2026-02-01 21:32:32 -05:00
1f9ff31234 added vintage story flake 2026-01-28 08:25:51 -05:00
be6cab1ab2 added sched_ext scx_bpfland scheduler 2026-01-24 22:33:48 -05:00
7f0fdbc6bb more hardware virtualization stuff being added in 2026-01-05 15:46:13 -05:00
e3b134e48a added swaytreesave flake, fixed manual import, fixed infinite recursion 2025-12-30 21:48:46 -05:00
0fa26e2840 flake update 2025-12-28 22:17:23 -05:00
7a3c83f088 add shell init path 2025-12-19 15:37:16 -05:00
adcd58dce9 Merge pull request 'Nixpkgs 25.11' (#5) from 25.11-move into master
Reviewed-on: #5
2025-12-18 16:36:17 -06:00
45ca395962 modified modules for nixos to build correctly 2025-12-16 17:59:40 -05:00
923cebd9c9 modified inputs to move over to 25.11 release 2025-12-16 15:35:47 -05:00
98ce7410c2 update flake 2025-12-14 18:15:48 -05:00
b7f65a6eeb modified hardware virt 2025-12-14 17:53:10 -05:00
70691c16e5 enabled nix-ld, related libraries 2025-12-13 17:22:38 -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
c81b48a0ee readme updates 2025-12-08 21:52:52 -05:00
75f08c16bc added adwaita fonts 2025-12-08 21:52:46 -05:00
4207b320c9 working? plus cleanup and fallbacks 2025-11-17 12:12:17 -05:00
14a0160309 added mangohud, vkbasalt as options to enable to apps/gaming module 2025-11-10 08:09:33 -05:00
43654c2946 added helvum to packages installed 2025-11-10 08:08:31 -05:00
8dd4513997 added zathura package 2025-11-08 17:26:05 -05:00
1d95ffb81a tweaked aagl a bit 2025-11-08 17:25:58 -05:00
c53db46ca7 Merge pull request 'AAGL' (#4) from anime-game-launcher into master
Reviewed-on: #4
2025-11-08 15:12:54 -06:00
c546e6242b Merge branch 'master' into anime-game-launcher 2025-11-08 15:12:38 -06:00
05bb811e42 added every launcher that aagl has to offer
added a todo comment that mentions the in-development unified launcher
2025-11-08 16:17:38 -05:00
7615d1a1d5 added browser extension 2025-11-06 22:17:54 -05:00
6561e37119 wip: still broken 2025-11-06 17:14:39 -05:00
9eea820f3b updated browser extensions 2025-11-03 20:59:55 -05:00
6024b77535 added aagl flake, implemeneted into gaming apps module 2025-11-02 10:25:27 -05:00
257fab9832 flake update 2025-11-01 18:46:26 -04: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
a73194fed9 Merge pull request 'Overlay a couple of packages' (#3) from nix-override-overlay into master
Reviewed-on: #3
2025-10-23 21:44:32 -05:00
0572cacd28 added ldflags to lazygit override 2025-10-23 10:36:27 -04:00
ecf728bc11 working rust package override
plus flake update :P
2025-10-22 19:45:10 -04:00
5a59f98ebc working overlay to get latest version of lazygit 2025-10-22 08:19:52 -04:00
e1d13065f8 added shell greetings 2025-10-21 13:04:18 -04:00
5ab19d093a testing 2025-10-21 08:33:25 -04:00
569141d227 flake update 2025-10-18 20:31:32 -04:00
48edbfdc4b shairport service working
systemd service works now ig
2025-10-18 20:31:22 -04:00
50c62a4d3f shairport working
heard some static noise when listening, maybe something can fix that?
2025-10-18 18:13:50 -04:00
f4b518f806 little sway update 2025-10-15 08:40:54 -04:00
7fffa45e4e updated mountpoints: cloud 2025-10-14 01:29:14 -04:00
a3c53820b1 added sleep inhibiting aliases to fish 2025-10-02 18:44:58 -04:00
8cbdeb4cdc Merge pull request 'Superuser bypass' (#2) from macos-superuser-bypass-refactor into master
Reviewed-on: #2
2025-10-02 08:59:47 -05:00
bfa957adcd flake update 2025-10-02 09:58:03 -04:00
50d22afef8 Merge branch 'master' into macos-superuser-bypass-refactor 2025-10-02 08:25:09 -04:00
29feb9223e fixed git config
i think i am reverting a false fix, idk
2025-09-21 11:55:46 -04:00
7bc7749f51 fixed focusrite module 2025-09-21 11:55:14 -04:00
93052529b8 modified things 2025-09-13 16:30:26 -04:00
faed026258 some formatting modifications 2025-09-04 14:05:36 -04:00
3af5061a79 system update 2025-08-27 11:31:11 -04:00
ddd3fb39e4 bulk of the refactor 2025-08-27 11:31:06 -04:00
65 changed files with 2257 additions and 868 deletions

20
defaults/.neoconf.json Normal file
View File

@@ -0,0 +1,20 @@
{
"neodev": {
"library": {
"enabled": true,
"plugins": true
}
},
"neoconf": {
"plugins": {
"lua_ls": {
"enabled": true
}
}
},
"lspconfig": {
"lua_ls": {
"Lua.format.enable": false
}
}
}

7
defaults/.stylua.toml Normal file
View File

@@ -0,0 +1,7 @@
column_width = 120
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 2
quote_style = "AutoPreferDouble"
call_parentheses = "None"
collapse_simple_statement = "Always"

View File

27
defaults/nvim/init.lua Normal file
View File

@@ -0,0 +1,27 @@
-- This file simply bootstraps the installation of Lazy.nvim and then calls other files for execution
-- This file doesn't necessarily need to be touched, BE CAUTIOUS editing this file and proceed at your own risk.
local lazypath = vim.env.LAZY or vim.fn.stdpath "data" .. "/lazy/lazy.nvim"
vim.api.nvim_set_keymap("v", "<sc-c>", '"+y', { noremap = true })
vim.api.nvim_set_keymap("n", "<sc-v>", 'l"+P', { noremap = true })
vim.api.nvim_set_keymap("v", "<sc-v>", '"+P', { noremap = true })
vim.api.nvim_set_keymap("c", "<sc-v>", '<C-o>l<C-o>"+<C-o>P<C-o>l', { noremap = true })
vim.api.nvim_set_keymap("i", "<sc-v>", '<ESC>l"+Pli', { noremap = true })
vim.api.nvim_set_keymap("t", "<sc-v>", '<C-\\><C-n>"+Pi', { noremap = true })
if not (vim.env.LAZY or (vim.uv or vim.loop).fs_stat(lazypath)) then
-- stylua: ignore
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
end
vim.opt.rtp:prepend(lazypath)
-- validate that lazy is available
if not pcall(require, "lazy") then
-- stylua: ignore
vim.api.nvim_echo({ { ("Unable to load lazy from: %s\n"):format(lazypath), "ErrorMsg" }, { "Press any key to exit...", "MoreMsg" } }, true, {})
vim.fn.getchar()
vim.cmd.quit()
end
require "lazy_setup"
require "polish"

View File

@@ -0,0 +1,67 @@
{
"AstroNvim": { "branch": "main", "commit": "bfa02306c91c53f9b5782103f530ff729d6fd5b3" },
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"LuaSnip": { "branch": "master", "commit": "03c8e67eb7293c404845b3982db895d59c0d1538" },
"aerial.nvim": { "branch": "master", "commit": "7e2615991cf110f6688112abcb45cf338248d1f6" },
"alpha-nvim": { "branch": "main", "commit": "41283fb402713fc8b327e60907f74e46166f4cfd" },
"astrocommunity": { "branch": "main", "commit": "18978b14446256e68eae39b3c7770d15dfc025bd" },
"astrocore": { "branch": "main", "commit": "e659ec1f23dd070fa9a68a78eab0675b7bf3e97d" },
"astrolsp": { "branch": "main", "commit": "10ca6399694baca87982eafb0871b386fa33cf80" },
"astrotheme": { "branch": "main", "commit": "41b7d8430a55fd771e41bd763af4c3fd1c2fc0b5" },
"astroui": { "branch": "main", "commit": "a96ee08273f8050025c9e5b40776b0f2808313fa" },
"better-escape.nvim": { "branch": "master", "commit": "f45b52f8f87792e8659526f23261ffe278a54be5" },
"catppuccin": { "branch": "main", "commit": "d97387aea8264f484bb5d5e74f2182a06c83e0d8" },
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
"cmp-dap": { "branch": "master", "commit": "ea92773e84c0ad3288c3bc5e452ac91559669087" },
"cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" },
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
"cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" },
"crates.nvim": { "branch": "main", "commit": "891063a2dc8471501b9742406a514be62a20c138" },
"csharpls-extended-lsp.nvim": { "branch": "master", "commit": "5a474b06743bb20a90191994457f5e62f444976b" },
"dressing.nvim": { "branch": "master", "commit": "71349f24c6e07b39f33600985843c289ca735308" },
"friendly-snippets": { "branch": "main", "commit": "00ebcaa159e817150bd83bfe2d51fa3b3377d5c4" },
"gitsigns.nvim": { "branch": "main", "commit": "0b04035bb7b3c83e999b9676e2fb46fd0aa9f910" },
"guess-indent.nvim": { "branch": "main", "commit": "6cd61f7a600bb756e558627cd2e740302c58e32d" },
"heirline.nvim": { "branch": "master", "commit": "0d797435e54645a5f98bad7ad6046aac1ef95c1e" },
"indent-blankline.nvim": { "branch": "master", "commit": "65e20ab94a26d0e14acac5049b8641336819dfc7" },
"lazy.nvim": { "branch": "main", "commit": "077102c5bfc578693f12377846d427f49bc50076" },
"lazydev.nvim": { "branch": "main", "commit": "491452cf1ca6f029e90ad0d0368848fac717c6d2" },
"lspkind.nvim": { "branch": "master", "commit": "cff4ae321a91ee3473a92ea1a8c637e3a9510aec" },
"luvit-meta": { "branch": "main", "commit": "ce76f6f6cdc9201523a5875a4471dcfe0186eb60" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "9ae570e206360e47d30b4c35a4550c165f4ea7b7" },
"mason-null-ls.nvim": { "branch": "main", "commit": "2b8433f76598397fcc97318d410e0c4f7a4bea6a" },
"mason-nvim-dap.nvim": { "branch": "main", "commit": "4ba55f9755ebe8297d92c419b90a946123292ae6" },
"mason.nvim": { "branch": "main", "commit": "c43eeb5614a09dc17c03a7fb49de2e05de203924" },
"mini.bufremove": { "branch": "main", "commit": "e6044aa28e61d4dd9ec86194d6f81743eced0c1c" },
"neo-tree.nvim": { "branch": "main", "commit": "8c75e8a2949cd6cd35525799200a8d34471ee9eb" },
"neoconf.nvim": { "branch": "main", "commit": "7ce69e831556861f3bd32a5678f0176618df8621" },
"neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" },
"none-ls.nvim": { "branch": "main", "commit": "a0fe586525eac4247d40076cdb2f1c2f55912171" },
"nui.nvim": { "branch": "main", "commit": "a0fd35fcbb4cb479366f1dc5f20145fd718a3733" },
"nvim-autopairs": { "branch": "master", "commit": "e38c5d837e755ce186ae51d2c48e1b387c4425c6" },
"nvim-cmp": { "branch": "main", "commit": "d818fd0624205b34e14888358037fb6f5dc51234" },
"nvim-colorizer.lua": { "branch": "master", "commit": "194ec600488f7c7229668d0e80bd197f3a2b84ff" },
"nvim-dap": { "branch": "master", "commit": "bc03b83c94d0375145ff5ac6a6dcf28c1241e06f" },
"nvim-dap-ui": { "branch": "master", "commit": "a5606bc5958db86f8d92803bea7400ee26a8d7e4" },
"nvim-lspconfig": { "branch": "master", "commit": "9c762dcd457d2ab99edb3f3433cea9865ded47ad" },
"nvim-nio": { "branch": "master", "commit": "a428f309119086dc78dd4b19306d2d67be884eee" },
"nvim-notify": { "branch": "master", "commit": "d333b6f167900f6d9d42a59005d82919830626bf" },
"nvim-treesitter": { "branch": "master", "commit": "63be47f203d3e9174fdac3872fb9766e5bcc5a11" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "34867c69838078df7d6919b130c0541c0b400c47" },
"nvim-ts-autotag": { "branch": "main", "commit": "dc5e1687ab76ee02e0f11c5ce137f530b36e98b3" },
"nvim-ts-context-commentstring": { "branch": "main", "commit": "6b5f95aa4d24f2c629a74f2c935c702b08dbde62" },
"nvim-ufo": { "branch": "main", "commit": "a5390706f510d39951dd581f6d2a972741b3fa26" },
"nvim-web-devicons": { "branch": "master", "commit": "e612de3d3a41a6b7be47f51e956dddabcbf419d9" },
"nvim-window-picker": { "branch": "main", "commit": "41cfaa428577c53552200a404ae9b3a0b5719706" },
"plenary.nvim": { "branch": "master", "commit": "a3e3bc82a3f95c5ed0d7201546d5d2c19b20d683" },
"promise-async": { "branch": "main", "commit": "38a4575da9497326badd3995e768b4ccf0bb153e" },
"resession.nvim": { "branch": "master", "commit": "cc819b0489938d03e4f3532a583354f0287c015b" },
"rustaceanvim": { "branch": "master", "commit": "047f9c9d8cd2861745eb9de6c1570ee0875aa795" },
"smart-splits.nvim": { "branch": "master", "commit": "66fda3a601a5b4c679656f15eb6ddd613c8d3216" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" },
"telescope.nvim": { "branch": "master", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
"todo-comments.nvim": { "branch": "main", "commit": "313b04e5b02d29ab9275c9295ff5e2b73921b0eb" },
"toggleterm.nvim": { "branch": "main", "commit": "48be57eaba817f038d61bbf64d2c597f578c0827" },
"vim-illuminate": { "branch": "master", "commit": "5eeb7951fc630682c322e88a9bbdae5c224ff0aa" },
"which-key.nvim": { "branch": "main", "commit": "6c1584eb76b55629702716995cca4ae2798a9cca" }
}

View File

@@ -0,0 +1,17 @@
-- AstroCommunity: import any community modules here
-- We import this file in `lazy_setup.lua` before the `plugins/` folder.
-- This guarantees that the specs are processed before any user plugins.
---@type LazySpec
return {
"AstroNvim/astrocommunity",
{ import = "astrocommunity.pack.lua" }, -- lua support
{ import = "astrocommunity.pack.rust" }, -- rust support
{ import = "astrocommunity.pack.markdown" }, -- markdown support
{ import = "astrocommunity.pack.nix" }, -- nix support
-- { import = "astrocommunity.pack.go "}, -- golang support
{ import = "astrocommunity.pack.fish" }, -- fish support
-- { import = "astrocommunity.pack.cs" }, -- csharp/dotnet support
-- import/override with your plugins folder
}

View File

@@ -0,0 +1,32 @@
require("lazy").setup({
{
"AstroNvim/AstroNvim",
version = "^4", -- Remove version tracking to elect for nighly AstroNvim
import = "astronvim.plugins",
opts = { -- AstroNvim options must be set here with the `import` key
mapleader = " ", -- This ensures the leader key must be configured before Lazy is set up
maplocalleader = ",", -- This ensures the localleader key must be configured before Lazy is set up
icons_enabled = true, -- Set to false to disable icons (if no Nerd Font is available)
pin_plugins = nil, -- Default will pin plugins when tracking `version` of AstroNvim, set to true/false to override
update_notifications = true, -- Enable/disable notification about running `:Lazy update` twice to update pinned plugins
},
},
{ import = "community" },
{ import = "plugins" },
} --[[@as LazySpec]], {
-- Configure any other `lazy.nvim` configuration options here
install = { colorscheme = { "astrotheme", "habamax" } },
ui = { backdrop = 100 },
performance = {
rtp = {
-- disable some rtp plugins, add more to your liking
disabled_plugins = {
"gzip",
"netrwPlugin",
"tarPlugin",
"tohtml",
"zipPlugin",
},
},
},
} --[[@as LazyConfig]])

View File

@@ -0,0 +1,72 @@
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
-- AstroCore provides a central place to modify mappings, vim options, autocommands, and more!
-- Configuration documentation can be found with `:h astrocore`
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
-- as this provides autocomplete and documentation while editing
---@type LazySpec
return {
"AstroNvim/astrocore",
---@type AstroCoreOpts
opts = {
-- Configure core features of AstroNvim
features = {
large_buf = { size = 1024 * 256, lines = 10000 }, -- set global limits for large files for disabling features like treesitter
autopairs = true, -- enable autopairs at start
cmp = true, -- enable completion at start
diagnostics_mode = 3, -- diagnostic mode on start (0 = off, 1 = no signs/virtual text, 2 = no virtual text, 3 = on)
highlighturl = true, -- highlight URLs at start
notifications = true, -- enable notifications at start
},
-- Diagnostics configuration (for vim.diagnostics.config({...})) when diagnostics are on
diagnostics = {
virtual_text = true,
underline = true,
},
-- vim options can be configured here
options = {
opt = { -- vim.opt.<key>
relativenumber = true, -- sets vim.opt.relativenumber
number = true, -- sets vim.opt.number
spell = false, -- sets vim.opt.spell
signcolumn = "yes", -- sets vim.opt.signcolumn to yes
wrap = false, -- sets vim.opt.wrap
},
g = { -- vim.g.<key>
-- configure global vim variables (vim.g)
-- NOTE: `mapleader` and `maplocalleader` must be set in the AstroNvim opts or before `lazy.setup`
-- This can be found in the `lua/lazy_setup.lua` file
},
},
-- Mappings can be configured through AstroCore as well.
-- NOTE: keycodes follow the casing in the vimdocs. For example, `<Leader>` must be capitalized
mappings = {
-- first key is the mode
n = {
-- second key is the lefthand side of the map
-- navigate buffer tabs
["]b"] = { function() require("astrocore.buffer").nav(vim.v.count1) end, desc = "Next buffer" },
["[b"] = { function() require("astrocore.buffer").nav(-vim.v.count1) end, desc = "Previous buffer" },
-- mappings seen under group name "Buffer"
["<Leader>bd"] = {
function()
require("astroui.status.heirline").buffer_picker(
function(bufnr) require("astrocore.buffer").close(bufnr) end
)
end,
desc = "Close buffer from tabline",
},
-- tables with just a `desc` key will be registered with which-key if it's installed
-- this is useful for naming menus
-- ["<Leader>b"] = { desc = "Buffers" },
-- setting a mapping to false will disable it
-- ["<C-S>"] = false,
},
},
},
}

View File

@@ -0,0 +1,114 @@
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
-- AstroLSP allows you to customize the features in AstroNvim's LSP configuration engine
-- Configuration documentation can be found with `:h astrolsp`
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
-- as this provides autocomplete and documentation while editing
---@type LazySpec
return {
"AstroNvim/astrolsp",
---@type AstroLSPOpts
opts = {
-- Configuration table of features provided by AstroLSP
features = {
codelens = true, -- enable/disable codelens refresh on start
inlay_hints = false, -- enable/disable inlay hints on start
semantic_tokens = true, -- enable/disable semantic token highlighting
},
-- customize lsp formatting options
formatting = {
-- control auto formatting on save
format_on_save = {
enabled = true, -- enable or disable format on save globally
allow_filetypes = { -- enable format on save for specified filetypes only
-- "go",
},
ignore_filetypes = { -- disable format on save for specified filetypes
-- "python",
},
},
disabled = { -- disable formatting capabilities for the listed language servers
-- disable lua_ls formatting capability if you want to use StyLua to format your lua code
-- "lua_ls",
},
timeout_ms = 1000, -- default format timeout
-- filter = function(client) -- fully override the default formatting function
-- return true
-- end
},
-- enable servers that you already have installed without mason
servers = {
-- "pyright"
},
-- customize language server configuration options passed to `lspconfig`
---@diagnostic disable: missing-fields
config = {
-- clangd = { capabilities = { offsetEncoding = "utf-8" } },
rust_analyzer = {
settings = {
['rust_analyzer'] = {
files = {
excludeDirs = ".direnv/",
},
},
},
},
},
-- customize how language servers are attached
handlers = {
-- a function without a key is simply the default handler, functions take two parameters, the server name and the configured options table for that server
-- function(server, opts) require("lspconfig")[server].setup(opts) end
-- the key is the server that is being setup with `lspconfig`
-- rust_analyzer = false, -- setting a handler to false will disable the set up of that language server
-- pyright = function(_, opts) require("lspconfig").pyright.setup(opts) end -- or a custom handler function can be passed
},
-- Configure buffer local auto commands to add when attaching a language server
autocmds = {
-- first key is the `augroup` to add the auto commands to (:h augroup)
lsp_codelens_refresh = {
-- Optional condition to create/delete auto command group
-- can either be a string of a client capability or a function of `fun(client, bufnr): boolean`
-- condition will be resolved for each client on each execution and if it ever fails for all clients,
-- the auto commands will be deleted for that buffer
cond = "textDocument/codeLens",
-- cond = function(client, bufnr) return client.name == "lua_ls" end,
-- list of auto commands to set
{
-- events to trigger
event = { "InsertLeave", "BufEnter" },
-- the rest of the autocmd options (:h nvim_create_autocmd)
desc = "Refresh codelens (buffer)",
callback = function(args)
if require("astrolsp").config.features.codelens then vim.lsp.codelens.refresh { bufnr = args.buf } end
end,
},
},
},
-- mappings to be set up on attaching of a language server
mappings = {
n = {
-- a `cond` key can provided as the string of a server capability to be required to attach, or a function with `client` and `bufnr` parameters from the `on_attach` that returns a boolean
gD = {
function() vim.lsp.buf.declaration() end,
desc = "Declaration of current symbol",
cond = "textDocument/declaration",
},
["<Leader>uY"] = {
function() require("astrolsp.toggles").buffer_semantic_tokens() end,
desc = "Toggle LSP semantic highlight (buffer)",
cond = function(client)
return client.supports_method "textDocument/semanticTokens/full" and vim.lsp.semantic_tokens ~= nil
end,
},
},
},
-- A custom `on_attach` function to be run after the default `on_attach` function
-- takes two parameters `client` and `bufnr` (`:h lspconfig-setup`)
on_attach = function(client, bufnr)
-- this would disable semanticTokensProvider for all clients
-- client.server_capabilities.semanticTokensProvider = nil
end,
},
}

View File

@@ -0,0 +1,37 @@
-- AstroUI provides the basis for configuring the AstroNvim User Interface
-- Configuration documentation can be found with `:h astroui`
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
-- as this provides autocomplete and documentation while editing
---@type LazySpec
return {
"AstroNvim/astroui",
---@type AstroUIOpts
opts = {
-- change colorscheme
colorscheme = "catppuccin",
-- AstroUI allows you to easily modify highlight groups easily for any and all colorschemes
highlights = {
init = { -- this table overrides highlights in all themes
-- Normal = { bg = "#000000" },
},
astrodark = { -- a table of overrides/changes when applying the astrotheme theme
-- Normal = { bg = "#000000" },
},
},
-- Icons can be configured throughout the interface
icons = {
-- configure the loading of the lsp in the status line
LSPLoading1 = "",
LSPLoading2 = "",
LSPLoading3 = "",
LSPLoading4 = "",
LSPLoading5 = "",
LSPLoading6 = "",
LSPLoading7 = "",
LSPLoading8 = "",
LSPLoading9 = "",
LSPLoading10 = "",
},
},
}

View File

@@ -0,0 +1,18 @@
return {
{
"catppuccin/nvim",
name = "catppuccin",
opts = {
dim_inactive = { enabled = true, percentage = 0.25 },
highlight_overrides = {
mocha = function(c)
return {
Normal = { bg = c.mantle },
Comment = { fg = "#7687a0" },
["@tag.attribute"] = { style = {} },
}
end,
},
},
},
}

View File

@@ -0,0 +1,5 @@
return {
{
'andweeb/presence.nvim',
}
}

View File

@@ -0,0 +1,39 @@
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
-- Customize Mason plugins
---@type LazySpec
return {
-- use mason-lspconfig to configure LSP installations
{
"williamboman/mason-lspconfig.nvim",
-- overrides `require("mason-lspconfig").setup(...)`
opts = {
ensure_installed = {
"lua_ls",
-- add more arguments for adding more language servers
},
},
},
-- use mason-null-ls to configure Formatters/Linter installation for null-ls sources
{
"jay-babu/mason-null-ls.nvim",
-- overrides `require("mason-null-ls").setup(...)`
opts = {
ensure_installed = {
"stylua",
-- add more arguments for adding more null-ls sources
},
},
},
{
"jay-babu/mason-nvim-dap.nvim",
-- overrides `require("mason-nvim-dap").setup(...)`
opts = {
ensure_installed = {
"python",
-- add more arguments for adding more debuggers
},
},
},
}

View File

@@ -0,0 +1,24 @@
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
-- Customize None-ls sources
---@type LazySpec
return {
"nvimtools/none-ls.nvim",
opts = function(_, opts)
-- opts variable is the default configuration table for the setup function call
-- local null_ls = require "null-ls"
-- Check supported formatters and linters
-- https://github.com/nvimtools/none-ls.nvim/tree/main/lua/null-ls/builtins/formatting
-- https://github.com/nvimtools/none-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics
-- Only insert new sources, do not replace the existing ones
-- (If you wish to replace, use `opts.sources = {}` instead of the `list_insert_unique` function)
opts.sources = require("astrocore").list_insert_unique(opts.sources, {
-- Set a formatter
-- null_ls.builtins.formatting.stylua,
-- null_ls.builtins.formatting.prettier,
})
end,
}

View File

@@ -0,0 +1,15 @@
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
-- Customize Treesitter
---@type LazySpec
return {
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"lua",
"vim",
-- add more arguments for adding more treesitter parsers
},
},
}

View File

@@ -0,0 +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 {
-- == 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,
},
}

View File

@@ -0,0 +1,18 @@
if true then return end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
-- This will run last in the setup process and is a good place to configure
-- things like custom filetypes. This just pure lua so anything that doesn't
-- fit in the normal config locations above can go here
-- Set up custom filetypes
vim.filetype.add {
extension = {
foo = "fooscript",
},
filename = {
["Foofile"] = "fooscript",
},
pattern = {
["~/%.config/foo/.*"] = "fooscript",
},
}

6
defaults/nvim/neovim.yml Normal file
View File

@@ -0,0 +1,6 @@
---
base: lua51
globals:
vim:
any: true

View File

@@ -0,0 +1,8 @@
std = "neovim"
[rules]
global_usage = "allow"
if_same_then_else = "allow"
incorrect_standard_library_use = "allow"
mixed_table = "allow"
multiple_statements = "allow"

View File

@@ -13,9 +13,9 @@ set $term alacritty
set $menu wofi --term '$term'
### Output configuration
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
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
### 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-2
workspace 2 output DP-2
workspace 4 output DP-2
workspace 5 output DP-2
workspace 1 output DP-3
workspace 2 output DP-3
workspace 4 output DP-3
workspace 5 output DP-3
## HDMI-A-1 bindings
workspace 3 output HDMI-A-1
workspace 9 output HDMI-A-1
## DP-2 bindings
workspace 6 output DP-3
workspace 7 output DP-3
workspace 8 output DP-3
workspace 6 output DP-2
workspace 7 output DP-2
workspace 8 output DP-2
### Colour options
set $bg #24283b
set $bg #24283b
set $bg-inactive #323232
set $bg-urgent #000000
set $text #eeeeec
@@ -215,8 +215,7 @@ font pango:FiraCode: 14px
### Window formatting
default_border none
default_border pixel 2
gaps inner 0
gaps outer 0
gaps inner 10px
# Applications
exec_always /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1

425
flake.lock generated
View File

@@ -1,5 +1,27 @@
{
"nodes": {
"aagl": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
],
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1774186997,
"narHash": "sha256-hyNVlhAqmwcBPl7XRkxbGcMt1BfCOdvuEfBDUf0k8Oo=",
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"rev": "546e95f7ec74892a31f883a10b1723c35f2c2edd",
"type": "github"
},
"original": {
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"type": "github"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
@@ -7,16 +29,16 @@
]
},
"locked": {
"lastModified": 1757432263,
"narHash": "sha256-qHn+/0+IOz5cG68BZUwL9BV3EO/e9eNKCjH3+N7wMdI=",
"lastModified": 1772129556,
"narHash": "sha256-Utk0zd8STPsUJPyjabhzPc5BpPodLTXrwkpXBHYnpeg=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "1fef4404de4d1596aa5ab2bd68078370e1b9dcdb",
"rev": "ebec37af18215214173c98cf6356d0aca24a2585",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "nix-darwin-25.05",
"ref": "nix-darwin-25.11",
"repo": "nix-darwin",
"type": "github"
}
@@ -24,11 +46,11 @@
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
@@ -40,38 +62,45 @@
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1751685974,
"narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
"ref": "refs/heads/main",
"rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
"revCount": 92,
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
"lastModified": 1761588595,
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
"type": "github"
},
"original": {
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"nvf",
"nixpkgs"
]
},
"flake-schemas": {
"locked": {
"lastModified": 1756770412,
"narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "4524271976b625a4a605beefd893f270620fd751",
"type": "github"
"lastModified": 1761577921,
"narHash": "sha256-eK3/xbUOrxp9fFlei09XNjqcdiHXxndzrTXp7jFpOk8=",
"rev": "47849c7625e223d36766968cc6dc23ba0e135922",
"revCount": 107,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.2.0/019a4a84-544d-7c59-b26d-e334e320c932/source.tar.gz"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
"type": "tarball",
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A"
}
},
"flake-schemas_2": {
"locked": {
"lastModified": 1761577921,
"narHash": "sha256-eK3/xbUOrxp9fFlei09XNjqcdiHXxndzrTXp7jFpOk8=",
"rev": "47849c7625e223d36766968cc6dc23ba0e135922",
"revCount": 107,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.2.0/019a4a84-544d-7c59-b26d-e334e320c932/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A"
}
},
"flake-utils": {
@@ -79,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": {
@@ -92,25 +121,68 @@
"type": "github"
}
},
"ghostty": {
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"zig": "zig",
"zon2nix": "zon2nix"
"flake-compat": "flake-compat_2",
"gitignore": "gitignore",
"nixpkgs": [
"go-overlay",
"nixpkgs"
]
},
"locked": {
"lastModified": 1757737252,
"narHash": "sha256-i0GfdFWNlIgFuVjCnf6/nSTqnNU4PSXb+6NBxGJkspE=",
"owner": "ghostty-org",
"repo": "ghostty",
"rev": "0c63946bdb68080cd5cac0f97622b8509b6776a5",
"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"
}
},
@@ -121,35 +193,20 @@
]
},
"locked": {
"lastModified": 1756679287,
"narHash": "sha256-Xd1vOeY9ccDf5VtVK12yM0FS6qqvfUop8UQlxEB+gTQ=",
"lastModified": 1774274588,
"narHash": "sha256-dnHvv5EMUgTzGZmA+3diYjQU2O6BEpGLEOgJ1Qe9LaY=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "07fc025fe10487dd80f2ec694f1cd790e752d0e8",
"rev": "cf9686ba26f5ef788226843bc31fda4cf72e373b",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-25.05",
"ref": "release-25.11",
"repo": "home-manager",
"type": "github"
}
},
"mnw": {
"locked": {
"lastModified": 1756659871,
"narHash": "sha256-v6Rh4aQ6RKjM2N02kK9Usn0Ix7+OY66vNpeklc1MnGE=",
"owner": "Gerg-L",
"repo": "mnw",
"rev": "ed6cc3e48557ba18266e598a5ebb6602499ada16",
"type": "github"
},
"original": {
"owner": "Gerg-L",
"repo": "mnw",
"type": "github"
}
},
"nix-flatpak": {
"locked": {
"lastModified": 1739444422,
@@ -168,92 +225,162 @@
},
"nixpkgs": {
"locked": {
"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"
"lastModified": 1744536153,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"type": "github"
},
"original": {
"type": "tarball",
"url": "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz"
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1755972213,
"narHash": "sha256-VYK7aDAv8H1enXn1ECRHmGbeY6RqLnNwUJkOwloIsko=",
"rev": "73e96df7cff5783f45e21342a75a1540c4eddce4",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/unstable-small/nixos-25.11pre850642.73e96df7cff5/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
"url": "https://channels.nixos.org/nixos-unstable-small/nixexprs.tar.xz"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1757545623,
"narHash": "sha256-mCxPABZ6jRjUQx3bPP4vjA68ETbPLNz9V2pk9tO7pRQ=",
"lastModified": 1765779637,
"narHash": "sha256-KJ2wa/BLSrTqDjbfyNx70ov/HdgNBCBBSQP3BIzKnv4=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "8cd5ce828d5d1d16feff37340171a98fc3bf6526",
"rev": "1306659b587dc277866c7b69eb97e5f07864d8c4",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.05",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1774244481,
"narHash": "sha256-4XfMXU0DjN83o6HWZoKG9PegCvKvIhNUnRUI19vzTcQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "4590696c8693fea477850fe379a01544293ca4e2",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1756696532,
"narHash": "sha256-6FWagzm0b7I/IGigOv9pr6LL7NQ86mextfE8g8Q6HBg=",
"owner": "nixos",
"lastModified": 1744536153,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "58dcbf1ec551914c3756c267b8b9c8c86baa1b2f",
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"type": "github"
},
"original": {
"owner": "nixos",
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nvf": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-parts": "flake-parts",
"mnw": "mnw",
"nixpkgs": "nixpkgs_4",
"systems": "systems_2"
},
"nixpkgs_5": {
"locked": {
"lastModified": 1757773905,
"narHash": "sha256-lM1K3cJsPQyiSGI3rE/F7u02fA/JYBsinMN49IQCY1s=",
"owner": "notashelf",
"repo": "nvf",
"rev": "7e74ee604a7c18dda21e6a809720ad37ab5bae43",
"type": "github"
"lastModified": 1766201043,
"narHash": "sha256-eplAP+rorKKd0gNjV3rA6+0WMzb1X1i16F5m5pASnjA=",
"rev": "b3aad468604d3e488d627c0b43984eb60e75e782",
"revCount": 904049,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2511.904049%2Brev-b3aad468604d3e488d627c0b43984eb60e75e782/019b3f6c-8b33-7edb-b858-9979590f270b/source.tar.gz"
},
"original": {
"owner": "notashelf",
"repo": "nvf",
"type": "github"
"type": "tarball",
"url": "https://flakehub.com/f/NixOS/nixpkgs/%2A"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1769089682,
"narHash": "sha256-9yA/LIuAVQq0lXelrZPjLuLVuZdm03p8tfmHhnDIkms=",
"rev": "078d69f03934859a181e81ba987c2bb033eebfc5",
"revCount": 906333,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2511.906333%2Brev-078d69f03934859a181e81ba987c2bb033eebfc5/019bebf2-031c-7119-8fdc-ce9d29d005fa/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/NixOS/nixpkgs/%2A"
}
},
"root": {
"inputs": {
"aagl": "aagl",
"darwin": "darwin",
"ghostty": "ghostty",
"go-overlay": "go-overlay",
"home-manager": "home-manager",
"nix-flatpak": "nix-flatpak",
"nixpkgs": "nixpkgs_3",
"nvf": "nvf"
"rust-overlay": "rust-overlay_2",
"swaytreesave": "swaytreesave",
"vintage-story": "vintage-story"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1770952264,
"narHash": "sha256-CjymNrJZWBtpavyuTkfPVPaZkwzIzGaf0E/3WgcwM14=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "ec6a3d5cdf14bb5a1dd03652bd3f6351004d2188",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_2": {
"inputs": {
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1774321696,
"narHash": "sha256-g18xMjMNla/nsF5XyQCNyWmtb2UlZpkY0XE8KinIXAA=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "49a67e6894d4cb782842ee6faa466aa90c92812d",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"swaytreesave": {
"inputs": {
"flake-schemas": "flake-schemas",
"nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1767148467,
"narHash": "sha256-W0O7SWq8ucokt4ctEAEvRvNoSM/oF7fBfb2kTN+lwTs=",
"ref": "refs/heads/master",
"rev": "0f4bb9bb450b28aa4f29d5eb2062deac6c26687a",
"revCount": 4,
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/swaytreesave-nix.git"
},
"original": {
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/swaytreesave-nix.git"
}
},
"systems": {
@@ -271,67 +398,23 @@
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"zig": {
"vintage-story": {
"inputs": {
"flake-compat": [
"ghostty",
"flake-compat"
],
"flake-utils": [
"ghostty",
"flake-utils"
],
"nixpkgs": [
"ghostty",
"nixpkgs"
]
"flake-schemas": "flake-schemas_2",
"nixpkgs": "nixpkgs_6"
},
"locked": {
"lastModified": 1748261582,
"narHash": "sha256-3i0IL3s18hdDlbsf0/E+5kyPRkZwGPbSFngq5eToiAA=",
"owner": "mitchellh",
"repo": "zig-overlay",
"rev": "aafb1b093fb838f7a02613b719e85ec912914221",
"type": "github"
"lastModified": 1769397199,
"narHash": "sha256-MSajncUGZtlpl88rqFdj42eGGyWnk2jw84VbK3AgUBA=",
"ref": "refs/heads/master",
"rev": "4d2313c50933645040a0d12556016fc2916bfa65",
"revCount": 1,
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/vintage-story-nix.git"
},
"original": {
"owner": "mitchellh",
"repo": "zig-overlay",
"type": "github"
}
},
"zon2nix": {
"inputs": {
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1757167408,
"narHash": "sha256-4XyJ6fmKd9wgJ7vHUQuULYy5ps2gUgkkDk/PrJb2OPY=",
"owner": "jcollie",
"repo": "zon2nix",
"rev": "dc78177e2ad28d5a407c9e783ee781bd559d7dd5",
"type": "github"
},
"original": {
"owner": "jcollie",
"repo": "zon2nix",
"rev": "dc78177e2ad28d5a407c9e783ee781bd559d7dd5",
"type": "github"
"type": "git",
"url": "https://scm.wyattjmiller.com/wymiller/vintage-story-nix.git"
}
}
},

137
flake.nix
View File

@@ -1,18 +1,26 @@
{
description = "Wyatt's nix configuration suite";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.6.0";
home-manager = {
url = "github:nix-community/home-manager/release-25.05";
url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
darwin = {
url = "github:lnl7/nix-darwin/nix-darwin-25.05";
url = "github:lnl7/nix-darwin/nix-darwin-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
ghostty.url = "github:ghostty-org/ghostty";
nvf.url = "github:notashelf/nvf";
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";
};
# My personal flakes
swaytreesave.url = "git+https://scm.wyattjmiller.com/wymiller/swaytreesave-nix.git";
vintage-story.url = "git+https://scm.wyattjmiller.com/wymiller/vintage-story-nix.git";
};
outputs = inputs @ {
@@ -21,27 +29,44 @@
nix-flatpak,
darwin,
home-manager,
ghostty,
nvf,
rust-overlay,
go-overlay,
aagl,
swaytreesave,
vintage-story,
...
}: let
userName = "wyatt";
userEmail = "wyatt@wyattjmiller.com";
extraSpecialArgs = {
inherit userName userEmail ghostty nvf;
inherit userName userEmail swaytreesave;
};
myOverlays = { ... }: {
nixpkgs.overlays = [
rust-overlay.overlays.default
go-overlay.overlays.default
aagl.overlays.default
self.common.overlays
];
};
in {
meta = import ./meta;
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 ghostty;
inherit userName userEmail;
hostname = "sephiroth";
role = "devel";
role = "workstation";
};
modules = [
myOverlays
./modules/common
./modules/machine/sephiroth
@@ -49,7 +74,9 @@
{
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;
}
];
@@ -59,11 +86,12 @@
nixosConfigurations."cloud" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail;
inherit userName userEmail aagl vintage-story;
hostname = "cloud";
role = "devel";
role = "workstation";
};
modules = [
myOverlays
nix-flatpak.nixosModules.nix-flatpak
./modules/common
./modules/machine/cloud
@@ -72,7 +100,8 @@
{
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
];
@@ -89,6 +118,7 @@
role = "server";
};
modules = [
myOverlays
./modules/common
./modules/machine/valefor
@@ -97,6 +127,7 @@
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs;
home-manager.backupFileExtension = "bak";
home-manager.users.${userName}.imports = [
./home
];
@@ -113,6 +144,7 @@
role = "server";
};
# modules = [
# myOverlays
# nix-flatpak.nixosModules.nix-flatpak
# nix-ld.nixosModules.nix-ld
# ./modules/nixos/hardware-configuration.nix
@@ -125,11 +157,88 @@
# 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 vintage-story;
hostname = "thancred";
role = "server";
};
modules = [
myOverlays
./modules/common
./modules/machine/thancred
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;
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, ...}: {
programs.atuin = {
enable = true;
enableFishIntegration = true;
package = pkgs.atuinLatest;
};
}

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 = [
@@ -40,14 +41,37 @@
id = "cjpalhdlnbpafiamejdnhcphjbkeiagm";
sha256 = "sha256:0pdh1v0vx1d5vnl1zh7nbk6j1fh4k4hhwp1ljs203icn306lahsn";
# sha256 = lib.fakeSha256;
version = "1.64.0";
version = "1.67.0";
})
(createChromiumExtension {
# bitwarden
id = "nngceckbapebfimnlniiiahkandclblb";
sha256 = "sha256:0jxk3cqmgd5qj8hnw7s0k5s4bfrcmr0w0rckp3x0bmng07azw4gi";
# sha256 = lib.fakeSha256;
version = "2025.5.0";
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";
})
];
};

View File

@@ -1,64 +1,59 @@
{
lib,
pkgs,
userName,
userEmail,
ghostty,
nvf,
...
{ 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 = map (module: import module {inherit lib pkgs dirs userName userEmail ghostty nvf;}) [
./atuin.nix
./shell.nix
imports = [
./packages
./git.nix
./starship.nix
./eza.nix
./neovim.nix
./direnv.nix
./sway.nix
./terminal.nix
./browser.nix
./zellij.nix
./bat.nix
];
# 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}";
home = lib.mkMerge [
{
username = userName;
homeDirectory =
if pkgs.stdenv.isDarwin
then "/Users/${userName}"
else "/home/${userName}";
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";
};
stateVersion = "24.11";
}
pointerCursor = lib.mkIf pkgs.stdenv.isLinux {
gtk.enable = true;
package = pkgs.catppuccin-cursors.mochaDark;
name = "catppuccin-mocha-dark-cursors";
size = 22;
};
(lib.mkIf isNixOS {
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";
};
})
stateVersion = "24.11";
};
(lib.mkIf pkgs.stdenv.isLinux {
pointerCursor = {
gtk.enable = true;
package = pkgs.catppuccin-cursors.mochaDark;
name = "catppuccin-mocha-dark-cursors";
size = 22;
};
})
];
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;

View File

@@ -15,7 +15,7 @@
extraConfig = {
init.defaultBranch = "master";
push.autoSetupRemote = true;
pull.merge = true;
pull.rebase = false;
merge.tool = "nvimdiff";
mergetool.keepBackup = false;
};
@@ -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

@@ -1,6 +1,7 @@
{...}: {
{ pkgs, ... }: {
programs.lazygit = {
enable = true;
package = pkgs.lazygitLatest;
settings = {
gui.theme = {

View File

@@ -1,372 +1,18 @@
{
nvf,
pkgs,
...
}: {
imports = [
nvf.homeManagerModules.default
];
programs.nvf = {
# enable nvf neovim distribution
{...}: let
dirs = {
defaults = ../defaults;
};
in {
programs.neovim = {
enable = true;
defaultEditor = true;
vimAlias = true;
};
# set stuff!
settings = {
vim = {
# setting alias to _always_ use neovim
viAlias = true;
vimAlias = true;
options = {
tabstop = 4;
shiftwidth = 4;
expandtab = true;
autoindent = true;
smartindent = true;
smarttab = true;
scrolloff = 12;
sidescrolloff = 8;
wrap = false;
linebreak = false;
number = true;
relativenumber = true;
cursorline = true;
signcolumn = "yes";
tabline = "2";
};
# clipboard configuration
clipboard = {
enable = true;
providers = {
wl-copy.enable = true;
};
registers = "unnamed,unnamedplus";
};
# LSP configuration
lsp = {
enable = true;
formatOnSave = true;
lspkind.enable = true;
lspconfig.enable = true;
lightbulb.enable = false;
lspsaga.enable = false;
trouble.enable = false;
lspSignature.enable = true;
otter-nvim.enable = false;
nvim-docs-view.enable = false;
};
# debugger configuration
debugger = {
nvim-dap = {
enable = true;
ui.enable = true;
};
};
# disable spellcheck
spellcheck.enable = false;
# enable diagnostics (inline)
diagnostics = {
enable = true;
config = {
underline = true;
signs = true;
update_in_insert = false;
virtual_lines = true;
};
};
# language specific configuartion
languages = {
enableFormat = true;
enableTreesitter = true;
enableExtraDiagnostics = true;
nix = {
enable = true;
lsp.enable = true;
treesitter.enable = true;
format = {
enable = true;
package = pkgs.alejandra;
};
extraDiagnostics = {
enable = true;
types = ["statix"];
};
};
markdown.enable = true;
bash.enable = true;
clang.enable = true;
css = {
enable = true;
format = {
enable = true;
package = pkgs.prettierd;
};
};
html.enable = true;
sql.enable = true;
java.enable = true;
kotlin = {
enable = true;
lsp.enable = true;
treesitter.enable = true;
extraDiagnostics.enable = true;
};
ts = {
enable = true;
format = {
enable = true;
package = pkgs.prettierd;
};
lsp = {
enable = true;
server = "ts_ls";
};
};
lua.enable = false;
python.enable = true;
rust = {
enable = true;
lsp.enable = true;
dap.enable = true;
format.enable = true;
crates.enable = true;
};
csharp = {
enable = true;
lsp = {
enable = true;
server = "omnisharp";
};
treesitter.enable = true;
};
};
# statusline configuration
statusline = {
lualine = {
enable = true;
theme = "catppuccin";
};
};
# theme configuration
theme = {
enable = true;
name = "catppuccin";
style = "mocha";
transparent = true;
};
# visual/ui configuration
visuals = {
nvim-scrollbar.enable = false;
nvim-web-devicons.enable = true;
nvim-cursorline.enable = true;
cinnamon-nvim.enable = true;
fidget-nvim.enable = false;
highlight-undo.enable = true;
indent-blankline.enable = true;
};
ui = {
borders.enable = true;
noice.enable = false;
colorizer.enable = true;
modes-nvim.enable = false; # the theme looks terrible with catppuccin
illuminate.enable = true;
breadcrumbs = {
enable = true;
navbuddy.enable = false;
};
fastaction.enable = true;
};
# autocomplete/intellisense configuration
autopairs.nvim-autopairs.enable = true;
autocomplete.nvim-cmp = {
enable = true;
sources = {
nvim-lsp = "nvim_lsp";
async-path = "async_path";
};
};
# tabline configuration
tabline = {
nvimBufferline = {
enable = true;
setupOpts.options = {
numbers = "none";
};
mappings = {
closeCurrent = "<leader>x";
cycleNext = "<tab>";
cyclePrevious = "<S-tab>";
moveNext = null;
movePrevious = null;
sortByDirectory = null;
sortByExtension = null;
sortById = null;
};
};
};
treesitter = {
context = {
enable = true;
setupOpts.max_lines = 3;
};
};
binds = {
whichKey.enable = true;
cheatsheet.enable = true;
};
telescope.enable = true;
git = {
enable = true;
gitsigns.enable = true;
gitsigns.codeActions.enable = false; # throws an annoying debug message
git-conflict.enable = true;
};
comments = {
comment-nvim.enable = true;
};
# discord integration
presence = {
neocord.enable = true;
};
notify = {
nvim-notify.enable = true;
};
dashboard = {
dashboard-nvim.enable = false;
alpha.enable = true;
};
filetree = {
neo-tree = {
enable = true;
setupOpts.enable_refresh_on_write = true;
};
};
# terminal integration configuration
terminal = {
toggleterm = {
enable = true;
lazygit.enable = true;
};
};
# notes!
notes = {
obsidian = {
enable = true; # more to be added here
setupOpts = {
workspaces = [
{
name = "notes";
path = "~/Source/notes";
}
];
};
};
todo-comments.enable = true;
};
# ai assistant configuration
assistant = {
copilot = {
enable = true;
cmp.enable = true;
};
};
# custom key mappings
keymaps = [
# Ctrl-S save
{
mode = ["n" "v" "i"];
key = "<C-s>";
action = "<cmd>w<CR>";
}
# toggle file explorer
{
mode = ["n"];
key = "<leader><o>";
action = "<cmd>Neotree toggle left<CR>";
}
# copy/cut/paste to system clipboard
# {
# mode = ["v"];
# key = "<sc-c>";
# action = ''
# "+y
# '';
# noremap = true;
# }
# {
# mode = ["n"];
# key = "<sc-v>";
# action = ''
# l"+P
# '';
# noremap = true;
# }
# {
# mode = ["v"];
# key = "<sc-v>";
# action = ''
# "+P
# '';
# noremap = true;
# }
# {
# mode = ["c"];
# key = "<sc-v>";
# action = ''
# <C-o>l<C-o>"+<C-o>P<C-o>
# '';
# noremap = true;
# }
# {
# mode = ["i"];
# key = "<sc-v>";
# action = ''
# <ESC>l"+Pli
# '';
# noremap = true;
# }
# {
# mode = ["t"];
# key = "<sc-v>";
# action = ''
# <C-\><C-n>"+Pi
# '';
# noremap = true;
# }
];
### end of settings
};
xdg.configFile = {
nvim = {
onChange = "nvim --headless -c 'if exists(\":LuaCacheClear\") | :LuaCacheClear' +quitall";
source = dirs.defaults + /nvim;
};
};
}

View File

@@ -1,11 +1,20 @@
{
lib,
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
@@ -13,40 +22,21 @@
p7zip
# utils
yazi
tmux
lazygit
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 = [
./common.nix
./darwin.nix
./linux.nix
];
imports =
[
./common.nix
./darwin.nix
./linux.nix
]
++ lib.optional (role == "workstation") ./workstation.nix
++ lib.optional (role == "server") ./server.nix;
}

View File

@@ -1,20 +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, ...}: {
{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
@@ -43,7 +45,31 @@
"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..."
"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 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 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)
set choose_meme $memes[(math $choose_meme"+1")]
@@ -52,6 +78,27 @@
'';
onEvent = "fish_greeting";
};
} // lib.optionalAttrs pkgs.stdenv.isLinux {
block = {
body = ''
systemd-inhibit --what=sleep --who="$USER" --why="manual invocation" --mode=block sleep infinity &
set -g INHIBIT_PID $last_pid
echo "Sleep inhibited. PID: $INHIBIT_PID"
'';
};
unblock = {
body = ''
if set -q INHIBIT_PID
kill $INHIBIT_PID 2>/dev/null
and echo "Sleep inhibitor removed. PID: $INHIBIT_PID"
or echo "Failed to kill process or already terminated."
set -e INHIBIT_PID
else
echo "No active sleep inhibitor found."
end
'';
};
};
};

View File

@@ -1,12 +1,27 @@
{
lib,
pkgs,
swaytreesave,
...
}: let
dirs = {
defaults = ../defaults;
};
# Derived from subprojects/cava.wrap
libcava.src = pkgs.fetchFromGitHub {
owner = "LukashonakV";
repo = "cava";
rev = "0.10.3";
hash = "sha256-ZDFbI69ECsUTjbhlw2kHRufZbQMu+FQSMmncCJ5pagg=";
};
in {
imports = [
swaytreesave.homeManagerModules.default
];
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
@@ -17,131 +32,128 @@ in {
gtk = true;
};
};
xdg = {
configFile = {
"sway/config".source = lib.mkForce (dirs.defaults + /sway/config);
"waybar/config".source = lib.mkForce (dirs.defaults + /waybar/config);
"waybar/style.css".source = lib.mkForce (dirs.defaults + /waybar/style.css);
xdg.configFile."sway/config".source = lib.mkForce (dirs.defaults + /sway/config);
xdg.configFile."waybar/config".source = lib.mkForce (dirs.defaults + /waybar/config);
xdg.configFile."waybar/style.css".source = lib.mkForce (dirs.defaults + /waybar/style.css);
programs.wofi = {
enable = pkgs.stdenv.isLinux;
settings = {
width=600;
height=350;
location="center";
show="drun";
prompt="Search...";
filter_rate=100;
allow_markup=true;
no_actions=true;
halign="fill";
orientation="vertical";
content_halign="fill";
insensitive=true;
allow_images=true;
image_size=40;
gtk_dark=true;
};
style = ''
@define-color selected-text #8caaee;
@define-color text #c6d0f5;
@define-color base #24273a;
* {
font-family: 'Monaspace Krypton 9', monospace;
font-size: 18px;
}
window {
margin: 0px;
padding: 20px;
background-color: @base;
opacity: 0.95;
}
#inner-box {
margin: 0;
padding: 0;
border: none;
background-color: @base;
}
#outer-box {
margin: 0;
padding: 20px;
border: none;
background-color: @base;
}
#scroll {
margin: 0;
padding: 0;
border: none;
background-color: @base;
}
#input {
margin: 0;
padding: 10px;
border: none;
background-color: @base;
color: @text;
}
#input:focus {
outline: none;
box-shadow: none;
border: none;
}
#text {
margin: 5px;
border: none;
color: @text;
}
#entry {
background-color: @base;
}
#entry:selected {
outline: none;
border: none;
}
#entry:selected #text {
color: @selected-text;
}
#entry image {
-gtk-icon-transform: scale(0.7);
}
'';
};
programs.swaylock.enable = pkgs.stdenv.isLinux;
services.mako = {
enable = pkgs.stdenv.isLinux;
settings = {
text-color = "#cad3f5";
border-color = "#c6d0f5";
background-color = "#24273a";
width = 420;
height = 110;
padding = 10;
border-size = 2;
font = "Monaspace Krypton 9";
anchor = "top-right";
default-timeout = 5000;
max-icon-size = 32;
text-color="#cad3f5";
border-color="#c6d0f5";
background-color="#24273a";
width=420;
height=110;
padding=10;
border-size=2;
font="Monaspace Krypton 9";
anchor="top-right";
default-timeout=5000;
max-icon-size=32;
};
};
programs = {
wofi = {
enable = pkgs.stdenv.isLinux;
settings = {
width = 600;
height = 350;
location = "center";
show = "drun";
prompt = "Search...";
filter_rate = 100;
allow_markup = true;
no_actions = true;
halign = "fill";
orientation = "vertical";
content_halign = "fill";
insensitive = true;
allow_images = true;
image_size = 40;
gtk_dark = true;
};
style = ''
@define-color selected-text #8caaee;
@define-color text #c6d0f5;
@define-color base #24273a;
* {
font-family: 'Monaspace Krypton 9', monospace;
font-size: 18px;
}
window {
margin: 0px;
padding: 20px;
background-color: @base;
opacity: 0.95;
}
#inner-box {
margin: 0;
padding: 0;
border: none;
background-color: @base;
}
#outer-box {
margin: 0;
padding: 20px;
border: none;
background-color: @base;
}
#scroll {
margin: 0;
padding: 0;
border: none;
background-color: @base;
}
#input {
margin: 0;
padding: 10px;
border: none;
background-color: @base;
color: @text;
}
#input:focus {
outline: none;
box-shadow: none;
border: none;
}
#text {
margin: 5px;
border: none;
color: @text;
}
#entry {
background-color: @base;
}
#entry:selected {
outline: none;
border: none;
}
#entry:selected #text {
color: @selected-text;
}
#entry image {
-gtk-icon-transform: scale(0.7);
}
'';
};
swaylock.enable = pkgs.stdenv.isLinux;
waybar = {
enable = pkgs.stdenv.isLinux;
systemd.enable = true;
};
programs.waybar = {
enable = pkgs.stdenv.isLinux;
systemd.enable = true;
};
}

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

@@ -2,10 +2,16 @@
config,
lib,
pkgs,
aagl,
vintage-story,
...
}: let
cfg = config.gaming;
in {
imports = [
aagl.nixosModules.default
];
options.gaming = {
steam = {
enable = lib.mkEnableOption "Steam gaming platform";
@@ -62,6 +68,14 @@ 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.";
};
lutris = {
enable = lib.mkEnableOption "Lutris game manager and launcher";
package = lib.mkOption {
@@ -108,9 +122,38 @@ 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";
};
};
config = {
config = let
agl = cfg.aagl;
in {
programs.steam = lib.mkIf cfg.steam.enable {
enable = true;
remotePlay.openFirewall = cfg.steam.firewall.remotePlay;
@@ -139,6 +182,26 @@ 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] ++
@@ -154,6 +217,20 @@ in {
cfg.lutris.extraPackages
)) ++
(lib.optionals cfg.minecraft.enable [pkgs.prismlauncher]) ++
(lib.optionals cfg.ffxiv.enable [pkgs.xivlauncher]);
(lib.optionals cfg.ffxiv.enable [pkgs.xivlauncher pkgs.fflogs]) ++
(lib.optionals cfg.vintage-story.enable [vintage-story.packages.${pkgs.system}.default]) ++
(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-laucher.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=" ];
}
);
};
}

View File

@@ -7,3 +7,11 @@ 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

View File

@@ -8,6 +8,9 @@
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
nixpkgs.config.permittedInsecurePackages = [
"mbedtls-2.28.10"
];
nix.package = pkgs.nix;

View File

@@ -1,12 +1,9 @@
{
pkgs,
lib,
...
}: {
{ ... }: {
imports = [
./core.nix
./environment.nix
./fonts.nix
# ./overlays.nix
./users.nix
];
}

View File

@@ -1,20 +1,22 @@
{ lib, pkgs, ... }: {
# Common packages that every system will use
environment.systemPackages = with pkgs; [
git
vim
neovim
usbutils
coreutils
lshw
systemd
dmidecode
pciutils
nix-ld
patchelf
htop
];
] ++
lib.optionals pkgs.stdenv.isLinux (with pkgs; [
systemd
lshw
dmidecode
]) ++
lib.optionals pkgs.stdenv.isDarwin (with pkgs; [
# nothing here, yet ;)
]);
# Common environment variables that every system will use
environment.variables.EDITOR = "nvim";
}

View File

@@ -6,10 +6,14 @@
fonts.packages = with pkgs;
[
noto-fonts
noto-fonts-emoji
noto-fonts-color-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
modules/common/linker.nix Normal file
View File

@@ -0,0 +1,62 @@
{ 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
modules/common/overlays.nix Normal file
View File

@@ -0,0 +1,128 @@
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"
];
});
}

View File

@@ -1,30 +1,23 @@
{ lib, pkgs, userName, hostname, ... }:
{
lib,
pkgs,
userName,
hostname,
...
} @ args: {
networking.hostName = hostname;
# Don't forget to set a password with passwd!
users.users."${userName}" = lib.mkMerge [
{
home =
if pkgs.stdenv.isDarwin
then "/Users/${userName}"
else "/home/${userName}";
description = userName;
}
users.users."${userName}" = {
home = if pkgs.stdenv.isDarwin
then "/Users/${userName}"
else "/home/${userName}";
description = userName;
} // lib.optionalAttrs pkgs.stdenv.isLinux {
group = "${userName}";
isNormalUser = true;
};
(lib.mkIf (pkgs.stdenv.isLinux) {
group = "${userName}";
isNormalUser = true;
})
];
users.groups.wyatt = {};
nix.settings.trusted-users = [userName];
security.sudo = {
extraRules = [
security = lib.optionalAttrs pkgs.stdenv.isLinux {
sudo.extraRules = [
{
groups = [ "wheel" ];
commands = [
@@ -37,7 +30,9 @@
];
};
users.groups.wyatt = {};
nix.settings.trusted-users = [userName];
environment = lib.optionalAttrs pkgs.stdenv.isDarwin {
etc."sudoers.d/wheel-nopasswd".text = ''
%wheel ALL=(ALL:ALL) NOPASSWD: SETENV: ALL
'';
};
}

View File

@@ -40,7 +40,6 @@ in {
config = mkIf cfg.enable (mkMerge [
{
environment.systemPackages = with pkgs; [
glxinfo
vulkan-tools
mesa-demos
];
@@ -62,9 +61,9 @@ in {
(mkIf (cfg.gpuVendor == "amd") {
services.xserver.videoDrivers = ["amdgpu"];
hardware.graphics.extraPackages = with pkgs; [
amdvlk
];
# hardware.graphics.extraPackages = with pkgs; [
# amdvlk
# ];
environment.systemPackages = with pkgs; [
radeontop
];

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.
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

@@ -1,8 +1,8 @@
{
config,
lib,
pkgs,
userName,
aagl,
...
}: let
flatpakPackages = [
@@ -18,7 +18,7 @@
in {
imports = [
(import ../../apps/flatpak.nix {
inherit lib pkgs flatpakPackages;
inherit lib pkgs flatpakPackages userName aagl;
})
../../apps/gaming.nix
../../apps/appimage.nix
@@ -89,8 +89,10 @@ in {
localNetworkGameTransfers = true;
};
};
vkbasalt.enable = true;
gamemode.enable = true;
gamescope.enable = true;
mangohud.enable = true;
lutris = {
enable = true;
wine = {
@@ -100,14 +102,12 @@ in {
compatibility = {
protonSupport = true;
};
extraPackages = with pkgs; [
gamemode
mangohud
];
};
ffxiv.enable = true;
minecraft.enable = true;
aagl.anime-game-launcher.enable = true;
vintage-story.enable = true;
};
# Power management (see ../../pwrMgmt/default.nix)
@@ -151,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"];
users.users.${userName}.extraGroups = ["wheel" "video" "gamemode" "podman" "network" "libvirtd"];
services = {
# Enable OpenSSH
@@ -191,5 +191,23 @@ in {
};
};
# sched_ext userspace CPU scheduling stuff - idk
services.scx = {
enable = true;
scheduler = "scx_bpfland";
};
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
];
};
system.stateVersion = "24.11";
}

View File

@@ -2,5 +2,6 @@
imports = [
./configuration.nix
./hardware-configuration.nix
../../common/linker.nix
];
}

View File

@@ -12,24 +12,24 @@
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "thunderbolt" "ahci" "usb_storage" "usbhid" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-amd"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-label/COMPUTER";
device = "/dev/disk/by-uuid/f8f39aae-61d2-437d-a8e1-01066bbb3c5c";
fsType = "xfs";
};
fileSystems."/boot" = {
device = "/dev/disk/by-label/BOOT";
device = "/dev/disk/by-uuid/B72F-087F";
fsType = "vfat";
options = ["fmask=0022" "dmask=0022"];
};
swapDevices = [
{device = "/dev/disk/by-label/SWAP";}
{device = "/dev/disk/by-uuid/6d6bcc02-20a9-4ae8-9c1e-5124fb2b2634";}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking

View File

@@ -0,0 +1,121 @@
{
pkgs,
userName,
vintage-story,
...
}: {
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 = [
vintage-story.packages.${pkgs.system}.default
];
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 = {
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

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

View File

@@ -0,0 +1,32 @@
# 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";
}

View File

@@ -5,7 +5,7 @@
}:
with lib; {
options = {
security.sudo = {
security.sudoers = {
needsPassword = mkOption {
type = types.bool;
default = true;

View File

@@ -21,6 +21,7 @@ in {
environment.systemPackages = with pkgs;
[
scarlett2
alsa-scarlett-gui
]
++ (
if cfg.guiSupport

View File

@@ -1,6 +1,11 @@
{...}: {
# TODO: refactor into module
{ pkgs, ...}: {
services.pipewire = {
enable = true;
pulse.enable = true;
};
environment.systemPackages = with pkgs; [
helvum
];
}

View File

@@ -1,7 +1,16 @@
{pkgs, ...}: {
{ lib, pkgs, userName, ...}: {
services.shairport-sync = {
enable = pkgs.stdenv.isLinux;
openFirewall = pkgs.stdenv.isLinux;
arguments = "-v -o pw";
# arguments = "-v -o pa";
};
systemd.services.shairport-sync = {
serviceConfig = {
User = lib.mkForce "${userName}";
};
environment = {
XDG_RUNTIME_DIR = "/run/user/1000";
};
};
}

View File

@@ -1,4 +1,10 @@
{...}: {
{ 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
];
}