Compare commits

75 Commits

Author SHA1 Message Date
471478ed6b meow 2026-03-20 01:05:48 +00:00
5d01659350 added new scx 2026-03-20 00:45:40 +00:00
d202d116c0 cachyos added 2026-03-20 00:36:34 +00:00
5749c06b20 cachy kernel test 2026-03-20 00:31:05 +00:00
cdaf170f6f added cachyos cache 2026-03-20 00:14:27 +00:00
4a4283988f quickshell: updated battery update logic 2026-03-19 12:30:34 +00:00
4a1e5afd79 meow 2026-03-18 12:09:46 +00:00
6de66cf1cf nix flake update 2026-03-18 11:21:40 +00:00
d37e468ae8 meow ? 2026-03-18 11:04:59 +00:00
2797bfee0e meow 2026-03-18 07:28:47 +00:00
3e19edc73a niri init 2026-03-17 08:23:42 +00:00
bc336fd6cf guh 2026-03-16 23:09:47 +00:00
8e94344e8a meow 2026-03-16 23:07:48 +00:00
33e497672a meow 2026-03-15 20:21:52 +00:00
9b3135c378 quickshell: hides widgets if they dont provide useful information 2026-03-15 20:21:08 +00:00
7a1caeaaa3 added audio to qs && nix flake update 2026-03-14 15:36:48 +00:00
ccd6b38184 meow 2026-03-14 14:49:15 +00:00
0ceda0b675 battery/ac target fixes (wip, still needs work) 2026-03-14 11:08:36 +00:00
8229f20975 gihcomit 2026-03-13 10:24:07 +00:00
6c33f7f53e *explodes* 2026-03-13 01:04:01 +00:00
64f2e34018 added battery widget on qs 2026-03-13 00:58:44 +00:00
ea47a2ca71 Wip 2026-03-13 00:51:09 +00:00
824f75f9cb meow 2026-03-12 17:00:21 +00:00
77d520e944 added: lavd scx scheduler for more powerefficentcy 2026-03-12 16:57:07 +00:00
963b45ffa2 more 2026-03-12 11:15:52 +00:00
52b3f2eb5e guh 2026-03-12 11:02:59 +00:00
b0787ecfd6 guh 2026-03-12 10:47:01 +00:00
73fcd3619e meow 2026-03-12 09:48:24 +00:00
119a2433b4 check 2026-03-12 09:48:00 +00:00
cbd3c408e1 qol(qs): scaling based on exists, focused and not 2026-03-11 11:32:07 +00:00
eb593db0c0 sche 2026-03-10 16:53:12 +00:00
961afbbff7 changes like workspace added to qs and zen as browser 2026-03-10 15:11:12 +00:00
6f25e849f0 hm fix 2026-03-02 04:07:29 +00:00
71b1e05b2d nix flake update (+etc) 2026-03-02 04:05:35 +00:00
320cac603d all 2026-02-23 09:26:58 +00:00
a306a8cb9a meow 2026-02-23 09:25:11 +00:00
db22304952 last resort nix flake update 2026-02-22 16:55:32 +00:00
79c70eea54 d 2026-02-22 16:46:50 +00:00
598306c57e meow 2026-02-22 16:08:53 +00:00
6af15d5a00 bwa 2026-02-22 15:58:34 +00:00
93f81a1f7f guh 2026-02-22 15:45:07 +00:00
ba58db5873 d 2026-02-21 17:53:25 +00:00
9fbb2574d4 a 2026-02-21 17:52:02 +00:00
55c5f90b5f awa 2026-02-21 17:13:35 +00:00
439b3e5470 more qs changes 2026-02-20 16:45:28 +00:00
bd559c0507 basic ass quickshell added 2026-02-20 16:26:52 +00:00
c9d93f2e13 added stuff 2026-02-19 16:20:36 +00:00
e5c5a641e2 mreow 2026-02-18 10:39:30 +00:00
d001b30906 testing 2026-02-18 10:10:59 +00:00
32d8f9bd4f ba 2026-02-17 23:40:43 +00:00
1caf2a2583 desktop switch now 2026-02-17 22:45:14 +00:00
07e47f87e6 more modules 2026-02-17 22:24:41 +00:00
5f063d825e mrweow 2026-02-16 13:28:15 +00:00
205b0a516b d 2026-02-16 13:05:29 +00:00
a9fec07b50 runner for hyprland 2026-02-15 12:40:32 +00:00
00411b9d9f fonts 2026-02-15 12:29:05 +00:00
cea20ef832 pm 2026-02-15 12:17:16 +00:00
a0963d09f0 fonts 2026-02-15 12:13:34 +00:00
53502772a0 fixed... something >? 2026-02-15 11:58:48 +00:00
d002ca372e aaa 2026-02-14 19:26:56 +00:00
f4387c8865 meow 2026-02-14 19:26:55 +00:00
b5720666ea update 2026-02-14 19:18:50 +00:00
5a8bd09491 bwa 2026-02-14 18:23:59 +00:00
b99ccfc588 bwa 2026-02-14 11:30:33 +00:00
6cc1c98f75 guh 2026-02-14 00:52:39 +00:00
58c8146cc0 progress... 2026-02-13 19:21:27 +00:00
540359308e meow 2026-02-13 11:34:24 +00:00
26195b6411 added ha config vol 2026-02-12 22:45:28 +00:00
c4025a9caa bwa 2026-02-11 19:15:10 +00:00
5ef0b0b9a6 stuff stuff and stuff 2026-02-11 17:41:30 +00:00
51293382e8 meow 2026-02-11 14:19:39 +00:00
5340ec1756 wip 2026-02-10 21:40:01 +00:00
1b80778422 some wip 2026-02-08 23:23:18 +00:00
0d3c5c559f add(server) 2026-02-08 00:01:25 +00:00
3c57067a6f moved config 2026-02-07 19:08:58 +00:00
238 changed files with 3725 additions and 6702 deletions

View File

@@ -2,9 +2,10 @@
creation_rules:
# Rule to encrypt YAML secret files in a specific directory
- encrypted_regex: '^(data|stringData)$' # Encrypt data and stringData by default (useful for Kubernetes secrets)
path_regex: secrets/.*\.yaml$ # Applies to all files in the secrets/ directory
path_regex: config/modules/secrets/content/*.*\.yaml$ # Applies to all files in the secrets/ directory
age:
- "age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838" # pc-user-doloro
- "age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh" # pc-system
- "age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a" # laptop-user-doloro
- "age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq" # laptop-system
- "age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05" # rpi5

7
config/defaults.nix Normal file
View File

@@ -0,0 +1,7 @@
{ den, ... }:
{
den.default = {
nixos.system.stateVersion = "25.11";
homeManager.home.stateVersion = "25.11";
};
}

11
config/dendritic.nix Normal file
View File

@@ -0,0 +1,11 @@
{ inputs, lib, ... }:
{
imports = [
inputs.flake-file.flakeModules.dendritic
inputs.den.flakeModules.dendritic
];
flake-file.do-not-edit = "You FAGGOT; Do NOT edit this file !!!!, run 'nix run .#write-flake' ";
flake-file.outputs = lib.mkForce ''
inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./config)
'';
}

View File

@@ -0,0 +1,70 @@
{
modules,
__findFile,
...
}:
{
den.aspects.desktop = {
includes = [ modules.disko ];
nixos =
{ lib, ... }:
{
disko.devices = {
disk = {
main = {
device = lib.mkDefault "/dev/disk/by-id/nvme-CT1000P2SSD8_2221E632CD1F";
type = "disk";
content = {
type = "gpt";
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
};
ESP = {
name = "ESP";
priority = 1;
size = "4G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "umask=0077" ];
};
};
root = {
size = "100%";
content = {
type = "btrfs";
extraArgs = [ "-f" ]; # Override existing partition
# Subvolumes must set a mountpoint in order to be mounted,
# unless their parent is mounted
subvolumes = {
# Subvolume name is different from mountpoint
"@" = {
mountpoint = "/";
};
# Subvolume name is the same as the mountpoint
"@home" = {
mountpoint = "/home";
};
# Parent is not mounted so the mountpoint must be set
"@nix" = {
mountpoint = "/nix";
};
"@blackhole" = {
mountpoint = "/var/blackhole";
};
};
};
};
};
};
};
};
};
};
};
}

View File

@@ -0,0 +1,31 @@
{ den, modules, ... }:
{
den.aspects.desktop = {
nixos =
{
modulesPath,
lib,
pkgs,
config,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"ahci"
"usbhid"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
};
};
}

View File

@@ -0,0 +1,75 @@
{
den,
__findFile,
modules,
inputs,
...
}:
{
den.aspects.doloro-desktop = {
includes = [
<den/primary-user>
den.aspects.doloro-shared
modules.sops
modules.hyprland
modules.fish
modules.tuigreet
modules.kitty
modules.fonts
<modules/hyprland/doloro-settings>
(modules.obs {
audio = true;
autostart = true;
})
<modules/common/gaming>
# modules.helium
(<modules/helium> {
default = true;
})
# modules.niri # Testing
modules.stylix
modules.quickshell
modules.nix-ld
];
nixos =
{ config, pkgs, ... }:
{
users.users.doloro = {
shell = pkgs.fish;
hashedPasswordFile = config.sops.secrets."doloro-hashed_password".path;
};
};
homeManager =
{ home, pkgs, ... }:
{
wayland.windowManager.hyprland.settings = {
monitor = [
"HDMI-A-1, 1920x1080@60, 0x0, 1"
"DP-3, 1920x1080@144, 1920x0, 1"
];
exec-once = [
"hyprctl dispatch workspace 2" # shit solution to get quickshell on the right monitor
];
workspace = [
"name:2, monitor:DP-3"
];
input = {
kb_layout = "gb";
follow_mouse = 2;
sensitivity = -0.5;
};
};
home.packages = with pkgs; [
equibop
telegram-desktop
obsidian
pear-desktop
prismlauncher
deadlock-mod-manager
gamescope
];
nixpkgs.config.allowUnfree = true;
programs.home-manager.enable = true;
};
};
}

View File

@@ -0,0 +1,97 @@
{
den,
modules,
pkgs,
inputs,
__findFile,
...
}:
{
den.aspects.desktop = {
includes = [
modules.nix
];
nixos =
{ pkgs, config, ... }:
{
boot.loader.grub.enable = true;
boot.loader.grub.device = "nodev";
boot.loader.grub.devices = [
"/dev/disk/by-id/nvme-CT1000P2SSD8_2221E632CD1F"
"nodev"
];
#boot.loader.efi.canTouchEfiVariables = true;
boot.loader.grub.efiSupport = true;
boot.loader.grub.efiInstallAsRemovable = true;
networking.hostName = "doloroo-main"; # Define your hostname.
boot.kernelPackages =
inputs.nix-cachyos-kernel.legacyPackages.x86_64-linux.linuxPackages-cachyos-lts-lto;
boot.initrd.verbose = false;
boot.kernelParams = [
"boot.shell_on_fail"
"rd.systemd.show_status=auto"
];
services.openssh.enable = true;
networking.networkmanager.enable = true;
networking.firewall.enable = false;
security.rtkit.enable = true;
hardware.graphics = {
enable = true;
};
services.xserver.videoDrivers = [ "nvidia" ];
fileSystems."/mnt/2tb" = {
device = "/dev/disk/by-uuid/0f49aec7-4af2-4f4f-b475-3f4fad2b59c2";
fsType = "ext4";
options = [
# If you don't have this options attribute, it'll default to "defaults"
# boot options for fstab. Search up fstab mount options you can use
"defaults"
"users" # Allows any user to mount and unmount
"nofail" # Prevent system from failing if this drive doesn't mount
"exec"
];
};
services.gnome.gnome-keyring.enable = true;
hardware.nvidia = {
# Modesetting is required.
modesetting.enable = true;
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
# Enable this if you have graphical corruption issues or application crashes after waking
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
# of just the bare essentials.
powerManagement.enable = true;
# Fine-grained power management. Turns off GPU when not in use.
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
powerManagement.finegrained = false;
# prime.offload.enable = true;
# Use the NVidia open source kernel module (not to be confused with the
# independent third-party "nouveau" open source driver).
# Support is limited to the Turing and later architectures. Full list of
# supported GPUs is at:
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
# Only available from driver 515.43.04+
open = false;
# Enable the Nvidia settings menu,
# accessible via `nvidia-settings`.
nvidiaSettings = true;
# Optionally, you may need to select the appropriate driver version for your specific GPU.
package = config.boot.kernelPackages.nvidiaPackages.latest;
};
};
};
}

View File

@@ -0,0 +1,75 @@
{
modules,
__findFile,
...
}:
{
den.aspects.laptop = {
includes = [ modules.disko ];
nixos =
{ lib, ... }:
{
disko.devices = {
disk = {
main = {
device = "/dev/nvme0n1";
type = "disk";
content = {
type = "gpt";
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
};
ESP = {
name = "ESP";
priority = 1;
size = "4G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "umask=0077" ];
};
};
plainSwap = {
size = "48G";
content = {
type = "swap";
discardPolicy = "both"; # Both "once" and page discard policies
resumeDevice = true; # Use for hibernation resume device
};
};
root = {
size = "100%";
content = {
type = "btrfs";
extraArgs = [ "-f" ]; # Override existing partition
# Subvolumes must set a mountpoint in order to be mounted,
# unless their parent is mounted
subvolumes = {
# Subvolume name is different from mountpoint
"@" = {
mountpoint = "/";
};
# Subvolume name is the same as the mountpoint
"@home" = {
mountpoint = "/home";
};
# Parent is not mounted so the mountpoint must be set
"@nix" = {
mountpoint = "/nix";
};
};
};
};
};
};
};
};
};
};
};
}

View File

@@ -0,0 +1,35 @@
{
den,
modules,
__findFile,
...
}:
{
den.aspects.laptop = {
nixos =
{
pkgs,
lib,
config,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"xhci_pci"
"thunderbolt"
"vmd"
"nvme"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
};
};
}

View File

@@ -0,0 +1,63 @@
{
den,
__findFile,
modules,
lib,
...
}:
{
den.aspects.doloro-laptop = {
includes = [
<den/primary-user>
den.aspects.doloro-shared
modules.hyprland
<modules/hyprland/doloro-settings>
modules.sops
modules.fish
(<modules/helium> {
default = true;
})
modules.kitty
modules.stylix
modules.quickshell
modules.lavd
];
nixos =
{ config, pkgs, ... }:
{
users.users.doloro = {
isNormalUser = true;
shell = pkgs.fish;
hashedPasswordFile = config.sops.secrets."doloro-hashed_password".path;
};
};
homeManager =
{ pkgs, ... }:
{
wayland.windowManager.hyprland.settings = {
monitor = [
"eDP-1, 2880x1800@120, 0x0, 2"
];
input = {
kb_layout = "gb";
follow_mouse = 2;
sensitivity = 0;
};
decoration = {
blur = lib.mkForce {
enabled = false;
passes = 1;
new_optimizations = true;
ignore_opacity = false;
};
};
};
home.packages = with pkgs; [
telegram-desktop
equibop
obsidian
];
nixpkgs.config.allowUnfree = true;
};
};
}

View File

@@ -0,0 +1,219 @@
{
den,
modules,
__findFile,
inputs,
lib,
...
}:
{
den.aspects.laptop = {
includes = [
modules.nix
modules.tuigreet
<modules/common/laptop-power-management>
modules.fonts
(modules.tdp {
batt = {
cpu = {
long-term = 10;
short-term = 15;
};
};
ac = {
cpu = {
long-term = 120;
short-term = 120;
};
};
})
];
nixos =
{ pkgs, config, ... }:
{
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# boot.kernelPackages = pkgs.linuxPackages_6_12; # Hibernate works on 6.12 but not on latest
# boot.kernelPackages = pkgs.linuxPackages_latest; # Unpinned the linux version for now.. as i am not using hibernate that often
boot.kernelPackages =
inputs.nix-cachyos-kernel.legacyPackages.x86_64-linux.linuxPackages-cachyos-lts-lto;
networking.hostName = "doloro-nixos-laptop"; # Define your hostname.
security.rtkit.enable = true;
# Configure network connections interactively with nmcli or nmtui.
networking.networkmanager.enable = true;
# Set your time zone.
# time.timeZone = "Europe/London";
services.automatic-timezoned.enable = true;
nix.settings = {
substituters = [
"https://nix-community.cachix.org"
"https://cache.nixos.org/"
"https://attic.scug.io/pkgs"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"pkgs:+sRbfiZMMX5R3PuAPtIRz/emowDoGZNpozibrnrAvuc="
];
experimental-features = [
"flakes"
"nix-command"
];
trusted-users = [
"doloro"
];
};
services.gnome.gnome-keyring.enable = true;
hardware = {
# firmware = [ pkgs.intel-npu-driver ];
cpu.intel = {
# npu.enable = true;
};
graphics = {
enable = true;
# https://github.com/intel/libvpl?tab=readme-ov-file#dispatcher-behavior-when-targeting-intel-gpus
extraPackages = with pkgs; [
vpl-gpu-rt
intel-media-driver # VA-API (iHD) userspace
intel-vaapi-driver
# vpl-gpu-rt # oneVPL (QSV) runtime
intel-compute-runtime # OpenCL (NEO) + Level Zero for Arc/Xe
];
};
};
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = true;
PermitRootLogin = "prohibit-password";
};
};
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBaa6Z5qtBSLEz+A4fQGYPfkOISsRQlmKkVbcx2zxML7"
];
# Select internationalisation properties.
# i18n.defaultLocale = "en_US.UTF-8";
# console = {
# font = "Lat2-Terminus16";
# keyMap = "us";
# useXkbConfig = true; # use xkb.options in tty.
# };
# Enable the X11 windowing system.
services.xserver.enable = true;
services.pipewire = {
enable = true;
pulse.enable = true;
};
services.libinput.enable = true;
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
# Define a user account. Don't forget to set a password with passwd.
# users.users.doloro = {
# isNormalUser = true;
# shell = pkgs.fish;
# extraGroups = [ "wheel" ]; # Enable sudo for the user.
# packages = with pkgs; [
# tree
# ];
# hashedPasswordFile = config.sops.secrets."doloro-hashed_password".path;
# openssh.authorizedKeys.keys = [
# "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBaa6Z5qtBSLEz+A4fQGYPfkOISsRQlmKkVbcx2zxML7" # pc public key
# ];
# # initialPassword = "sex";
# };
users.users.root = {
password = "meowmeowmeow";
};
users.mutableUsers = false;
services.system76-scheduler.enable = false;
powerManagement = {
enable = true;
# powertop.enable = true;
};
boot.kernelParams = [
# "mem_sleep_default=deep"
"i915.fastboot=1"
"ahci.mobile_lpm_policy=1"
"intel_idle.max_cstate=11"
"i915.modeset=1"
"quiet"
"splash"
# "idle=halt"
];
services.logind.settings.Login = {
HandleLidSwitch = "hibernate";
HandleLidSwitchExternalPower = "suspend";
HandleLidSwitchDocked = "ignore";
};
# systemd.sleep.extraConfig = ''
# HibernateDelaySec=30min
# SuspendEstimationSec=120
# '';
# programs.firefox.enable = true;
# List packages installed in system profile.
# You can use https://search.nixos.org/ to find more packages (and options).
# environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
# git
# wget
# # tlp-pd
# brightnessctl
# nvtopPackages.intel
# seahorse
# ];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# Copy the NixOS configuration file and link it from the resulting system
# (/run/current-system/configuration.nix). This is useful in case you
# accidentally delete configuration.nix.
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
# to actually do that.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "25.11"; # Did you read the comment?
};
};
}

View File

@@ -0,0 +1,36 @@
{
den,
modules,
__findFile,
...
}:
{
den.aspects.doloro-shared = {
includes = [
modules.nixvim
modules.nix
modules.tmux
<modules/git/doloro>
modules.hyfetch
modules.ssh
];
homeManager =
{ pkgs, lib, ... }:
{
home = {
username = "doloro";
homeDirectory = "/home/doloro";
packages = with pkgs; [
wl-clipboard
# home-manager
btop
];
};
programs.home-manager.enable = true;
};
nixos =
{ lib, ... }:
{
};
};
}

View File

@@ -0,0 +1,36 @@
{
den,
__findFile,
modules,
...
}:
{
den.aspects.rpi5 = {
includes = [
<modules/raspberry-pi/5>
# <modules/services/traefik>
<modules/services/caddy>
<modules/services/home-assistant>
<modules/services/ddns>
];
nixos = {
networking.hostName = "nixos-001-rp5";
networking.firewall = {
enable = true;
allowedTCPPorts = [
80
443
8080
];
allowedUDPPortRanges = [ ];
};
virtualisation.docker.enable = true;
virtualisation.oci-containers.backend = "docker";
services.openssh.enable = true;
nixpkgs.hostPlatform = "aarch64-linux";
};
};
}

View File

@@ -0,0 +1,39 @@
{
den,
__findFile,
lib,
...
}:
{
# Homes
den.homes.x86_64-linux.doloro-desktop = {
userName = "doloro";
};
# TODO
den.homes.x86_64-linux.doloro-laptop = {
userName = "doloro";
};
# Machines
den.hosts.x86_64-linux.desktop = {
users.doloro = {
aspect = "doloro-desktop";
home-manager.enable = true;
};
};
# TODO
den.hosts.x86_64-linux.laptop = {
users.doloro = {
aspect = "doloro-laptop";
home-manager.enable = true;
};
};
den.schema.user.classes = lib.mkDefault [ "homeManager" ];
# Fixes 'The option `flake.homeConfigurations' is defined multiple times while it's expected to be unique.'
flake.options.homeConfigurations = lib.mkOption {
type = lib.types.attrs;
description = "Home Manager configurations for users.";
};
}

40
config/hosts/servers.nix Normal file
View File

@@ -0,0 +1,40 @@
{
den,
__findFile,
modules,
...
}:
{
# The single rpi5 i have running on the side of my desk
den.aspects = {
doloro-server = {
includes = [
<modules/publicKeys/doloro>
];
nixos = {
users.users.doloro = {
isNormalUser = true;
extraGroups = [
"wheel"
"networkmanager"
];
};
};
};
root-server = {
includes = [
<modules/publicKeys/doloro>
];
};
};
den.hosts.aarch64-linux.rpi5 = {
includes = [ ];
users.doloro = {
aspect = "doloro-server";
};
users.root = {
aspect = "root-server";
};
};
}

10
config/inputs.nix Normal file
View File

@@ -0,0 +1,10 @@
{ ... }:
{
flake-file.inputs = {
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
den.url = "github:vic/den";
};
}

View File

@@ -0,0 +1,12 @@
{
modules,
den,
inputs,
...
}:
{
flake-file.inputs = {
nix-cachyos-kernel.url = "github:xddxdd/nix-cachyos-kernel/release";
};
# inputs.nix-cachyos-kernel.legacyPackages.x86_64-linux.linuxPackages-cachyos-lts-lto;
}

14
config/modules/disko.nix Normal file
View File

@@ -0,0 +1,14 @@
{
inputs,
...
}:
{
flake-file.inputs.disko.url = "github:nix-community/disko";
modules.disko = {
nixos =
{ ... }:
{
imports = [ inputs.disko.nixosModules.disko ];
};
};
}

15
config/modules/dunst.nix Normal file
View File

@@ -0,0 +1,15 @@
{ modules, ... }:
{
modules.dunst = {
homeManager = {
services.dunst = {
enable = true;
settings = {
global = {
font = "Noto Nerd Font 8";
};
};
};
};
};
}

50
config/modules/fish.nix Normal file
View File

@@ -0,0 +1,50 @@
{ modules, ... }:
{
modules.fish = {
nixos = {
programs.fish.enable = true;
};
homeManager =
{ pkgs, ... }:
{
home.shell.enableFishIntegration = true;
home.packages = [ pkgs.nix-output-monitor ];
programs = {
fish = {
enable = true;
shellInit = ''
set -g theme_nerd_fonts yes
set -g theme_color_scheme nord
set -g theme_display_user yes
set -g fish_color_autosuggestion 6F6578
alias nik 'nix'
'';
# alias nos 'sudo echo; sudo nixos-rebuild switch --flake .#${aspect-name} --log-format internal-json -v &| nom --json'
# alias hms 'home-manager switch --flake .#${aspect-name} --log-format internal-json -v &| nom --json'
plugins = [
{
name = "bobthefish";
src = pkgs.fetchFromGitHub {
owner = "oh-my-fish";
repo = "theme-bobthefish";
rev = "e3b4d4eafc23516e35f162686f08a42edf844e40";
sha256 = "sha256-cXOYvdn74H4rkMWSC7G6bT4wa9d3/3vRnKed2ixRnuA=";
};
}
];
};
eza = {
enable = true;
enableFishIntegration = true;
icons = "auto";
git = true;
extraOptions = [ ];
};
direnv = {
enable = true;
nix-direnv.enable = true;
};
};
};
};
}

38
config/modules/fonts.nix Normal file
View File

@@ -0,0 +1,38 @@
{
den,
modules,
inputs,
...
}:
{
flake-file.inputs = {
font-patcher.url = "github:Doloro1978/nix-nerd-fonts-patcher";
};
modules.fonts = {
nixos =
{ pkgs, ... }:
{
config.fonts = {
enableDefaultPackages = true;
packages =
with pkgs;
[
material-design-icons
material-symbols
nerd-fonts.caskaydia-cove
nerd-fonts.noto
noto-fonts-cjk-sans
noto-fonts-cjk-serif
]
++ [
(inputs.font-patcher.lib.patchFont {
font = "${pkgs.googlesans-code}/share/fonts/googlesans-code/GoogleSansCode[wght].ttf";
name = "Google Sans Code Nerd Font";
inherit system;
})
];
fontDir.enable = true;
};
};
};
}

View File

@@ -0,0 +1,8 @@
{ den, modules, ... }:
{
modules.common.provides = {
gaming = {
includes = [ modules.steam ];
};
};
}

View File

@@ -0,0 +1,41 @@
{ den, modules, ... }:
{
modules.steam = {
nixos =
{ pkgs, ... }:
{
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
# Ensure gamescope is inside the steam "fhs"
package = pkgs.steam.override {
extraLibraries = pkgs: [ pkgs.xorg.libxcb ];
extraPkgs =
pkgs: with pkgs; [
attr
xorg.libXcursor
xorg.libXi
xorg.libXinerama
xorg.libXScrnSaver
libpng
libpulseaudio
libvorbis
stdenv.cc.cc.lib
libkrb5
keyutils
mangohud
gamemode
lsof
(gamescope.overrideAttrs {
enableWsi = true;
# Fixes some games being blurry under wayland backend
NIX_CFLAGS_COMPILE = [ "-fno-fast-math" ];
})
];
};
};
};
};
}

45
config/modules/git.nix Normal file
View File

@@ -0,0 +1,45 @@
{ den, modules, ... }:
{
modules.git = {
provides = {
doloro = {
homeManager =
{ home, pkgs, ... }:
{
programs.git = {
enable = true;
settings = {
user = {
name = "Doloro1978";
email = "doloroo@proton.me";
signingKey = "089B373588540877";
};
commit = {
gpgSign = true;
};
pull = {
rebase = true;
};
};
};
programs.gpg = {
enable = true;
};
services = {
gpg-agent = {
enable = true;
pinentry = {
package = pkgs.pinentry-qt;
program = "pinentry-qt";
};
};
};
};
nixos =
{ pkgs, ... }:
{
};
};
};
};
}

34
config/modules/helium.nix Normal file
View File

@@ -0,0 +1,34 @@
{
den,
modules,
inputs,
lib,
...
}:
{
flake-file.inputs = {
heliumFlake = {
url = "github:vikingnope/helium-browser-nix-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
};
modules.helium = settings: {
homeManager =
{ pkgs, home, ... }:
{
home.packages = [
inputs.heliumFlake.packages.x86_64-linux.helium
];
nixpkgs.config.allowUnfree = true;
# Gives me widevine support. yay
xdg.configFile."net.imput.helium/WidevineCdm/latest-component-updated-widevine-cdm" = {
text = ''{"Path":"${pkgs.widevine-cdm}/share/google/chrome/WidevineCdm"}'';
};
wayland.windowManager.hyprland.settings = lib.mkIf settings.default {
binds = [
"$mainMod, E, exec, helium"
];
};
};
};
}

View File

@@ -0,0 +1,32 @@
{ den, modules, ... }:
{
modules.hyfetch = {
homeManager =
{ home, pkgs, ... }:
{
home.packages = [ pkgs.fastfetch ];
programs.hyfetch = {
enable = true;
settings = {
"preset" = "bisexual";
"mode" = "rgb";
"auto_detect_light_dark" = true;
"light_dark" = "dark";
"lightness" = 0.5;
"color_align" = {
"mode" = "custom";
"custom_colors" = {
"1" = 1;
"2" = 0;
};
};
"backend" = "fastfetch";
"args" = null;
"distro" = null;
"pride_month_disable" = false;
"custom_ascii_path" = null;
};
};
};
};
}

View File

@@ -0,0 +1,196 @@
{ modules, ... }:
{
modules.hyprland = {
provides = {
doloro-settings = {
includes = [
modules.dunst
];
homeManager =
{ pkgs, home, ... }:
{
home.packages = [
pkgs.hyprcursor
pkgs.wlogout
pkgs.tofi
pkgs.killall
];
home.pointerCursor = {
enable = true;
name = "rose-pine-hyprcursor";
package = pkgs.rose-pine-hyprcursor;
hyprcursor.enable = true;
};
wayland.windowManager.hyprland.settings = {
env = [
"XCURSOR_THEME,BreezeX-RosePine-Linux"
"XCURSOR_SIZE,24"
"HYPRCURSOR_SIZE,24"
"LIBVA_DRIVER_NAME,nvidia"
"__GLX_VENDOR_LIBRARY_NAME,nvidia"
"WEBKIT_DISABLE_DMABUF_RENDERER,1" # maybe disable if nixos fixes alcom
];
general = {
gaps_in = 1;
gaps_out = 1;
border_size = 1;
# "col.active_border" =
# "rgb(${toString base16.rgb."base06".r},${toString base16.rgb."base06".g},${toString base16.rgb."base06".b})";
# "col.inactive_border" =
# "rgb(${toString base16.rgb."base03".r},${toString base16.rgb."base03".g},${toString base16.rgb."base03".b})";
resize_on_border = false;
allow_tearing = true;
layout = "dwindle";
};
decoration = {
rounding = 4;
rounding_power = 1;
active_opacity = 1.0;
inactive_opacity = 1.0;
shadow = {
enabled = false;
};
blur = {
enabled = true;
passes = 1;
new_optimizations = true;
ignore_opacity = false;
};
};
cursor = {
no_hardware_cursors = true;
};
animations = {
enabled = true;
bezier = [
"easeOutQuint,0.23,1,0.32,1"
"easeInOutCubic,0.65,0.05,0.36,1"
"linear,0,0,1,1"
"almostLinear,0.5,0.5,0.75,1.0"
"quick,0.15,0,0.1,1"
];
animation = [
"global, 1, 10, default"
"border, 1, 5.39, easeOutQuint"
"windows, 1, 2.79, easeOutQuint"
"windowsIn, 1, 1, easeOutQuint, popin 87%"
"windowsOut, 1, 1, linear, popin 87%"
"windowsMove, 1, 1, easeInOutCubic"
"fadeIn, 1, 0.5, almostLinear"
"fadeOut, 1, 0.5, almostLinear"
"fade, 1, 1, quick"
"layers, 1, 3.81, easeOutQuint"
"layersIn, 1, 4, easeOutQuint, fade"
"layersOut, 1, 1.5, linear, fade"
"fadeLayersIn, 1, 1.79, almostLinear"
"fadeLayersOut, 1, 1.39, almostLinear"
"workspaces, 1, 1, almostLinear, slide"
"workspacesIn, 1, 1, easeInOutCubic, slide"
"workspacesOut, 1, 1, easeInOutCubic, slide"
"zoomFactor, 1, 7, quick"
];
};
dwindle = {
pseudotile = true;
preserve_split = true;
};
# master = {
# new_status = master;
# };
misc = {
force_default_wallpaper = -1;
disable_hyprland_logo = false;
enable_anr_dialog = false;
vfr = true;
};
"$mainMod" = "SUPER";
bind = [
(
let
config = pkgs.writeTextFile {
name = "config";
text = ''
width = 100%
height = 100%
border-width = 0
outline-width = 0
padding-left = 35%
padding-top = 35%
result-spacing = 25
num-results = 5
font = monospace
background-color = #000A
'';
};
script = pkgs.writeShellScript "mreow" ''
exec $(tofi-drun -c ${config})
'';
in
"$mainMod, R, exec, ${script}"
)
"$mainMod, C, killactive"
"$mainMod, M, exec, uwsm stop"
"$mainMod, Q, exec, kitty"
"$mainMod, V, togglefloating,"
"$mainMod, P, pseudo, # dwindle"
"$mainMod, J, togglesplit, # dwindle"
"$mainMod, left, movefocus, l"
"$mainMod, right, movefocus, r"
"$mainMod, up, movefocus, u"
"$mainMod, down, movefocus, d"
"$mainMod, L, exec, wlogout"
(
"$mainMod, S, exec, "
+ ''wayfreeze --after-freeze-cmd 'grim -g "$(slurp -d)" - | wl-copy -t image/png;killall wayfreeze' --hide-cursor''
)
"$mainMod, F, fullscreen"
"$mainMod, mouse_down, workspace, e+1"
"$mainMod, mouse_up, workspace, e-1"
", home, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", end, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
", F8, pass, class:^(com\.obsproject\.Studio)$"
"$mainMod, 0, workspace, 10"
"$mainMod SHIFT, 0, movetoworkspace, 10"
]
++ (builtins.concatLists (
builtins.genList (
i:
let
ws = i + 1;
in
[
"$mainMod, ${toString ws}, workspace, ${toString ws}"
"$mainMod SHIFT, ${toString ws}, movetoworkspace, ${toString ws}"
]
) 9
));
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
];
windowrule = [
"match:class .*, suppress_event maximize"
"match:class ^(gamescope)$, workspace 5"
"match:class ^(gamescope)$, immediate true"
"match:class ^(steam)$, workspace 6 silent"
"match:class ^(vesktop)$, workspace 8 silent"
"match:class ^(org.telegram.desktop)$, workspace 8 silent"
"match:class ^(com.obsproject.Studio)$, workspace 10 silent"
"match:initial_title ^(OBS Studio Crash Detected)$, pin true"
"match:initial_title ^(Discord Popout)$, workspace 1 silent"
];
layerrule = [
"match:namespace ^(notifications)$, no_screen_share true"
# "match:namespace ^(quickshell)$, blur true"
];
# exec-once = [
# ];
# we need to auto launch: quickshell, steam, ar_rpc (maybe), vesktop, telegram, qbit, and obs
};
};
};
};
};
}

View File

@@ -0,0 +1,62 @@
{
modules,
inputs,
lib,
...
}:
{
flake-file.inputs = {
hyprland.url = "github:hyprwm/Hyprland";
};
modules.hyprland = {
nixos =
{ pkgs, ... }:
{
imports = [ inputs.hyprland.nixosModules.default ];
environment.systemPackages = with pkgs; [
wayfreeze
grim
slurp
wlogout
ranger
];
programs.xwayland.enable = true;
programs.hyprland = {
enable = true;
# withUWSM = true;
# set the flake package
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
# make sure to also set the portal package, so that they are in sync
portalPackage =
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
};
# gtk.enable = lib.mkForce false;
xdg.portal = {
enable = lib.mkForce false;
extraPortals = [
pkgs.xdg-desktop-portal-termfilechooser
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland
];
};
environment.sessionVariables.NIXOS_OZONE_WL = "1";
hardware.graphics = {
# package = pkgs-unstable.mesa;
# if you also want 32-bit support (e.g for Steam)
# enable32Bit = true;
# package32 = pkgs-unstable.pkgsi686Linux.mesa;
};
};
homeManager =
{ pkgs, ... }:
{
gtk = {
enable = true;
};
wayland.windowManager.hyprland = {
enable = true;
systemd.variables = [ "--all" ];
};
};
};
}

19
config/modules/kitty.nix Normal file
View File

@@ -0,0 +1,19 @@
{ den, modules, ... }:
{
modules.kitty = {
homeManager = {
programs.kitty = {
enable = true;
font = {
name = "Google Sans Code Nerd Font";
size = 11;
};
settings = {
sync_to_monitor = "yes";
background_opacity = 0.6;
cursor_trail = 1;
};
};
};
};
}

View File

@@ -0,0 +1,152 @@
{
modules,
inputs,
lib,
den,
...
}:
{
flake-file.inputs = {
niri-flake = {
url = "github:sodiboo/niri-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
};
modules.niri = {
nixos =
{ pkgs, ... }:
{
imports = [ inputs.niri-flake.nixosModules.niri ];
programs.niri.enable = true;
programs.niri.package = pkgs.niri-unstable;
nixpkgs.overlays = [ inputs.niri-flake.overlays.niri ];
};
homeManager =
{ pkgs, ... }:
{
# The nixos module already imports the hm module
# imports = [ inputs.niri-flake.homeModules.niri ];
gtk.enable = lib.mkForce false;
programs = {
niri = {
# enable = true;
# package = pkgs.niri-unstable;
settings = {
input = {
keyboard = {
xkb = {
layout = "gb";
};
numlock = true;
};
};
cursor = {
size = 16;
};
outputs = {
DP-3 = {
# Philips Consumer Electronics Company PHL 272E1GZ UK02101011104
mode = {
width = 1920;
height = 1080;
refresh = 144.0;
};
focus-at-startup = true;
variable-refresh-rate = false;
};
HDMI-A-1 = {
position = {
x = -1920;
y = 0;
};
scale = 1;
};
};
binds = {
# Navigation
"Mod+Shift+WheelScrollDown" = {
hotkey-overlay.title = "Workspace Down";
cooldown-ms = 150;
action.focus-workspace-down = [ ];
};
"Mod+Shift+WheelScrollUp" = {
hotkey-overlay.title = "Workspace Up";
cooldown-ms = 150;
action.focus-workspace-up = [ ];
};
"Mod+WheelScrollUp" = {
hotkey-overlay.title = "Workspace Left";
action.focus-column-right = [ ];
};
"Mod+WheelScrollDown" = {
hotkey-overlay.title = "Workspace Right";
action.focus-column-left = [ ];
};
"Super+Tab" = {
hotkey-overlay.title = "Overview";
action.toggle-overview = [ ];
};
# --
# Utility
"Super+S" = {
action.screenshot = [ ];
};
"Super+C" = {
action.close-window = [ ];
};
"Super+L" = {
action.spawn = "wlogout";
};
# Program Spawning
"Mod+E".action.spawn = "helium";
"Mod+R".action.spawn =
let
config = pkgs.writeTextFile {
name = "config";
text = ''
width = 100%
height = 100%
border-width = 0
outline-width = 0
padding-left = 35%
padding-top = 35%
result-spacing = 25
num-results = 5
font = monospace
background-color = #000A
'';
};
script = pkgs.writeShellScript "mreow" ''
exec $(tofi-drun -c ${config})
'';
in
"${script}";
"Mod+Q".action.spawn = "kitty";
# --
};
window-rules = [
{
matches = [ ];
geometry-corner-radius = {
bottom-left = 3.0;
bottom-right = 3.0;
top-left = 3.0;
top-right = 3.0;
};
clip-to-geometry = true;
draw-border-with-background = false;
focus-ring.width = 2;
}
];
xwayland-satellite = {
enable = true;
path = lib.getExe pkgs.xwayland-satellite;
};
};
};
};
};
};
}

156
config/modules/nix-ld.nix Normal file
View File

@@ -0,0 +1,156 @@
{ den, modules, ... }:
{
modules.nix-ld = {
nixos =
{ pkgs, ... }:
{
programs.nix-ld = {
enable = true;
libraries = with pkgs; [
# List by default
zlib
zstd
stdenv.cc.cc
curl
openssl
attr
libssh
bzip2
libxml2
acl
libsodium
util-linux
xz
systemd
# My own additions
xorg.libXcomposite
xorg.libXtst
xorg.libXrandr
xorg.libXext
xorg.libX11
xorg.libXfixes
libGL
libva
pipewire
xorg.libxcb
xorg.libXdamage
xorg.libxshmfence
xorg.libXxf86vm
libelf
# Required
glib
gtk2
# Inspired by steam
# https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/st/steam/package.nix#L36-L85
networkmanager
vulkan-loader
libgbm
libdrm
libxcrypt
coreutils
pciutils
zenity
# glibc_multi.bin # Seems to cause issue in ARM
# # Without these it silently fails
xorg.libXinerama
xorg.libXcursor
xorg.libXrender
xorg.libXScrnSaver
xorg.libXi
xorg.libSM
xorg.libICE
gnome2.GConf
nspr
nss
cups
libcap
SDL2
libusb1
dbus-glib
ffmpeg
# Only libraries are needed from those two
libudev0-shim
# needed to run unity
gtk3
icu
libnotify
gsettings-desktop-schemas
# https://github.com/NixOS/nixpkgs/issues/72282
# https://github.com/NixOS/nixpkgs/blob/2e87260fafdd3d18aa1719246fd704b35e55b0f2/pkgs/applications/misc/joplin-desktop/default.nix#L16
# log in /home/leo/.config/unity3d/Editor.log
# it will segfault when opening files if you dont do:
# export XDG_DATA_DIRS=/nix/store/0nfsywbk0qml4faa7sk3sdfmbd85b7ra-gsettings-desktop-schemas-43.0/share/gsettings-schemas/gsettings-desktop-schemas-43.0:/nix/store/rkscn1raa3x850zq7jp9q3j5ghcf6zi2-gtk+3-3.24.35/share/gsettings-schemas/gtk+3-3.24.35/:$XDG_DATA_DIRS
# other issue: (Unity:377230): GLib-GIO-CRITICAL **: 21:09:04.706: g_dbus_proxy_call_sync_internal: assertion 'G_IS_DBUS_PROXY (proxy)' failed
# Verified games requirements
xorg.libXt
xorg.libXmu
libogg
libvorbis
SDL
SDL2_image
glew110
libidn
tbb
# Other things from runtime
flac
freeglut
libjpeg
libpng
libpng12
libsamplerate
libmikmod
libtheora
libtiff
pixman
speex
SDL_image
SDL_ttf
SDL_mixer
SDL2_ttf
SDL2_mixer
libappindicator-gtk2
libdbusmenu-gtk2
libindicator-gtk2
libcaca
libcanberra
libgcrypt
libvpx
librsvg
xorg.libXft
libvdpau
# ...
# Some more libraries that I needed to run programs
pango
cairo
atk
gdk-pixbuf
fontconfig
freetype
dbus
alsa-lib
expat
# for blender
libxkbcommon
libxcrypt-legacy # For natron
libGLU # For natron
fribidi
harfbuzz
libgpg-error
# Appimages need fuse, e.g. https://musescore.org/fr/download/musescore-x86_64.AppImage
fuse
e2fsprogs
];
};
};
};
}

36
config/modules/nix.nix Normal file
View File

@@ -0,0 +1,36 @@
{ ... }:
{
modules.nix = {
nixos =
{ ... }:
{
nixpkgs.config.allowUnfree = true;
nix.settings = {
substituters = [
"https://hyprland.cachix.org"
"https://nix-community.cachix.org"
"https://cache.nixos.org/"
"https://attic.scug.io/pkgs"
"https://cache.nixos-cuda.org"
"https://niri.cachix.org"
"https://attic.xuyh0120.win/lantian"
];
trusted-public-keys = [
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"pkgs:+sRbfiZMMX5R3PuAPtIRz/emowDoGZNpozibrnrAvuc="
"cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M="
"niri.cachix.org-1:Wv0OmO7PsuocRKzfDoJ3mulSl7Z6oezYhGhR+3W2964="
"lantian:EeAUQ+W+6r7EtwnmYjeVwx5kOGEBpjlBfPlzGlTNvHc="
];
experimental-features = [
"flakes"
"nix-command"
];
trusted-users = [
"doloro"
];
};
};
};
}

View File

@@ -0,0 +1,280 @@
{
den,
modules,
inputs,
...
}:
{
# Its in its own folder for future modulizaion efforts
flake-file.inputs = {
nixvim = {
url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs";
};
};
modules = {
nixvim = {
homeManager =
{ pkgs, ... }:
{
imports = [
inputs.nixvim.homeModules.nixvim
];
programs.nixvim = {
enable = true;
defaultEditor = true;
colorschemes.gruvbox-material.enable = true;
extraPackages = with pkgs; [
# formatters
nixfmt
rustfmt
# misc
ripgrep
# misc
nixd
tree-sitter
];
performance.byteCompileLua = {
enable = true;
plugins = true;
nvimRuntime = true;
luaLib = true;
configs = true;
};
plugins = {
todo-comments.enable = true;
lsp-status.enable = true;
transparent.enable = true;
conform-nvim = {
enable = true;
settings = {
formatters_by_ft = {
nix = [ "nixfmt" ];
rust = [ "rustfmt" ];
"_" = [
"squeeze_blanks"
"trim_whitespace"
"trim_newlines"
];
};
format_on_save = {
timeout_ms = 500;
lsp_format = "fallback";
};
};
};
lsp = {
enable = true;
servers = {
qmlls = {
enable = true;
config = {
cmd = "-E";
};
};
rust_analyzer = {
enable = true;
installCargo = false;
installRustc = false;
};
nixd = {
enable = true;
};
astro = {
enable = true;
};
ts_ls = {
enable = true;
};
svelte.enable = true;
};
};
lsp-format = {
enable = true;
# lspServersToEnable = [ "qmlls" ];
};
notify = {
enable = true;
settings = {
background_color = "#00000000";
};
};
mini-cursorword.enable = true;
# mini-statusline.enable = true;
lualine = {
enable = true;
settings = {
sections = {
lualine_a = [ "mode" ];
lualine_b = [
"branch"
"diff"
"diagnostics"
];
lualine_c = [ "filename" ];
lualine_x = [
"encoding"
"fileformat"
"filetype"
];
lualine_y = [ "lsp_status" ];
lualine_z = [ "location" ];
};
inactive_sections = {
lualine_a = [ ];
lualine_b = [ ];
lualine_c = [ "filename" ];
lualine_x = [ "location" ];
lualine_y = [ ];
lualine_z = [ ];
};
};
};
web-devicons.enable = true;
vim-dadbod-completion.enable = true;
telescope.enable = true;
lazygit.enable = true;
mini-indentscope = {
enable = true;
settings = {
draw = {
delay = 10;
};
};
};
mini-files = {
enable = true;
settings = {
windows = {
preview = true;
};
};
};
trouble.enable = true;
cmp = {
enable = true;
autoEnableSources = true;
settings = {
sources = [
{ name = "nvim_lsp"; }
{ name = "path"; }
{ name = "buffer"; }
];
mapping = {
"<C-Space>" = "cmp.mapping.complete()";
"<C-d>" = "cmp.mapping.scroll_docs(-4)";
"<C-e>" = "cmp.mapping.close()";
"<C-f>" = "cmp.mapping.scroll_docs(4)";
"<CR>" = "cmp.mapping.confirm({ select = true })";
"<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
"<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
};
};
};
lspkind.enable = true;
tiny-inline-diagnostic.enable = true;
# persisted.enable = true;
auto-session = {
enable = false;
settings = {
enabled = true;
auto_save = true;
auto_restore = true;
};
};
wakatime.enable = true;
treesitter = {
enable = true;
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
bash
json
lua
make
markdown
rust
nix
regex
toml
vim
vimdoc
xml
yaml
];
settings = {
highlight.enable = true;
};
};
};
extraPlugins = with pkgs; [
# vimPlugins.mini-completion
vimPlugins.mini-comment
vimPlugins.melange-nvim
vimPlugins.telescope-file-browser-nvim
vimPlugins.lsp-progress-nvim
];
opts = {
number = true;
bg = "dark";
tabstop = 2;
shiftwidth = 2;
termguicolors = true;
};
globals = {
mapleader = " ";
};
keymaps = [
{
action = "<cmd>Telescope persisted<cr>";
key = "<leader>fs";
options = {
silent = true;
};
}
{
action = "<cmd>Telescope find_files<cr>";
key = "<leader>ff";
options = {
silent = true;
};
}
{
action = "<cmd>:lua MiniFiles.open()<cr>";
key = "<leader>fv";
options = {
silent = true;
};
}
{
action = "<cmd>LazyGit<cr>";
key = "<leader>lg";
options = {
silent = true;
};
}
{
action = "<cmd>Telescope buffers<cr>";
key = "<leader>fb";
options = {
silent = true;
};
}
{
action = "<cmd>Telescope live_grep<cr>";
key = "<leader>fg";
options = {
silent = true;
};
}
{
action = "<cmd>Trouble diagnostics toggle<cr>";
key = "<leader>fd";
options = {
silent = true;
};
}
];
};
};
};
};
}

70
config/modules/obs.nix Normal file
View File

@@ -0,0 +1,70 @@
{ den, modules, ... }:
{
modules.obs = settings: {
homeManager =
{
pkgs,
lib,
config,
...
}:
{
programs = {
obs-studio = {
enable = true;
package = (
pkgs.obs-studio.override {
cudaSupport = true;
}
);
plugins = with pkgs.obs-studio-plugins; [
obs-pipewire-audio-capture
obs-vkcapture
];
};
};
systemd.user.services =
let
audio-set = lib.mkIf settings.audio {
pw-discordaudio-virtual-device = {
Unit = {
Description = "OBS daemon";
After = [ "hyprland-session.target" ];
};
Install = {
WantedBy = [ "default.target" ];
};
Service = {
ExecStart = "${pkgs.writeShellScript "discord_audio_virt_device" ''
pw-loopback -m '[ FL FR]' --capture-props='media.class=Audio/Sink node.name=DiscordSink' -n DiscordSink
''}";
Restart = "on-failure";
RestartSec = "5s";
};
};
pw-gameaudio-virtual-device = {
Unit = {
Description = "OBS daemon";
After = [ "hyprland-session.target" ];
};
Install = {
WantedBy = [ "default.target" ];
};
Service = {
ExecStart = "${pkgs.writeShellScript "game_audio_virt_device" ''
pw-loopback -m '[ FL FR]' --capture-props='media.class=Audio/Sink node.name=GameAudioSink' -n GameAudioSink
''}";
Restart = "on-failure";
RestartSec = "5s";
};
};
};
in
lib.mergeAttrsList [ audio-set ];
wayland.windowManager.hyprland.settings = {
exec-once = [ "${config.programs.obs-studio.finalPackage}/bin/obs --startreplaybuffer" ];
};
};
};
}

View File

@@ -0,0 +1,19 @@
{ den, modules, ... }:
{
modules.auto-cpufreq = {
nixos =
{ ... }:
{
services.auto-cpufreq.settings = {
battery = {
governor = "powersave";
turbo = "never";
};
charger = {
governor = "performance";
turbo = "auto";
};
};
};
};
}

View File

@@ -0,0 +1,27 @@
{ den, modules, ... }:
{
modules.battery-ac-targets = {
nixos =
{ ... }:
{
services.udev.extraRules = ''
SUBSYSTEM=="power_supply",ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/run/current-system/systemd/bin/systemctl start battery.target"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/run/current-system/systemd/bin/systemctl start ac.target"
'';
systemd.targets = {
"ac" = {
description = "On AC power";
unitConfig = {
StopWhenUnneeded = "yes";
};
};
"battery" = {
description = "On battery power";
unitConfig = {
StopWhenUnneeded = "yes";
};
};
};
};
};
}

View File

@@ -0,0 +1,17 @@
{ den, modules, ... }:
{
modules.common.provides = {
laptop-power-management = {
includes = [
# modules.auto-cpufreq
modules.battery-ac-targets
modules.intel-mgm
modules.tlp
# modules.ppd
];
nixos = {
services.upower.enable = true;
};
};
};
}

View File

@@ -0,0 +1,22 @@
{ modules, den, ... }:
{
modules.flash = {
nixos = {
services.scx = {
enable = true;
## Commented out because the service impl is bugged and doesnt actually set these
# scheduler = "scx_lavd";
# extraArgs = [
# "--cpu-pref-order 20-21,12-19,0-11"
# "--autopilot"
# ];
};
# Most energy efficent scheduler setup..
systemd.services.scx.environment = {
SCX_SCHEDULER_OVERRIDE = "scx_flash";
# Flags are from cachyos sched-ext tutorial
SCX_FLAGS_OVERRIDE = "-m powersave -I 10000 -t 1000 -s 10000 -S 1000";
};
};
};
}

View File

@@ -0,0 +1,46 @@
{ den, modules, ... }:
{
# Intel Mobile Gpu Management
modules.intel-mgm = {
nixos =
{ pkgs, ... }:
let
batt-gpu = pkgs.writeShellScript "batt-igpu" ''
${pkgs.intel-gpu-tools}/bin/intel_gpu_frequency -e
echo "800" > /sys/class/drm/card1/gt_boost_freq_mhz
'';
ac-gpu = pkgs.writeShellScript "ac-igpu" ''
${pkgs.intel-gpu-tools}/bin/intel_gpu_frequency -d
echo "2350" > /sys/class/drm/card1/gt_boost_freq_mhz
'';
in
{
systemd.services.gpu-limit-on-batt = {
enable = true;
description = "Gpu Limit";
before = [ "battery.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = "${batt-gpu}";
RemainAfterExit = true;
};
wantedBy = [ "battery.target" ];
partOf = [ "battery.target" ];
};
systemd.services.gpu-limit-on-ac = {
enable = true;
description = "Gpu Limit";
before = [ "ac.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = "${ac-gpu}";
RemainAfterExit = true;
};
wantedBy = [ "ac.target" ];
partOf = [ "ac.target" ];
};
};
};
}

View File

@@ -0,0 +1,21 @@
{ modules, den, ... }:
{
modules.lavd = {
nixos = {
services.scx = {
enable = true;
## Commented out because the service impl is bugged and doesnt actually set these
# scheduler = "scx_lavd";
# extraArgs = [
# "--cpu-pref-order 20-21,12-19,0-11"
# "--autopilot"
# ];
};
# Most energy efficent scheduler setup..
systemd.services.scx.environment = {
SCX_SCHEDULER_OVERRIDE = "scx_lavd";
SCX_FLAGS_OVERRIDE = "--powersave --per-cpu-dsq";
};
};
};
}

View File

@@ -0,0 +1,11 @@
{ den, modules, ... }:
{
modules.ppd = {
nixos = {
services.power-profiles-daemon.enable = true;
powerManagement = {
cpuFreqGovernor = "schedutil";
};
};
};
}

View File

@@ -0,0 +1,51 @@
{ modules, den, ... }:
{
modules.tdp = settings: {
nixos =
{ pkgs, ... }:
let
batt-tdp = pkgs.writeShellScript "batt-cpu-tdp" ''
${pkgs.powercap}/bin/powercap-set intel-rapl -z 0 -c 0 -l ${
toString (settings.batt.cpu.long-term * 1000000)
}
${pkgs.powercap}/bin/powercap-set intel-rapl -z 0 -c 0 -l ${
toString (settings.batt.cpu.short-term * 1000000)
}
'';
ac-tdp = pkgs.writeShellScript "ac-cpu-tdp" ''
${pkgs.powercap}/bin/powercap-set intel-rapl -z 0 -c 0 -l ${
toString (settings.ac.cpu.long-term * 1000000)
}
${pkgs.powercap}/bin/powercap-set intel-rapl -z 0 -c 0 -l ${
toString (settings.ac.cpu.short-term * 1000000)
}
'';
in
{
systemd.services.tdp-on-batt = {
enable = true;
before = [ "battery.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = "${batt-tdp}";
RemainAfterExit = true;
};
wantedBy = [ "battery.target" ];
partOf = [ "battery.target" ];
};
systemd.services.tdp-on-ac = {
enable = true;
before = [ "ac.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = "${ac-tdp}";
RemainAfterExit = true;
};
wantedBy = [ "ac.target" ];
partOf = [ "ac.target" ];
};
};
};
}

View File

@@ -0,0 +1,64 @@
{ den, modules, ... }:
{
modules.tlp = {
homeManager = { };
nixos = {
services.tlp = {
enable = true;
pd.enable = true;
settings = {
# Wireless power saving
WIFI_PWR_ON_BAT = "on";
# USB autosuspend
USB_AUTOSUSPEND = "on";
# SATA drive power management
SATA_LINKPWR_ON_BAT = "min_power";
# PCI Express Active-State Power Management (ASPM)
PCIE_ASPM_ON_BAT = "powersupersave";
RUNTIME_PM_ON_AC = "auto";
RUNTIME_PM_ON_BAT = "auto";
# Disable Bluetooth on battery
# DEVICES_TO_DISABLE_ON_BAT = "bluetooth";
# Restore brightness on battery
RESTORE_BRIGHTNESS_ON_BAT = "1";
PCIE_ASPM_ON_AC = "balanced";
DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE = "bluetooth";
INTEL_GPU_MAX_FREQ_ON_AC = 0;
INTEL_GPU_MAX_FREQ_ON_BAT = 800;
INTEL_GPU_BOOST_FREQ_ON_AC = 0;
INTEL_GPU_BOOST_FREQ_ON_BAT = 800;
# CPU_MAX_PERF_ON_BAT = 30;
# CPU_SCALING_GOVERNOR_ON_AC = "performance";
# CPU_SCALING_GOVERNOR_ON_BAT = "schedutil";
# CPU_HWP_DYN_BOOST_ON_AC = "1";
# CPU_HWP_DYN_BOOST_ON_BAT = "0";
# CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
# CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
MAX_LOST_WORK_SECS_ON_BAT = "60";
MAX_LOST_WORK_SECS_ON_AC = "15";
DISK_IDLE_SECS_ON_AC = "0";
WOL_DISABLE = "Y";
SOUND_POWER_SAVE_CONTROLLER = "Y";
DISK_IDLE_SECS_ON_BAT = "2";
SOUND_POWER_SAVE_ON_BAT = "1";
SOUND_POWER_SAVE_ON_AC = "1";
SCHED_POWERSAVE_ON_AC = 0;
SCHED_POWERSAVE_ON_BAT = 1;
NMI_WATCHDOG = 0;
PLATFORM_PROFILE_ON_AC = "balanced";
PLATFORM_PROFILE_ON_BAT = "quiet";
STOP_CHARGE_THRESH_BAT0 = 80;
};
};
};
};
}

View File

@@ -0,0 +1,18 @@
{ modules, ... }:
{
# Applys doloro's public keys to the users openssh
modules.publicKeys.provides = {
doloro =
{ user, host, ... }:
{
nixos = {
users.users.${user.userName} = {
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE/4h+WCBBW82puv8SMdUbkWymF4amEMuZitgFztB6oZ" # laptop pub key
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBaa6Z5qtBSLEz+A4fQGYPfkOISsRQlmKkVbcx2zxML7" # pc pub key
];
};
};
};
};
}

View File

@@ -0,0 +1,22 @@
{ den, modules, ... }:
{
modules.quickshell = {
homeManager =
{
pkgs,
lib,
config,
...
}:
{
programs.quickshell = {
systemd.enable = true;
enable = true;
activeConfig = "main";
configs = {
main = config.lib.file.mkOutOfStoreSymlink "/home/doloro/dotfiles/config/modules/quickshell/quickshell";
};
};
};
};
}

View File

@@ -0,0 +1 @@
/run/user/1000/quickshell/vfs/6e389f6b800776b0595d9d90e42ebd04/.qmlls.ini

View File

@@ -0,0 +1,36 @@
import QtQuick
import QtQuick.Layouts
import Quickshell
import Quickshell.Services.UPower
import Quickshell.Services.Pipewire
Rectangle {
id: root
property PwNode defaultSpeaker: Pipewire.preferredDefaultAudioSink
property PwNode defaultMic: Pipewire.defaultAudioSource
PwObjectTracker {
objects: [root.defaultSpeaker, root.defaultMic]
}
visible: root.defaultSpeaker.audio.muted || root.defaultMic.audio.muted
implicitHeight: 20
implicitWidth: content.width
color: Colors.backgroundAlt
Layout.alignment: Qt.AlignCenter
radius: 3.5
RowLayout {
id: content
height: 20
anchors.centerIn: parent
Text {
id: speaker
text: root.defaultSpeaker.audio.muted ? "muted" : "unmuted"
color: Colors.textPrimary
}
Text {
id: mic
text: root.defaultMic.audio.muted ? "muted" : "unmuted"
color: Colors.textPrimary
}
}
}

View File

@@ -0,0 +1,73 @@
// Bar.qml
import Quickshell
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
Scope {
id: root
PanelWindow {
required property var modelData
screen: modelData
color: "transparent"
anchors {
top: true
left: true
right: true
}
implicitHeight: 20
RowLayout {
visible: true
height: parent.height
anchors {
top: parent.top
left: parent.left
right: parent.right
// bottomMargin: 2
leftMargin: 0
rightMargin: 0
}
RowLayout {
// Left
Layout.alignment: Qt.AlignLeft
// To make sure no children mess with the height of all the other children.
// because if one widget is too height, it'll ofset all the other children in the bar
Layout.preferredHeight: 20
Workspaces {}
}
RowLayout {
// Center
Layout.alignment: Qt.AlignCenter
Layout.preferredHeight: 20
}
RowLayout {
// Right
Layout.alignment: Qt.AlignRight
Layout.preferredHeight: 20
// spacing: 100
spacing: 10
Audio {}
BatteryWidget {}
Rectangle {
implicitWidth: clockText.width
implicitHeight: clockText.height
radius: 3.5
color: Colors.backgroundAlt
Layout.alignment: Qt.AlignCenter
Text {
id: clockText
color: Colors.textPrimary
font: "CaskaydiaCove NFM"
text: Clock.time
}
}
}
}
}
}

View File

@@ -0,0 +1,26 @@
import QtQuick
import QtQuick.Layouts
import Quickshell
import Quickshell.Services.UPower
RowLayout {
id: content
height: 20
anchors.centerIn: root
visible: UPower.displayDevice.percentage != 0
property string charging: UPower.displayDevice.state == UPowerDeviceState.Charging ? "Charging.." : ""
Rectangle {
implicitHeight: text.height
implicitWidth: text.width
color: Colors.backgroundAlt
Layout.alignment: Qt.AlignCenter
radius: 3.5
Text {
id: text
property int power: UPower.displayDevice.percentage * 100
anchors.centerIn: parent
text: charging + " " + power + "%"
color: Colors.textPrimary
}
}
}

View File

@@ -0,0 +1,20 @@
// Time.qml
pragma Singleton
import Quickshell
import QtQuick
Singleton {
id: root
// an expression can be broken across multiple lines using {}
readonly property string time: {
// The passed format string matches the default output of
// the `date` command.
Qt.formatDateTime(clock.date, "ddd MMM d HH:mm");
}
SystemClock {
id: clock
precision: SystemClock.minutes
}
}

View File

@@ -0,0 +1,109 @@
pragma Singleton
import QtQuick 2.15
// Gruvbox Dark — base24 QML singleton
// Notes:
// - This is a template for a "base24" palette. Replace the baseNN hex values
// with your exact base24 values if you have them.
// - Semantic aliases (background, textPrimary, accentBlue, etc.) map to the
// palette entries and make QML usage easier.
// "Thanks CoPilot" - Doloro
QtObject {
id: gruvbox
// ---- Base24 palette (base00 .. base23) ----
// Replace these hex values with exact ones from the base24 palette if needed.
property color base00: "#1d2021" // darkest background
property color base01: "#282828"
property color base02: "#32302f"
property color base03: "#3c3836"
property color base04: "#504945"
property color base05: "#665c54"
property color base06: "#7c6f64"
property color base07: "#928374"
property color base08: "#bdae93"
property color base09: "#d5c4a1"
property color base10: "#ebdbb2" // main foreground
property color base11: "#fbf1c7"
property color base12: "#cc241d" // red
property color base13: "#d65d0e" // orange
property color base14: "#d79921" // yellow
property color base15: "#98971a" // green
property color base16: "#689d6a" // aqua/green
property color base17: "#8ec07c" // light aqua
property color base18: "#458588" // blue
property color base19: "#b16286" // purple
property color base20: "#a89984" // muted
property color base21: "#7c6f64" // subtle
property color base22: "#504945"
property color base23: "#282828" // repeat or very dark
// ---- Semantic aliases (use these in your QML components) ----
property color background: base00
property color backgroundAlt: base01
property color surface: base02
property color surfaceAlt: base03
property color textPrimary: base10
property color textSecondary: base06
property color textDisabled: base04
property color border: base05
property color muted: base20
// accents
property color accentRed: base12
property color accentOrange: base13
property color accentYellow: base14
property color accentGreen: base15
property color accentAqua: base16
property color accentLightAqua: base17
property color accentBlue: base18
property color accentPurple: base19
// Example semantic levels for UI elements
property color windowBackground: background
property color panelBackground: surface
property color cardBackground: surfaceAlt
property color primaryText: textPrimary
property color secondaryText: textSecondary
property color highlight: accentBlue
property color danger: accentRed
property color success: accentGreen
property color warning: accentYellow
// ---- Helper function ----
// Returns a color by semantic name (string). Useful for dynamic lookups.
function colorFor(name) {
switch (name) {
case "background":
return gruvbox.background;
case "panelBackground":
return gruvbox.panelBackground;
case "cardBackground":
return gruvbox.cardBackground;
case "primaryText":
return gruvbox.primaryText;
case "secondaryText":
return gruvbox.secondaryText;
case "highlight":
return gruvbox.highlight;
case "danger":
return gruvbox.danger;
case "success":
return gruvbox.success;
case "warning":
return gruvbox.warning;
case "accentBlue":
return gruvbox.accentBlue;
case "accentRed":
return gruvbox.accentRed;
case "accentGreen":
return gruvbox.accentGreen;
default:
// fallback to primary text if unknown
return gruvbox.textPrimary;
}
}
}

View File

@@ -0,0 +1,19 @@
// Time.qml
pragma Singleton
import Quickshell
import QtQuick
import Quickshell.Hyprland
Singleton {
id: root
function getHyprlandWorkspaceById(id) {
for (var x of Hyprland.workspaces.values) {
if (x.id == id) {
return x;
}
}
return null;
}
}

View File

@@ -0,0 +1,69 @@
// Bar.qml
import Quickshell
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
import Quickshell.Hyprland
Item {
id: root
width: row.width
height: row.height
RowLayout {
id: row
height: 15
Repeater {
id: repeater
model: 10
delegate: Item {
id: content
required property int index
property bool focused: HyprlandHelpers.getHyprlandWorkspaceById(index + 1).focused
property bool exists: HyprlandHelpers.getHyprlandWorkspaceById(index + 1) ? true : false
state: focused ? "FOCUSED" : (exists ? "EXISTS" : "NOT")
states: [
State {
name: "FOCUSED"
PropertyChanges {
target: content
implicitWidth: 10
scale: 1
}
},
State {
name: "EXISTS"
PropertyChanges {
target: content
implicitWidth: 10
scale: 0.85
}
},
State {
name: "NOT"
PropertyChanges {
target: content
implicitWidth: 10
scale: 0.75
}
}
]
height: 15
Rectangle {
implicitWidth: parent.width
implicitHeight: parent.height
radius: 2.5
color: {
if (HyprlandHelpers.getHyprlandWorkspaceById(index + 1) != null) {
if (HyprlandHelpers.getHyprlandWorkspaceById(index + 1).focused) {
return Colors.primaryText;
}
return Colors.textSecondary;
} else {
return Colors.textDisabled;
}
}
}
}
}
}
}

View File

@@ -0,0 +1 @@
/nix/store/ynim9hhkc1smj1h2plrw3ap978dlm3qj-home-manager-files/.config/quickshell/main

View File

@@ -0,0 +1,11 @@
// @ pragma UseQApplication
//@ pragma Env QS_NO_RELOAD_POPUP=0
//@ pragma Env QT_QUICK_CONTROLS_STYLE=Basic
//@ pragma Env QT_QUICK_FLICKABLE_WHEEL_DECELERATION=10000
import Quickshell
import QtQuick
Scope {
Bar {}
}

View File

@@ -0,0 +1,19 @@
pragma Singleton
import Quickshell
import QtQuick
Singleton {
id: root
// an expression can be broken across multiple lines using {}
readonly property string time: {
// The passed format string matches the default output of
// the `date` command.
Qt.formatDateTime(clock.date, "ddd MMM d hh:mm:ss AP t yyyy");
}
SystemClock {
id: clock
precision: SystemClock.Seconds
}
}

View File

@@ -0,0 +1,41 @@
{
den,
__findFile,
modules,
inputs,
...
}:
{
flake-file.inputs = {
raspberry-pi-nix.url = "github:nix-community/raspberry-pi-nix";
};
modules.raspberry-pi = {
provides = {
"5" = {
nixos =
{ pkgs, ... }:
let
rpi-pi = inputs.raspberry-pi-nix;
in
{
imports = [
rpi-pi.nixosModules.raspberry-pi
rpi-pi.nixosModules.sd-image
];
environment.systemPackages = with pkgs; [
libraspberrypi
];
sdImage.compressImage = false;
raspberry-pi-nix.board = "bcm2712"; # Rpi 5 - 64bit
# We need to rebuild kernel for 6.12
# raspberry-pi-nix.kernel-version = "v6_12_17";
raspberry-pi-nix.uboot.enable = false;
hardware.enableRedistributableFirmware = true;
};
};
};
};
}

View File

@@ -0,0 +1,56 @@
doloro-hashed_password: ENC[AES256_GCM,data:RYB/bSNTz1TeGucdFHrxxhOqvqQYvQS3lm44I1Lf3LIEVMXL5s41zxIw0S+JVdlq8I3oHDY4C3o5V4lu+8qAWMyIZYp/6Xp4cw==,iv:yOuKk95skNZ5z805vtoJwvyOdsh08BuyBSgXN+M4Ybo=,tag:QAFhUYuqHT6Spw/l4feY4g==,type:str]
root-hashed_password: ENC[AES256_GCM,data:vzVtz1Ht4XD+omdKjU/Zvoaftq8jKE4kxOjAGZTvoYI07hjItR2TSsYrLw0lwsxyJosfoyF3bVsZSFCuuN7njdchGMSSujZJhg==,iv:0av3n4fcGOHYQB4zidt/qn+blBSiDQ29LN15sVufLLs=,tag:nKKVDbCGxB7wDrMPAyJOaw==,type:str]
wakatime-scug-io-api-key: ENC[AES256_GCM,data:XQUccNW4210U8ZpHSGVcsdbAirzyTvmcy4y6emk7n4N6MO/W,iv:9/f9ceLshA7l8hJB+IDIPvEwYwSkFlPOLmpvtYXLTpU=,tag:x7hESZCouzYVNef2C+iCSA==,type:str]
meow: ENC[AES256_GCM,data:JVzenw==,iv:oCOo9//r5s2K4pSeH5UNEj0LL+9h2yq0G0DPOfwjmyQ=,tag:0gu9FNOrjQ8fpB+B+RbGSg==,type:str]
meoww: ENC[AES256_GCM,data:WPeszDfMWxY=,iv:JJMOror5wj7cTNKfrUj2LDXlO3WCKzb7jk4AeZ0oD+Q=,tag:qs3oyM7K1FGy5cXvS6OHpQ==,type:str]
sops:
age:
- recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzdGQ5ZHUxUHE4YXF0bllY
dTRsYWc4cllmWEgveGVTLzUvRzJuc0FtUEdvCkNURmxmMnhkaExZcVVNRmRNU1p6
UitMYUxNMXgzZC84S3J0SHR4aFV5TGcKLS0tIFB3Skx6UlFDcVJFSlhTd1NRbUl2
VGQ3OUpDY0JVaEUyYStHQU83Q1hDYTAKeRgXVA8iWGO8cMMlvBFWGMVIZnaLCpsZ
hBjWlxG6oUlCNnO+cyckU3jSTecc+z+EIuseFt710nN5uRJeKs2MlA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtM0wvV3pHTUZYdlhPWnU0
VElBbDI2bUJhQUVCMlBPNjNzOE9tTXJGelI0CjBEdmhWTGlyc2VhODRnbHE3ZGdC
WUoyWU0zcU5BbXhGdm5sVEZHdS80bkkKLS0tIHhpcFZQdkl6eHRUTGhZYmVOSCtz
RE8zeFl2ZVgyWVBsRmhlUElybXEwSEEKEhvMUClOOoN3RdzVOFBIPt7rMrukla1t
bVWGKX5e3p/EtK7aYzdBxYYvml+TNUD1n5TpTFhcnH2Jwpey8thz2Q==
-----END AGE ENCRYPTED FILE-----
- recipient: age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0ODRGRkE3a09MS3Z0QXNm
OTBlb2JEV28vTmxhcjM5aFpYbVhYM0wyZkd3CmszblZWVEFkVlMwQ1FMZitBd0Rp
MkZpZGViSHlHSko4Tk9rZGNHaWpGWncKLS0tIC9xY1dBSncvQnhHTlhhaEpUK3ZI
Tjgwd0VuVGtjaTdaSE5ERmRIa1dVNEkKkN0vp7xDWCnu4aq8VQu5y8Q/6xsFKhCQ
ivMqQsqoOBvXSynu7hbNpcGvAsmDHDGcC2b/C9Mkt42OclSYM077bw==
-----END AGE ENCRYPTED FILE-----
- recipient: age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYTmhiUmFWaDFzcnRXcWFp
VjJ1b3VRSk8xN0FQMk13UDY1a2FEV3ZQY2l3Cnd0SmMvM0JDOFhZdmtOL3g0dmNj
UGZleDV1MU1DMXFiYUNmR2htWXZXQnMKLS0tIFBLa3lPL0VieG9ZWFBOU25vZTJ1
VVVDclBGZTRSVDZOanRwOGNaK3VVUW8KCvt/rcP0rJD5aCNdGaJeABuGZ7huRbGw
7FBvo6TvIRh0MCyvfbzfUon2m9d4yU8ddFejpSEK1vucxbXgV7KD8g==
-----END AGE ENCRYPTED FILE-----
- recipient: age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLU21oQnlTQ3RQWmNzR3Y4
aWhhdFZ6RFEwVm5ITWluS2xZM0QyUHI5SEdvCmFjdDU2YlhlYTJ6Y2pPaGJkNW01
WUVVN0xIRXZ3djdVVkYzRThLSzlCVzAKLS0tIFhISmlJcXB2UHNsb2VQS2tnYVUy
aW5ERENRS2JWbGZhaGhNSGtqNVRNTncK0uI8n2L5uP3to/sByeO7y17h3ZrcmnOf
e3CwdzP4/WcSwbFk0CRnS6Cq8J0esUqweSJxvpt2eNBEYvDZ77SSMw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-02-14T00:08:39Z"
mac: ENC[AES256_GCM,data:lp9ZeDxt5gkOkDmYk+F0VQrVhkR0tQiQlYXbygoA8Dcq+gV0IIKKLwRqr5CVfgfRlo3239IwmKLsGaS6zYC1xX4toZ8oqw3Ic2UvP2CiWt6M7HTrlL+3Y2+PKOUvGl7RAqQxQAw7QaoxB4esqdIiWnMDueVHk5BTKrkay+afhno=,iv:NAMaZ9SMBAtROTBSQtU0RJDB60MAuE82AFoPtDqVHVM=,tag:RGBUTQC1pM+LcBweSJbc6w==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0

View File

@@ -0,0 +1,53 @@
namedotcom_api__key: fbf0bc2133da020b64bbe9c884f616afe59dfdf7
test: test
sops:
age:
- recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSYm92cVo0Ykg2R3hTUWpW
UlNOTXF2cFI4Y29uRTh2aXIySFNSTFhZZ0RFCnR4YmRrQTVrY0hkUloxMGgzdFFa
ejFST0FESytnN3NIZW45blhmWDRMSlkKLS0tIE1MNWlHWWd1WEhNUGtiUm5GZ2pn
QUR3aGtVczZYV1FSUFdMRGw4a2lGU2MKh/56SL7neNFXN70dzwtwTHBaECoMvArR
TicJhSPV5S/vUrC9oDmSE3MMYtdzXSZkcRHYPI8fy5LcPOxXVPRARQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3K3ZxKzdvdVFMYnZLS0Nv
bDBkRWRNMkRMS09UWlZlcFYvZ1pEd09VVmlJCk9uMGJyNzd5QnZtWkdxOE40TVdG
YkJiaGZMaEFlNXljcnFvODVSL3Q2d3cKLS0tIFg5UFFPVElyR0xlbXEvMDNDQmpW
TGo3cUJVQ2NETkhWdmNCazNYSVpyUWcKr4EUvbK28WCiymL1BgYk6N6J27ZnadK8
kQ8tzwVS7iI1frBoHOVzXhCRt2CEg+O3EnXMRJDrahhxwmpqlx6cRA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRWGVsRmkwZGxId0hXQlEv
czdmclRXYWNrL0t4bGpEQ0lmNE0vb1RuZEhjCkhEaGlxY3JKS3l4WGxHS0Uya2tM
Zm1Lb3RpY2h0K2lKaHR1bjdFL25yQ0UKLS0tIFYvNmkrUWNFekVoMFVLck81bXhl
WHNSbHpCTTZSS3lkUiszeEE0RGw4QncKTr1ZzIHtkv8aJNKT1v0m+QMJyht43+XJ
0CRxdoZ/HXoymMQ7oZvT8vf6Ehz41aLe1gZHl8ZJPexDHrSl28NCtg==
-----END AGE ENCRYPTED FILE-----
- recipient: age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlc0tUVjVGVS85YUZOSmJq
a0pvcGV4UDBEc0N0Zk0xVEhUc1l1ZUFFTGxnClNocURmTE5ZaUorSVdWcE1kbW81
U3doQm9ZbHVrdVlsSVhFaEFoSHo5NU0KLS0tIGgvd05PY2tlbnRwbTRrdXpsT0ho
Zm1jbTlSMnA1WDUrZUVCOHNDWWJ2RFUK+cvqFK49rIVj3FITF/4HtCELvZhvkCZ9
8Ss77uE6qtGyhuGWXB0HwnO3fsCpXA62uUt/zv08o9LmIgRi7o7adg==
-----END AGE ENCRYPTED FILE-----
- recipient: age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuN0dkcExkR2pyaUxhbUlz
NkR2WTNWRUpHSWdRTFdUY05jcm4ybDdEbW4wCmR1TTV5VlFudHN1cC8yRG5Nd2ts
K3duNEE1dit0Ym9PdmNaM1pEWjlZZU0KLS0tIHBXaXhzQ0VuTWFxdDQrczQ4YTBM
VlhpZ0N2ZmVkSC90NlowUkNuYWZUclEKzQUfWDETV5lPgrtCxYTLtVP8y7R8RFJj
4J1bei0nJHlsap8V88u+QiYRgFsEthd++hzkYmUDvYPsA48PnzMupw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-02-14T00:09:32Z"
mac: ENC[AES256_GCM,data:nYWQYK5QOA0u3DYGTozSGFMYhx2uMqkAWoqhthgagRFRnKA/j852fVKqRFcwn+fPSQ4e8i4WpcvoM7FVwuFDC+ixNp7xtz16pnswiNS4N/mNEYXfajkon7wIoUYNtrHahUeYlAnID0vYSQFA3XKgV7ZDD9b4V8X5N+yMlVXex4c=,iv:IW7276v0nnmFBe9Z7HIn6Tl9vX4sDoqWdDfJ1uwKoAY=,tag:YC8OiTcoL+nYV4x8rkivbg==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0

View File

@@ -0,0 +1,24 @@
{ inputs, modules, ... }:
{
modules.sops.provides.server = {
nixos =
{ ... }:
{
imports = [
inputs.sops-nix.nixosModules.sops
];
sops = {
# age.keyFile = "/etc/ssh/ssh_host_ed25519_key";
defaultSopsFile = ./server.yaml;
secrets = {
root-hashed_password = {
neededForUsers = true;
};
doloro-hashed_password = {
neededForUsers = true;
};
};
};
};
};
}

View File

@@ -0,0 +1,42 @@
{ inputs, modules, ... }:
{
#
flake-file.inputs = {
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
modules.sops = {
homeManager =
{ ... }:
{
imports = [
inputs.sops-nix.homeManagerModules.sops
];
sops = {
age.keyFile = "/home/doloro/.config/sops/age/key.txt"; # must have no password!
defaultSopsFile = ./content/secrets.yaml;
};
};
nixos =
{ ... }:
{
imports = [
inputs.sops-nix.nixosModules.sops
];
sops = {
# age.keyFile = "/etc/ssh/ssh_host_ed25519_key";
defaultSopsFile = ./content/secrets.yaml;
secrets = {
root-hashed_password = {
neededForUsers = true;
};
doloro-hashed_password = {
neededForUsers = true;
};
};
};
};
};
}

View File

@@ -0,0 +1,20 @@
{
den,
__findFile,
modules,
...
}:
{
# Basic caddy
modules.services.provides.caddy = {
nixos =
{ config, ... }:
{
services.caddy = {
enable = true;
email = "doloroo@proton.me";
enableReload = true;
};
};
};
}

View File

@@ -0,0 +1,37 @@
{
den,
__findFile,
modules,
...
}:
{
# Basic traefik
modules.services.provides.ddns = {
nixos =
{ config, pkgs, ... }:
let
ddnsImg = pkgs.dockerTools.pullImage {
imageName = "qmcgaw/ddns-updater";
imageDigest = "sha256:ee16ab4f6203bf9e5b0925d38a0b4ebf2d9f23771f933cfb2f5a2dbd5f9a2f88";
finalImageName = "qmcgaw/ddns-updater";
finalImageTag = "latest";
sha256 = "sha256-dMCHkvoFaORmGwbIM9io4Vc9fq+wBks25k2dmnW7naI=";
arch = "arm64";
};
in
{
virtualisation.oci-containers.containers = {
ddns = {
image = "qmcgaw/ddns-updater";
imageFile = ddnsImg;
volumes = [
"/data/ddns:/updater/data"
"/etc/localtime:/etc/localtime:ro"
];
# ports = [ "0.0.0.0:8123:8123" ];
# networks = [ "meow" ];
};
};
};
};
}

View File

@@ -0,0 +1,49 @@
{
den,
__findFile,
modules,
...
}:
{
# Basic traefik
modules.services.provides.home-assistant = {
nixos =
{ config, pkgs, ... }:
let
homeAssistantImg = pkgs.dockerTools.pullImage {
imageName = "homeassistant/home-assistant";
imageDigest = "sha256:17441c45ba14560b4ef727ee06aac4d605cf0dc0625fc4f2e043cb2551d72749";
finalImageName = "homeassistant/home-assistant";
finalImageTag = "latest";
sha256 = "sha256-fSQ3luRSFHiWP0qDzsiZsEf/l+wYgyrdicjSayZ61yQ=";
arch = "arm64";
};
in
{
virtualisation.oci-containers.containers = {
home-assistant = {
image = "homeassistant/home-assistant";
imageFile = homeAssistantImg;
volumes = [
"/data/homeAssistant:/config"
"/run/dbus:/run/dbus:ro"
"/etc/localtime:/etc/localtime:ro"
];
ports = [ "0.0.0.0:8123:8123" ];
# networks = [ "meow" ];
};
};
networking.firewall = {
allowedTCPPorts = [
8123
];
allowedUDPPortRanges = [ ];
};
services.caddy = pkgs.lib.mkIf config.services.caddy.enable {
virtualHosts."ha.h.doloro.co.uk".extraConfig = ''
reverse_proxy :8123
'';
};
};
};
}

View File

@@ -0,0 +1,50 @@
{
den,
__findFile,
modules,
...
}:
{
# Basic traefik
modules.services.provides.traefik = {
nixos =
{ config, ... }:
{
services.traefik = {
enable = true;
staticConfigOptions = {
entryPoints = {
web = {
address = ":80";
http.redirections.entrypoint = {
to = "websecure";
scheme = "https";
};
asDefault = true;
};
websecure = {
address = ":443";
asDefault = true;
http.tls.certResolver = "letsencrypt";
};
traefik = {
address = ":8080";
};
};
certificatesResolvers.letsencrypt.acme = {
email = "doloroo@proton.me";
storage = "${config.services.traefik.dataDir}/acme.json";
httpChallenge.entryPoint = "web";
};
providers = {
docker = {
};
};
api.dashboard = true;
api.insecure = true;
};
};
};
};
}

24
config/modules/ssh.nix Normal file
View File

@@ -0,0 +1,24 @@
{ den, modules, ... }:
{
modules.ssh = {
homeManager =
{ home, ... }:
{
programs = {
ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
"*" = {
addKeysToAgent = "yes";
identityFile = [
"~/.ssh/id_ed25519"
"~/.ssh/id_gitea_scug"
];
};
};
};
};
};
};
}

43
config/modules/stylix.nix Normal file
View File

@@ -0,0 +1,43 @@
{
den,
modules,
inputs,
...
}:
{
flake-file.inputs = {
stylix = {
url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
modules.stylix = {
homeManager =
{ pkgs, ... }:
{
imports = [ inputs.stylix.homeModules.stylix ];
stylix = {
enable = true;
autoEnable = false;
targets.gtk.enable = true;
targets.qt.enable = true;
targets.tmux.enable = false;
fonts = {
monospace = {
name = "CaskaydiaCove Nerd Font Mono";
package = pkgs.nerd-fonts.caskaydia-cove;
};
};
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
};
};
nixos =
{ pkgs, ... }:
{
imports = [ inputs.stylix.nixosModules.stylix ];
stylix.enable = false;
stylix.autoEnable = false;
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
};
};
}

22
config/modules/tmux.nix Normal file
View File

@@ -0,0 +1,22 @@
{ modules, ... }:
{
modules.tmux = {
homeManager =
{ home, pkgs, ... }:
{
programs.tmux = {
enable = true;
plugins = with pkgs.tmuxPlugins; [
sensible
minimal-tmux-status
];
extraConfig = ''
set-option -g default-terminal "xterm-256color"
set -a terminal-features "xterm-256color:RGB"
set -g status-bg black
set -g status-fg white
'';
};
};
};
}

View File

@@ -0,0 +1,18 @@
{ den, modules, ... }:
{
modules.tuigreet = {
nixos =
{ pkgs, config, ... }:
{
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --sessions ${config.services.xserver.displayManager.sessionData.desktops}/share/xsessions:${config.services.xserver.displayManager.sessionData.desktops}/share/wayland-sessions --remember --remember-user-session";
user = "greeter";
};
};
};
};
};
}

View File

@@ -0,0 +1,15 @@
{ modules, ... }:
{
modules.user.groups =
{ config, user, ... }:
{
nixos = {
users.users.${user.userName} = {
extraGroups = [
"wheel"
"networkmanager"
];
};
};
};
}

View File

@@ -0,0 +1,93 @@
{
den,
modules,
inputs,
...
}:
{
flake-file.inputs = {
zen-browser.url = "github:youwen5/zen-browser-flake";
zen-browser.inputs.nixpkgs.follows = "nixpkgs";
};
modules.zen-browser = settings: {
homeManager =
{
home,
pkgs,
lib,
...
}:
let
extension = shortId: guid: {
name = guid;
value = {
install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
installation_mode = "normal_installed";
};
};
prefs = {
# Check these out at about:config
"extensions.autoDisableScopes" = 0;
"extensions.pocket.enabled" = false;
# ...
};
extensions = [
# To add additional extensions, find it on addons.mozilla.org, find
# the short ID in the url (like https://addons.mozilla.org/en-US/firefox/addon/!SHORT_ID!/)
# Then go to https://addons.mozilla.org/api/v5/addons/addon/!SHORT_ID!/ to get the guid
(extension "ublock-origin" "uBlock0@raymondhill.net")
# ...
];
in
{
wayland.windowManager.hyprland.settings = lib.mkIf settings.default {
bind = [
"$mainMod, E, exec, zen"
];
};
home.packages = [
(pkgs.wrapFirefox
inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.zen-browser-unwrapped
{
extraPrefs = lib.concatLines (
lib.mapAttrsToList (
name: value: "lockPref(${lib.strings.toJSON name}, ${lib.strings.toJSON value});"
) prefs
);
extraPolicies = {
DisableTelemetry = true;
ExtensionSettings = builtins.listToAttrs extensions;
SearchEngines = {
Default = "ddg";
Add = [
{
Name = "nixpkgs packages";
URLTemplate = "https://search.nixos.org/packages?query={searchTerms}";
IconURL = "https://wiki.nixos.org/favicon.ico";
Alias = "@np";
}
{
Name = "NixOS options";
URLTemplate = "https://search.nixos.org/options?query={searchTerms}";
IconURL = "https://wiki.nixos.org/favicon.ico";
Alias = "@no";
}
{
Name = "NixOS Wiki";
URLTemplate = "https://wiki.nixos.org/w/index.php?search={searchTerms}";
IconURL = "https://wiki.nixos.org/favicon.ico";
Alias = "@nw";
}
];
};
};
}
)
];
};
};
}

14
config/namespace.nix Normal file
View File

@@ -0,0 +1,14 @@
{
inputs,
den,
__findFile ? __findFile,
...
}:
{
_module.args.__findFile = den.lib.__findFile;
imports = [
inputs.den.flakeModule
(inputs.den.namespace "modules" true)
# (inputs.den.namespace "hosts" true)
];
}

File diff suppressed because one or more lines are too long

1010
flake.lock generated

File diff suppressed because it is too large Load Diff

205
flake.nix
View File

@@ -1,195 +1,50 @@
# You FAGGOT; Do NOT edit this file !!!!, run 'nix run .#write-flake'
{
description = "Home Manager configuration of doloro";
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./config);
inputs = {
# Specify the source of Home Manager and Nixpkgs.
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
rpi-nixpkgs.url = "github:nvmd/nixpkgs/modules-with-keys-25.11";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
nix-meow.url = "git+https://git.scug.io/nikkuss/nix-meow.git?ref=paws"; # config manager, meow'd
hyprland.url = "github:hyprwm/Hyprland";
rsRPC.url = "github:Doloro1978/rsRPC";
protonhax.url = "github:linusfri/protonhax-nix";
hytale-launcher.url = "github:JPyke3/hytale-launcher-nix";
quickshell = {
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
inputs.nixpkgs.follows = "nixpkgs";
den.url = "github:vic/den";
disko.url = "github:nix-community/disko";
flake-aspects.url = "github:vic/flake-aspects";
flake-file.url = "github:vic/flake-file";
flake-parts = {
url = "github:hercules-ci/flake-parts";
inputs.nixpkgs-lib.follows = "nixpkgs-lib";
};
font-patcher.url = "github:Doloro1978/nix-nerd-fonts-patcher";
heliumFlake = {
url = "github:vikingnope/helium-browser-nix-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
nikkuss-pkgs = {
url = "git+https://git.scug.io/nikkuss/pkgs";
# inputs.nixpkgs.follows = "nixpkgs";
};
zen-browser = {
url = "github:0xc000022070/zen-browser-flake";
inputs = {
# IMPORTANT: we're using "libgbm" and is only available in unstable so ensure
# to have it up-to-date or simply don't specify the nixpkgs input
nixpkgs.follows = "nixpkgs";
home-manager.follows = "home-manager";
};
};
sops-nix = {
url = "github:Mic92/sops-nix";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko/latest";
hyprland.url = "github:hyprwm/Hyprland";
import-tree.url = "github:vic/import-tree";
niri-flake = {
url = "github:sodiboo/niri-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-cachyos-kernel.url = "github:xddxdd/nix-cachyos-kernel/release";
nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
nixpkgs-lib.follows = "nixpkgs";
nixvim = {
url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs";
};
raspberry-pi-nix.url = "github:nix-community/raspberry-pi-nix";
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay";
nixvim = {
url = "github:nix-community/nixvim";
zen-browser = {
url = "github:youwen5/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
spicetify-nix = {
url = "github:Gerg-L/spicetify-nix";
};
nix-warez = {
# Blender-bin
url = "github:edolstra/nix-warez?dir=blender";
};
nixpkgs-gamescope = {
url = "github:Nixos/nixpkgs?rev=8fcb6f1c4948305af52d19f887b89011ee2c080d";
};
font-patcher.url = "github:Doloro1978/nix-nerd-fonts-patcher";
nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi/develop";
raspberry-pi-nix.url = "github:nix-community/raspberry-pi-nix";
niri-flake.url = "github:sodiboo/niri-flake";
};
outputs =
inputs@{
nixpkgs,
home-manager,
nix-meow,
...
}:
let
overlays = [
# inputs.nikkuss-pkgs.overlays.default
(final: prev: {
arrpc = prev.arrpc.overrideAttrs (preve: rec {
pname = preve.pname + "-meow";
version = "94d3ec81";
patches = [ ./deadlock.patch ];
src = prev.fetchFromGitHub {
owner = "XenHat";
repo = "arrpc";
# branch = "improved-detection-fixes";
rev = "94d3ec81339f94e563af512b83db369596d05d3b";
sha256 = "sha256-DI/HCrmiQo1lPkErCNXOpdQli2wua03PDjdlERrpxTg=";
};
npmDepsHash = prev.lib.fakeHash;
npmDeps = final.fetchNpmDeps {
inherit src;
name = "${pname}-${version}-npm-deps";
hash = "sha256-lw6pngFC2Pnk+I8818TOTwN4r+8IsjvdMYIyTsTi49g=";
};
});
})
# (
# final: prev:
# let
# system = prev.stdenv.hostPlatform.system;
# pkgs_gamescope = import inputs.nixpkgs-gamescope {
# inherit system;
# config = {
# allow_unfree = true;
# };
# };
# packageNix = "${inputs.nixpkgs-gamescope}/pkgs/by-name/ga/gamescope/package.nix";
# in
# {
# gamescope = pkgs_gamescope.callPackage packageNix { };
# }
# )
(self: super: {
intel-npu-driver = super.intel-npu-driver.overrideAttrs (oldAttrs: rec {
installPhase = ''
mkdir -p $out/lib/firmware
${oldAttrs.installPhase}
'';
});
})
(final: prev: {
vesktop = prev.vesktop.overrideAttrs (old: {
preBuild = ''
cp -r ${prev.electron.dist} electron-dist
chmod -R u+w electron-dist
'';
buildPhase = ''
runHook preBuild
pnpm build
pnpm exec electron-builder \
--dir \
-c.asarUnpack="**/*.node" \
-c.electronDist="electron-dist" \
-c.electronVersion=${prev.electron.version}
runHook postBuild
'';
});
})
];
utils = nix-meow.lib.setup {
inherit (inputs) home-manager nixpkgs;
inherit inputs;
flakeRoot = ./.;
hostsFolder = ./hosts;
hardwaresFolder = ./hardwares;
modulesFolder = ./modules;
globalConfig = {
allowUnfree = true;
};
globalOverlays = overlays;
defaultUser = "doloro";
};
inherit (utils) mkHost;
configurations = [
# Desktops
(mkHost {
hardware = "doloro";
host = "doloro";
system = "x86_64-linux";
stateVersion = "25.05";
nixpkgsConfig = {
rocmSupport = false;
cudaSupport = true;
};
})
(mkHost {
hardware = "doloro-laptop";
host = "doloro-laptop";
system = "x86_64-linux";
stateVersion = "25.11";
nixpkgsConfig = {
rocmSupport = false;
};
})
# Servers
(mkHost {
hardware = "rpi-5";
host = "rpi-5";
system = "aarch64-linux";
# nixpkgs = inputs.rpi-nixpkgs;
stateVersion = "25.11";
nixpkgsConfig = {
rocmSupport = false;
};
})
];
in
(utils.deepMerge configurations);
}

View File

@@ -1,65 +0,0 @@
{ inputs, ... }:
{
imports = [ inputs.disko.nixosModules.disko ];
disko.devices = {
disk = {
main = {
device = "/dev/nvme0n1";
type = "disk";
content = {
type = "gpt";
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
};
ESP = {
name = "ESP";
priority = 1;
size = "4G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "umask=0077" ];
};
};
plainSwap = {
size = "48G";
content = {
type = "swap";
discardPolicy = "both"; # Both "once" and page discard policies
resumeDevice = true; # Use for hibernation resume device
};
};
root = {
size = "100%";
content = {
type = "btrfs";
extraArgs = [ "-f" ]; # Override existing partition
# Subvolumes must set a mountpoint in order to be mounted,
# unless their parent is mounted
subvolumes = {
# Subvolume name is different from mountpoint
"@" = {
mountpoint = "/";
};
# Subvolume name is the same as the mountpoint
"@home" = {
mountpoint = "/home";
};
# Parent is not mounted so the mountpoint must be set
"@nix" = {
mountpoint = "/nix";
};
};
};
};
};
};
};
};
};
}

View File

@@ -1,29 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"xhci_pci"
"thunderbolt"
"vmd"
"nvme"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@@ -1 +0,0 @@
{...}: {}

View File

@@ -1 +0,0 @@
{lib,...}:{imports=[./disks.nix ./hardware-configuration.nix]; }

View File

@@ -1,66 +0,0 @@
{
lib,
inputs,
...
}:
{
imports = [
inputs.disko.nixosModules.disko
];
disko.devices = {
disk = {
main = {
device = lib.mkDefault "/dev/disk/by-id/nvme-CT1000P2SSD8_2221E632CD1F";
type = "disk";
content = {
type = "gpt";
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
};
ESP = {
name = "ESP";
priority = 1;
size = "4G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "umask=0077" ];
};
};
root = {
size = "100%";
content = {
type = "btrfs";
extraArgs = [ "-f" ]; # Override existing partition
# Subvolumes must set a mountpoint in order to be mounted,
# unless their parent is mounted
subvolumes = {
# Subvolume name is different from mountpoint
"@" = {
mountpoint = "/";
};
# Subvolume name is the same as the mountpoint
"@home" = {
mountpoint = "/home";
};
# Parent is not mounted so the mountpoint must be set
"@nix" = {
mountpoint = "/nix";
};
"@blackhole" = {
mountpoint = "/var/blackhole";
};
};
};
};
};
};
};
};
};
}

View File

@@ -1,29 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"ahci"
"usbhid"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@@ -1,3 +0,0 @@
{ ... }:
{
}

View File

@@ -1,12 +0,0 @@
{
lib,
...
}:
{
imports = [
./disks.nix
./hardware-configuration.nix
];
hardware.enableRedistributableFirmware = true;
boot.loader.grub.useOSProber = lib.mkOverride 0 false;
}

View File

@@ -1,49 +0,0 @@
{ inputs, lib, ... }:
{
imports = [ inputs.disko.nixosModules.disko ];
disko.devices = {
disk = {
main = {
device = "/dev/disk/by-label/NIXOS_SD";
type = "disk";
content = {
type = "gpt";
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
};
ESP = {
name = "ESP";
priority = 1;
size = "4G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "umask=0077" ];
};
};
plainSwap = {
size = "8G";
content = {
type = "swap";
discardPolicy = "both"; # Both "once" and page discard policies
};
};
root = {
size = "100%";
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/";
};
};
};
};
};
};
};
}

View File

@@ -1 +0,0 @@
{...}: {}

View File

@@ -1,35 +0,0 @@
{
lib,
inputs,
modulesPath,
...
}:
{
imports = [
# ./disks.nix
# (modulesPath + "/installer/sd-card/sd-image-aarch64.nix")
];
# fileSystems = {
# "/" = {
# device = "/dev/disk/by-label/NIXOS_SD";
# fsType = "ext4";
# options = [ "noatime" ];
# };
# };
boot.supportedFilesystems = lib.mkForce [
"btrfs"
"reiserfs"
"vfat"
"ext4"
"f2fs"
"xfs"
"ntfs"
"cifs"
];
nixpkgs.overlays = [
# https://github.com/NixOS/nixpkgs/issues/126755#issuecomment-869149243
(final: super: {
makeModulesClosure = x: super.makeModulesClosure (x // { allowMissing = true; });
})
];
}

View File

@@ -1,159 +0,0 @@
{
inputs,
config,
system,
pkgs,
fetchFromGitHub,
...
}:
{
imports = [
inputs.sops-nix.homeManagerModules.sops
];
sops = {
age.keyFile = "/home/doloro/.config/sops/age/key.txt"; # must have no password!
};
modules = {
Hyprland.enable = true;
quickshell.enable = true;
# chromium.enable = true;
wivrn.enable = false;
helium.enable = true;
sops.enable = true;
wakatime.enable = false;
# remoteBuild.use-remote-builders = true;
nixvim.enable = true;
zen-browser.enable = false;
kitty.enable = true;
helix.enable = false;
stylix.enable = true;
tmux.enable = true;
theme.enable = true;
obs = {
enable = true;
autostart = false;
};
blender.enable = false;
bottles.enable = false;
fish.enable = true;
youtube-music.enable = true;
unityhub.enable = false;
direnv.enable = true;
git.enable = true;
rsRPC.enable = true;
};
# Home Manager needs a bit of information about you and the paths it should
# manage.
home.username = "doloro";
home.homeDirectory = "/home/doloro";
services = {
gpg-agent = {
enable = true;
pinentry = {
package = pkgs.pinentry-qt;
program = "pinentry-qt";
};
};
arrpc = {
enable = false;
};
};
xdg.mimeApps.enable = true;
wayland.windowManager.hyprland.settings = {
monitor = [
"eDP-1, 2880x1800@120, 0x0, 2"
];
input = {
kb_layout = "gb";
follow_mouse = 2;
sensitivity = 0;
};
};
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "25.05"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = with pkgs; [
hello
vim
telegram-desktop
# vesktop
legcord
pavucontrol
lazygit
btop
sops
alcom
gcr
qbittorrent
intel-gpu-tools
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. These will be explicitly sourced when using a
# shell provided by Home Manager. If you don't want to manage your shell
# through Home Manager then you have to manually source 'hm-session-vars.sh'
# located at either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/doloro/etc/profile.d/hm-session-vars.sh
#
home.sessionVariables = {
EDITOR = "nvim";
};
services = {
dunst = {
enable = true;
};
};
xdg.configFile."mimeapps.list".force = true;
# Let Home Manager install and manage itself.
programs = {
ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
"*" = {
addKeysToAgent = "yes";
identityFile = [
"~/.ssh/id_ed25519"
"~/.ssh/id_gitea_scug"
];
};
};
};
home-manager.enable = true;
};
}

View File

@@ -1,148 +0,0 @@
{ pkgs, lib, ... }:
let
batt-gpu = pkgs.writeShellScript "batt-igpu" ''
${pkgs.intel-gpu-tools}/bin/intel_gpu_frequency -e
echo "800" > /sys/class/drm/card1/gt_boost_freq_mhz
'';
ac-gpu = pkgs.writeShellScript "ac-igpu" ''
${pkgs.intel-gpu-tools}/bin/intel_gpu_frequency -d
echo "2350" > /sys/class/drm/card1/gt_boost_freq_mhz
'';
in
{
services.tlp = {
enable = true;
settings = {
# Wireless power saving
WIFI_PWR_ON_BAT = "1";
# USB autosuspend
USB_AUTOSUSPEND = "1";
# SATA drive power management
SATA_LINKPWR_ON_BAT = "min_power";
# PCI Express Active-State Power Management (ASPM)
PCIE_ASPM_ON_BAT = "powersupersave";
RUNTIME_PM_ON_AC = "on";
RUNTIME_PM_ON_BAT = "auto";
# Disable Bluetooth on battery
# DEVICES_TO_DISABLE_ON_BAT = "bluetooth";
# Restore brightness on battery
RESTORE_BRIGHTNESS_ON_BAT = "1";
PCIE_ASPM_ON_AC = "balanced";
DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE = "bluetooth";
INTEL_GPU_MAX_FREQ_ON_AC = 0;
INTEL_GPU_MAX_FREQ_ON_BAT = 800;
INTEL_GPU_BOOST_FREQ_ON_AC = 0;
INTEL_GPU_BOOST_FREQ_ON_BAT = 800;
CPU_MAX_PERF_ON_BAT = 50;
PLATFORM_PROFILE_ON_AC = "balanced";
PLATFORM_PROFILE_ON_BAT = "quiet";
STOP_CHARGE_THRESH_BAT0 = 80;
};
};
services.thermald.enable = true;
services.upower = {
enable = true;
};
services.auto-cpufreq.enable = true;
systemd.targets = {
"ac" = {
description = "On AC power";
unitConfig = {
StopWhenUnneeded = "yes";
};
};
"battery" = {
description = "On battery power";
unitConfig = {
StopWhenUnneeded = "yes";
};
};
};
services.udev.extraRules = ''
SUBSYSTEM=="power_supply",ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/run/current-system/systemd/bin/systemctl start battery.target"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/run/current-system/systemd/bin/systemctl start ac.target"
'';
services.auto-cpufreq.settings = {
battery = {
governor = "powersave";
turbo = "never";
};
charger = {
governor = "performance";
turbo = "auto";
};
};
boot.kernelParams = [
# "mem_sleep_default=deep"
# "i915.fastboot=1"
"pcie_aspm=force"
"ahci.mobile_lpm_policy=1"
];
services.logind.settings.Login = {
HandleLidSwitch = "suspend";
HandleLidSwitchExternalPower = "suspend";
HandleLidSwitchDocked = "ignore";
};
systemd.sleep.extraConfig = ''
HibernateDelaySec=30min
SuspendEstimationSec=120
'';
systemd.services.gpu-limit-on-batt = {
enable = true;
description = "Using rfkill; disable all rf devices before sleeping.";
before = [ "battery.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = "${batt-gpu}";
RemainAfterExit = true;
};
wantedBy = [ "battery.target" ];
partOf = [ "battery.target" ];
};
systemd.services.gpu-limit-on-ac = {
enable = true;
description = "Using rfkill; disable all rf devices before sleeping.";
before = [ "ac.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = "${ac-gpu}";
RemainAfterExit = true;
};
wantedBy = [ "ac.target" ];
partOf = [ "ac.target" ];
};
systemd.services.rfkill-sleep-wake = {
enable = true;
description = "Using rfkill; disable all rf devices before sleeping.";
before = [ "sleep.target" ];
serviceConfig = {
Type = "oneshot";
ExecStop = "${pkgs.utillinux}/bin/rfkill unblock all";
ExecStart = "${pkgs.utillinux}/bin/rfkill block all";
RemainAfterExit = true;
};
wantedBy = [ "sleep.target" ];
partOf = [ "sleep.target" ];
};
# one of "ignore", "poweroff", "reboot", "halt", "kexec", "suspend", "hibernate", "hybrid-sleep", "suspend-then-hibernate", "lock"
powerManagement = {
enable = true;
# powertop.enable = true;
};
}

View File

@@ -1,197 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{
config,
lib,
inputs,
pkgs,
nix-meow,
...
}:
let
sops = inputs.sops-nix;
in
{
imports = [
inputs.sops-nix.nixosModules.sops
./laptop.nix
];
modules = {
fish.enable = true;
greetd.enable = true;
stylix.enable = true;
steam.enable = true;
Hyprland.enable = true;
# remoteBuild.use-remote-builders = true;
wivrn.enable = false;
fonts.enable = true;
};
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# boot.kernelPackages = pkgs.linuxPackages_6_12; # Hibernate works on 6.12 but not on latest
boot.kernelPackages = pkgs.linuxPackages_latest; # Unpinned the linux version for now.. as i am not using hibernate that often
networking.hostName = "doloro-nixos-laptop"; # Define your hostname.
security.rtkit.enable = true;
# Configure network connections interactively with nmcli or nmtui.
networking.networkmanager.enable = true;
# Set your time zone.
# time.timeZone = "Europe/London";
services.automatic-timezoned.enable = true;
nix.settings = {
substituters = [
"https://nix-community.cachix.org"
"https://cache.nixos.org/"
"https://attic.scug.io/pkgs"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"pkgs:+sRbfiZMMX5R3PuAPtIRz/emowDoGZNpozibrnrAvuc="
];
experimental-features = [
"flakes"
"nix-command"
];
trusted-users = [
"doloro"
];
};
services.gnome.gnome-keyring.enable = true;
hardware = {
firmware = [ pkgs.intel-npu-driver ];
cpu.intel = {
# npu.enable = true;
};
graphics = {
enable = true;
# https://github.com/intel/libvpl?tab=readme-ov-file#dispatcher-behavior-when-targeting-intel-gpus
extraPackages = with pkgs; [
vpl-gpu-rt
intel-media-driver # VA-API (iHD) userspace
intel-vaapi-driver
# vpl-gpu-rt # oneVPL (QSV) runtime
intel-compute-runtime # OpenCL (NEO) + Level Zero for Arc/Xe
];
};
};
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = true;
PermitRootLogin = "prohibit-password";
};
};
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBaa6Z5qtBSLEz+A4fQGYPfkOISsRQlmKkVbcx2zxML7"
];
# Select internationalisation properties.
# i18n.defaultLocale = "en_US.UTF-8";
# console = {
# font = "Lat2-Terminus16";
# keyMap = "us";
# useXkbConfig = true; # use xkb.options in tty.
# };
# Enable the X11 windowing system.
services.xserver.enable = true;
# sops.age.keyFile = "/etc/ssh/ssh_host_ed25519_key";
sops = {
defaultSopsFile = builtins.toPath "${nix-meow.flakeRoot}/secrets/users.yaml";
secrets = {
root-hashed_password = {
neededForUsers = true;
};
doloro-hashed_password = {
neededForUsers = true;
};
};
};
services.pipewire = {
enable = true;
pulse.enable = true;
};
services.libinput.enable = true;
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
# Define a user account. Don't forget to set a password with passwd.
users.users.doloro = {
isNormalUser = true;
shell = pkgs.fish;
extraGroups = [ "wheel" ]; # Enable sudo for the user.
packages = with pkgs; [
tree
];
hashedPasswordFile = config.sops.secrets."doloro-hashed_password".path;
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBaa6Z5qtBSLEz+A4fQGYPfkOISsRQlmKkVbcx2zxML7" # pc public key
];
# initialPassword = "sex";
};
users.mutableUsers = false;
services.system76-scheduler.enable = true;
# programs.firefox.enable = true;
# List packages installed in system profile.
# You can use https://search.nixos.org/ to find more packages (and options).
environment.systemPackages = with pkgs; [
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
git
wget
# tlp-pd
brightnessctl
nvtopPackages.intel
seahorse
];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# Copy the NixOS configuration file and link it from the resulting system
# (/run/current-system/configuration.nix). This is useful in case you
# accidentally delete configuration.nix.
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
# to actually do that.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "25.11"; # Did you read the comment?
}

View File

@@ -1,132 +0,0 @@
{
inputs,
config,
pkgs,
fetchFromGitHub,
...
}:
{
modules = {
hyfetch.enable = true;
Hyprland = {
enable = true;
suspend-on-hibernate = true;
};
niri.enable = false;
quickshell.enable = true;
# chromium.enable = true;
wivrn.enable = true;
sops.enable = true;
helium.enable = true;
nixvim.enable = true;
helix.enable = false;
stylix.enable = true;
kitty.enable = true;
tmux.enable = true;
theme.enable = true;
obs = {
enable = true;
autostart = true;
};
blender.enable = true;
zen-browser.enable = false;
bottles.enable = true;
fish.enable = true;
youtube-music.enable = true;
unityhub.enable = true;
direnv.enable = true;
git.enable = true;
rsRPC.enable = true;
};
# Home Manager needs a bit of information about you and the paths it should
# manage.
home.username = "doloro";
home.homeDirectory = "/home/doloro";
wayland.windowManager.hyprland.settings = {
monitor = [
"HDMI-A-1, 1920x1080@60, 0x0, 1"
"DP-3, 1920x1080@144, 1920x0, 1"
];
exec-once = [
"hyprctl dispatch workspace 2" # shit solution to get quickshell on the right monitor
];
workspace = [
"name:2, monitor:DP-3"
];
input = {
kb_layout = "gb";
follow_mouse = 2;
sensitivity = -0.5;
};
};
services = {
gpg-agent = {
enable = true;
pinentry = {
package = pkgs.pinentry-qt;
program = "pinentry-qt";
};
};
arrpc = {
enable = false;
};
};
xdg.mimeApps.enable = true;
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "25.05"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = with pkgs; [
hello
vim
telegram-desktop
vesktop
(inputs.protonhax.packages.x86_64-linux.default)
pavucontrol
lazygit
btop
sops
protontricks
alcom
gcr
qbittorrent
(inputs.hytale-launcher.packages.x86_64-linux.default)
];
home.sessionVariables = {
EDITOR = "nvim";
};
services = {
dunst = {
enable = true;
};
};
xdg.configFile."mimeapps.list".force = true;
programs = {
ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
"*" = {
addKeysToAgent = "yes";
identityFile = [
"~/.ssh/id_ed25519"
"~/.ssh/id_gitea_scug"
];
};
};
};
home-manager.enable = true;
};
}

View File

@@ -1,321 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{
config,
inputs,
lib,
pkgs,
nix-meow,
...
}:
let
sops = inputs.sops-nix;
in
{
imports = [
inputs.sops-nix.nixosModules.sops
];
modules = {
fish.enable = true;
greetd.enable = true;
stylix.enable = true;
steam.enable = true;
Hyprland.enable = true;
niri.enable = false;
wivrn.enable = true;
remoteBuild.become-remote-builder = true;
fonts.enable = true;
};
services.resolved.enable = true;
services.gnome.gnome-keyring.enable = true;
# Use the systemd-boot EFI boot loader.
boot.loader.grub.enable = true;
boot.loader.grub.device = "nodev";
boot.loader.grub.devices = [
"/dev/disk/by-id/nvme-CT1000P2SSD8_2221E632CD1F"
"nodev"
];
#boot.loader.efi.canTouchEfiVariables = true;
boot.loader.grub.efiSupport = true;
boot.loader.grub.efiInstallAsRemovable = true;
nix.settings = {
substituters = [
"https://nix-community.cachix.org"
"https://cache.nixos.org/"
"https://attic.scug.io/pkgs"
"https://cache.nixos-cuda.org"
"https://niri.cachix.org"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"pkgs:+sRbfiZMMX5R3PuAPtIRz/emowDoGZNpozibrnrAvuc="
"cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M="
"niri.cachix.org-1:Wv0OmO7PsuocRKzfDoJ3mulSl7Z6oezYhGhR+3W2964="
];
experimental-features = [
"flakes"
"nix-command"
];
trusted-users = [
"doloro"
];
};
networking.hostName = "doloroo-main"; # Define your hostname.
boot.kernelPackages = pkgs.linuxPackages_latest;
# Enable "Silent boot"
boot.consoleLogLevel = 3;
boot.initrd.verbose = false;
boot.kernelParams = [
"quiet"
"splash"
"boot.shell_on_fail"
"udev.log_priority=3"
"rd.systemd.show_status=auto"
];
# Hide the OS choice for bootloaders.
# It's still possible to open the bootloader list by pressing any key
# It will just not appear on screen unless a key is pressed
boot.loader.timeout = 0;
nixpkgs.config.allowUnfree = true;
# Configure network connections interactively with nmcli or nmtui.
networking.networkmanager.enable = true;
networking.firewall.enable = false;
security.rtkit.enable = true;
sops = {
# age.keyFile = "/etc/ssh/ssh_host_ed25519_key";
defaultSopsFile = builtins.toPath "${nix-meow.flakeRoot}/secrets/users.yaml";
secrets = {
root-hashed_password = {
neededForUsers = true;
};
doloro-hashed_password = {
neededForUsers = true;
};
};
};
# Set your time zone.
time.timeZone = "Europe/London";
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Select internationalisation properties.
# i18n.defaultLocale = "en_US.UTF-8";
# console = {
# font = "Lat2-Terminus16";
# keyMap = "us";
# useXkbConfig = true; # use xkb.options in tty.
# };
# Enable the X11 windowing system.
# services.xserver.enable = true;
# Enable OpenGL
hardware.graphics = {
enable = true;
};
services.xserver.videoDrivers = [ "nvidia" ];
fileSystems."/mnt/2tb" = {
device = "/dev/disk/by-uuid/0f49aec7-4af2-4f4f-b475-3f4fad2b59c2";
fsType = "ext4";
options = [
# If you don't have this options attribute, it'll default to "defaults"
# boot options for fstab. Search up fstab mount options you can use
"defaults"
"users" # Allows any user to mount and unmount
"nofail" # Prevent system from failing if this drive doesn't mount
"exec"
];
};
boot.plymouth = {
enable = true;
theme = "rings";
themePackages = with pkgs; [
# By default we would install all themes
(adi1090x-plymouth-themes.override {
selected_themes = [ "rings" ];
})
];
};
hardware.nvidia = {
# Modesetting is required.
modesetting.enable = true;
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
# Enable this if you have graphical corruption issues or application crashes after waking
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
# of just the bare essentials.
powerManagement.enable = true;
# Fine-grained power management. Turns off GPU when not in use.
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
powerManagement.finegrained = false;
# prime.offload.enable = true;
# Use the NVidia open source kernel module (not to be confused with the
# independent third-party "nouveau" open source driver).
# Support is limited to the Turing and later architectures. Full list of
# supported GPUs is at:
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
# Only available from driver 515.43.04+
open = false;
# Enable the Nvidia settings menu,
# accessible via `nvidia-settings`.
nvidiaSettings = true;
# Optionally, you may need to select the appropriate driver version for your specific GPU.
package = config.boot.kernelPackages.nvidiaPackages.latest;
};
# fonts = {
# enableDefaultPackages = true;
# packages =
# with pkgs;
# [
# nerd-fonts.jetbrains-mono
# material-design-icons
# material-symbols
# googlesans-code
# nerd-fonts.caskaydia-cove
# nerd-fonts.noto
# noto-fonts-cjk-sans
# noto-fonts-cjk-serif
# ]
# ++ [
# (inputs.font-patcher.lib.patchFont {
# font = "${pkgs.googlesans-code}/share/fonts/googlesans-code/GoogleSansCode[wght].ttf";
# name = "Google Sans Code Nerd Font";
# inherit system;
# })
# ];
# fontDir.enable = true;
# };
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
programs.nix-ld.enable = true;
programs.nix-ld.libraries = with pkgs; [
fuse
libusb1
libGL
harfbuzz
];
# Configure keymap in X11
# services.xserver.xkb.layout = "us";
# services.xserver.xkb.options = "eurosign:e,caps:escape";
# Enable CUPS to print documents.
# services.printing.enable = true;
# Enable sound.
# services.pulseaudio.enable = true;
# OR
services.pipewire = {
enable = true;
pulse.enable = true;
};
programs = {
ssh = {
# enable = true;
# startAgent = true;
};
fish.enable = true;
};
# Enable touchpad support (enabled default in most desktopManager).
# services.libinput.enable = true;
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = true;
};
};
users.users.doloro = {
isNormalUser = true;
shell = pkgs.fish;
extraGroups = [
"wheel"
"dialout"
"networkmanager"
]; # Enable sudo for the user.
packages = with pkgs; [
tree
];
};
users.mutableUsers = false;
users.users.doloro.hashedPasswordFile = config.sops.secrets."doloro-hashed_password".path;
# users.users.root.hashedPasswordFile = config.sops.secrets."root-hashed_password".path;
users.users.root.initialPassword = "root";
# programs.firefox.enable = true;
# List packages installed in system profile.
# You can use https://search.nixos.org/ to find more packages (and options).
environment.systemPackages = with pkgs; [
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
wget
killall
sops
seahorse
];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
# Enable the OpenSSH daemon.
# services.openssh.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# Copy the NixOS configuration file and link it from the resulting system
# (/run/current-system/configuration.nix). This is useful in case you
# accidentally delete configuration.nix.
# system.copySystemConfiguration = true;
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
# to actually do that.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "25.11"; # Did you read the comment?
}

View File

@@ -1,7 +0,0 @@
{ ... }:
let
in
{
}

View File

@@ -1,54 +0,0 @@
{
inputs,
config,
pkgs,
fetchFromGitHub,
...
}:
{
modules = {
hyfetch.enable = true;
sops.enable = true;
nixvim.enable = true;
tmux.enable = true;
# theme.enable = true;
fish.enable = true;
direnv.enable = true;
git.enable = true;
};
# Home Manager needs a bit of information about you and the paths it should
# manage.
home.username = "doloro";
home.homeDirectory = "/home/doloro";
# services = {
# };
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "25.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = with pkgs; [
hello
vim
lazygit
btop
sops
];
home.sessionVariables = {
EDITOR = "nvim";
};
xdg.configFile."mimeapps.list".force = true;
programs = {
home-manager.enable = true;
};
}

View File

@@ -1,99 +0,0 @@
{
lib,
pkgs,
inputs,
config,
...
}:
let
rpi-pi = inputs.raspberry-pi-nix;
in
{
# To build an sd-card image
# $ nix build .#nixosConfigurations.rpi-5-rpi-5-aarch64-linux.config.system.build.sdImage --json &| nom
# $ sudo dd if=./result/sd-image/nixos-sd-image-26.05.20260120.80e4adb-aarch64-linux.img of=/dev/sdc conv=fsync status=progress
imports = [
rpi-pi.nixosModules.raspberry-pi
rpi-pi.nixosModules.sd-image
./containers.nix
];
nix.settings = {
substituters = [ "https://nix-community.cachix.org" ];
trusted-public-keys = [ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ];
};
services.traefik = {
enable = true;
staticConfigOptions = {
entryPoints = {
web = {
address = ":80";
http.redirections.entrypoint = {
to = "websecure";
scheme = "https";
};
asDefault = true;
};
websecure = {
address = ":443";
asDefault = true;
http.tls.certResolver = "letsencrypt";
};
traefik = {
address = ":8081";
};
};
certificatesResolvers.letsencrypt.acme = {
email = "doloroo@proton.me";
storage = "${config.services.traefik.dataDir}/acme.json";
httpChallenge.entryPoint = "web";
};
api.dashboard = true;
api.insecure = true;
};
};
# TEMP
networking.firewall.enable = false;
users = {
mutableUsers = false;
users.doloro = {
isNormalUser = true;
extraGroups = [ "wheel" ];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE/4h+WCBBW82puv8SMdUbkWymF4amEMuZitgFztB6oZ" # laptop pub key
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBaa6Z5qtBSLEz+A4fQGYPfkOISsRQlmKkVbcx2zxML7" # pc pub key
];
initialPassword = "meowmeowmeow";
};
users.root = {
initialPassword = "rootmeow";
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE/4h+WCBBW82puv8SMdUbkWymF4amEMuZitgFztB6oZ" # laptop pub key
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBaa6Z5qtBSLEz+A4fQGYPfkOISsRQlmKkVbcx2zxML7" # pc pub key
];
};
};
networking.hostName = "nixos-001-rp5";
services.openssh.enable = true;
environment.systemPackages = with pkgs; [
libraspberrypi
];
sdImage.compressImage = false;
raspberry-pi-nix.board = "bcm2712"; # Rpi 5 - 64bit
# We need to rebuild kernel for 6.12
# raspberry-pi-nix.kernel-version = "v6_12_17";
raspberry-pi-nix.uboot.enable = false;
hardware.enableRedistributableFirmware = true;
system.stateVersion = "25.11";
nixpkgs.hostPlatform = "aarch64-linux";
}

View File

@@ -1,4 +0,0 @@
_: {
home = ./home.nix;
# nixos: ./nixos.nix;
}

View File

@@ -1,34 +0,0 @@
{
inputs,
config,
lib,
pkgs,
...
}:
let
cfg = config.modules.alecaframe;
in
{
# You gotta install it into prefix yourself. this just makes a desktop file
options.modules.alecaframe = {
enable = lib.mkEnableOption "";
};
config = lib.mkIf cfg.enable {
xdg.desktopEntries = {
alecaframe = {
name = "Alecaframe";
comment = "launches alecaframe";
exec = ''
protonhax run 230410 "
/home/branden/.local/share/Steam/steamapps/compatdata/230410/pfx/drive_c/users/steamuser/AppData/Roaming/Microsoft/Windows/Start
Menu/Programs/Overwolf/AlecaFrame.lnk
"
'';
# icon = "system-reboot";
terminal = false;
type = "Application";
categories = [ "System" ];
};
};
};
}

View File

@@ -1,4 +0,0 @@
_: {
home = ./home.nix;
# nixos: ./nixos.nix;
}

View File

@@ -1,62 +0,0 @@
{
config,
lib,
inputs,
pkgs,
home,
system,
...
}:
# system: "base16"
# name: "Gruvbox dark, hard"
# author: "Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox)"
# variant: "dark"
let
hexToInt = hex: fromTOML "value = 0x${hex}";
hexToRgb =
hex:
let
red = hexToInt (builtins.substring 1 2 hex);
green = hexToInt (builtins.substring 3 2 hex);
blue = hexToInt (builtins.substring 5 2 hex);
in
{
r = red.value;
g = green.value;
b = blue.value;
};
theme =
let
importYaml =
file:
builtins.fromJSON (
builtins.readFile (
pkgs.runCommandNoCC "converted-yaml.json" { } ''
${pkgs.yj}/bin/yj < ${file} > $out
''
)
);
# EDIT THEME HERE
themeFile = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
in
importYaml themeFile;
in
{
options.modules.base16 = {
hex = lib.mkOption {
type = lib.types.attrs;
description = ''
Hexadecimal color configuration for Gruvbox dark, hard Base16 theme.
'';
};
rgb = lib.mkOption {
type = lib.types.attrs;
description = ''
Hexadecimal color configuration for Gruvbox dark, hard Base16 theme.
'';
};
};
config.modules.base16.hex = theme.palette;
config.modules.base16.rgb = builtins.mapAttrs (_name: hex: hexToRgb hex) theme.palette;
}

View File

@@ -1,4 +0,0 @@
_: {
home = ./home.nix;
# nixos: ./nixos.nix;
}

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