Compare commits
58 Commits
suite-swit
...
master
Author | SHA1 | Date | |
---|---|---|---|
fd83440ff8 | |||
cc7e26cecc | |||
1d6331c6cc | |||
983b83424b | |||
76dd1bafeb | |||
b0ca8ad6fa | |||
3a80ede26d | |||
c30ccd0074 | |||
ef484c8ff0 | |||
ea2820a1bb | |||
1c054207b2 | |||
b5b66f1c1b | |||
a1eb9b74c2 | |||
f10c3e7a8c | |||
1f5eda31b2 | |||
1484f3a04e | |||
539f0db8d1 | |||
65bf72cd5b | |||
50d1e00a02 | |||
30b7d23b3a | |||
c8990196b7 | |||
0c8c5c5f2a | |||
93c8464641 | |||
b9dd11dd7b | |||
51d8ee2887 | |||
86970a7f6c | |||
972cd76421 | |||
fe049f0594 | |||
39afe2d114 | |||
b6653cee0b | |||
1e3ffdf0a3 | |||
ea8607eb41 | |||
adabefd821 | |||
d8a9e92dff | |||
72c9007b05 | |||
c0bc83552b | |||
97818fbaf9 | |||
17da032af0 | |||
55d5cea59f | |||
e19f24b5dd | |||
ea90e55cbb | |||
9a435da5e3 | |||
fcd11e5127 | |||
92a92700df | |||
b5beb52de1 | |||
3e47cee382 | |||
50d37c0e6b | |||
fbaa38c1a5 | |||
33876f6bc9 | |||
c7641b639b | |||
929355fbca | |||
41022a0ae3 | |||
a518d73323 | |||
fc8c44c026 | |||
414420f3ce | |||
5dd97993d2 | |||
8868f0b825 | |||
5f45489bc2 |
65
README.md
65
README.md
@ -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
20
defaults/.neoconf.json
Normal 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
7
defaults/.stylua.toml
Normal 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
19
defaults/nvim/init.lua
Normal 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"
|
67
defaults/nvim/lazy-lock.json
Normal file
67
defaults/nvim/lazy-lock.json
Normal 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" }
|
||||||
|
}
|
17
defaults/nvim/lua/community.lua
Normal file
17
defaults/nvim/lua/community.lua
Normal 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
|
||||||
|
}
|
32
defaults/nvim/lua/lazy_setup.lua
Normal file
32
defaults/nvim/lua/lazy_setup.lua
Normal 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]])
|
72
defaults/nvim/lua/plugins/astrocore.lua
Normal file
72
defaults/nvim/lua/plugins/astrocore.lua
Normal 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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
114
defaults/nvim/lua/plugins/astrolsp.lua
Normal file
114
defaults/nvim/lua/plugins/astrolsp.lua
Normal 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,
|
||||||
|
},
|
||||||
|
}
|
37
defaults/nvim/lua/plugins/astroui.lua
Normal file
37
defaults/nvim/lua/plugins/astroui.lua
Normal 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 = "⠏",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
18
defaults/nvim/lua/plugins/catppuccin.lua
Normal file
18
defaults/nvim/lua/plugins/catppuccin.lua
Normal 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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
39
defaults/nvim/lua/plugins/mason.lua
Normal file
39
defaults/nvim/lua/plugins/mason.lua
Normal 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
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
24
defaults/nvim/lua/plugins/none-ls.lua
Normal file
24
defaults/nvim/lua/plugins/none-ls.lua
Normal 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,
|
||||||
|
}
|
15
defaults/nvim/lua/plugins/treesitter.lua
Normal file
15
defaults/nvim/lua/plugins/treesitter.lua
Normal 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
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
85
defaults/nvim/lua/plugins/user.lua
Normal file
85
defaults/nvim/lua/plugins/user.lua
Normal 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,
|
||||||
|
},
|
||||||
|
}
|
18
defaults/nvim/lua/polish.lua
Normal file
18
defaults/nvim/lua/polish.lua
Normal 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
6
defaults/nvim/neovim.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
base: lua51
|
||||||
|
|
||||||
|
globals:
|
||||||
|
vim:
|
||||||
|
any: true
|
8
defaults/nvim/selene.toml
Normal file
8
defaults/nvim/selene.toml
Normal 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
44
flake.lock
generated
@ -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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
75
flake.nix
75
flake.nix
@ -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
|
||||||
|
# ];
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
@ -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";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
14
home/git.nix
14
home/git.nix
@ -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";
|
||||||
};
|
};
|
||||||
|
@ -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;
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
@ -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
10
home/packages/darwin.nix
Normal 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
11
home/packages/default.nix
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
./common.nix
|
||||||
|
./darwin.nix
|
||||||
|
./linux.nix
|
||||||
|
];
|
||||||
|
}
|
15
home/packages/linux.nix
Normal file
15
home/packages/linux.nix
Normal 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
0
home/packages/server.nix
Normal file
0
home/packages/workstation.nix
Normal file
0
home/packages/workstation.nix
Normal 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
|
||||||
|
'';
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
@ -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
27
modules/apps/flatpak.nix
Normal 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
159
modules/apps/gaming.nix
Normal 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
0
modules/apps/xdg.nix
Normal file
9
modules/common/README.md
Normal file
9
modules/common/README.md
Normal 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.
|
@ -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
|
11
modules/common/default.nix
Normal file
11
modules/common/default.nix
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
./core.nix
|
||||||
|
./fonts.nix
|
||||||
|
./users.nix
|
||||||
|
];
|
||||||
|
}
|
14
modules/common/fonts.nix
Normal file
14
modules/common/fonts.nix
Normal 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
31
modules/common/users.nix
Normal 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];
|
||||||
|
}
|
105
modules/graphics/default.nix
Normal file
105
modules/graphics/default.nix
Normal 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 []
|
||||||
|
);
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
}
|
@ -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
15
modules/machine/README.md
Normal 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.
|
13
modules/machine/cloud/README.md
Normal file
13
modules/machine/cloud/README.md
Normal 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]
|
180
modules/machine/cloud/configuration.nix
Normal file
180
modules/machine/cloud/configuration.nix
Normal 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";
|
||||||
|
}
|
6
modules/machine/cloud/default.nix
Normal file
6
modules/machine/cloud/default.nix
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{...}: {
|
||||||
|
imports = [
|
||||||
|
./configuration.nix
|
||||||
|
./hardware-configuration.nix
|
||||||
|
];
|
||||||
|
}
|
45
modules/machine/cloud/hardware-configuration.nix
Normal file
45
modules/machine/cloud/hardware-configuration.nix
Normal 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;
|
||||||
|
}
|
9
modules/machine/ixion/README.md
Normal file
9
modules/machine/ixion/README.md
Normal 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.
|
9
modules/machine/sephiroth/README.md
Normal file
9
modules/machine/sephiroth/README.md
Normal 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.
|
@ -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"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -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";
|
||||||
}
|
}
|
6
modules/machine/sephiroth/default.nix
Normal file
6
modules/machine/sephiroth/default.nix
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{...}: {
|
||||||
|
imports = [
|
||||||
|
./apps.nix
|
||||||
|
./configuration.nix
|
||||||
|
];
|
||||||
|
}
|
9
modules/machine/valefor/README.md
Normal file
9
modules/machine/valefor/README.md
Normal 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.
|
103
modules/machine/valefor/configuration.nix
Normal file
103
modules/machine/valefor/configuration.nix
Normal 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";
|
||||||
|
}
|
6
modules/machine/valefor/default.nix
Normal file
6
modules/machine/valefor/default.nix
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{...}: {
|
||||||
|
imports = [
|
||||||
|
./configuration.nix
|
||||||
|
./hardware-configuration.nix
|
||||||
|
];
|
||||||
|
}
|
39
modules/machine/valefor/hardware-configuration.nix
Normal file
39
modules/machine/valefor/hardware-configuration.nix
Normal 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;
|
||||||
|
}
|
90
modules/networking/README.md
Normal file
90
modules/networking/README.md
Normal 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";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
68
modules/networking/core.nix
Normal file
68
modules/networking/core.nix
Normal 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
109
modules/networking/dns.nix
Normal 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];
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
@ -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
48
modules/pwrMgmt/README.md
Normal 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.
|
69
modules/pwrMgmt/default.nix
Normal file
69
modules/pwrMgmt/default.nix
Normal 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
19
modules/sound/README.md
Normal 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.
|
6
modules/sound/pipewire.nix
Normal file
6
modules/sound/pipewire.nix
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{...}: {
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
};
|
||||||
|
}
|
7
modules/sound/shairport.nix
Normal file
7
modules/sound/shairport.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
services.shairport-sync = {
|
||||||
|
enable = pkgs.stdenv.isLinux;
|
||||||
|
openFirewall = pkgs.stdenv.isLinux;
|
||||||
|
arguments = "-v -o pw";
|
||||||
|
};
|
||||||
|
}
|
51
modules/virtualization/README.md
Normal file
51
modules/virtualization/README.md
Normal 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!
|
7
modules/virtualization/docker.nix
Normal file
7
modules/virtualization/docker.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{...}: {
|
||||||
|
virtualisation.docker = {
|
||||||
|
enable = true;
|
||||||
|
enableOnBoot = true;
|
||||||
|
rootless = false;
|
||||||
|
};
|
||||||
|
}
|
4
modules/virtualization/hardware.nix
Normal file
4
modules/virtualization/hardware.nix
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{...}: {
|
||||||
|
virtualisation.libvirtd.enable = true;
|
||||||
|
programs.virt-manager.enable = true;
|
||||||
|
}
|
32
modules/virtualization/podman.nix
Normal file
32
modules/virtualization/podman.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user