Compare commits
4 Commits
master
...
ixion-buil
| Author | SHA1 | Date | |
|---|---|---|---|
| 0c1763528e | |||
| 59ed5f0463 | |||
| aa47f720ed | |||
| 831fce71b8 |
@@ -13,9 +13,9 @@ set $term alacritty
|
||||
set $menu wofi --term '$term'
|
||||
|
||||
### Output configuration
|
||||
output DP-3 pos 1920 0 res 1920x1080@60Hz
|
||||
output HDMI-A-1 pos 0 0 res 1920x1080@60Hz
|
||||
output DP-2 pos 3840 0 res 1920x1080@60Hz
|
||||
output DP-3 pos 3840 0 res 1920x1080@59Hz
|
||||
output HDMI-A-1 pos 0 0 res 1920x1080@59Hz
|
||||
output DP-2 pos 1920 0 res 1920x1080@60Hz
|
||||
|
||||
### Wallpaper
|
||||
output HDMI-A-1 bg ~/.wallpaper/.wallpaper.png fill
|
||||
@@ -25,22 +25,22 @@ output DP-3 bg ~/.wallpaper/.wallpaper.png fill
|
||||
### Workspace binding
|
||||
|
||||
## DP-3 bindings
|
||||
workspace 1 output DP-3
|
||||
workspace 2 output DP-3
|
||||
workspace 4 output DP-3
|
||||
workspace 5 output DP-3
|
||||
workspace 1 output DP-2
|
||||
workspace 2 output DP-2
|
||||
workspace 4 output DP-2
|
||||
workspace 5 output DP-2
|
||||
|
||||
## HDMI-A-1 bindings
|
||||
workspace 3 output HDMI-A-1
|
||||
workspace 9 output HDMI-A-1
|
||||
|
||||
## DP-2 bindings
|
||||
workspace 6 output DP-2
|
||||
workspace 7 output DP-2
|
||||
workspace 8 output DP-2
|
||||
workspace 6 output DP-3
|
||||
workspace 7 output DP-3
|
||||
workspace 8 output DP-3
|
||||
|
||||
### Colour options
|
||||
set $bg #24283b
|
||||
set $bg #24283b
|
||||
set $bg-inactive #323232
|
||||
set $bg-urgent #000000
|
||||
set $text #eeeeec
|
||||
|
||||
270
flake.lock
generated
270
flake.lock
generated
@@ -1,27 +1,5 @@
|
||||
{
|
||||
"nodes": {
|
||||
"aagl": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774186997,
|
||||
"narHash": "sha256-hyNVlhAqmwcBPl7XRkxbGcMt1BfCOdvuEfBDUf0k8Oo=",
|
||||
"owner": "ezKEa",
|
||||
"repo": "aagl-gtk-on-nix",
|
||||
"rev": "546e95f7ec74892a31f883a10b1723c35f2c2edd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "ezKEa",
|
||||
"repo": "aagl-gtk-on-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"darwin": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
@@ -29,16 +7,16 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772129556,
|
||||
"narHash": "sha256-Utk0zd8STPsUJPyjabhzPc5BpPodLTXrwkpXBHYnpeg=",
|
||||
"lastModified": 1757432263,
|
||||
"narHash": "sha256-qHn+/0+IOz5cG68BZUwL9BV3EO/e9eNKCjH3+N7wMdI=",
|
||||
"owner": "lnl7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "ebec37af18215214173c98cf6356d0aca24a2585",
|
||||
"rev": "1fef4404de4d1596aa5ab2bd68078370e1b9dcdb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "lnl7",
|
||||
"ref": "nix-darwin-25.11",
|
||||
"ref": "nix-darwin-25.05",
|
||||
"repo": "nix-darwin",
|
||||
"type": "github"
|
||||
}
|
||||
@@ -46,11 +24,11 @@
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1767039857,
|
||||
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
|
||||
"lastModified": 1747046372,
|
||||
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
|
||||
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -59,32 +37,44 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-schemas": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761577921,
|
||||
"narHash": "sha256-eK3/xbUOrxp9fFlei09XNjqcdiHXxndzrTXp7jFpOk8=",
|
||||
"rev": "47849c7625e223d36766968cc6dc23ba0e135922",
|
||||
"revCount": 107,
|
||||
"type": "tarball",
|
||||
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.2.0/019a4a84-544d-7c59-b26d-e334e320c932/source.tar.gz"
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A"
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-schemas_2": {
|
||||
"ghostty": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"zig": "zig",
|
||||
"zon2nix": "zon2nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761577921,
|
||||
"narHash": "sha256-eK3/xbUOrxp9fFlei09XNjqcdiHXxndzrTXp7jFpOk8=",
|
||||
"rev": "47849c7625e223d36766968cc6dc23ba0e135922",
|
||||
"revCount": 107,
|
||||
"type": "tarball",
|
||||
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.2.0/019a4a84-544d-7c59-b26d-e334e320c932/source.tar.gz"
|
||||
"lastModified": 1759330332,
|
||||
"narHash": "sha256-ZKyOgOOm9Itjbc5xi89xMtw+cnnOFfl79zndPMTzKpU=",
|
||||
"owner": "ghostty-org",
|
||||
"repo": "ghostty",
|
||||
"rev": "a5aff0e347b0016e2735d4ec4b4cdca96b5438d1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A"
|
||||
"owner": "ghostty-org",
|
||||
"repo": "ghostty",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
@@ -94,16 +84,16 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774274588,
|
||||
"narHash": "sha256-dnHvv5EMUgTzGZmA+3diYjQU2O6BEpGLEOgJ1Qe9LaY=",
|
||||
"lastModified": 1758463745,
|
||||
"narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "cf9686ba26f5ef788226843bc31fda4cf72e373b",
|
||||
"rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-25.11",
|
||||
"ref": "release-25.05",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
@@ -126,164 +116,132 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1744536153,
|
||||
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
|
||||
"type": "github"
|
||||
"lastModified": 1748189127,
|
||||
"narHash": "sha256-zRDR+EbbeObu4V2X5QCd2Bk5eltfDlCr5yvhBwUT6pY=",
|
||||
"rev": "7c43f080a7f28b2774f3b3f43234ca11661bf334",
|
||||
"type": "tarball",
|
||||
"url": "https://releases.nixos.org/nixos/25.05/nixos-25.05.802491.7c43f080a7f2/nixexprs.tar.xz"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
"type": "tarball",
|
||||
"url": "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1774244481,
|
||||
"narHash": "sha256-4XfMXU0DjN83o6HWZoKG9PegCvKvIhNUnRUI19vzTcQ=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4590696c8693fea477850fe379a01544293ca4e2",
|
||||
"type": "github"
|
||||
"lastModified": 1758360447,
|
||||
"narHash": "sha256-XDY3A83bclygHDtesRoaRTafUd80Q30D/Daf9KSG6bs=",
|
||||
"rev": "8eaee110344796db060382e15d3af0a9fc396e0e",
|
||||
"type": "tarball",
|
||||
"url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre864002.8eaee1103447/nixexprs.tar.xz"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-25.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
"type": "tarball",
|
||||
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1744536153,
|
||||
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
|
||||
"owner": "NixOS",
|
||||
"lastModified": 1759281824,
|
||||
"narHash": "sha256-FIBE1qXv9TKvSNwst6FumyHwCRH3BlWDpfsnqRDCll0=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
|
||||
"rev": "5b5be50345d4113d04ba58c444348849f5585b4a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-25.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"quadlet-nix": {
|
||||
"locked": {
|
||||
"lastModified": 1766201043,
|
||||
"narHash": "sha256-eplAP+rorKKd0gNjV3rA6+0WMzb1X1i16F5m5pASnjA=",
|
||||
"rev": "b3aad468604d3e488d627c0b43984eb60e75e782",
|
||||
"revCount": 904049,
|
||||
"type": "tarball",
|
||||
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2511.904049%2Brev-b3aad468604d3e488d627c0b43984eb60e75e782/019b3f6c-8b33-7edb-b858-9979590f270b/source.tar.gz"
|
||||
"lastModified": 1758631655,
|
||||
"narHash": "sha256-EGeZ963L7xsNAY7snvP1JHQe7LWLVCM6f49+PzWjhEE=",
|
||||
"owner": "SEIAROTg",
|
||||
"repo": "quadlet-nix",
|
||||
"rev": "2ebe01b175e2e1e6de3f172d23f0c3b88713eec9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://flakehub.com/f/NixOS/nixpkgs/%2A"
|
||||
}
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1769089682,
|
||||
"narHash": "sha256-9yA/LIuAVQq0lXelrZPjLuLVuZdm03p8tfmHhnDIkms=",
|
||||
"rev": "078d69f03934859a181e81ba987c2bb033eebfc5",
|
||||
"revCount": 906333,
|
||||
"type": "tarball",
|
||||
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2511.906333%2Brev-078d69f03934859a181e81ba987c2bb033eebfc5/019bebf2-031c-7119-8fdc-ce9d29d005fa/source.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://flakehub.com/f/NixOS/nixpkgs/%2A"
|
||||
"owner": "SEIAROTg",
|
||||
"repo": "quadlet-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"aagl": "aagl",
|
||||
"darwin": "darwin",
|
||||
"ghostty": "ghostty",
|
||||
"home-manager": "home-manager",
|
||||
"nix-flatpak": "nix-flatpak",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"rust-overlay": "rust-overlay_2",
|
||||
"swaytreesave": "swaytreesave",
|
||||
"vintage-story": "vintage-story"
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
"quadlet-nix": "quadlet-nix"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1770952264,
|
||||
"narHash": "sha256-CjymNrJZWBtpavyuTkfPVPaZkwzIzGaf0E/3WgcwM14=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "ec6a3d5cdf14bb5a1dd03652bd3f6351004d2188",
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"rust-overlay_2": {
|
||||
"zig": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
"flake-compat": [
|
||||
"ghostty",
|
||||
"flake-compat"
|
||||
],
|
||||
"flake-utils": [
|
||||
"ghostty",
|
||||
"flake-utils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"ghostty",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774321696,
|
||||
"narHash": "sha256-g18xMjMNla/nsF5XyQCNyWmtb2UlZpkY0XE8KinIXAA=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "49a67e6894d4cb782842ee6faa466aa90c92812d",
|
||||
"lastModified": 1748261582,
|
||||
"narHash": "sha256-3i0IL3s18hdDlbsf0/E+5kyPRkZwGPbSFngq5eToiAA=",
|
||||
"owner": "mitchellh",
|
||||
"repo": "zig-overlay",
|
||||
"rev": "aafb1b093fb838f7a02613b719e85ec912914221",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"owner": "mitchellh",
|
||||
"repo": "zig-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"swaytreesave": {
|
||||
"zon2nix": {
|
||||
"inputs": {
|
||||
"flake-schemas": "flake-schemas",
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1767148467,
|
||||
"narHash": "sha256-W0O7SWq8ucokt4ctEAEvRvNoSM/oF7fBfb2kTN+lwTs=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "0f4bb9bb450b28aa4f29d5eb2062deac6c26687a",
|
||||
"revCount": 4,
|
||||
"type": "git",
|
||||
"url": "https://scm.wyattjmiller.com/wymiller/swaytreesave-nix.git"
|
||||
"lastModified": 1758405547,
|
||||
"narHash": "sha256-WgaDgvIZMPvlZcZrpPMjkaalTBnGF2lTG+62znXctWM=",
|
||||
"owner": "jcollie",
|
||||
"repo": "zon2nix",
|
||||
"rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://scm.wyattjmiller.com/wymiller/swaytreesave-nix.git"
|
||||
}
|
||||
},
|
||||
"vintage-story": {
|
||||
"inputs": {
|
||||
"flake-schemas": "flake-schemas_2",
|
||||
"nixpkgs": "nixpkgs_5"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1769397199,
|
||||
"narHash": "sha256-MSajncUGZtlpl88rqFdj42eGGyWnk2jw84VbK3AgUBA=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "4d2313c50933645040a0d12556016fc2916bfa65",
|
||||
"revCount": 1,
|
||||
"type": "git",
|
||||
"url": "https://scm.wyattjmiller.com/wymiller/vintage-story-nix.git"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://scm.wyattjmiller.com/wymiller/vintage-story-nix.git"
|
||||
"owner": "jcollie",
|
||||
"repo": "zon2nix",
|
||||
"rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
160
flake.nix
160
flake.nix
@@ -1,25 +1,18 @@
|
||||
{
|
||||
description = "Wyatt's nix configuration suite";
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.6.0";
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/release-25.11";
|
||||
url = "github:nix-community/home-manager/release-25.05";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
darwin = {
|
||||
url = "github:lnl7/nix-darwin/nix-darwin-25.11";
|
||||
url = "github:lnl7/nix-darwin/nix-darwin-25.05";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
rust-overlay.url = "github:oxalica/rust-overlay";
|
||||
aagl = {
|
||||
url = "github:ezKEa/aagl-gtk-on-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
# My personal flakes
|
||||
swaytreesave.url = "git+https://scm.wyattjmiller.com/wymiller/swaytreesave-nix.git";
|
||||
vintage-story.url = "git+https://scm.wyattjmiller.com/wymiller/vintage-story-nix.git";
|
||||
ghostty.url = "github:ghostty-org/ghostty";
|
||||
quadlet-nix.url = "github:SEIAROTg/quadlet-nix";
|
||||
};
|
||||
|
||||
outputs = inputs @ {
|
||||
@@ -28,42 +21,28 @@
|
||||
nix-flatpak,
|
||||
darwin,
|
||||
home-manager,
|
||||
rust-overlay,
|
||||
aagl,
|
||||
swaytreesave,
|
||||
vintage-story,
|
||||
ghostty,
|
||||
quadlet-nix,
|
||||
...
|
||||
}: let
|
||||
userName = "wyatt";
|
||||
userEmail = "wyatt@wyattjmiller.com";
|
||||
extraSpecialArgs = {
|
||||
inherit userName userEmail swaytreesave;
|
||||
};
|
||||
|
||||
myOverlays = { ... }: {
|
||||
nixpkgs.overlays = [
|
||||
rust-overlay.overlays.default
|
||||
aagl.overlays.default
|
||||
self.common.overlays
|
||||
];
|
||||
# use this variable to take inputs and use them as arguments in your modules, this will be the common one
|
||||
customArgs = {
|
||||
inherit userName userEmail ghostty quadlet-nix;
|
||||
};
|
||||
in {
|
||||
meta = import ./meta;
|
||||
|
||||
common = {
|
||||
overlays = import ./modules/common/overlays.nix;
|
||||
};
|
||||
|
||||
# Primary laptop - MacBook Pro (2023, M3)
|
||||
darwinConfigurations."sephiroth" = darwin.lib.darwinSystem {
|
||||
system = "aarch64-darwin";
|
||||
specialArgs = {
|
||||
inherit userName userEmail;
|
||||
specialArgs = customArgs // {
|
||||
hostname = "sephiroth";
|
||||
role = "workstation";
|
||||
role = "devel";
|
||||
};
|
||||
modules = [
|
||||
myOverlays
|
||||
./modules/common
|
||||
./modules/machine/sephiroth
|
||||
|
||||
@@ -71,9 +50,9 @@
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = false; role = "workstation"; };
|
||||
# home-manager.extraSpecialArgs = extraSpecialArgs;
|
||||
home-manager.backupFileExtension = "bak";
|
||||
home-manager.extraSpecialArgs = customArgs // {
|
||||
inherit home-manager;
|
||||
};
|
||||
home-manager.users.${userName} = import ./home;
|
||||
}
|
||||
];
|
||||
@@ -82,13 +61,11 @@
|
||||
# Primary desktop computer
|
||||
nixosConfigurations."cloud" = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
inherit userName userEmail aagl vintage-story;
|
||||
specialArgs = customArgs // {
|
||||
hostname = "cloud";
|
||||
role = "workstation";
|
||||
role = "devel";
|
||||
};
|
||||
modules = [
|
||||
myOverlays
|
||||
nix-flatpak.nixosModules.nix-flatpak
|
||||
./modules/common
|
||||
./modules/machine/cloud
|
||||
@@ -97,8 +74,9 @@
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = true; role = "workstation"; };
|
||||
home-manager.backupFileExtension = "bak";
|
||||
home-manager.extraSpecialArgs = customArgs // {
|
||||
inherit home-manager;
|
||||
};
|
||||
home-manager.users.${userName}.imports = [
|
||||
./home
|
||||
];
|
||||
@@ -109,13 +87,11 @@
|
||||
# Apartment appliance server
|
||||
nixosConfigurations."valefor" = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
inherit userName userEmail;
|
||||
specialArgs = customArgs // {
|
||||
hostname = "valefor";
|
||||
role = "server";
|
||||
};
|
||||
modules = [
|
||||
myOverlays
|
||||
./modules/common
|
||||
./modules/machine/valefor
|
||||
|
||||
@@ -123,8 +99,9 @@
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = extraSpecialArgs;
|
||||
home-manager.backupFileExtension = "bak";
|
||||
home-manager.extraSpecialArgs = customArgs // {
|
||||
inherit home-manager;
|
||||
};
|
||||
home-manager.users.${userName}.imports = [
|
||||
./home
|
||||
];
|
||||
@@ -135,106 +112,25 @@
|
||||
# Storage, status, game, and media server
|
||||
nixosConfigurations."ixion" = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
inherit userName userEmail;
|
||||
specialArgs = customArgs // {
|
||||
hostname = "ixion";
|
||||
role = "server";
|
||||
};
|
||||
# modules = [
|
||||
# myOverlays
|
||||
# nix-flatpak.nixosModules.nix-flatpak
|
||||
# nix-ld.nixosModules.nix-ld
|
||||
# ./modules/nixos/hardware-configuration.nix
|
||||
# ./modules/nix-core.nix
|
||||
# ./modules/nixos/configuration.nix
|
||||
# ./modules/host-users.nix
|
||||
#
|
||||
# home-manager.nixosModules.home-manager
|
||||
# {
|
||||
# home-manager.useGlobalPkgs = true;
|
||||
# home-manager.useUserPackages = true;
|
||||
# home-manager.extraSpecialArgs = extraSpecialArgs;
|
||||
# home-manager.backupFileExtension = "bak";
|
||||
# home-manager.users.${userName}.imports = [
|
||||
# ./home
|
||||
# ];
|
||||
# }
|
||||
# ];
|
||||
};
|
||||
|
||||
# Vintage story server
|
||||
nixosConfigurations."thancred" = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
inherit userName userEmail vintage-story;
|
||||
hostname = "thancred";
|
||||
role = "server";
|
||||
};
|
||||
modules = [
|
||||
myOverlays
|
||||
quadlet-nix.nixosModules.quadlet
|
||||
./modules/common
|
||||
./modules/machine/thancred
|
||||
./modules/machine/ixion
|
||||
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = true; role = "server"; };
|
||||
home-manager.backupFileExtension = "bak";
|
||||
home-manager.extraSpecialArgs = customArgs;
|
||||
home-manager.users.${userName}.imports = [
|
||||
./home
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
# Matrix and Mastodon server
|
||||
nixosConfigurations."yshtola" = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
inherit userName userEmail;
|
||||
hostname = "yshtola";
|
||||
role = "server";
|
||||
};
|
||||
modules = [
|
||||
myOverlays
|
||||
./modules/common
|
||||
./modules/machine/yshtola
|
||||
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = extraSpecialArgs // { isNixOS = true; role = "server"; };
|
||||
home-manager.backupFileExtension = "bak";
|
||||
home-manager.users.${userName}.imports = [
|
||||
./home
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
# generic non-NixOS Linux machine
|
||||
homeConfigurations."generic" = let
|
||||
hostname = builtins.getEnv "HOSTNAME";
|
||||
system = "x86_64-linux";
|
||||
in home-manager.lib.homeManagerConfiguration {
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
|
||||
extraSpecialArgs = {
|
||||
inherit userName userEmail hostname;
|
||||
isNixOS = false;
|
||||
role = "workstation";
|
||||
};
|
||||
modules = [
|
||||
{
|
||||
nixpkgs.overlays = [
|
||||
rust-overlay.overlays.default
|
||||
self.common.overlays
|
||||
];
|
||||
}
|
||||
./home
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{ pkgs, ...}: {
|
||||
{...}: {
|
||||
programs.atuin = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
package = pkgs.atuinLatest;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
isNixOS ? true,
|
||||
...
|
||||
}: {
|
||||
programs.firefox = {
|
||||
@@ -10,7 +9,7 @@
|
||||
};
|
||||
|
||||
programs.chromium = {
|
||||
enable = pkgs.stdenv.isLinux && isNixOS;
|
||||
enable = pkgs.stdenv.isLinux;
|
||||
package = pkgs.ungoogled-chromium.override {
|
||||
enableWideVine = true;
|
||||
commandLineArgs = [
|
||||
@@ -41,37 +40,14 @@
|
||||
id = "cjpalhdlnbpafiamejdnhcphjbkeiagm";
|
||||
sha256 = "sha256:0pdh1v0vx1d5vnl1zh7nbk6j1fh4k4hhwp1ljs203icn306lahsn";
|
||||
# sha256 = lib.fakeSha256;
|
||||
version = "1.67.0";
|
||||
version = "1.64.0";
|
||||
})
|
||||
(createChromiumExtension {
|
||||
# bitwarden
|
||||
id = "nngceckbapebfimnlniiiahkandclblb";
|
||||
sha256 = "sha256:0jxk3cqmgd5qj8hnw7s0k5s4bfrcmr0w0rckp3x0bmng07azw4gi";
|
||||
version = "2025.10.0";
|
||||
})
|
||||
(createChromiumExtension {
|
||||
# react dev tools
|
||||
id = "fmkadmapgofadopljbjfkapdkoienihi";
|
||||
sha256 = "sha256:01vy0x7hdkj4g3m2l4kw5rwldhhpkcxmd2miy5rj2dzxdnbchw2z";
|
||||
version = "7.0.1";
|
||||
})
|
||||
(createChromiumExtension {
|
||||
# wappalyzer
|
||||
id = "gppongmhjkpfnbhagpmjfkannfbllamg";
|
||||
sha256 = "sha256:1mi1wpm714r8yp0zh0yg6kccnld36rj4xb8j4y0c18y9176vc6wx";
|
||||
version = "6.10.86";
|
||||
})
|
||||
(createChromiumExtension {
|
||||
# obsidian web clipper
|
||||
id = "cnjifjpddelmedmihgijeibhnjfabmlf";
|
||||
sha256 = "sha256:0bp6g63g9hk2xbq054lpf5hzwmn73jzh3hswyjfp9r7yqj83mzgy";
|
||||
version = "0.12.0";
|
||||
})
|
||||
(createChromiumExtension {
|
||||
# dark reader
|
||||
id = "eimadpbcbfnmbkopoojfekhnkhdbieeh";
|
||||
sha256 = "sha256:06a9dz589i1da519kivzp7bljksl2xxsd151y7ww0hx28jd1694b";
|
||||
version = "4.9.113";
|
||||
# sha256 = lib.fakeSha256;
|
||||
version = "2025.5.0";
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
@@ -1,59 +1,63 @@
|
||||
{ lib
|
||||
, pkgs
|
||||
, userName
|
||||
, swaytreesave
|
||||
, isNixOS ? true
|
||||
, ...
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
userName,
|
||||
userEmail,
|
||||
ghostty,
|
||||
...
|
||||
}: let
|
||||
# Have a file sturcture that holds all the configuration files that can't be configured by Nix
|
||||
# or maybe I'm too lazy to do anything about it? I dunno
|
||||
dirs = {
|
||||
defaults = ../defaults;
|
||||
};
|
||||
in
|
||||
{
|
||||
_module.args = {
|
||||
inherit dirs;
|
||||
};
|
||||
|
||||
in {
|
||||
# Import sub modules
|
||||
imports = [
|
||||
imports = map (module: import module {inherit lib pkgs dirs userName userEmail ghostty;}) [
|
||||
./atuin.nix
|
||||
./shell.nix
|
||||
./packages
|
||||
./git.nix
|
||||
./starship.nix
|
||||
./eza.nix
|
||||
./neovim.nix
|
||||
./direnv.nix
|
||||
./sway.nix
|
||||
./terminal.nix
|
||||
./browser.nix
|
||||
./zellij.nix
|
||||
./bat.nix
|
||||
];
|
||||
|
||||
home = lib.mkMerge [
|
||||
{
|
||||
username = userName;
|
||||
homeDirectory =
|
||||
if pkgs.stdenv.isDarwin
|
||||
then "/Users/${userName}"
|
||||
else "/home/${userName}";
|
||||
# Home Manager needs a bit of information about you and the
|
||||
# paths it should manage.
|
||||
home = {
|
||||
username = userName;
|
||||
homeDirectory =
|
||||
if pkgs.stdenv.isDarwin
|
||||
then "/Users/${userName}"
|
||||
else "/home/${userName}";
|
||||
|
||||
stateVersion = "24.11";
|
||||
}
|
||||
sessionVariables = {
|
||||
XDG_CURRENT_DESKTOP = "sway";
|
||||
XDG_SESSION_TYPE = "wayland";
|
||||
XDG_SESSION_DESKTOP="sway";
|
||||
XDG_CONFIG_HOME = "$HOME/.config";
|
||||
XDG_CACHE_HOME = "$HOME/.cache";
|
||||
XDG_DATA_HOME = "$HOME/.local/share";
|
||||
XDG_STATE_HOME = "$HOME/.local/state";
|
||||
NIXOS_OZONE_WL = "1";
|
||||
};
|
||||
|
||||
(lib.mkIf isNixOS {
|
||||
sessionVariables = {
|
||||
XDG_CURRENT_DESKTOP = "sway";
|
||||
XDG_SESSION_TYPE = "wayland";
|
||||
XDG_SESSION_DESKTOP = "sway";
|
||||
XDG_CONFIG_HOME = "$HOME/.config";
|
||||
XDG_CACHE_HOME = "$HOME/.cache";
|
||||
XDG_DATA_HOME = "$HOME/.local/share";
|
||||
XDG_STATE_HOME = "$HOME/.local/state";
|
||||
NIXOS_OZONE_WL = "1";
|
||||
};
|
||||
})
|
||||
pointerCursor = lib.mkIf pkgs.stdenv.isLinux {
|
||||
gtk.enable = true;
|
||||
package = pkgs.catppuccin-cursors.mochaDark;
|
||||
name = "catppuccin-mocha-dark-cursors";
|
||||
size = 22;
|
||||
};
|
||||
|
||||
(lib.mkIf pkgs.stdenv.isLinux {
|
||||
pointerCursor = {
|
||||
gtk.enable = true;
|
||||
package = pkgs.catppuccin-cursors.mochaDark;
|
||||
name = "catppuccin-mocha-dark-cursors";
|
||||
size = 22;
|
||||
};
|
||||
})
|
||||
];
|
||||
stateVersion = "24.11";
|
||||
};
|
||||
|
||||
# Let Home Manager install and manage itself.
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
a = "add";
|
||||
ap = "add -p";
|
||||
br = "branch";
|
||||
cb = "checkout -b";
|
||||
co = "checkout";
|
||||
st = "status -sb";
|
||||
status = "status -sb";
|
||||
@@ -41,11 +40,6 @@
|
||||
ca = "commit -am";
|
||||
dc = "diff --cached";
|
||||
amend = "commit --amend -m";
|
||||
wipe = "reset --hard";
|
||||
gg = "reset --hard";
|
||||
ggs = "reset --hard";
|
||||
sw = "switch";
|
||||
r = "restore";
|
||||
|
||||
# aliases for submodules
|
||||
update = "submodule update --init --recursive";
|
||||
|
||||
32
home/k9s.nix
32
home/k9s.nix
@@ -1,32 +0,0 @@
|
||||
{ pkgs, ... }: {
|
||||
programs.k9s = {
|
||||
enable = true;
|
||||
package = pkgs.k9s;
|
||||
settings.k9s = {
|
||||
refreshRate = "2s";
|
||||
liveViewAutoRefresh = false;
|
||||
apiServerTimeout = "30s";
|
||||
maxConnRetry = 5;
|
||||
readOnly = true;
|
||||
noExitOnCtrlC = false;
|
||||
portForwardAddress = "localhost";
|
||||
skipLatestRevCheck = false;
|
||||
|
||||
skin = {
|
||||
catppuccin-mocha = ../defaults/k9s/catppuccin-mocha.yaml;
|
||||
};
|
||||
|
||||
ui = {
|
||||
skin = "catppuccin-mocha";
|
||||
enableMouse = true;
|
||||
headless = false;
|
||||
logoless = true;
|
||||
crumbsless = false;
|
||||
splashless = true;
|
||||
reactive = false;
|
||||
noIcons = false;
|
||||
defaultsToFullscreen = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{ pkgs, lib, ... }:
|
||||
with pkgs;
|
||||
let
|
||||
plugins = [
|
||||
"krew"
|
||||
"oidc-login"
|
||||
];
|
||||
in {
|
||||
home.activation.krew = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
${lib.concatMapStringsSep "\n" (plugin: ''
|
||||
$DRY_RUN_CMD ${krew}/bin/krew install ${plugin} || true
|
||||
'') plugins}
|
||||
'';
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
{ pkgs, ... }: {
|
||||
{...}: {
|
||||
programs.lazygit = {
|
||||
enable = true;
|
||||
package = pkgs.lazygitLatest;
|
||||
|
||||
settings = {
|
||||
gui.theme = {
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
{...}: let
|
||||
dirs = {
|
||||
defaults = ../defaults;
|
||||
};
|
||||
in {
|
||||
{dirs, ...}: {
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
|
||||
@@ -1,20 +1,11 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
../atuin.nix
|
||||
../shell.nix
|
||||
../git.nix
|
||||
../starship.nix
|
||||
../eza.nix
|
||||
../neovim.nix
|
||||
../bat.nix
|
||||
];
|
||||
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
home.packages = with pkgs; [
|
||||
yazi # terminal file manager
|
||||
|
||||
# archives
|
||||
zip
|
||||
xz
|
||||
@@ -22,21 +13,40 @@
|
||||
p7zip
|
||||
|
||||
# utils
|
||||
yazi
|
||||
tmux
|
||||
lazygit
|
||||
bottom
|
||||
ripgrep
|
||||
jq
|
||||
yq-go
|
||||
fzf
|
||||
fh
|
||||
aria2
|
||||
gnupg
|
||||
yt-dlp
|
||||
obsidian
|
||||
vscode
|
||||
weechat
|
||||
inetutils
|
||||
|
||||
# misc
|
||||
cowsay
|
||||
file
|
||||
which
|
||||
tree
|
||||
gnutar
|
||||
gnupg
|
||||
zoxide
|
||||
babelfish
|
||||
|
||||
# language-specific package managers
|
||||
nodejs
|
||||
cargo
|
||||
python3
|
||||
|
||||
# nix specific stuff
|
||||
nixd
|
||||
deadnix
|
||||
alejandra
|
||||
statix
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{ lib, pkgs, ... }:
|
||||
lib.mkIf pkgs.stdenv.isDarwin {
|
||||
home.packages = with pkgs; [
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
home.packages = lib.mkIf pkgs.stdenv.isDarwin (with pkgs; [
|
||||
discord
|
||||
ollama
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{ lib, role ? "workstation", ... }:
|
||||
{
|
||||
imports =
|
||||
[
|
||||
./common.nix
|
||||
./darwin.nix
|
||||
./linux.nix
|
||||
]
|
||||
++ lib.optional (role == "workstation") ./workstation.nix
|
||||
++ lib.optional (role == "server") ./server.nix;
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
./common.nix
|
||||
./darwin.nix
|
||||
./linux.nix
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
{ lib, pkgs, isNixOS ? true, ... }:
|
||||
lib.mkIf pkgs.stdenv.isLinux {
|
||||
home.packages = with pkgs; [
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
home.packages = lib.mkIf pkgs.stdenv.isLinux (with pkgs; [
|
||||
imv
|
||||
xdg-utils
|
||||
] ++ lib.optionals isNixOS [
|
||||
betterdiscordctl
|
||||
vesktop
|
||||
xdg-utils
|
||||
mcrcon
|
||||
xfce.thunar
|
||||
pavucontrol
|
||||
zathura
|
||||
godot
|
||||
aseprite
|
||||
gpu-screen-recorder
|
||||
gpu-screen-recorder-gtk
|
||||
inetutils
|
||||
easyeffects
|
||||
];
|
||||
# ungoogled-chromium
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
{ pkgs, ... }: {
|
||||
home.packages = [
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
isNixOS ? true,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
../terminal.nix
|
||||
../browser.nix
|
||||
../zellij.nix
|
||||
../lazygit.nix
|
||||
../k9s.nix
|
||||
../krew.nix
|
||||
../direnv.nix
|
||||
] ++ lib.optional isNixOS ../sway.nix;
|
||||
|
||||
home.packages = with pkgs; [
|
||||
fh
|
||||
kubectl # kube config is deliberately not included
|
||||
kubectx
|
||||
obsidian
|
||||
vscode
|
||||
yt-dlp
|
||||
weechat
|
||||
nodejs
|
||||
cargo
|
||||
python3
|
||||
nixd
|
||||
deadnix
|
||||
alejandra
|
||||
statix
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
{pkgs, lib, ...}: {
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
shellInit = ''
|
||||
if test -d $HOME/.krew/bin
|
||||
set -gx PATH $HOME/.krew/bin $PATH
|
||||
end
|
||||
'';
|
||||
# initExtra = ''
|
||||
# export PATH="$PATH:$HOME/bin:$HOME/.local/bin:$HOME/go/bin"
|
||||
# '';
|
||||
|
||||
shellAliases = {
|
||||
# ls aliases
|
||||
@@ -45,31 +43,7 @@
|
||||
"Can I get a waffle? Can I please get a waffle?" \
|
||||
"I'm lesbian. I thought you were American." \
|
||||
"You gotta give 'em that 'hawk tuah' and spit on that thang!" \
|
||||
"We don't do that here..." \
|
||||
"What are those?! They are my crocs..." \
|
||||
"It's an avocado... Thanks!" \
|
||||
"I am once again asking for your financial support" \
|
||||
"Is that a weed?" \
|
||||
"No, this is Patrick!" \
|
||||
"Come ride, heroes, ride" \
|
||||
"Away with the tide" \
|
||||
"Concede your mind unto the fiend" \
|
||||
"Darkness come, rend the shield of light" \
|
||||
"The sun is setting, darkness taking over - a date with chaos and you're dressed to the nines" \
|
||||
"Now kneel overdweller, your lord commands, there's no salvation for the sons of man" \
|
||||
"Snap click clank whirr whizz wham boom!" \
|
||||
"Rohs an kyn ala na" \
|
||||
"If you’ve brought your ivory standard, I’ll be happy to tell you where you can stick it" \
|
||||
"Speeches? Oh, yes, I love them. There's nothing like a good exposition when you're having trouble sleeping!" \
|
||||
"Somehow, the boy just isn't very buoyant" \
|
||||
"I am...not interested, little sun. Try again when you have become a man" \
|
||||
"I am rightousness! And rightousness shall previal!" \
|
||||
"Ahhh such bliss!" \
|
||||
"The gods themselves will be my meal. Your dear companions my dessert. Upon this world I'll feast, and death shall follow in my wake. All your hate, all your rage, you will render unto me." \
|
||||
"Boring, boring, boring" \
|
||||
"Would you be 'happier' had I a 'good reason'?" \
|
||||
"A test of your reflexes!"
|
||||
|
||||
"We don't do that here..."
|
||||
|
||||
set choose_meme (random)"%"(count $memes)
|
||||
set choose_meme $memes[(math $choose_meme"+1")]
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
swaytreesave,
|
||||
...
|
||||
}: let
|
||||
dirs = {
|
||||
@@ -16,12 +15,6 @@
|
||||
hash = "sha256-ZDFbI69ECsUTjbhlw2kHRufZbQMu+FQSMmncCJ5pagg=";
|
||||
};
|
||||
in {
|
||||
imports = [
|
||||
swaytreesave.homeManagerModules.default
|
||||
];
|
||||
|
||||
programs.swaytreesave.enable = if pkgs.stdenv.isLinux then true else false;
|
||||
|
||||
wayland.windowManager.sway = {
|
||||
enable = pkgs.stdenv.isLinux;
|
||||
extraOptions = []; # Extra arguments to pass into sway. If sway goes haywire, we might need something in here
|
||||
@@ -155,5 +148,4 @@ in {
|
||||
enable = pkgs.stdenv.isLinux;
|
||||
systemd.enable = true;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{ pkgs, ... }: {
|
||||
{ lib, pkgs, ghostty, ... }: {
|
||||
programs.alacritty = {
|
||||
enable = pkgs.stdenv.isLinux;
|
||||
settings = {
|
||||
@@ -103,4 +103,9 @@
|
||||
programs.kitty = {
|
||||
enable = false; # TODO: to enable later
|
||||
};
|
||||
|
||||
home.packages = if pkgs.stdenv.isLinux then
|
||||
[ ghostty.packages.${pkgs.system}.default ]
|
||||
else
|
||||
[ ];
|
||||
}
|
||||
|
||||
@@ -1,17 +1,11 @@
|
||||
{
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
aagl,
|
||||
vintage-story,
|
||||
...
|
||||
}: let
|
||||
cfg = config.gaming;
|
||||
in {
|
||||
imports = [
|
||||
aagl.nixosModules.default
|
||||
];
|
||||
|
||||
options.gaming = {
|
||||
steam = {
|
||||
enable = lib.mkEnableOption "Steam gaming platform";
|
||||
@@ -68,14 +62,6 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
vkbasalt = {
|
||||
enable = lib.mkEnableOption "vkBasalt/ReShade/GShade post processing shaders";
|
||||
};
|
||||
|
||||
mangohud = {
|
||||
enable = lib.mkEnableOption "OpenGL/Vulkan overlay tool shown in games presenting FPS, CPU/GPU/memory utilization, load, etc.";
|
||||
};
|
||||
|
||||
lutris = {
|
||||
enable = lib.mkEnableOption "Lutris game manager and launcher";
|
||||
package = lib.mkOption {
|
||||
@@ -122,38 +108,9 @@ in {
|
||||
ffxiv = {
|
||||
enable = lib.mkEnableOption "Final Fantasy XIV and it's accompanied (unofficial) launcher";
|
||||
};
|
||||
|
||||
# TODO: when aagl gets it's unified launcher all finished/in a stable state, transition to that launcher
|
||||
aagl = {
|
||||
anime-game-launcher = {
|
||||
enable = lib.mkEnableOption "Genshin Impact launcher (legacy)";
|
||||
};
|
||||
|
||||
honkers-railway-launcher = {
|
||||
enable = lib.mkEnableOption "Honkai: Star Rail launcher";
|
||||
};
|
||||
|
||||
honkers-launcher = {
|
||||
enable = lib.mkEnableOption "Honkai: Impact 3rd launcher";
|
||||
};
|
||||
|
||||
wavey-launcher = {
|
||||
enable = lib.mkEnableOption "Wuthering Waves launcher";
|
||||
};
|
||||
|
||||
sleepy-launcher = {
|
||||
enable = lib.mkEnableOption "Zenless Zone Zero (ZZZ) launcher";
|
||||
};
|
||||
};
|
||||
|
||||
vintage-story = {
|
||||
enable = lib.mkEnableOption "Vintage Story client and server";
|
||||
};
|
||||
};
|
||||
|
||||
config = let
|
||||
agl = cfg.aagl;
|
||||
in {
|
||||
config = {
|
||||
programs.steam = lib.mkIf cfg.steam.enable {
|
||||
enable = true;
|
||||
remotePlay.openFirewall = cfg.steam.firewall.remotePlay;
|
||||
@@ -182,26 +139,6 @@ in {
|
||||
];
|
||||
};
|
||||
|
||||
programs.anime-game-launcher = lib.mkIf agl.anime-game-launcher.enable {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
programs.honkers-railway-launcher = lib.mkIf agl.honkers-railway-launcher.enable {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
programs.honkers-launcher = lib.mkIf agl.honkers-launcher.enable {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
programs.wavey-launcher = lib.mkIf agl.wavey-launcher.enable {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
programs.sleepy-launcher = lib.mkIf agl.sleepy-launcher.enable {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
environment.systemPackages =
|
||||
(lib.optionals cfg.lutris.enable (
|
||||
[cfg.lutris.package] ++
|
||||
@@ -217,20 +154,6 @@ in {
|
||||
cfg.lutris.extraPackages
|
||||
)) ++
|
||||
(lib.optionals cfg.minecraft.enable [pkgs.prismlauncher]) ++
|
||||
(lib.optionals cfg.ffxiv.enable [pkgs.xivlauncher pkgs.fflogs]) ++
|
||||
(lib.optionals cfg.vintage-story.enable [vintage-story.packages.${pkgs.system}.default]) ++
|
||||
(lib.optionals cfg.vkbasalt.enable [pkgs.vkbasalt pkgs.vkbasalt-cli]) ++
|
||||
(lib.optionals cfg.mangohud.enable [pkgs.mangohud]) ++
|
||||
(lib.optionals (cfg.vkbasalt.enable || cfg.mangohud.enable) [pkgs.goverlay pkgs.mesa-demos pkgs.vulkan-tools]);
|
||||
|
||||
nix.settings = let
|
||||
inherit agl;
|
||||
in (lib.mkIf
|
||||
(agl.anime-game-launcher.enable || agl.honkers-railway-laucher.enable || agl.honkers-launcher.enable || agl.wavey-launcher.enable || agl.sleepy-launcher.enable)
|
||||
{
|
||||
substituters = [ "https://ezkea.cachix.org" ];
|
||||
trusted-public-keys = [ "ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI=" ];
|
||||
}
|
||||
);
|
||||
(lib.optionals cfg.ffxiv.enable [pkgs.xivlauncher]);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -7,11 +7,3 @@ Licensed by the Mozilla Public License v2
|
||||
## Synopsis
|
||||
|
||||
This is the directory that holds shared configuration files amongst computers that I own. They are called by the root `flake.nix` file.
|
||||
|
||||
Here's a quick synopsis of each file:
|
||||
|
||||
- core: Sane Nix options that I set for myself
|
||||
- environment: Core packages and environment variables to be set and installed
|
||||
- fonts: Fonts and icons that are to be installed
|
||||
- overlays: Customized packages tailored to my needs
|
||||
- users: Users to be set on my system
|
||||
|
||||
@@ -8,9 +8,6 @@
|
||||
|
||||
# Allow unfree packages
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
nixpkgs.config.permittedInsecurePackages = [
|
||||
"mbedtls-2.28.10"
|
||||
];
|
||||
|
||||
nix.package = pkgs.nix;
|
||||
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
{ ... }: {
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
./core.nix
|
||||
./environment.nix
|
||||
./fonts.nix
|
||||
# ./overlays.nix
|
||||
./users.nix
|
||||
];
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
systemd
|
||||
lshw
|
||||
dmidecode
|
||||
nix-ld
|
||||
]) ++
|
||||
lib.optionals pkgs.stdenv.isDarwin (with pkgs; [
|
||||
# nothing here, yet ;)
|
||||
|
||||
@@ -6,14 +6,10 @@
|
||||
fonts.packages = with pkgs;
|
||||
[
|
||||
noto-fonts
|
||||
noto-fonts-color-emoji
|
||||
noto-fonts-emoji
|
||||
liberation_ttf
|
||||
noto-fonts-cjk-sans
|
||||
monaspace
|
||||
]
|
||||
++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
adwaita-icon-theme
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
{ pkgs, ... }: {
|
||||
programs.nix-ld = {
|
||||
enable = true;
|
||||
libraries = with pkgs;
|
||||
[
|
||||
acl
|
||||
attr
|
||||
bzip2
|
||||
dbus
|
||||
expat
|
||||
fontconfig
|
||||
freetype
|
||||
fuse3
|
||||
icu
|
||||
libnotify
|
||||
libsodium
|
||||
libssh
|
||||
libunwind
|
||||
libusb1
|
||||
libuuid
|
||||
nspr
|
||||
nss
|
||||
stdenv.cc.cc
|
||||
util-linux
|
||||
zlib
|
||||
zstd
|
||||
pipewire
|
||||
cups
|
||||
libxkbcommon
|
||||
pango
|
||||
mesa
|
||||
libdrm
|
||||
libglvnd
|
||||
libpulseaudio
|
||||
atk
|
||||
cairo
|
||||
alsa-lib
|
||||
at-spi2-atk
|
||||
at-spi2-core
|
||||
gdk-pixbuf
|
||||
glib
|
||||
gtk3
|
||||
libGL
|
||||
libappindicator-gtk3
|
||||
vulkan-loader
|
||||
xorg.libX11
|
||||
xorg.libXScrnSaver
|
||||
xorg.libXcomposite
|
||||
xorg.libXcursor
|
||||
xorg.libXdamage
|
||||
xorg.libXext
|
||||
xorg.libXfixes
|
||||
xorg.libXi
|
||||
xorg.libXrandr
|
||||
xorg.libXrender
|
||||
xorg.libXtst
|
||||
xorg.libxcb
|
||||
xorg.libxkbfile
|
||||
xorg.libxshmfence
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
final: prev: let
|
||||
# Use latest rust from overlay which should work on non-NixOS
|
||||
rust_latest = prev.rust-bin.stable.latest.default;
|
||||
myRustPlatform = prev.makeRustPlatform {
|
||||
cargo = rust_latest;
|
||||
rustc = rust_latest;
|
||||
};
|
||||
in {
|
||||
lazygitLatest = prev.lazygit.overrideAttrs (_: rec {
|
||||
version = "0.55.1";
|
||||
src = prev.fetchFromGitHub {
|
||||
owner = "jesseduffield";
|
||||
repo = "lazygit";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-UofhgILZhVXnYiGpb25m4Ct4sbu5pRmjVgj3oEf5Uyk=";
|
||||
};
|
||||
vendorHash = null;
|
||||
subPackages = [ "." ];
|
||||
ldflags = [
|
||||
"-X main.version=${version}"
|
||||
"-X main.buildSource=nix"
|
||||
];
|
||||
});
|
||||
|
||||
atuinLatest = (prev.atuin.override {
|
||||
rustPlatform = myRustPlatform;
|
||||
}).overrideAttrs (oldAttrs: rec {
|
||||
version = "18.10.0";
|
||||
|
||||
src = prev.fetchFromGitHub {
|
||||
owner = "atuinsh";
|
||||
repo = "atuin";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-bfSa3RtVXxHt3usDqqpE/oXKKDUZOrf+tD9uL59fr6M=";
|
||||
};
|
||||
|
||||
cargoDeps = myRustPlatform.fetchCargoVendor {
|
||||
# name = "atuin-${version}-vendor.tar.gz";
|
||||
inherit src;
|
||||
hash = "sha256-67ffivZVCly1GWA3fJ9mT8nGv2EGd6eCthbaIu/IW3M=";
|
||||
};
|
||||
|
||||
preCheck = (oldAttrs.preCheck or "") + ''
|
||||
export HOME="$TMPDIR"
|
||||
export XDG_CONFIG_HOME="$TMPDIR/.config"
|
||||
export XDG_DATA_HOME="$TMPDIR/.local/share"
|
||||
export XDG_STATE_HOME="$TMPDIR/.local/state"
|
||||
mkdir -p "$XDG_CONFIG_HOME" "$XDG_DATA_HOME" "$XDG_STATE_HOME"
|
||||
'';
|
||||
});
|
||||
|
||||
# k9sLatest = prev.k9s.overrideAttrs (oldAttrs: rec {
|
||||
# version = "0.30.16";
|
||||
# src = prev.fetchFromGitHub {
|
||||
# owner = "derailed";
|
||||
# repo = "k9s";
|
||||
# rev = "v${version}";
|
||||
# hash = "sha256-1z6r6v3n1p6vd2q6n4pl5q3f7q3q7q1p7j5j1k3l4m5n6o7p8q9r";
|
||||
# };
|
||||
# ldflags = [
|
||||
# "-X github.com/derailed/k9s/version.Version=${version}"
|
||||
# "-X github.com/derailed/k9s/version.BuildSource=nix"
|
||||
# ];
|
||||
# });
|
||||
}
|
||||
@@ -40,6 +40,7 @@ in {
|
||||
config = mkIf cfg.enable (mkMerge [
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
glxinfo
|
||||
vulkan-tools
|
||||
mesa-demos
|
||||
];
|
||||
@@ -61,9 +62,9 @@ in {
|
||||
|
||||
(mkIf (cfg.gpuVendor == "amd") {
|
||||
services.xserver.videoDrivers = ["amdgpu"];
|
||||
# hardware.graphics.extraPackages = with pkgs; [
|
||||
# amdvlk
|
||||
# ];
|
||||
hardware.graphics.extraPackages = with pkgs; [
|
||||
amdvlk
|
||||
];
|
||||
environment.systemPackages = with pkgs; [
|
||||
radeontop
|
||||
];
|
||||
|
||||
@@ -10,10 +10,6 @@ I like Final Fantasy, alright? Isn't everyone supposed to have a hobby?
|
||||
|
||||
These are named after Final Fantasy VII characters.
|
||||
|
||||
### Servers/Network Infrastructure (bare metal)
|
||||
### Servers/Network Infrastructure
|
||||
|
||||
These are named after Final Fantasy summons. There is some infrastructure missing here like my routers and switches that I also name after summons.
|
||||
|
||||
### Servers/Network Infrastructure (virtual machines)
|
||||
|
||||
These are named after Final Fantasy XIV Online characters (currently, these are named after the Scions of the Seventh Dawn).
|
||||
These are named after Final Fantasy summons.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
userName,
|
||||
aagl,
|
||||
...
|
||||
}: let
|
||||
flatpakPackages = [
|
||||
@@ -18,7 +18,7 @@
|
||||
in {
|
||||
imports = [
|
||||
(import ../../apps/flatpak.nix {
|
||||
inherit lib pkgs flatpakPackages userName aagl;
|
||||
inherit lib pkgs flatpakPackages;
|
||||
})
|
||||
../../apps/gaming.nix
|
||||
../../apps/appimage.nix
|
||||
@@ -89,10 +89,8 @@ in {
|
||||
localNetworkGameTransfers = true;
|
||||
};
|
||||
};
|
||||
vkbasalt.enable = true;
|
||||
gamemode.enable = true;
|
||||
gamescope.enable = true;
|
||||
mangohud.enable = true;
|
||||
lutris = {
|
||||
enable = true;
|
||||
wine = {
|
||||
@@ -102,12 +100,14 @@ in {
|
||||
compatibility = {
|
||||
protonSupport = true;
|
||||
};
|
||||
extraPackages = with pkgs; [
|
||||
gamemode
|
||||
mangohud
|
||||
];
|
||||
};
|
||||
|
||||
ffxiv.enable = true;
|
||||
minecraft.enable = true;
|
||||
aagl.anime-game-launcher.enable = true;
|
||||
vintage-story.enable = true;
|
||||
};
|
||||
|
||||
# Power management (see ../../pwrMgmt/default.nix)
|
||||
@@ -151,7 +151,7 @@ in {
|
||||
};
|
||||
|
||||
# Add username to groups "wheel" and "video" - more may be added here later
|
||||
users.users.${userName}.extraGroups = ["wheel" "video" "gamemode" "podman" "network" "libvirtd"];
|
||||
users.users.${userName}.extraGroups = ["wheel" "video" "gamemode" "podman" "network"];
|
||||
|
||||
services = {
|
||||
# Enable OpenSSH
|
||||
@@ -191,23 +191,5 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
# sched_ext userspace CPU scheduling stuff - idk
|
||||
services.scx = {
|
||||
enable = true;
|
||||
scheduler = "scx_bpfland";
|
||||
};
|
||||
|
||||
programs.obs-studio = {
|
||||
enable = true;
|
||||
plugins = with pkgs.obs-studio-plugins; [
|
||||
wlrobs
|
||||
obs-backgroundremoval
|
||||
obs-pipewire-audio-capture
|
||||
obs-vaapi #optional AMD hardware acceleration
|
||||
obs-gstreamer
|
||||
obs-vkcapture
|
||||
];
|
||||
};
|
||||
|
||||
system.stateVersion = "24.11";
|
||||
}
|
||||
|
||||
@@ -2,6 +2,5 @@
|
||||
imports = [
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
../../common/linker.nix
|
||||
];
|
||||
}
|
||||
|
||||
@@ -12,24 +12,24 @@
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "thunderbolt" "ahci" "usb_storage" "usbhid" "sd_mod"];
|
||||
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
|
||||
boot.initrd.kernelModules = [];
|
||||
boot.kernelModules = ["kvm-amd"];
|
||||
boot.extraModulePackages = [];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/f8f39aae-61d2-437d-a8e1-01066bbb3c5c";
|
||||
device = "/dev/disk/by-label/COMPUTER";
|
||||
fsType = "xfs";
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/B72F-087F";
|
||||
device = "/dev/disk/by-label/BOOT";
|
||||
fsType = "vfat";
|
||||
options = ["fmask=0022" "dmask=0022"];
|
||||
};
|
||||
|
||||
swapDevices = [
|
||||
{device = "/dev/disk/by-uuid/6d6bcc02-20a9-4ae8-9c1e-5124fb2b2634";}
|
||||
{device = "/dev/disk/by-label/SWAP";}
|
||||
];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
|
||||
84
modules/machine/ixion/configuration.nix
Normal file
84
modules/machine/ixion/configuration.nix
Normal file
@@ -0,0 +1,84 @@
|
||||
{
|
||||
pkgs,
|
||||
userName,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
../../pwrMgmt
|
||||
../../networking/core.nix
|
||||
../../virtualization/podman.nix
|
||||
../../virtualization/quadlet.nix
|
||||
../../virtualization/hardware.nix
|
||||
];
|
||||
|
||||
# Enable flakes for NixOS
|
||||
nix.settings.experimental-features = ["nix-command" "flakes"];
|
||||
|
||||
# Custom kernel/boot stuff
|
||||
boot = {
|
||||
kernelPackages = pkgs.linuxPackages_latest;
|
||||
loader = {
|
||||
systemd-boot.enable = true;
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Enable Polkit
|
||||
security.polkit.enable = true;
|
||||
|
||||
# Make sure Bluetooth is off!
|
||||
hardware.bluetooth.enable = false;
|
||||
|
||||
# Set your timezone
|
||||
time.timeZone = "America/Detroit";
|
||||
|
||||
# Power management module
|
||||
pwrMgmt = {
|
||||
enable = true;
|
||||
cpuFreqGovernor = "performance";
|
||||
powertop.enable = false;
|
||||
};
|
||||
|
||||
# Podman module (see ../../virtualization/podman.nix)
|
||||
podman = {
|
||||
enable = true;
|
||||
extraPackages = with pkgs; [
|
||||
docker-credential-helpers
|
||||
toolbox
|
||||
cosign
|
||||
crane
|
||||
podman-tui
|
||||
];
|
||||
};
|
||||
|
||||
# Core networking module (see ../../networking/core.nix)
|
||||
network = {
|
||||
firewall.enable = true;
|
||||
networkManager.enable = true;
|
||||
};
|
||||
|
||||
programs = {
|
||||
# Enable GnuPG
|
||||
gnupg.agent = {
|
||||
enable = true;
|
||||
enableSSHSupport = true;
|
||||
};
|
||||
|
||||
# Enable SUID wrappers (some programs need them)
|
||||
mtr.enable = true;
|
||||
};
|
||||
|
||||
users.users.${userName}.extraGroups = ["wheel" "video" "podman" "network"];
|
||||
|
||||
services = {
|
||||
# Enable OpenSSH
|
||||
openssh.enable = true;
|
||||
};
|
||||
|
||||
# Install packages to be installed system-wide
|
||||
environment.systemPackages = with pkgs; [
|
||||
wireguard-tools
|
||||
];
|
||||
|
||||
system.stateVersion = "25.05";
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
{ ... }: {
|
||||
{...}: {
|
||||
imports = [
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
46
modules/machine/ixion/hardware-configuration.nix
Normal file
46
modules/machine/ixion/hardware-configuration.nix
Normal file
@@ -0,0 +1,46 @@
|
||||
# --- DO NOT USE ---
|
||||
#
|
||||
# this is copied from ../valefor/hardware-configuration.nix
|
||||
# generate a new hardware-configuration.nix before using this!
|
||||
#
|
||||
# ------------------
|
||||
#
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/ff89bde1-4b33-4277-b649-b92700b2406c";
|
||||
fsType = "xfs";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/3A4B-6866";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0022" "dmask=0022" ];
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
@@ -1,121 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
userName,
|
||||
vintage-story,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
../../pwrMgmt
|
||||
../../networking/core.nix
|
||||
../../virtualization/podman.nix
|
||||
];
|
||||
|
||||
# Enable flakes for NixOS
|
||||
nix.settings.experimental-features = ["nix-command" "flakes"];
|
||||
|
||||
# Custom kernel/boot stuff
|
||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
# Set your timezone
|
||||
time.timeZone = "America/Detroit";
|
||||
|
||||
# Enable OpenSSH
|
||||
services.openssh.enable = true;
|
||||
|
||||
# Enable keyring
|
||||
services.gnome.gnome-keyring.enable = true;
|
||||
|
||||
# Enable GnuPG
|
||||
programs.gnupg.agent = {
|
||||
enable = true;
|
||||
enableSSHSupport = true;
|
||||
};
|
||||
|
||||
# Enable SUID wrappers (some programs need them)
|
||||
programs.mtr.enable = true;
|
||||
|
||||
# Enable Polkit
|
||||
security.polkit.enable = true;
|
||||
|
||||
# Power management (see ../../pwrMgmt/default.nix)
|
||||
pwrMgmt = {
|
||||
enable = true;
|
||||
cpuFreqGovernor = "performance";
|
||||
powertop.enable = false;
|
||||
};
|
||||
|
||||
network = {
|
||||
firewall = {
|
||||
enable = true;
|
||||
tcpPorts = {
|
||||
allowedPorts = [ 42420 ];
|
||||
};
|
||||
udpPorts = {
|
||||
allowedPorts = [ 42420 ];
|
||||
};
|
||||
};
|
||||
networkManager.enable = true;
|
||||
};
|
||||
|
||||
environment.systemPackages = [
|
||||
vintage-story.packages.${pkgs.system}.default
|
||||
];
|
||||
|
||||
systemd.services.vintagestory-server = {
|
||||
description = "Vintage Story Server";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" ];
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = userName;
|
||||
WorkingDirectory = "/home/${userName}";
|
||||
ExecStart = "${vintage-story.packages.${pkgs.system}.default}/bin/vintagestory-server";
|
||||
Restart = "on-failure";
|
||||
RestartSec = "5s";
|
||||
};
|
||||
};
|
||||
|
||||
# Add username to groups "wheel" and "video" - more may be added here later
|
||||
users = {
|
||||
groups.hazel = {};
|
||||
users = {
|
||||
${userName} = {
|
||||
extraGroups = [ "wheel" "network" ];
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFV9eSc9L+aJLoKoexq2f/jb5rpyZnhuGiyhS8YQAbaS wyatt@wyattjmiller.com"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WKvKnnYpTbzZHFEslOKyfiiMqWxhW3AfX6E7ACmYU wyatt@wyattjmiller.com"
|
||||
];
|
||||
};
|
||||
"hazel" = {
|
||||
home = "/home/hazel";
|
||||
group = "hazel";
|
||||
extraGroups = [ "wheel" ];
|
||||
description = "hazel";
|
||||
isNormalUser = true;
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDZnyiQx+k1ygX8E1lsUCB6aTdMc+OKzlZ4admlzknc5ulj0YrtUyqhbNhkNd6pP0QDBFMnXO/rzUvHp4TAyZXKFfpcBCa4zhK97ufymAfvzAjM4vRBqRNcr2n+2iRzxtolbklfjs3ocBQVxXW+pRT5wWxTgK2fcmP2xviDVldr7qte37x5YkQb5SAhYNH8tqJRnuGPe+Q0A3oN4HyHZFnrMq/HlbL5yg/0VKPTtF/IgHf+2dDz5OQQpBx3/N9u/QLwuIm9lkyOG03s0TGmE7up/i0jX2vIqp2BbGSnwdQEL/eSVZx73qQB/J62VFafg13P5yQWDJ33WSoiwhac6bg26HPmPOnCJp5R3c+7jM8N1F1ZbtsKicHSVsRg1RQSree4lchPy7FOPkCuUrB7LNE71mbpOzZNR767S6UAPaXxRw6QNYGBaDqQBwhlU8ZDF5F7EW6ahSUMOI6ECyoibzIMb56xs9osuNeUhB/BcL5sHSFpJjIbdcDLNkEKggrBl6s="
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.fail2ban = {
|
||||
enable = true;
|
||||
package = pkgs.fail2ban;
|
||||
maxretry = 5;
|
||||
bantime = "3h";
|
||||
bantime-increment = {
|
||||
enable = true;
|
||||
rndtime = "10m";
|
||||
};
|
||||
};
|
||||
|
||||
services.tailscale = {
|
||||
enable = true;
|
||||
package = pkgs.tailscale;
|
||||
};
|
||||
|
||||
system.stateVersion = "24.11";
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ (modulesPath + "/profiles/qemu-guest.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sr_mod" "virtio_blk" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/e2e621c1-0090-472a-99d9-61c6a87bd068";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/663E-15C0";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0022" "dmask=0022" ];
|
||||
};
|
||||
|
||||
swapDevices =
|
||||
[ { device = "/dev/disk/by-uuid/60104b1a-4285-4dd1-be5e-3c3dee24515a"; }
|
||||
];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
||||
@@ -1,271 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
userName,
|
||||
...
|
||||
}: let
|
||||
# INFO: set these to your liking
|
||||
matrixFqdn = "chat.wyattjmiller.com";
|
||||
rtcFqdn = "rtc.wyattjmiller.com";
|
||||
|
||||
supportEmail = "wyatt@wyattjmiller.com";
|
||||
livekitKeyFile = "/var/lib/livekit/livekit.key";
|
||||
matrixRegistrationTokenFile = "/var/lib/matrix.key";
|
||||
in {
|
||||
imports = [
|
||||
../../pwrMgmt
|
||||
];
|
||||
|
||||
# Enable flakes for NixOS
|
||||
nix.settings.experimental-features = ["nix-command" "flakes"];
|
||||
|
||||
nix.settings = {
|
||||
download-buffer-size = 134217728; # 128 MiB in bytes
|
||||
};
|
||||
|
||||
# Custom kernel/boot stuff
|
||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
|
||||
# Set your timezone
|
||||
time.timeZone = "America/Detroit";
|
||||
|
||||
# Enable OpenSSH
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
settings.PermitRootLogin = "no";
|
||||
settings.PasswordAuthentication = false;
|
||||
};
|
||||
|
||||
# Enable keyring
|
||||
services.gnome.gnome-keyring.enable = true;
|
||||
|
||||
# Enable GnuPG
|
||||
programs.gnupg.agent = {
|
||||
enable = true;
|
||||
enableSSHSupport = true;
|
||||
};
|
||||
|
||||
# Enable SUID wrappers (some programs need them)
|
||||
programs.mtr.enable = true;
|
||||
|
||||
# Enable Polkit
|
||||
security.polkit.enable = true;
|
||||
|
||||
# Power management (see ../../pwrMgmt/default.nix)
|
||||
pwrMgmt = {
|
||||
enable = true;
|
||||
cpuFreqGovernor = "performance";
|
||||
powertop.enable = false;
|
||||
};
|
||||
|
||||
# Firewall settings (fallback, upstream way of doing things)
|
||||
networking.firewall = {
|
||||
enable = true;
|
||||
|
||||
allowedTCPPorts = [
|
||||
80
|
||||
443
|
||||
8448
|
||||
3478
|
||||
5349
|
||||
7880
|
||||
7881
|
||||
8080
|
||||
8081
|
||||
];
|
||||
|
||||
allowedUDPPorts = [
|
||||
3478
|
||||
7881
|
||||
8448
|
||||
];
|
||||
|
||||
allowedUDPPortRanges =[
|
||||
# TURN UDP relays
|
||||
{
|
||||
from = 49000;
|
||||
to = 50000;
|
||||
}
|
||||
#
|
||||
{
|
||||
from = 50100;
|
||||
to = 50200;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
# Add username to groups "wheel" and "video" - more may be added here later
|
||||
users.users.${userName} = {
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFV9eSc9L+aJLoKoexq2f/jb5rpyZnhuGiyhS8YQAbaS wyatt@wyattjmiller.com"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WKvKnnYpTbzZHFEslOKyfiiMqWxhW3AfX6E7ACmYU wyatt@wyattjmiller.com"
|
||||
];
|
||||
extraGroups = ["wheel" "video" "network"];
|
||||
};
|
||||
|
||||
# fail2ban
|
||||
services.fail2ban = {
|
||||
enable = true;
|
||||
package = pkgs.fail2ban;
|
||||
maxretry = 5;
|
||||
bantime = "3h";
|
||||
bantime-increment = {
|
||||
enable = true;
|
||||
rndtime = "10m";
|
||||
};
|
||||
};
|
||||
|
||||
# Matrix server
|
||||
services.matrix-tuwunel = {
|
||||
enable = true;
|
||||
package = pkgs.matrix-tuwunel;
|
||||
settings = {
|
||||
global = {
|
||||
server_name = matrixFqdn;
|
||||
allow_encryption = true;
|
||||
allow_federation = true;
|
||||
allow_registration = true;
|
||||
registration_token = matrixRegistrationTokenFile;
|
||||
allow_unstable_room_versions = false;
|
||||
allow_experimental_room_versions = false;
|
||||
zstd_compression = true;
|
||||
new_user_displayname_suffix = "✨";
|
||||
max_request_size = 1048575600; # 100MB in bytes, for file uploads
|
||||
database_backup_path = "/var/lib/tuwunel/database_backups";
|
||||
database_backups_to_keep = 2;
|
||||
|
||||
address = [
|
||||
"127.0.0.1"
|
||||
"::1"
|
||||
];
|
||||
port = [ 8008 ];
|
||||
|
||||
well_known = {
|
||||
client = "https://${matrixFqdn}";
|
||||
server = "${matrixFqdn}:443";
|
||||
support_email = supportEmail;
|
||||
support_mxid = "@wymiller:${matrixFqdn}";
|
||||
|
||||
rtc_transports = [{
|
||||
type = "livekit";
|
||||
livekit_service_url = "https://${rtcFqdn}";
|
||||
}];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# LiveKit (Matrix RTC)
|
||||
services.livekit = {
|
||||
enable = true;
|
||||
package = pkgs.livekit;
|
||||
openFirewall = true;
|
||||
keyFile = livekitKeyFile;
|
||||
settings = {
|
||||
port = 7880;
|
||||
room.auto_create = true;
|
||||
rtc = {
|
||||
use_external_ip = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Reverse proxy
|
||||
services.caddy = {
|
||||
enable = true;
|
||||
package = pkgs.caddy;
|
||||
virtualHosts = {
|
||||
"${matrixFqdn}" = {
|
||||
extraConfig = ''
|
||||
encode zstd gzip
|
||||
reverse_proxy localhost:8008
|
||||
'';
|
||||
};
|
||||
"${matrixFqdn}:8448" = {
|
||||
extraConfig = ''
|
||||
encode zstd gzip
|
||||
reverse_proxy localhost:8008
|
||||
'';
|
||||
};
|
||||
"${rtcFqdn}" = {
|
||||
extraConfig = ''
|
||||
@jwt_service {
|
||||
path /sfu/get* /healthz*
|
||||
}
|
||||
|
||||
handle @jwt_service {
|
||||
reverse_proxy localhost:8080
|
||||
}
|
||||
|
||||
handle {
|
||||
reverse_proxy localhost:7880 {
|
||||
header_up Connection "upgrade"
|
||||
header_up Upgrade {http.request.header.Upgrade}
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# LiveKit JWT service
|
||||
services.lk-jwt-service = {
|
||||
enable = true;
|
||||
port = 8080;
|
||||
livekitUrl = "wss://rtc.wyattjmiller.com";
|
||||
keyFile = livekitKeyFile;
|
||||
};
|
||||
|
||||
# Generate LiveKit key if it doesn't exist
|
||||
systemd.services = {
|
||||
matrix-registration-token-gen = {
|
||||
before = [ "tuwunel.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = with pkgs; [ coreutils openssl ];
|
||||
script = ''
|
||||
set -eu
|
||||
|
||||
if [ -f "${matrixRegistrationTokenFile}" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
install -d -m 0700 "$(dirname "${matrixRegistrationTokenFile}")"
|
||||
|
||||
TOKEN="$(openssl rand -hex 32)"
|
||||
|
||||
umask 077
|
||||
printf '%s\n' "$TOKEN" > "${matrixRegistrationTokenFile}"
|
||||
'';
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = "root";
|
||||
};
|
||||
};
|
||||
|
||||
livekit-key-gen = {
|
||||
before = [ "lk-jwt-service.service" "livekit.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = with pkgs; [ coreutils openssl ];
|
||||
script = ''
|
||||
set -eu
|
||||
|
||||
if [ -f "${livekitKeyFile}" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
install -d -m 0700 "$(dirname "${livekitKeyFile}")"
|
||||
|
||||
API_KEY="$(openssl rand -hex 8)"
|
||||
API_SECRET="$(openssl rand -hex 32)"
|
||||
|
||||
umask 077
|
||||
printf '%s: %s\n' "$API_KEY" "$API_SECRET" > "${livekitKeyFile}"
|
||||
'';
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = "root";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "25.11";
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{ ... }: {
|
||||
imports = [
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ (modulesPath + "/profiles/qemu-guest.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
|
||||
boot.kernelParams = [ "console=ttyS0,19200n8" ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
boot.loader.grub.extraConfig = ''
|
||||
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1;
|
||||
terminal_input serial;
|
||||
terminal_output serial;
|
||||
'';
|
||||
boot.loader.grub.forceInstall = true;
|
||||
# boot.loader.grub.enable = true;
|
||||
boot.loader.grub.device = "nodev";
|
||||
boot.loader.timeout = 10;
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/sda";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
swapDevices =
|
||||
[ { device = "/dev/sdb"; }
|
||||
];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
# Power management modules
|
||||
|
||||
This directory houses my own custom defined power management settings. These are set in the machine-specific configurations (typically).
|
||||
This directory houses my own custom defined power management settings as NixOS modules. These are set in the machine-specific configurations (typically).
|
||||
|
||||
## Examples
|
||||
|
||||
Given that this configuration is in the `machine/<hostname>` directory (where hostname is the name of the computer your configuring):
|
||||
|
||||
### Desktop configuration
|
||||
### Desktop/server configuration
|
||||
|
||||
```nix
|
||||
imports = [
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
# TODO: refactor into module
|
||||
{ pkgs, ...}: {
|
||||
{...}: {
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
helvum
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,16 +1,7 @@
|
||||
{ lib, pkgs, userName, ...}: {
|
||||
{pkgs, ...}: {
|
||||
services.shairport-sync = {
|
||||
enable = pkgs.stdenv.isLinux;
|
||||
openFirewall = pkgs.stdenv.isLinux;
|
||||
# arguments = "-v -o pa";
|
||||
};
|
||||
|
||||
systemd.services.shairport-sync = {
|
||||
serviceConfig = {
|
||||
User = lib.mkForce "${userName}";
|
||||
};
|
||||
environment = {
|
||||
XDG_RUNTIME_DIR = "/run/user/1000";
|
||||
};
|
||||
arguments = "-v -o pw";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -40,7 +40,13 @@ Example:
|
||||
};
|
||||
```
|
||||
|
||||
To get a full, comprehensive list of what you can do with the podman module, please check out (podman.nix)[./podman.nix]!
|
||||
To get a full, comprehensive list of what you can do with the podman module, please check out [podman.nix](./podman.nix)!
|
||||
|
||||
### Podman Quadlets
|
||||
|
||||
This is a wrapper around a project called [`quadlet-nix`](https://github.com/SEIAROTg/quadlet-nix), a way of defining systemd services as containers with Nix! Since I have existing services running inside of containers and don't want to risk breaking _everything_ that I have running, I figured this would be a safe, transitionary approach to handle this.
|
||||
|
||||
This is still a work-in-progress, check back soon on progress on this.
|
||||
|
||||
## Kubernetes
|
||||
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
{ pkgs, ... }: {
|
||||
{...}: {
|
||||
virtualisation.libvirtd.enable = true;
|
||||
programs.virt-manager.enable = true;
|
||||
services.qemuGuest.enable = true;
|
||||
services.spice-vdagentd.enable = true;
|
||||
environment.systemPackages = with pkgs; [
|
||||
qemu
|
||||
quickemu
|
||||
];
|
||||
}
|
||||
|
||||
47
modules/virtualization/quadlet.nix
Normal file
47
modules/virtualization/quadlet.nix
Normal file
@@ -0,0 +1,47 @@
|
||||
# ----------------------
|
||||
# Wrapper for defining Quadlets in Nix via quadlet-nix
|
||||
#
|
||||
# Still WIP
|
||||
# ----------------------
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.quadlet;
|
||||
in {
|
||||
options = {
|
||||
quadlet = {
|
||||
enable = lib.mkEnableOption "Enable Podman's Quadlet systemd integration";
|
||||
|
||||
autoUpdate = {
|
||||
enable = lib.mkEnableOption "Enable the auto update mechanism";
|
||||
|
||||
calendar = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "*-*-* 03:30:00";
|
||||
description = "When the auto update mechanism is triggered, the calendar option will tell the auto update when to start";
|
||||
};
|
||||
};
|
||||
|
||||
extraPackages = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.package;
|
||||
default = [];
|
||||
description = "Additional container-related packages to install (these likely will be installed with Podman though)";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
virtualisation.quadlet = {
|
||||
enable = true;
|
||||
autoUpdate = {
|
||||
enable = cfg.autoUpdate.enable;
|
||||
calendar = cfg.autoUpdate.calendar;
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = cfg.extraPackages;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user