Compare commits

..

No commits in common. "914537921b65a45e6b3538e7940237d8f91f1cc7" and "f5e5adb2fd4254d8491fdb6abe60a8fe95c8a8c3" have entirely different histories.

43 changed files with 240 additions and 492 deletions

View file

@ -1,17 +0,0 @@
# Taken from: https://github.com/isabelroses/dotfiles/blob/9335e5728eaaa9bdcb0d5c3130a5d7c8dddbb6e3/.github/actions/install-lix/action.yml :3
name: Install Lix
description: "Install Lix for the specified system"
runs:
using: composite
steps:
- uses: DeterminateSystems/nix-installer-action@main
with:
source-url: 'https://install.lix.systems/lix/lix-installer-${{ fromJSON(''{"X64":"x86_64","X86":"i686","ARM64":"aarch64","ARM":"armv7l"}'')[runner.arch] }}-${{ fromJSON(''{"Linux":"linux","macOS":"darwin","Windows":"windows"}'')[runner.os] }}'
logger: pretty
diagnostic-endpoint: ""
extra-conf: |
experimental-features = flakes nix-command
substituters = https://nix-community.cachix.org https://catppuccin.cachix.org https://cache.nixos.org/
trusted-public-keys = nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= catppuccin.cachix.org-1:noG/4HkbhJb+lUAdKrph6LaozJvAeEEZj4N732IysmU= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=

View file

@ -1,34 +0,0 @@
name: "Nix: build and cache outputs"
on:
workflow_dispatch:
push:
paths:
- "**.nix"
- "**.lock"
- ".github/workflows/build.yml"
jobs:
build-flake:
name: Build (x86_64-linux)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.ref_name }}
persist-credentials: false
- name: Install Lix
uses: ./.github/actions/install-lix
- name: Setup Attic cache
uses: ryanccn/attic-action@v0.3.2
with:
endpoint: https://cache.thevoid.cafe
cache: puzzlevision
token: ${{ secrets.ATTIC_TOKEN }}
- name: Build flake
run: nix build .#nixosConfigurations.puzzlevision.config.system.build.toplevel --accept-flake-config

24
flake.lock generated
View file

@ -7,11 +7,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1748080874, "lastModified": 1747519437,
"narHash": "sha256-sUebEzAkrY8Aq5G0GHFyRddmRNGP/a2iTtV7ISNvi/c=", "narHash": "sha256-uv9Wv59d+mckS2CkorOF484wp2G5TNGijdoBZ5RkAk0=",
"owner": "catppuccin", "owner": "catppuccin",
"repo": "nix", "repo": "nix",
"rev": "0ba11b12be81f0849a89ed17ab635164ea8f0112", "rev": "3ba714046ee32373e88166e6e9474d6ae6a5b734",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -76,11 +76,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1748182899, "lastModified": 1747955385,
"narHash": "sha256-r6MHSalDFydlUmjorVTSsyhLjIt8VWNtGc5+mffXvFQ=", "narHash": "sha256-AKoBFaEGN02tGvBlkwVIDOGXouHvrTTfOUcvBDGxkxQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "901f8fef7f349cf8a8e97b3230b22fd592df9160", "rev": "a868570581f0dbdef7e33c8c9bb34b735dfcbacf",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -118,11 +118,11 @@
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1748137719, "lastModified": 1747878048,
"narHash": "sha256-yBiIy+eb0QxYoIOzOY7QyjqXY5PiLgIoNbFtg4SbUH8=", "narHash": "sha256-kAR4Ox+vShPzsUar/1rHarRgUBPpm7hxwi7sIffNYa4=",
"owner": "kaylorben", "owner": "kaylorben",
"repo": "nixcord", "repo": "nixcord",
"rev": "c4d7ccc9ae9fc1c46820bdc5b800b4f66e972ccc", "rev": "5f737debf65b8409392604098a7489d997746450",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -149,11 +149,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1748026106, "lastModified": 1747744144,
"narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", "narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", "rev": "2795c506fe8fb7b03c36ccb51f75b6df0ab2553f",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -48,14 +48,13 @@
}; };
}; };
outputs = outputs = {flake-parts, ...} @ inputs:
{ flake-parts, ... }@inputs: flake-parts.lib.mkFlake {inherit inputs;} {
flake-parts.lib.mkFlake { inherit inputs; } {
imports = [ imports = [
./modules/flake ./modules/flake
]; ];
systems = [ "x86_64-linux" ]; systems = ["x86_64-linux"];
flake = { flake = {
# Exposing the flake namespace # Exposing the flake namespace
namespace = "puzzlevision"; namespace = "puzzlevision";

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
### Tools ### Tools
git git

View file

@ -2,11 +2,9 @@
lib, lib,
config, config,
... ...
}: }: let
let
inherit (lib) mkIf; inherit (lib) mkIf;
in in {
{
# Enable arRPC for discord Rich Presence stuffs # Enable arRPC for discord Rich Presence stuffs
services.arrpc.enable = true; services.arrpc.enable = true;

View file

@ -4,11 +4,9 @@
osConfig, osConfig,
namespace, namespace,
... ...
}: }: let
let
inherit (lib) mkIf; inherit (lib) mkIf;
in in {
{
programs.youtube-music = { programs.youtube-music = {
enable = true; enable = true;
options = { options = {

View file

@ -2,8 +2,7 @@
pkgs, pkgs,
config, config,
... ...
}: }: {
{
imports = [ imports = [
./apps/discord ./apps/discord
./apps/youtube-music ./apps/youtube-music

View file

@ -2,35 +2,30 @@
lib, lib,
self, self,
... ...
}: }: {
{
# Create a NixOS module option on a single line. # Create a NixOS module option on a single line.
mkOpt = mkOpt = type: default: description:
type: default: description: lib.mkOption {inherit type default description;};
lib.mkOption { inherit type default description; };
# Create a simple bool options # Create a simple bool options
mkBool = mkBool = default: description:
default: description:
lib.mkOption { lib.mkOption {
inherit default description; inherit default description;
type = lib.types.bool; type = lib.types.bool;
}; };
# Create a module compliant with the NixOS module system. # Create a module compliant with the NixOS module system.
mkModule = mkModule = {
{ name ? "puzzlevision",
name ? "puzzlevision", class,
class, modules,
modules, }: {
}: _class = class;
{ # Template: "[path-to-flake]/flake.nix#[class-name]Modules.[module-name]"
_class = class; # Example: "[path-to-flake]/flake.nix#nixosModules.system.audio"
# Template: "[path-to-flake]/flake.nix#[class-name]Modules.[module-name]" _file = "${self.outPath}/flake.nix#${class}Modules.${name}";
# Example: "[path-to-flake]/flake.nix#nixosModules.system.audio" imports = modules;
_file = "${self.outPath}/flake.nix#${class}Modules.${name}"; };
imports = modules;
};
# TODO: add mkIfElse function # TODO: add mkIfElse function
} }

View file

@ -2,64 +2,48 @@
lib, lib,
self, self,
... ...
}: }: let
let
# Utility function to read a directory and return its contents. # Utility function to read a directory and return its contents.
readDirectory = directory: builtins.readDir directory; readDirectory = directory: builtins.readDir directory;
# Utility function to handle each filesystem entity (file or directory). # Utility function to handle each filesystem entity (file or directory).
filesystemEntityToAttrSet = filesystemEntityToAttrSet = directory: importArgs: name: type:
directory: importArgs: name: type: if type == "directory"
if type == "directory" then then dirToAttrSet "${directory}/${name}" importArgs
dirToAttrSet "${directory}/${name}" importArgs else if name == "default.nix"
else if name == "default.nix" then then import "${directory}/${name}" importArgs
import "${directory}/${name}" importArgs else {};
else
{ };
filesystemEntityToList = filesystemEntityToList = directory: name: type:
directory: name: type: if type == "directory"
if type == "directory" then then dirToModuleList "${directory}/${name}"
dirToModuleList "${directory}/${name}" else if name == "default.nix"
else if name == "default.nix" then then ["${directory}/${name}"]
[ "${directory}/${name}" ] else [];
else
[ ];
dirToModuleList = dirToModuleList = directory: let
directory: readDir = readDirectory directory;
let in
readDir = readDirectory directory;
in
builtins.foldl' ( builtins.foldl' (
acc: name: acc ++ (filesystemEntityToList directory name (builtins.getAttr name readDir)) acc: name:
) [ ] (builtins.attrNames readDir); acc ++ (filesystemEntityToList directory name (builtins.getAttr name readDir))
) [] (builtins.attrNames readDir);
# Utility function to recursively load modules from a directory. # Utility function to recursively load modules from a directory.
dirToAttrSet = dirToAttrSet = directory: importArgs: let
directory: importArgs: # Read provided directory only once at the very start and save the result.
let readDir = readDirectory directory;
# Read provided directory only once at the very start and save the result. in
readDir = readDirectory directory;
in
# Iterate over the attr names of a readDir operation. # Iterate over the attr names of a readDir operation.
builtins.foldl' ( builtins.foldl' (
acc: name: acc: name:
# Merge outputs of handling a filesystem entity (file or directory) into accumulator. # Merge outputs of handling a filesystem entity (file or directory) into accumulator.
# Files return attribute sets with their resulting expressions, directories return the result of multiple file handling operations. # Files return attribute sets with their resulting expressions, directories return the result of multiple file handling operations.
acc // (filesystemEntityToAttrSet directory importArgs name (builtins.getAttr name readDir)) acc // (filesystemEntityToAttrSet directory importArgs name (builtins.getAttr name readDir))
) { } (builtins.attrNames readDir); ) {} (builtins.attrNames readDir);
puzzlelib = dirToAttrSet ../../lib { inherit lib self; } // { puzzlelib = dirToAttrSet ../../lib {inherit lib self;} // {inherit dirToAttrSet dirToModuleList filesystemEntityToList filesystemEntityToAttrSet;};
inherit in {
dirToAttrSet
dirToModuleList
filesystemEntityToList
filesystemEntityToAttrSet
;
};
in
{
# Expose custom library on flake "lib" output # Expose custom library on flake "lib" output
flake.lib = puzzlelib; flake.lib = puzzlelib;
} }

View file

@ -1,5 +1,4 @@
{ self, ... }: {self, ...}: {
{
flake = { flake = {
# TODO: figure out why this isn't working correctly # TODO: figure out why this isn't working correctly
nixosModules.puzzlevision = self.lib.mkModule { nixosModules.puzzlevision = self.lib.mkModule {

View file

@ -3,8 +3,7 @@
self, self,
inputs, inputs,
... ...
}: }: {
{
imports = [ imports = [
inputs.easy-hosts.flakeModule inputs.easy-hosts.flakeModule
]; ];

View file

@ -4,14 +4,12 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf mkForce; inherit (lib) mkEnableOption mkIf mkForce;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.apps.zed; cfg = config.${namespace}.apps.zed;
in in {
{
options.${namespace}.apps.zed = { options.${namespace}.apps.zed = {
enable = mkEnableOption "zed, the graphical editor from the future"; enable = mkEnableOption "zed, the graphical editor from the future";
}; };
@ -69,14 +67,11 @@ in
### Language specific configurations ### Language specific configurations
languages = { languages = {
Nix = { Nix = {
language_servers = [ language_servers = ["nixd" "!nil"];
"nixd"
"!nil"
];
formatter = { formatter = {
external = { external = {
command = "nixfmt"; command = "alejandra";
arguments = [ "--quiet" ]; arguments = ["--quiet"];
}; };
}; };
}; };
@ -128,7 +123,6 @@ in
### Nix ### Nix
nixd nixd
alejandra alejandra
nixfmt-rfc-style
### Python ### Python
python3Packages.python-lsp-server python3Packages.python-lsp-server

View file

@ -5,44 +5,24 @@
config, config,
osConfig, osConfig,
... ...
}: }: let
let
inherit (lib) mkIf mkOption; inherit (lib) mkIf mkOption;
inherit (self) namespace; inherit (self) namespace;
inherit (self.lib) mkOpt; inherit (self.lib) mkOpt;
cfg = config.${namespace}.desktop.gnome; cfg = config.${namespace}.desktop.gnome;
in in {
{
options.${namespace}.desktop.gnome = with lib.types; { options.${namespace}.desktop.gnome = with lib.types; {
enabled-extensions = mkOption { enabled-extensions = mkOption {
type = listOf package; type = listOf package;
default = with pkgs.gnomeExtensions; [ default = with pkgs.gnomeExtensions; [user-themes blur-my-shell appindicator unite color-picker clipboard-history];
user-themes example = [dash-to-dock blur-my-shell];
blur-my-shell
appindicator
unite
color-picker
clipboard-history
];
example = [
dash-to-dock
blur-my-shell
];
description = "Specify gnome extensions to install."; description = "Specify gnome extensions to install.";
}; };
favorite-apps = mkOption { favorite-apps = mkOption {
type = listOf str; type = listOf str;
default = [ default = ["org.gnome.Nautilus.desktop" "obsidian.desktop" "firefox.desktop" "dev.zed.Zed.desktop"];
"org.gnome.Nautilus.desktop" example = ["org.gnome.Nautilus.desktop" "obsidian.desktop"];
"obsidian.desktop"
"firefox.desktop"
"dev.zed.Zed.desktop"
];
example = [
"org.gnome.Nautilus.desktop"
"obsidian.desktop"
];
description = "Specify your favorite apps (sorted left to right)."; description = "Specify your favorite apps (sorted left to right).";
}; };
extensions = { extensions = {
@ -64,9 +44,7 @@ in
enable-blur = mkOpt bool false "Whether to enable blur-my-shell application blur."; enable-blur = mkOpt bool false "Whether to enable blur-my-shell application blur.";
}; };
}; };
wallpaper = wallpaper = mkOpt str (builtins.toString ../wallpapers/catppuccin/howard-chen-mao-mao-forest-campsite.jpg) "Specify the path of your prefered Gnome wallpaper.";
mkOpt str (builtins.toString ../wallpapers/catppuccin/howard-chen-mao-mao-forest-campsite.jpg)
"Specify the path of your prefered Gnome wallpaper.";
}; };
config = mkIf osConfig.${namespace}.desktop.gnome.enable { config = mkIf osConfig.${namespace}.desktop.gnome.enable {
@ -76,35 +54,31 @@ in
"org/gnome/shell" = { "org/gnome/shell" = {
favorite-apps = cfg.favorite-apps; favorite-apps = cfg.favorite-apps;
enabled-extensions = lib.forEach cfg.enabled-extensions (x: x.extensionUuid); enabled-extensions = lib.forEach cfg.enabled-extensions (x: x.extensionUuid);
disabled-extensions = [ ]; # Make sure none of our extensions are disabled on system rebuild disabled-extensions = []; # Make sure none of our extensions are disabled on system rebuild
}; };
"org/gnome/shell/extensions/unite" = "org/gnome/shell/extensions/unite" = mkIf (builtins.elem pkgs.gnomeExtensions.unite cfg.enabled-extensions) {
mkIf (builtins.elem pkgs.gnomeExtensions.unite cfg.enabled-extensions) show-window-buttons = cfg.extensions.unite.show-window-buttons;
{ hide-window-titlebars = cfg.extensions.unite.hide-window-titlebars;
show-window-buttons = cfg.extensions.unite.show-window-buttons;
hide-window-titlebars = cfg.extensions.unite.hide-window-titlebars;
use-activities-text = false; use-activities-text = false;
extend-left-box = false; extend-left-box = false;
reduce-panel-spacing = false; reduce-panel-spacing = false;
show-legacy-tray = false; show-legacy-tray = false;
show-appmenu-button = false; show-appmenu-button = false;
show-desktop-name = false; show-desktop-name = false;
enable-titlebar-actions = false; enable-titlebar-actions = false;
restrict-to-primary-screen = false; restrict-to-primary-screen = false;
hide-activities-button = "never"; hide-activities-button = "never";
autofocus-windows = true; autofocus-windows = true;
notifications-position = "right"; notifications-position = "right";
}; };
"org/gnome/shell/extensions/blur-my-shell/applications" = "org/gnome/shell/extensions/blur-my-shell/applications" = mkIf cfg.extensions.blur-my-shell.enable-blur {
mkIf cfg.extensions.blur-my-shell.enable-blur blur = true;
{ sigma = 30;
blur = true; opacity = 230;
sigma = 30; enable-all = true;
opacity = 230; dynamic-opacity = false;
enable-all = true; };
dynamic-opacity = false;
};
"org/gnome/desktop/background" = { "org/gnome/desktop/background" = {
picture-uri = cfg.wallpaper; picture-uri = cfg.wallpaper;
picture-uri-dark = cfg.wallpaper; picture-uri-dark = cfg.wallpaper;

View file

@ -1,5 +1,4 @@
{ config, ... }: {config, ...}: {
{
sops = { sops = {
age.keyFile = "/home/${config.home.username}/sops-nix/key.txt"; age.keyFile = "/home/${config.home.username}/sops-nix/key.txt";
}; };

View file

@ -6,25 +6,19 @@
osConfig, osConfig,
namespace, namespace,
... ...
}: }: let
let
inherit (lib) mkEnableOption types mkIf; inherit (lib) mkEnableOption types mkIf;
inherit (self.lib) mkOpt; inherit (self.lib) mkOpt;
palette = palette = (pkgs.lib.importJSON (config.catppuccin.sources.palette + "/palette.json")).${config.catppuccin.flavor}.colors;
(pkgs.lib.importJSON (config.catppuccin.sources.palette + "/palette.json"))
.${config.catppuccin.flavor}.colors;
cfg = config.${namespace}.themes.catppuccin; cfg = config.${namespace}.themes.catppuccin;
in in {
{
options.${namespace}.themes.catppuccin = { options.${namespace}.themes.catppuccin = {
enable = mkEnableOption "the Catppuccin theme, globally."; enable = mkEnableOption "the Catppuccin theme, globally.";
accent = mkOpt types.str "blue" "The accent colour to use."; accent = mkOpt types.str "blue" "The accent colour to use.";
flavor = mkOpt types.str "macchiato" "The flavor to use."; flavor = mkOpt types.str "macchiato" "The flavor to use.";
palette = palette = mkOpt (lib.types.attrsOf lib.types.raw) palette "a reference to the current active Catppuccin palette.";
mkOpt (lib.types.attrsOf lib.types.raw) palette
"a reference to the current active Catppuccin palette.";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -4,8 +4,7 @@
config, config,
namespace, namespace,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf; inherit (lib) mkEnableOption mkIf;
catppuccinCfg = config.${namespace}.themes.catppuccin; catppuccinCfg = config.${namespace}.themes.catppuccin;
@ -105,19 +104,16 @@ let
}; };
cfg = config.${namespace}.themes.catppuccin.gtk; cfg = config.${namespace}.themes.catppuccin.gtk;
in in {
{ options.${namespace}.themes.catppuccin.gtk = {enable = mkEnableOption "Enable the Catppuccin theme for GTK";};
options.${namespace}.themes.catppuccin.gtk = {
enable = mkEnableOption "Enable the Catppuccin theme for GTK";
};
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = with pkgs; [ home.packages = with pkgs; [
(colloid-gtk-theme.override { (colloid-gtk-theme.override {
themeVariants = [ "default" ]; themeVariants = ["default"];
colorVariants = [ "dark" ]; colorVariants = ["dark"];
sizeVariants = [ "standard" ]; sizeVariants = ["standard"];
tweaks = [ "catppuccin" ]; tweaks = ["catppuccin"];
}) })
]; ];

View file

@ -3,14 +3,12 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf; inherit (lib) mkEnableOption mkIf;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.archetypes.laptop; cfg = config.${namespace}.archetypes.laptop;
in in {
{
options.${namespace}.archetypes.laptop = { options.${namespace}.archetypes.laptop = {
enable = mkEnableOption "the laptop archetype."; enable = mkEnableOption "the laptop archetype.";
}; };

View file

@ -3,14 +3,12 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf; inherit (lib) mkEnableOption mkIf;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.archetypes.server; cfg = config.${namespace}.archetypes.server;
in in {
{
options.${namespace}.archetypes.server = { options.${namespace}.archetypes.server = {
enable = mkEnableOption "the server archetype for your current system"; enable = mkEnableOption "the server archetype for your current system";
}; };

View file

@ -4,14 +4,12 @@
pkgs, pkgs,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf mkDefault; inherit (lib) mkEnableOption mkIf mkDefault;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.archetypes.workstation; cfg = config.${namespace}.archetypes.workstation;
in in {
{
options.${namespace}.archetypes.workstation = { options.${namespace}.archetypes.workstation = {
enable = mkEnableOption "the workstation archetype."; enable = mkEnableOption "the workstation archetype.";
}; };

View file

@ -4,14 +4,12 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf; inherit (lib) mkEnableOption mkIf;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.desktop.gnome; cfg = config.${namespace}.desktop.gnome;
in in {
{
options.${namespace}.desktop.gnome = { options.${namespace}.desktop.gnome = {
enable = mkEnableOption "the gnome desktop environment"; enable = mkEnableOption "the gnome desktop environment";
}; };

View file

@ -3,22 +3,18 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf types; inherit (lib) mkEnableOption mkIf types;
inherit (self) namespace; inherit (self) namespace;
inherit (self.lib) mkOpt; inherit (self.lib) mkOpt;
cfg = config.${namespace}.services.atticd; cfg = config.${namespace}.services.atticd;
in in {
{
options.${namespace}.services.atticd = { options.${namespace}.services.atticd = {
enable = mkEnableOption "the attic service, a multi-tenant nix binary cache."; enable = mkEnableOption "the attic service, a multi-tenant nix binary cache.";
sopsFile = mkOpt types.path null "The location of the sops secret file for the Atticd service."; sopsFile = mkOpt types.path null "The location of the sops secret file for the Atticd service.";
sopsFormat = mkOpt types.str null "The format of the sops secret file for the Atticd service."; sopsFormat = mkOpt types.str null "The format of the sops secret file for the Atticd service.";
subdomain = subdomain = mkOpt types.str "cache" "The subdomain, of the system domain, the service should be exposed on.";
mkOpt types.str "cache"
"The subdomain, of the system domain, the service should be exposed on.";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -34,7 +30,7 @@ in
settings = { settings = {
listen = "[::]:3900"; listen = "[::]:3900";
jwt = { }; jwt = {};
chunking = { chunking = {
nar-size-threshold = 64 * 1024; # 64 KiB nar-size-threshold = 64 * 1024; # 64 KiB
@ -54,9 +50,9 @@ in
services.traefik.dynamicConfigOptions = { services.traefik.dynamicConfigOptions = {
http = { http = {
services.atticd.loadBalancer.servers = [ { url = "http://localhost:3900"; } ]; services.atticd.loadBalancer.servers = [{url = "http://localhost:3900";}];
routers.atticd = { routers.atticd = {
entryPoints = [ "websecure" ]; entryPoints = ["websecure"];
service = "atticd"; service = "atticd";
rule = "Host(`${cfg.subdomain}.${config.${namespace}.services.domain}`)"; rule = "Host(`${cfg.subdomain}.${config.${namespace}.services.domain}`)";
}; };

View file

@ -2,17 +2,13 @@
lib, lib,
self, self,
... ...
}: }: let
let
inherit (lib) types; inherit (lib) types;
inherit (self) namespace; inherit (self) namespace;
inherit (self.lib) mkOpt; inherit (self.lib) mkOpt;
in in {
{
options.${namespace}.services = { options.${namespace}.services = {
domain = mkOpt types.str "thevoid.cafe" "The main system domain, used for exposing services."; domain = mkOpt types.str "thevoid.cafe" "The main system domain, used for exposing services.";
mail = mail = mkOpt types.str "system@thevoid.cafe" "The main system administration E-Mail, used for logs and services.";
mkOpt types.str "system@thevoid.cafe"
"The main system administration E-Mail, used for logs and services.";
}; };
} }

View file

@ -3,14 +3,12 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkIf mkEnableOption; inherit (lib) mkIf mkEnableOption;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.services.docker; cfg = config.${namespace}.services.docker;
in in {
{
options.${namespace}.services.docker = { options.${namespace}.services.docker = {
enable = mkEnableOption "the docker service."; enable = mkEnableOption "the docker service.";
}; };

View file

@ -3,15 +3,13 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf types; inherit (lib) mkEnableOption mkIf types;
inherit (self) namespace; inherit (self) namespace;
inherit (self.lib) mkOpt; inherit (self.lib) mkOpt;
cfg = config.${namespace}.services.duckdns; cfg = config.${namespace}.services.duckdns;
in in {
{
options.${namespace}.services.duckdns = { options.${namespace}.services.duckdns = {
enable = mkEnableOption "DuckDNS, the dynamic dns service. Will periodically refresh your IP."; enable = mkEnableOption "DuckDNS, the dynamic dns service. Will periodically refresh your IP.";
sopsFile = mkOpt types.path null "The location of the sops secret file for the DuckDNS service."; sopsFile = mkOpt types.path null "The location of the sops secret file for the DuckDNS service.";

View file

@ -1,5 +1,4 @@
{ ... }: {...}: {
{
# Todo: rewrite as recursive operation, based on ${namespace}.users # Todo: rewrite as recursive operation, based on ${namespace}.users
system.userActivationScripts = { system.userActivationScripts = {
removeConflictingHomeManagerBackups = { removeConflictingHomeManagerBackups = {

View file

@ -3,23 +3,17 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf types; inherit (lib) mkEnableOption mkIf types;
inherit (self) namespace; inherit (self) namespace;
inherit (self.lib) mkOpt; inherit (self.lib) mkOpt;
cfg = config.${namespace}.services.homepage; cfg = config.${namespace}.services.homepage;
in in {
{
options.${namespace}.services.homepage = { options.${namespace}.services.homepage = {
enable = mkEnableOption "Homepage, an intuitive dashboard for your services."; enable = mkEnableOption "Homepage, an intuitive dashboard for your services.";
subdomain = subdomain = mkOpt types.str "home" "The subdomain, of the system domain, the service should be exposed on.";
mkOpt types.str "home" configDir = mkOpt types.path null "The config directory, which will be copied to the Homepage directory during compilation.";
"The subdomain, of the system domain, the service should be exposed on.";
configDir =
mkOpt types.path null
"The config directory, which will be copied to the Homepage directory during compilation.";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -41,9 +35,7 @@ in
labels = { labels = {
"traefik.enable" = "true"; "traefik.enable" = "true";
"traefik.http.routers.homepage.entrypoints" = "websecure"; "traefik.http.routers.homepage.entrypoints" = "websecure";
"traefik.http.routers.homepage.rule" = "Host(`${cfg.subdomain}.${ "traefik.http.routers.homepage.rule" = "Host(`${cfg.subdomain}.${config.${namespace}.services.domain}`)";
config.${namespace}.services.domain
}`)";
"traefik.http.services.homepage.loadbalancer.server.port" = "3000"; "traefik.http.services.homepage.loadbalancer.server.port" = "3000";
}; };
volumes = [ volumes = [
@ -56,7 +48,7 @@ in
environment = { environment = {
"HOMEPAGE_ALLOWED_HOSTS" = "${cfg.subdomain}.${config.${namespace}.services.domain}"; "HOMEPAGE_ALLOWED_HOSTS" = "${cfg.subdomain}.${config.${namespace}.services.domain}";
}; };
extraOptions = [ "--network=proxy" ]; extraOptions = ["--network=proxy"];
}; };
}; };
} }

View file

@ -3,15 +3,13 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf types; inherit (lib) mkEnableOption mkIf types;
inherit (self) namespace; inherit (self) namespace;
inherit (self.lib) mkOpt; inherit (self.lib) mkOpt;
cfg = config.${namespace}.services.traefik; cfg = config.${namespace}.services.traefik;
in in {
{
options.${namespace}.services.traefik = { options.${namespace}.services.traefik = {
enable = mkEnableOption "the Traefik service."; enable = mkEnableOption "the Traefik service.";
sopsFile = mkOpt types.path null "The location of the sops secret file for the Traefik service."; sopsFile = mkOpt types.path null "The location of the sops secret file for the Traefik service.";
@ -19,11 +17,7 @@ in
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
networking.firewall.allowedTCPPorts = [ networking.firewall.allowedTCPPorts = [80 8080 443]; # http, dashboard, https
80
8080
443
]; # http, dashboard, https
sops.secrets."services/traefik" = { sops.secrets."services/traefik" = {
sopsFile = cfg.sopsFile; sopsFile = cfg.sopsFile;
@ -32,7 +26,7 @@ in
systemd.services.traefik = { systemd.services.traefik = {
serviceConfig = { serviceConfig = {
EnvironmentFile = [ config.sops.secrets."services/traefik".path ]; EnvironmentFile = [config.sops.secrets."services/traefik".path];
}; };
}; };
@ -90,11 +84,11 @@ in
domains = [ domains = [
{ {
main = "thevoid.cafe"; main = "thevoid.cafe";
sans = [ "*.thevoid.cafe" ]; sans = ["*.thevoid.cafe"];
} }
{ {
main = "rhysbot.co.uk"; main = "rhysbot.co.uk";
sans = [ "*.rhysbot.co.uk" ]; sans = ["*.rhysbot.co.uk"];
} }
]; ];
}; };

View file

@ -3,24 +3,18 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf types; inherit (lib) mkEnableOption mkIf types;
inherit (self) namespace; inherit (self) namespace;
inherit (self.lib) mkOpt; inherit (self.lib) mkOpt;
cfg = config.${namespace}.services.vaultwarden; cfg = config.${namespace}.services.vaultwarden;
in in {
{
options.${namespace}.services.vaultwarden = { options.${namespace}.services.vaultwarden = {
enable = mkEnableOption "Vaultwarden, a self-hostable password manager."; enable = mkEnableOption "Vaultwarden, a self-hostable password manager.";
sopsFile = sopsFile = mkOpt types.path null "The location of the sops secret file for the Vaultwarden service.";
mkOpt types.path null
"The location of the sops secret file for the Vaultwarden service.";
sopsFormat = mkOpt types.str null "The format of the sops secret file for the Vaultwarden service."; sopsFormat = mkOpt types.str null "The format of the sops secret file for the Vaultwarden service.";
subdomain = subdomain = mkOpt types.str "vault" "The subdomain, of the system domain, the service should be exposed on.";
mkOpt types.str "vault"
"The subdomain, of the system domain, the service should be exposed on.";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -41,9 +35,7 @@ in
labels = { labels = {
"traefik.enable" = "true"; "traefik.enable" = "true";
"traefik.http.routers.vaultwarden.entrypoints" = "websecure"; "traefik.http.routers.vaultwarden.entrypoints" = "websecure";
"traefik.http.routers.vaultwarden.rule" = "Host(`${cfg.subdomain}.${ "traefik.http.routers.vaultwarden.rule" = "Host(`${cfg.subdomain}.${config.${namespace}.services.domain}`)";
config.${namespace}.services.domain
}`)";
}; };
volumes = [ volumes = [
"/var/lib/containers/vaultwarden/data:/data:rw" "/var/lib/containers/vaultwarden/data:/data:rw"
@ -51,7 +43,7 @@ in
environmentFiles = [ environmentFiles = [
config.sops.secrets."services/vaultwarden".path config.sops.secrets."services/vaultwarden".path
]; ];
extraOptions = [ "--network=proxy" ]; extraOptions = ["--network=proxy"];
}; };
}; };
} }

View file

@ -3,14 +3,12 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf; inherit (lib) mkEnableOption mkIf;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.system.audio; cfg = config.${namespace}.system.audio;
in in {
{
options.${namespace}.system.audio = { options.${namespace}.system.audio = {
enable = mkEnableOption "system audio support."; enable = mkEnableOption "system audio support.";
}; };

View file

@ -4,20 +4,18 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf; inherit (lib) mkEnableOption mkIf;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.system.bluetooth; cfg = config.${namespace}.system.bluetooth;
in in {
{
options.${namespace}.system.bluetooth = { options.${namespace}.system.bluetooth = {
enable = mkEnableOption "bluetooth support."; enable = mkEnableOption "bluetooth support.";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ bluez ]; environment.systemPackages = with pkgs; [bluez];
hardware.bluetooth = { hardware.bluetooth = {
enable = true; enable = true;

View file

@ -4,14 +4,12 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf mkOption; inherit (lib) mkEnableOption mkIf mkOption;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.system.fonts; cfg = config.${namespace}.system.fonts;
in in {
{
options.${namespace}.system.fonts = with lib.types; { options.${namespace}.system.fonts = with lib.types; {
enable = mkEnableOption "system font management"; enable = mkEnableOption "system font management";
fonts = mkOption { fonts = mkOption {
@ -32,16 +30,13 @@ in
material-icons material-icons
material-design-icons material-design-icons
]; ];
example = [ example = [noto-fonts noto-fonts-emoji];
noto-fonts
noto-fonts-emoji
];
description = "Install additional font packages"; description = "Install additional font packages";
}; };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ font-manager ]; environment.systemPackages = with pkgs; [font-manager];
fonts.packages = cfg.fonts; fonts.packages = cfg.fonts;
}; };

View file

@ -3,14 +3,12 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf; inherit (lib) mkEnableOption mkIf;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.system.grub; cfg = config.${namespace}.system.grub;
in in {
{
options.${namespace}.system.grub = { options.${namespace}.system.grub = {
enable = mkEnableOption "the grub bootloader."; enable = mkEnableOption "the grub bootloader.";
}; };
@ -20,7 +18,7 @@ in
boot.loader.grub = { boot.loader.grub = {
enable = true; enable = true;
devices = [ "nodev" ]; devices = ["nodev"];
efiInstallAsRemovable = true; efiInstallAsRemovable = true;
efiSupport = true; efiSupport = true;

View file

@ -4,20 +4,16 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf; inherit (lib) mkEnableOption mkIf;
inherit (self) namespace; inherit (self) namespace;
inherit (self.lib) mkOpt; inherit (self.lib) mkOpt;
cfg = config.${namespace}.system.kernel; cfg = config.${namespace}.system.kernel;
in in {
{
options.${namespace}.system.kernel = { options.${namespace}.system.kernel = {
enable = mkEnableOption "Modify the standard kernel settings"; enable = mkEnableOption "Modify the standard kernel settings";
version = version = mkOpt lib.types.str "linuxPackages_latest" "Set the kernel version to be used by your system";
mkOpt lib.types.str "linuxPackages_latest"
"Set the kernel version to be used by your system";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -3,14 +3,12 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf mkOption; inherit (lib) mkEnableOption mkIf mkOption;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.system.locale; cfg = config.${namespace}.system.locale;
in in {
{
options.${namespace}.system.locale = { options.${namespace}.system.locale = {
enable = mkEnableOption "system locale tweaks."; enable = mkEnableOption "system locale tweaks.";

View file

@ -3,14 +3,12 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf; inherit (lib) mkEnableOption mkIf;
inherit (self) namespace; inherit (self) namespace;
cfg = config.${namespace}.system.networking; cfg = config.${namespace}.system.networking;
in in {
{
options.${namespace}.system.networking = { options.${namespace}.system.networking = {
enable = mkEnableOption "networking."; enable = mkEnableOption "networking.";
}; };

View file

@ -4,22 +4,18 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf types; inherit (lib) mkEnableOption mkIf types;
inherit (self) namespace; inherit (self) namespace;
inherit (self.lib) mkOpt; inherit (self.lib) mkOpt;
cfg = config.${namespace}.system.nix; cfg = config.${namespace}.system.nix;
in in {
{
options.${namespace}.system.nix = { options.${namespace}.system.nix = {
enable = mkEnableOption "Nix configuration overrides."; enable = mkEnableOption "Nix configuration overrides.";
use-lix = mkEnableOption "Lix as an alternative to CppNix."; use-lix = mkEnableOption "Lix as an alternative to CppNix.";
use-nixld = mkEnableOption "the use of dynamically linked executables on nix based systems."; use-nixld = mkEnableOption "the use of dynamically linked executables on nix based systems.";
trusted-users = mkOpt (types.listOf types.str) [ trusted-users = mkOpt (types.listOf types.str) ["@wheel"] "List of trusted users for this NixOS system.";
"@wheel"
] "List of trusted users for this NixOS system.";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -27,10 +23,7 @@ in
settings = { settings = {
auto-optimise-store = true; auto-optimise-store = true;
builders-use-substitutes = true; builders-use-substitutes = true;
experimental-features = [ experimental-features = ["nix-command" "flakes"];
"nix-command"
"flakes"
];
keep-derivations = true; keep-derivations = true;
keep-outputs = true; keep-outputs = true;
max-jobs = "auto"; max-jobs = "auto";

View file

@ -4,18 +4,16 @@
self, self,
config, config,
... ...
}: }: let
let
inherit (lib) mkEnableOption mkIf types; inherit (lib) mkEnableOption mkIf types;
inherit (self) namespace; inherit (self) namespace;
inherit (self.lib) mkOpt; inherit (self.lib) mkOpt;
cfg = config.${namespace}.system.shell; cfg = config.${namespace}.system.shell;
in in {
{
options.${namespace}.system.shell = { options.${namespace}.system.shell = {
enable = mkEnableOption "custom user shells."; enable = mkEnableOption "custom user shells.";
installed = mkOpt (types.listOf types.package) [ pkgs.fish ] "List of shell packages to install"; installed = mkOpt (types.listOf types.package) [pkgs.fish] "List of shell packages to install";
default = mkOpt types.str "fish" "Set a custom shell as the default for all users."; default = mkOpt types.str "fish" "Set a custom shell as the default for all users.";
}; };

View file

@ -5,14 +5,8 @@
config, config,
inputs, inputs,
... ...
}: }: let
let inherit (lib) types mkEnableOption mkOption mkIf;
inherit (lib)
types
mkEnableOption
mkOption
mkIf
;
inherit (self) namespace; inherit (self) namespace;
inherit (self.lib) dirToModuleList; inherit (self.lib) dirToModuleList;
@ -25,38 +19,25 @@ let
enable = mkEnableOption "this user."; enable = mkEnableOption "this user.";
isNormalUser = self.lib.mkBool true "Whether this user is considered a normal user."; isNormalUser = self.lib.mkBool true "Whether this user is considered a normal user.";
isSystemUser = self.lib.mkBool false "Whether this user is considered a system user."; isSystemUser = self.lib.mkBool false "Whether this user is considered a system user.";
initialPassword = initialPassword = self.lib.mkOpt (types.nullOr types.str) null "Plaintext insecure initial user password, only recommended for testing.";
self.lib.mkOpt (types.nullOr types.str) null password = self.lib.mkOpt (types.nullOr types.str) null "Plaintext insecure user password, only recommended for testing.";
"Plaintext insecure initial user password, only recommended for testing."; hashedPasswordFile = self.lib.mkOpt (types.nullOr types.str) null "Secure, hashed user password stored in a separate file, recommended for production.";
password = hashedPassword = self.lib.mkOpt (types.nullOr types.str) null "Secure, hashed password, stored in plaintext, fine to use.";
self.lib.mkOpt (types.nullOr types.str) null extraGroups = self.lib.mkOpt (types.listOf types.str) [] "List of additional groups this user belongs to.";
"Plaintext insecure user password, only recommended for testing.";
hashedPasswordFile =
self.lib.mkOpt (types.nullOr types.str) null
"Secure, hashed user password stored in a separate file, recommended for production.";
hashedPassword =
self.lib.mkOpt (types.nullOr types.str) null
"Secure, hashed password, stored in plaintext, fine to use.";
extraGroups =
self.lib.mkOpt (types.listOf types.str) [ ]
"List of additional groups this user belongs to.";
}; };
}; };
getHomeConfigPath = username: "${self.outPath}/homes/${system}/${username}"; getHomeConfigPath = username: "${self.outPath}/homes/${system}/${username}";
homeConfigExists = homeConfigExists = username: let
username: path = getHomeConfigPath username;
let in
path = getHomeConfigPath username;
in
builtins.pathExists "${path}/default.nix"; builtins.pathExists "${path}/default.nix";
homeModules = dirToModuleList "${self.outPath}/modules/home"; homeModules = dirToModuleList "${self.outPath}/modules/home";
in in {
{
options.${namespace}.users = mkOption { options.${namespace}.users = mkOption {
type = types.attrsOf userSubmodule; type = types.attrsOf userSubmodule;
default = { }; default = {};
description = "List of users to create. Also handles home configurations, placed in self.outPath/homes/[x86_64-linux, aarch64-linux, etc...], through home-manager."; description = "List of users to create. Also handles home configurations, placed in self.outPath/homes/[x86_64-linux, aarch64-linux, etc...], through home-manager.";
}; };
@ -66,21 +47,12 @@ in
# Manage users declaratively and map userConfig to users.users by name; # Manage users declaratively and map userConfig to users.users by name;
users.mutableUsers = false; users.mutableUsers = false;
users.users = lib.mapAttrs ( users.users = lib.mapAttrs (username: userConfig:
username: userConfig:
mkIf userConfig.enable { mkIf userConfig.enable {
name = username; name = username;
inherit (userConfig) inherit (userConfig) isNormalUser isSystemUser initialPassword hashedPasswordFile hashedPassword password extraGroups;
isNormalUser })
isSystemUser cfg;
initialPassword
hashedPasswordFile
hashedPassword
password
extraGroups
;
}
) cfg;
home-manager = { home-manager = {
useGlobalPkgs = true; useGlobalPkgs = true;
@ -91,24 +63,25 @@ in
namespace = self.namespace; namespace = self.namespace;
}; };
users = lib.mapAttrs ( users =
username: userConfig: lib.mapAttrs (
mkIf (userConfig.enable && homeConfigExists username) ( username: userConfig:
{ osConfig, ... }: mkIf (userConfig.enable && homeConfigExists username) (
{ {osConfig, ...}: {
# Import user home configuration and general home modules # Import user home configuration and general home modules
imports = [ imports = [
(getHomeConfigPath username) (getHomeConfigPath username)
inputs.sops-nix.homeManagerModules.sops inputs.sops-nix.homeManagerModules.sops
inputs.catppuccin.homeModules.default inputs.catppuccin.homeModules.default
inputs.nixcord.homeModules.nixcord inputs.nixcord.homeModules.nixcord
inputs.youtube-music.homeManagerModules.default inputs.youtube-music.homeManagerModules.default
] ++ homeModules; ] ++ homeModules;
home.stateVersion = lib.mkDefault osConfig.system.stateVersion; home.stateVersion = lib.mkDefault osConfig.system.stateVersion;
} }
)
) )
) cfg; cfg;
}; };
}; };
} }

View file

@ -1,11 +1,10 @@
{ pkgs, ... }: {pkgs, ...}: {
{
imports = [ imports = [
./hardware.nix ./hardware.nix
]; ];
# Setup Sops # Setup Sops
sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]; sops.age.sshKeyPaths = ["/etc/ssh/ssh_host_ed25519_key"];
sops.age.keyFile = "/var/lib/sops-nix/key.txt"; sops.age.keyFile = "/var/lib/sops-nix/key.txt";
sops.age.generateKey = true; sops.age.generateKey = true;
@ -13,10 +12,7 @@
users.cyn = { users.cyn = {
enable = true; enable = true;
hashedPassword = "$6$mvK9bT756Aok54Vt$vBRnT66Vb3HL0Y5rEMJlHvKkvzVQ.KUciInTmW3FCBFT00IuFMpz3q9RhXPLTLMRPho65bTg9hMnFPb84I774."; hashedPassword = "$6$mvK9bT756Aok54Vt$vBRnT66Vb3HL0Y5rEMJlHvKkvzVQ.KUciInTmW3FCBFT00IuFMpz3q9RhXPLTLMRPho65bTg9hMnFPb84I774.";
extraGroups = [ extraGroups = ["wheel" "docker"];
"wheel"
"docker"
];
}; };
archetypes.server.enable = true; archetypes.server.enable = true;

View file

@ -6,36 +6,26 @@
lib, lib,
modulesPath, modulesPath,
... ...
}: }: {
{
imports = [ imports = [
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "uas" "sd_mod"];
"xhci_pci" boot.initrd.kernelModules = [];
"ahci" boot.kernelModules = ["kvm-intel"];
"usbhid" boot.extraModulePackages = [];
"uas"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-uuid/5d4f9f57-085f-44a0-b987-bad24ff58769"; device = "/dev/disk/by-uuid/5d4f9f57-085f-44a0-b987-bad24ff58769";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=@" ]; options = ["subvol=@"];
}; };
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-uuid/8D0F-2821"; device = "/dev/disk/by-uuid/8D0F-2821";
fsType = "vfat"; fsType = "vfat";
options = [ options = ["fmask=0077" "dmask=0077"];
"fmask=0077"
"dmask=0077"
];
}; };
fileSystems."/mnt/storage" = { fileSystems."/mnt/storage" = {
@ -44,7 +34,7 @@
}; };
swapDevices = [ swapDevices = [
{ device = "/dev/disk/by-uuid/42fc926f-f066-48e8-8c07-3627b2ba3cd4"; } {device = "/dev/disk/by-uuid/42fc926f-f066-48e8-8c07-3627b2ba3cd4";}
]; ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
imports = [ imports = [
./hardware.nix ./hardware.nix
]; ];
@ -13,7 +12,7 @@
users.jo = { users.jo = {
enable = true; enable = true;
hashedPassword = "$6$mvK9bT756Aok54Vt$vBRnT66Vb3HL0Y5rEMJlHvKkvzVQ.KUciInTmW3FCBFT00IuFMpz3q9RhXPLTLMRPho65bTg9hMnFPb84I774."; hashedPassword = "$6$mvK9bT756Aok54Vt$vBRnT66Vb3HL0Y5rEMJlHvKkvzVQ.KUciInTmW3FCBFT00IuFMpz3q9RhXPLTLMRPho65bTg9hMnFPb84I774.";
extraGroups = [ "wheel" ]; extraGroups = ["wheel"];
}; };
archetypes.laptop.enable = true; archetypes.laptop.enable = true;

View file

@ -1,46 +1,31 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ { config, lib, modulesPath, ... }:
config,
lib,
modulesPath,
...
}:
{ {
imports = [ imports =
(modulesPath + "/installer/scan/not-detected.nix") [ (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = [ "xhci_pci" "vmd" "nvme" "usbhid" "rtsx_pci_sdmmc" ];
"xhci_pci"
"vmd"
"nvme"
"usbhid"
"rtsx_pci_sdmmc"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = { fileSystems."/" =
device = "/dev/disk/by-uuid/864b1287-89fd-4cc0-98a5-40a3caf804c6"; { device = "/dev/disk/by-uuid/864b1287-89fd-4cc0-98a5-40a3caf804c6";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=@" ]; options = [ "subvol=@" ];
}; };
boot.initrd.luks.devices."luks-5fd4fc76-d5c5-46c3-b952-1a7a7ff3a1fc".device = boot.initrd.luks.devices."luks-5fd4fc76-d5c5-46c3-b952-1a7a7ff3a1fc".device = "/dev/disk/by-uuid/5fd4fc76-d5c5-46c3-b952-1a7a7ff3a1fc";
"/dev/disk/by-uuid/5fd4fc76-d5c5-46c3-b952-1a7a7ff3a1fc";
fileSystems."/boot" = { fileSystems."/boot" =
device = "/dev/disk/by-uuid/2429-4141"; { device = "/dev/disk/by-uuid/2429-4141";
fsType = "vfat"; fsType = "vfat";
options = [ options = [ "fmask=0022" "dmask=0022" ];
"fmask=0022" };
"dmask=0022"
];
};
swapDevices = [ ]; swapDevices = [ ];