Compare commits

..

No commits in common. "f2d0e9239f93ef9d6e7cf60a76b04be8137edb98" and "9603b43f34e441b436a189999c6b4d6ad3b45e1b" have entirely different histories.

116 changed files with 1084 additions and 1605 deletions

View file

@ -3,21 +3,21 @@ let
# https://github.com/andir/npins?tab=readme-ov-file#using-the-nixpkgs-fetchers # https://github.com/andir/npins?tab=readme-ov-file#using-the-nixpkgs-fetchers
src = import ./npins; src = import ./npins;
pkgs = import src.nixpkgs { }; pkgs = import src.nixpkgs {};
sources = mapAttrs (k: v: v { inherit pkgs; }) src; sources = mapAttrs (k: v: v {inherit pkgs;}) src;
inherit (pkgs) lib; inherit (pkgs) lib;
inherit (lib.filesystem) listFilesRecursive; inherit (lib.filesystem) listFilesRecursive;
inherit (lib.strings) hasSuffix; inherit (lib.strings) hasSuffix;
mkSystem = mkSystem = system: hostname:
system: hostname:
import (src.nixpkgs + "/nixos/lib/eval-config.nix") { import (src.nixpkgs + "/nixos/lib/eval-config.nix") {
specialArgs = { specialArgs = {
inherit sources; inherit sources;
self = ./.; self = ./.;
}; };
modules = [ modules =
[
# This is used to pre-emptively set the hostPlatform for nixpkgs. # This is used to pre-emptively set the hostPlatform for nixpkgs.
# Also, we set the system hostname here. # Also, we set the system hostname here.
{ {
@ -27,10 +27,10 @@ let
./hosts/common.nix ./hosts/common.nix
./hosts/${hostname} ./hosts/${hostname}
] ]
++ ((listFilesRecursive ./modules) |> filter (hasSuffix ".mod.nix")); ++ ((listFilesRecursive ./modules)
|> filter (hasSuffix ".mod.nix"));
}; };
in in {
{
temperance = mkSystem "x86_64-linux" "temperance"; temperance = mkSystem "x86_64-linux" "temperance";
hermit = mkSystem "x86_64-linux" "hermit"; hermit = mkSystem "x86_64-linux" "hermit";
tower = mkSystem "aarch64-linux" "tower"; tower = mkSystem "aarch64-linux" "tower";

View file

@ -3,37 +3,64 @@
# No inputs, take this flakers # No inputs, take this flakers
outputs = outputs = _: let
_:
let
sources = import ./npins; sources = import ./npins;
nixpkgs = (import sources.flake-compat { src = sources.nixpkgs; }).outputs; nixpkgs = (import sources.flake-compat {src = sources.nixpkgs;}).outputs;
inherit (nixpkgs) lib; inherit (nixpkgs) lib;
eachSystem = lib.genAttrs (import sources.systems);
pkgsFor = nixpkgs.legacyPackages; pkgsFor = nixpkgs.legacyPackages;
inputs = sources; inputs = sources;
in in {
{
nixosConfigurations = import ./default.nix; nixosConfigurations = import ./default.nix;
packages = lib.mapAttrs (_: pkgs: { formatter = eachSystem (system: pkgsFor.${system}.alejandra);
packages =
lib.mapAttrs (
_: pkgs: {
inherit inherit
(import ./packages { (import ./packages {
inherit inputs pkgs sources; inherit inputs pkgs;
}) })
fish fish
helix helix
kakoune kakoune
nushell nushell
; ;
}) pkgsFor; }
devShells = lib.mapAttrs (_: pkgs: { )
pkgsFor;
devShells =
lib.mapAttrs (
_: pkgs: {
default = pkgs.mkShellNoCC { default = pkgs.mkShellNoCC {
packages = [ packages = [
(pkgs.callPackage (sources.npins + "/npins.nix") { }) (pkgs.callPackage (sources.npins + "/npins.nix") {})
]; ];
env.NPINS_OVERRIDE_nichts = "."; env.NPINS_OVERRIDE_nichts = ".";
}; };
}) pkgsFor; }
)
pkgsFor;
apps = eachSystem (system: let
inherit (inputs.self.packages.${system}) fish helix nushell;
in {
default = inputs.self.apps.${system}.nushell;
helix = {
type = "app";
program = "${helix}/bin/hx";
};
nushell = {
type = "app";
program = "${nushell}/bin/nu";
};
fish = {
type = "app";
program = "${fish}/bin/fish";
};
});
templates = import ./templates; templates = import ./templates;
}; };

View file

@ -6,19 +6,16 @@
lib, lib,
self, self,
pkgs, pkgs,
sources,
... ...
}: }: let
let
inherit (lib.meta) hiPrioSet; inherit (lib.meta) hiPrioSet;
helix = pkgs.callPackage (self + "/packages/helix") { inherit sources; }; helix = pkgs.callPackage (self + "/packages/helix") {};
fish = pkgs.callPackage (self + "/packages/fish") {};
fish = pkgs.callPackage (self + "/packages/fish") { inherit sources; }; in {
in
{
environment.systemPackages = environment.systemPackages =
builtins.attrValues { builtins.attrValues {
inherit (pkgs) inherit
(pkgs)
cachix cachix
calc calc
delta delta

View file

@ -3,8 +3,7 @@
nixpkgs, nixpkgs,
self, self,
... ...
}: }: let
let
inherit (builtins) filter map toString; inherit (builtins) filter map toString;
inherit (nixpkgs) lib; inherit (nixpkgs) lib;
inherit (lib.attrsets) recursiveUpdate; inherit (lib.attrsets) recursiveUpdate;
@ -15,18 +14,20 @@ let
# NOTE: This was inspired by raf, and I find this # NOTE: This was inspired by raf, and I find this
# to be quite a sane way of managing all modules in my flake. # to be quite a sane way of managing all modules in my flake.
mkSystem = mkSystem = {
{
system, system,
hostname, hostname,
... ...
}@args: } @ args:
nixosSystem { nixosSystem {
specialArgs = recursiveUpdate { specialArgs =
recursiveUpdate
{
inherit lib; inherit lib;
inputs = sources; inputs = sources;
inherit self; inherit self;
} args.specialArgs or { }; }
args.specialArgs or {};
modules = concatLists [ modules = concatLists [
# This is used to pre-emptively set the hostPlatform for nixpkgs. # This is used to pre-emptively set the hostPlatform for nixpkgs.
# Also, we set the system hostname here. # Also, we set the system hostname here.
@ -41,15 +42,20 @@ let
# common configuration, which all hosts share. # common configuration, which all hosts share.
(singleton ./common.nix) (singleton ./common.nix)
# Import all files called module.nix from my modules directory. # Import all files called module.nix from my modules directory.
(map toString (listFilesRecursive ../modules) |> filter (hasSuffix "module.nix")) (
(map toString (listFilesRecursive ../modules) |> filter (hasSuffix ".mod.nix")) map toString (listFilesRecursive ../modules)
|> filter (hasSuffix "module.nix")
)
(
map toString (listFilesRecursive ../modules)
|> filter (hasSuffix ".mod.nix")
)
] ]
|> flatten |> flatten
) )
]; ];
}; };
in in {
{
temperance = mkSystem { temperance = mkSystem {
system = "x86_64-linux"; system = "x86_64-linux";
hostname = "temperance"; hostname = "temperance";

View file

@ -2,8 +2,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
# Time Zone # Time Zone
time.timeZone = "Europe/Zurich"; time.timeZone = "Europe/Zurich";
# Select internationalisation properties. # Select internationalisation properties.

View file

@ -1,7 +1,6 @@
{ {
config = { config = {
boot.initrd.luks.devices."cryptroot".device = boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-uuid/10318654-ed20-43f6-885d-35366a427581";
"/dev/disk/by-uuid/10318654-ed20-43f6-885d-35366a427581";
fileSystems = { fileSystems = {
"/boot" = { "/boot" = {
device = "/dev/disk/by-uuid/5D7D-FC52"; device = "/dev/disk/by-uuid/5D7D-FC52";
@ -11,28 +10,17 @@
"/" = { "/" = {
device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e"; device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["compress=zstd" "noatime"];
"compress=zstd"
"noatime"
];
}; };
"/nix" = { "/nix" = {
device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e"; device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["subvol=nix" "compress=zstd" "noatime"];
"subvol=nix"
"compress=zstd"
"noatime"
];
}; };
"/home" = { "/home" = {
device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e"; device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["subvol=home" "compress=zstd" "noatime"];
"subvol=home"
"compress=zstd"
"noatime"
];
}; };
}; };
# swapDevices = [ # swapDevices = [

View file

@ -6,34 +6,21 @@
lib, lib,
modulesPath, modulesPath,
... ...
}: }: {
{
imports = [ imports = [
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot = { boot = {
initrd = { initrd = {
availableKernelModules = [ availableKernelModules = ["xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"];
"xhci_pci" kernelModules = [];
"ahci"
"nvme"
"usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
];
kernelModules = [ ];
}; };
kernelModules = [ "kvm-intel" ]; kernelModules = ["kvm-intel"];
blacklistedKernelModules = [ blacklistedKernelModules = ["nouveau" "nvidia" "nvidia_drm" "nvidia_modeset"];
"nouveau"
"nvidia"
"nvidia_drm"
"nvidia_modeset"
];
kernelParams = [ "mem_sleep_default=deep" ]; kernelParams = ["mem_sleep_default=deep"];
extraModulePackages = [ ]; extraModulePackages = [];
extraModprobeConfig = '' extraModprobeConfig = ''
blacklist nouveau blacklist nouveau
options nouveau modeset=0 options nouveau modeset=0

View file

@ -1 +1 @@
_: { imports = [ ./monitors.nix ]; } _: {imports = [./monitors.nix];}

View file

@ -3,10 +3,8 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
xanmod_custom = callPackage ./xanmod.nix; xanmod_custom = callPackage ./xanmod.nix;
in in {
{
boot.kernelPackages = xanmod_custom; boot.kernelPackages = xanmod_custom;
} }

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: let
let
# a newer nil version, for pipes support. # a newer nil version, for pipes support.
new-nil = pkgs.nil.overrideAttrs (_: { new-nil = pkgs.nil.overrideAttrs (_: {
version = "unstable-18-07-2025"; version = "unstable-18-07-2025";
@ -18,12 +17,13 @@ let
hash = "sha256-Sljr3ff8hl/qm/0wqc1GXsEr1wWn7NAXmdrd5wHzUX8="; hash = "sha256-Sljr3ff8hl/qm/0wqc1GXsEr1wWn7NAXmdrd5wHzUX8=";
}; };
}); });
in in {
{
environment.systemPackages = builtins.attrValues { environment.systemPackages = builtins.attrValues {
inherit (pkgs) inherit
(pkgs)
abook abook
aerc aerc
alejandra
aichat aichat
alsa-utils alsa-utils
anki anki

View file

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
# Time Zone # Time Zone
time.timeZone = "Europe/Zurich"; time.timeZone = "Europe/Zurich";
# Select internationalisation properties. # Select internationalisation properties.

View file

@ -1,7 +1,6 @@
{ {
config = { config = {
boot.initrd.luks.devices."cryptroot".device = boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-uuid/96e8f3d6-8d2d-4e2d-abd9-3eb7f48fed02";
"/dev/disk/by-uuid/96e8f3d6-8d2d-4e2d-abd9-3eb7f48fed02";
fileSystems = { fileSystems = {
"/boot" = { "/boot" = {
device = "/dev/disk/by-uuid/B3AC-9050"; device = "/dev/disk/by-uuid/B3AC-9050";
@ -11,49 +10,29 @@
"/" = { "/" = {
device = "none"; device = "none";
fsType = "tmpfs"; fsType = "tmpfs";
options = [ options = ["defaults" "size=40%" "mode=755"];
"defaults"
"size=40%"
"mode=755"
];
}; };
"/nix" = { "/nix" = {
device = "/dev/disk/by-uuid/f0569993-722e-4721-b0d9-8ac537a7a548"; device = "/dev/disk/by-uuid/f0569993-722e-4721-b0d9-8ac537a7a548";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["subvol=nix" "compress=zstd" "noatime"];
"subvol=nix"
"compress=zstd"
"noatime"
];
}; };
"/persist" = { "/persist" = {
device = "/dev/disk/by-uuid/f0569993-722e-4721-b0d9-8ac537a7a548"; device = "/dev/disk/by-uuid/f0569993-722e-4721-b0d9-8ac537a7a548";
neededForBoot = true; neededForBoot = true;
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["subvol=persist" "compress=zstd" "noatime"];
"subvol=persist"
"compress=zstd"
"noatime"
];
}; };
"/home" = { "/home" = {
device = "/dev/disk/by-uuid/f0569993-722e-4721-b0d9-8ac537a7a548"; device = "/dev/disk/by-uuid/f0569993-722e-4721-b0d9-8ac537a7a548";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["subvol=home" "compress=zstd" "noatime"];
"subvol=home"
"compress=zstd"
"noatime"
];
}; };
"/swap" = { "/swap" = {
device = "/dev/disk/by-uuid/f0569993-722e-4721-b0d9-8ac537a7a548"; device = "/dev/disk/by-uuid/f0569993-722e-4721-b0d9-8ac537a7a548";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["subvol=swap" "compress=lzo" "noatime"];
"subvol=swap"
"compress=lzo"
"noatime"
];
}; };
}; };
swapDevices = [ swapDevices = [

View file

@ -3,21 +3,14 @@
lib, lib,
modulesPath, modulesPath,
... ...
}: }: {
{ imports = [(modulesPath + "/installer/scan/not-detected.nix")];
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot = { boot = {
initrd.availableKernelModules = [ initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "sd_mod"];
"xhci_pci" initrd.kernelModules = [];
"ahci" kernelModules = [];
"nvme" extraModulePackages = [];
"usbhid"
"sd_mod"
];
initrd.kernelModules = [ ];
kernelModules = [ ];
extraModulePackages = [ ];
}; };
# 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
@ -28,5 +21,6 @@
# networking.interfaces.enp4s0.useDHCP = lib.mkDefault true; # networking.interfaces.enp4s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View file

@ -1 +1 @@
_: { imports = [ ./monitors.nix ]; } _: {imports = [./monitors.nix];}

View file

@ -3,10 +3,8 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
xanmod_custom = callPackage ./xanmod.nix; xanmod_custom = callPackage ./xanmod.nix;
in in {
{
boot.kernelPackages = xanmod_custom; boot.kernelPackages = xanmod_custom;
} }

View file

@ -1,10 +1,8 @@
{ lib, ... }: {lib, ...}: let
let
inherit (lib.kernel) no unset; inherit (lib.kernel) no unset;
inherit (lib.attrsets) mapAttrs; inherit (lib.attrsets) mapAttrs;
inherit (lib.modules) mkForce; inherit (lib.modules) mkForce;
in in {
{
boot.kernelPatches = [ boot.kernelPatches = [
{ {
name = "disable-unused-features"; name = "disable-unused-features";

View file

@ -4,8 +4,7 @@
buildLinux, buildLinux,
kernelPatches, kernelPatches,
... ...
}: }: let
let
pname = "linux-xanmod"; pname = "linux-xanmod";
version = "6.11.5"; version = "6.11.5";
vendorSuffix = "xanmod1"; vendorSuffix = "xanmod1";
@ -59,17 +58,17 @@ let
}; };
}) })
# 1:1 taken from raf's custom kernel, check out his config for this. # 1:1 taken from raf's custom kernel, check out his config for this.
.overrideAttrs .overrideAttrs (oa: {
(oa: { prePatch =
prePatch = oa.prePatch or "" + '' oa.prePatch or ""
+ ''
# bragging rights # bragging rights
echo "Replacing localversion with custom suffix" echo "Replacing localversion with custom suffix"
substituteInPlace localversion \ substituteInPlace localversion \
--replace-fail "xanmod1" "blox" --replace-fail "xanmod1" "blox"
''; '';
}); });
in in {
{
inherit inherit
xanmod_blox xanmod_blox
; ;

View file

@ -1,7 +1,7 @@
{ pkgs, ... }: {pkgs, ...}: {
{
environment.systemPackages = builtins.attrValues { environment.systemPackages = builtins.attrValues {
inherit (pkgs) inherit
(pkgs)
alsa-utils alsa-utils
anki anki
asciinema asciinema

View file

@ -2,8 +2,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
# Time Zone # Time Zone
time.timeZone = "Europe/Vienna"; time.timeZone = "Europe/Vienna";
# Select internationalisation properties. # Select internationalisation properties.

View file

@ -8,7 +8,7 @@
"/" = { "/" = {
device = "/dev/disk/by-uuid/3a781f2e-290a-4609-9035-a93374459def"; device = "/dev/disk/by-uuid/3a781f2e-290a-4609-9035-a93374459def";
fsType = "ext4"; fsType = "ext4";
options = [ "noatime" ]; options = ["noatime"];
}; };
}; };
} }

View file

@ -2,24 +2,19 @@
lib, lib,
modulesPath, modulesPath,
... ...
}: }: {
{
imports = [ imports = [
(modulesPath + "/profiles/qemu-guest.nix") (modulesPath + "/profiles/qemu-guest.nix")
]; ];
boot = { boot = {
initrd.availableKernelModules = [ initrd.availableKernelModules = ["xhci_pci" "virtio_scsi" "sr_mod"];
"xhci_pci" initrd.kernelModules = [];
"virtio_scsi" kernelModules = [];
"sr_mod" extraModulePackages = [];
];
initrd.kernelModules = [ ];
kernelModules = [ ];
extraModulePackages = [ ];
}; };
swapDevices = [ ]; swapDevices = [];
# 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
# (the default) this is the recommended approach. When using systemd-networkd it's # (the default) this is the recommended approach. When using systemd-networkd it's

View file

@ -1,7 +1,7 @@
{ pkgs, ... }: {pkgs, ...}: {
{
environment.systemPackages = builtins.attrValues { environment.systemPackages = builtins.attrValues {
inherit (pkgs) inherit
(pkgs)
; ;
}; };
} }

View file

@ -2,8 +2,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
# Time Zone # Time Zone
time.timeZone = "Europe/Zurich"; time.timeZone = "Europe/Zurich";
# Select internationalisation properties. # Select internationalisation properties.

View file

@ -1,7 +1,6 @@
{ {
config = { config = {
boot.initrd.luks.devices."cryptroot".device = boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-uuid/10318654-ed20-43f6-885d-35366a427581";
"/dev/disk/by-uuid/10318654-ed20-43f6-885d-35366a427581";
fileSystems = { fileSystems = {
"/boot" = { "/boot" = {
device = "/dev/disk/by-uuid/5D7D-FC52"; device = "/dev/disk/by-uuid/5D7D-FC52";
@ -11,28 +10,17 @@
"/" = { "/" = {
device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e"; device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["compress=zstd" "noatime"];
"compress=zstd"
"noatime"
];
}; };
"/nix" = { "/nix" = {
device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e"; device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["subvol=nix" "compress=zstd" "noatime"];
"subvol=nix"
"compress=zstd"
"noatime"
];
}; };
"/home" = { "/home" = {
device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e"; device = "/dev/disk/by-uuid/e353013b-8ac7-40ed-80f2-ddbea21b8d5e";
fsType = "btrfs"; fsType = "btrfs";
options = [ options = ["subvol=home" "compress=zstd" "noatime"];
"subvol=home"
"compress=zstd"
"noatime"
];
}; };
}; };
# swapDevices = [ # swapDevices = [

View file

@ -3,8 +3,7 @@
lib, lib,
modulesPath, modulesPath,
... ...
}: }: {
{
imports = [ imports = [
# (modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix") # (modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix")
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
@ -12,26 +11,14 @@
boot = { boot = {
initrd = { initrd = {
availableKernelModules = [ availableKernelModules = ["xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"];
"xhci_pci" kernelModules = [];
"ahci"
"nvme"
"usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
];
kernelModules = [ ];
}; };
kernelModules = [ "kvm-intel" ]; kernelModules = ["kvm-intel"];
blacklistedKernelModules = [ blacklistedKernelModules = ["nouveau" "nvidia" "nvidia_drm" "nvidia_modeset"];
"nouveau"
"nvidia"
"nvidia_drm"
"nvidia_modeset"
];
kernelParams = [ "mem_sleep_default=deep" ]; kernelParams = ["mem_sleep_default=deep"];
extraModulePackages = [ ]; extraModulePackages = [];
extraModprobeConfig = '' extraModprobeConfig = ''
blacklist nouveau blacklist nouveau
options nouveau modeset=0 options nouveau modeset=0

View file

@ -1 +1 @@
_: { imports = [ ./monitors.nix ]; } _: {imports = [./monitors.nix];}

View file

@ -2,10 +2,10 @@
self, self,
pkgs, pkgs,
... ...
}: }: {
{
environment.systemPackages = builtins.attrValues { environment.systemPackages = builtins.attrValues {
inherit (pkgs) inherit
(pkgs)
calc calc
comma comma
difftastic difftastic

View file

@ -1,18 +1,10 @@
{ lib, ... }: {lib, ...}: let
let
inherit (lib.options) mkOption; inherit (lib.options) mkOption;
inherit (lib.types) inherit (lib.types) submodule int ints number attrsOf;
submodule in {
int
ints
number
attrsOf
;
in
{
options.modules.system.hardware.monitors = mkOption { options.modules.system.hardware.monitors = mkOption {
description = "\n List of monitors to use\n "; description = "\n List of monitors to use\n ";
default = { }; default = {};
type = attrsOf (submodule { type = attrsOf (submodule {
options = { options = {
resolution = mkOption { resolution = mkOption {

View file

@ -2,26 +2,18 @@
config, config,
lib, lib,
... ...
}: }: let
let
inherit (builtins) elemAt; inherit (builtins) elemAt;
inherit (lib.options) mkOption mkEnableOption; inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) inherit (lib.types) enum listOf str nullOr bool;
enum
listOf
str
nullOr
bool
;
inherit (lib.lists) elem; inherit (lib.lists) elem;
inherit (config.modules.system) systemType; inherit (config.modules.system) systemType;
in in {
{
options.modules.system = { options.modules.system = {
users = mkOption { users = mkOption {
type = listOf str; type = listOf str;
default = [ "cr" ]; default = ["cr"];
description = "A list of users on the system."; description = "A list of users on the system.";
}; };
@ -35,11 +27,7 @@ in
}; };
systemType = mkOption { systemType = mkOption {
type = nullOr (enum [ type = nullOr (enum ["desktop" "laptop" "server"]);
"desktop"
"laptop"
"server"
]);
default = null; default = null;
description = '' description = ''
The type of the current system. This is used to determine whether things like graphical The type of the current system. This is used to determine whether things like graphical
@ -49,10 +37,7 @@ in
isGraphical = mkOption { isGraphical = mkOption {
type = bool; type = bool;
default = elem systemType [ default = elem systemType ["desktop" "laptop"];
"desktop"
"laptop"
];
description = '' description = ''
Whether the current system is a graphical system. Whether the current system is a graphical system.
''; '';
@ -61,10 +46,7 @@ in
yubikeySupport = { yubikeySupport = {
enable = mkEnableOption "yubikey support"; enable = mkEnableOption "yubikey support";
deviceType = mkOption { deviceType = mkOption {
type = nullOr (enum [ type = nullOr (enum ["NFC5" "nano"]);
"NFC5"
"nano"
]);
default = null; default = null;
description = "A list of device models to enable Yubikey support for"; description = "A list of device models to enable Yubikey support for";
}; };
@ -94,7 +76,7 @@ in
enable = mkEnableOption "printing"; enable = mkEnableOption "printing";
extraDrivers = mkOption { extraDrivers = mkOption {
type = listOf str; type = listOf str;
default = [ ]; default = [];
description = "A list of extra drivers to enable for printing"; description = "A list of extra drivers to enable for printing";
}; };
}; };

View file

@ -1,9 +1,7 @@
{ lib, ... }: {lib, ...}: let
let
inherit (lib.types) str enum; inherit (lib.types) str enum;
inherit (lib.options) mkEnableOption mkOption; inherit (lib.options) mkEnableOption mkOption;
in in {
{
options.modules.system.programs = { options.modules.system.programs = {
editors = { editors = {
helix.enable = mkEnableOption "Helix text editor"; helix.enable = mkEnableOption "Helix text editor";
@ -29,42 +27,23 @@ in
}; };
default = { default = {
terminal = mkOption { terminal = mkOption {
type = enum [ type = enum ["foot" "kitty"];
"foot"
"kitty"
];
default = "foot"; default = "foot";
}; };
fileManager = mkOption { fileManager = mkOption {
type = enum [ type = enum ["thunar" "dolphin" "nemo"];
"thunar"
"dolphin"
"nemo"
];
default = "thunar"; default = "thunar";
}; };
browser = mkOption { browser = mkOption {
type = enum [ type = enum ["firefox" "librewolf" "chromium"];
"firefox"
"librewolf"
"chromium"
];
default = "firefox"; default = "firefox";
}; };
editor = mkOption { editor = mkOption {
type = enum [ type = enum ["neovim" "helix" "emacs"];
"neovim"
"helix"
"emacs"
];
default = "emacs"; default = "emacs";
}; };
launcher = mkOption { launcher = mkOption {
type = enum [ type = enum ["anyrun" "rofi" "wofi"];
"anyrun"
"rofi"
"wofi"
];
default = "anyrun"; default = "anyrun";
}; };
}; };

View file

@ -1,8 +1,7 @@
{ pkgs, ... }: {pkgs, ...}: let
let key =
key = pkgs.writeText "signingkey" "ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAAWEDj/Yib6Mqs016jx7rtecWpytwfVl28eoHtPYCM9TVLq81VIHJSN37lbkc/JjiXCdIJy2Ta3A3CVV5k3Z37NbgAu23oKA2OcHQNaRTLtqWlcBf9fk9suOkP1A3NzAqzivFpBnZm3ytaXwU8LBJqxOtNqZcFVruO6fZxJtg2uE34mAw=="; pkgs.writeText "signingkey" "ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAAWEDj/Yib6Mqs016jx7rtecWpytwfVl28eoHtPYCM9TVLq81VIHJSN37lbkc/JjiXCdIJy2Ta3A3CVV5k3Z37NbgAu23oKA2OcHQNaRTLtqWlcBf9fk9suOkP1A3NzAqzivFpBnZm3ytaXwU8LBJqxOtNqZcFVruO6fZxJtg2uE34mAw==";
in in {
{
programs.git = { programs.git = {
enable = true; enable = true;
lfs.enable = true; lfs.enable = true;

View file

@ -1,9 +1,7 @@
{ lib, ... }: {lib, ...}: let
let
inherit (lib.options) mkOption; inherit (lib.options) mkOption;
inherit (lib.types) str; inherit (lib.types) str;
in in {
{
options.modules.other.system = { options.modules.other.system = {
username = mkOption { username = mkOption {
description = "username for this system"; description = "username for this system";

View file

@ -4,20 +4,18 @@
pkgs, pkgs,
self, self,
... ...
}: }: let
let
inherit (builtins) elemAt; inherit (builtins) elemAt;
inherit (lib.options) mkOption; inherit (lib.options) mkOption;
inherit (lib.types) listOf str package; inherit (lib.types) listOf str package;
inherit (config.meta.mainUser) username; inherit (config.meta.mainUser) username;
nushell = pkgs.callPackage (self + "/packages/nushell") { }; nushell = pkgs.callPackage (self + "/packages/nushell") {};
in in {
{
options.meta = { options.meta = {
users = mkOption { users = mkOption {
type = listOf str; type = listOf str;
default = [ "cr" ]; default = ["cr"];
description = '' description = ''
A list of users on a system. A list of users on a system.
''; '';

View file

@ -2,8 +2,7 @@
config, config,
pkgs, pkgs,
... ...
}: }: let
let
inherit (config.meta.mainUser) username; inherit (config.meta.mainUser) username;
primary_browser = "Librewolf.desktop"; primary_browser = "Librewolf.desktop";
@ -14,10 +13,9 @@ let
text_editor = "helix.desktop"; text_editor = "helix.desktop";
terminal = "foot.desktop"; terminal = "foot.desktop";
pdf_viewer = "zathura.desktop"; pdf_viewer = "zathura.desktop";
in in {
{
environment = { environment = {
systemPackages = [ pkgs.xdg-utils ]; systemPackages = [pkgs.xdg-utils];
variables = { variables = {
TERMINAL = "${terminal}"; TERMINAL = "${terminal}";
XDG_CACHE_HOME = "/home/${username}/.config"; XDG_CACHE_HOME = "/home/${username}/.config";
@ -31,43 +29,43 @@ in
mime = { mime = {
enable = true; enable = true;
defaultApplications = { defaultApplications = {
"text/html" = [ primary_browser ]; "text/html" = [primary_browser];
"x-scheme-handler/http" = [ primary_browser ]; "x-scheme-handler/http" = [primary_browser];
"x-scheme-handler/https" = [ primary_browser ]; "x-scheme-handler/https" = [primary_browser];
"x-scheme-handler/about" = [ primary_browser ]; "x-scheme-handler/about" = [primary_browser];
"x-scheme-handler/unknown" = [ primary_browser ]; "x-scheme-handler/unknown" = [primary_browser];
"x-scheme-handler/mailto" = [ mail_client ]; "x-scheme-handler/mailto" = [mail_client];
"message/rfc822" = [ mail_client ]; "message/rfc822" = [mail_client];
"x-scheme-handler/mid" = [ mail_client ]; "x-scheme-handler/mid" = [mail_client];
"inode/directory" = [ file_manager ]; "inode/directory" = [file_manager];
"audio/mp3" = [ media_player ]; "audio/mp3" = [media_player];
"audio/ogg" = [ media_player ]; "audio/ogg" = [media_player];
"audio/mpeg" = [ media_player ]; "audio/mpeg" = [media_player];
"audio/aac" = [ media_player ]; "audio/aac" = [media_player];
"audio/opus" = [ media_player ]; "audio/opus" = [media_player];
"audio/wav" = [ media_player ]; "audio/wav" = [media_player];
"audio/webm" = [ media_player ]; "audio/webm" = [media_player];
"audio/3gpp" = [ media_player ]; "audio/3gpp" = [media_player];
"audio/3gpp2" = [ media_player ]; "audio/3gpp2" = [media_player];
"video/mp4" = [ media_player ]; "video/mp4" = [media_player];
"video/x-msvideo" = [ media_player ]; "video/x-msvideo" = [media_player];
"video/mpeg" = [ media_player ]; "video/mpeg" = [media_player];
"video/ogg" = [ media_player ]; "video/ogg" = [media_player];
"video/mp2t" = [ media_player ]; "video/mp2t" = [media_player];
"video/webm" = [ media_player ]; "video/webm" = [media_player];
"video/3gpp" = [ media_player ]; "video/3gpp" = [media_player];
"video/3gpp2" = [ media_player ]; "video/3gpp2" = [media_player];
"image/png" = [ image_viewer ]; "image/png" = [image_viewer];
"image/jpeg" = [ image_viewer ]; "image/jpeg" = [image_viewer];
"image/gif" = [ image_viewer ]; "image/gif" = [image_viewer];
"image/avif" = [ image_viewer ]; "image/avif" = [image_viewer];
"image/bmp" = [ image_viewer ]; "image/bmp" = [image_viewer];
"image/vnd.microsoft.icon" = [ image_viewer ]; "image/vnd.microsoft.icon" = [image_viewer];
"image/svg+xml" = [ image_viewer ]; "image/svg+xml" = [image_viewer];
"image/tiff" = [ image_viewer ]; "image/tiff" = [image_viewer];
"image/webp" = [ image_viewer ]; "image/webp" = [image_viewer];
"text/plain" = [ text_editor ]; "text/plain" = [text_editor];
"application/pdf" = [ pdf_viewer ]; "application/pdf" = [pdf_viewer];
}; };
}; };
}; };

View file

@ -1,13 +0,0 @@
{
pkgs,
sources,
...
}:
let
nixfmt = pkgs.callPackage "${sources.nixfmt}/default.nix" { };
in
{
environment.systemPackages = [
nixfmt
];
}

View file

@ -3,11 +3,10 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
toml = pkgs.formats.toml { }; toml = pkgs.formats.toml {};
jj-config = toml.generate "config.toml" { jj-config = toml.generate "config.toml" {
user = { user = {
name = "Bloxx12"; name = "Bloxx12";
@ -15,20 +14,11 @@ let
}; };
ui = { ui = {
pager = [ pager = ["${getExe pkgs.bat}" "--plain"];
"${getExe pkgs.bat}"
"--plain"
];
default-command = "log"; default-command = "log";
movement.edit = true; movement.edit = true;
diff.tool = [ diff.tool = ["${getExe pkgs.difftastic}" "--color" "always" "$left" "$right"];
"${getExe pkgs.difftastic}"
"--color"
"always"
"$left"
"$right"
];
}; };
# FIXME: do this with agenix # FIXME: do this with agenix
# "--scope" = [ # "--scope" = [
@ -54,52 +44,26 @@ let
signing = { signing = {
behaviour = "own"; behaviour = "own";
backend = "ssh"; backend = "ssh";
key = [ key = ["ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAAWEDj/Yib6Mqs016jx7rtecWpytwfVl28eoHtPYCM9TVLq81VIHJSN37lbkc/JjiXCdIJy2Ta3A3CVV5k3Z37NbgAu23oKA2OcHQNaRTLtqWlcBf9fk9suOkP1A3NzAqzivFpBnZm3ytaXwU8LBJqxOtNqZcFVruO6fZxJtg2uE34mAw=="];
"ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAAWEDj/Yib6Mqs016jx7rtecWpytwfVl28eoHtPYCM9TVLq81VIHJSN37lbkc/JjiXCdIJy2Ta3A3CVV5k3Z37NbgAu23oKA2OcHQNaRTLtqWlcBf9fk9suOkP1A3NzAqzivFpBnZm3ytaXwU8LBJqxOtNqZcFVruO6fZxJtg2uE34mAw=="
];
}; };
aliases = { aliases = {
c = [ "commit" ]; c = ["commit"];
ci = [ ci = ["commit" "--interactive"];
"commit"
"--interactive"
];
e = [ "edit" ]; e = ["edit"];
# "new bookmark" # "new bookmark"
nb = [ nb = ["bookmark" "create" "-r @-"];
"bookmark"
"create"
"-r @-"
];
pull = [ pull = ["git" "fetch"];
"git" push = ["git" "push" "--allow-new"];
"fetch"
];
push = [
"git"
"push"
"--allow-new"
];
r = [ "rebase" ]; r = ["rebase"];
s = [ "squash" ]; s = ["squash"];
si = [ si = ["squash" "--interactive"];
"squash"
"--interactive"
];
tug = [ tug = ["bookmark" "move" "--from" "closest_bookmark(@-)" "--to" "@-"];
"bookmark"
"move"
"--from"
"closest_bookmark(@-)"
"--to"
"@-"
];
}; };
revset-aliases = { revset-aliases = {
"closest_bookmark(to)" = "heads(::to & bookmarks())"; "closest_bookmark(to)" = "heads(::to & bookmarks())";
@ -125,15 +89,14 @@ let
jj-wrapped = pkgs.symlinkJoin { jj-wrapped = pkgs.symlinkJoin {
name = "jj-wrapped"; name = "jj-wrapped";
paths = [ pkgs.jj ]; paths = [pkgs.jj];
nativeBuildInputs = [ pkgs.makeWrapper ]; nativeBuildInputs = [pkgs.makeWrapper];
postBuild = '' postBuild = ''
wrapProgram $out/bin/mako --add-flags "\ wrapProgram $out/bin/mako --add-flags "\
--config ${jj-config} --config ${jj-config}
''; '';
}; };
in in {
{
# environment.systemPackages = [jj-wrapped]; # environment.systemPackages = [jj-wrapped];
} }

View file

@ -4,17 +4,15 @@
pkgs, pkgs,
sources, sources,
... ...
}: }: let
let
cfg = config.modules.programs.nh; cfg = config.modules.programs.nh;
inherit (config.modules.other.system) username; inherit (config.modules.other.system) username;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
nh = (pkgs.callPackage "${sources.nh}/package.nix" { }).overrideAttrs (_: { nh = (pkgs.callPackage "${sources.nh}/package.nix" {}).overrideAttrs (_: {
doInstallCheck = false; doInstallCheck = false;
}); });
in in {
{
options.modules.programs.nh.enable = mkEnableOption "nh"; options.modules.programs.nh.enable = mkEnableOption "nh";
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -3,26 +3,25 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (config.modules.system) isGraphical; inherit (config.modules.system) isGraphical;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
bitwarden-desktop-wrapped = pkgs.symlinkJoin { bitwarden-desktop-wrapped = pkgs.symlinkJoin {
name = "bitwarden-desktop-wrapped"; name = "bitwarden-desktop-wrapped";
paths = [ pkgs.bitwarden-desktop ]; paths = [pkgs.bitwarden-desktop];
nativeBuildInputs = [ pkgs.makeWrapper ]; nativeBuildInputs = [pkgs.makeWrapper];
postBuild = '' postBuild = ''
wrapProgram $out/bin/bitwarden --set \ wrapProgram $out/bin/bitwarden --set \
BITWARDEN_SSH_AUTH_SOCK /run/user/1000/ssh-agent.sock BITWARDEN_SSH_AUTH_SOCK /run/user/1000/ssh-agent.sock
''; '';
}; };
in in {
{
config = mkIf isGraphical { config = mkIf isGraphical {
environment = { environment = {
systemPackages = lib.attrValues { systemPackages = lib.attrValues {
inherit (pkgs) inherit
(pkgs)
bitwarden-cli bitwarden-cli
; ;
inherit bitwarden-desktop-wrapped; inherit bitwarden-desktop-wrapped;

View file

@ -2,8 +2,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.lists) map; inherit (lib.lists) map;
inherit (lib.strings) concatStringsSep; inherit (lib.strings) concatStringsSep;
@ -21,15 +20,16 @@ let
brave-wrapped = pkgs.symlinkJoin { brave-wrapped = pkgs.symlinkJoin {
name = "brave"; name = "brave";
paths = [ paths = [
(pkgs.brave.override { vulkanSupport = true; }) (
pkgs.brave.override {vulkanSupport = true;}
)
]; ];
nativeBuildInputs = [ pkgs.makeWrapper ]; nativeBuildInputs = [pkgs.makeWrapper];
postBuild = '' postBuild = ''
wrapProgram $out/bin/brave --append-flags "${flags}" wrapProgram $out/bin/brave --append-flags "${flags}"
''; '';
}; };
in in {
{
environment.systemPackages = [ environment.systemPackages = [
brave-wrapped brave-wrapped
]; ];

View file

@ -3,17 +3,15 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (config.modules.system) isGraphical; inherit (config.modules.system) isGraphical;
in in {
{
config = mkIf isGraphical { config = mkIf isGraphical {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
kdePackages.dolphin kdePackages.dolphin
kdePackages.kio-fuse # to mount remote filesystems via FUSE kdePackages.kio-fuse #to mount remote filesystems via FUSE
kdePackages.kio-extras # extra protocols support (sftp, fish and more) kdePackages.kio-extras #extra protocols support (sftp, fish and more)
]; ];
}; };
} }

View file

@ -3,16 +3,14 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (config.meta.mainUser) username; inherit (config.meta.mainUser) username;
cfg = config.modules.system.programs.terminals.foot; cfg = config.modules.system.programs.terminals.foot;
theme-colors = config.modules.style.colorScheme.colors; theme-colors = config.modules.style.colorScheme.colors;
foot-config = pkgs.writeText "foot.ini" ( foot-config = pkgs.writeText "foot.ini" (lib.generators.toINI {} {
lib.generators.toINI { } {
main = { main = {
term = "xterm-256color"; term = "xterm-256color";
app-id = "foot"; app-id = "foot";
@ -125,19 +123,17 @@ let
alpha = 0.9; alpha = 0.9;
}; };
} });
);
foot-wrapped = pkgs.symlinkJoin { foot-wrapped = pkgs.symlinkJoin {
name = "foot-wrapped"; name = "foot-wrapped";
paths = [ pkgs.foot ]; paths = [pkgs.foot];
nativeBuildInputs = [ pkgs.makeWrapper ]; nativeBuildInputs = [pkgs.makeWrapper];
postBuild = '' postBuild = ''
wrapProgram $out/bin/foot --add-flags "--config=${foot-config} --working-directory=/home/${username}" wrapProgram $out/bin/foot --add-flags "--config=${foot-config} --working-directory=/home/${username}"
''; '';
}; };
in in {
{
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ foot-wrapped ]; environment.systemPackages = [foot-wrapped];
}; };
} }

View file

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.lists) elem; inherit (lib.lists) elem;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.attrsets) mapAttrsToList; inherit (lib.attrsets) mapAttrsToList;
@ -16,16 +15,9 @@ let
# Shell integration for ghostty only supports # Shell integration for ghostty only supports
# bash, fish and zsh for now. # bash, fish and zsh for now.
shell-integration = shell-integration =
if if elem name ["bash" "fish" "zsh"]
elem name [ then name
"bash" else "none";
"fish"
"zsh"
]
then
name
else
"none";
ghostty-settings = { ghostty-settings = {
font-size = 14; font-size = 14;
@ -61,21 +53,17 @@ let
command = getExe package; command = getExe package;
}; };
settingsFile = settingsFile = pkgs.writeText "config" <| concatStringsSep "\n" <| mapAttrsToList (name: value: "${name} = ${toString value}") ghostty-settings;
pkgs.writeText "config"
<| concatStringsSep "\n"
<| mapAttrsToList (name: value: "${name} = ${toString value}") ghostty-settings;
ghostty-wrapped = pkgs.symlinkJoin { ghostty-wrapped = pkgs.symlinkJoin {
name = "ghostty-wrapped"; name = "ghostty-wrapped";
paths = [ pkgs.ghostty ]; paths = [pkgs.ghostty];
nativeBuildInputs = [ pkgs.makeWrapper ]; nativeBuildInputs = [pkgs.makeWrapper];
postBuild = '' postBuild = ''
wrapProgram $out/bin/ghostty --add-flags "--config-file=${settingsFile}" wrapProgram $out/bin/ghostty --add-flags "--config-file=${settingsFile}"
''; '';
}; };
in in {
{
environment.systemPackages = builtins.attrValues { environment.systemPackages = builtins.attrValues {
inherit ghostty-wrapped; inherit ghostty-wrapped;
}; };

View file

@ -3,20 +3,18 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
cfg = config.modules.programs.minecraft; cfg = config.modules.programs.minecraft;
in in {
{
options.modules.programs.minecraft = { options.modules.programs.minecraft = {
enable = mkEnableOption "minecraft"; enable = mkEnableOption "minecraft";
wayland = mkEnableOption "wayland"; wayland = mkEnableOption "wayland";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.prismlauncher ]; environment.systemPackages = [pkgs.prismlauncher];
}; };
} }

View file

@ -1,6 +1,6 @@
{ pkgs, ... }: {pkgs, ...}: {
{ environment.systemPackages =
environment.systemPackages = [ [
pkgs.spotify pkgs.spotify
] ]
++ (with pkgs; [ ++ (with pkgs; [

View file

@ -3,14 +3,12 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.system.programs.steam; cfg = config.modules.system.programs.steam;
in in {
{
options.modules.system.programs.steam.enable = mkEnableOption "Steam games platform"; options.modules.system.programs.steam.enable = mkEnableOption "Steam games platform";
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.steam = { programs.steam = {
@ -21,15 +19,14 @@ in
SDL_VIDEODRIVER = "x11"; SDL_VIDEODRIVER = "x11";
}; };
extraLibraries = extraLibraries = p:
p:
builtins.attrValues { builtins.attrValues {
inherit (p) atk; inherit (p) atk;
}; };
}; };
gamescopeSession.enable = true; gamescopeSession.enable = true;
extraCompatPackages = [ pkgs.proton-ge-bin.steamcompattool ]; extraCompatPackages = [pkgs.proton-ge-bin.steamcompattool];
}; };
# See # See
# https://wiki.nixos.org/wiki/GameMode # https://wiki.nixos.org/wiki/GameMode

View file

@ -3,19 +3,18 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.programs.thunar; cfg = config.modules.programs.thunar;
in in {
{
options.modules.programs.thunar.enable = mkEnableOption "Thunar file manager"; options.modules.programs.thunar.enable = mkEnableOption "Thunar file manager";
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.thunar = { programs.thunar = {
enable = true; enable = true;
plugins = builtins.attrValues { plugins = builtins.attrValues {
inherit (pkgs.xfce) inherit
(pkgs.xfce)
thunar-volman thunar-volman
thunar-vcs-plugin thunar-vcs-plugin
thunar-archive-plugin thunar-archive-plugin

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
config = { config = {
programs.direnv = { programs.direnv = {
enable = true; enable = true;

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
programs = { programs = {
# We have to disable this and use nix-index instead. (Rust >>> Pearl) # We have to disable this and use nix-index instead. (Rust >>> Pearl)
command-not-found = { command-not-found = {

View file

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
@ -34,16 +33,15 @@ let
btop-wrapped = pkgs.symlinkJoin { btop-wrapped = pkgs.symlinkJoin {
name = "btop-wrapped"; name = "btop-wrapped";
paths = [ btop-no-desktop-entry ]; paths = [btop-no-desktop-entry];
nativeBuildInputs = [ pkgs.makeWrapper ]; nativeBuildInputs = [pkgs.makeWrapper];
postBuild = '' postBuild = ''
wrapProgram $out/bin/btop --set XDG_CONFIG_HOME "${btop-settings}" wrapProgram $out/bin/btop --set XDG_CONFIG_HOME "${btop-settings}"
''; '';
}; };
in in {
{
options.modules.programs.btop.enable = mkEnableOption "btop"; options.modules.programs.btop.enable = mkEnableOption "btop";
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ btop-wrapped ]; environment.systemPackages = [btop-wrapped];
}; };
} }

View file

@ -1,16 +1,14 @@
{ pkgs, ... }: {pkgs, ...}: let
let
zellij-wrapped = pkgs.symlinkJoin { zellij-wrapped = pkgs.symlinkJoin {
name = "zellij-wrapped"; name = "zellij-wrapped";
paths = [ pkgs.zellij ]; paths = [pkgs.zellij];
nativeBuildInputs = [ pkgs.makeWrapper ]; nativeBuildInputs = [pkgs.makeWrapper];
postBuild = '' postBuild = ''
wrapProgram $out/bin/zellij --add-flags "\ wrapProgram $out/bin/zellij --add-flags "\
--config ${./config.kdl}" --config ${./config.kdl}"
''; '';
}; };
in in {
{
environment.systemPackages = builtins.attrValues { environment.systemPackages = builtins.attrValues {
inherit zellij-wrapped; inherit zellij-wrapped;
}; };

View file

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
mkAcmeCert = domain: { mkAcmeCert = domain: {
# An acme system user is created. This user belongs to the acme group # An acme system user is created. This user belongs to the acme group
# and the home directory is /var/lib/acme. This user will try to make the directory # and the home directory is /var/lib/acme. This user will try to make the directory
@ -16,8 +15,7 @@ let
email = "charlie@charlieroot.dev"; email = "charlie@charlieroot.dev";
group = "nginx"; group = "nginx";
}; };
in in {
{
security.acme = { security.acme = {
acceptTerms = true; acceptTerms = true;
defaults = { defaults = {

View file

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (pkgs) fetchurl; inherit (pkgs) fetchurl;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
@ -17,8 +16,7 @@ let
img = ./img; img = ./img;
dataDir = "/srv/data/forgejo"; dataDir = "/srv/data/forgejo";
dumpDir = "/srv/data/forgejo-dump"; dumpDir = "/srv/data/forgejo-dump";
in in {
{
options.modules.system.services.forgejo.enable = mkEnableOption "forgejo"; options.modules.system.services.forgejo.enable = mkEnableOption "forgejo";
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -52,7 +50,7 @@ in
group = "git"; group = "git";
isSystemUser = true; isSystemUser = true;
}; };
users.groups.git = { }; users.groups.git = {};
services.forgejo = { services.forgejo = {
enable = true; enable = true;
@ -115,8 +113,7 @@ in
}; };
}; };
systemd.tmpfiles.rules = systemd.tmpfiles.rules = let
let
# no crawlers, thank you. # no crawlers, thank you.
robots = pkgs.writeText "robots-txt" '' robots = pkgs.writeText "robots-txt" ''
User-agent: * User-agent: *
@ -134,8 +131,7 @@ in
url = "https://codeberg.org/Codeberg-Infrastructure/forgejo/raw/branch/codeberg-10/web_src/css/themes/theme-codeberg-dark.css"; url = "https://codeberg.org/Codeberg-Infrastructure/forgejo/raw/branch/codeberg-10/web_src/css/themes/theme-codeberg-dark.css";
hash = "sha256-KyXznH49koRGlzIDDqagN4PvFGD/zCX//wrctmtfgBs="; hash = "sha256-KyXznH49koRGlzIDDqagN4PvFGD/zCX//wrctmtfgBs=";
}; };
in in [
[
"d '${customDir}/public' 0750 ${user} ${group} - -" "d '${customDir}/public' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets' 0750 ${user} ${group} - -" "d '${customDir}/public/assets' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets/img' 0750 ${user} ${group} - -" "d '${customDir}/public/assets/img' 0750 ${user} ${group} - -"

View file

@ -7,10 +7,49 @@
<h1 class="ui icon header title"> <h1 class="ui icon header title">
{{AppDisplayName}} {{AppDisplayName}}
</h1> </h1>
<h2>{{ctx.Locale.Tr "startpage.app_desc"}}</h2> <h2>A very painful Git service</h2>
</div> </div>
</div> </div>
</div> </div>
{{template "home_forgejo" .}} <div class="ui stackable middle very relaxed page grid">
<div class="eight wide center column">
<h1 class="hero ui icon header stackable">
<img class="logo" width="100" height="100" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{ctx.Locale.Tr "logo"}}">
<p>Made with copious amounts of caffeeine</p>
</h1>
<p class="large">
<b>TODO</b>: Write some funny text here
</p>
</div>
<div class="eight wide center column stackable">
<h1 class="hero ui icon header">
<img class="logo" width="100" height="100" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{ctx.Locale.Tr "logo"}}">
<p><it>I hate it here</it></p>
</h1>
<p class="large">
Bottom text
</p>
</div>
</div>
<div class="ui stackable middle very relaxed page grid">
<div class="eight wide center column">
<h1 class="hero ui icon header stackable">
<img class="logo" width="100" height="100" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{ctx.Locale.Tr "logo"}}">
<p>Is this the real life?</p>
</h1>
<p class="large">
Something something fuck poettering
</p>
</div>
<div class="eight wide center column stackable">
<h1 class="hero ui icon header">
<img class="logo" width="100" height="100" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{ctx.Locale.Tr "logo"}}">
<p>Open source or something</p>
</h1>
<p class="large">
I forgor
</p>
</div>
</div>
</div> </div>
{{template "base/footer" .}} {{template "base/footer" .}}

View file

@ -1,36 +0,0 @@
<div class="ui stackable middle very relaxed page grid">
<div class="eight wide center column">
<h1 class="hero ui icon header">
{{svg "octicon-flame"}} {{ctx.Locale.Tr "startpage.install"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.install_desc" "https://forgejo.org/download/#installation-from-binary" "https://forgejo.org/download/#container-image" "https://forgejo.org/download"}}
</p>
</div>
<div class="eight wide center column">
<h1 class="hero ui icon header">
{{svg "octicon-device-desktop"}} {{ctx.Locale.Tr "startpage.platform"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.platform_desc"}}
</p>
</div>
</div>
<div class="ui stackable middle very relaxed page grid">
<div class="eight wide center column">
<h1 class="hero ui icon header">
{{svg "octicon-rocket"}} {{ctx.Locale.Tr "startpage.lightweight"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.lightweight_desc"}}
</p>
</div>
<div class="eight wide center column">
<h1 class="hero ui icon header">
{{svg "octicon-code"}} {{ctx.Locale.Tr "startpage.license"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.license_desc" "https://forgejo.org/download" "https://codeberg.org/forgejo/forgejo"}}
</p>
</div>
</div>

View file

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (builtins) fetchurl; inherit (builtins) fetchurl;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
@ -12,12 +11,11 @@ let
cfg = config.modules.system.services.grafana; cfg = config.modules.system.services.grafana;
domain = "info.copeberg.org"; domain = "info.copeberg.org";
port = 4021; port = 4021;
in in {
{
options.modules.system.services.grafana.enable = mkEnableOption "Grafana, a graphing service"; options.modules.system.services.grafana.enable = mkEnableOption "Grafana, a graphing service";
config = mkIf cfg.enable { config = mkIf cfg.enable {
networking.firewall.allowedTCPPorts = [ config.services.grafana.settings.server.http_port ]; networking.firewall.allowedTCPPorts = [config.services.grafana.settings.server.http_port];
modules.system.services.database.postgresql.enable = true; modules.system.services.database.postgresql.enable = true;

View file

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.meta) getExe getExe'; inherit (lib.meta) getExe getExe';
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkOption mkEnableOption; inherit (lib.options) mkOption mkEnableOption;
@ -13,8 +12,7 @@ let
inherit (config.meta.mainUser) username; inherit (config.meta.mainUser) username;
cfg = config.modules.services.greetd; cfg = config.modules.services.greetd;
uwsmEnabled = config.modules.services.uwsm.enable; uwsmEnabled = config.modules.services.uwsm.enable;
in in {
{
options.modules.services.greetd = { options.modules.services.greetd = {
enable = mkEnableOption "greetd"; enable = mkEnableOption "greetd";
greeter = mkOption { greeter = mkOption {
@ -29,13 +27,14 @@ in
description = "Which login session to start"; description = "Which login session to start";
type = str; type = str;
default = default =
if uwsmEnabled then "${getExe config.programs.uwsm.package} start Hyprland" else "Hyprland"; if uwsmEnabled
then "${getExe config.programs.uwsm.package} start Hyprland"
else "Hyprland";
}; };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.greetd = services.greetd = let
let
session = { session = {
# command = '' # command = ''
# ${pkgs.greetd.tuigreet}/bin/tuigreet \ # ${pkgs.greetd.tuigreet}/bin/tuigreet \
@ -47,8 +46,7 @@ in
command = "${getExe config.programs.uwsm.package} start hyprland-uwsm.desktop"; command = "${getExe config.programs.uwsm.package} start hyprland-uwsm.desktop";
user = username; user = username;
}; };
in in {
{
enable = true; enable = true;
package = pkgs.greetd; package = pkgs.greetd;
vt = 7; vt = 7;

View file

@ -2,14 +2,12 @@
config, config,
lib, lib,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.services.kanata; cfg = config.modules.services.kanata;
in in {
{
options.modules.services.kanata.enable = mkEnableOption "kanata"; options.modules.services.kanata.enable = mkEnableOption "kanata";
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.kanata = { services.kanata = {

View file

@ -3,16 +3,14 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
cfg = config.modules.services.locate; cfg = config.modules.services.locate;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
in in {
{
options.modules.services.locate.enable = mkEnableOption "Locate service"; options.modules.services.locate.enable = mkEnableOption "Locate service";
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.plocate ]; environment.systemPackages = [pkgs.plocate];
services.locate = { services.locate = {
enable = true; enable = true;
interval = "hourly"; interval = "hourly";

View file

@ -1,9 +1,8 @@
{ pkgs, ... }: {pkgs, ...}: let
let
mako-wrapped = pkgs.symlinkJoin { mako-wrapped = pkgs.symlinkJoin {
name = "mako-wrapped"; name = "mako-wrapped";
paths = [ pkgs.mako ]; paths = [pkgs.mako];
nativeBuildInputs = [ pkgs.makeWrapper ]; nativeBuildInputs = [pkgs.makeWrapper];
postBuild = '' postBuild = ''
wrapProgram $out/bin/mako --add-flags "\ wrapProgram $out/bin/mako --add-flags "\
--font 'Lexend 11' \ --font 'Lexend 11' \
@ -13,7 +12,6 @@ let
--default-timeout 4000" --default-timeout 4000"
''; '';
}; };
in in {
{ environment.systemPackages = [mako-wrapped];
environment.systemPackages = [ mako-wrapped ];
} }

View file

@ -3,16 +3,14 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.system.services.loki; cfg = config.modules.system.services.loki;
port = 4026; port = 4026;
dataDir = "/srv/data/loki"; dataDir = "/srv/data/loki";
in in {
{
options.modules.system.services.loki.enable = mkEnableOption "Grafana, a graphing service"; options.modules.system.services.loki.enable = mkEnableOption "Grafana, a graphing service";
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -3,15 +3,13 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
cfg = config.modules.services.media.mpd; cfg = config.modules.services.media.mpd;
inherit (config.meta.mainUser) username; inherit (config.meta.mainUser) username;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.types) str; inherit (lib.types) str;
inherit (lib.options) mkOption mkEnableOption; inherit (lib.options) mkOption mkEnableOption;
in in {
{
options.modules.services = { options.modules.services = {
media = { media = {
mpd = { mpd = {
@ -26,7 +24,7 @@ in
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
# command line interface to mpd # command line interface to mpd
environment.systemPackages = [ pkgs.mpc ]; environment.systemPackages = [pkgs.mpc];
systemd.services.mpd.environment = { systemd.services.mpd.environment = {
# https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/609 # https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/609

View file

@ -3,13 +3,11 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf mkDefault; inherit (lib.modules) mkIf mkDefault;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.system.services.nginx; cfg = config.modules.system.services.nginx;
in in {
{
options.modules.system.services.nginx.enable = mkEnableOption "nginx"; options.modules.system.services.nginx.enable = mkEnableOption "nginx";
config = mkIf cfg.enable { config = mkIf cfg.enable {
security = { security = {

View file

@ -3,14 +3,12 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.meta) getExe'; inherit (lib.meta) getExe';
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
cfg = config.modules.system.services.owncloud; cfg = config.modules.system.services.owncloud;
in in {
{
options.modules.system.services.owncloud.enable = lib.mkEnableOption "owncloud"; options.modules.system.services.owncloud.enable = lib.mkEnableOption "owncloud";
config = { config = {
@ -18,11 +16,11 @@ in
description = "Owncloud client service"; description = "Owncloud client service";
# makes the graphical session start this service when it starts # makes the graphical session start this service when it starts
wantedBy = [ "graphical-session.target" ]; wantedBy = ["graphical-session.target"];
# when graphical session restarts or gets stopped, this also gets restarted/stopped. # when graphical session restarts or gets stopped, this also gets restarted/stopped.
partOf = [ "graphical-session.target" ]; partOf = ["graphical-session.target"];
# gets started only after graphical session # gets started only after graphical session
after = [ "graphical-session.target" ]; after = ["graphical-session.target"];
serviceConfig = { serviceConfig = {
ExecStart = "${getExe' pkgs.owncloud-client "owncloud"}"; ExecStart = "${getExe' pkgs.owncloud-client "owncloud"}";

View file

@ -2,12 +2,10 @@
config, config,
lib, lib,
... ...
}: }: let
let
cfg = config.modules.system.sound; cfg = config.modules.system.sound;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
in in {
{
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.pulseaudio.enable = false; services.pulseaudio.enable = false;
services.pipewire = { services.pipewire = {

View file

@ -3,14 +3,12 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.system.services.database.postgresql; cfg = config.modules.system.services.database.postgresql;
in in {
{
options.modules.system.services.database.postgresql.enable = mkEnableOption "postgresql"; options.modules.system.services.database.postgresql.enable = mkEnableOption "postgresql";
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -2,11 +2,9 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
in in {
{
options.modules.services.cups.enable = mkEnableOption "CUPS, the Common UNIX printing system"; options.modules.services.cups.enable = mkEnableOption "CUPS, the Common UNIX printing system";
config = { config = {

View file

@ -3,15 +3,13 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.system.services.prometheus; cfg = config.modules.system.services.prometheus;
port = 4022; port = 4022;
in in {
{
options.modules.system.services.prometheus.enable = mkEnableOption "Grafana, a graphing service"; options.modules.system.services.prometheus.enable = mkEnableOption "Grafana, a graphing service";
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -24,10 +22,7 @@ in
node = { node = {
enable = true; enable = true;
port = 4023; port = 4023;
enabledCollectors = [ enabledCollectors = ["systemd" "processes"];
"systemd"
"processes"
];
}; };
postgres = { postgres = {
@ -44,28 +39,22 @@ in
{ {
job_name = "prometheus"; job_name = "prometheus";
scrape_interval = "30s"; scrape_interval = "30s";
static_configs = [ { targets = [ "localhost:${toString port}" ]; } ]; static_configs = [{targets = ["localhost:${toString port}"];}];
} }
{ {
job_name = "node"; job_name = "node";
scrape_interval = "30s"; scrape_interval = "30s";
static_configs = [ static_configs = [{targets = ["localhost:${toString config.services.prometheus.exporters.node.port}"];}];
{ targets = [ "localhost:${toString config.services.prometheus.exporters.node.port}" ]; }
];
} }
{ {
job_name = "postgres"; job_name = "postgres";
scrape_interval = "30s"; scrape_interval = "30s";
static_configs = [ static_configs = [{targets = ["localhost:${toString config.services.prometheus.exporters.postgres.port}"];}];
{ targets = [ "localhost:${toString config.services.prometheus.exporters.postgres.port}" ]; }
];
} }
{ {
job_name = "nginx"; job_name = "nginx";
scrape_interval = "30s"; scrape_interval = "30s";
static_configs = [ static_configs = [{targets = ["localhost:${toString config.services.prometheus.exporters.nginx.port}"];}];
{ targets = [ "localhost:${toString config.services.prometheus.exporters.nginx.port}" ]; }
];
} }
]; ];
}; };

View file

@ -2,17 +2,15 @@
config, config,
lib, lib,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (config.modules.system) isGraphical; inherit (config.modules.system) isGraphical;
in in {
{
# TODO: setup # TODO: setup
services.spotifyd = mkIf isGraphical { services.spotifyd = mkIf isGraphical {
enable = true; enable = true;
settings = { settings = {
# backend = "pipe"; backend = "pipe";
}; };
}; };
} }

View file

@ -1,13 +1,11 @@
{ lib, ... }: {lib, ...}: let
let
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
in in {
{
options.modules.programs.ssh.enable = mkEnableOption "ssh"; options.modules.programs.ssh.enable = mkEnableOption "ssh";
config = { config = {
services.openssh = { services.openssh = {
enable = true; enable = true;
ports = [ 22 ]; ports = [22];
settings = { settings = {
PasswordAuthentication = false; PasswordAuthentication = false;
PermitRootLogin = "no"; PermitRootLogin = "no";

View file

@ -3,16 +3,14 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
domain = "charlieroot.dev"; domain = "charlieroot.dev";
cfg = config.modules.system.services.stalwart; cfg = config.modules.system.services.stalwart;
in in {
{
options.modules.system.services.stalwart.enable = mkEnableOption "stalwart"; options.modules.system.services.stalwart.enable = mkEnableOption "stalwart";
config = mkIf cfg.enable { config = mkIf cfg.enable {
# create the stallwart user # create the stallwart user
@ -22,7 +20,7 @@ in
group = "stalwart"; group = "stalwart";
isSystemUser = true; isSystemUser = true;
}; };
users.groups.stalwart = { }; users.groups.stalwart = {};
services.stalwart-mail = { services.stalwart-mail = {
enable = true; enable = true;
@ -57,7 +55,7 @@ in
# This is the standard port for SMTP, and is used by mail servers to send email to each other. # This is the standard port for SMTP, and is used by mail servers to send email to each other.
smtp = { smtp = {
protocol = "smtp"; protocol = "smtp";
bind = [ "[::]:25" ]; bind = ["[::]:25"];
tls.implicit = true; tls.implicit = true;
}; };
# SMTP submissions with implicit TLS are received on port 465 by default. # SMTP submissions with implicit TLS are received on port 465 by default.
@ -65,17 +63,17 @@ in
# and is used by mail clients to send email to mail servers. # and is used by mail clients to send email to mail servers.
submissions = { submissions = {
bind = [ "[::]:465" ]; bind = ["[::]:465"];
protocol = "smtp"; protocol = "smtp";
tls.implicit = true; tls.implicit = true;
}; };
imaps = { imaps = {
bind = [ "[::]:993" ]; bind = ["[::]:993"];
protocol = "imap"; protocol = "imap";
tls.implicit = true; tls.implicit = true;
}; };
management = { management = {
bind = [ "127.0.0.1:8080" ]; bind = ["127.0.0.1:8080"];
protocol = "http"; protocol = "http";
tls.implicit = true; tls.implicit = true;
}; };

View file

@ -3,23 +3,18 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (config.meta.mainUser) username; inherit (config.meta.mainUser) username;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.services.usbguard; cfg = config.modules.services.usbguard;
in in {
{
options.modules.services.usbguard.enable = mkEnableOption "usbguard"; options.modules.services.usbguard.enable = mkEnableOption "usbguard";
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.usbguard ]; environment.systemPackages = [pkgs.usbguard];
services.usbguard = { services.usbguard = {
enable = true; enable = true;
IPCAllowedUsers = [ IPCAllowedUsers = ["root" "${username}"];
"root"
"${username}"
];
presentDevicePolicy = "allow"; presentDevicePolicy = "allow";
rules = '' rules = ''
allow with-interface equals { 08:*:* } allow with-interface equals { 08:*:* }

View file

@ -3,13 +3,11 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
cfg = config.modules.services.uwsm; cfg = config.modules.services.uwsm;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
in in {
{
options.modules.services.uwsm.enable = mkEnableOption "uwsm"; options.modules.services.uwsm.enable = mkEnableOption "uwsm";
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.uwsm = { programs.uwsm = {

View file

@ -2,8 +2,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
custom-wayneko = pkgs.wayneko.overrideAttrs { custom-wayneko = pkgs.wayneko.overrideAttrs {
@ -17,17 +16,16 @@ let
hash = ""; hash = "";
}; };
in in {
{
systemd.user.services.wayneko = { systemd.user.services.wayneko = {
description = "Wayneko, as a systemd service"; description = "Wayneko, as a systemd service";
# makes the graphical session start this service when it starts # makes the graphical session start this service when it starts
wantedBy = [ "graphical-session.target" ]; wantedBy = ["graphical-session.target"];
# when graphical session restarts or gets stopped, this also gets restarted/stopped. # when graphical session restarts or gets stopped, this also gets restarted/stopped.
partOf = [ "graphical-session.target" ]; partOf = ["graphical-session.target"];
# gets started only after graphical session # gets started only after graphical session
after = [ "graphical-session.target" ]; after = ["graphical-session.target"];
serviceConfig = { serviceConfig = {
ExecStart = '' ExecStart = ''
@ -41,7 +39,7 @@ in
RestartSec = 1; RestartSec = 1;
TimeoutStopSec = 10; TimeoutStopSec = 10;
CapabilityBoundingSet = [ "" ]; CapabilityBoundingSet = [""];
DevicePolicy = "closed"; DevicePolicy = "closed";
LockPersonality = true; LockPersonality = true;
MemoryDenyWriteExecute = true; MemoryDenyWriteExecute = true;
@ -67,7 +65,7 @@ in
RestrictRealTime = true; RestrictRealTime = true;
RestrictSUIDSGID = true; RestrictSUIDSGID = true;
SystemCallArchitectures = [ "native" ]; SystemCallArchitectures = ["native"];
SystemCallFilter = "~@clock @cpu-emulation @debug @obsolete @module @mount @raw-io @reboot @swap @privileged"; SystemCallFilter = "~@clock @cpu-emulation @debug @obsolete @module @mount @raw-io @reboot @swap @privileged";
}; };

View file

@ -9,24 +9,10 @@
config, config,
lib, lib,
... ...
}: }: let
let
inherit (lib.options) mkOption literalExpression; inherit (lib.options) mkOption literalExpression;
inherit (lib.strings) inherit (lib.strings) toLower replaceStrings removePrefix hasPrefix isString;
toLower inherit (lib.types) str nullOr enum mkOptionType attrsOf coercedTo;
replaceStrings
removePrefix
hasPrefix
isString
;
inherit (lib.types)
str
nullOr
enum
mkOptionType
attrsOf
coercedTo
;
cfg = config.modules.style; cfg = config.modules.style;
@ -38,24 +24,16 @@ let
}; };
colorType = attrsOf (coercedTo str (removePrefix "#") hexColorType); colorType = attrsOf (coercedTo str (removePrefix "#") hexColorType);
nameToSlug = name: toLower (replaceStrings [ " " ] [ "-" ] name); nameToSlug = name: toLower (replaceStrings [" "] ["-"] name);
getPaletteFromScheme = getPaletteFromScheme = slug:
slug: if builtins.pathExists ./palettes/${slug}.nix
if builtins.pathExists ./palettes/${slug}.nix then then (import ./palettes/${slug}.nix).colorscheme.palette
(import ./palettes/${slug}.nix).colorscheme.palette else throw "The following colorscheme was imported but not found: ${slug}";
else in {
throw "The following colorscheme was imported but not found: ${slug}";
in
{
options.modules.style = { options.modules.style = {
colorScheme = { colorScheme = {
name = mkOption { name = mkOption {
type = nullOr (enum [ type = nullOr (enum ["Catppuccin Mocha" "Zenburn" "Black Metal Venom" "Gruvbox"]);
"Catppuccin Mocha"
"Zenburn"
"Black Metal Venom"
"Gruvbox"
]);
description = "The colorscheme that should be used globally to theme your system."; description = "The colorscheme that should be used globally to theme your system.";
default = "Catppuccin Mocha"; default = "Catppuccin Mocha";
}; };
@ -105,11 +83,11 @@ in
}; };
variant = mkOption { variant = mkOption {
type = enum [ type = enum ["dark" "light"];
"dark" default =
"light" if builtins.substring 0 1 cfg.colorScheme.colors.base00 < "5"
]; then "dark"
default = if builtins.substring 0 1 cfg.colorScheme.colors.base00 < "5" then "dark" else "light"; else "light";
description = '' description = ''
Whether the scheme is dark or light Whether the scheme is dark or light
''; '';

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: let
let
inherit (builtins) mapAttrs; inherit (builtins) mapAttrs;
fancy-iosevka = pkgs.iosevka.override { fancy-iosevka = pkgs.iosevka.override {
@ -41,8 +40,7 @@ let
}; };
set = "Fancy"; set = "Fancy";
}; };
in in {
{
# A (somewhat) sane list of fonts to be installed. # A (somewhat) sane list of fonts to be installed.
fonts = { fonts = {
fontconfig = { fontconfig = {
@ -60,8 +58,7 @@ in
# Set the defalt fonts. This was taken from raf, # Set the defalt fonts. This was taken from raf,
# many thanks. # many thanks.
defaultFonts = defaultFonts = let
let
common = [ common = [
"Iosevka Nerd Font" "Iosevka Nerd Font"
"Roboto Mono Nerd Font" "Roboto Mono Nerd Font"
@ -72,14 +69,15 @@ in
]; ];
in in
mapAttrs (_: fonts: fonts ++ common) { mapAttrs (_: fonts: fonts ++ common) {
serif = [ "Noto Serif" ]; serif = ["Noto Serif"];
sansSerif = [ "Lexend" ]; sansSerif = ["Lexend"];
emoji = [ "Noto Color Emoji" ]; emoji = ["Noto Color Emoji"];
monospace = [ "Iosevka Nerd Font" ]; monospace = ["Iosevka Nerd Font"];
}; };
}; };
packages = builtins.attrValues { packages = builtins.attrValues {
inherit (pkgs) inherit
(pkgs)
material-icons material-icons
material-design-icons material-design-icons
lexend lexend
@ -90,7 +88,8 @@ in
corefonts corefonts
font-awesome font-awesome
; ;
inherit (pkgs.nerd-fonts) inherit
(pkgs.nerd-fonts)
iosevka iosevka
jetbrains-mono jetbrains-mono
comic-shanns-mono comic-shanns-mono

View file

@ -1,7 +1,6 @@
# blatantly stolen from sioodmy, thanks :3 # blatantly stolen from sioodmy, thanks :3
{ colors }: {colors}:
with colors; with colors; ''
''
@define-color accent_color #${base0D}; @define-color accent_color #${base0D};
@define-color accent_bg_color #${base0D}; @define-color accent_bg_color #${base0D};
@define-color accent_fg_color #${base00}; @define-color accent_fg_color #${base00};

View file

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (builtins) toString isBool; inherit (builtins) toString isBool;
inherit (lib.generators) toINI; inherit (lib.generators) toINI;
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
@ -16,12 +15,12 @@ let
cfg = config.modules.theming.gtk; cfg = config.modules.theming.gtk;
toGtk3Ini = toINI { toGtk3Ini = toINI {
mkKeyValue = mkKeyValue = key: value: let
key: value: value' =
let if isBool value
value' = if isBool value then boolToString value else toString value; then boolToString value
in else toString value;
"${escape [ "=" ] key}=${value'}"; in "${escape ["="] key}=${value'}";
}; };
gtkIni = { gtkIni = {
@ -35,8 +34,7 @@ let
gtk-cursor-theme-name = "BreezeX-RosePine-Linux"; gtk-cursor-theme-name = "BreezeX-RosePine-Linux";
gtk-theme-name = "Gruvbox-Dark"; gtk-theme-name = "Gruvbox-Dark";
}; };
in in {
{
options.modules.theming.gtk = { options.modules.theming.gtk = {
enable = mkEnableOption "Wether to enable GTK theming"; enable = mkEnableOption "Wether to enable GTK theming";
theme = { theme = {
@ -65,15 +63,15 @@ in
}; };
}; };
}; };
config = config = let
let
cursorSize = 32; cursorSize = 32;
in in
mkIf cfg.enable { mkIf cfg.enable {
programs.dconf.enable = true; programs.dconf.enable = true;
environment = { environment = {
systemPackages = builtins.attrValues { systemPackages = builtins.attrValues {
inherit (pkgs) inherit
(pkgs)
rose-pine-cursor rose-pine-cursor
gruvbox-gtk-theme gruvbox-gtk-theme
papirus-icon-theme papirus-icon-theme
@ -85,11 +83,9 @@ in
XCURSOR_THEME = "BreezeX-RosePine-Linux"; XCURSOR_THEME = "BreezeX-RosePine-Linux";
XCURSOR_SIZE = cursorSize; XCURSOR_SIZE = cursorSize;
}; };
etc = etc = let
let css = import ./gtk-colors.nix {inherit (config.modules.style.colorScheme) colors;};
css = import ./gtk-colors.nix { inherit (config.modules.style.colorScheme) colors; }; in {
in
{
"xdg/gtk-4.0/settings.ini".text = toGtk3Ini { "xdg/gtk-4.0/settings.ini".text = toGtk3Ini {
Settings = gtkIni; Settings = gtkIni;
}; };

View file

@ -3,15 +3,13 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption mkOption; inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) str package; inherit (lib.types) str package;
cfg = config.modules.theming.qt; cfg = config.modules.theming.qt;
in in {
{
options.modules.theming.qt = { options.modules.theming.qt = {
enable = mkEnableOption "qt theming"; enable = mkEnableOption "qt theming";
name = mkOption { name = mkOption {

View file

@ -4,19 +4,17 @@
pkgs, pkgs,
sources, sources,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.theming.quickshell; cfg = config.modules.theming.quickshell;
in in {
{
options.modules.theming.quickshell.enable = mkEnableOption "quickshell"; options.modules.theming.quickshell.enable = mkEnableOption "quickshell";
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
(pkgs.callPackage (sources.quickshell + "/default.nix") { }) (pkgs.callPackage (sources.quickshell + "/default.nix") {})
qt6.qtimageformats qt6.qtimageformats
qt6.qt5compat qt6.qt5compat
qt6.qtmultimedia qt6.qtmultimedia

View file

@ -1 +1 @@
/run/user/1000/quickshell/vfs/4f7a8066a49ba487f5b2754750896151/.qmlls.ini /run/user/1000/quickshell/vfs/97b86fe3cbb42714790f5e96b44b706b/.qmlls.ini

View file

@ -3,15 +3,13 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkForce mkDefault; inherit (lib.modules) mkForce mkDefault;
inherit (lib.options) mkOption mkEnableOption; inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) int; inherit (lib.types) int;
cfg = config.modules.system.boot; cfg = config.modules.system.boot;
in in {
{
options.modules.system.boot = { options.modules.system.boot = {
grub.enable = mkEnableOption "Grub, a bloated boot loader"; grub.enable = mkEnableOption "Grub, a bloated boot loader";
systemd-boot.enable = mkEnableOption "Poetteringboot"; systemd-boot.enable = mkEnableOption "Poetteringboot";
@ -31,8 +29,7 @@ in
message = "No bootloader is enabled."; message = "No bootloader is enabled.";
} }
{ {
assertion = assertion = cfg.systemd-boot.enable -> !cfg.grub.enable && cfg.grub.enable -> !cfg.systemd-boot.enable;
cfg.systemd-boot.enable -> !cfg.grub.enable && cfg.grub.enable -> !cfg.systemd-boot.enable;
message = "Please enable only ONE of systemd-boot or grub."; message = "Please enable only ONE of systemd-boot or grub.";
} }
]; ];
@ -76,7 +73,8 @@ in
plymouth = { plymouth = {
enable = true; enable = true;
themePackages = [ themePackages = [
(pkgs.adi1090x-plymouth-themes.override { (pkgs.adi1090x-plymouth-themes.override
{
selected_themes = [ selected_themes = [
"hud_3" "hud_3"
]; ];

View file

@ -4,14 +4,12 @@
pkgs, pkgs,
sources, sources,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.system.boot.lanzaboote; cfg = config.modules.system.boot.lanzaboote;
in in {
{
options.modules.system.boot.lanzaboote.enable = mkEnableOption "Lanzaboote"; options.modules.system.boot.lanzaboote.enable = mkEnableOption "Lanzaboote";
imports = [ imports = [
(sources.lanzaboote + "/nix/modules/lanzaboote.nix") (sources.lanzaboote + "/nix/modules/lanzaboote.nix")
@ -31,6 +29,6 @@ in
loader.systemd-boot.enable = lib.mkForce false; loader.systemd-boot.enable = lib.mkForce false;
}; };
environment.systemPackages = [ pkgs.sbctl ]; environment.systemPackages = [pkgs.sbctl];
}; };
} }

View file

@ -3,20 +3,19 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
cfg = config.modules.system.hardware.bluetooth; cfg = config.modules.system.hardware.bluetooth;
in in {
{
config = mkIf cfg.enable { config = mkIf cfg.enable {
hardware.bluetooth = { hardware.bluetooth = {
enable = true; enable = true;
inherit (cfg) powerOnBoot; inherit (cfg) powerOnBoot;
}; };
environment.systemPackages = builtins.attrValues { environment.systemPackages = builtins.attrValues {
inherit (pkgs) inherit
(pkgs)
bluetuith bluetuith
bluez bluez
blueman blueman

View file

@ -2,14 +2,12 @@
config, config,
lib, lib,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.system.hardware; cfg = config.modules.system.hardware;
in in {
{
options.modules.system.hardware = { options.modules.system.hardware = {
nvidia = { nvidia = {
enable = mkEnableOption "Nvidia graphics drivers"; enable = mkEnableOption "Nvidia graphics drivers";
@ -34,6 +32,6 @@ in
package = config.boot.kernelPackages.nvidiaPackages.beta; package = config.boot.kernelPackages.nvidiaPackages.beta;
}; };
}; };
services.xserver.videoDrivers = mkIf cfg.nvidia.enable [ "nvidia" ]; services.xserver.videoDrivers = mkIf cfg.nvidia.enable ["nvidia"];
}; };
} }

View file

@ -3,20 +3,19 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkDefault mkIf; inherit (lib.modules) mkDefault mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.system.hardware.intel; cfg = config.modules.system.hardware.intel;
in in {
{
options.modules.system.hardware.intel.enable = mkEnableOption "Intel Hardware"; options.modules.system.hardware.intel.enable = mkEnableOption "Intel Hardware";
config = mkIf cfg.enable { config = mkIf cfg.enable {
hardware = { hardware = {
cpu.intel.updateMicrocode = mkDefault config.hardware.enableRedistributableFirmware; cpu.intel.updateMicrocode = mkDefault config.hardware.enableRedistributableFirmware;
graphics.extraPackages = builtins.attrValues { graphics.extraPackages = builtins.attrValues {
inherit (pkgs) inherit
(pkgs)
intel-vaapi-driver intel-vaapi-driver
intel-media-driver intel-media-driver
; ;

View file

@ -2,13 +2,11 @@
config, config,
lib, lib,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
cfg = config.modules.system.sound; cfg = config.modules.system.sound;
in in {
{
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.pipewire = { services.pipewire = {
enable = true; enable = true;

View file

@ -4,24 +4,23 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkDefault; inherit (lib.modules) mkDefault;
in in {
{
imports = [ imports = [
# (sources.watt + "/nix/module.nix") # (sources.watt + "/nix/module.nix")
]; ];
config = { config = {
environment.systemPackages = builtins.attrValues { environment.systemPackages = builtins.attrValues {
inherit (pkgs) inherit
(pkgs)
acpi acpi
powertop powertop
; ;
}; };
boot = { boot = {
kernelModules = [ "acpi_call" ]; kernelModules = ["acpi_call"];
extraModulePackages = with config.boot.kernelPackages; [ extraModulePackages = with config.boot.kernelPackages; [
acpi_call acpi_call
cpupower cpupower

View file

@ -4,12 +4,9 @@
pkgs, pkgs,
sources, sources,
... ...
}: }: let
let determinate = (import sources.flake-compat {src = sources.determinate;}).outputs;
determinate = (import sources.flake-compat { src = sources.determinate; }).outputs; dix = (import sources.flake-compat {src = determinate.inputs.nix;}).outputs.packages.${pkgs.stdenv.system}.nix;
dix =
(import sources.flake-compat { src = determinate.inputs.nix; })
.outputs.packages.${pkgs.stdenv.system}.nix;
# Stronger than mkDefault (1000), weaker than mkForce (50) and the "default override priority" # Stronger than mkDefault (1000), weaker than mkForce (50) and the "default override priority"
# (100). # (100).
@ -17,8 +14,7 @@ let
# Stronger than the "default override priority", as the upstream module uses that, and weaker than mkForce (50). # Stronger than the "default override priority", as the upstream module uses that, and weaker than mkForce (50).
mkMorePreferable = lib.mkOverride 75; mkMorePreferable = lib.mkOverride 75;
in in {
{
config = { config = {
nix = { nix = {
package = dix; package = dix;
@ -34,9 +30,7 @@ in
services.nix-daemon.serviceConfig = { services.nix-daemon.serviceConfig = {
ExecStart = [ ExecStart = [
"" ""
"@${ "@${determinate.packages.${pkgs.stdenv.system}.default}/bin/determinate-nixd determinate-nixd --nix-bin ${config.nix.package}/bin daemon"
determinate.packages.${pkgs.stdenv.system}.default
}/bin/determinate-nixd determinate-nixd --nix-bin ${config.nix.package}/bin daemon"
]; ];
KillMode = mkPreferable "process"; KillMode = mkPreferable "process";
LimitNOFILE = mkMorePreferable 1048576; LimitNOFILE = mkMorePreferable 1048576;
@ -47,14 +41,11 @@ in
nix-daemon.socketConfig.FileDescriptorName = "nix-daemon.socket"; nix-daemon.socketConfig.FileDescriptorName = "nix-daemon.socket";
determinate-nixd = { determinate-nixd = {
description = "Determinate Nixd Daemon Socket"; description = "Determinate Nixd Daemon Socket";
wantedBy = [ "sockets.target" ]; wantedBy = ["sockets.target"];
before = [ "multi-user.target" ]; before = ["multi-user.target"];
unitConfig = { unitConfig = {
RequiresMountsFor = [ RequiresMountsFor = ["/nix/store" "/nix/var/determinate"];
"/nix/store"
"/nix/var/determinate"
];
}; };
socketConfig = { socketConfig = {

View file

@ -5,12 +5,10 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.attrsets) mapAttrsToList; inherit (lib.attrsets) mapAttrsToList;
inherit (lib.modules) mkForce; inherit (lib.modules) mkForce;
in in {
{
nix = { nix = {
# Check that Nix can parse the generated nix.conf. # Check that Nix can parse the generated nix.conf.
checkConfig = true; checkConfig = true;
@ -48,7 +46,7 @@ in
# Automatically optimize nix store by removing hard links # Automatically optimize nix store by removing hard links
optimise = { optimise = {
automatic = true; automatic = true;
dates = [ "21:00" ]; dates = ["21:00"];
}; };
# NOTE: # NOTE:
@ -64,18 +62,10 @@ in
auto-optimise-store = true; auto-optimise-store = true;
# Users that are allowed to connect to the Nix daemon. # Users that are allowed to connect to the Nix daemon.
allowed-users = [ allowed-users = ["root" "@wheel" "nix-builder"];
"root"
"@wheel"
"nix-builder"
];
# Users that are allowed to connect to the Nix daemon. # Users that are allowed to connect to the Nix daemon.
trusted-users = [ trusted-users = ["root" "@wheel" "nix-builder"];
"root"
"@wheel"
"nix-builder"
];
# Let the system decide the number of max jobs # Let the system decide the number of max jobs
# based on available system specs. Usually this is # based on available system specs. Usually this is

View file

@ -1,6 +1,5 @@
# taken from raf # taken from raf
{ sources, ... }: {sources, ...}: {
{
# Global nixpkgs configuration. # Global nixpkgs configuration.
# This is ignored if nixpkgs.pkgs is set, which should be avoided. # This is ignored if nixpkgs.pkgs is set, which should be avoided.
nixpkgs = { nixpkgs = {
@ -41,7 +40,7 @@
# List of derivation warnings to display while rebuilding. # List of derivation warnings to display while rebuilding.
# See: <https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/check-meta.nix> # See: <https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/check-meta.nix>
showDerivationWarnings = [ ]; showDerivationWarnings = [];
}; };
}; };
} }

View file

@ -4,14 +4,12 @@
lib, lib,
sources, sources,
... ...
}: }: let
let
inherit (lib.modules) mkIf mkForce; inherit (lib.modules) mkIf mkForce;
inherit (builtins) map; inherit (builtins) map;
cfg = config.modules.system.impermanence; cfg = config.modules.system.impermanence;
in in {
{
imports = [ imports = [
(sources.impermanence + "/nixos.nix") (sources.impermanence + "/nixos.nix")
]; ];
@ -43,36 +41,20 @@ in
]; ];
users.cr = { users.cr = {
directories = [ directories =
[
"cloud" "cloud"
"repos" "repos"
] ]
++ map (dir: ".config/${dir}") [ ++ map (
"nicotine" dir: ".config/${dir}"
"Signal" ) ["nicotine" "Signal" "Nextcloud" "emacs" "doom"]
"Nextcloud" ++ map (
"emacs" dir: ".cache/${dir}"
"doom" ) ["tealdeer" "keepassxc" "nix" "starship" "nix-index" "mozilla" "zsh" "nvim"]
] ++ map (
++ map (dir: ".cache/${dir}") [ dir: ".local/share/${dir}"
"tealdeer" ) ["direnv" "Steam" "TelegramDesktop" "PrismLauncher" "nicotine" "zoxide" ".keepass"];
"keepassxc"
"nix"
"starship"
"nix-index"
"mozilla"
"zsh"
"nvim"
]
++ map (dir: ".local/share/${dir}") [
"direnv"
"Steam"
"TelegramDesktop"
"PrismLauncher"
"nicotine"
"zoxide"
".keepass"
];
}; };
}; };

View file

@ -3,12 +3,10 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
StateDirectory = "dnscrypt-proxy"; StateDirectory = "dnscrypt-proxy";
inherit (lib.modules) mkForce; inherit (lib.modules) mkForce;
in in {
{
networking = { networking = {
networkmanager.dns = mkForce "none"; networkmanager.dns = mkForce "none";
nameservers = [ nameservers = [

View file

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
networking = { networking = {
# use nftables over iptables # use nftables over iptables
nftables.enable = true; nftables.enable = true;

View file

@ -1,8 +1,6 @@
{ config, ... }: {config, ...}: let
let
inherit (config.modules.other.system) username; inherit (config.modules.other.system) username;
in in {
{
networking = { networking = {
enableIPv6 = true; enableIPv6 = true;
@ -42,7 +40,7 @@ in
openFirewall = true; openFirewall = true;
}; };
users.users.${username}.extraGroups = [ "networkmanager" ]; users.users.${username}.extraGroups = ["networkmanager"];
# faster boot # faster boot
systemd = { systemd = {

View file

@ -1,12 +1,11 @@
{ pkgs, ... }: {pkgs, ...}: {
{
security = { security = {
# Enable Soteria, a GTK-based Polkit authentication agent. # Enable Soteria, a GTK-based Polkit authentication agent.
soteria.enable = true; soteria.enable = true;
apparmor = { apparmor = {
enable = true; enable = true;
killUnconfinedConfinables = true; killUnconfinedConfinables = true;
packages = [ pkgs.apparmor-profiles ]; packages = [pkgs.apparmor-profiles];
}; };
pam.services = { pam.services = {

View file

@ -2,18 +2,16 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkForce mkDefault; inherit (lib.modules) mkForce mkDefault;
in in {
{
security = { security = {
sudo-rs.enable = mkForce false; sudo-rs.enable = mkForce false;
sudo = { sudo = {
enable = true; enable = true;
# We use the default sudo package, but with insults if we # We use the default sudo package, but with insults if we
# fail to provide the correct password # fail to provide the correct password
package = pkgs.sudo.override { withInsults = true; }; package = pkgs.sudo.override {withInsults = true;};
# Wheel user should need the password to execute sudo commands # Wheel user should need the password to execute sudo commands
wheelNeedsPassword = mkDefault true; wheelNeedsPassword = mkDefault true;

View file

@ -1,13 +1,11 @@
{ lib, ... }: {lib, ...}: let
let
inherit (lib.modules) mkForce; inherit (lib.modules) mkForce;
in in {
{
config.systemd = { config.systemd = {
# faster startup # faster startup
targets.network-online.wantedBy = mkForce [ ]; # Normally ["multi-user.target"] targets.network-online.wantedBy = mkForce []; # Normally ["multi-user.target"]
services = { services = {
NetworkManager-wait-online.wantedBy = mkForce [ ]; # Normally ["network-online.target"] NetworkManager-wait-online.wantedBy = mkForce []; # Normally ["network-online.target"]
systemd-udev-settle.enable = false; systemd-udev-settle.enable = false;
}; };
}; };

View file

@ -1,8 +1,6 @@
{ config, ... }: {config, ...}: let
let
machine-id = builtins.substring 0 32 (builtins.hashString "sha256" config.networking.hostName); machine-id = builtins.substring 0 32 (builtins.hashString "sha256" config.networking.hostName);
in in {
{
system = { system = {
# My state version. # My state version.
stateVersion = "23.11"; stateVersion = "23.11";

View file

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkForce mkIf; inherit (lib.modules) mkForce mkIf;
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
inherit (config.modules.system) isGraphical; inherit (config.modules.system) isGraphical;
@ -28,11 +27,13 @@ let
}) })
]; ];
}); });
in in {
{
options.modules.desktops.niri.enable = mkEnableOption "Niri, a scolling tiling wayland compositor"; options.modules.desktops.niri.enable = mkEnableOption "Niri, a scolling tiling wayland compositor";
config = mkIf (cfg.enable || isGraphical) { config =
mkIf (cfg.enable
|| isGraphical)
{
programs.niri = { programs.niri = {
enable = true; enable = true;
package = patched-niri; package = patched-niri;
@ -44,7 +45,8 @@ in
environment.etc."niri/config.kdl".source = ./config.kdl; environment.etc."niri/config.kdl".source = ./config.kdl;
environment.systemPackages = builtins.attrValues { environment.systemPackages = builtins.attrValues {
inherit (pkgs) inherit
(pkgs)
xwayland-satellite xwayland-satellite
avizo avizo
playerctl playerctl

View file

@ -3,12 +3,10 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.lists) optional; inherit (lib.lists) optional;
in in {
{
xdg.portal = { xdg.portal = {
enable = true; enable = true;
# Sets environment variable NIXOS_XDG_OPEN_USE_PORTAL to 1. # Sets environment variable NIXOS_XDG_OPEN_USE_PORTAL to 1.
@ -28,7 +26,7 @@ in
"org.freedesktop.impl.portal.Secret" = [ "org.freedesktop.impl.portal.Secret" = [
"kwallet" "kwallet"
]; ];
"org.freedesktop.secrets" = [ "kwalletd6" ]; "org.freedesktop.secrets" = ["kwalletd6"];
}; };
niri = { niri = {
default = [ default = [
@ -40,7 +38,7 @@ in
# https://docs.flatpak.org/en/latest/portal-api-reference.html # https://docs.flatpak.org/en/latest/portal-api-reference.html
# "org.freedesktop.impl.portal.Access" = ["kde"]; # "org.freedesktop.impl.portal.Access" = ["kde"];
# "org.freedesktop.impl.portal.Notification" = ["kde"]; # "org.freedesktop.impl.portal.Notification" = ["kde"];
"org.freedesktop.impl.portal.FileChooser" = [ "kde" ]; "org.freedesktop.impl.portal.FileChooser" = ["kde"];
}; };
}; };
}; };

Some files were not shown because too many files have changed in this diff Show more