My Nix Configuration

[flake] flake-parts works maybe????

pyrox.dev 0e1a3e20 405f931f

verified
Changed files
+806 -594
checks
deploy
devShells
homeModules
homes
x86_64-linux
pyrox@marvin
pyrox@prefect
pyrox@thought
pyrox@zaphod
thehedgehog@marvin
thehedgehog@prefect
thehedgehog@thought
thehedgehog@zaphod
hosts
marvin
prefect
thought
zaphod
lib
modules
home
profiles
server
programs
neovim
nixos
default-config
nixosModules
overlays
openssh-fixperms
packages
jellyfin-exporter
templates
+6
MIGRATE.md
···
+
- [ ] easy-hosts
+
- [ ] HM Configs
+
- [x] modules
+
- [x] packages
+
- [x] devShells
+
- [x] overlays
-2
checks/deploy/default.nix
···
-
{ inputs, ... }:
-
builtins.mapAttrs (_: deployLib: deployLib.deployChecks inputs.self.deploy) inputs.deploy-rs.lib
+12
devShells/default.nix
···
+
{
+
...
+
}:
+
{
+
perSystem =
+
{ pkgs, ... }:
+
{
+
devShells = {
+
default = pkgs.callPackage ./default { };
+
};
+
};
+
}
+34 -143
flake.lock
···
"nixpkgs": [
"nixpkgs"
],
-
"treefmt-nix": "treefmt-nix"
+
"treefmt-nix": []
},
"locked": {
-
"lastModified": 1758204241,
-
"narHash": "sha256-xKl3mXyML/NCWUYrZ9ww/fXfTWvGvNnXgDBrpDy/c2Y=",
-
"owner": "Mic92",
+
"lastModified": 1758897213,
+
"narHash": "sha256-pLZgNsmCMhTWd8aRuGkK23ik5nclpIn1flnURKH6QjI=",
+
"owner": "nix-community",
"repo": "buildbot-nix",
-
"rev": "82745470e3fa50e1bdcc8f59745121aa29f1ac7a",
+
"rev": "985d069a2a45cf4a571a4346107671adc2bd2a16",
"type": "github"
},
"original": {
-
"owner": "Mic92",
+
"owner": "nix-community",
"repo": "buildbot-nix",
"type": "github"
}
···
"owner": "lnl7",
"ref": "master",
"repo": "nix-darwin",
-
"type": "github"
-
}
-
},
-
"deploy-rs": {
-
"inputs": {
-
"flake-compat": [
-
"flake-compat"
-
],
-
"nixpkgs": [
-
"nixpkgs"
-
],
-
"utils": [
-
"flake-utils"
-
]
-
},
-
"locked": {
-
"lastModified": 1756719547,
-
"narHash": "sha256-N9gBKUmjwRKPxAafXEk1EGadfk2qDZPBQp4vXWPHINQ=",
-
"owner": "serokell",
-
"repo": "deploy-rs",
-
"rev": "125ae9e3ecf62fb2c0fd4f2d894eb971f1ecaed2",
-
"type": "github"
-
},
-
"original": {
-
"owner": "serokell",
-
"repo": "deploy-rs",
"type": "github"
}
},
···
"type": "github"
}
},
+
"easy-hosts": {
+
"locked": {
+
"lastModified": 1755470564,
+
"narHash": "sha256-KB1ZryVDoQcbIsItOf4WtxkHhh3ppj+XwMpSnt/2QHc=",
+
"owner": "tgirlcloud",
+
"repo": "easy-hosts",
+
"rev": "d0422bc7b3db26268982aa15d07e60370e76ee1d",
+
"type": "github"
+
},
+
"original": {
+
"owner": "tgirlcloud",
+
"repo": "easy-hosts",
+
"type": "github"
+
}
+
},
"flake-compat": {
"locked": {
"lastModified": 1747046372,
···
"type": "github"
}
},
-
"flake-utils-plus": {
-
"inputs": {
-
"flake-utils": "flake-utils_2"
-
},
-
"locked": {
-
"lastModified": 1715533576,
-
"narHash": "sha256-fT4ppWeCJ0uR300EH3i7kmgRZnAVxrH+XtK09jQWihk=",
-
"owner": "gytis-ivaskevicius",
-
"repo": "flake-utils-plus",
-
"rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f",
-
"type": "github"
-
},
-
"original": {
-
"owner": "gytis-ivaskevicius",
-
"repo": "flake-utils-plus",
-
"rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f",
-
"type": "github"
-
}
-
},
"flake-utils_2": {
"inputs": {
-
"systems": "systems"
-
},
-
"locked": {
-
"lastModified": 1694529238,
-
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
-
"owner": "numtide",
-
"repo": "flake-utils",
-
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
-
"type": "github"
-
},
-
"original": {
-
"owner": "numtide",
-
"repo": "flake-utils",
-
"type": "github"
-
}
-
},
-
"flake-utils_3": {
-
"inputs": {
-
"systems": "systems_3"
+
"systems": "systems_2"
},
"locked": {
"lastModified": 1694529238,
···
},
"gomod2nix": {
"inputs": {
-
"flake-utils": "flake-utils_3",
+
"flake-utils": "flake-utils_2",
"nixpkgs": [
-
"tangled-sh",
+
"tangled",
"nixpkgs"
]
},
···
"agenix": "agenix",
"buildbot-nix": "buildbot-nix",
"ctp": "ctp",
-
"deploy-rs": "deploy-rs",
"determinate": "determinate",
"dix": "dix",
"dns": "dns",
+
"easy-hosts": "easy-hosts",
"flake-compat": "flake-compat",
"flake-parts": "flake-parts",
"flake-utils": "flake-utils",
···
"nixpkgs": "nixpkgs_2",
"nixpkgs-lib": "nixpkgs-lib",
"nixpkgs-stalwart-fix": "nixpkgs-stalwart-fix",
-
"snowfall-lib": "snowfall-lib",
"stable": "stable",
-
"systems": "systems_2",
-
"tangled-sh": "tangled-sh"
-
}
-
},
-
"snowfall-lib": {
-
"inputs": {
-
"flake-compat": [
-
"flake-compat"
-
],
-
"flake-utils-plus": "flake-utils-plus",
-
"nixpkgs": [
-
"nixpkgs"
-
]
-
},
-
"locked": {
-
"lastModified": 1736130495,
-
"narHash": "sha256-4i9nAJEZFv7vZMmrE0YG55I3Ggrtfo5/T07JEpEZ/RM=",
-
"owner": "snowfallorg",
-
"repo": "lib",
-
"rev": "02d941739f98a09e81f3d2d9b3ab08918958beac",
-
"type": "github"
-
},
-
"original": {
-
"owner": "snowfallorg",
-
"repo": "lib",
-
"type": "github"
+
"systems": "systems",
+
"tangled": "tangled"
}
},
"sqlite-lib-src": {
···
"type": "github"
}
},
-
"systems_3": {
-
"locked": {
-
"lastModified": 1681028828,
-
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
-
"owner": "nix-systems",
-
"repo": "default",
-
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
-
"type": "github"
-
},
-
"original": {
-
"owner": "nix-systems",
-
"repo": "default",
-
"type": "github"
-
}
-
},
-
"tangled-sh": {
+
"tangled": {
"inputs": {
"flake-compat": "flake-compat_2",
"gomod2nix": "gomod2nix",
···
"sqlite-lib-src": "sqlite-lib-src"
},
"locked": {
-
"lastModified": 1758343819,
-
"narHash": "sha256-lXoRA/zM7V8f5SvSZMdPSMpZiFkFnx3RV0RfovQbqzg=",
+
"lastModified": 1758990466,
+
"narHash": "sha256-PPxdekQr5z5N37CznPm98XBm7WeMZ5+5pctJ0n/5O0I=",
"ref": "refs/heads/master",
-
"rev": "796f739caf7df25436e0ac3a8880dca54d6238db",
-
"revCount": 1366,
+
"rev": "4132d1b923e4b9f65cb74339a3d72f38b0379195",
+
"revCount": 1452,
"type": "git",
-
"url": "https://tangled.sh/@tangled.sh/core"
+
"url": "https://tangled.org/@tangled.org/core"
},
"original": {
"type": "git",
-
"url": "https://tangled.sh/@tangled.sh/core"
-
}
-
},
-
"treefmt-nix": {
-
"inputs": {
-
"nixpkgs": [
-
"buildbot-nix",
-
"nixpkgs"
-
]
-
},
-
"locked": {
-
"lastModified": 1756662192,
-
"narHash": "sha256-F1oFfV51AE259I85av+MAia221XwMHCOtZCMcZLK2Jk=",
-
"owner": "numtide",
-
"repo": "treefmt-nix",
-
"rev": "1aabc6c05ccbcbf4a635fb7a90400e44282f61c4",
-
"type": "github"
-
},
-
"original": {
-
"owner": "numtide",
-
"repo": "treefmt-nix",
-
"type": "github"
+
"url": "https://tangled.org/@tangled.org/core"
}
}
},
+50 -92
flake.nix
···
description = "PyroNet machines and services";
inputs = {
-
snowfall-lib = {
-
url = "github:snowfallorg/lib";
-
inputs.nixpkgs.follows = "nixpkgs";
-
inputs.flake-compat.follows = "flake-compat";
+
flake-parts = {
+
url = "github:hercules-ci/flake-parts";
+
inputs.nixpkgs-lib.follows = "nixpkgs-lib";
};
nixpkgs.url = "https://nixpkgs.dev/channel/nixpkgs-unstable";
nixpkgs-stalwart-fix.url = "github:pyrox0/nixpkgs/fix/stalwart-module";
···
# Overrides
flake-compat.url = "github:edolstra/flake-compat";
systems.url = "github:nix-systems/default";
-
flake-parts = {
-
url = "github:hercules-ci/flake-parts";
-
inputs.nixpkgs-lib.follows = "nixpkgs-lib";
-
};
flake-utils = {
url = "github:numtide/flake-utils";
inputs.systems.follows = "systems";
···
};
};
buildbot-nix = {
-
url = "github:Mic92/buildbot-nix";
+
url = "github:nix-community/buildbot-nix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
+
inputs.treefmt-nix.follows = "";
};
ctp = {
url = "github:catppuccin/nix";
};
-
deploy-rs = {
-
url = "github:serokell/deploy-rs";
-
inputs = {
-
nixpkgs.follows = "nixpkgs";
-
utils.follows = "flake-utils";
-
flake-compat.follows = "flake-compat";
-
};
-
};
dix = {
url = "https://flakehub.com/f/DeterminateSystems/nix-src/*";
inputs = {
···
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs.follows = "nixpkgs";
};
-
+
easy-hosts.url = "github:tgirlcloud/easy-hosts";
golink = {
url = "github:tailscale/golink";
inputs.systems.follows = "systems";
···
url = "git+https://git.pyrox.dev/pyrox/pkgs";
inputs.nixpkgs.follows = "nixpkgs";
};
-
tangled-sh = {
-
url = "git+https://tangled.sh/@tangled.sh/core";
+
tangled = {
+
url = "git+https://tangled.org/@tangled.org/core";
};
};
outputs =
-
inputs@{ self, ... }:
-
let
-
lib = inputs.snowfall-lib.mkLib {
-
inherit inputs;
-
src = ./.;
-
snowfall = {
-
meta = {
-
name = "pyronet";
-
title = "PyroNet Config";
-
};
-
namespace = "py";
-
};
-
};
-
overlays = [
-
self.overlays.pyronet-packages
-
self.overlays.nix-index
-
self.overlays.openssh-fixperms
-
inputs.golink.overlays.default
+
inputs:
+
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
+
# Systems we want to build for
+
systems = [
+
"x86_64-linux"
];
-
in
-
lib.mkFlake {
-
# Nixpkgs configuration
-
channels-config = {
-
allowUnfree = true;
-
};
-
# Overlays for Nixpkgs.
-
inherit overlays;
-
-
# Home-manager configurations
-
homes = {
-
# Default modules for all homes
-
modules = with inputs; [
-
nix-index-database.homeModules.nix-index
-
ctp.homeModules.catppuccin
-
];
-
};
-
-
# NixOS Configurations
-
systems = {
-
# Modules for all systems
-
modules.nixos = with inputs; [
-
agenix.nixosModules.default
-
buildbot-nix.nixosModules.buildbot-worker
-
ctp.nixosModules.catppuccin
-
determinate.nixosModules.default
-
];
-
hosts = {
-
# Zaphod, my personal Framework 16 laptop
-
zaphod.modules = with inputs; [ hardware.nixosModules.framework-16-7040-amd ];
+
# Flake modules
+
imports = [
+
inputs.easy-hosts.flakeModule
+
inputs.home-manager.flakeModules.home-manager
+
./packages
+
./lib
+
./overlays
+
./devShells
+
./nixosModules
+
./homeModules
+
./templates
+
./hosts
+
];
-
# Prefect, my main VPS
-
prefect.modules = with inputs; [ mailserver.nixosModule ];
+
# # Flake attributes
+
# flake = {
+
#
+
# };
-
# Marvin, my main homelab machine
-
marvin.modules = with inputs; [
-
buildbot-nix.nixosModules.buildbot-master
-
golink.nixosModules.default
-
iceshrimp.nixosModules.default
-
tangled-sh.nixosModules.knot
-
tangled-sh.nixosModules.spindle
-
];
+
# Per-system stuff
+
perSystem =
+
{
+
pkgs,
+
system,
+
...
+
}:
+
{
+
_module.args.pkgs = import inputs.nixpkgs {
+
inherit system;
+
overlays = [
+
# inputs.self.overlays.pyronet-packages
+
inputs.self.overlays.openssh-fixperms
+
inputs.golink.overlays.default
+
];
+
config = {
+
allowUnfree = true;
+
};
+
};
+
formatter = pkgs.nixfmt;
};
-
};
-
templates = {
-
uv.description = "Python template flake that uses uv";
-
};
-
-
outputs-builder = channels: {
-
# Define default packages to use everywhere
-
packages = {
-
nvim = channels.nixpkgs.neovim-unwrapped;
-
};
-
formatter = channels.nixpkgs.nixfmt-rfc-style;
-
-
};
-
deploy = lib.mkDeploy { inherit (inputs) self; };
};
}
+15
homeModules/all-modules.nix
···
+
{ inputs, ... }:
+
{
+
imports = [
+
inputs.self.homeModules.profiles
+
inputs.self.homeModules.programs
+
inputs.self.homeModules.scripts
+
inputs.self.homeModules.services
+
inputs.self.homeModules.theming
+
inputs.self.homeModules.wayland
+
inputs.self.homeModules.xdg
+
+
inputs.nix-index-database.homeModules.nix-index
+
inputs.ctp.homeModules.catppuccin
+
];
+
}
+13
homeModules/default.nix
···
+
{ inputs, flake-parts-lib, ... }:
+
{
+
flake.homeModules = {
+
wayland = import ./wayland;
+
xdg = import ./xdg;
+
programs = import ./programs;
+
services = import ./services;
+
scripts = import ./scripts;
+
theming = import ./theming;
+
profiles = import ./profiles;
+
allModules = flake-parts-lib.importApply ./all-modules.nix { inherit inputs; };
+
};
+
}
+10
homeModules/profiles/default.nix
···
+
{
+
imports = [
+
./base/default.nix
+
./cli/default.nix
+
./desktop/default.nix
+
./development/default.nix
+
./gui/default.nix
+
./server/default.nix
+
];
+
}
+15
homeModules/profiles/server/default.nix
···
+
{
+
lib,
+
config,
+
...
+
}:
+
let
+
cfg = config.py.profiles.server;
+
in
+
{
+
options.py.profiles.server.enable = lib.mkEnableOption "Server Profile";
+
config = lib.mkIf cfg.enable {
+
py.profiles.base.enable = true;
+
py.profiles.cli.enable = true;
+
};
+
}
+21
homeModules/programs/default.nix
···
+
{
+
imports = [
+
./chromium
+
./firefox
+
./fish
+
./ghostty
+
./git
+
./gpg
+
./helix
+
./kitty
+
./misc-programs
+
./neovim
+
./nushell
+
./onagre
+
./ssh
+
./starship
+
./vscodium
+
./wlogout
+
./zed-editor
+
];
+
}
+35
homeModules/programs/neovim/default.nix
···
+
{
+
pkgs,
+
config,
+
lib,
+
...
+
}:
+
let
+
cfg = config.py.programs.neovim;
+
in
+
{
+
options.py.programs.neovim.enable = lib.mkEnableOption "Neovim Configuration";
+
+
config.programs.neovim = lib.mkIf cfg.enable {
+
enable = true;
+
viAlias = true;
+
vimAlias = true;
+
vimdiffAlias = true;
+
withRuby = false;
+
withNodeJs = false;
+
withPython3 = false;
+
extraPackages = [
+
pkgs.bottom
+
pkgs.fd
+
pkgs.gcc
+
pkgs.go
+
pkgs.nodejs
+
]
+
++ lib.optionals config.py.profiles.gui.enable [
+
pkgs.ffmpegthumbnailer
+
pkgs.fontpreview
+
pkgs.poppler
+
pkgs.ueberzug
+
];
+
};
+
}
+10
homeModules/services/default.nix
···
+
{
+
imports = [
+
./gpg-agent
+
./kanshi
+
./kdeconnect
+
./mako
+
./swayidle
+
./syncthing
+
];
+
}
-8
homes/x86_64-linux/pyrox@marvin/default.nix
···
-
{
-
snowfallorg.user = {
-
enable = true;
-
};
-
py = {
-
profiles.server.enable = true;
-
};
-
}
-8
homes/x86_64-linux/pyrox@prefect/default.nix
···
-
{
-
snowfallorg.user = {
-
enable = true;
-
};
-
py = {
-
profiles.server.enable = true;
-
};
-
}
-8
homes/x86_64-linux/pyrox@thought/default.nix
···
-
{
-
snowfallorg.user = {
-
enable = true;
-
};
-
py = {
-
profiles.server.enable = true;
-
};
-
}
-55
homes/x86_64-linux/pyrox@zaphod/default.nix
···
-
{
-
pkgs,
-
...
-
}:
-
{
-
imports = [
-
./files/pamKeys.nix
-
./files/distrobox-config.nix
-
];
-
snowfallorg.user = {
-
enable = true;
-
};
-
home.packages = [
-
pkgs.mindustry
-
];
-
py = {
-
profiles.desktop.enable = true;
-
};
-
py.services.kanshi.settings = [
-
{
-
profile = {
-
name = "laptop-only";
-
outputs = [
-
{
-
criteria = "eDP-1";
-
status = "enable";
-
scale = 1.2;
-
position = "0,0";
-
adaptiveSync = true;
-
}
-
];
-
};
-
}
-
{
-
profile = {
-
name = "office";
-
outputs = [
-
{
-
criteria = "eDP-1";
-
status = "enable";
-
scale = 1.2;
-
position = "0,0";
-
adaptiveSync = true;
-
}
-
{
-
criteria = "Acer Technologies SA241Y 0x1497CF17";
-
status = "enable";
-
scale = 1.0;
-
position = "2160,0";
-
}
-
];
-
};
-
}
-
];
-
}
homes/x86_64-linux/pyrox@zaphod/files/distrobox-config.nix nixosModules/homes/pyrox-zaphod/files/distrobox-config.nix
homes/x86_64-linux/pyrox@zaphod/files/pamKeys.nix nixosModules/homes/pyrox-zaphod/files/pamKeys.nix
-8
homes/x86_64-linux/thehedgehog@marvin/default.nix
···
-
{
-
snowfallorg.user = {
-
enable = true;
-
};
-
py = {
-
profiles.server.enable = true;
-
};
-
}
-8
homes/x86_64-linux/thehedgehog@prefect/default.nix
···
-
{
-
snowfallorg.user = {
-
enable = true;
-
};
-
py = {
-
profiles.server.enable = true;
-
};
-
}
-8
homes/x86_64-linux/thehedgehog@thought/default.nix
···
-
{
-
snowfallorg.user = {
-
enable = true;
-
};
-
py = {
-
profiles.server.enable = true;
-
};
-
}
-63
homes/x86_64-linux/thehedgehog@zaphod/default.nix
···
-
{
-
pkgs,
-
config,
-
...
-
}:
-
{
-
snowfallorg.user = {
-
enable = true;
-
};
-
home.packages = [
-
pkgs.mindustry
-
pkgs.signal-desktop
-
];
-
py.profiles.desktop.enable = true;
-
services.wpaperd = {
-
enable = true;
-
settings = {
-
default = {
-
path = "${config.home.homeDirectory}/bgs";
-
duration = "3h";
-
sorting = "random";
-
queue-size = 50;
-
recursive = false;
-
};
-
};
-
};
-
py.services.kanshi.settings = [
-
{
-
profile = {
-
name = "laptop-only";
-
outputs = [
-
{
-
criteria = "eDP-1";
-
status = "enable";
-
scale = 1.2;
-
position = "0,0";
-
adaptiveSync = true;
-
}
-
];
-
};
-
}
-
{
-
profile = {
-
name = "office";
-
outputs = [
-
{
-
criteria = "eDP-1";
-
status = "enable";
-
scale = 1.2;
-
position = "0,0";
-
adaptiveSync = true;
-
}
-
{
-
criteria = "Acer Technologies SA241Y 0x1497CF17";
-
status = "enable";
-
scale = 1.0;
-
position = "2160,0";
-
}
-
];
-
};
-
}
-
];
-
}
+69
hosts/default.nix
···
+
{ inputs, ... }:
+
{
+
easy-hosts = {
+
shared = {
+
modules = [
+
inputs.agenix.nixosModules.default
+
inputs.ctp.nixosModules.catppuccin
+
inputs.determinate.nixosModules.default
+
inputs.home-manager.nixosModules.home-manager
+
inputs.self.nixosModules.chromium
+
inputs.self.nixosModules.defaultConfig
+
inputs.self.nixosModules.defaultUsers
+
inputs.self.nixosModules.firefox
+
inputs.self.nixosModules.forgejo-runner
+
inputs.self.nixosModules.hm-pyrox
+
inputs.self.nixosModules.hm-thehedgehog
+
inputs.self.nixosModules.miscPrograms
+
inputs.self.nixosModules.neovim
+
inputs.self.nixosModules.profiles
+
inputs.self.nixosModules.scrutiny
+
];
+
};
+
path = ./.;
+
hosts = {
+
marvin = {
+
deployable = true;
+
tags = [
+
"server"
+
"home"
+
];
+
modules = [
+
inputs.golink.nixosModules.default
+
inputs.tangled.nixosModules.knot
+
inputs.tangled.nixosModules.spindle
+
];
+
};
+
prefect = {
+
deployable = true;
+
tags = [
+
"server"
+
"vps"
+
];
+
modules = [
+
inputs.mailserver.nixosModule
+
];
+
};
+
thought = {
+
deployable = true;
+
tags = [
+
"server"
+
"vps"
+
];
+
};
+
zaphod = {
+
deployable = true;
+
tags = [ "laptop" ];
+
modules = [
+
inputs.hardware.nixosModules.framework-16-7040-amd
+
inputs.self.nixosModules.hm-pyrox-zaphod
+
inputs.self.nixosModules.hm-thehedgehog-zaphod
+
{
+
home-manager.useGlobalPkgs = true;
+
home-manager.useUserPackages = true;
+
}
+
];
+
};
+
};
+
};
+
}
+4 -4
lib/data/default.nix
···
{
-
data.hosts = builtins.fromTOML (builtins.readFile ./hosts.toml);
-
data.services = builtins.fromTOML (builtins.readFile ./services.toml);
-
data.mail = builtins.fromTOML (builtins.readFile ./mail.toml);
-
data.tsNet = "coelacanth-dragon.ts.net";
+
hosts = builtins.fromTOML (builtins.readFile ./hosts.toml);
+
services = builtins.fromTOML (builtins.readFile ./services.toml);
+
mail = builtins.fromTOML (builtins.readFile ./mail.toml);
+
tsNet = "coelacanth-dragon.ts.net";
}
+8
lib/default.nix
···
+
{
+
...
+
}:
+
{
+
flake = {
+
lib.data = import ./data;
+
};
+
}
+2 -2
modules/home/profiles/base/default.nix homeModules/profiles/base/default.nix
···
lib,
...
}:
+
let
cfg = config.py.profiles.base;
in
{
options.py.profiles.base.enable = lib.mkEnableOption "Base Home Profile";
config = lib.mkIf cfg.enable {
-
programs.home-manager.enable = true;
-
home.stateVersion = "25.05";
+
home.stateVersion = "25.11";
home.language = {
base = "en_US.utf8";
};
+4 -5
modules/home/profiles/cli/default.nix homeModules/profiles/cli/default.nix
···
pkgs,
lib,
config,
-
inputs,
-
system,
...
}:
let
+
inherit (lib) mkDefault mkEnableOption;
cfg = config.py.profiles.cli;
-
inherit (lib) mkEnableOption mkDefault mkIf;
in
{
options.py.profiles.cli.enable = mkEnableOption "CLI Profile";
-
config = mkIf cfg.enable {
+
config = lib.mkIf cfg.enable {
+
py.profiles.base.enable = true;
py.programs = {
bat.enable = mkDefault true;
direnv.enable = mkDefault true;
···
fzf
glow
gnupg
+
nix-search
pinentry
rbw
rsync
xdg-utils
yt-dlp
-
inputs.nix-search.packages.${system}.default
];
};
}
modules/home/profiles/cli/rbw-config.json homeModules/profiles/cli/rbw-config.json
+5 -7
modules/home/profiles/desktop/default.nix homeModules/profiles/desktop/default.nix
···
{
pkgs,
-
config,
lib,
+
config,
...
}:
let
···
{
options.py.profiles.desktop.enable = mkEnableOption "Desktop Config";
config = mkIf cfg.enable {
-
py.profiles = {
-
base.enable = mkDefault true;
-
cli.enable = mkDefault true;
-
gui.enable = mkDefault true;
-
development.enable = mkDefault true;
-
};
+
py.profiles.base.enable = true;
+
py.profiles.cli.enable = true;
+
py.profiles.gui.enable = true;
+
py.profiles.development.enable = true;
programs.mpv = {
enable = mkDefault true;
scripts = with pkgs.mpvScripts; [
+1 -1
modules/home/profiles/development/default.nix homeModules/profiles/development/default.nix
···
{
pkgs,
-
lib,
config,
+
lib,
...
}:
let
+3 -4
modules/home/profiles/gui/default.nix homeModules/profiles/gui/default.nix
···
{
pkgs,
lib,
-
config,
osConfig,
+
config,
...
}:
let
+
inherit (lib) mkDefault mkEnableOption;
cfg = config.py.profiles.gui;
-
inherit (lib) mkEnableOption mkIf mkDefault;
in
{
options.py.profiles.gui.enable = mkEnableOption "GUI Profile";
-
config = mkIf cfg.enable {
+
config = lib.mkIf cfg.enable {
home.sessionVariables = {
XDG_CURRENT_DESKTOP = "sway";
};
py = {
-
gui.enable = true;
programs = {
chromium.enable = mkDefault true;
firefox.enable = mkDefault true;
-13
modules/home/profiles/server/default.nix
···
-
{ lib, config, ... }:
-
let
-
cfg = config.py.profiles.server;
-
in
-
{
-
options.py.profiles.server.enable = lib.mkEnableOption "Server Profile";
-
config = lib.mkIf cfg.enable {
-
py.profiles = {
-
base.enable = lib.mkDefault true;
-
cli.enable = lib.mkDefault true;
-
};
-
};
-
}
modules/home/programs/chromium/default.nix homeModules/programs/chromium/default.nix
modules/home/programs/firefox/default.nix homeModules/programs/firefox/default.nix
modules/home/programs/fish/default.nix homeModules/programs/fish/default.nix
modules/home/programs/ghostty/default.nix homeModules/programs/ghostty/default.nix
modules/home/programs/ghostty/settings.nix homeModules/programs/ghostty/settings.nix
+3 -3
modules/home/programs/git/default.nix homeModules/programs/git/default.nix
···
extraConfig = {
branch.sort = "-committerdate";
column.ui = "auto";
-
core.editor = lib.getExe pkgs.py.nvim;
+
core.editor = lib.getExe pkgs.neovim;
"credential \"https://git.pyrox.dev\"".username = "pyrox";
credential.helper = "rbw";
diff = {
···
enable = true;
gitCredentialHelper.enable = true;
settings = {
-
editor = lib.getExe pkgs.py.nvim;
+
editor = lib.getExe pkgs.neovim;
git_protocol = "https";
-
browser = lib.mkIf config.py.gui.enable pkgs.firefox;
+
browser = lib.mkIf config.py.profiles.gui.enable pkgs.firefox;
prompt = "enabled";
};
};
modules/home/programs/gpg/default.nix homeModules/programs/gpg/default.nix
modules/home/programs/helix/default.nix homeModules/programs/helix/default.nix
modules/home/programs/helix/settings.nix homeModules/programs/helix/settings.nix
modules/home/programs/kitty/default.nix homeModules/programs/kitty/default.nix
modules/home/programs/kitty/settings.nix homeModules/programs/kitty/settings.nix
modules/home/programs/misc-programs/default.nix homeModules/programs/misc-programs/default.nix
modules/home/programs/misc-programs/direnv-stdlib.sh homeModules/programs/misc-programs/direnv-stdlib.sh
-37
modules/home/programs/neovim/default.nix
···
-
{
-
pkgs,
-
config,
-
lib,
-
...
-
}:
-
let
-
cfg = config.py.programs.neovim;
-
in
-
{
-
options.py.programs.neovim.enable = lib.mkEnableOption "Neovim Configuration";
-
-
config.programs.neovim = lib.mkIf cfg.enable {
-
enable = true;
-
package = pkgs.py.nvim;
-
viAlias = true;
-
vimAlias = true;
-
vimdiffAlias = true;
-
withRuby = false;
-
withNodeJs = false;
-
withPython3 = false;
-
extraPackages =
-
[
-
pkgs.bottom
-
pkgs.fd
-
pkgs.gcc
-
pkgs.go
-
pkgs.nodejs
-
]
-
++ lib.optionals config.py.profiles.gui.enable [
-
pkgs.ffmpegthumbnailer
-
pkgs.fontpreview
-
pkgs.poppler
-
pkgs.ueberzug
-
];
-
};
-
}
modules/home/programs/nushell/config.nu homeModules/programs/nushell/config.nu
modules/home/programs/nushell/default.nix homeModules/programs/nushell/default.nix
modules/home/programs/nushell/env.nu homeModules/programs/nushell/env.nu
modules/home/programs/onagre/default.nix homeModules/programs/onagre/default.nix
modules/home/programs/ssh/backup.pub homeModules/programs/ssh/backup.pub
modules/home/programs/ssh/default.nix homeModules/programs/ssh/default.nix
modules/home/programs/ssh/ssh-auth-signers.nix homeModules/programs/ssh/ssh-auth-signers.nix
modules/home/programs/ssh/yubikey-back.pub homeModules/programs/ssh/yubikey-back.pub
modules/home/programs/ssh/yubikey-main.pub homeModules/programs/ssh/yubikey-main.pub
modules/home/programs/ssh/yubikey-new.pub homeModules/programs/ssh/yubikey-new.pub
modules/home/programs/starship/default.nix homeModules/programs/starship/default.nix
modules/home/programs/starship/settings.nix homeModules/programs/starship/settings.nix
+1 -1
modules/home/programs/vscodium/default.nix homeModules/programs/vscodium/default.nix
···
"update.showReleaseNotes" = false;
"workbench.colorTheme" = "Catppuccin Mocha";
"workbench.iconTheme" = "catppuccin-mocha";
-
"vscode-neovim.neovimExecutablePaths.linux" = lib.getExe pkgs.py.nvim;
+
"vscode-neovim.neovimExecutablePaths.linux" = lib.getExe pkgs.neovim;
"python.formatting.provider" = "black";
};
};
modules/home/programs/wlogout/default.nix homeModules/programs/wlogout/default.nix
modules/home/programs/wlogout/style.nix homeModules/programs/wlogout/style.nix
modules/home/programs/zed-editor/default.nix homeModules/programs/zed-editor/default.nix
modules/home/programs/zed-editor/settings.nix homeModules/programs/zed-editor/settings.nix
modules/home/scripts/default.nix homeModules/scripts/default.nix
modules/home/services/gpg-agent/default.nix homeModules/services/gpg-agent/default.nix
modules/home/services/kanshi/default.nix homeModules/services/kanshi/default.nix
modules/home/services/kdeconnect/default.nix homeModules/services/kdeconnect/default.nix
modules/home/services/mako/default.nix homeModules/services/mako/default.nix
modules/home/services/swayidle/default.nix homeModules/services/swayidle/default.nix
modules/home/services/syncthing/default.nix homeModules/services/syncthing/default.nix
+6 -5
modules/home/theming/default.nix homeModules/theming/default.nix
···
}:
let
pro = config.py.profiles;
+
inherit (lib) mkDefault mkIf;
in
{
catppuccin = {
flavor = "mocha";
accent = "blue";
};
-
home.pointerCursor = lib.mkIf pro.gui.enable {
+
home.pointerCursor = mkIf pro.gui.enable {
package = pkgs.catppuccin-cursors.mochaBlue;
name = "Catppuccin-Mocha-Blue";
gtk.enable = true;
};
-
gtk = lib.mkIf pro.gui.enable {
+
gtk = mkIf pro.gui.enable {
enable = true;
-
theme = {
+
theme = mkDefault {
name = "Colloid-Dark-Compact-Catppuccin";
package = pkgs.colloid-gtk-theme.override {
tweaks = [
···
size = 14;
};
gtk3.bookmarks = [ "file:///${config.home.homeDirectory}/Downloads" ];
-
iconTheme = {
-
package = pkgs.colloid-icon-theme;
+
iconTheme = mkIf pro.gui.enable {
+
package = mkDefault pkgs.colloid-icon-theme;
name = "Colloid-Dark";
};
};
modules/home/wayland/default.nix homeModules/wayland/default.nix
+1 -1
modules/home/wayland/keybindings.nix homeModules/wayland/keybindings.nix
···
slurp-screen = "\"$(slurp -c -b '#1e1e2e80' -o -r)\" -";
slurp-box = "\"$(slurp -c '#f38ba8ff' -b '#1e1e2e80' -w 1 -d -F 'IBM Plex Mono')\" -";
satty = "satty -f -";
-
cfg = config.py.gui;
+
cfg = config.py.profiles.gui;
in
{
config.wayland.windowManager.sway.config.keybindings = lib.mkIf cfg.enable (
+1 -4
modules/home/wayland/sway.nix homeModules/wayland/sway.nix
···
let
term = config.wayland.windowManager.sway.config.terminal;
homeDir = config.home.homeDirectory;
-
cfg = config.py.gui;
+
cfg = config.py.profiles.gui;
in
{
-
options.py.gui = {
-
enable = lib.mkEnableOption "GUI Configuration";
-
};
config = lib.mkIf cfg.enable {
catppuccin = {
sway.enable = true;
+1 -1
modules/home/wayland/swaylock.nix homeModules/wayland/swaylock.nix
···
...
}:
let
-
cfg = config.py.gui;
+
cfg = config.py.profiles.gui;
in
{
catppuccin = {
modules/home/wayland/waybar-mocha.css homeModules/wayland/waybar-mocha.css
modules/home/wayland/waybar-style.css homeModules/wayland/waybar-style.css
+1 -1
modules/home/wayland/waybar.nix homeModules/wayland/waybar.nix
···
...
}:
let
-
cfg = config.py.gui;
+
cfg = config.py.profiles.gui;
in
{
config = {
modules/home/xdg/default.nix homeModules/xdg/default.nix
modules/nixos/default-config/bootloader.nix nixosModules/default-config/bootloader.nix
modules/nixos/default-config/default.nix nixosModules/default-config/default.nix
modules/nixos/default-config/networking.nix nixosModules/default-config/networking.nix
+5 -12
modules/nixos/default-config/nixConfig.nix nixosModules/default-config/nixConfig.nix
···
# Compress build logs to save space
compress-build-log = true;
# Use all available cores to build
-
cores = 0;
+
cores = lib.mkDefault 8;
experimental-features = [
# Use auto-generated uids instead of users in the nixbld group
"auto-allocate-uids"
···
"nix-command"
# Disallow URL Literals as they are deprecated
"no-url-literals"
-
# Allow Nix to call itself
-
"recursive-nix"
];
# Build from source if substitution fails
fallback = true;
···
keep-outputs = true;
# Show fewer log lines from failed builds since I get them from nh
log-lines = 10;
+
# Limit the max amount of builds
+
max-jobs = lib.mkDefault 4;
# Extra system features
system-features = [
"big-parallel"
"kvm"
"nixos-test"
-
"recursive-nix"
];
# The pubkeys of the below substituters
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
-
"crane.cachix.org-1:8Scfpmn9w+hGdXH/Q9tTLiYAE/2dnJYRJP7kl80GuRk="
-
"isabelroses.cachix.org-1:mXdV/CMcPDaiTmkQ7/4+MzChpOe6Cb97njKmBQQmLPM="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
-
"nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
-
"viperml.cachix.org-1:qZhKBMTfmcLL+OG6fj/hzsMEedgKvZVFRRAhq7j8Vh8="
+
"cache.flakehub.com-3:hJuILl5sVK4iKm86JzgdXW12Y2Hwd5G07qKtHTOcDCM="
];
# Extra substituters
trusted-substituters = [
"https://cache.nixos.org"
-
"https://crane.cachix.org"
-
"https://isabelroses.cachix.org"
"https://nix-community.cachix.org"
-
"https://nixpkgs-wayland.cachix.org"
-
"https://viperml.cachix.org"
+
"https://install.determinate.systems"
];
# These users have additional daemon rights
trusted-users = userList;
-7
modules/nixos/default-config/nixpkgsConfig.nix
···
-
{
-
nixpkgs = {
-
config = {
-
allowUnfree = true;
-
};
-
};
-
}
modules/nixos/default-config/packages.nix nixosModules/default-config/packages.nix
modules/nixos/default-config/programs/default.nix nixosModules/default-config/programs/default.nix
modules/nixos/default-config/programs/nh.nix nixosModules/default-config/programs/nh.nix
modules/nixos/default-config/programs/ssh.nix nixosModules/default-config/programs/ssh.nix
modules/nixos/default-config/root.nix nixosModules/default-config/root.nix
modules/nixos/default-config/secrets/powerdns-secrets.age nixosModules/default-config/secrets/powerdns-secrets.age
modules/nixos/default-config/secrets/secrets.nix nixosModules/default-config/secrets/secrets.nix
modules/nixos/default-config/security.nix nixosModules/default-config/security.nix
modules/nixos/default-config/services/default.nix nixosModules/default-config/services/default.nix
modules/nixos/default-config/services/ntp.nix nixosModules/default-config/services/ntp.nix
modules/nixos/default-config/services/tailscale.nix nixosModules/default-config/services/tailscale.nix
modules/nixos/default-config/ssh.nix nixosModules/default-config/ssh.nix
modules/nixos/default-config/users.nix nixosModules/default-config/users.nix
modules/nixos/default-users/backup.pub nixosModules/default-users/backup.pub
modules/nixos/default-users/default.nix nixosModules/default-users/default.nix
modules/nixos/default-users/yubikey-back.pub nixosModules/default-users/yubikey-back.pub
modules/nixos/default-users/yubikey-main.pub nixosModules/default-users/yubikey-main.pub
modules/nixos/default-users/yubikey-new.pub nixosModules/default-users/yubikey-new.pub
+2 -2
modules/nixos/profiles/default.nix nixosModules/profiles/default.nix
···
base.enable = lib.mkEnableOption "Base Profile";
cli.enable = lib.mkEnableOption "CLI Profile";
development.enable = lib.mkEnableOption "Development Profile";
-
graphical.enable = lib.mkEnableOption "Graphical Profile";
+
gui.enable = lib.mkEnableOption "GUI Profile";
server.enable = lib.mkEnableOption "Server Profile";
};
config = {
py.profiles = {
base.enable = lib.mkDefault true;
cli.enable = lib.mkDefault true;
-
development.enable = lib.mkDefault cfg.graphical.enable;
+
development.enable = lib.mkDefault cfg.gui.enable;
};
};
}
modules/nixos/programs/chromium/default.nix nixosModules/programs/chromium/default.nix
modules/nixos/programs/chromium/extraOpts.nix nixosModules/programs/chromium/extraOpts.nix
modules/nixos/programs/firefox/default.nix nixosModules/programs/firefox/default.nix
modules/nixos/programs/firefox/extensions.nix nixosModules/programs/firefox/extensions.nix
modules/nixos/programs/firefox/extraPrefs.nix nixosModules/programs/firefox/extraPrefs.nix
modules/nixos/programs/firefox/policies.nix nixosModules/programs/firefox/policies.nix
modules/nixos/programs/misc/default.nix nixosModules/programs/misc/default.nix
-1
modules/nixos/programs/neovim/default.nix nixosModules/programs/neovim/default.nix
···
config.programs.neovim = lib.mkIf cfg.enable {
enable = true;
-
package = pkgs.py.nvim;
defaultEditor = true;
viAlias = true;
vimAlias = true;
modules/nixos/services/buildbot/default.nix nixosModules/services/buildbot/default.nix
modules/nixos/services/forgejo-runner/default.nix nixosModules/services/forgejo-runner/default.nix
+4 -2
modules/nixos/services/scrutiny/default.nix nixosModules/services/scrutiny/default.nix
···
{
config,
lib,
+
self,
...
}:
let
cfg = config.py.services.scrutiny.collector;
-
apiUrl = "https://marvin.${lib.py.data.tsNet}:${toString lib.py.data.services.scrutiny.port}";
+
apiUrl = "https://marvin.${self.lib.data.tsNet}:${toString self.lib.data.services.scrutiny.port}";
in
{
options.py.services.scrutiny = {
···
settings = {
host.id = config.networking.hostName;
api.endpoint = apiUrl;
-
} // cfg.extraSettings;
+
}
+
// cfg.extraSettings;
};
}
+15
nixosModules/default-config/nixpkgsConfig.nix
···
+
{
+
inputs,
+
...
+
}:
+
{
+
nixpkgs = {
+
overlays = [
+
inputs.self.overlays.openssh-fixperms
+
inputs.golink.overlays.default
+
];
+
config = {
+
allowUnfree = true;
+
};
+
};
+
}
+27
nixosModules/default.nix
···
+
{
+
...
+
}:
+
{
+
flake.nixosModules = {
+
# Top-level
+
defaultConfig = import ./default-config;
+
defaultUsers = import ./default-users;
+
profiles = import ./profiles;
+
+
# Programs
+
chromium = import ./programs/chromium;
+
firefox = import ./programs/firefox;
+
miscPrograms = import ./programs/misc;
+
neovim = import ./programs/neovim;
+
+
# Services
+
buildbot = import ./services/buildbot;
+
forgejo-runner = import ./services/forgejo-runner;
+
scrutiny = import ./services/scrutiny;
+
+
hm-pyrox = import ./homes/pyrox;
+
hm-thehedgehog = import ./homes/thehedgehog;
+
hm-pyrox-zaphod = import ./homes/pyrox-zaphod;
+
hm-thehedgehog-zaphod = import ./homes/thehedgehog-zaphod;
+
};
+
}
+123
nixosModules/homes/.default.nix.bak
···
+
{
+
lib,
+
withSystem,
+
inputs,
+
...
+
}:
+
let
+
mkHM = withSystem "x86_64-linux" (
+
{ pkgs, system, ... }:
+
extra:
+
inputs.home-manager.lib.homeManagerConfiguration (
+
lib.mergeAttrs {
+
inherit pkgs;
+
extraSpecialArgs = { inherit inputs system; };
+
} extra
+
)
+
);
+
defaultModules = [
+
inputs.ctp.homeModules.default
+
inputs.self.homeModules.theming
+
inputs.self.homeModules.programs
+
inputs.self.homeModules.services
+
];
+
+
in
+
{
+
flake.homeConfigurations = {
+
marvin-pyrox = mkHM {
+
modules = [
+
inputs.self.homeModules.profiles
+
./pyrox
+
{
+
py.profiles.server.enable = true;
+
}
+
]
+
++ defaultModules;
+
};
+
marvin-thehedgehog = mkHM {
+
modules = [
+
inputs.self.homeModules.profiles
+
./thehedgehog
+
{
+
py.profiles.server.enable = true;
+
}
+
]
+
++ defaultModules;
+
};
+
prefect-pyrox = mkHM {
+
modules = [
+
inputs.self.homeModules.profiles
+
./pyrox
+
{
+
py.profiles.server.enable = true;
+
}
+
]
+
++ defaultModules;
+
};
+
prefect-thehedgehog = mkHM {
+
modules = [
+
inputs.self.homeModules.profiles
+
./thehedgehog
+
{
+
py.profiles.server.enable = true;
+
}
+
]
+
++ defaultModules;
+
};
+
thought-pyrox = mkHM {
+
modules = [
+
inputs.self.homeModules.profiles
+
./pyrox
+
{
+
py.profiles.server.enable = true;
+
}
+
]
+
++ defaultModules;
+
};
+
thought-thehedgehog = mkHM {
+
modules = [
+
inputs.self.homeModules.profiles
+
./thehedgehog
+
{
+
py.profiles.server.enable = true;
+
}
+
]
+
++ defaultModules;
+
};
+
zaphod-pyrox = withSystem "x86_64-linux" (
+
{ pkgs, ... }:
+
inputs.home-manager.lib.homeManagerConfiguration {
+
inherit pkgs;
+
modules = [
+
inputs.self.homeModules.profiles
+
{
+
imports = [
+
./pyrox
+
"${inputs.self}/homeConfigurations/pyrox@zaphod"
+
];
+
py.profiles.desktop.enable = true;
+
}
+
]
+
++ defaultModules;
+
}
+
);
+
zaphod-thehedgehog = withSystem "x86_64-linux" (
+
{ pkgs, ... }:
+
inputs.home-manager.lib.homeManagerConfiguration {
+
inherit pkgs;
+
modules = [
+
inputs.self.homeModules.profiles
+
{
+
imports = [
+
./thehedgehog
+
"${inputs.self}/homeConfigurations/thehedgehog@zaphod"
+
];
+
py.profiles.desktop.enable = true;
+
}
+
]
+
++ defaultModules;
+
}
+
);
+
};
+
}
+52
nixosModules/homes/pyrox-zaphod/default.nix
···
+
{
+
pkgs,
+
...
+
}:
+
{
+
home-manager.users.pyrox = {
+
imports = [
+
./files/pamKeys.nix
+
./files/distrobox-config.nix
+
];
+
home.packages = [
+
pkgs.mindustry
+
];
+
py.profiles.desktop.enable = true;
+
py.services.kanshi.settings = [
+
{
+
profile = {
+
name = "laptop-only";
+
outputs = [
+
{
+
criteria = "eDP-1";
+
status = "enable";
+
scale = 1.2;
+
position = "0,0";
+
adaptiveSync = true;
+
}
+
];
+
};
+
}
+
{
+
profile = {
+
name = "office";
+
outputs = [
+
{
+
criteria = "eDP-1";
+
status = "enable";
+
scale = 1.2;
+
position = "0,0";
+
adaptiveSync = true;
+
}
+
{
+
criteria = "Acer Technologies SA241Y 0x1497CF17";
+
status = "enable";
+
scale = 1.0;
+
position = "2160,0";
+
}
+
];
+
};
+
}
+
];
+
};
+
}
+18
nixosModules/homes/pyrox/default.nix
···
+
{
+
lib,
+
inputs,
+
...
+
}:
+
{
+
home-manager.users.pyrox = {
+
imports = [
+
inputs.self.homeModules.allModules
+
{
+
home.username = "pyrox";
+
home.stateVersion = "25.11";
+
py.profiles.server.enable = lib.mkDefault true;
+
py.profiles.desktop.enable = lib.mkDefault false;
+
}
+
];
+
};
+
}
+65
nixosModules/homes/thehedgehog-zaphod/default.nix
···
+
{
+
pkgs,
+
config,
+
...
+
}:
+
let
+
hmConfig = config.home-manager.users.thehedgehog;
+
in
+
{
+
home-manager.users.thehedgehog = {
+
home.packages = [
+
pkgs.mindustry
+
pkgs.signal-desktop
+
];
+
services.wpaperd = {
+
enable = true;
+
settings = {
+
default = {
+
path = "${hmConfig.home.homeDirectory}/bgs";
+
duration = "3h";
+
sorting = "random";
+
queue-size = 50;
+
recursive = false;
+
};
+
};
+
};
+
py.profiles.desktop.enable = true;
+
py.services.kanshi.settings = [
+
{
+
profile = {
+
name = "laptop-only";
+
outputs = [
+
{
+
criteria = "eDP-1";
+
status = "enable";
+
scale = 1.2;
+
position = "0,0";
+
adaptiveSync = true;
+
}
+
];
+
};
+
}
+
{
+
profile = {
+
name = "office";
+
outputs = [
+
{
+
criteria = "eDP-1";
+
status = "enable";
+
scale = 1.2;
+
position = "0,0";
+
adaptiveSync = true;
+
}
+
{
+
criteria = "Acer Technologies SA241Y 0x1497CF17";
+
status = "enable";
+
scale = 1.0;
+
position = "2160,0";
+
}
+
];
+
};
+
}
+
];
+
};
+
}
+18
nixosModules/homes/thehedgehog/default.nix
···
+
{
+
lib,
+
inputs,
+
...
+
}:
+
{
+
home-manager.users.thehedgehog = {
+
imports = [
+
inputs.self.homeModules.allModules
+
{
+
home.username = "thehedgehog";
+
home.stateVersion = "25.11";
+
py.profiles.server.enable = lib.mkDefault true;
+
py.profiles.desktop.enable = lib.mkDefault false;
+
}
+
];
+
};
+
}
+6
overlays/default.nix
···
+
{
+
flake.overlays = {
+
cinny = import ./cinny;
+
openssh-fixperms = import ./openssh-fixperms;
+
};
+
}
+1 -1
overlays/openssh-fixperms/default.nix
···
-
_: final: prev: {
+
final: prev: {
openssh-patched = prev.openssh.overrideAttrs (old: {
patches = (old.patches or [ ]) ++ [ ./permfix.patch ];
doCheck = false;
+31
packages/default.nix
···
+
{ ... }:
+
{
+
+
perSystem =
+
{
+
pkgs,
+
lib,
+
...
+
}:
+
let
+
packages = lib.makeScope pkgs.newScope (_: {
+
anubis-files = pkgs.callPackage ./anubis-files { };
+
doc2dash = pkgs.callPackage ./doc2dash { };
+
jellyfin-exporter = pkgs.callPackage ./jellyfin-exporter { };
+
pingvin-share-config = pkgs.callPackage ./pingvin-share-config { };
+
+
});
+
in
+
{
+
legacyPackages = packages;
+
packages = lib.filterAttrs (
+
_: pkg:
+
let
+
isDerivation = lib.isDerivation pkg;
+
availableOnHost = lib.meta.availableOn pkgs.stdenv.hostPlatform pkg;
+
isBroken = pkg.meta.broken or false;
+
in
+
isDerivation && !isBroken && availableOnHost
+
) packages;
+
};
+
}
+3 -3
packages/jellyfin-exporter/default.nix
···
}:
buildGoModule (finalAttrs: {
pname = "jellyfin-exporter";
-
version = "1.3.5";
+
version = "1.3.8";
src = fetchFromGitHub {
owner = "rebelcore";
repo = "jellyfin_exporter";
tag = "v${finalAttrs.version}";
-
hash = "sha256-TKKP0zBdQiAgWQJ8BKcPOR6I+ZKKwjDBq0r36E0BAVs=";
+
hash = "sha256-7fIrjcy6y/Ayj43WeuPNCx3uVJyl5Wf6bWs5ta2PpWc=";
};
# We need to patch the tests since we don't move the binary to `$GOPATH/bin`, but to `$out/bin` instead.
···
--replace-fail "GOPATH" "out"
'';
-
vendorHash = "sha256-/VCE2C8EismFg1puajWmBK8qf3hLYXzywA1R/qqAMr0=";
+
vendorHash = "sha256-JSOKDbefQyDLNy2y1oW7HUplQw8uhhOGZ+ueWyUYYQ0=";
meta = {
changelog = "https://github.com/rebelcore/jellyfin_exporter/blob/v${finalAttrs.version}/CHANGELOG.md";
shells/default/default.nix devShells/default/default.nix
systems/x86_64-linux/marvin/bootloader.nix hosts/marvin/bootloader.nix
+3 -3
systems/x86_64-linux/marvin/default.nix hosts/marvin/default.nix
···
-
{ system, ... }:
+
{ ... }:
{
imports = [
# Machine-specific configurations.
···
./services/git.nix
./services/golink.nix
./services/grafana.nix
-
./services/iceshrimp.nix
+
# ./services/iceshrimp.nix
./services/jellyfin.nix
./services/matrix.nix
./services/miniflux.nix
···
./services/zfs.nix
];
nix.settings.max-jobs = 12;
-
nixpkgs.hostPlatform.system = system;
networking = {
networkmanager = {
enable = true;
···
users.groups.misc.gid = 1000;
time.timeZone = "America/New_York";
py = {
+
profiles.server.enable = true;
users.default.enable = true;
programs = {
fish.enable = true;
systems/x86_64-linux/marvin/firewall.nix hosts/marvin/firewall.nix
systems/x86_64-linux/marvin/hardware.nix hosts/marvin/hardware.nix
systems/x86_64-linux/marvin/networking.nix hosts/marvin/networking.nix
systems/x86_64-linux/marvin/services/anubis.nix hosts/marvin/services/anubis.nix
+2 -3
systems/x86_64-linux/marvin/services/authentik.nix hosts/marvin/services/authentik.nix
···
{
config,
-
lib,
-
pkgs,
+
self,
...
}:
let
-
d = lib.py.data.services.authentik;
+
d = self.lib.data.services.authentik;
in
{
virtualisation.oci-containers.containers =
systems/x86_64-linux/marvin/services/avahi.nix hosts/marvin/services/avahi.nix
systems/x86_64-linux/marvin/services/bookstack.nix hosts/marvin/services/bookstack.nix
systems/x86_64-linux/marvin/services/bots.nix hosts/marvin/services/bots.nix
+3 -3
systems/x86_64-linux/marvin/services/buildbot.nix hosts/marvin/services/buildbot.nix
···
-
{ config, lib, ... }:
+
{ config, self, ... }:
let
as = config.age.secrets;
-
d = lib.py.data.services.buildbot;
-
g = lib.py.data.services.git;
+
d = self.lib.data.services.buildbot;
+
g = self.lib.data.services.git;
bbSecret = {
owner = "buildbot";
group = "buildbot";
+2 -2
systems/x86_64-linux/marvin/services/deemix.nix hosts/marvin/services/deemix.nix
···
-
{ lib, ... }:
+
{ self, ... }:
let
-
d = lib.py.data.services.deemix;
+
d = self.lib.data.services.deemix;
in
{
virtualisation.oci-containers.containers.deemix = {
systems/x86_64-linux/marvin/services/gdq-cals.nix hosts/marvin/services/gdq-cals.nix
+4 -2
systems/x86_64-linux/marvin/services/git.nix hosts/marvin/services/git.nix
···
config,
lib,
pkgs,
+
self',
+
self,
...
}:
let
···
group = "forgejo";
};
-
d = lib.py.data.services.git;
+
d = self.lib.data.services.git;
in
{
catppuccin.forgejo.enable = true;
···
services.anubis.instances.forgejo = lib.mkIf config.services.forgejo.enable {
settings = {
BIND = ":${toString d.anubis}";
-
POLICY_FNAME = "${pkgs.py.anubis-files}/policies/forgejo.yaml";
+
POLICY_FNAME = "${self'.packages.anubis-files}/policies/forgejo.yaml";
TARGET = "http://localhost:${toString d.port}";
};
};
systems/x86_64-linux/marvin/services/golink.nix hosts/marvin/services/golink.nix
+5 -5
systems/x86_64-linux/marvin/services/grafana.nix hosts/marvin/services/grafana.nix
···
{
config,
-
lib,
-
pkgs,
+
self',
+
self,
...
}:
let
-
d = lib.py.data.services.grafana;
-
a = lib.py.data.services.authentik;
+
d = self.lib.data.services.grafana;
+
a = self.lib.data.services.authentik;
in
{
services.grafana = {
···
services.anubis.instances.grafana = {
settings = {
BIND = ":${toString d.anubis}";
-
POLICY_FNAME = "${pkgs.py.anubis-files}/policies/grafana.yaml";
+
POLICY_FNAME = "${self'.packages.anubis-files}/policies/grafana.yaml";
TARGET = "http://localhost:${toString d.port}";
};
};
+2 -1
systems/x86_64-linux/marvin/services/iceshrimp.nix hosts/marvin/services/iceshrimp.nix
···
inputs,
pkgs,
lib,
+
self,
...
}:
let
-
d = lib.py.data.services.iceshrimp;
+
d = self.lib.data.services.iceshrimp;
package = inputs.iceshrimp.packages.x86_64-linux.iceshrimp-pre.overrideAttrs rec {
version = "2023.12.8-pyrox1";
+2 -2
systems/x86_64-linux/marvin/services/jellyfin.nix hosts/marvin/services/jellyfin.nix
···
{
-
pkgs,
lib,
config,
+
self',
...
}:
let
···
];
description = "Jellyfin Metrics Exporter for Prometheus";
serviceConfig = {
-
ExecStart = "${lib.getExe pkgs.py.jellyfin-exporter} @${config.age.secrets.jellyfin-exporter-config.path}";
+
ExecStart = "${lib.getExe self'.packages.jellyfin-exporter} @${config.age.secrets.jellyfin-exporter-config.path}";
ReadOnlyPaths = [ config.age.secrets.jellyfin-exporter-config.path ];
Restart = "always";
DynamicUser = true;
+2 -2
systems/x86_64-linux/marvin/services/matrix.nix hosts/marvin/services/matrix.nix
···
{
-
lib,
+
self,
...
}:
let
-
d = lib.py.data.services.matrix-server;
+
d = self.lib.data.services.matrix-server;
in
{
services.matrix-conduit = {
+4 -4
systems/x86_64-linux/marvin/services/miniflux.nix hosts/marvin/services/miniflux.nix
···
{
config,
-
lib,
-
pkgs,
+
self',
+
self,
...
}:
let
-
d = lib.py.data.services.miniflux;
+
d = self.lib.data.services.miniflux;
in
{
services.miniflux = {
···
services.anubis.instances.miniflux = {
settings = {
BIND = ":${toString d.anubis}";
-
POLICY_FNAME = "${pkgs.py.anubis-files}/policies/miniflux.yaml";
+
POLICY_FNAME = "${self'.packages.anubis-files}/policies/miniflux.yaml";
TARGET = "http://localhost:${toString d.port}";
};
};
systems/x86_64-linux/marvin/services/minio.nix hosts/marvin/services/minio.nix
+5 -3
systems/x86_64-linux/marvin/services/nextcloud/default.nix hosts/marvin/services/nextcloud/default.nix
···
config,
pkgs,
lib,
+
self',
+
self,
...
}:
let
-
d = lib.py.data.services.nextcloud;
-
i = lib.py.data.services.nextcloud-imaginary;
+
d = self.lib.data.services.nextcloud;
+
i = self.lib.data.services.nextcloud-imaginary;
in
{
imports = [
···
services.anubis.instances.nextcloud = {
settings = {
BIND = ":${toString d.anubis}";
-
POLICY_FNAME = "${pkgs.py.anubis-files}/policies/nextcloud.yaml";
+
POLICY_FNAME = "${self'.packages.anubis-files}/policies/nextcloud.yaml";
TARGET = "http://localhost:${toString d.port}";
};
};
+2 -2
systems/x86_64-linux/marvin/services/nextcloud/imaginary.nix hosts/marvin/services/nextcloud/imaginary.nix
···
-
{ lib, ... }:
+
{ self, ... }:
let
-
d = lib.py.data.services.nextcloud-imaginary;
+
d = self.lib.data.services.nextcloud-imaginary;
in
{
services.imaginary = {
systems/x86_64-linux/marvin/services/nextcloud/nextcloud-admin-pw.age hosts/marvin/services/nextcloud/nextcloud-admin-pw.age
+3 -3
systems/x86_64-linux/marvin/services/nextcloud/office.nix hosts/marvin/services/nextcloud/office.nix
···
-
{ lib, pkgs, ... }:
+
{ self', self, ... }:
let
-
d = lib.py.data.services.nextcloud-office;
+
d = self.lib.data.services.nextcloud-office;
in
{
services.collabora-online = {
···
services.anubis.instances.nextcloud-office = {
settings = {
BIND = ":${toString d.anubis}";
-
POLICY_FNAME = "${pkgs.py.anubis-files}/policies/nextcloud-office.yaml";
+
POLICY_FNAME = "${self'.packages.anubis-files}/policies/nextcloud-office.yaml";
TARGET = "http://localhost:${toString d.port}";
};
};
+2 -2
systems/x86_64-linux/marvin/services/nginx.nix hosts/marvin/services/nginx.nix
···
-
{ lib, ... }:
+
{ self, ... }:
let
-
n = lib.py.data.services.nextcloud;
+
n = self.lib.data.services.nextcloud;
in
{
services.nginx = {
+7 -2
systems/x86_64-linux/marvin/services/pinchflat.nix hosts/marvin/services/pinchflat.nix
···
-
{ config, lib, ... }:
+
{
+
config,
+
lib,
+
self,
+
...
+
}:
let
cfg = config.services.pinchflat;
age = config.age.secrets;
-
d = lib.py.data.services.pinchflat;
+
d = self.lib.data.services.pinchflat;
in
{
services.pinchflat = {
+5 -4
systems/x86_64-linux/marvin/services/pingvin-share.nix hosts/marvin/services/pingvin-share.nix
···
{
-
lib,
config,
pkgs,
+
self',
+
self,
...
}:
let
-
d = lib.py.data.services.pingvin-share;
+
d = self.lib.data.services.pingvin-share;
cfg = config.services.pingvin-share;
configFormat = pkgs.formats.yaml { };
configFile = configFormat.generate "config.yaml" {
···
pingvin-share-be = {
settings = {
BIND = ":${toString d.be-anubis}";
-
POLICY_FNAME = "${pkgs.py.anubis-files}/policies/pingvin-share.yaml";
+
POLICY_FNAME = "${self'.packages.anubis-files}/policies/pingvin-share.yaml";
TARGET = "http://localhost:${toString d.be-port}";
};
};
pingvin-share-fe = {
settings = {
BIND = ":${toString d.anubis}";
-
POLICY_FNAME = "${pkgs.py.anubis-files}/policies/pingvin-share.yaml";
+
POLICY_FNAME = "${self'.packages.anubis-files}/policies/pingvin-share.yaml";
TARGET = "http://localhost:${toString d.port}";
};
};
+4 -4
systems/x86_64-linux/marvin/services/planka.nix hosts/marvin/services/planka.nix
···
{
config,
-
lib,
-
pkgs,
+
self',
+
self,
...
}:
let
dataDir = "/var/lib/planka";
-
d = lib.py.data.services.planka;
+
d = self.lib.data.services.planka;
in
{
virtualisation.oci-containers.containers = {
···
settings = {
COOKIE_DOMAIN = ".cs2a.club";
BIND = ":${toString d.anubis}";
-
POLICY_FNAME = "${pkgs.py.anubis-files}/policies/planka.yaml";
+
POLICY_FNAME = "${self'.packages.anubis-files}/policies/planka.yaml";
TARGET = "http://localhost:${toString d.port}";
};
};
+4 -4
systems/x86_64-linux/marvin/services/pocket-id.nix hosts/marvin/services/pocket-id.nix
···
{
config,
-
lib,
-
pkgs,
+
self',
+
self,
...
}:
let
-
d = lib.py.data.services.pocket-id;
+
d = self.lib.data.services.pocket-id;
in
{
services.pocket-id = {
···
pocket-id = {
settings = {
BIND = ":${toString d.anubis}";
-
POLICY_FNAME = "${pkgs.py.anubis-files}/policies/pocket-id.yaml";
+
POLICY_FNAME = "${self'.packages.anubis-files}/policies/pocket-id.yaml";
TARGET = "http://localhost:${toString d.port}";
};
};
systems/x86_64-linux/marvin/services/podman.nix hosts/marvin/services/podman.nix
systems/x86_64-linux/marvin/services/postgres.nix hosts/marvin/services/postgres.nix
systems/x86_64-linux/marvin/services/prometheus.nix hosts/marvin/services/prometheus.nix
systems/x86_64-linux/marvin/services/prosody.nix hosts/marvin/services/prosody.nix
+2 -2
systems/x86_64-linux/marvin/services/redlib.nix hosts/marvin/services/redlib.nix
···
-
{ pkgs, lib, ... }:
+
{ pkgs, self, ... }:
let
-
d = lib.py.data.services.redlib;
+
d = self.lib.data.services.redlib;
in
{
services.libreddit = {
+2 -2
systems/x86_64-linux/marvin/services/scrutiny.nix hosts/marvin/services/scrutiny.nix
···
-
{ config, lib, ... }:
+
{ self, ... }:
let
-
d = lib.py.data.services.scrutiny;
+
d = self.lib.data.services.scrutiny;
in
{
services.scrutiny = {
systems/x86_64-linux/marvin/services/secrets/anubis-key.age hosts/marvin/services/secrets/anubis-key.age
systems/x86_64-linux/marvin/services/secrets/authentik-env.age hosts/marvin/services/secrets/authentik-env.age
systems/x86_64-linux/marvin/services/secrets/buildbot/gitea-token.age hosts/marvin/services/secrets/buildbot/gitea-token.age
systems/x86_64-linux/marvin/services/secrets/buildbot/oauth-secret.age hosts/marvin/services/secrets/buildbot/oauth-secret.age
systems/x86_64-linux/marvin/services/secrets/buildbot/worker-password.age hosts/marvin/services/secrets/buildbot/worker-password.age
systems/x86_64-linux/marvin/services/secrets/buildbot/workers.age hosts/marvin/services/secrets/buildbot/workers.age
systems/x86_64-linux/marvin/services/secrets/forgejo/aux-docs-runner-token.age hosts/marvin/services/secrets/forgejo/aux-docs-runner-token.age
systems/x86_64-linux/marvin/services/secrets/forgejo/db-pw.age hosts/marvin/services/secrets/forgejo/db-pw.age
systems/x86_64-linux/marvin/services/secrets/forgejo/default-runner-token.age hosts/marvin/services/secrets/forgejo/default-runner-token.age
systems/x86_64-linux/marvin/services/secrets/forgejo/gitgay-runner-token.age hosts/marvin/services/secrets/forgejo/gitgay-runner-token.age
systems/x86_64-linux/marvin/services/secrets/forgejo/internal-token.age hosts/marvin/services/secrets/forgejo/internal-token.age
systems/x86_64-linux/marvin/services/secrets/forgejo/lfs-jwt-secret.age hosts/marvin/services/secrets/forgejo/lfs-jwt-secret.age
systems/x86_64-linux/marvin/services/secrets/forgejo/mail-pw.age hosts/marvin/services/secrets/forgejo/mail-pw.age
systems/x86_64-linux/marvin/services/secrets/forgejo/oauth2-jwt-secret.age hosts/marvin/services/secrets/forgejo/oauth2-jwt-secret.age
systems/x86_64-linux/marvin/services/secrets/forgejo/secret-key.age hosts/marvin/services/secrets/forgejo/secret-key.age
systems/x86_64-linux/marvin/services/secrets/grafana-admin-password.age hosts/marvin/services/secrets/grafana-admin-password.age
systems/x86_64-linux/marvin/services/secrets/grafana-smtp-password.age hosts/marvin/services/secrets/grafana-smtp-password.age
systems/x86_64-linux/marvin/services/secrets/iceshrimp-db-password.age hosts/marvin/services/secrets/iceshrimp-db-password.age
systems/x86_64-linux/marvin/services/secrets/iceshrimp-secret-config.age hosts/marvin/services/secrets/iceshrimp-secret-config.age
systems/x86_64-linux/marvin/services/secrets/jellyfin-exporter-config.age hosts/marvin/services/secrets/jellyfin-exporter-config.age
systems/x86_64-linux/marvin/services/secrets/miniflux-admin.age hosts/marvin/services/secrets/miniflux-admin.age
systems/x86_64-linux/marvin/services/secrets/minio-root.age hosts/marvin/services/secrets/minio-root.age
systems/x86_64-linux/marvin/services/secrets/nix-serve-priv.age hosts/marvin/services/secrets/nix-serve-priv.age
systems/x86_64-linux/marvin/services/secrets/pinchflat-secrets.age hosts/marvin/services/secrets/pinchflat-secrets.age
systems/x86_64-linux/marvin/services/secrets/pingvin-secrets.age hosts/marvin/services/secrets/pingvin-secrets.age
systems/x86_64-linux/marvin/services/secrets/planka-env.age hosts/marvin/services/secrets/planka-env.age
systems/x86_64-linux/marvin/services/secrets/pocket-id-secrets.age hosts/marvin/services/secrets/pocket-id-secrets.age
systems/x86_64-linux/marvin/services/secrets/secrets.nix hosts/marvin/services/secrets/secrets.nix
systems/x86_64-linux/marvin/services/secrets/thehedgehog-key.age hosts/marvin/services/secrets/thehedgehog-key.age
systems/x86_64-linux/marvin/services/secrets/thehedgehog-pem.age hosts/marvin/services/secrets/thehedgehog-pem.age
systems/x86_64-linux/marvin/services/secrets/vaultwarden-pgpass.age hosts/marvin/services/secrets/vaultwarden-pgpass.age
systems/x86_64-linux/marvin/services/secrets/vaultwarden-vars.age hosts/marvin/services/secrets/vaultwarden-vars.age
systems/x86_64-linux/marvin/services/secrets/webmentiond-env.age hosts/marvin/services/secrets/webmentiond-env.age
systems/x86_64-linux/marvin/services/syncthing.nix hosts/marvin/services/syncthing.nix
systems/x86_64-linux/marvin/services/tailscale.nix hosts/marvin/services/tailscale.nix
+3 -2
systems/x86_64-linux/marvin/services/tangled.nix hosts/marvin/services/tangled.nix
···
{
config,
lib,
+
self,
...
}:
let
cfg = config.services.tangled-knot;
-
dk = lib.py.data.services.tangled-knot;
-
ds = lib.py.data.services.tangled-spindle;
+
dk = self.lib.data.services.tangled-knot;
+
ds = self.lib.data.services.tangled-spindle;
in
{
services = {
+4 -3
systems/x86_64-linux/marvin/services/vaultwarden.nix hosts/marvin/services/vaultwarden.nix
···
{
pkgs,
config,
-
lib,
+
self,
+
self',
...
}:
let
-
d = lib.py.data.services.vaultwarden;
+
d = self.lib.data.services.vaultwarden;
vaultwardenSecret = {
owner = "vaultwarden";
···
services.anubis.instances.vaultwarden = {
settings = {
BIND = ":${toString d.anubis}";
-
POLICY_FNAME = "${pkgs.py.anubis-files}/policies/vaultwarden.yaml";
+
POLICY_FNAME = "${self'.packages.anubis-files}/policies/vaultwarden.yaml";
TARGET = "http://localhost:${toString d.port}";
};
};
+2 -2
systems/x86_64-linux/marvin/services/webmentiond.nix hosts/marvin/services/webmentiond.nix
···
-
{ config, lib, ... }:
+
{ config, self, ... }:
let
-
d = lib.py.data.services.webmentiond;
+
d = self.lib.data.services.webmentiond;
p = toString d.port;
in
{
systems/x86_64-linux/marvin/services/zfs.nix hosts/marvin/services/zfs.nix
systems/x86_64-linux/prefect/bootloader.nix hosts/prefect/bootloader.nix
+4 -1
systems/x86_64-linux/prefect/default.nix hosts/prefect/default.nix
···
./services/tailscale.nix
# ./services/zerotier.nix
];
-
nixpkgs.hostPlatform.system = system;
fileSystems = {
"/" = {
fsType = "ext4";
···
};
};
+
nix.settings.max-jobs = 2;
+
nix.settings.cores = 2;
+
programs.fish.enable = true;
programs.fish.interactiveShellInit = ''
${pkgs.direnv}/bin/direnv hook fish | source
'';
py = {
+
profiles.server.enable = true;
users.default.enable = true;
programs = {
fish.enable = true;
systems/x86_64-linux/prefect/dn42/bgp.nix hosts/prefect/dn42/bgp.nix
systems/x86_64-linux/prefect/dn42/bird.conf hosts/prefect/dn42/bird.conf
systems/x86_64-linux/prefect/dn42/default.nix hosts/prefect/dn42/default.nix
systems/x86_64-linux/prefect/dn42/services.nix hosts/prefect/dn42/services.nix
systems/x86_64-linux/prefect/dn42/tunnels.nix hosts/prefect/dn42/tunnels.nix
systems/x86_64-linux/prefect/dn42/wireguard.nix hosts/prefect/dn42/wireguard.nix
systems/x86_64-linux/prefect/firewall.nix hosts/prefect/firewall.nix
systems/x86_64-linux/prefect/hardware.nix hosts/prefect/hardware.nix
systems/x86_64-linux/prefect/networking.nix hosts/prefect/networking.nix
systems/x86_64-linux/prefect/packages.nix hosts/prefect/packages.nix
systems/x86_64-linux/prefect/secrets/acme-creds.age hosts/prefect/secrets/acme-creds.age
systems/x86_64-linux/prefect/secrets/dn42-peerfinder-uuid.age hosts/prefect/secrets/dn42-peerfinder-uuid.age
systems/x86_64-linux/prefect/secrets/dn42-privkey.age hosts/prefect/secrets/dn42-privkey.age
systems/x86_64-linux/prefect/secrets/headscale-oidc-secret.age hosts/prefect/secrets/headscale-oidc-secret.age
systems/x86_64-linux/prefect/secrets/secrets.nix hosts/prefect/secrets/secrets.nix
systems/x86_64-linux/prefect/secrets/stalwart-desec-token.age hosts/prefect/secrets/stalwart-desec-token.age
systems/x86_64-linux/prefect/secrets/stalwart-fallback-admin-pw.age hosts/prefect/secrets/stalwart-fallback-admin-pw.age
systems/x86_64-linux/prefect/secrets/stalwart-secret-ed25519.age hosts/prefect/secrets/stalwart-secret-ed25519.age
systems/x86_64-linux/prefect/secrets/stalwart-secret-rsa.age hosts/prefect/secrets/stalwart-secret-rsa.age
systems/x86_64-linux/prefect/secrets/wireguard-priv-key.age hosts/prefect/secrets/wireguard-priv-key.age
systems/x86_64-linux/prefect/services/acme.nix hosts/prefect/services/acme.nix
systems/x86_64-linux/prefect/services/blog-update.nix hosts/prefect/services/blog-update.nix
systems/x86_64-linux/prefect/services/blog-update.sh hosts/prefect/services/blog-update.sh
+7 -7
systems/x86_64-linux/prefect/services/caddy.nix hosts/prefect/services/caddy.nix
···
-
{ pkgs, lib, ... }:
+
{ pkgs, self, ... }:
let
-
pns = lib.py.data.services;
-
mail = lib.py.data.mail;
-
marvin = "http://${lib.py.data.hosts.marvin.ts.ip4}";
-
marvinIP = lib.py.data.hosts.marvin.ts.ip4;
-
tsNet = lib.py.data.tsNet;
+
pns = self.lib.data.services;
+
mail = self.lib.data.mail;
+
marvin = "http://${self.lib.data.hosts.marvin.ts.ip4}";
+
marvinIP = self.lib.data.hosts.marvin.ts.ip4;
+
tsNet = self.lib.data.tsNet;
in
{
services.caddy = {
···
"github.com/mholt/caddy-l4@v0.0.0-20250902102621-4a517a98d7fa"
"github.com/mohammed90/caddy-git-fs@v0.0.0-20240805164056-529acecd1830"
];
-
hash = "sha256-1R6t8JgBoF/H1m0ZNrxFyx2yRfNkgucoPf321aQnvM8=";
+
hash = "sha256-mmiBqKgzWm6HehThvd3zMuF7Vi0NiT1zcrJMw6K305I=";
};
email = "pyrox@pyrox.dev";
virtualHosts = {
systems/x86_64-linux/prefect/services/dn42-peerfinder.nix hosts/prefect/services/dn42-peerfinder.nix
systems/x86_64-linux/prefect/services/fail2ban.nix hosts/prefect/services/fail2ban.nix
systems/x86_64-linux/prefect/services/headscale.nix hosts/prefect/services/headscale.nix
systems/x86_64-linux/prefect/services/mailserver/default.nix hosts/prefect/services/mailserver/default.nix
systems/x86_64-linux/prefect/services/mailserver/logins.nix hosts/prefect/services/mailserver/logins.nix
systems/x86_64-linux/prefect/services/mailserver/monitoring.nix hosts/prefect/services/mailserver/monitoring.nix
systems/x86_64-linux/prefect/services/mailserver/overrides.nix hosts/prefect/services/mailserver/overrides.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/acme.nix hosts/prefect/services/mailserver/stalwart/acme.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/auth.nix hosts/prefect/services/mailserver/stalwart/auth.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/auto-ban.nix hosts/prefect/services/mailserver/stalwart/auto-ban.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/calendar.nix hosts/prefect/services/mailserver/stalwart/calendar.nix
+2 -1
systems/x86_64-linux/prefect/services/mailserver/stalwart/default.nix hosts/prefect/services/mailserver/stalwart/default.nix
···
{
config,
lib,
+
self,
...
}:
let
-
d = lib.py.data.mail;
+
d = self.lib.data.mail;
cfg = config.services.stalwart-mail;
sec = config.age.secrets;
creds = config.services.stalwart-mail.credentials;
systems/x86_64-linux/prefect/services/mailserver/stalwart/imap.nix hosts/prefect/services/mailserver/stalwart/imap.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/queue.nix hosts/prefect/services/mailserver/stalwart/queue.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/report.nix hosts/prefect/services/mailserver/stalwart/report.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/server.nix hosts/prefect/services/mailserver/stalwart/server.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/session.nix hosts/prefect/services/mailserver/stalwart/session.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/signature.nix hosts/prefect/services/mailserver/stalwart/signature.nix
systems/x86_64-linux/prefect/services/named.conf hosts/prefect/services/named.conf
systems/x86_64-linux/prefect/services/netdata.nix hosts/prefect/services/netdata.nix
systems/x86_64-linux/prefect/services/nginx/default.nix hosts/prefect/services/nginx/default.nix
systems/x86_64-linux/prefect/services/nginx/pyrox.dev.nix hosts/prefect/services/nginx/pyrox.dev.nix
systems/x86_64-linux/prefect/services/prometheus.nix hosts/prefect/services/prometheus.nix
systems/x86_64-linux/prefect/services/secrets.nix hosts/prefect/services/secrets.nix
systems/x86_64-linux/prefect/services/tailscale.nix hosts/prefect/services/tailscale.nix
systems/x86_64-linux/prefect/services/zerotier.nix hosts/prefect/services/zerotier.nix
systems/x86_64-linux/thought/bootloader.nix hosts/thought/bootloader.nix
+1
systems/x86_64-linux/thought/default.nix hosts/thought/default.nix
···
];
nixpkgs.hostPlatform.system = system;
py = {
+
profiles.server.enable = true;
users.default.enable = true;
programs = {
fish.enable = true;
systems/x86_64-linux/thought/disks.nix hosts/thought/disks.nix
systems/x86_64-linux/thought/firewall.nix hosts/thought/firewall.nix
systems/x86_64-linux/thought/hardware.nix hosts/thought/hardware.nix
systems/x86_64-linux/thought/networking.nix hosts/thought/networking.nix
systems/x86_64-linux/thought/packages.nix hosts/thought/packages.nix
systems/x86_64-linux/thought/secrets/secrets.nix hosts/thought/secrets/secrets.nix
systems/x86_64-linux/thought/services/prometheus.nix hosts/thought/services/prometheus.nix
systems/x86_64-linux/thought/services/tailscale.nix hosts/thought/services/tailscale.nix
systems/x86_64-linux/zaphod/bootloader.nix hosts/zaphod/bootloader.nix
systems/x86_64-linux/zaphod/console.nix hosts/zaphod/console.nix
+2 -2
systems/x86_64-linux/zaphod/default.nix hosts/zaphod/default.nix
···
-
{ system, ... }:
+
{ ... }:
{
imports = [
# Machine specific configs
···
# Agenix secrets
# ./secret-files.nix
];
-
nixpkgs.hostPlatform.system = system;
py = {
+
profiles.gui.enable = true;
users.default.enable = true;
programs = {
appimage.enable = true;
systems/x86_64-linux/zaphod/fonts.nix hosts/zaphod/fonts.nix
systems/x86_64-linux/zaphod/hardware.nix hosts/zaphod/hardware.nix
systems/x86_64-linux/zaphod/kde.nix hosts/zaphod/kde.nix
systems/x86_64-linux/zaphod/misc.nix hosts/zaphod/misc.nix
systems/x86_64-linux/zaphod/networking.nix hosts/zaphod/networking.nix
-1
systems/x86_64-linux/zaphod/packages.nix hosts/zaphod/packages.nix
···
pkgs.qbittorrent
pkgs.scrcpy
pkgs.steam-run
-
pkgs.py.doc2dash
];
}
systems/x86_64-linux/zaphod/power.nix hosts/zaphod/power.nix
systems/x86_64-linux/zaphod/programs/gnupg.nix hosts/zaphod/programs/gnupg.nix
systems/x86_64-linux/zaphod/programs/ssh.nix hosts/zaphod/programs/ssh.nix
systems/x86_64-linux/zaphod/programs/sway.nix hosts/zaphod/programs/sway.nix
systems/x86_64-linux/zaphod/programs/zsh.nix hosts/zaphod/programs/zsh.nix
systems/x86_64-linux/zaphod/secret-files.nix hosts/zaphod/secret-files.nix
systems/x86_64-linux/zaphod/secrets/secrets.nix hosts/zaphod/secrets/secrets.nix
systems/x86_64-linux/zaphod/secrets/wg-privkey.age hosts/zaphod/secrets/wg-privkey.age
systems/x86_64-linux/zaphod/security/modules.nix hosts/zaphod/security/modules.nix
systems/x86_64-linux/zaphod/security/pam.nix hosts/zaphod/security/pam.nix
systems/x86_64-linux/zaphod/services/avahi.nix hosts/zaphod/services/avahi.nix
systems/x86_64-linux/zaphod/services/docker.nix hosts/zaphod/services/docker.nix
systems/x86_64-linux/zaphod/services/flatpak.nix hosts/zaphod/services/flatpak.nix
systems/x86_64-linux/zaphod/services/fprintd.nix hosts/zaphod/services/fprintd.nix
systems/x86_64-linux/zaphod/services/fwupd.nix hosts/zaphod/services/fwupd.nix
systems/x86_64-linux/zaphod/services/greeter.nix hosts/zaphod/services/greeter.nix
systems/x86_64-linux/zaphod/services/kmscon.nix hosts/zaphod/services/kmscon.nix
systems/x86_64-linux/zaphod/services/misc.nix hosts/zaphod/services/misc.nix
systems/x86_64-linux/zaphod/services/modules.nix hosts/zaphod/services/modules.nix
systems/x86_64-linux/zaphod/services/packagekit.nix hosts/zaphod/services/packagekit.nix
systems/x86_64-linux/zaphod/services/pcscd.nix hosts/zaphod/services/pcscd.nix
systems/x86_64-linux/zaphod/services/pipewire.nix hosts/zaphod/services/pipewire.nix
systems/x86_64-linux/zaphod/services/ssh.nix hosts/zaphod/services/ssh.nix
systems/x86_64-linux/zaphod/services/tailscale.nix hosts/zaphod/services/tailscale.nix
+15
templates/default.nix
···
+
{
+
self,
+
...
+
}:
+
{
+
flake = {
+
templates = {
+
uv = {
+
path = ./uv;
+
description = "uv project template";
+
};
+
};
+
defaultTemplate = self.templates.uv;
+
};
+
}