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,34 +3,34 @@ 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. [
# Also, we set the system hostname here. # This is used to pre-emptively set the hostPlatform for nixpkgs.
{ # Also, we set the system hostname here.
networking.hostName = hostname; {
nixpkgs.hostPlatform = system; networking.hostName = hostname;
} nixpkgs.hostPlatform = system;
./hosts/common.nix }
./hosts/${hostname} ./hosts/common.nix
] ./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,38 +3,65 @@
# No inputs, take this flakers # No inputs, take this flakers
outputs = outputs = _: let
_: sources = import ./npins;
let nixpkgs = (import sources.flake-compat {src = sources.nixpkgs;}).outputs;
sources = import ./npins;
nixpkgs = (import sources.flake-compat { src = sources.nixpkgs; }).outputs;
inherit (nixpkgs) lib;
pkgsFor = nixpkgs.legacyPackages;
inputs = sources;
in
{
nixosConfigurations = import ./default.nix;
packages = lib.mapAttrs (_: pkgs: { inherit (nixpkgs) lib;
inherit eachSystem = lib.genAttrs (import sources.systems);
(import ./packages { pkgsFor = nixpkgs.legacyPackages;
inherit inputs pkgs sources; inputs = sources;
}) in {
fish nixosConfigurations = import ./default.nix;
helix
kakoune
nushell
;
}) pkgsFor;
devShells = lib.mapAttrs (_: pkgs: {
default = pkgs.mkShellNoCC {
packages = [
(pkgs.callPackage (sources.npins + "/npins.nix") { })
];
env.NPINS_OVERRIDE_nichts = ".";
};
}) pkgsFor;
templates = import ./templates; formatter = eachSystem (system: pkgsFor.${system}.alejandra);
};
packages =
lib.mapAttrs (
_: pkgs: {
inherit
(import ./packages {
inherit inputs pkgs;
})
fish
helix
kakoune
nushell
;
}
)
pkgsFor;
devShells =
lib.mapAttrs (
_: pkgs: {
default = pkgs.mkShellNoCC {
packages = [
(pkgs.callPackage (sources.npins + "/npins.nix") {})
];
env.NPINS_OVERRIDE_nichts = ".";
};
}
)
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;
};
} }

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 =
inherit lib; recursiveUpdate
inputs = sources; {
inherit self; inherit lib;
} args.specialArgs or { }; inputs = sources;
inherit self;
}
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,141 +3,137 @@
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"; title = "foot";
title = "foot"; locked-title = "no";
locked-title = "no";
font = "JetBrainsMono Nerd Font Mono:size=14"; font = "JetBrainsMono Nerd Font Mono:size=14";
font-bold = "JetBrainsMono Nerd Font Mono:size=14:style=Bold"; font-bold = "JetBrainsMono Nerd Font Mono:size=14:style=Bold";
line-height = 20; line-height = 20;
letter-spacing = 0; letter-spacing = 0;
horizontal-letter-offset = 0; horizontal-letter-offset = 0;
vertical-letter-offset = 0; vertical-letter-offset = 0;
box-drawings-uses-font-glyphs = "no"; box-drawings-uses-font-glyphs = "no";
dpi-aware = "no"; dpi-aware = "no";
bold-text-in-bright = "no"; bold-text-in-bright = "no";
word-delimiters = ",`|:\"'()[]{}<>"; word-delimiters = ",`|:\"'()[]{}<>";
selection-target = "primary"; selection-target = "primary";
initial-window-size-chars = "104x36"; initial-window-size-chars = "104x36";
initial-window-mode = "windowed"; initial-window-mode = "windowed";
pad = "8x8 center"; pad = "8x8 center";
resize-delay-ms = 100; resize-delay-ms = 100;
}; };
desktop-notifications.command = "${pkgs.libnotify}/bin/notify-send -a \${app-id} -i \${app-id} \${title} \${body}"; desktop-notifications.command = "${pkgs.libnotify}/bin/notify-send -a \${app-id} -i \${app-id} \${title} \${body}";
bell = { bell = {
urgent = "yes"; urgent = "yes";
notify = "yes"; notify = "yes";
command = "${pkgs.libnotify}/bin/notify-send bell"; command = "${pkgs.libnotify}/bin/notify-send bell";
command-focused = "no"; command-focused = "no";
}; };
scrollback = { scrollback = {
lines = 10000; lines = 10000;
multiplier = 10.0; multiplier = 10.0;
indicator-position = "relative"; indicator-position = "relative";
indicator-format = "line"; indicator-format = "line";
}; };
url = { url = {
launch = "${pkgs.xdg-utils}/bin/xdg-open \${url}"; launch = "${pkgs.xdg-utils}/bin/xdg-open \${url}";
label-letters = "sadfjklewcmpgh"; label-letters = "sadfjklewcmpgh";
osc8-underline = "always"; osc8-underline = "always";
}; };
tweak = { tweak = {
font-monospace-warn = "no"; font-monospace-warn = "no";
sixel = "yes"; sixel = "yes";
}; };
cursor = { cursor = {
style = "beam"; style = "beam";
blink = "no"; blink = "no";
}; };
mouse = { mouse = {
hide-when-typing = "yes"; # not really needed since we already enable this in Hyprland. hide-when-typing = "yes"; # not really needed since we already enable this in Hyprland.
alternate-scroll-mode = "yes"; alternate-scroll-mode = "yes";
}; };
csd.preferred = "server"; csd.preferred = "server";
key-bindings = { key-bindings = {
scrollback-up-half-page = "Control+k"; scrollback-up-half-page = "Control+k";
scrollback-up-page = "Control+Shift+k"; scrollback-up-page = "Control+Shift+k";
scrollback-down-half-page = "Control+j"; scrollback-down-half-page = "Control+j";
scrollback-down-page = "Control+Shift+j"; scrollback-down-page = "Control+Shift+j";
}; };
mouse-bindings = { mouse-bindings = {
selection-override-modifiers = "Shift"; selection-override-modifiers = "Shift";
primary-paste = "BTN_MIDDLE"; primary-paste = "BTN_MIDDLE";
select-begin = "BTN_LEFT"; select-begin = "BTN_LEFT";
select-begin-block = "Control+BTN_LEFT"; select-begin-block = "Control+BTN_LEFT";
select-extend = "BTN_RIGHT"; select-extend = "BTN_RIGHT";
select-extend-character-wise = "Control+BTN_RIGHT"; select-extend-character-wise = "Control+BTN_RIGHT";
select-word = "BTN_LEFT-2"; select-word = "BTN_LEFT-2";
select-word-whitespace = "Control+BTN_LEFT-2"; select-word-whitespace = "Control+BTN_LEFT-2";
}; };
colors = { colors = {
foreground = theme-colors.base05; # Text foreground = theme-colors.base05; # Text
background = theme-colors.base00; # Base background = theme-colors.base00; # Base
regular0 = theme-colors.base03; # Surface 1 regular0 = theme-colors.base03; # Surface 1
regular1 = theme-colors.base08; # red regular1 = theme-colors.base08; # red
regular2 = theme-colors.base0B; # green regular2 = theme-colors.base0B; # green
regular3 = theme-colors.base0A; # yellow regular3 = theme-colors.base0A; # yellow
regular4 = theme-colors.base0D; # blue regular4 = theme-colors.base0D; # blue
regular5 = "f5c2e7"; # pink regular5 = "f5c2e7"; # pink
regular6 = "94e2d5"; # teal regular6 = "94e2d5"; # teal
regular7 = "bac2de"; # Subtext 1 regular7 = "bac2de"; # Subtext 1
bright0 = theme-colors.base04; # Surface 2 bright0 = theme-colors.base04; # Surface 2
bright1 = theme-colors.base08; # red bright1 = theme-colors.base08; # red
bright2 = theme-colors.base0B; # green bright2 = theme-colors.base0B; # green
bright3 = theme-colors.base0A; # yellow bright3 = theme-colors.base0A; # yellow
bright4 = "89b4fa"; # blue bright4 = "89b4fa"; # blue
bright5 = "f5c2e7"; # pink bright5 = "f5c2e7"; # pink
bright6 = "94e2d5"; # teal bright6 = "94e2d5"; # teal
bright7 = "a6adc8"; # Subtext 0 bright7 = "a6adc8"; # Subtext 0
selection-foreground = "cdd6f4"; selection-foreground = "cdd6f4";
selection-background = "414356"; selection-background = "414356";
search-box-no-match = "11111b f38ba8"; search-box-no-match = "11111b f38ba8";
search-box-match = "cdd6f4 313244"; search-box-match = "cdd6f4 313244";
jump-labels = "11111b fab387"; jump-labels = "11111b fab387";
urls = "89b4fa"; urls = "89b4fa";
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,9 +1,9 @@
{ pkgs, ... }: {pkgs, ...}: {
{ environment.systemPackages =
environment.systemPackages = [ [
pkgs.spotify pkgs.spotify
] ]
++ (with pkgs; [ ++ (with pkgs; [
sptlrx sptlrx
]); ]);
} }

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,55 +113,53 @@ 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: * Disallow: /
Disallow: / '';
''; base-brand = fetchurl {
base-brand = fetchurl { url = "https://codeberg.org/Codeberg-Infrastructure/forgejo/raw/branch/codeberg-10/web_src/css/themes/codeberg/base-brand.css";
url = "https://codeberg.org/Codeberg-Infrastructure/forgejo/raw/branch/codeberg-10/web_src/css/themes/codeberg/base-brand.css"; hash = "sha256-QJ775HpINf8klO3d/8h+tEw0vk34p19dWUCWWuVwcho=";
hash = "sha256-QJ775HpINf8klO3d/8h+tEw0vk34p19dWUCWWuVwcho="; };
}; dark-variables = fetchurl {
dark-variables = fetchurl { url = "https://codeberg.org/Codeberg-Infrastructure/forgejo/raw/branch/codeberg-10/web_src/css/themes/codeberg/dark-variables.css";
url = "https://codeberg.org/Codeberg-Infrastructure/forgejo/raw/branch/codeberg-10/web_src/css/themes/codeberg/dark-variables.css"; hash = "sha256-nCSJUOU9/R1fldoKXTTZmP7vmRjYUk/OKkbgrJ/NrXQ=";
hash = "sha256-nCSJUOU9/R1fldoKXTTZmP7vmRjYUk/OKkbgrJ/NrXQ="; };
}; theme-codeberg-dark = fetchurl {
theme-codeberg-dark = fetchurl { 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/assets' 0750 ${user} ${group} - -"
"d '${customDir}/public' 0750 ${user} ${group} - -" "d '${customDir}/public/assets/img' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets' 0750 ${user} ${group} - -" # Copeberg logo, thanks Raf <3
"d '${customDir}/public/assets/img' 0750 ${user} ${group} - -" "L+ '${customDir}/public/assets/img/logo.svg' - - - - ${img}/logo.svg"
# Copeberg logo, thanks Raf <3 "L+ '${customDir}/public/assets/img/logo.png' - - - - ${img}/logo.png"
"L+ '${customDir}/public/assets/img/logo.svg' - - - - ${img}/logo.svg" "L+ '${customDir}/public/assets/img/apple-touch-icon' - - - - ${img}/logo.png"
"L+ '${customDir}/public/assets/img/logo.png' - - - - ${img}/logo.png" "L+ '${customDir}/public/assets/img/favicon.svg' - - - - ${img}/logo.svg"
"L+ '${customDir}/public/assets/img/apple-touch-icon' - - - - ${img}/logo.png" "L+ '${customDir}/public/assets/img/favicon.png' - - - - ${img}/logo.png"
"L+ '${customDir}/public/assets/img/favicon.svg' - - - - ${img}/logo.svg"
"L+ '${customDir}/public/assets/img/favicon.png' - - - - ${img}/logo.png"
# Theming shenanigans # Theming shenanigans
"d '${customDir}/public/assets' 0750 ${user} ${group} - -" "d '${customDir}/public/assets' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets/css' 0750 ${user} ${group} - -" "d '${customDir}/public/assets/css' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets/css/codeberg' 0750 ${user} ${group} - -" "d '${customDir}/public/assets/css/codeberg' 0750 ${user} ${group} - -"
"L+ '${customDir}/public/assets/css/theme-codeberg-dark.css' - - - - ${theme-codeberg-dark}" "L+ '${customDir}/public/assets/css/theme-codeberg-dark.css' - - - - ${theme-codeberg-dark}"
"L+ '${customDir}/public/assets/css/codeberg/base-brand.css' - - - - ${base-brand}" "L+ '${customDir}/public/assets/css/codeberg/base-brand.css' - - - - ${base-brand}"
"L+ '${customDir}/public/assets/css/codeberg/dark-variables.css' - - - - ${dark-variables}" "L+ '${customDir}/public/assets/css/codeberg/dark-variables.css' - - - - ${dark-variables}"
# Templates # Templates
"d '${customDir}/templates' 0750 ${user} ${group} - -" "d '${customDir}/templates' 0750 ${user} ${group} - -"
"d '${customDir}/templates/repo' 0750 ${user} ${group} - -" "d '${customDir}/templates/repo' 0750 ${user} ${group} - -"
# Home page # Home page
"L+ '${customDir}/templates/home.tmpl' - - - - ${./templates}/home.tmpl" "L+ '${customDir}/templates/home.tmpl' - - - - ${./templates}/home.tmpl"
"L+ '${customDir}/templates/repo/header.tmpl' - - - - ${./templates/repo}/header.tmpl" "L+ '${customDir}/templates/repo/header.tmpl' - - - - ${./templates/repo}/header.tmpl"
# Fuck off scrapers # Fuck off scrapers
"L+ ${customDir}/public/robots.txt - - - - ${robots.outPath}" "L+ ${customDir}/public/robots.txt - - - - ${robots.outPath}"
]; ];
}; };
} }

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,33 +27,33 @@ 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 \ # -c \"${cfg.session}\" \
# -c \"${cfg.session}\" \ # -r
# -r # -t --time-format "DD.MM.YYYY"
# -t --time-format "DD.MM.YYYY" # --asteriks'';
# --asteriks'';
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
{
enable = true;
package = pkgs.greetd;
vt = 7;
settings = {
default_session = session;
initial_session = session;
};
}; };
in {
enable = true;
package = pkgs.greetd;
vt = 7;
settings = {
default_session = session;
initial_session = session;
};
};
}; };
} }

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,26 +58,26 @@ 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" "Fira Code Nerd Font"
"Fira Code Nerd Font" "Symbols Nerd Font"
"Symbols Nerd Font" "Noto Color Emoji"
"Noto Color Emoji" "JetbrainsMono Nerd Font"
"JetbrainsMono Nerd Font" ];
]; 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,33 +83,31 @@ 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 {
{ Settings = gtkIni;
"xdg/gtk-4.0/settings.ini".text = toGtk3Ini {
Settings = gtkIni;
};
"xdg/gtk-3.0/settings.ini".text = toGtk3Ini {
Settings = gtkIni;
};
"xdg/gtk-4.0/gtk.css".text = css;
"xdg/gtk-3.0/gtk.css".text = css;
"xdg/gtk-2.0/gtkrc".text = ''
gtk-cursor-theme-name = BreezeX-RosePine-Linux
gtk-cursor-theme-size = ${toString cursorSize}
gtk-theme-name = ${cfg.theme.name}
gtk-icon-theme-name = ${cfg.iconTheme.name}
gtk-font-name = Lexend 11
'';
"xdg/Xresources".text = ''
Xcursor.size: ${toString cursorSize}
Xcursor.theme: BreezeX-RosePine-Linux
'';
}; };
"xdg/gtk-3.0/settings.ini".text = toGtk3Ini {
Settings = gtkIni;
};
"xdg/gtk-4.0/gtk.css".text = css;
"xdg/gtk-3.0/gtk.css".text = css;
"xdg/gtk-2.0/gtkrc".text = ''
gtk-cursor-theme-name = BreezeX-RosePine-Linux
gtk-cursor-theme-size = ${toString cursorSize}
gtk-theme-name = ${cfg.theme.name}
gtk-icon-theme-name = ${cfg.iconTheme.name}
gtk-font-name = Lexend 11
'';
"xdg/Xresources".text = ''
Xcursor.size: ${toString cursorSize}
Xcursor.theme: BreezeX-RosePine-Linux
'';
};
}; };
}; };
} }

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,11 +73,12 @@ in
plymouth = { plymouth = {
enable = true; enable = true;
themePackages = [ themePackages = [
(pkgs.adi1090x-plymouth-themes.override { (pkgs.adi1090x-plymouth-themes.override
selected_themes = [ {
"hud_3" selected_themes = [
]; "hud_3"
}) ];
})
]; ];
theme = "hud_3"; theme = "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" [
"repos" "cloud"
] "repos"
++ map (dir: ".config/${dir}") [ ]
"nicotine" ++ map (
"Signal" dir: ".config/${dir}"
"Nextcloud" ) ["nicotine" "Signal" "Nextcloud" "emacs" "doom"]
"emacs" ++ map (
"doom" dir: ".cache/${dir}"
] ) ["tealdeer" "keepassxc" "nix" "starship" "nix-index" "mozilla" "zsh" "nvim"]
++ map (dir: ".cache/${dir}") [ ++ map (
"tealdeer" dir: ".local/share/${dir}"
"keepassxc" ) ["direnv" "Steam" "TelegramDesktop" "PrismLauncher" "nicotine" "zoxide" ".keepass"];
"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,28 +27,31 @@ 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 =
programs.niri = { mkIf (cfg.enable
enable = true; || isGraphical)
package = patched-niri; {
}; programs.niri = {
# The niri module auto enables the gnome keyring, enable = true;
# which is something I direly want to avoid. package = patched-niri;
services.gnome.gnome-keyring.enable = mkForce false; };
# The niri module auto enables the gnome keyring,
# which is something I direly want to avoid.
services.gnome.gnome-keyring.enable = mkForce false;
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
xwayland-satellite (pkgs)
avizo xwayland-satellite
playerctl avizo
wl-clipboard playerctl
; wl-clipboard
;
};
}; };
};
} }

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