Compare commits

...

58 Commits

Author SHA1 Message Date
fd83440ff8 update power management readme 2025-02-15 23:02:58 -06:00
cc7e26cecc add merge tool, change pull algo 2025-02-15 13:08:53 -05:00
1d6331c6cc utilize wheel group to not use password for sudo 2025-02-09 15:49:37 -05:00
983b83424b Merge pull request 'nix-ld refactor' (#6) from nix-ld-refactor into master
Reviewed-on: #6
2025-02-09 14:28:55 -06:00
76dd1bafeb use nixpkgs nix-ld 2025-02-09 15:36:24 -05:00
b0ca8ad6fa fixed graphics module for amd 2025-01-22 23:14:11 -05:00
3a80ede26d added jetbrains products 2025-01-20 13:24:59 -05:00
c30ccd0074 update cloud configuration 2025-01-19 20:39:52 -06:00
ef484c8ff0 fixed dns, modified config for valefor 2025-01-07 18:15:49 -05:00
ea2820a1bb Merge pull request 'Appliance server setup' (#4) from valefor-setup into master
Reviewed-on: #4
2025-01-05 20:36:45 -06:00
1c054207b2 refactored custom core networking 2025-01-04 19:27:42 -05:00
b5b66f1c1b redefining custom networking namespace 2025-01-04 19:07:36 -05:00
a1eb9b74c2 fixed networkmanager 2025-01-04 18:56:53 -05:00
f10c3e7a8c fixed bind interfaces 2025-01-04 18:51:51 -05:00
1f5eda31b2 removed throw, renamed services.named to services.bind 2025-01-04 18:46:37 -05:00
1484f3a04e be more explicit in defining dns 2025-01-04 18:23:17 -05:00
539f0db8d1 fixed valefor config again
very obv
2025-01-04 18:20:00 -05:00
65bf72cd5b fixed syntax errors 2025-01-04 18:17:24 -05:00
50d1e00a02 changed graphics config to amd - cloud
this to pull down any relevant amd packages from nixpkgs, not any nvidia
packages
2025-01-04 18:12:42 -05:00
30b7d23b3a added hardware config for valefor 2025-01-04 18:10:18 -05:00
c8990196b7 wip: added valefor machine config 2025-01-04 16:02:31 -05:00
0c8c5c5f2a added git aliases 2024-12-29 15:34:06 -05:00
93c8464641 fixed podman config for sephiroth, added ghostty as brew package
todo: fix ghostty when it gets added as a nix package for darwin
2024-12-28 17:11:52 -05:00
b9dd11dd7b Merge pull request 'Modularizing system configuration' (#3) from modular into master
Reviewed-on: #3
2024-12-27 00:27:24 -06:00
51d8ee2887 added latest linux kernel, added comments 2024-12-27 01:35:22 -05:00
86970a7f6c updated modules to work for cloud 2024-12-23 15:35:36 -05:00
972cd76421 fix flatpak module 2024-12-20 08:25:18 -06:00
fe049f0594 change unstable nixpkgs to 24.11 nixpkgs 2024-12-18 20:10:01 -05:00
39afe2d114 wip: home stuff 2024-12-18 20:09:28 -05:00
b6653cee0b darwin compatible commit, touching up on modules, common system ietms 2024-12-18 20:09:08 -05:00
1e3ffdf0a3 created defaults, created common fonts, modified root flake nix 2024-12-18 13:07:02 -05:00
ea8607eb41 small changes 2024-12-15 22:37:43 -05:00
adabefd821 modularized all the things
part one (?)
2024-12-15 18:22:36 -05:00
d8a9e92dff code dump v1 2024-12-12 20:41:58 -05:00
72c9007b05 added hostname specific programs, platform programs, common programs 2024-11-23 00:05:59 -05:00
c0bc83552b Merge pull request 'Include NixOS into configuration' (#2) from nixos-snapshot-09092024 into master
Reviewed-on: #2
2024-11-17 17:16:08 -06:00
97818fbaf9 added additional install command 2024-11-17 18:21:11 -05:00
17da032af0 removed comment 2024-11-17 18:21:11 -05:00
55d5cea59f modified user to be modular, separated machine specific configs 2024-11-17 18:21:11 -05:00
e19f24b5dd added brew casks
raycast, ice (menu bar hider)
2024-11-17 17:15:46 -05:00
ea90e55cbb compatibility modifications for sephiroth 2024-11-03 22:44:23 -05:00
9a435da5e3 modularized home packages 2024-10-31 22:56:43 -04:00
fcd11e5127 modified readme
to be more descriptive
2024-10-30 23:45:47 -04:00
92a92700df modified root readme 2024-10-30 23:37:13 -04:00
b5beb52de1 added root readme 2024-10-30 23:35:48 -04:00
3e47cee382 added readme for machine module 2024-10-30 23:35:43 -04:00
50d37c0e6b some stuff 2024-10-30 22:41:50 -04:00
fbaa38c1a5 modularized into machine 2024-10-30 22:41:37 -04:00
33876f6bc9 added shairport 2024-10-29 13:29:34 -04:00
c7641b639b Merge remote-tracking branch 'origin/master' into nixos-snapshot-09092024 2024-09-14 15:31:49 -04:00
929355fbca wip: added packages, modified portals, configuration 2024-09-14 15:30:50 -04:00
41022a0ae3 modified home and neovim module
home explictly needed map wrapper (?) around the existing modules that
are needed
2024-09-14 12:56:44 -04:00
a518d73323 added nvim lua config files 2024-09-14 12:38:56 -04:00
fc8c44c026 modified nix files tailored for nixos, must make modular to merge into master 2024-09-09 09:27:52 -04:00
414420f3ce modified nix flake root 2024-09-08 19:13:11 -04:00
5dd97993d2 added hardware config 2024-09-08 19:12:08 -04:00
8868f0b825 fixed flathub remote url, added automatic flatpak update schedule 2024-09-08 17:10:56 -04:00
5f45489bc2 Merge pull request 'Adhere to NixOS systems' (#1) from suite-switch into master
Reviewed-on: #1
2024-09-08 15:52:46 -05:00
69 changed files with 2207 additions and 366 deletions

View File

@ -1,3 +1,68 @@
# Wyatt's Nix configuration # Wyatt's Nix configuration
Designed and developed by Wyatt J. Miller, 2024 Designed and developed by Wyatt J. Miller, 2024
Licensed by the Mozilla Public License v2
## What is this??
This repository is my multi-machine Nix configuration, written in a Nix flake!
## How do I get this?
Make sure the following is installed:
- `git` (most operating systems come with git already installed)
- `nix` (if you are on macOS or a non-NixOS system)
If you don't have `git` installed and are running macOS, run the following command:
```bash
sudo xcode-select --install
```
If you don't have `nix` installed and are running Linux, use the Determinate Nix Installer!
```bash
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
```
If you don't have `nix` installed and are running macOS, use the Determinate Nix Installer!
```bash
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
```
There's a separate installer Determinate Systems releases (and feel free to try it) but that's not on the install list here.
Once you got everything required, it's clonin' time!
```bash
git clone https://scm.wyattjmiller.com/wymiller/nix-config-v2
```
Once that's done, head to the next section.
## How do I run this?
For NixOS systems:
```bash
sudo nixos-rebuild switch --flake .#<hostname>
```
For macOS systems:
```bash
nix run nix-darwin --extra-experimental-features nix-command --extra-experimental-features flakes -- switch --flake .#<hostname>
```
_or_
```bash
darwin-rebuild switch --flake .#<hostname>
```
where `<hostname>` is the particular configuration you would like to run.
Non-NixOS Linux systems should be coming soon!

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"

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

@ -0,0 +1,19 @@
-- 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"
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,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"

44
flake.lock generated
View File

@ -3,19 +3,20 @@
"darwin": { "darwin": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixpkgs-darwin" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1722082646, "lastModified": 1738743987,
"narHash": "sha256-od8dBWVP/ngg0cuoyEl/w9D+TCNDj6Kh4tr151Aax7w=", "narHash": "sha256-O3bnAfsObto6l2tQOmQlrO6Z2kD6yKwOWfs7pA0CpOc=",
"owner": "lnl7", "owner": "lnl7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "0413754b3cdb879ba14f6e96915e5fdf06c6aab6", "rev": "ae406c04577ff9a64087018c79b4fdc02468c87c",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "lnl7", "owner": "lnl7",
"ref": "master",
"repo": "nix-darwin", "repo": "nix-darwin",
"type": "github" "type": "github"
} }
@ -27,16 +28,16 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1720042825, "lastModified": 1736373539,
"narHash": "sha256-A0vrUB6x82/jvf17qPCpxaM+ulJnD8YZwH9Ci0BsAzE=", "narHash": "sha256-dinzAqCjenWDxuy+MqUQq0I4zUSfaCvN9rzuCmgMZJY=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "e1391fb22e18a36f57e6999c7a9f966dc80ac073", "rev": "bd65bc3cde04c16755955630b344bc9e35272c56",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-24.05", "ref": "release-24.11",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
@ -59,32 +60,16 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1725407940, "lastModified": 1738702386,
"narHash": "sha256-tiN5Rlg/jiY0tyky+soJZoRzLKbPyIdlQ77xVgREDNM=", "narHash": "sha256-nJj8f78AYAxl/zqLiFGXn5Im1qjFKU8yBPKoWEeZN5M=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6f6c45b5134a8ee2e465164811e451dcb5ad86e3", "rev": "030ba1976b7c0e1a67d9716b17308ccdab5b381e",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"ref": "nixos-24.05", "ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-darwin": {
"locked": {
"lastModified": 1725498621,
"narHash": "sha256-m12se55InZz03onhRji85deKJp4i0jrw980aDdxT0IM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0409a1b650bb50c225485f2ca21c325eb33f45c7",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-24.05-darwin",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@ -94,8 +79,7 @@
"darwin": "darwin", "darwin": "darwin",
"home-manager": "home-manager", "home-manager": "home-manager",
"nix-flatpak": "nix-flatpak", "nix-flatpak": "nix-flatpak",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs"
"nixpkgs-darwin": "nixpkgs-darwin"
} }
} }
}, },

View File

@ -1,16 +1,15 @@
{ {
description = "Wyatt's nix configuration suite"; description = "Wyatt's nix configuration suite";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1"; nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1";
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-24.05-darwin";
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-24.05"; url = "github:nix-community/home-manager/release-24.11";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
darwin = { darwin = {
url = "github:lnl7/nix-darwin"; url = "github:lnl7/nix-darwin/master";
inputs.nixpkgs.follows = "nixpkgs-darwin"; inputs.nixpkgs.follows = "nixpkgs";
}; };
}; };
@ -36,10 +35,8 @@
hostname = "sephiroth"; hostname = "sephiroth";
}; };
modules = [ modules = [
./modules/nix-core.nix ./modules/common
./modules/darwin/configuration.nix ./modules/machine/sephiroth
./modules/darwin/apps.nix
./modules/host-users.nix
home-manager.darwinModules.home-manager home-manager.darwinModules.home-manager
{ {
@ -52,17 +49,16 @@
}; };
# Primary desktop computer # Primary desktop computer
nixosConfiguration."cloud" = nixpkgs.lib.nixosSystem { nixosConfigurations."cloud" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux"; system = "x86_64-linux";
specialArgs = { specialArgs = {
inherit userName userEmail; inherit userName userEmail;
hostname = "cloud"; hostname = "cloud";
}; };
modules = [ modules = [
/etc/nixos/configuration.nix nix-flatpak.nixosModules.nix-flatpak
./modules/nix-core.nix ./modules/common
./modules/nixos/configuration.nix ./modules/machine/cloud
./modules/host-users.nix
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
{ {
@ -70,11 +66,60 @@
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs; home-manager.extraSpecialArgs = extraSpecialArgs;
home-manager.users.${userName}.imports = [ home-manager.users.${userName}.imports = [
nix-flatpak.homeManagerModules.nix-flatpak
./home ./home
]; ];
} }
]; ];
}; };
# Apartment appliance server
nixosConfigurations."valefor" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail;
hostname = "valefor";
};
modules = [
./modules/common
./modules/machine/valefor
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = extraSpecialArgs;
home-manager.users.${userName}.imports = [
./home
];
}
];
};
# Storage, status, game, and media server
nixosConfigurations."ixion" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail;
hostname = "ixion";
};
# modules = [
# nix-flatpak.nixosModules.nix-flatpak
# nix-ld.nixosModules.nix-ld
# ./modules/nixos/hardware-configuration.nix
# ./modules/nix-core.nix
# ./modules/nixos/configuration.nix
# ./modules/host-users.nix
#
# home-manager.nixosModules.home-manager
# {
# home-manager.useGlobalPkgs = true;
# home-manager.useUserPackages = true;
# home-manager.extraSpecialArgs = extraSpecialArgs;
# home-manager.users.${userName}.imports = [
# ./home
# ];
# }
# ];
};
}; };
} }

View File

@ -1,13 +1,21 @@
{ {
lib,
pkgs, pkgs,
userName, userName,
userEmail,
... ...
}: { }: 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 {
# Import sub modules # Import sub modules
imports = [ imports = map (module: import module {inherit lib pkgs dirs userName userEmail;}) [
./atuin.nix ./atuin.nix
./shell.nix ./shell.nix
./core.nix ./packages
./git.nix ./git.nix
./starship.nix ./starship.nix
./eza.nix ./eza.nix
@ -25,10 +33,24 @@
if pkgs.stdenv.isDarwin if pkgs.stdenv.isDarwin
then "/Users/${userName}" then "/Users/${userName}"
else "/home/${userName}"; else "/home/${userName}";
sessionVariables = { sessionVariables = {
XDG_CURRENT_DESKTOP = "sway"; XDG_CURRENT_DESKTOP = "sway";
XDG_SESSION_TYPE = "wayland";
XDG_CONFIG_HOME = "$HOME/.config";
XDG_CACHE_HOME = "$HOME/.cache";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_STATE_HOME = "$HOME/.local/state";
}; };
stateVersion = "24.05";
pointerCursor = lib.mkIf pkgs.stdenv.isLinux {
gtk.enable = true;
package = pkgs.catppuccin-cursors.mochaDark;
name = "catppuccin-mocha-dark-cursors";
size = 22;
};
stateVersion = "24.11";
}; };
# Let Home Manager install and manage itself. # Let Home Manager install and manage itself.

View File

@ -1,12 +1,6 @@
{...}: { {...}: {
services.flatpak = { services.flatpak = {
remotes = [ enable = true;
{
name = "flathub";
location = "https://dl.flathub.org/repo/flathub..flatpakrepo";
}
];
packages = [ packages = [
"com.github.tchx84.Flatseal" "com.github.tchx84.Flatseal"
"com.slack.Slack" "com.slack.Slack"
@ -18,5 +12,12 @@
"org.prismlauncher.PrismLauncher" "org.prismlauncher.PrismLauncher"
"sh.cider.Cider" "sh.cider.Cider"
]; ];
update = {
auto = {
enable = true;
onCalendar = "weekly";
};
};
}; };
} }

View File

@ -3,10 +3,6 @@
userEmail, userEmail,
... ...
}: { }: {
# `programs.git` will generate the config file: ~/.config/git/config
# to make git use this config file, `~/.gitconfig` should not exist!
#
# https://git-scm.com/docs/git-config#Documentation/git-config.txt---global
home.activation.removeExistingGitconfig = lib.hm.dag.entryBefore ["checkLinkTargets"] '' home.activation.removeExistingGitconfig = lib.hm.dag.entryBefore ["checkLinkTargets"] ''
rm -f ~/.gitconfig rm -f ~/.gitconfig
''; '';
@ -19,7 +15,8 @@
extraConfig = { extraConfig = {
init.defaultBranch = "master"; init.defaultBranch = "master";
push.autoSetupRemote = true; push.autoSetupRemote = true;
pull.rebase = true; pull.merge = true;
merge.tool = "nvimdiff";
}; };
ignores = [ ignores = [
@ -30,9 +27,12 @@
aliases = { aliases = {
# common aliases # common aliases
a = "add";
ap = "add -p";
br = "branch"; br = "branch";
co = "checkout"; co = "checkout";
st = "status"; st = "status -sb";
status = "status -sb";
ls = "log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate"; ls = "log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate";
ll = "log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate --numstat"; ll = "log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate --numstat";
cm = "commit -m"; cm = "commit -m";
@ -40,7 +40,7 @@
dc = "diff --cached"; dc = "diff --cached";
amend = "commit --amend -m"; amend = "commit --amend -m";
# aliases for submodule # aliases for submodules
update = "submodule update --init --recursive"; update = "submodule update --init --recursive";
foreach = "submodule foreach"; foreach = "submodule foreach";
}; };

View File

@ -1,7 +1,14 @@
{...}: { {dirs, ...}: {
programs.neovim = { programs.neovim = {
enable = true; enable = true;
defaultEditor = true; defaultEditor = true;
vimAlias = true; vimAlias = true;
}; };
xdg.configFile = {
nvim = {
onChange = "nvim --headless -c 'if exists(\":LuaCacheClear\") | :LuaCacheClear' +quitall";
source = dirs.defaults + /nvim;
};
};
} }

View File

@ -1,4 +1,8 @@
{pkgs, ...}: { {
lib,
pkgs,
...
}: {
home.packages = with pkgs; [ home.packages = with pkgs; [
nnn # terminal file manager nnn # terminal file manager
@ -21,6 +25,10 @@
fh fh
aria2 aria2
yt-dlp yt-dlp
obsidian
vscode
weechat
inetutils
# misc # misc
cowsay cowsay
@ -37,23 +45,13 @@
nodejs nodejs
cargo cargo
python3 python3
jetbrains.rust-rover
jetbrains.rider
# nix specific stuff # nix specific stuff
nixd nixd
deadnix deadnix
alejandra alejandra
statix statix
# productivity
iterm2
discord
obsidian
vscode
weechat
# iamb
ollama
# games?
# prismlauncher
]; ];
} }

10
home/packages/darwin.nix Normal file
View File

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

11
home/packages/default.nix Normal file
View File

@ -0,0 +1,11 @@
{
pkgs,
lib,
...
}: {
imports = [
./common.nix
./darwin.nix
./linux.nix
];
}

15
home/packages/linux.nix Normal file
View File

@ -0,0 +1,15 @@
{
pkgs,
lib,
...
}: {
home.packages = lib.mkIf pkgs.stdenv.isLinux (with pkgs; [
imv
betterdiscordctl
vesktop
xdg-utils
mcrcon
xfce.thunar
pavucontrol
]);
}

0
home/packages/server.nix Normal file
View File

View File

View File

@ -22,7 +22,6 @@
# top alias # top alias
top = "btm"; top = "btm";
htop = "btm";
}; };
functions = { functions = {
@ -69,4 +68,18 @@
fi fi
''; '';
}; };
programs.bash = {
enable = true;
initExtra = ''
if [[ -z "$BASH_EXECUTION_STRING" ]]; then
if [[ -n "$ZSH_VERSION" ]]; then
LOGIN_OPTION="--login"
else
LOGIN_OPTION=""
fi
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
fi
'';
};
} }

View File

@ -1,6 +1,10 @@
{pkgs, ...}: let {
lib,
pkgs,
...
}: let
dirs = { dirs = {
defaults = ./defaults; defaults = ../defaults;
}; };
in { in {
wayland.windowManager.sway = { wayland.windowManager.sway = {
@ -14,87 +18,14 @@ in {
}; };
}; };
programs.wofi.enable = pkgs.stdenv.isLinux; xdg.configFile."sway/config".source = lib.mkForce (dirs.defaults + /sway/config);
programs.mako.enable = pkgs.stdenv.isLinux; 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.rofi.enable = pkgs.stdenv.isLinux;
services.mako.enable = pkgs.stdenv.isLinux;
# programs.cliphist.enable = pkgs.stdenv.isLinux; # programs.cliphist.enable = pkgs.stdenv.isLinux;
programs.waybar = { programs.waybar = {
enable = pkgs.stdenv.isLinux; enable = pkgs.stdenv.isLinux;
systemd.enable = true; systemd.enable = true;
style = ''
* {
border: none;
border-radius: 0;
font-family: "Monaspace Krypton";
font-size: 13px;
min-height: 0;
}
window#waybar {
background: #1f2335;
border-bottom: 1px solid #24283b;
color: #c0caf5;
opacity: 0.808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808;
}
#workspaces button {
padding: 5px;
padding-left: 12px;
padding-right: 12px;
background: transparent;
color: #c0caf5;
border-bottom: 1px solid transparent;
}
#workspaces button.focused {
background: #c0caf5;
color: #1d2021;
border-bottom: 1px solid #c0caf5;
}
#cpu,
#memory,
#pulseaudio,
#network,
#battery,
#clock,
#custom-playerctl {
padding: 0 10px;
margin: 0 5px;
}
#battery.charging {
color: #9ece6a;
}
#battery.warning:not(.charging) {
color: #ff9e64;
}
@keyframes blink {
to {
background-color: #1d2021;
color: #ebdbb2;
}
}
#battery.critical:not(.charging) {
background: #f7768e;
color: #ebdbb2;
border-bottom: 1px solid #ebdbb2;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#network.disconnected {
color: #cc241d;
}
#pulseaudio.muted {
color: #cc241d;
}
'';
}; };
} }

27
modules/apps/flatpak.nix Normal file
View File

@ -0,0 +1,27 @@
{
lib,
pkgs,
flatpakPackages ? [],
flatpakRemotes ? [],
...
}: {
services.flatpak = {
enable = true;
remotes =
if flatpakRemotes == []
then [
{
name = "flathub";
location = "https://dl.flathub.org/repo/flathub.flatpakrepo";
}
]
else flatpakRemotes;
packages = flatpakPackages;
update = {
auto = {
enable = true;
onCalendar = "weekly";
};
};
};
}

159
modules/apps/gaming.nix Normal file
View File

@ -0,0 +1,159 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.gaming;
in {
options.gaming = {
steam = {
enable = lib.mkEnableOption "Steam gaming platform";
firewall = {
remotePlay = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Open firewall ports for Steam Remote Play";
};
localNetworkGameTransfers = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Open firewall ports for local network game transfers";
};
};
};
gamemode = {
enable = lib.mkEnableOption "Gamemode performance optimization";
config = lib.mkOption {
type = lib.types.attrs;
default = {};
description = "Custom Gamemode configuration options";
};
};
gamescope = {
enable = lib.mkEnableOption "Gamescope gaming compositor";
settings = {
resolution = lib.mkOption {
type = lib.types.nullOr (lib.types.submodule {
options = {
width = lib.mkOption {
type = lib.types.int;
description = "Gamescope rendering width";
};
height = lib.mkOption {
type = lib.types.int;
description = "Gamescope rendering height";
};
};
});
default = null;
description = "Gamescope rendering resolution";
};
refreshRate = lib.mkOption {
type = lib.types.nullOr lib.types.int;
default = null;
description = "Gamescope rendering refresh rate";
};
};
};
lutris = {
enable = lib.mkEnableOption "Lutris game manager and launcher";
package = lib.mkOption {
type = lib.types.package;
default = pkgs.lutris;
description = "Lutris package to use (allows for custom or alternative packages)";
};
wine = {
enable = lib.mkEnableOption "Enable Wine support for Lutris";
package = lib.mkOption {
type = lib.types.package;
default = pkgs.wine-staging;
description = "Wine package to use with Lutris";
};
};
# Compatibility layers for Lutris
compatibility = {
protonSupport = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable Proton-like compatibility layers for Lutris";
};
extraTools = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
description = "Additional compatibility tools for Lutris";
};
};
# Additional system packages for Lutris
extraPackages = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
description = "Additional packages to install alongside Lutris";
};
};
minecraft = {
enable = lib.mkEnableOption "Minecraft in the form of PrismLauncher, a tool for launching Minecraft";
};
ffxiv = {
enable = lib.mkEnableOption "Final Fantasy XIV and it's accompanied (unofficial) launcher";
};
};
config = {
programs.steam = lib.mkIf cfg.steam.enable {
enable = true;
remotePlay.openFirewall = cfg.steam.firewall.remotePlay;
localNetworkGameTransfers.openFirewall = cfg.steam.firewall.localNetworkGameTransfers;
};
programs.gamemode = lib.mkIf cfg.gamemode.enable {
enable = true;
settings = cfg.gamemode.config;
};
programs.gamescope = lib.mkIf cfg.gamescope.enable {
enable = true;
# Apply custom resolution if specified
args =
lib.optional (cfg.gamescope.settings.resolution != null) [
"-w"
(toString cfg.gamescope.settings.resolution.width)
"-h"
(toString cfg.gamescope.settings.resolution.height)
]
++ lib.optional (cfg.gamescope.settings.refreshRate != null) [
"-r"
(toString cfg.gamescope.settings.refreshRate)
];
};
environment.systemPackages =
(lib.optionals cfg.lutris.enable (
[cfg.lutris.package] ++
(lib.optionals cfg.lutris.wine.enable [
cfg.lutris.wine.package
pkgs.winetricks
]) ++
(lib.optionals cfg.lutris.compatibility.protonSupport [
pkgs.protonup-ng
pkgs.protonup-qt
]) ++
cfg.lutris.compatibility.extraTools ++
cfg.lutris.extraPackages
)) ++
(lib.optionals cfg.minecraft.enable [pkgs.prismlauncher]) ++
(lib.optionals cfg.ffxiv.enable [pkgs.xivlauncher]);
};
}

0
modules/apps/xdg.nix Normal file
View File

9
modules/common/README.md Normal file
View File

@ -0,0 +1,9 @@
# Shared configurations
Developed and designed by Wyatt J. Miller, 2024
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.

View File

@ -1,19 +1,14 @@
{ pkgs, lib, ... }:
{ {
pkgs,
lib,
...
}: {
# enable flakes globally # enable flakes globally
nix.settings.experimental-features = [ "nix-command" "flakes" ]; nix.settings.experimental-features = ["nix-command" "flakes"];
# Allow unfree packages # Allow unfree packages
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
# Auto upgrade nix package and the daemon service.
services.nix-daemon.enable = true;
# Use this instead of services.nix-daemon.enable if you
# don't wan't the daemon service to be managed for you.
# nix.useDaemon = true;
nix.package = pkgs.nix; nix.package = pkgs.nix;
# do garbage collection weekly to keep disk usage low # do garbage collection weekly to keep disk usage low

View File

@ -0,0 +1,11 @@
{
pkgs,
lib,
...
}: {
imports = [
./core.nix
./fonts.nix
./users.nix
];
}

14
modules/common/fonts.nix Normal file
View File

@ -0,0 +1,14 @@
{
pkgs,
lib,
...
}: {
fonts.packages = with pkgs; [
nerdfonts
noto-fonts
noto-fonts-emoji
liberation_ttf
noto-fonts-cjk-sans
monaspace
];
}

31
modules/common/users.nix Normal file
View File

@ -0,0 +1,31 @@
{
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;
}
(lib.mkIf (pkgs.stdenv.isLinux) {
group = "${userName}";
isNormalUser = true;
})
];
security.sudo.wheelNeedsPassword = false;
users.groups.wyatt = {};
nix.settings.trusted-users = [userName];
}

View File

@ -0,0 +1,105 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.graphics;
in {
options.graphics = {
gpuVendor = mkOption {
type = types.enum ["nvidia" "amd" "intel" "none"];
default = "none";
description = "GPU vendor to configure graphics drivers for";
};
enable = mkEnableOption "graphics configuration";
wayland = {
enable = mkEnableOption "Wayland support";
variableRefreshRate = mkOption {
type = types.bool;
default = false;
description = "Enable variable refresh rate (FreeSync/G-Sync) support";
};
};
vulkan = {
enable = mkEnableOption "Vulkan support";
debug = mkOption {
type = types.bool;
default = false;
description = "Enable Vulkan validation layers";
};
};
};
config = mkIf cfg.enable (mkMerge [
{
environment.systemPackages = with pkgs; [
glxinfo
vulkan-tools
mesa-demos
];
}
(mkIf (cfg.gpuVendor == "nvidia") {
services.xserver.videoDrivers = ["nvidia"];
hardware.nvidia = {
package = config.boot.kernelPackages.nvidiaPackages.stable;
open = true;
modesetting.enable = true;
powerManagement.enable = true;
};
environment.systemPackages = with pkgs; [
nvidia-vaapi-driver
nvtopPackages.full
];
})
(mkIf (cfg.gpuVendor == "amd") {
services.xserver.videoDrivers = ["amdgpu"];
hardware.opengl.extraPackages = with pkgs; [
amdvlk
];
environment.systemPackages = with pkgs; [
radeontop
];
})
(mkIf (cfg.gpuVendor == "intel") {
services.xserver.videoDrivers = ["modesetting"];
hardware.opengl.extraPackages = with pkgs; [
intel-media-driver
intel-compute-runtime
];
})
(mkIf cfg.wayland.enable {
programs.xwayland.enable = true;
environment.sessionVariables = {
MOZ_ENABLE_WAYLAND = "1";
QT_QPA_PLATFORM = "wayland";
SDL_VIDEODRIVER = "wayland";
};
})
(mkIf cfg.vulkan.enable {
environment.systemPackages = with pkgs;
[
vulkan-loader
vulkan-validation-layers
]
++ (
if cfg.vulkan.debug
then [
vulkan-tools
]
else []
);
})
]);
}

View File

@ -1,27 +0,0 @@
{
pkgs,
userName,
hostname,
...
} @ args: {
# Set up networking configuration
networking.hostName = hostname;
networking.computerName = hostname;
# networking.firewall.enable = true; # VERY important, do not touch
# networking.firewall.allowedTCPPorts = [];
# networking.firewall.allowedUDPPorts = [];
# networking.networkmanager.enable = pkgs.stdenv.isLinux; # Linux tool for managing network connections
system.defaults.smb.NetBIOSName = hostname;
# Set up user accounts
# Don't forget to set a password with passwd!
users.users."${userName}" = {
home =
if pkgs.stdenv.isDarwin
then "/Users/${userName}"
else "/home/${userName}";
description = userName;
};
nix.settings.trusted-users = [userName];
}

15
modules/machine/README.md Normal file
View File

@ -0,0 +1,15 @@
# Machine specific configuration directories
These are where the machine specific configurations live.
I like Final Fantasy, alright? Isn't everyone supposed to have a hobby?
## Naming schemes
### Desktops, Laptops, and Workstations
These are named after Final Fantasy VII characters.
### Servers/Network Infrastructure
These are named after Final Fantasy summons.

View File

@ -0,0 +1,13 @@
# Machine specific configuration - cloud
Designed and developed by Wyatt J. Miller, 2024
Licensed by the Mozilla Public License v2
## Synopsis
This directory is where the machine-specific configuration files for hostname `cloud` live, my primary desktop. These files get called by the root `flake.nix` file.
### `TODO` list
- Migrate to (disko)[https://github.com/nix-community/disko]

View File

@ -0,0 +1,180 @@
{
config,
lib,
pkgs,
userName,
...
}: let
flatpakPackages = [
"com.github.tchx84.Flatseal"
"com.slack.Slack"
"info.beyondallreason.bar"
"io.dbeaver.DBeaverCommunity"
"io.openrct2.OpenRCT2"
"md.obsidian.Obsidian"
"org.prismlauncher.PrismLauncher"
"sh.cider.Cider"
];
in {
imports = [
(import ../../apps/flatpak.nix {
inherit lib pkgs flatpakPackages;
})
../../apps/gaming.nix
../../graphics
../../pwrMgmt
../../networking/core.nix
../../sound/pipewire.nix
../../sound/shairport.nix
../../virtualization/podman.nix
../../virtualization/hardware.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;
# Enable Bluetooth if present
hardware.bluetooth.enable = true;
# Set your timezone
time.timeZone = "America/Detroit";
# Install packages to be installed system-wide
environment.systemPackages = with pkgs; [
vim
neovim
git
wireguard-tools
grim
slurp
playerctl
light
brightnessctl
firefox
wttrbar
cliphist
patchelf
nix-ld
];
# Set the EDITOR global environment variable to neovim
environment.variables.EDITOR = "nvim";
# 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;
# Graphics module (../../graphics/default.nix)
graphics = {
enable = true;
gpuVendor = "amd"; # or "amd" or "intel"
wayland.enable = true;
vulkan.enable = true;
};
# Gaming module (see ../../apps/gaming.nix)
gaming = {
steam = {
enable = true;
firewall = {
remotePlay = true;
localNetworkGameTransfers = true;
};
};
gamemode.enable = true;
gamescope.enable = true;
lutris = {
enable = true;
wine = {
enable = true;
package = pkgs.wine-staging;
};
compatibility = {
protonSupport = true;
};
extraPackages = with pkgs; [
gamemode
mangohud
];
};
ffxiv.enable = true;
minecraft.enable = true;
};
# Power management (see ../../pwrMgmt/default.nix)
pwrMgmt = {
enable = true;
cpuFreqGovernor = "performance";
powertop.enable = false;
};
# Podman module (see ../../virtualization/podman.nix)
podman = {
enable = true;
extraPackages = with pkgs; [
docker-credential-helpers
toolbox
cosign
crane
podman-tui
podman-desktop
];
};
# Core networking module (see ../../networking/core.nix)
network = {
firewall.enable = true;
networkManager.enable = true;
};
# Enable dconf
programs.dconf.enable = true;
# Add username to groups "wheel" and "video" - more may be added here later
users.users.${userName}.extraGroups = ["wheel" "video" "gamemode" "podman" "network"];
# Flatpak packages (see ../../apps/flatpak.nix)
services.flatpak.packages = flatpakPackages;
# XDG stuff
xdg = {
portal = {
enable = true;
wlr.enable = true;
config = {
common = {
default = [
"wlr"
];
};
};
xdgOpenUsePortal = true;
extraPortals = with pkgs; [
xdg-desktop-portal-wlr
xdg-desktop-portal-gtk
];
};
};
system.stateVersion = "24.11";
}

View File

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

View File

@ -0,0 +1,45 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-amd"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-label/COMPUTER";
fsType = "xfs";
};
fileSystems."/boot" = {
device = "/dev/disk/by-label/BOOT";
fsType = "vfat";
options = ["fmask=0022" "dmask=0022"];
};
swapDevices = [
{device = "/dev/disk/by-label/SWAP";}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp9s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp8s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@ -0,0 +1,9 @@
# Machine specific configuration - ixion
Designed and developed by Wyatt J. Miller, 2024
Licensed by the Mozilla Public License v2
## Synopsis
This directory is currently empty so, currently, there's nothing to see! However, this is where the machine-specific configuration files for hostname `ixion` live, my storage, status, game, and media server. These files get called by the root `flake.nix` file.

View File

@ -0,0 +1,9 @@
# Machine specific configuration - sephiroth
Designed and developed by Wyatt J. Miller, 2024
Licensed by the Mozilla Public License v2
## Synopsis
This directory is where the machine-specific configuration files for hostname `sephiroth` live, my primary laptop. These files get called by the root `flake.nix` file.

View File

@ -1,5 +1,4 @@
{ pkgs, ... }: { {pkgs, ...}: {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
neovim neovim
git git
@ -9,17 +8,11 @@
homebrew = { homebrew = {
enable = true; enable = true;
onActivation = { onActivation = {
autoUpdate = false; autoUpdate = false;
# 'zap': uninstalls all formulae(and related files) not listed here.
cleanup = "zap"; cleanup = "zap";
}; };
# Applications to install from Mac App Store using mas.
# You need to install all these Apps manually first so that your apple account have records for them.
# otherwise Apple Store will refuse to install them.
# For details, see https://github.com/mas-cli/mas
masApps = { masApps = {
Xcode = 497799835; Xcode = 497799835;
"Reeder 5." = 1529448980; "Reeder 5." = 1529448980;
@ -35,6 +28,9 @@
]; ];
casks = [ casks = [
"ghostty"
"raycast"
"jordanbaird-ice"
]; ];
}; };
} }

View File

@ -1,28 +1,24 @@
{pkgs, ...}: { {
pkgs,
hostname,
...
}: {
imports = [
../../virtualization/podman.nix
];
system = { system = {
# activationScripts are executed every time you boot the system or run `nixos-rebuild` / `darwin-rebuild`.
activationScripts.postUserActivation.text = '' activationScripts.postUserActivation.text = ''
# activateSettings -u will reload the settings from the database and apply them to the current session,
# so we do not need to logout and login again to make the changes take effect.
/System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u /System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u
''; '';
defaults = { defaults = {
menuExtraClock.Show24Hour = true; # show 24 hour clock menuExtraClock.Show24Hour = true;
# customize dock
dock = { dock = {
autohide = true; autohide = true;
# show-recents = false; # disable recent apps
# # customize Hot Corners
# wvous-tl-corner = 2; # top-left - Mission Control
# wvous-tr-corner = 13; # top-right - Lock Screen
# wvous-bl-corner = 3; # bottom-left - Application Windows
# wvous-br-corner = 4; # bottom-right - Desktop
}; };
# # customize finder
finder = { finder = {
_FXShowPosixPathInTitle = true; # show full path in finder title _FXShowPosixPathInTitle = true; # show full path in finder title
AppleShowAllExtensions = true; # show all file extensions AppleShowAllExtensions = true; # show all file extensions
@ -32,7 +28,6 @@
ShowStatusBar = true; # show status bar ShowStatusBar = true; # show status bar
}; };
# # customize trackpad
# trackpad = { # trackpad = {
# Clicking = true; # enable tap to click # Clicking = true; # enable tap to click
# TrackpadRightClick = true; # enable two finger right click # TrackpadRightClick = true; # enable two finger right click
@ -145,6 +140,13 @@
# }; # };
}; };
networking.hostName = hostname;
networking.computerName = hostname;
# networking.firewall.enable = true; # VERY important, do not touch
# networking.firewall.allowedTCPPorts = [];
# networking.firewall.allowedUDPPorts = [];
system.defaults.smb.NetBIOSName = hostname;
# Add ability to used TouchID for sudo authentication # Add ability to used TouchID for sudo authentication
security.pam.enableSudoTouchIdAuth = true; security.pam.enableSudoTouchIdAuth = true;
@ -157,6 +159,23 @@
pkgs.bash pkgs.bash
]; ];
# Auto upgrade nix package and the daemon service.
# services.nix-daemon.enable = true;
# Use this instead of services.nix-daemon.enable if you
# don't wan't the daemon service to be managed for you.
services.nix-daemon.enable = true;
system.stateVersion = 5;
podman = {
enable = true;
extraPackages = with pkgs; [
docker-credential-helpers
cosign
crane
];
};
# Set your time zone. # Set your time zone.
time.timeZone = "America/Detroit"; time.timeZone = "America/Detroit";
} }

View File

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

View File

@ -0,0 +1,9 @@
# Machine specific configuration - valefor
Designed and developed by Wyatt J. Miller, 2024
Licensed by the Mozilla Public License v2
## Synopsis
This directory is currently empty so, currently, there's nothing to see! However, this is where the machine-specific configuration files for hostname `valefor` live, my apartment appliance server. These files get called by the root `flake.nix` file.

View File

@ -0,0 +1,103 @@
{
config,
lib,
pkgs,
userName,
...
}: {
imports = [
../../graphics
../../pwrMgmt
../../networking/core.nix
../../networking/dns.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;
# Enable Bluetooth if present
hardware.bluetooth.enable = true;
# Set your timezone
time.timeZone = "America/Detroit";
# Install packages to be installed system-wide
environment.systemPackages = with pkgs; [
vim
neovim
git
patchelf
nix-ld
];
# Set the EDITOR global environment variable to neovim
environment.variables.EDITOR = "nvim";
# 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;
# Graphics module (../../graphics/default.nix)
graphics = {
enable = true;
gpuVendor = "intel";
wayland.enable = true;
vulkan.enable = true;
};
# Power management (see ../../pwrMgmt/default.nix)
pwrMgmt = {
enable = true;
cpuFreqGovernor = "performance";
powertop.enable = false;
};
# Podman module (see ../../virtualization/podman.nix)
podman = {
enable = true;
extraPackages = with pkgs; [
docker-credential-helpers
toolbox
cosign
crane
podman-tui
podman-desktop
];
};
# Core networking module (see ../../networking/core.nix)
network = {
firewall.enable = true;
networkManager.enable = true;
};
# DNS module (see ../../networking/dns.nix)
dns = {
technitium.enable = true;
};
# Add username to groups "wheel" and "video" - more may be added here later
users.users.${userName}.extraGroups = ["wheel" "podman" "network"];
system.stateVersion = "24.11";
}

View File

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

View File

@ -0,0 +1,39 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/ff89bde1-4b33-4277-b649-b92700b2406c";
fsType = "xfs";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/3A4B-6866";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@ -0,0 +1,90 @@
# Network and networking modules
This directory houses all network, firewall, DHCP, DNS, and all other related networking enablement.
## `core.nix`
This is where the firewall and NetworkManager live. For the firewall, you have pre-defined options that will open ports for you by enabling some network service.
For example:
```nix
tcpPorts.web.enable = true;
udpPorts.dns.enable = true;
```
Here's a more featureful example of how you would enable a firewall and set up NetworkManager:
```nix
customNetworking = {
firewall = {
enable = true;
# Open web service ports
tcpPorts.web.enable = true;
# Custom TCP ports
tcpPorts.allowedPorts = [ 8080 22 ];
# Custom UDP ports
udpPorts.allowedPorts = [ 5000 ];
};
networkManager = {
enable = true;
extraPlugins = with pkgs; [
# Additional NetworkManager plugins
networkmanager-openvpn
networkmanager-openconnect
];
};
};
```
As shown above, you'll have to open ports for services you would want to access remotely.
## DNS
There are two options here: BIND9 (or simply Bind) or Technitium DNS server. Enabling both DNS servers will throw an error and your configuration will not build.
You'll have to import `./dns.nix` for the services to be enabled.
Here's an example of what configuration might look like:
```nix
dns.bind = {
enable = true;
settings = {
interfaces = [ "127.0.0.1" "192.168.100.100" ];
zones = [
{
name = "example.com";
type = "master";
file = "/etc/named/zones/example.com.zone";
}
];
extraConfig = ''
// Additional BIND configuration
options {
directory "/var/named";
recursion yes;
}
'';
}
};
```
_or_
```nix
dns.technitium = {
enable = true;
settings = {
address = "192.168.100.0";
port = 5380;
extraOptions = {
LOG_LEVEL = "info";
};
}
};
```

View File

@ -0,0 +1,68 @@
{
config,
lib,
...
}: let
cfg = config.network;
in {
options.network = {
firewall = {
enable = lib.mkEnableOption "system firewall";
tcpPorts = {
ssh.enable = lib.mkEnableOption "SSH service port (22)";
web.enable = lib.mkEnableOption "common web service ports (80, 443)";
smtp.enable = lib.mkEnableOption "SMTP service ports (25, 465, 587)";
imap.enable = lib.mkEnableOption "IMAP service ports (143, 993)";
mysql.enable = lib.mkEnableOption "MySQL service port (3306)";
mssql.enable = lib.mkEnableOption "Microsoft SQL Server service port (1433)";
postgres.enable = lib.mkEnableOption "Postgres service port (5432)";
allowedPorts = lib.mkOption {
type = lib.types.listOf lib.types.port;
default = [];
description = "List of custom TCP ports to open";
};
};
udpPorts = {
dns.enable = lib.mkEnableOption "DNS service port (53)";
ntp.enable = lib.mkEnableOption "NTP service port (123)";
allowedPorts = lib.mkOption {
type = lib.types.listOf lib.types.port;
default = [];
description = "List of custom UDP ports to open";
};
};
};
networkManager = {
enable = lib.mkEnableOption "NetworkManager for network connection management";
extraPlugins = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
description = "Additional NetworkManager plugins to install";
};
};
};
config = {
networking.firewall = {
enable = cfg.firewall.enable;
allowedTCPPorts = lib.flatten [
(lib.optionals cfg.firewall.tcpPorts.ssh.enable [22])
(lib.optionals cfg.firewall.tcpPorts.web.enable [80 443])
(lib.optionals cfg.firewall.tcpPorts.smtp.enable [25 465 587])
(lib.optionals cfg.firewall.tcpPorts.imap.enable [143 993])
(lib.optionals cfg.firewall.tcpPorts.mysql.enable [3306])
(lib.optionals cfg.firewall.tcpPorts.mssql.enable [1433])
(lib.optionals cfg.firewall.tcpPorts.postgres.enable [5432])
cfg.firewall.tcpPorts.allowedPorts
];
allowedUDPPorts = lib.flatten [
(lib.optionals cfg.firewall.udpPorts.dns.enable [53])
(lib.optionals cfg.firewall.udpPorts.ntp.enable [123])
cfg.firewall.udpPorts.allowedPorts
];
};
networking.networkmanager = {
enable = lib.mkForce cfg.networkManager.enable;
packages = cfg.networkManager.extraPlugins;
};
};
}

109
modules/networking/dns.nix Normal file
View File

@ -0,0 +1,109 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.dns;
in {
options.dns = {
bind = {
enable = lib.mkEnableOption "BIND DNS server";
settings = {
interfaces = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = ["127.0.0.1"];
description = "Network interfaces BIND should listen on (IPv4)";
};
interfaces6 = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = ["::1"];
description = "Network interfaces BIND should listen on (IPv6)";
};
zones = lib.mkOption {
type = lib.types.listOf (lib.types.submodule {
options = {
name = lib.mkOption {
type = lib.types.str;
description = "Name of the DNS zone";
};
type = lib.mkOption {
type = lib.types.enum ["master" "slave"];
default = "master";
description = "Type of DNS zone";
};
file = lib.mkOption {
type = lib.types.str;
default = "";
description = "Path to zone file";
};
};
});
default = [];
description = "DNS zones to configure";
};
extraConfig = lib.mkOption {
type = lib.types.lines;
default = "";
description = "Additional BIND configuration options";
};
};
};
technitium = {
enable = lib.mkEnableOption "Technitium DNS server";
settings = {
address = lib.mkOption {
type = lib.types.str;
default = "0.0.0.0";
description = "IP address Technitium should listen on";
};
port = lib.mkOption {
type = lib.types.port;
default = 5380;
description = "Port for Technitium DNS server";
};
extraOptions = lib.mkOption {
type = lib.types.attrs;
default = {};
description = "Additional Technitium configuration options";
};
};
};
};
config = lib.mkMerge [
(lib.mkIf cfg.bind.enable {
services.bind = {
enable = true;
listenOn = cfg.bind.settings.interfaces;
listenOnIpv6 = cfg.bind.settings.interfaces6;
zones =
map (zone: {
name = zone.name;
type = zone.type;
file = zone.file;
})
cfg.bind.settings.zones;
extraConfig = cfg.bind.settings.extraConfig;
};
networking.firewall = {
allowedTCPPorts = [53];
allowedUDPPorts = [53];
};
environment.systemPackages = [pkgs.bind];
})
(lib.mkIf cfg.technitium.enable {
services.technitium-dns-server = {
enable = true;
openFirewall = true;
firewallTCPPorts = [53 5380 53443];
firewallUDPPorts = [53];
};
})
];
}

View File

@ -1,148 +0,0 @@
{
inputs,
config,
lib,
pkgs,
userName,
...
}: {
# Bring in the hardware configuration
imports = [
/etc/nixos/hardware-configuration.nix
];
# Enable flakes for NixOS
nix.settings.experimental-features = ["nix-command" "flakes"];
# Utilize systemd-boot
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# Install and enable common graphics drivers
hardware.opengl = {
driSupport = true;
extraPackages = with pkgs; [
mesa_drivers
libvdpau-va-gl
libva
libva-utils
intel-vaapi-driver # for Intel
intel-media-driver # for Intel
rocm-opencl-icd # for AMD
];
};
# For systems with AMD graphics, this enables Vulkan on 32-bit applications
# For 64-bit application, however, Vulkan is enabled by default
hardware.graphics.driSupport32Bit = true;
# For systems with AMD graphics, enable AMDVLK
hardware.hardware = {
extraPackages = with pkgs; [
amdvlk
];
extraPackages32 = with pkgs; [
driversi686Linux
];
};
# Enable Bluetooth if present
hardware.bluetooth.enable = true;
# Set your timezone
time.timeZone = "America/Detroit";
# Enable Pipewire (sound)
services.pipewire = {
enable = true;
pulse.enable = true;
};
# Enable touchpad
services.libinput.enable = true;
# Install packages to be installed system-wide
environment.systemPackages = with pkgs; [
vim
neovim
git
wireguard-tools
podman
toolbox
grim
slurp
playerctl
light
brightnessctl
wttrbar
cliphist
];
# Install system-wide fonts
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
liberation_ttf
monaspace
nerdfonts
];
# Set the EDITOR global environment variable to neovim
environment.variables.EDITOR = "nvim";
# 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;
# Enable power management
powerManagement = {
enable = true;
powertop.enable = false; # TODO: to be enabled on laptops
cpuFreqGovernor = "performace";
};
# Enable Steam and open various firewall ports when applicable
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
localNetworkGameTransfers = true;
};
# Add username to groups "wheel" and "video" - more may be added here later
users.users.${userName}.extraGroups = ["wheel" "video"];
# XDG stuff
xdg = {
portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-wlr
xdg-desktop-portal-gtk
];
};
};
# Firewall stuff not allowed in common user and network creation
networking.firewall.enable = true; # VERY important, do not touch
# networking.firewall.allowedTCPPorts = [];
# networking.firewall.allowedUDPPorts = [];
networking.networkmanager.enable = true; # Linux tool for managing network connections
# Enable Flatpak (app containerization)
services.flatpak.enable = true;
}

48
modules/pwrMgmt/README.md Normal file
View File

@ -0,0 +1,48 @@
# Power management modules
This directory houses my own custom defined power management settings. These are set in the machine-specific configurations (typically).
## Examples
Given that this configuration is in the `machine/<hostname>` directory (where hostname is the name of the computer your configuring):
### Desktop configuration
```nix
imports = [
../../pwrMgmt
# other configuration files here...
];
pwrMgmt = {
enable = true;
cpuFreqGovernor = "performance";
powertop.enable = false;
};
```
### Laptop configuration
```nix
imports = [
../../pwrMgmt
# other configuration files here...
];
pwrMgmt = {
enable = true;
cpuFreqGovernor = "powersave";
powertop = {
enable = true;
autotuneOnBoot = true;
};
battery = {
enable = true;
startChargeThreshold = 40;
stopChargeThreshold = 75;
};
};
```
Remember, these are just examples. Please suit these examples to fit your specific hardware.

View File

@ -0,0 +1,69 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.pwrMgmt;
in {
options.pwrMgmt = {
enable = lib.mkEnableOption "Custom power management configuration";
cpuFreqGovernor = lib.mkOption {
type = lib.types.enum [
"performance"
"powersave"
"ondemand"
"conservative"
];
default = "performance";
description = "CPU frequency scaling governor to use";
};
powertop = {
enable = lib.mkEnableOption "PowerTop power management tool";
autotuneOnBoot = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Automatically tune power settings on boot";
};
};
battery = {
enable = lib.mkEnableOption "Battery-specific power management";
startChargeThreshold = lib.mkOption {
type = lib.types.int;
default = 20;
description = "Percentage at which to start charging";
};
stopChargeThreshold = lib.mkOption {
type = lib.types.int;
default = 80;
description = "Percentage at which to stop charging";
};
};
};
config = lib.mkIf cfg.enable {
powerManagement = {
enable = true;
cpuFreqGovernor = cfg.cpuFreqGovernor;
};
environment.systemPackages = lib.mkIf cfg.powertop.enable [pkgs.powertop];
systemd.services.battery-charge-threshold = lib.mkIf cfg.battery.enable {
description = "Set battery charge thresholds";
wantedBy = ["multi-user.target"];
script = ''
if [ -f /sys/class/power_supply/BAT0/charge_start_threshold ]; then
echo ${toString cfg.battery.startChargeThreshold} > /sys/class/power_supply/BAT0/charge_start_threshold
fi
if [ -f /sys/class/power_supply/BAT0/charge_stop_threshold ]; then
echo ${toString cfg.battery.stopChargeThreshold} > /sys/class/power_supply/BAT0/charge_stop_threshold
fi
'';
};
};
}

19
modules/sound/README.md Normal file
View File

@ -0,0 +1,19 @@
# Sound and audio modules
This directory houses all sound and audio modules for a given system.
## Pipewire
Pipewire is the new kid on the block, and frankly, this new kid cleans the streets. With Pulseaudio and ALSA compatibility, this is basically the _defacto_ audio solution for every Linux workstation.
Although, for some use cases, expect me to write a Pulseaudio or an ALSA module here soon :P
All that's needed to get this working to import the `./pipewire.nix` into your machine's configuration.
## Shairport
This is a program where your computer is enabled with AirPlay! How cool is that??
All that's needed to get this working to import the `./shairport.nix` into your machine's configuration.
Note that this _only_ works with Pipewire.

View File

@ -0,0 +1,6 @@
{...}: {
services.pipewire = {
enable = true;
pulse.enable = true;
};
}

View File

@ -0,0 +1,7 @@
{pkgs, ...}: {
services.shairport-sync = {
enable = pkgs.stdenv.isLinux;
openFirewall = pkgs.stdenv.isLinux;
arguments = "-v -o pw";
};
}

View File

@ -0,0 +1,51 @@
# Virtualization modules
This directory houses all virtualization and container related enablement. Cloud native anyone??
## Hardware virtualization
This is for running virtual machines on the bare metal.
All that's needed to get this working to import the `./hardware.nix` into your machine's configuration.
## Docker (OCI containers)
This is for running the Docker runtime (rootful or rootless, rootful by default) to run OCI containers.
All that's needed to get this working to import the `./docker.nix` into your machine's configuration.
Note: I don't use Docker too much as I use Podman for development. I'd check the Podman documentation.
## Podman/Buildah (OCI containers)
This is for running the Podman runtime (rootless) to run OCI containers.
You will need to import `./podman.nix` into your machine configuration. Additionally, there's some added configuration to suit your needs.
Example:
```nix
podman = {
podman = {
enable = true;
extraPackages = with pkgs; [
docker-credential-helpers
toolbox
cosign
crane
podman-tui
podman-desktop
];
};
};
```
To get a full, comprehensive list of what you can do with the podman module, please check out (podman.nix)[./podman.nix]!
## Kubernetes
Coming soon!
## LXC/LXD
I don't have anything in the way of a nix configuration for LXC/LXD as I don't have a use-case for them. Come back later!

View File

@ -0,0 +1,7 @@
{...}: {
virtualisation.docker = {
enable = true;
enableOnBoot = true;
rootless = false;
};
}

View File

@ -0,0 +1,4 @@
{...}: {
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
}

View File

@ -0,0 +1,32 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.podman;
in {
options = {
podman = {
enable = lib.mkEnableOption "Podman container runtime";
extraPackages = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
description = "Additional container-related packages to install";
};
};
};
config = lib.mkIf cfg.enable {
environment.systemPackages =
[
pkgs.podman
pkgs.podman-compose
pkgs.buildah
pkgs.skopeo
pkgs.dive
]
++ cfg.extraPackages;
};
}