Files
alt-illogical-impulse/flake.nix
T
Celes Renata 9821e69f5c Implement rich NixOS configuration system
 COMPLETE: Full NixOS-style configuration system implemented

🎯 Features:
- Rich configuration options for Quickshell, Hyprland, and Terminal
- Type-safe NixOS module options with defaults and descriptions
- Generated configuration files from Nix expressions
- Example configurations (gaming, productivity, minimalist)
- Comprehensive documentation

🔧 Configuration Modules:
- modules/components/quickshell-config.nix - Quickshell options
- modules/components/hyprland-config.nix - Hyprland options
- modules/components/terminal-config.nix - Terminal options

📝 Example Usage:
programs.dots-hyprland = {
  quickshell.bar.utilButtons.showColorPicker = true;
  hyprland.general.gapsIn = 6;
  terminal.colors.alpha = 0.90;
};

🎨 Generated Files:
- ~/.config/quickshell/ii/modules/common/Config.qml (NixOS-managed)
- ~/.config/hypr/general.conf (NixOS-managed)
- ~/.config/foot/foot.ini (NixOS-managed)

 Tested: All configurations build and activate successfully
🎉 Ready for production use with full NixOS declarative configuration!
2025-08-08 23:10:33 -07:00

200 lines
6.2 KiB
Nix

{
description = "NixOS adaptation of end-4's dots-hyprland - self-contained installer replication";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
quickshell.url = "github:outfoxxed/quickshell";
};
outputs = { self, nixpkgs, home-manager, quickshell, ... }:
let
system = "x86_64-linux";
pkgs = import nixpkgs {
inherit system;
overlays = [ self.overlays.default ];
};
# Import our utility packages
utilityPackages = import ./packages { inherit pkgs; };
in
{
overlays.default = final: prev: {
quickshell = quickshell.packages.${system}.default;
};
packages.${system} = utilityPackages // {
default = utilityPackages.update-flake;
};
devShells.${system}.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;
homeConfigurations = {
declarative = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
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 = "declarative";
# 🎨 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 {
inherit pkgs;
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;
};
};
}