4 Commits

Author SHA1 Message Date
0c1763528e added base configuration for ixion, applied system update, modified power mgmt readme 2025-10-05 23:11:47 -04:00
59ed5f0463 created easy wrapper for quadlet-nix 2025-10-05 23:10:47 -04:00
aa47f720ed Merge branch 'master' into ixion-build 2025-10-04 20:37:41 -04:00
831fce71b8 added quadlet-nix input, created initial ixion config, created wrapper around quadlets
also wrote some doucumentation about quadlets, nothing too comprehesive
though as the wrapper might get removed later
2025-06-01 19:04:38 -04:00
45 changed files with 494 additions and 1096 deletions

View File

@@ -13,9 +13,9 @@ set $term alacritty
set $menu wofi --term '$term'
### Output configuration
output DP-3 pos 1920 0 res 1920x1080@60Hz
output HDMI-A-1 pos 0 0 res 1920x1080@60Hz
output DP-2 pos 3840 0 res 1920x1080@60Hz
output DP-3 pos 3840 0 res 1920x1080@59Hz
output HDMI-A-1 pos 0 0 res 1920x1080@59Hz
output DP-2 pos 1920 0 res 1920x1080@60Hz
### Wallpaper
output HDMI-A-1 bg ~/.wallpaper/.wallpaper.png fill
@@ -25,22 +25,22 @@ output DP-3 bg ~/.wallpaper/.wallpaper.png fill
### Workspace binding
## DP-3 bindings
workspace 1 output DP-3
workspace 2 output DP-3
workspace 4 output DP-3
workspace 5 output DP-3
workspace 1 output DP-2
workspace 2 output DP-2
workspace 4 output DP-2
workspace 5 output DP-2
## HDMI-A-1 bindings
workspace 3 output HDMI-A-1
workspace 9 output HDMI-A-1
## DP-2 bindings
workspace 6 output DP-2
workspace 7 output DP-2
workspace 8 output DP-2
workspace 6 output DP-3
workspace 7 output DP-3
workspace 8 output DP-3
### Colour options
set $bg #24283b
set $bg #24283b
set $bg-inactive #323232
set $bg-urgent #000000
set $text #eeeeec

270
flake.lock generated
View File

@@ -1,27 +1,5 @@
{
"nodes": {
"aagl": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
],
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1771170334,
"narHash": "sha256-tCgoCWORfNHaRXTh2QS44LwxlV8q28jVvjN5ioMicv8=",
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"rev": "821b4f92c2c0981ea5b571b03403df87d2b2e2ae",
"type": "github"
},
"original": {
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"type": "github"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
@@ -29,16 +7,16 @@
]
},
"locked": {
"lastModified": 1767634391,
"narHash": "sha256-owcSz2ICqTSvhBbhPP+1eWzi88e54rRZtfCNE5E/wwg=",
"lastModified": 1757432263,
"narHash": "sha256-qHn+/0+IOz5cG68BZUwL9BV3EO/e9eNKCjH3+N7wMdI=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "08585aacc3d6d6c280a02da195fdbd4b9cf083c2",
"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": 1770260404,
"narHash": "sha256-3iVX1+7YUIt23hBx1WZsUllhbmP2EnXrV8tCRbLxHc8=",
"lastModified": 1758463745,
"narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "0d782ee42c86b196acff08acfbf41bb7d13eed5b",
"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": 1771043024,
"narHash": "sha256-O1XDr7EWbRp+kHrNNgLWgIrB0/US5wvw9K6RERWAj6I=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "3aadb7ca9eac2891d52a9dec199d9580a6e2bf44",
"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": 1771211437,
"narHash": "sha256-lcNK438i4DGtyA+bPXXyVLHVmJjYpVKmpux9WASa3ro=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "c62195b3d6e1bb11e0c2fb2a494117d3b55d410f",
"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"
}
}
},

133
flake.nix
View File

@@ -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,79 +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
# ];
# }
# ];
};
nixosConfigurations."yshtola" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit userName userEmail;
hostname = "yshtola";
role = "server";
};
modules = [
myOverlays
quadlet-nix.nixosModules.quadlet
./modules/common
./modules/machine/yshtola
./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
];
}
];
};
# 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
];
};
};
}

View File

@@ -1,7 +1,6 @@
{ pkgs, ...}: {
{...}: {
programs.atuin = {
enable = true;
enableFishIntegration = true;
package = pkgs.atuinLatest;
};
}

View File

@@ -1,7 +1,6 @@
{
pkgs,
lib,
isNixOS ? true,
...
}: {
programs.firefox = {
@@ -10,7 +9,7 @@
};
programs.chromium = {
enable = pkgs.stdenv.isLinux && isNixOS;
enable = pkgs.stdenv.isLinux;
package = pkgs.ungoogled-chromium.override {
enableWideVine = true;
commandLineArgs = [
@@ -41,37 +40,14 @@
id = "cjpalhdlnbpafiamejdnhcphjbkeiagm";
sha256 = "sha256:0pdh1v0vx1d5vnl1zh7nbk6j1fh4k4hhwp1ljs203icn306lahsn";
# sha256 = lib.fakeSha256;
version = "1.67.0";
version = "1.64.0";
})
(createChromiumExtension {
# bitwarden
id = "nngceckbapebfimnlniiiahkandclblb";
sha256 = "sha256:0jxk3cqmgd5qj8hnw7s0k5s4bfrcmr0w0rckp3x0bmng07azw4gi";
version = "2025.10.0";
})
(createChromiumExtension {
# react dev tools
id = "fmkadmapgofadopljbjfkapdkoienihi";
sha256 = "sha256:01vy0x7hdkj4g3m2l4kw5rwldhhpkcxmd2miy5rj2dzxdnbchw2z";
version = "7.0.1";
})
(createChromiumExtension {
# wappalyzer
id = "gppongmhjkpfnbhagpmjfkannfbllamg";
sha256 = "sha256:1mi1wpm714r8yp0zh0yg6kccnld36rj4xb8j4y0c18y9176vc6wx";
version = "6.10.86";
})
(createChromiumExtension {
# obsidian web clipper
id = "cnjifjpddelmedmihgijeibhnjfabmlf";
sha256 = "sha256:0bp6g63g9hk2xbq054lpf5hzwmn73jzh3hswyjfp9r7yqj83mzgy";
version = "0.12.0";
})
(createChromiumExtension {
# dark reader
id = "eimadpbcbfnmbkopoojfekhnkhdbieeh";
sha256 = "sha256:06a9dz589i1da519kivzp7bljksl2xxsd151y7ww0hx28jd1694b";
version = "4.9.113";
# sha256 = lib.fakeSha256;
version = "2025.5.0";
})
];
};

View File

@@ -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;

View File

@@ -1,32 +0,0 @@
{ pkgs, ... }: {
programs.k9s = {
enable = true;
package = pkgs.k9s;
settings.k9s = {
refreshRate = "2s";
liveViewAutoRefresh = false;
apiServerTimeout = "30s";
maxConnRetry = 5;
readOnly = true;
noExitOnCtrlC = false;
portForwardAddress = "localhost";
skipLatestRevCheck = false;
skin = {
catppuccin-mocha = ../defaults/k9s/catppuccin-mocha.yaml;
};
ui = {
skin = "catppuccin-mocha";
enableMouse = true;
headless = false;
logoless = true;
crumbsless = false;
splashless = true;
reactive = false;
noIcons = false;
defaultsToFullscreen = false;
};
};
};
}

View File

@@ -1,14 +0,0 @@
{ pkgs, lib, ... }:
with pkgs;
let
plugins = [
"krew"
"oidc-login"
];
in {
home.activation.krew = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
${lib.concatMapStringsSep "\n" (plugin: ''
$DRY_RUN_CMD ${krew}/bin/krew install ${plugin} || true
'') plugins}
'';
}

View File

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

View File

@@ -1,8 +1,4 @@
{...}: let
dirs = {
defaults = ../defaults;
};
in {
{dirs, ...}: {
programs.neovim = {
enable = true;
defaultEditor = true;

View File

@@ -1,20 +1,11 @@
{
lib,
pkgs,
...
}: {
imports = [
../atuin.nix
../shell.nix
../git.nix
../starship.nix
../eza.nix
../neovim.nix
../bat.nix
];
nixpkgs.config.allowUnfree = true;
home.packages = with pkgs; [
yazi # terminal file manager
# archives
zip
xz
@@ -22,21 +13,40 @@
p7zip
# utils
yazi
tmux
lazygit
bottom
ripgrep
jq
yq-go
fzf
fh
aria2
gnupg
yt-dlp
obsidian
vscode
weechat
inetutils
# misc
cowsay
file
which
tree
gnutar
gnupg
zoxide
babelfish
# language-specific package managers
nodejs
cargo
python3
# nix specific stuff
nixd
deadnix
alejandra
statix
];
}

View File

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

View File

@@ -1,11 +1,11 @@
{ lib, role ? "workstation", ... }:
{
imports =
[
./common.nix
./darwin.nix
./linux.nix
]
++ lib.optional (role == "workstation") ./workstation.nix
++ lib.optional (role == "server") ./server.nix;
pkgs,
lib,
...
}: {
imports = [
./common.nix
./darwin.nix
./linux.nix
];
}

View File

@@ -1,4 +1,20 @@
{ lib, pkgs, isNixOS ? true, ... }:
lib.mkIf pkgs.stdenv.isLinux {
{
pkgs,
lib,
...
}: {
home.packages = lib.mkIf pkgs.stdenv.isLinux (with pkgs; [
imv
betterdiscordctl
vesktop
xdg-utils
mcrcon
xfce.thunar
pavucontrol
godot
aseprite
gpu-screen-recorder
gpu-screen-recorder-gtk
# ungoogled-chromium
]);
}

View File

@@ -1,4 +0,0 @@
{ pkgs, ... }: {
home.packages = [
];
}

View File

@@ -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
];
}

View File

@@ -1,11 +1,9 @@
{pkgs, lib, ...}: {
programs.fish = {
enable = true;
shellInit = ''
if test -d $HOME/.krew/bin
set -gx PATH $HOME/.krew/bin $PATH
end
'';
# initExtra = ''
# export PATH="$PATH:$HOME/bin:$HOME/.local/bin:$HOME/go/bin"
# '';
shellAliases = {
# ls aliases
@@ -45,25 +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 youve brought your ivory standard, Ill be happy to tell you where you can stick it" \
"Speeches? Oh, yes, I love them. There's nothing like a good exposition when you're having trouble sleeping!" \
"Somehow, the boy just isn't very buoyant" \
"I am...not interested, little sun. Try again when you have become a man"
"We don't do that here..."
set choose_meme (random)"%"(count $memes)
set choose_meme $memes[(math $choose_meme"+1")]

View File

@@ -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;
};
}

View File

@@ -1,4 +1,4 @@
{ pkgs, ... }: {
{ lib, pkgs, ghostty, ... }: {
programs.alacritty = {
enable = pkgs.stdenv.isLinux;
settings = {
@@ -103,4 +103,9 @@
programs.kitty = {
enable = false; # TODO: to enable later
};
home.packages = if pkgs.stdenv.isLinux then
[ ghostty.packages.${pkgs.system}.default ]
else
[ ];
}

View File

View File

@@ -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]);
};
}

View File

@@ -7,11 +7,3 @@ Licensed by the Mozilla Public License v2
## Synopsis
This is the directory that holds shared configuration files amongst computers that I own. They are called by the root `flake.nix` file.
Here's a quick synopsis of each file:
- core: Sane Nix options that I set for myself
- environment: Core packages and environment variables to be set and installed
- fonts: Fonts and icons that are to be installed
- overlays: Customized packages tailored to my needs
- users: Users to be set on my system

View File

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

View File

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

View File

@@ -13,6 +13,7 @@
systemd
lshw
dmidecode
nix-ld
]) ++
lib.optionals pkgs.stdenv.isDarwin (with pkgs; [
# nothing here, yet ;)

View File

@@ -6,14 +6,10 @@
fonts.packages = with pkgs;
[
noto-fonts
noto-fonts-color-emoji
noto-fonts-emoji
liberation_ttf
noto-fonts-cjk-sans
monaspace
]
++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);
environment.systemPackages = with pkgs; [
adwaita-icon-theme
];
}

View File

@@ -1,62 +0,0 @@
{ pkgs, ... }: {
programs.nix-ld = {
enable = true;
libraries = with pkgs;
[
acl
attr
bzip2
dbus
expat
fontconfig
freetype
fuse3
icu
libnotify
libsodium
libssh
libunwind
libusb1
libuuid
nspr
nss
stdenv.cc.cc
util-linux
zlib
zstd
pipewire
cups
libxkbcommon
pango
mesa
libdrm
libglvnd
libpulseaudio
atk
cairo
alsa-lib
at-spi2-atk
at-spi2-core
gdk-pixbuf
glib
gtk3
libGL
libappindicator-gtk3
vulkan-loader
xorg.libX11
xorg.libXScrnSaver
xorg.libXcomposite
xorg.libXcursor
xorg.libXdamage
xorg.libXext
xorg.libXfixes
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXtst
xorg.libxcb
xorg.libxkbfile
xorg.libxshmfence
];
};
}

View File

@@ -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"
# ];
# });
}

View File

@@ -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
];

View File

@@ -10,10 +10,6 @@ I like Final Fantasy, alright? Isn't everyone supposed to have a hobby?
These are named after Final Fantasy VII characters.
### Servers/Network Infrastructure (bare metal)
### Servers/Network Infrastructure
These are named after Final Fantasy summons. There is some infrastructure missing here like my routers and switches that I also name after summons.
### Servers/Network Infrastructure (virtual machines)
These are named after Final Fantasy XIV Online characters (currently, these are named after the Scions of the Seventh Dawn).
These are named after Final Fantasy summons.

View File

@@ -1,8 +1,8 @@
{
config,
lib,
pkgs,
userName,
aagl,
...
}: let
flatpakPackages = [
@@ -18,7 +18,7 @@
in {
imports = [
(import ../../apps/flatpak.nix {
inherit lib pkgs flatpakPackages 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";
}

View File

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

View File

@@ -12,24 +12,24 @@
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "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

View File

@@ -0,0 +1,84 @@
{
pkgs,
userName,
...
}: {
imports = [
../../pwrMgmt
../../networking/core.nix
../../virtualization/podman.nix
../../virtualization/quadlet.nix
../../virtualization/hardware.nix
];
# Enable flakes for NixOS
nix.settings.experimental-features = ["nix-command" "flakes"];
# Custom kernel/boot stuff
boot = {
kernelPackages = pkgs.linuxPackages_latest;
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
};
# Enable Polkit
security.polkit.enable = true;
# Make sure Bluetooth is off!
hardware.bluetooth.enable = false;
# Set your timezone
time.timeZone = "America/Detroit";
# Power management module
pwrMgmt = {
enable = true;
cpuFreqGovernor = "performance";
powertop.enable = false;
};
# Podman module (see ../../virtualization/podman.nix)
podman = {
enable = true;
extraPackages = with pkgs; [
docker-credential-helpers
toolbox
cosign
crane
podman-tui
];
};
# Core networking module (see ../../networking/core.nix)
network = {
firewall.enable = true;
networkManager.enable = true;
};
programs = {
# Enable GnuPG
gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# Enable SUID wrappers (some programs need them)
mtr.enable = true;
};
users.users.${userName}.extraGroups = ["wheel" "video" "podman" "network"];
services = {
# Enable OpenSSH
openssh.enable = true;
};
# Install packages to be installed system-wide
environment.systemPackages = with pkgs; [
wireguard-tools
];
system.stateVersion = "25.05";
}

View File

@@ -1,4 +1,4 @@
{ ... }: {
{...}: {
imports = [
./configuration.nix
./hardware-configuration.nix

View 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;
}

View File

@@ -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";
}

View File

@@ -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";
}

View File

@@ -1,12 +1,12 @@
# Power management modules
This directory houses my own custom defined power management settings. These are set in the machine-specific configurations (typically).
This directory houses my own custom defined power management settings as NixOS modules. These are set in the machine-specific configurations (typically).
## Examples
Given that this configuration is in the `machine/<hostname>` directory (where hostname is the name of the computer your configuring):
### Desktop configuration
### Desktop/server configuration
```nix
imports = [

View File

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

View File

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

View File

@@ -40,7 +40,13 @@ Example:
};
```
To get a full, comprehensive list of what you can do with the podman module, please check out (podman.nix)[./podman.nix]!
To get a full, comprehensive list of what you can do with the podman module, please check out [podman.nix](./podman.nix)!
### Podman Quadlets
This is a wrapper around a project called [`quadlet-nix`](https://github.com/SEIAROTg/quadlet-nix), a way of defining systemd services as containers with Nix! Since I have existing services running inside of containers and don't want to risk breaking _everything_ that I have running, I figured this would be a safe, transitionary approach to handle this.
This is still a work-in-progress, check back soon on progress on this.
## Kubernetes

View File

@@ -1,10 +1,4 @@
{ pkgs, ... }: {
{...}: {
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
services.qemuGuest.enable = true;
services.spice-vdagentd.enable = true;
environment.systemPackages = with pkgs; [
qemu
quickemu
];
}

View File

@@ -0,0 +1,47 @@
# ----------------------
# Wrapper for defining Quadlets in Nix via quadlet-nix
#
# Still WIP
# ----------------------
{
config,
lib,
...
}:
let
cfg = config.quadlet;
in {
options = {
quadlet = {
enable = lib.mkEnableOption "Enable Podman's Quadlet systemd integration";
autoUpdate = {
enable = lib.mkEnableOption "Enable the auto update mechanism";
calendar = lib.mkOption {
type = lib.types.str;
default = "*-*-* 03:30:00";
description = "When the auto update mechanism is triggered, the calendar option will tell the auto update when to start";
};
};
extraPackages = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
description = "Additional container-related packages to install (these likely will be installed with Podman though)";
};
};
};
config = lib.mkIf cfg.enable {
virtualisation.quadlet = {
enable = true;
autoUpdate = {
enable = cfg.autoUpdate.enable;
calendar = cfg.autoUpdate.calendar;
};
};
environment.systemPackages = cfg.extraPackages;
};
}