Files

246 lines
8.3 KiB
Nix

{
description = "NixOS adaptation of end-4's dots-hyprland - self-contained installer replication";
inputs = {
nixpkgs.url = "github:nvmd/nixpkgs";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, home-manager, ... }:
let
systems = [ "x86_64-linux" "aarch64-linux" ];
forAllSystems = nixpkgs.lib.genAttrs systems;
pkgsFor = system: import nixpkgs {
inherit system;
overlays = [ self.overlays.default ];
};
in
{
overlays.default = final: prev: {
quickshell = prev.quickshell.overrideAttrs (old: {
buildInputs = (old.buildInputs or []) ++ [ final.qt6.qt5compat final.qt6.qtpositioning ];
qtWrapperArgs = (old.qtWrapperArgs or []) ++ [
"--prefix" "NIXPKGS_QT6_QML_IMPORT_PATH" ":" "${final.qt6.qt5compat}/lib/qt-6/qml"
"--prefix" "NIXPKGS_QT6_QML_IMPORT_PATH" ":" "${final.qt6.qtpositioning}/lib/qt-6/qml"
];
});
# Patch kde-material-you-colors for non-Plasma systems
kde-material-you-colors = (prev.python312Packages.kde-material-you-colors.overrideAttrs (old: {
pname = "kde-material-you-colors-patched";
nativeBuildInputs = (old.nativeBuildInputs or []) ++ [ prev.makeWrapper ];
postInstall = (old.postInstall or "") + ''
# Patch konsole_utils.py to use exist_ok=True
substituteInPlace $out/lib/python*/site-packages/kde_material_you_colors/utils/konsole_utils.py \
--replace-fail 'os.makedirs(settings.KONSOLE_DIR)' 'os.makedirs(settings.KONSOLE_DIR, exist_ok=True)'
# Patch kwin_utils.py to skip KWin reload (crashes on non-KDE systems)
substituteInPlace $out/lib/python*/site-packages/kde_material_you_colors/utils/kwin_utils.py \
--replace-fail 'def reload():' $'def reload():\n return # Skip on non-KDE'
# Create stub plasma-apply-colorscheme
cat > $out/bin/plasma-apply-colorscheme << 'EOF'
#!/bin/sh
exit 0
EOF
chmod +x $out/bin/plasma-apply-colorscheme
# Wrap to use our stub
wrapProgram $out/bin/kde-material-you-colors \
--prefix PATH : $out/bin
'';
}));
};
packages = forAllSystems (system:
let
pkgs = pkgsFor system;
utilityPackages = import ./packages { inherit pkgs; };
in utilityPackages // {
default = utilityPackages.update-flake;
}
);
devShells = forAllSystems (system:
let
pkgs = pkgsFor system;
utilityPackages = import ./packages { inherit pkgs; };
in {
default = pkgs.mkShell {
buildInputs = with pkgs; [
nixpkgs-fmt
nil
git
jq
] ++ (with utilityPackages; [
update-flake
test-python-env
test-quickshell
compare-modes
]);
shellHook = builtins.readFile ./packages/scripts/dev-shell-hook.sh;
};
}
);
homeManagerModules.default = import ./modules/home-manager.nix;
homeManagerModules.dots-hyprland = self.homeManagerModules.default;
nixosModules.default = import ./modules/components/system-services.nix;
nixosModules.dots-hyprland = self.nixosModules.default;
homeConfigurations = {
declarative = home-manager.lib.homeManagerConfiguration {
pkgs = pkgsFor "x86_64-linux";
modules = [
self.homeManagerModules.default
{
home.username = "celes";
home.homeDirectory = "/home/celes";
home.stateVersion = "24.05";
programs.dots-hyprland = {
enable = true;
source = ./configs; # Use local configs
packageSet = "essential";
mode = "hybrid";
# 🎨 Quickshell Configuration
quickshell = {
appearance = {
extraBackgroundTint = true;
fakeScreenRounding = 2; # When not fullscreen
transparency = false;
};
bar = {
bottom = false; # Top bar
cornerStyle = 0; # Hug style
topLeftIcon = "spark";
showBackground = true;
verbose = true;
utilButtons = {
showScreenSnip = true;
showColorPicker = true; # 🎯 Enable color picker!
showMicToggle = false;
showKeyboardToggle = true;
showDarkModeToggle = true;
showPerformanceProfileToggle = false;
};
workspaces = {
monochromeIcons = true;
shown = 10;
showAppIcons = true;
alwaysShowNumbers = false;
showNumberDelay = 300;
};
};
battery = {
low = 20;
critical = 5;
automaticSuspend = true;
suspend = 3;
};
apps = {
terminal = "foot";
bluetooth = "kcmshell6 kcm_bluetooth";
network = "plasmawindowed org.kde.plasma.networkmanagement";
taskManager = "plasma-systemmonitor --page-name Processes";
};
time = {
format = "hh:mm";
dateFormat = "ddd, dd/MM";
};
};
# 🖥️ Hyprland Configuration
hyprland = {
general = {
gapsIn = 4;
gapsOut = 7;
borderSize = 2;
allowTearing = false;
};
decoration = {
rounding = 16;
blurEnabled = true;
};
gestures = {
workspaceSwipe = true;
};
monitors = [
# Add your monitor config here, e.g.:
# "eDP-1,1920x1080@60,0x0,1"
];
};
# 🖥️ Terminal Configuration
terminal = {
scrollback = {
lines = 1000;
multiplier = 3.0;
};
cursor = {
style = "beam";
blink = false;
beamThickness = 1.5;
};
colors = {
alpha = 0.95;
};
mouse = {
hideWhenTyping = false;
alternateScrollMode = true;
};
};
};
}
];
};
writable = home-manager.lib.homeManagerConfiguration {
pkgs = pkgsFor "x86_64-linux";
modules = [
self.homeManagerModules.default
{
home.username = "celes";
home.homeDirectory = "/home/celes";
home.stateVersion = "24.05";
programs.dots-hyprland = {
enable = true;
source = ./configs; # Use local configs
packageSet = "essential";
mode = "writable";
writable = {
stagingDir = ".configstaging";
setupScript = "initialSetup.sh";
backupExisting = true;
};
};
}
];
};
example = self.homeConfigurations.declarative;
};
};
}