Compare commits

...

3 commits

Author SHA1 Message Date
f2d0e9239f
templates: fix home template
Signed-off-by: Bloxx12 <charlie@charlieroot.dev>
Change-Id: I6a6a696493a9883095a74467ffd3154851585173
2025-07-20 02:14:33 +02:00
e641dfa114
treewide: format using nixfmt
Signed-off-by: Bloxx12 <charlie@charlieroot.dev>
Change-Id: I6a6a69641c36f9763e104087a559c148d0449f00
2025-07-20 02:14:32 +02:00
f4464732e3
tooling: switch from alejandra to nixfmt
Signed-off-by: Bloxx12 <charlie@charlieroot.dev>
Change-Id: I6a6a696436b90e48895139b7e0b59b75c0e64cae
2025-07-20 02:14:31 +02:00
116 changed files with 1608 additions and 1087 deletions

View file

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

View file

@ -3,65 +3,38 @@
# No inputs, take this flakers
outputs = _: let
sources = import ./npins;
nixpkgs = (import sources.flake-compat {src = sources.nixpkgs;}).outputs;
outputs =
_:
let
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;
inherit (nixpkgs) lib;
eachSystem = lib.genAttrs (import sources.systems);
pkgsFor = nixpkgs.legacyPackages;
inputs = sources;
in {
nixosConfigurations = import ./default.nix;
packages = lib.mapAttrs (_: pkgs: {
inherit
(import ./packages {
inherit inputs pkgs sources;
})
fish
helix
kakoune
nushell
;
}) pkgsFor;
devShells = lib.mapAttrs (_: pkgs: {
default = pkgs.mkShellNoCC {
packages = [
(pkgs.callPackage (sources.npins + "/npins.nix") { })
];
env.NPINS_OVERRIDE_nichts = ".";
};
}) pkgsFor;
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;
};
templates = import ./templates;
};
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -3,14 +3,21 @@
lib,
modulesPath,
...
}: {
imports = [(modulesPath + "/installer/scan/not-detected.nix")];
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot = {
initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "sd_mod"];
initrd.kernelModules = [];
kernelModules = [];
extraModulePackages = [];
initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"nvme"
"usbhid"
"sd_mod"
];
initrd.kernelModules = [ ];
kernelModules = [ ];
extraModulePackages = [ ];
};
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
@ -21,6 +28,5 @@
# networking.interfaces.enp4s0.useDHCP = lib.mkDefault true;
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,8 +3,10 @@
lib,
pkgs,
...
}: let
}:
let
xanmod_custom = callPackage ./xanmod.nix;
in {
in
{
boot.kernelPackages = xanmod_custom;
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -2,19 +2,24 @@
lib,
modulesPath,
...
}: {
}:
{
imports = [
(modulesPath + "/profiles/qemu-guest.nix")
];
boot = {
initrd.availableKernelModules = ["xhci_pci" "virtio_scsi" "sr_mod"];
initrd.kernelModules = [];
kernelModules = [];
extraModulePackages = [];
initrd.availableKernelModules = [
"xhci_pci"
"virtio_scsi"
"sr_mod"
];
initrd.kernelModules = [ ];
kernelModules = [ ];
extraModulePackages = [ ];
};
swapDevices = [];
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -3,7 +3,8 @@
lib,
pkgs,
...
}: let
}:
let
mkAcmeCert = domain: {
# 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
@ -15,7 +16,8 @@
email = "charlie@charlieroot.dev";
group = "nginx";
};
in {
in
{
security.acme = {
acceptTerms = true;
defaults = {

View file

@ -3,7 +3,8 @@
lib,
pkgs,
...
}: let
}:
let
inherit (pkgs) fetchurl;
inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption;
@ -16,7 +17,8 @@
img = ./img;
dataDir = "/srv/data/forgejo";
dumpDir = "/srv/data/forgejo-dump";
in {
in
{
options.modules.system.services.forgejo.enable = mkEnableOption "forgejo";
config = mkIf cfg.enable {
@ -50,7 +52,7 @@ in {
group = "git";
isSystemUser = true;
};
users.groups.git = {};
users.groups.git = { };
services.forgejo = {
enable = true;
@ -113,53 +115,55 @@ in {
};
};
systemd.tmpfiles.rules = let
# no crawlers, thank you.
robots = pkgs.writeText "robots-txt" ''
User-agent: *
Disallow: /
'';
base-brand = fetchurl {
url = "https://codeberg.org/Codeberg-Infrastructure/forgejo/raw/branch/codeberg-10/web_src/css/themes/codeberg/base-brand.css";
hash = "sha256-QJ775HpINf8klO3d/8h+tEw0vk34p19dWUCWWuVwcho=";
};
dark-variables = fetchurl {
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=";
};
theme-codeberg-dark = fetchurl {
url = "https://codeberg.org/Codeberg-Infrastructure/forgejo/raw/branch/codeberg-10/web_src/css/themes/theme-codeberg-dark.css";
hash = "sha256-KyXznH49koRGlzIDDqagN4PvFGD/zCX//wrctmtfgBs=";
};
in [
"d '${customDir}/public' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets/img' 0750 ${user} ${group} - -"
# Copeberg logo, thanks Raf <3
"L+ '${customDir}/public/assets/img/logo.svg' - - - - ${img}/logo.svg"
"L+ '${customDir}/public/assets/img/logo.png' - - - - ${img}/logo.png"
"L+ '${customDir}/public/assets/img/apple-touch-icon' - - - - ${img}/logo.png"
"L+ '${customDir}/public/assets/img/favicon.svg' - - - - ${img}/logo.svg"
"L+ '${customDir}/public/assets/img/favicon.png' - - - - ${img}/logo.png"
systemd.tmpfiles.rules =
let
# no crawlers, thank you.
robots = pkgs.writeText "robots-txt" ''
User-agent: *
Disallow: /
'';
base-brand = fetchurl {
url = "https://codeberg.org/Codeberg-Infrastructure/forgejo/raw/branch/codeberg-10/web_src/css/themes/codeberg/base-brand.css";
hash = "sha256-QJ775HpINf8klO3d/8h+tEw0vk34p19dWUCWWuVwcho=";
};
dark-variables = fetchurl {
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=";
};
theme-codeberg-dark = fetchurl {
url = "https://codeberg.org/Codeberg-Infrastructure/forgejo/raw/branch/codeberg-10/web_src/css/themes/theme-codeberg-dark.css";
hash = "sha256-KyXznH49koRGlzIDDqagN4PvFGD/zCX//wrctmtfgBs=";
};
in
[
"d '${customDir}/public' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets/img' 0750 ${user} ${group} - -"
# Copeberg logo, thanks Raf <3
"L+ '${customDir}/public/assets/img/logo.svg' - - - - ${img}/logo.svg"
"L+ '${customDir}/public/assets/img/logo.png' - - - - ${img}/logo.png"
"L+ '${customDir}/public/assets/img/apple-touch-icon' - - - - ${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
"d '${customDir}/public/assets' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets/css' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets/css/codeberg' 0750 ${user} ${group} - -"
# Theming shenanigans
"d '${customDir}/public/assets' 0750 ${user} ${group} - -"
"d '${customDir}/public/assets/css' 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/codeberg/base-brand.css' - - - - ${base-brand}"
"L+ '${customDir}/public/assets/css/codeberg/dark-variables.css' - - - - ${dark-variables}"
"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/dark-variables.css' - - - - ${dark-variables}"
# Templates
"d '${customDir}/templates' 0750 ${user} ${group} - -"
"d '${customDir}/templates/repo' 0750 ${user} ${group} - -"
# Home page
"L+ '${customDir}/templates/home.tmpl' - - - - ${./templates}/home.tmpl"
"L+ '${customDir}/templates/repo/header.tmpl' - - - - ${./templates/repo}/header.tmpl"
# Templates
"d '${customDir}/templates' 0750 ${user} ${group} - -"
"d '${customDir}/templates/repo' 0750 ${user} ${group} - -"
# Home page
"L+ '${customDir}/templates/home.tmpl' - - - - ${./templates}/home.tmpl"
"L+ '${customDir}/templates/repo/header.tmpl' - - - - ${./templates/repo}/header.tmpl"
# Fuck off scrapers
"L+ ${customDir}/public/robots.txt - - - - ${robots.outPath}"
];
# Fuck off scrapers
"L+ ${customDir}/public/robots.txt - - - - ${robots.outPath}"
];
};
}

View file

@ -7,49 +7,10 @@
<h1 class="ui icon header title">
{{AppDisplayName}}
</h1>
<h2>A very painful Git service</h2>
<h2>{{ctx.Locale.Tr "startpage.app_desc"}}</h2>
</div>
</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>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>
{{template "home_forgejo" .}}
</div>
{{template "base/footer" .}}

View file

@ -0,0 +1,36 @@
<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,7 +3,8 @@
lib,
pkgs,
...
}: let
}:
let
inherit (builtins) fetchurl;
inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption;
@ -11,11 +12,12 @@
cfg = config.modules.system.services.grafana;
domain = "info.copeberg.org";
port = 4021;
in {
in
{
options.modules.system.services.grafana.enable = mkEnableOption "Grafana, a graphing service";
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;

View file

@ -3,7 +3,8 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib.meta) getExe getExe';
inherit (lib.modules) mkIf;
inherit (lib.options) mkOption mkEnableOption;
@ -12,7 +13,8 @@
inherit (config.meta.mainUser) username;
cfg = config.modules.services.greetd;
uwsmEnabled = config.modules.services.uwsm.enable;
in {
in
{
options.modules.services.greetd = {
enable = mkEnableOption "greetd";
greeter = mkOption {
@ -27,33 +29,33 @@ in {
description = "Which login session to start";
type = str;
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 {
services.greetd = let
session = {
# command = ''
# ${pkgs.greetd.tuigreet}/bin/tuigreet \
# -c \"${cfg.session}\" \
# -r
# -t --time-format "DD.MM.YYYY"
# --asteriks'';
services.greetd =
let
session = {
# command = ''
# ${pkgs.greetd.tuigreet}/bin/tuigreet \
# -c \"${cfg.session}\" \
# -r
# -t --time-format "DD.MM.YYYY"
# --asteriks'';
command = "${getExe config.programs.uwsm.package} start hyprland-uwsm.desktop";
user = username;
command = "${getExe config.programs.uwsm.package} start hyprland-uwsm.desktop";
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,12 +2,14 @@
config,
lib,
...
}: let
}:
let
inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption;
cfg = config.modules.services.kanata;
in {
in
{
options.modules.services.kanata.enable = mkEnableOption "kanata";
config = mkIf cfg.enable {
services.kanata = {

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -3,12 +3,14 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib.meta) getExe';
inherit (lib.modules) mkIf;
cfg = config.modules.system.services.owncloud;
in {
in
{
options.modules.system.services.owncloud.enable = lib.mkEnableOption "owncloud";
config = {
@ -16,11 +18,11 @@ in {
description = "Owncloud client service";
# 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.
partOf = ["graphical-session.target"];
partOf = [ "graphical-session.target" ];
# gets started only after graphical session
after = ["graphical-session.target"];
after = [ "graphical-session.target" ];
serviceConfig = {
ExecStart = "${getExe' pkgs.owncloud-client "owncloud"}";

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -2,12 +2,14 @@
config,
lib,
...
}: let
}:
let
inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption;
cfg = config.modules.system.hardware;
in {
in
{
options.modules.system.hardware = {
nvidia = {
enable = mkEnableOption "Nvidia graphics drivers";
@ -32,6 +34,6 @@ in {
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,19 +3,20 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib.modules) mkDefault mkIf;
inherit (lib.options) mkEnableOption;
cfg = config.modules.system.hardware.intel;
in {
in
{
options.modules.system.hardware.intel.enable = mkEnableOption "Intel Hardware";
config = mkIf cfg.enable {
hardware = {
cpu.intel.updateMicrocode = mkDefault config.hardware.enableRedistributableFirmware;
graphics.extraPackages = builtins.attrValues {
inherit
(pkgs)
inherit (pkgs)
intel-vaapi-driver
intel-media-driver
;

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -2,16 +2,18 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib.modules) mkForce mkDefault;
in {
in
{
security = {
sudo-rs.enable = mkForce false;
sudo = {
enable = true;
# We use the default sudo package, but with insults if we
# 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
wheelNeedsPassword = mkDefault true;

View file

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

View file

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

View file

@ -3,7 +3,8 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib.modules) mkForce mkIf;
inherit (lib.options) mkEnableOption;
inherit (config.modules.system) isGraphical;
@ -27,31 +28,28 @@
})
];
});
in {
in
{
options.modules.desktops.niri.enable = mkEnableOption "Niri, a scolling tiling wayland compositor";
config =
mkIf (cfg.enable
|| isGraphical)
{
programs.niri = {
enable = true;
package = patched-niri;
};
# 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.systemPackages = builtins.attrValues {
inherit
(pkgs)
xwayland-satellite
avizo
playerctl
wl-clipboard
;
};
config = mkIf (cfg.enable || isGraphical) {
programs.niri = {
enable = true;
package = patched-niri;
};
# 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.systemPackages = builtins.attrValues {
inherit (pkgs)
xwayland-satellite
avizo
playerctl
wl-clipboard
;
};
};
}

View file

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