Initialize new config

This commit is contained in:
Ryan Pandya 2025-01-24 04:32:03 +00:00
commit 3aeb697621
29 changed files with 8358 additions and 0 deletions

5941
flake.lock generated Normal file

File diff suppressed because it is too large Load Diff

211
flake.nix Normal file
View File

@ -0,0 +1,211 @@
{
description = "PandOS";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
impermanence.url = "github:nix-community/impermanence";
nix-flatpak.url = "github:gmodena/nix-flatpak";
nix-index-database = {
url = "github:Mic92/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-inspect.url = "github:bluskript/nix-inspect";
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions";
nixos-generators = {
url = "github:nix-community/nixos-generators";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-hardware.url = "github:nixos/nixos-hardware";
nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland";
nixvim = {
url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs";
};
nur = {
url = "github:nix-community/NUR";
inputs.nixpkgs.follows = "nixpkgs";
};
nvf.url = "github:notashelf/nvf";
quadlet-nix = {
url = "github:SEIAROTg/quadlet-nix";
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";
};
aaru = {
url = "github:Whovian9369/aaru-nix-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-game-preservation = {
url = "github:Whovian9369/nix-game-preservation";
inputs.nixpkgs.follows = "nixpkgs";
};
rom-properties = {
url = "github:Whovian9369/rom-properties-nix-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
jovian = {
url = "github:Jovian-Experiments/Jovian-NixOS";
inputs.nixpkgs.follows = "nixpkgs";
};
wayland-pipewire-idle-inhibit = {
url = "github:rafaelrc7/wayland-pipewire-idle-inhibit";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-citizen = {
url = "github:LovingMelody/nix-citizen";
inputs.nix-gaming.follows = "nix-gaming";
};
nix-gaming.url = "github:fufexan/nix-gaming";
nix-proton-cachyos.url = "github:kimjongbing/nix-proton-cachyos";
openmw-nix = {
url = "git+https://codeberg.org/PopeRigby/openmw-nix.git";
inputs.nixpkgs.follows = "nixpkgs";
};
auto-cpufreq = {
url = "github:AdnanHodzic/auto-cpufreq";
inputs.nixpkgs.follows = "nixpkgs";
};
cd-ls = {
url = "github:zshzoo/cd-ls";
flake = false;
};
nsearch = {
url = "github:niksingh710/nsearch";
inputs.nixpkgs.follows = "nixpkgs";
};
steamtinkerlaunch-master = {
type = "git";
url = "https://github.com/sonic2kk/steamtinkerlaunch.git";
flake = false;
};
ucodenix.url = "github:e-tho/ucodenix";
# Theming
catppuccin = {
url = "github:catppuccin/nix";
};
catppuccin-ghostwriter = {
url = "github:catppuccin/ghostwriter";
flake = false;
};
catppuccin-halloy = {
url = "github:catppuccin/halloy";
flake = false;
};
catppuccin-heroic = {
url = "github:catppuccin/heroic";
flake = false;
};
catppuccin-kitty = {
url = "github:catppuccin/kitty";
flake = false;
};
catppuccin-obs = {
url = "github:catppuccin/obs";
flake = false;
};
catppuccin-powershell = {
url = "github:catppuccin/powershell";
flake = false;
};
catppuccin-xresources = {
url = "github:catppuccin/xresources";
flake = false;
};
catppuccin-zen = {
url = "github:IAmJafeth/zen-browser";
flake = false;
};
lightly.url = "github:Bali10050/Darkly";
#stylix.url = "github:danth/stylix";
hyprland.url = "github:hyprwm/Hyprland";
# KDE
kwin-effects-forceblur = {
url = "github:taj-ny/kwin-effects-forceblur";
inputs.nixpkgs.follows = "nixpkgs";
};
kwin-effects-kinetic = {
url = "github:gurrgur/kwin-effects-kinetic";
flake = false;
};
};
outputs =
{ nixpkgs, home-manager, ... }@inputs:
{
nixosConfigurations =
let
username = "ryan";
vars = {
desktop = true;
gaming = true;
};
in
{
# Desktop
thalia = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
inherit inputs username;
vars = vars;
};
modules = [
./hosts/thalia
inputs.catppuccin.nixosModules.catppuccin
# inputs.chaotic.nixosModules.default
# inputs.disko.nixosModules.disko
# ./hosts/desktop/disko.nix
# { _module.args.disks = [ "/dev/disk/by-id/nvme-CT2000T700SSD3_2413E8A197BB" ]; }
#inputs.lanzaboote.nixosModules.lanzaboote
inputs.nix-flatpak.nixosModules.nix-flatpak
inputs.nur.modules.nixos.default
inputs.quadlet-nix.nixosModules.quadlet
inputs.sops-nix.nixosModules.sops
inputs.ucodenix.nixosModules.default
home-manager.nixosModules.home-manager
{
home-manager = {
backupFileExtension = "hmbak";
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = {
inherit inputs vars username;
};
sharedModules = with inputs; [
catppuccin.homeManagerModules.catppuccin
nix-flatpak.homeManagerModules.nix-flatpak
nix-index-database.hmModules.nix-index
nixvim.homeManagerModules.nixvim
nur.modules.homeManager.default
quadlet-nix.homeManagerModules.quadlet
nvf.homeManagerModules.default
sops-nix.homeManagerModules.sops
wayland-pipewire-idle-inhibit.homeModules.default
];
};
}
];
};
};
};
}

164
hosts/orion/default.nix Normal file
View File

@ -0,0 +1,164 @@
{
lib,
host,
...
}:
{
imports = [
# System
# ./disko.nix
./hardware-configuration.nix
# ./impermanence.nix
# Profiles
../../modules
# Users
../../users
];
# Users
ryan.enable = true;
pvi.enable = true;
# Custom modules
unfree.enable = true;
desktop.enable = true;
desktop.hostMonitorSettings = "
monitor = , preferred, auto, 1
";
# gaming.enable = true;
# gsr.defaultAudioDevice = "alsa_output.usb-Schiit_Audio_Schiit_Modi_-00.analog-stereo.monitor"; # alsa_output.usb-Generic_USB_Audio-00.analog-stereo.monitor
# low-latency.enable = false;
# vhs-decode.enable = true;
boot = {
initrd = {
availableKernelModules = lib.mkDefault [
"nvme"
"xhci_pci"
"ahci"
"usb_storage"
"usbhid"
"sd_mod"
"sr_mod"
];
};
kernelModules = lib.mkDefault [
"dm-snapshot"
"kvm-amd"
"tcp_bbr"
"uinput"
];
kernelParams = lib.mkDefault [
"amd_iommu=on"
"amd_pstate=active"
];
# loader = {
# systemd-boot = {
# windows = {
# "11" = {
# title = "Windows 11";
# efiDeviceHandle = "HD3b";
# sortKey = "z_windows";
# };
# };
# };
# };
# tmp.tmpfsSize = "100%";
};
hardware = {
amdgpu.initrd.enable = true;
cpu.amd.updateMicrocode = true;
};
networking = {
hostName = "thalia-dev";
wireless.enable = false;
};
powerManagement.cpuFreqGovernor = "ondemand";
# services = {
# beesd = {
# filesystems = {
# games = {
# spec = "/home/${username}/Games";
# verbosity = "crit";
# extraOptions = [
# "--loadavg-target"
# "5.0"
# ];
# };
# };
# };
# pipewire = {
# extraConfig = {
# pipewire = {
# "10-clock-rate" = {
# "context.properties" = {
# # To make DAC properly work
# "default.clock.allowed-rates" = [
# 44100
# 48000
# 88200
# 96000
# 176400
# 192000
# ];
# "default.clock.quantum" = 512;
# "default.clock.min-quantum" = 512;
# "default.clock.max-quantum" = 512;
# };
# };
# # Create mono-only microphone output
# "10-loopback-mono-mic" = {
# "context.modules" = [
# {
# "name" = "libpipewire-module-loopback";
# "args" = {
# "node.description" = "Samson G-Track Pro [MONO]";
# "capture.props" = {
# "node.name" = "capture.mono-microphone";
# "audio.position" = [ "FL" ];
# "target.object" =
# "alsa_input.usb-Samson_Technologies_Samson_G-Track_Pro_D0B3381619112B00-00.analog-stereo";
# "stream.dont-remix" = true;
# "node.passive" = true;
# };
# "playback.props" = {
# "media.class" = "Audio/Source";
# "node.name" = "mono-microphone";
# "audio.position" = [ "MONO" ];
# };
# };
# }
# ];
# };
# };
# };
# };
# ucodenix = {
# enable = true;
# cpuModelId = "00A60F12";
# };
# udev = {
# # TODO: Remove when Linux 6.13 is out: https://www.phoronix.com/news/AMDGPU-More-Aggressive-Power
# extraRules = ''
# # https://reddit.com/r/linux_gaming/comments/196tz6v/psa_amdgpu_power_management_may_fix_your/khxs3q3/?context=3 https://gitlab.freedesktop.org/drm/amd/-/issues/1500#note_825883
# # https://gitlab.freedesktop.org/drm/amd/-/issues/1500#note_1854170
# KERNEL=="card1", SUBSYSTEM=="drm", DRIVERS=="amdgpu", ATTR{device/power_dpm_force_performance_level}="manual", ATTR{device/pp_power_profile_mode}="1"
# '';
# };
# };
systemd.targets = {
hibernate.enable = false;
hybrid-sleep.enable = false;
};
zramSwap = {
enable = true;
};
}

View File

@ -0,0 +1,39 @@
# 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" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/a6b7a6ac-63c2-445b-99c9-7bcf28f2bfb3";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/09B6-4C96";
fsType = "vfat";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/78e92e55-980d-4219-8da8-a55872e0ea63"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp8s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

20
hosts/orion/variables.nix Normal file
View File

@ -0,0 +1,20 @@
{
# Git Configuration ( For Pulling Software Repos )
gitUsername = "Ryan Pandya";
gitEmail = "ryan@ryanpandya.com";
# Hyprland Settings
hostMonitorSettings = "
monitor=HDMI-A-1, 1920x1080, 0x0, 1, transform, 1 # Left
monitor=DP-3, 1920x1080, 1080x840, 1 # Center
monitor=DP-1, 1920x1080, 3000x840, 1 # Right
";
# Waybar Settings
clock24h = false;
# Program Options
browser = "firefox"; # Set Default Browser (google-chrome-stable for google-chrome)
terminal = "kitty"; # Set Default System Terminal
keyboardLayout = "us";
}

166
hosts/thalia/default.nix Normal file
View File

@ -0,0 +1,166 @@
{
lib,
host,
...
}:
{
imports = [
# System
# ./disko.nix
./hardware-configuration.nix
# ./impermanence.nix
# Profiles
../../modules
# Users
../../users
];
# Users
ryan.enable = true;
pvi.enable = false;
# Custom modules
unfree.enable = true;
desktop.enable = true;
desktop.hostMonitorSettings = "
monitor=desc:Dell Inc. DELL P2419H 250TX53, 1920x1080, 0x0, 1, transform, 1 # Left
monitor=desc:Dell Inc. DELL P2719H F3WNLS2, 1920x1080, 1080x840, 1 # Center
monitor=desc:Dell Inc. DELL P2719H 93WNLS2, 1920x1080, 3000x840, 1 # Right
";
# gaming.enable = true;
# gsr.defaultAudioDevice = "alsa_output.usb-Schiit_Audio_Schiit_Modi_-00.analog-stereo.monitor"; # alsa_output.usb-Generic_USB_Audio-00.analog-stereo.monitor
# low-latency.enable = false;
# vhs-decode.enable = true;
boot = {
initrd = {
availableKernelModules = lib.mkDefault [
"nvme"
"xhci_pci"
"ahci"
"usb_storage"
"usbhid"
"sd_mod"
"sr_mod"
];
};
kernelModules = lib.mkDefault [
"dm-snapshot"
"kvm-amd"
"tcp_bbr"
"uinput"
];
kernelParams = lib.mkDefault [
"amd_iommu=on"
"amd_pstate=active"
];
# loader = {
# systemd-boot = {
# windows = {
# "11" = {
# title = "Windows 11";
# efiDeviceHandle = "HD3b";
# sortKey = "z_windows";
# };
# };
# };
# };
# tmp.tmpfsSize = "100%";
};
hardware = {
amdgpu.initrd.enable = true;
cpu.amd.updateMicrocode = true;
};
networking = {
hostName = "thalia-dev";
wireless.enable = false;
};
powerManagement.cpuFreqGovernor = "ondemand";
# services = {
# beesd = {
# filesystems = {
# games = {
# spec = "/home/${username}/Games";
# verbosity = "crit";
# extraOptions = [
# "--loadavg-target"
# "5.0"
# ];
# };
# };
# };
# pipewire = {
# extraConfig = {
# pipewire = {
# "10-clock-rate" = {
# "context.properties" = {
# # To make DAC properly work
# "default.clock.allowed-rates" = [
# 44100
# 48000
# 88200
# 96000
# 176400
# 192000
# ];
# "default.clock.quantum" = 512;
# "default.clock.min-quantum" = 512;
# "default.clock.max-quantum" = 512;
# };
# };
# # Create mono-only microphone output
# "10-loopback-mono-mic" = {
# "context.modules" = [
# {
# "name" = "libpipewire-module-loopback";
# "args" = {
# "node.description" = "Samson G-Track Pro [MONO]";
# "capture.props" = {
# "node.name" = "capture.mono-microphone";
# "audio.position" = [ "FL" ];
# "target.object" =
# "alsa_input.usb-Samson_Technologies_Samson_G-Track_Pro_D0B3381619112B00-00.analog-stereo";
# "stream.dont-remix" = true;
# "node.passive" = true;
# };
# "playback.props" = {
# "media.class" = "Audio/Source";
# "node.name" = "mono-microphone";
# "audio.position" = [ "MONO" ];
# };
# };
# }
# ];
# };
# };
# };
# };
# ucodenix = {
# enable = true;
# cpuModelId = "00A60F12";
# };
# udev = {
# # TODO: Remove when Linux 6.13 is out: https://www.phoronix.com/news/AMDGPU-More-Aggressive-Power
# extraRules = ''
# # https://reddit.com/r/linux_gaming/comments/196tz6v/psa_amdgpu_power_management_may_fix_your/khxs3q3/?context=3 https://gitlab.freedesktop.org/drm/amd/-/issues/1500#note_825883
# # https://gitlab.freedesktop.org/drm/amd/-/issues/1500#note_1854170
# KERNEL=="card1", SUBSYSTEM=="drm", DRIVERS=="amdgpu", ATTR{device/power_dpm_force_performance_level}="manual", ATTR{device/pp_power_profile_mode}="1"
# '';
# };
# };
systemd.targets = {
hibernate.enable = false;
hybrid-sleep.enable = false;
};
zramSwap = {
enable = true;
};
}

View File

@ -0,0 +1,39 @@
# 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" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/a6b7a6ac-63c2-445b-99c9-7bcf28f2bfb3";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/09B6-4C96";
fsType = "vfat";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/78e92e55-980d-4219-8da8-a55872e0ea63"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp8s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@ -0,0 +1,20 @@
{
# Git Configuration ( For Pulling Software Repos )
gitUsername = "Ryan Pandya";
gitEmail = "ryan@ryanpandya.com";
# Hyprland Settings
hostMonitorSettings = "
monitor=HDMI-A-1, 1920x1080, 0x0, 1, transform, 1 # Left
monitor=DP-3, 1920x1080, 1080x840, 1 # Center
monitor=DP-1, 1920x1080, 3000x840, 1 # Right
";
# Waybar Settings
clock24h = false;
# Program Options
browser = "firefox"; # Set Default Browser (google-chrome-stable for google-chrome)
terminal = "kitty"; # Set Default System Terminal
keyboardLayout = "us";
}

8
modules/apps/default.nix Normal file
View File

@ -0,0 +1,8 @@
{
imports = [
./direnv
./git
./hyprland
./vscode
];
}

View File

@ -0,0 +1,26 @@
{
lib,
config,
username,
...
}:
let
cfg = config.direnv;
in
{
options = {
direnv = {
enable = lib.mkEnableOption "Enable direnv in NixOS & home-manager";
};
};
config = lib.mkIf cfg.enable {
home-manager.users.${username} = {
programs = {
direnv = {
enable = true;
nix-direnv.enable = true;
};
};
};
};
}

View File

@ -0,0 +1,66 @@
{
lib,
config,
pkgs,
username,
fullname,
...
}:
let
cfg = config.git;
in
{
options = {
git = {
enable = lib.mkEnableOption "Enable git in NixOS & home-manager";
};
};
config = lib.mkIf cfg.enable {
programs.git = {
enable = true;
package = pkgs.gitFull;
};
home-manager.users.${username} =
{ config, pkgs, ... }:
{
programs.git = {
enable = true;
delta = {
enable = true;
options = {
light = false;
line-numbers = true;
navigate = true;
side-by-side = true;
};
};
extraConfig = {
diff = {
colorMoved = "default";
};
merge = {
conflictstyle = "diff3";
};
# safe = {
# directory = [
# "/mnt/crusader/Projects/Codeberg/nix-config"
# "/mnt/crusader/Projects/GitHub/arch-distrobox"
# "/mnt/crusader/Projects/GitHub/keenanweaver.github.io"
# "/mnt/crusader/Projects/GitHub/nix-config"
# "/mnt/crusader/Projects/GitHub/nix-config/.git"
# "/mnt/crusader/Projects/Gitlab/moka-pics"
# ];
# };
};
includes = [ { path = "${config.xdg.configHome}/git/mocha.gitconfig"; } ];
package = pkgs.gitFull;
userName = "Ryan Pandya";
userEmail = "ryan@ryanpandya.com";
# signing = {
# signByDefault = true;
# key = "0926B70C6A27AAE1";
# };
};
};
};
}

View File

@ -0,0 +1,197 @@
{
lib,
username,
config,
...
}:
let
browser = builtins.toString config.desktop.browser;
terminal = builtins.toString config.desktop.terminal;
in
with lib;
{
home-manager.users.${username}.wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
systemd.enable = true;
extraConfig =
let
modifier = "SUPER";
in
concatStrings [
''
env = NIXOS_OZONE_WL, 1
env = NIXPKGS_ALLOW_UNFREE, 1
env = XDG_CURRENT_DESKTOP, Hyprland
env = XDG_SESSION_TYPE, wayland
env = XDG_SESSION_DESKTOP, Hyprland
env = GDK_BACKEND, wayland, x11
env = CLUTTER_BACKEND, wayland
env = QT_QPA_PLATFORM=wayland;xcb
env = QT_WAYLAND_DISABLE_WINDOWDECORATION, 1
env = QT_AUTO_SCREEN_SCALE_FACTOR, 1
env = SDL_VIDEODRIVER, x11
env = MOZ_ENABLE_WAYLAND, 1
exec-once = dbus-update-activation-environment --systemd --all
exec-once = systemctl --user import-environment QT_QPA_PLATFORMTHEME WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = killall -q swww;sleep .5 && swww init
exec-once = killall -q waybar;sleep .5 && waybar
exec-once = killall -q swaync;sleep .5 && swaync
exec-once = nm-applet --indicator
exec-once = lxqt-policykit-agent
exec-once = sleep 1.5 && swww img /home/${username}/Pictures/Wallpapers/pink-desert.jpeg
${builtins.toString config.desktop.hostMonitorSettings}
exec-once = ${terminal}
general {
gaps_in = 6
gaps_out = 8
border_size = 2
layout = dwindle
resize_on_border = true
}
input {
kb_layout = us
kb_options = grp:alt_shift_toggle
kb_options = caps:super
follow_mouse = 1
touchpad {
natural_scroll = true
disable_while_typing = true
scroll_factor = 0.8
}
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
accel_profile = flat
}
windowrule = noborder,^(wofi)$
windowrule = center,^(wofi)$
windowrule = center,^(steam)$
windowrule = float, nm-connection-editor|blueman-manager
windowrule = float, swayimg|vlc|Viewnior|pavucontrol
windowrule = float, nwg-look|qt5ct|mpv
windowrule = float, zoom
windowrulev2 = stayfocused, title:^()$,class:^(steam)$
windowrulev2 = minsize 1 1, title:^()$,class:^(steam)$
windowrulev2 = opacity 0.9 0.7, class:^(Brave)$
windowrulev2 = opacity 0.9 0.7, class:^(thunar)$
gestures {
workspace_swipe = true
workspace_swipe_fingers = 3
}
misc {
initial_workspace_tracking = 0
mouse_move_enables_dpms = true
key_press_enables_dpms = false
}
animations {
enabled = yes
bezier = wind, 0.05, 0.9, 0.1, 1.05
bezier = winIn, 0.1, 1.1, 0.1, 1.1
bezier = winOut, 0.3, -0.3, 0, 1
bezier = liner, 1, 1, 1, 1
animation = windows, 1, 6, wind, slide
animation = windowsIn, 1, 6, winIn, slide
animation = windowsOut, 1, 5, winOut, slide
animation = windowsMove, 1, 5, wind, slide
animation = border, 1, 1, liner
animation = fade, 1, 10, default
animation = workspaces, 1, 5, wind
}
decoration {
rounding = 10
blur {
enabled = true
size = 5
passes = 3
new_optimizations = on
ignore_opacity = off
}
}
plugin {
hyprtrails {
}
}
dwindle {
pseudotile = true
preserve_split = true
}
bind = ${modifier},Return,exec,${terminal}
bind = ${modifier}SHIFT,Return,exec,rofi-launcher
bind = ${modifier}SHIFT,W,exec,web-search
bind = ${modifier}ALT,W,exec,wallsetter
bind = ${modifier}SHIFT,N,exec,swaync-client -rs
bind = ${modifier},W,exec,${browser}
bind = ${modifier},E,exec,emopicker9000
bind = ${modifier},S,exec,screenshootin
bind = ${modifier},D,exec,discord
bind = ${modifier},O,exec,obs
bind = ${modifier},C,exec,hyprpicker -a
bind = ${modifier},G,exec,gimp
bind = ${modifier}SHIFT,G,exec,godot4
bind = ${modifier},T,exec,thunar
bind = ${modifier},M,exec,spotify
bind = ${modifier},Q,killactive,
bind = ${modifier},P,pseudo,
bind = ${modifier}SHIFT,I,togglesplit,
bind = ${modifier},F,fullscreen,
bind = ${modifier}SHIFT,F,togglefloating,
bind = ${modifier}SHIFT,C,exit,
bind = ${modifier}SHIFT,left,movewindow,l
bind = ${modifier}SHIFT,right,movewindow,r
bind = ${modifier}SHIFT,up,movewindow,u
bind = ${modifier}SHIFT,down,movewindow,d
bind = ${modifier}SHIFT,h,movewindow,l
bind = ${modifier}SHIFT,l,movewindow,r
bind = ${modifier}SHIFT,k,movewindow,u
bind = ${modifier}SHIFT,j,movewindow,d
bind = ${modifier},left,movefocus,l
bind = ${modifier},right,movefocus,r
bind = ${modifier},up,movefocus,u
bind = ${modifier},down,movefocus,d
bind = ${modifier},h,movefocus,l
bind = ${modifier},l,movefocus,r
bind = ${modifier},k,movefocus,u
bind = ${modifier},j,movefocus,d
bind = ${modifier},1,workspace,1
bind = ${modifier},2,workspace,2
bind = ${modifier},3,workspace,3
bind = ${modifier},4,workspace,4
bind = ${modifier},5,workspace,5
bind = ${modifier},6,workspace,6
bind = ${modifier},7,workspace,7
bind = ${modifier},8,workspace,8
bind = ${modifier},9,workspace,9
bind = ${modifier},0,workspace,10
bind = ${modifier}SHIFT,SPACE,movetoworkspace,special
bind = ${modifier},SPACE,togglespecialworkspace
bind = ${modifier}SHIFT,1,movetoworkspace,1
bind = ${modifier}SHIFT,2,movetoworkspace,2
bind = ${modifier}SHIFT,3,movetoworkspace,3
bind = ${modifier}SHIFT,4,movetoworkspace,4
bind = ${modifier}SHIFT,5,movetoworkspace,5
bind = ${modifier}SHIFT,6,movetoworkspace,6
bind = ${modifier}SHIFT,7,movetoworkspace,7
bind = ${modifier}SHIFT,8,movetoworkspace,8
bind = ${modifier}SHIFT,9,movetoworkspace,9
bind = ${modifier}SHIFT,0,movetoworkspace,10
bind = ${modifier}CONTROL,right,workspace,e+1
bind = ${modifier}CONTROL,left,workspace,e-1
bind = ${modifier},mouse_down,workspace, e+1
bind = ${modifier},mouse_up,workspace, e-1
bindm = ${modifier},mouse:272,movewindow
bindm = ${modifier},mouse:273,resizewindow
bind = ALT,Tab,cyclenext
bind = ALT,Tab,bringactivetotop
bind = ,XF86AudioRaiseVolume,exec,wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bind = ,XF86AudioLowerVolume,exec,wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
binde = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bind = ,XF86AudioPlay, exec, playerctl play-pause
bind = ,XF86AudioPause, exec, playerctl play-pause
bind = ,XF86AudioNext, exec, playerctl next
bind = ,XF86AudioPrev, exec, playerctl previous
bind = ,XF86MonBrightnessDown,exec,brightnessctl set 5%-
bind = ,XF86MonBrightnessUp,exec,brightnessctl set +5%
''
];
};
}

View File

@ -0,0 +1,108 @@
{
inputs,
lib,
config,
username,
...
}:
let
cfg = config.vscode;
marketplace-extensions =
with inputs.nix-vscode-extensions.extensions.x86_64-linux.vscode-marketplace; [
arrterian.nix-env-selector
ban.spellright
charliermarsh.ruff
#codeium.codeium
eamodio.gitlens
formulahendry.code-runner
foxundermoon.shell-format
jnoortheen.nix-ide
mkhl.direnv
ms-python.python
ms-vscode.powershell
ms-vscode-remote.remote-containers
ms-vscode-remote.remote-ssh
redhat.ansible
redhat.vscode-xml
redhat.vscode-yaml
rust-lang.rust-analyzer
skellock.just
s-nlf-fh.glassit
sumneko.lua
tamasfe.even-better-toml
timonwong.shellcheck
usernamehw.errorlens
yzhang.markdown-all-in-one
];
in
{
options = {
vscode = {
enable = lib.mkEnableOption "Enable vscode in NixOS & home-manager";
};
};
config = lib.mkIf cfg.enable {
home-manager.users.${username} =
{ pkgs, ... }:
{
nixpkgs = {
overlays = [ inputs.nix-vscode-extensions.overlays.default ];
};
programs.vscode = {
enable = true;
enableExtensionUpdateCheck = false;
enableUpdateCheck = false;
extensions = marketplace-extensions;
package = pkgs.vscodium;
userSettings = {
"ansible.ansible.path" = "ansible";
"ansible.python.interpreterPath" = "python";
"ansible.validation.lint.path" = "ansible-lint";
"codeium.enableConfig"."*" = true;
"codeium.enableConfig"."nix" = true;
"editor.formatOnSave" = true;
"editor.inlineSuggest.enabled" = true;
"editor.minimap.enabled" = true;
"editor.minimap.renderCharacters" = false;
"editor.renderControlCharacters" = true;
"editor.semanticHighlighting.enabled" = true;
"editor.tabCompletion" = "on";
"editor.wordWrap" = "on";
"git.allowForcePush" = true;
"git.autofetch" = true;
"git.confirmSync" = false;
"git.enableCommitSigning" = true;
"gopls"."ui.semanticTokens" = true;
"[nix]"."editor.defaultFormatter" = "jnoortheen.nix-ide";
"nix.enableLanguageServer" = true;
"nix.formatterPath" = "nixfmt";
"nix.serverPath" = "nixd";
"nix.serverSettings"."nixd"."formatting"."command" = [ "nixfmt" ];
"nix.serverSettings"."nixd"."formatting"."options" = {
"enable" = [ true ];
"nixos" = {
"expr" =
"(builtins.getFlake \"github:keenanweaver/nix-config\").nixosConfigurations.${config.networking.hostName}.options";
};
};
"powershell.powerShellAdditionalExePaths"."exePath" = "${pkgs.powershell}/bin/pwsh";
"powershell.integratedConsole.focusConsoleOnExecute" = false;
"powershell.integratedConsole.showOnStartup" = false;
"[powershell]"."editor.renderControlCharacters" = true;
"[powershell]"."editor.renderWhitespace" = "all";
"[powershell]"."files.autoGuessEncoding" = true;
"[powershell]"."files.trimTrailingWhitespace" = true;
"[python]"."editor.defaultFormatter" = "charliermarsh.ruff";
"redhat.telemetry.enabled" = false;
"rust-analyzer.server.path" = "rust-analyzer";
"security.workspace.trust.enabled" = false;
"terminal.integrated.minimumContrastRatio" = 1;
"terminal.integrated.shellIntegration.enabled" = true;
"window.titleBarStyle" = "custom";
"workbench.editorAssociations"."git-rebase-todo" = "gitlens.rebase";
"workbench.sideBar.location" = "right";
};
};
};
};
}

View File

@ -0,0 +1,58 @@
{ pkgs, lib, ... }:
{
boot = {
binfmt = {
emulatedSystems = [
"aarch64-linux"
];
};
consoleLogLevel = 0;
initrd = {
systemd.enable = true; # Plymouth login screen
verbose = false;
};
kernel = {
sysctl = {
"kernel.sysrq" = 4;
"kernel.nmi_watchdog" = 0;
"net.core.default_qdisc" = "cake";
"net.ipv4.tcp_congestion_control" = "bbr";
"vm.swappiness" = 10;
};
};
kernelPackages = lib.mkDefault pkgs.linuxPackages_latest;
kernelParams = [
"nowatchdog"
"zswap.enabled=0"
# Quiet boot
"quiet"
# "splash" # Plymouth
"loglevel=0"
"rd.udev.log_level=3"
"systemd.show_status=auto"
"udev.log_priority=3"
"vt.global_cursor_default=0"
];
loader = {
efi = {
canTouchEfiVariables = true;
efiSysMountPoint = "/boot";
};
systemd-boot = {
enable = true;
editor = false;
};
timeout = 1;
};
plymouth.enable = false;
supportedFilesystems = [
"btrfs"
"cifs"
"ext4"
"fat"
"ntfs"
];
};
environment.systemPackages = with pkgs; [ sbctl ];
}

View File

@ -0,0 +1,15 @@
{
imports = [
./boot
# ./flatpak
# ./fonts
# ./mounts
# ./networking
./nix
# ./nvidia
# ./pipewire
./theming
# ./users
# ./virtualization
];
}

View File

@ -0,0 +1,136 @@
{
inputs,
lib,
config,
username,
vars,
...
}:
let
cfg = config.nixConfig;
in
{
options = {
nixConfig = {
enable = lib.mkEnableOption "Enable nix in NixOS & home-manager";
};
};
config = lib.mkIf cfg.enable {
documentation = {
man = {
man-db.enable = true;
generateCaches = true;
};
};
nix = {
extraOptions = ''
builders-use-substitutes = true
keep-outputs = true
keep-derivations = true
'';
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 30d";
};
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
optimise = {
automatic = true;
dates = [ "10:00" ];
};
settings = {
auto-optimise-store = true;
connect-timeout = 5;
experimental-features = [
"nix-command"
"flakes"
];
extra-substituters = [
"https://nix-community.cachix.org"
"https://nyx.chaotic.cx"
];
extra-trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"nyx.chaotic.cx-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8="
];
log-lines = lib.mkDefault 25;
trusted-users = [ "${username}" ];
use-xdg-base-directories = false;
};
};
nixpkgs = {
config = {
allowBroken = false;
allowUnfree = true;
};
overlays = [
(import ../../../packages/overlay.nix)
];
};
system.autoUpgrade = {
enable = false;
dates = "04:00:00";
allowReboot = if vars.server then true else false;
rebootWindow = {
lower = "04:00";
upper = "06:00";
};
};
home-manager.users.${username} =
{ config, ... }:
{
home = {
extraProfileCommands = ''
export GPG_TTY=$(tty)
'';
language.base = "en_US.UTF-8";
sessionPath = [
"${config.home.homeDirectory}/.bin"
"${config.home.homeDirectory}/.local/bin"
];
sessionVariables = {
MANPAGER = "batman";
NIXOS_OZONE_WL = "1"; # Electron apps
NIXPKGS_ALLOW_UNFREE = "1";
#RUSTUP_HOME = "${config.xdg.dataHome}/rustup";
#WLR_NO_HARDWARE_CURSOR = "1";
XCOMPOSECACHE = "${config.xdg.cacheHome}/X11/xcompose";
};
shellAliases = {
b = "bat --color=always -pp";
bb = "bat --color=always";
db = "distrobox";
dbe = "db enter";
l = "lsd -la --group-dirs=first";
ls = "lsd -l --group-dirs=first";
nv = "nvim";
ngc = "nh clean all";
nor = "nh os switch";
npr = "nix run nixpkgs#nixpkgs-review -- pr";
psr = "plasmashell --replace & disown";
rbn = "podman stop -a && systemctl reboot";
sudo = "sudo ";
up = "topgrade";
};
};
nix = {
gc = {
automatic = true;
frequency = "weekly";
options = "--delete-older-than 30d";
};
};
xdg = {
enable = true;
userDirs = {
enable = true;
createDirectories = true;
templates = null;
publicShare = null;
};
};
};
};
}

View File

@ -0,0 +1,455 @@
{
config,
inputs,
lib,
username,
pkgs,
vars,
...
}:
let
accent-lower = "lavender";
accent-upper = "Lavender";
flavor-lower = "mocha";
flavor-upper = "Mocha";
cfg = config.catppuccinTheming;
mono-font = "JetBrainsMono Nerd Font";
sans-font = "Inter";
sans-font-pkg = pkgs.inter;
#serif-font = "IBM Plex Serif";
GTK-THEME = "Breeze-Dark";
cursor-theme = "breeze_cursors";
in
#cursor-theme = "Catppuccin-${flavor-upper}-${accent-upper}";
{
options = {
catppuccinTheming = {
enable = lib.mkEnableOption "Enable catppuccinTheming in NixOS & home-manager";
};
};
config = lib.mkIf cfg.enable {
catppuccin = {
enable = true;
accent = "${accent-lower}";
cache.enable = true;
flavor = "${flavor-lower}";
sddm = {
background = "/home/${username}/Pictures/wallpapers/lavender-wave-haikei.png";
font = "${mono-font}";
fontSize = "11";
};
};
console = {
packages = with pkgs; [ terminus_font ];
};
environment = {
sessionVariables = {
# Breaks theming but forces the color scheme
#GTK_THEME = "${GTK-THEME}";
};
systemPackages = with pkgs; [
(catppuccin-kde.override {
accents = [ "${accent-lower}" ];
flavour = [ "${flavor-lower}" ];
})
(catppuccin-papirus-folders.override {
accent = "${accent-lower}";
flavor = "${flavor-lower}";
})
#inputs.kwin-effects-forceblur.packages.${pkgs.system}.default
inputs.lightly.packages.${pkgs.system}.darkly-qt5
inputs.lightly.packages.${pkgs.system}.darkly-qt6
];
};
services = {
displayManager = {
sddm = {
settings = {
Theme = {
CursorTheme = "${cursor-theme}";
};
};
};
};
};
programs.dconf.enable = true;
home-manager.users.${username} =
{
inputs,
lib,
config,
username,
pkgs,
...
}:
{
catppuccin = {
enable = true;
accent = "${accent-lower}";
flavor = "${flavor-lower}";
cursors = {
enable = false;
accent = "${accent-lower}";
flavor = "${flavor-lower}";
};
};
gtk = {
enable = true;
cursorTheme = {
name = lib.mkDefault "${cursor-theme}";
size = 24;
};
font = {
name = "${sans-font}";
size = 12;
package = sans-font-pkg;
};
gtk2 = {
configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
# force = true; # https://github.com/nix-community/home-manager/pull/5263
};
gtk3 = {
extraConfig = {
gtk-application-prefer-dark-theme = true;
gtk-button-images = true;
gtk-decoration-layout = "icon:minimize,maximize,close";
gtk-enable-animations = true;
gtk-menu-images = true;
gtk-modules = "colorreload-gtk-module";
gtk-primary-button-warps-slider = true;
gtk-sound-theme-name = "ocean";
gtk-toolbar-style = "3";
gtk-xft-antialias = 1;
gtk-xft-hinting = 1;
gtk-xft-hintstyle = "hintslight";
gtk-xft-rgba = "rgb";
};
};
gtk4 = {
extraConfig = {
gtk-decoration-layout = "icon:minimize,maximize,close";
gtk-enable-animations = true;
gtk-primary-button-warps-slider = true;
gtk-sound-theme-name = "ocean";
gtk-xft-antialias = 1;
gtk-xft-hinting = 1;
gtk-xft-hintstyle = "hintslight";
gtk-xft-rgba = "rgb";
};
};
/*
theme = {
name = "${GTK-THEME}";
package = pkgs.kdePackages.breeze-gtk;
};
*/
};
home = {
file = {
# UMU cursor workaround
breeze-cursors = {
enable = true;
source = config.lib.file.mkOutOfStoreSymlink "${pkgs.kdePackages.breeze}/share/icons/breeze_cursors";
target = "${config.xdg.dataHome}/icons/breeze_cursors";
};
# Flatpak theming issue workarounds
catppuccin-gtk = {
enable = true;
source = config.lib.file.mkOutOfStoreSymlink "${pkgs.kdePackages.breeze-gtk}/share/themes/${GTK-THEME}";
target = "${config.xdg.dataHome}/themes/${GTK-THEME}";
};
catppuccin-ghostwriter = {
enable = true;
source = config.lib.file.mkOutOfStoreSymlink "${inputs.catppuccin-ghostwriter}/colours/Catppuccin-Latte-${flavor-upper}-${accent-upper}.json";
target = "${config.xdg.dataHome}/ghostwriter/themes/Catppuccin-Latte-${flavor-upper}-${accent-upper}.json";
};
catppuccin-halloy = {
enable = true;
source = config.lib.file.mkOutOfStoreSymlink "${inputs.catppuccin-halloy}/themes/catppuccin-${flavor-lower}.toml";
target = "${config.xdg.configHome}/halloy/themes/catppuccin-${flavor-lower}.toml";
};
catppuccin-heroic = {
enable = vars.gaming;
source = config.lib.file.mkOutOfStoreSymlink "${inputs.catppuccin-heroic}/themes/catppuccin-${flavor-lower}.css";
target = "Games/Heroic/catppuccin-${flavor-lower}.css";
};
catppuccin-obs-flatpak = {
enable = true;
recursive = true;
source = config.lib.file.mkOutOfStoreSymlink "${inputs.catppuccin-obs}/themes";
target = ".var/app/com.obsproject.Studio/config/obs-studio/themes";
};
catppuccin-powershell = {
enable = true;
source = config.lib.file.mkOutOfStoreSymlink "${inputs.catppuccin-powershell}";
target = "${config.xdg.dataHome}/powershell/Modules/Catppuccin";
};
catppuccin-vesktop = {
enable = true;
text = ''
@import url("https://catppuccin.github.io/discord/dist/catppuccin-${flavor-lower}-${accent-lower}.theme.css");
'';
target = "${config.xdg.configHome}/vesktop/themes/${flavor-lower}.theme.css";
};
catppuccin-zen-flatpak = {
enable = true;
source = config.lib.file.mkOutOfStoreSymlink "${inputs.catppuccin-zen}/themes/${flavor-upper}/${accent-upper}";
target = ".var/app/app.zen_browser.zen/.zen/${username}/chrome";
};
cursor-theme-default = {
enable = true;
text = ''
[Icon Theme]
Inherits=${cursor-theme}
'';
target = "${config.xdg.dataHome}/icons/default/index.theme";
};
klassy-config = {
enable = true;
text = ''
[ButtonBehaviour]
ShowCloseOutlineOnHoverActive=false
ShowCloseOutlineOnHoverInactive=false
ShowCloseOutlineOnPressActive=false
ShowCloseOutlineOnPressInactive=false
ShowOutlineOnHoverActive=false
ShowOutlineOnHoverInactive=false
ShowOutlineOnPressActive=false
ShowOutlineOnPressInactive=false
[ButtonColors]
ButtonBackgroundColorsActive=TitleBarTextNegativeClose
ButtonBackgroundColorsInactive=TitleBarTextNegativeClose
ButtonBackgroundOpacityActive=10
ButtonBackgroundOpacityInactive=10
ButtonOverrideColorsActiveClose={"BackgroundHover":["NegativeFullySaturated"],"BackgroundPress":["NegativeSaturated",80]}
ButtonOverrideColorsInactiveClose={"BackgroundHover":["NegativeFullySaturated"],"BackgroundPress":["NegativeSaturated",80]}
OnPoorIconContrastActive=Nothing
OnPoorIconContrastInactive=Nothing
[ButtonSizing]
ButtonCornerRadius=Custom
ButtonCustomCornerRadius=0
FullHeightButtonSpacingLeft=0
FullHeightButtonSpacingRight=0
FullHeightButtonWidthMarginRight=14
IntegratedRoundedRectangleBottomPadding=0.5
[ShadowStyle]
ShadowSize=ShadowSmall
[TitleBarOpacity]
ActiveTitleBarOpacity=75
[TitleBarSpacing]
LockTitleBarLeftRightMargins=false
PercentMaximizedTopBottomMargins=50
TitleAlignment=AlignLeft
TitleBarBottomMargin=2.25
TitleBarLeftMargin=2
TitleBarTopMargin=2.25
[Windeco]
BoldButtonIcons=BoldIconsFine
ButtonIconStyle=StyleSystemIconTheme
ButtonShape=ShapeFullHeightRectangle
ColorizeThinWindowOutlineWithButton=false
IconSize=IconMedium
WindowCornerRadius=8
[WindowOutlineStyle]
LockThinWindowOutlineStyleActiveInactive=true
ThinWindowOutlineStyleActive=WindowOutlineContrast
ThinWindowOutlineStyleInactive=WindowOutlineContrast
'';
target = "${config.xdg.configHome}/klassy/klassyrc";
};
powershell-profile = {
enable = true;
text = ''
Import-Module Catppuccin
$Flavor = $Catppuccin['${flavor-upper}']
'';
target = "${config.xdg.configHome}/powershell/Microsoft.PowerShell_profile.ps1";
};
};
packages = with pkgs; [
hicolor-icon-theme
vivid
## GNOME
adwaita-icon-theme
gnome-settings-daemon
gsettings-desktop-schemas
gsettings-qt
];
sessionVariables = {
GSETTINGS_BACKEND = "keyfile";
GTK_USE_PORTAL = "1";
LS_COLORS = "$(vivid generate catppuccin-${flavor-lower})";
XCURSOR_NAME = "${cursor-theme}";
XCURSOR_SIZE = "24";
};
};
programs = {
bat = {
config = {
pager = "less -FR";
};
};
btop = {
settings = {
theme_background = false;
};
};
foot = {
settings = {
colors = {
alpha = 0.7;
};
main = {
font = "${mono-font}:size=12";
};
};
};
git = {
delta = { };
};
kitty = {
font = {
name = "${mono-font}";
size = 14;
};
settings = {
background_opacity = "0.7";
};
};
lazygit = {
settings = {
gui = {
border = "single";
mainPanelSplitMode = "vertical";
nerdFontsVersion = "3";
scrollHeight = 10;
scrollOffMargin = 4;
showFileTree = false;
sidePanelWidth = 0.3333;
};
};
};
nixvim = {
colorschemes.catppuccin = {
enable = true;
settings = {
background.dark = "${flavor-lower}";
flavor = "${flavor-lower}";
integrations = {
cmp = true;
coc_nvim = true;
gitsigns = true;
markdown = true;
neotree = true;
overseer = true;
treesitter = true;
treesitter_context = true;
which_key = true;
};
term_colors = true;
transparentBackground = true;
};
};
};
nvf = {
settings = {
vim = {
theme = {
enable = true;
name = "catppuccin";
style = "mocha";
transparent = true;
};
};
};
};
vscode = {
extensions = with inputs.nix-vscode-extensions.extensions.x86_64-linux.vscode-marketplace; [
catppuccin.catppuccin-vsc-icons
catppuccin.catppuccin-vsc
];
userSettings = {
"catppuccin.accentColor" = "${accent-lower}";
"catppuccin.customUIColors"."${flavor-lower}"."statusBar.foreground" = "accent";
"editor.fontFamily" = "'${mono-font}', 'monospace', monospace";
"editor.fontLigatures" = true;
"editor.fontSize" = 18;
"glassit.alpha" = 210;
"terminal.integrated.fontFamily" = "${mono-font}";
"terminal.integrated.fontSize" = 14;
"terminal.integrated.fontWeight" = "normal";
"workbench.colorTheme" = "Catppuccin ${flavor-upper}";
"workbench.iconTheme" = "catppuccin-${flavor-lower}";
};
};
};
services = {
flatpak = {
overrides = {
"com.fightcade.Fightcade" = {
Environment = {
GTK_THEME = "${GTK-THEME}";
};
};
"app.zen_browser.zen" = {
Environment = {
GTK_THEME = "${GTK-THEME}";
};
};
};
};
xsettingsd = {
settings = {
"Gtk/CursorThemeSize" = 24;
"Gtk/CursorThemeName" = "${cursor-theme}";
"Gtk/FontName" = "${sans-font}, 12";
"Net/IconThemeName" = "Papirus-Dark";
"Net/ThemeName" = "${GTK-THEME}";
};
};
};
xresources = {
properties = {
"Xcursor.size" = 24;
"Xcursor.theme" = "${cursor-theme}";
"Xft.autohint" = 1;
"Xft.lcdfilter" = "lcddefault";
"Xft.hintstyle" = "hintfull";
"Xft.hinting" = 1;
"Xft.antialias" = 1;
"Xft.rgba" = "rgb";
# Catppuccin
"*background" = "#1E1E2E";
"*foreground" = "#CDD6F4";
"*color0" = "#45475A";
"*color8" = "#585B70";
"*color1" = "#F38BA8";
"*color9" = "#F38BA8";
"*color2" = "#A6E3A1";
"*color10" = "#A6E3A1";
"*color3" = "#F9E2AF";
"*color11" = "#F9E2AF";
"*color4" = "#89B4FA";
"*color12" = "#89B4FA";
"*color5" = "#F5C2E7";
"*color13" = "#F5C2E7";
"*color6" = "#94E2D5";
"*color14" = "#94E2D5";
"*color7" = "#BAC2DE";
"*color15" = "#A6ADC8";
};
};
};
};
}

16
modules/default.nix Normal file
View File

@ -0,0 +1,16 @@
{
imports = [
# Programs
./apps
# # System
./components
# ./desktop-environments
# Profiles
./profiles
# Secrets
# ../secrets
];
}

134
modules/profiles/base.nix Normal file
View File

@ -0,0 +1,134 @@
{
lib,
config,
pkgs,
vars,
...
}:
let
cfg = config.base;
in
{
options = {
base = {
enable = lib.mkEnableOption "Enable base in NixOS";
};
};
config = lib.mkIf cfg.enable {
# Custom modules
# Apps
# atuin.enable = true;
# bash.enable = true;
# bat.enable = true;
# boxxy.enable = true;
# btop.enable = true;
direnv.enable = true;
# distrobox.enable = true;
# envfs.enable = true;
# fastfetch.enable = true;
# fd.enable = true;
# fzf.enable = true;
git.enable = true;
# gpg.enable = true;
# helix.enable = true;
# home-managerConfig.enable = true;
# jujutsu.enable = true;
# keyd.enable = false;
# lazygit.enable = true;
# lsd.enable = true;
# mullvad.enable = true;
# navi.enable = true;
# nh.enable = true;
# nix-ld.enable = true;
# nix-index.enable = true;
# nushell.enable = true;
# nvim.enable = true;
# pay-respects.enable = true;
# ripgrep.enable = true;
# ssh.enable = true;
# starship.enable = true;
# tailscale.enable = true;
# tealdeer.enable = true;
# topgrade.enable = true;
# yazi.enable = true;
# yt-dlp.enable = true;
# zen-browser.enable = true;
# zoxide.enable = true;
# zsh.enable = true;
# System
# flatpak.enable = true;
# fonts.enable = true;
# hardening.enable = true;
# mounts.enable = true;
# networking.enable = true;
nixConfig.enable = true;
packages.enable = true;
# pipewire.enable = true;
# secrets.enable = true;
# users.enable = true;
# virtualization.enable = true;
console = {
earlySetup = true;
};
environment = {
homeBinInPath = true;
localBinInPath = true;
shells = with pkgs; [
bashInteractive
zsh
];
systemPackages = with pkgs; [
lm_sensors
pciutils
sops
ssh-to-age
xdg-dbus-proxy
xdg-user-dirs
];
};
i18n = {
defaultLocale = "en_US.UTF-8";
extraLocaleSettings = {
LC_ADDRESS = config.i18n.defaultLocale;
LC_IDENTIFICATION = config.i18n.defaultLocale;
LC_MEASUREMENT = config.i18n.defaultLocale;
LC_MONETARY = config.i18n.defaultLocale;
LC_NAME = config.i18n.defaultLocale;
LC_NUMERIC = config.i18n.defaultLocale;
LC_PAPER = config.i18n.defaultLocale;
LC_TELEPHONE = config.i18n.defaultLocale;
LC_TIME = config.i18n.defaultLocale;
};
};
services = {
cron.enable = true;
dbus.implementation = "broker";
earlyoom = {
enable = true;
freeMemThreshold = 5;
enableNotifications = if vars.desktop then true else false;
};
fstrim.enable = true;
journald = {
extraConfig = ''
SystemMaxUse=50M
'';
};
logrotate.enable = true;
};
systemd = {
extraConfig = ''
DefaultTimeoutStartSec=15s
DefaultTimeoutStopSec=10s
'';
};
system.stateVersion = "23.11";
};
}

View File

@ -0,0 +1,12 @@
{
imports = [
./base.nix
./desktop.nix
# ./gaming.nix
# ./hardening.nix
./unfree.nix
# ./office.nix
./packages.nix
# ./server.nix
];
}

View File

@ -0,0 +1,214 @@
{
lib,
config,
username,
host,
pkgs,
...
}:
let
cfg = config.desktop;
in
{
imports = [
./base.nix
];
options = {
desktop = {
enable = lib.mkEnableOption "Enable desktop in NixOS";
hostMonitorSettings = lib.mkOption {
type = lib.types.str;
default = "hostMonitorSettings";
};
browser = lib.mkOption {
type = lib.types.str;
default = "firefox";
};
terminal = lib.mkOption {
type = lib.types.str;
default = "kitty";
};
};
};
config = lib.mkIf cfg.enable {
# Custom modules
base.enable = true;
catppuccinTheming.enable = true;
# floorp.enable = true;
# kde.enable = true;
# mumble.enable = true;
# office.enable = true;
vscode.enable = true;
# wezterm.enable = true;
# wireshark.enable = true;
# zed.enable = false;
hardware = {
bluetooth = {
enable = true;
settings = {
General = {
AutoEnable = false;
ControllerMode = "bredr";
Experimental = "true";
}; # https://reddit.com/r/NixOS/comments/1aoteqb/keychron_k1_pro_bluetooth_nixos_wkde_install/kq49q9r/?context=3
};
};
enableAllFirmware = true;
i2c.enable = true;
graphics = {
enable = true;
enable32Bit = true;
};
};
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
services = {
# btrfs = {
# autoScrub = {
# enable = true;
# interval = "weekly";
# };
# };
devmon.enable = true;
fwupd.enable = true;
geoclue2 = {
enable = true;
geoProviderUrl = "https://beacondb.net/v1/geolocate";
};
power-profiles-daemon.enable = true;
udev.packages = with pkgs; [ android-udev-rules ];
udisks2 = {
enable = true;
};
};
home-manager.users.${username} =
{
pkgs,
config,
vars,
...
}:
{
home.packages = with pkgs; [
kitty
firefox
filezilla
];
xdg = {
mimeApps =
let
audioPlayer = "org.fooyin.fooyin.desktop";
browser = "app.zen_browser.zen.desktop";
editor = "org.kde.kate.desktop";
imageViewer = "org.kde.gwenview.desktop";
pdfViewer = "org.kde.okular.desktop";
videoPlayer = "org.kde.haruna.desktop";
in
{
enable = true;
defaultApplications =
{
"audio/*" = audioPlayer;
"image/*" = imageViewer;
"video/*" = videoPlayer;
"text/*" = editor;
"text/html" = browser;
"text/plain" = editor;
"application/json" = editor;
"application/pdf" = pdfViewer;
"application/toml" = editor;
"application/x-bat" = editor;
"application/xhtml+xml" = browser;
"application/xml" = editor;
"application/x-shellscript" = editor;
"application/x-yaml" = editor;
"inode/directory" = "org.kde.dolphin.desktop";
"x-scheme-handler/bottles" = "com.usebottles.bottles.desktop";
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
"x-scheme-handler/terminal" = "org.wezfurlong.wezterm.desktop";
}
// lib.optionalAttrs vars.gaming {
"application/x-cue" = "cdemu-client.desktop";
"application/x-msdownload" = "wine.desktop";
"x-scheme-handler/ror2mm" = "r2modman.desktop";
};
};
portal = {
enable = true;
config.common.default = "*";
extraPortals = with pkgs; [
xdg-desktop-portal
xdg-desktop-portal-hyprland
xdg-desktop-portal-gtk
];
configPackages = with pkgs; [
xdg-desktop-portal-gtk
xdg-desktop-portal-hyprland
xdg-desktop-portal
];
};
};
};
# Services to start
services = {
xserver = {
enable = false;
xkb = {
layout = "us";
variant = "";
};
};
greetd = {
enable = true;
vt = 1;
settings = rec {
initial_session = {
user = username;
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; # st>
};
default_session = initial_session;
};
};
smartd = {
enable = false;
autodetect = true;
};
libinput.enable = true;
fstrim.enable = true;
gvfs.enable = true;
openssh.enable = true;
flatpak.enable = false;
printing = {
enable = true;
drivers = [
# pkgs.hplipWithPlugin
];
};
gnome.gnome-keyring.enable = true;
avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
ipp-usb.enable = true;
syncthing = {
enable = true;
user = "${username}";
dataDir = "/home/${username}";
configDir = "/home/${username}/.config/syncthing";
};
pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
rpcbind.enable = false;
nfs.server.enable = false;
};
};
}

View File

@ -0,0 +1,209 @@
{
lib,
inputs,
config,
username,
pkgs,
...
}:
let
cfg = config.packages;
in
{
options = {
packages = {
enable = lib.mkEnableOption "Enable packages in home-manager";
dev = lib.mkOption {
type = lib.types.bool;
default = true;
};
misc = lib.mkOption {
type = lib.types.bool;
default = true;
};
system = lib.mkOption {
type = lib.types.bool;
default = true;
};
};
};
config = lib.mkIf cfg.enable {
environment = {
etc."packages".text =
let
packages = builtins.map (p: "${p.name}") config.environment.systemPackages;
sortedUnique = builtins.sort builtins.lessThan (pkgs.lib.lists.unique packages);
formatted = builtins.concatStringsSep "\n" sortedUnique;
in
formatted;
};
programs.appimage = {
enable = true;
binfmt = true;
};
home-manager.users.${username} =
{
lib,
pkgs,
config,
...
}:
{
home.file = {
current-packages = {
enable = true;
text =
let
packages = builtins.map (p: "${p.name}") config.home.packages;
sortedUnique = builtins.sort builtins.lessThan (pkgs.lib.lists.unique packages);
formatted-hm = builtins.concatStringsSep "\n" sortedUnique;
in
formatted-hm;
target = "${config.xdg.configHome}/packages-hm";
};
};
home.packages =
with pkgs;
[ ]
++ lib.optionals cfg.dev [
# devbox
just
powershell
### Ansible ###
# ansible
# ansible-language-server
# ansible-lint
## Bash ###
bash-language-server
shellcheck
### C ###
clang-tools
cmake-language-server
### Docker ###
docker-compose-language-service
dockerfile-language-server-nodejs
### Go ###
gofumpt
gopls
gotools
#go
delve
### HTML / CSS / JSON ###
vscode-langservers-extracted
### Javascript ###
nodePackages.typescript-language-server
#nodePackages.vscode-json-languageserver
### Lua ###
lua-language-server
### Python ###
black
#python3
#python311Packages.python-lsp-server
ruff
ruff-lsp
### Rust ###
rustup
### Markdown ###
marksman
### Terraform ###
terraform-ls
### TOML ###
taplo-lsp
### YAML ###
nodePackages.yaml-language-server
yamllint
### XML ###
lemminx
]
++ lib.optionals cfg.misc [
angle-grinder
bandwhich
binsider
csvlens
flawz
glow
gping
hexyl
hyperfine
impala
jiq
jq
lazydocker
mkvtoolnix-cli
streamrip
systemctl-tui
television
termscp
ttysvr
wikiman
yq
## unix alts ##
choose # cut
dogdns # dig
dua # du
duf # df
#fuc # cp / rm
ouch # compression
pigz # gz
procs # ps
rclone # rsync
sd # sed
writedisk # dd
xh # curl
## Nix ##
comma
inputs.nsearch.packages.${pkgs.system}.default
manix
nixd
nix-init
nix-update
nixfmt-rfc-style
nixpkgs-review
nixos-shell
(writeShellApplication {
name = "nos";
runtimeInputs = [
coreutils
fzf
optinix
ripgrep
];
text = ''
optinix get --no-tui | rg 'Name: ' | cut -d' ' -f2 | fzf --preview='optinix get --no-tui "{}"'
'';
})
(writeShellApplication {
name = "nps";
runtimeInputs = [
fzf
inputs.nsearch.packages.${pkgs.system}.default
];
text = ''
export NSEARCH_FZF_CMD="fzf --multi --bind=ctrl-space:select --bind=alt-space:deselect"
nsearch
'';
})
nvd
optinix
statix
]
++ lib.optionals cfg.system [
(_7zz.override { enableUnfree = true; })
aspell
aspellDicts.en
killall
libnotify
kmon
p7zip
repgrep
unrar
unzip
usbutils
viu
wget
xclip
zip
];
};
};
}

View File

@ -0,0 +1,20 @@
{
lib,
config,
pkgs,
vars,
...
}:
let
cfg = config.unfree;
in
{
options = {
unfree = {
enable = lib.mkEnableOption "Enable unfree in NixOS";
};
};
config = lib.mkIf cfg.enable {
nixpkgs.config.allowUnfree = true;
};
}

13
packages/overlay.nix Normal file
View File

@ -0,0 +1,13 @@
(final: prev: {
plymouth = prev.plymouth.overrideAttrs (
{ src, ... }:
{
version = "24.004.60-unstable-2024-12-15";
src = src.override {
rev = "a0e8b6cf50114482e8b5d17ac2e99ff0f274d4c5";
hash = "sha256-XRSWdmGnckIGdsX7ihXK0RV3X9OphtGZcKQ6IW9FUBo=";
};
}
);
})

1
result Symbolic link
View File

@ -0,0 +1 @@
/nix/store/0dd2ni8qpm9rkcfirs00jjfj1hfp21z1-nixos-vm

BIN
thalia-dev.qcow2 Normal file

Binary file not shown.

7
users/default.nix Normal file
View File

@ -0,0 +1,7 @@
{
imports = [
./ryan
# ./ai
./pvi
];
}

29
users/pvi/default.nix Normal file
View File

@ -0,0 +1,29 @@
{
lib,
config,
...
}:
let
cfg = config.pvi;
username = "pvi";
in
{
options = {
${username} = {
enable = lib.mkEnableOption "Enable porn account in NixOS & home-manager";
};
};
config = lib.mkIf cfg.enable {
users.users = {
${username} = {
initialPassword = "'";
isNormalUser = true;
};
};
home-manager.users.${username} =
{ pkgs, ... }:
{
home.stateVersion = "23.11";
};
};
}

34
users/ryan/default.nix Normal file
View File

@ -0,0 +1,34 @@
{
lib,
config,
...
}:
let
createUserScaffold = import ../scaffold.nix;
cfg = config.ryan;
username = "ryan";
fullname = "Ryan Pandya";
in
{
options = {
${username} = {
enable = lib.mkEnableOption "Enable ${fullname} account in NixOS & home-manager";
};
};
config = lib.mkIf cfg.enable {
users.users = {
${username} = {
initialPassword = "'";
isNormalUser = true;
extraGroups = [
"wheel"
];
};
};
home-manager.users.${username} =
{ pkgs, ... }:
{
home.stateVersion = "23.11";
};
};
}