forked from Shinonome/alt-illogical-impulse
fix: add wayland dev headers and scanner for pywayland build on NixOS
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
# Configuration management for dots-hyprland
|
||||
# Replicates the installer's rsync behavior exactly
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.programs.dots-hyprland.configuration;
|
||||
mainCfg = config.programs.dots-hyprland;
|
||||
in
|
||||
{
|
||||
options.programs.dots-hyprland.configuration = {
|
||||
enable = mkEnableOption "dots-hyprland configuration management";
|
||||
|
||||
source = mkOption {
|
||||
type = types.path;
|
||||
description = "Source path for dots-hyprland configuration";
|
||||
example = "inputs.dots-hyprland";
|
||||
};
|
||||
|
||||
copyMiscConfig = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Copy miscellaneous config files (everything except fish and hypr)";
|
||||
};
|
||||
|
||||
copyFishConfig = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Copy fish shell configuration";
|
||||
};
|
||||
|
||||
copyHyprlandConfig = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Copy Hyprland configuration";
|
||||
};
|
||||
|
||||
# Individual application enable options
|
||||
applications = {
|
||||
foot = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enable foot terminal configuration";
|
||||
};
|
||||
};
|
||||
|
||||
kitty = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enable kitty terminal configuration";
|
||||
};
|
||||
};
|
||||
|
||||
fuzzel = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enable fuzzel launcher configuration";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
# Replicate installer's MISC config copying
|
||||
# "for i in $(find .config/ -mindepth 1 -maxdepth 1 ! -name 'fish' ! -name 'hypr' -exec basename {} \;)"
|
||||
xdg.configFile = mkMerge [
|
||||
# MISC configs (everything except fish and hypr)
|
||||
(mkIf cfg.copyMiscConfig (
|
||||
let
|
||||
# Get all directories in .config except fish, hypr, and quickshell (quickshell handled specially)
|
||||
# Now with individual enable options
|
||||
configDirs = lib.optionals cfg.applications.kitty.enable [ "kitty" ] ++
|
||||
lib.optionals cfg.applications.foot.enable [ "foot" ] ++
|
||||
lib.optionals cfg.applications.fuzzel.enable [ "fuzzel" ] ++
|
||||
[ "wlogout" ]; # Always enabled applications
|
||||
|
||||
configFiles = listToAttrs (map (dir: {
|
||||
name = dir;
|
||||
value = {
|
||||
source = "${cfg.source}/.config/${dir}";
|
||||
recursive = true;
|
||||
};
|
||||
}) configDirs);
|
||||
in
|
||||
configFiles
|
||||
))
|
||||
|
||||
# Fish configuration
|
||||
(mkIf cfg.copyFishConfig {
|
||||
"fish" = {
|
||||
source = "${cfg.source}/.config/fish";
|
||||
recursive = true;
|
||||
};
|
||||
})
|
||||
|
||||
# Hyprland configuration (special handling like installer)
|
||||
(mkIf cfg.copyHyprlandConfig {
|
||||
# Copy hypr directory excluding specific files
|
||||
# rsync -av --delete --exclude '/custom' --exclude '/hyprlock.conf' --exclude '/hypridle.conf' --exclude '/hyprland.conf'
|
||||
"hypr" = {
|
||||
source = pkgs.runCommand "hypr-config-filtered" {} ''
|
||||
mkdir -p $out
|
||||
|
||||
# Copy everything from source hypr directory
|
||||
cp -r ${cfg.source}/.config/hypr/* $out/ 2>/dev/null || true
|
||||
|
||||
# Remove excluded files (replicating installer --exclude logic)
|
||||
rm -rf $out/custom 2>/dev/null || true
|
||||
rm -f $out/hyprlock.conf 2>/dev/null || true
|
||||
rm -f $out/hypridle.conf 2>/dev/null || true
|
||||
rm -f $out/hyprland.conf 2>/dev/null || true
|
||||
|
||||
# Ensure we have the directory structure
|
||||
mkdir -p $out
|
||||
'';
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
# Copy the main config files separately (installer does this)
|
||||
"hypr/hyprland.conf" = {
|
||||
source = "${cfg.source}/.config/hypr/hyprland.conf";
|
||||
};
|
||||
"hypr/hypridle.conf" = {
|
||||
source = "${cfg.source}/.config/hypr/hypridle.conf";
|
||||
};
|
||||
"hypr/hyprlock.conf" = {
|
||||
source = "${cfg.source}/.config/hypr/hyprlock.conf";
|
||||
};
|
||||
})
|
||||
];
|
||||
|
||||
# Copy .local/share files (replicating installer)
|
||||
home.file = {
|
||||
".local/share/icons" = mkIf cfg.copyMiscConfig {
|
||||
source = "${cfg.source}/.local/share/icons";
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
# konsole removed - managed by kde-material-you-colors
|
||||
};
|
||||
|
||||
# Ensure XDG directories exist (installer creates these)
|
||||
home.activation.createXdgDirs = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
||||
$DRY_RUN_CMD mkdir -p $HOME/.local/bin
|
||||
$DRY_RUN_CMD mkdir -p $HOME/.cache
|
||||
$DRY_RUN_CMD mkdir -p $HOME/.config
|
||||
$DRY_RUN_CMD mkdir -p $HOME/.local/share
|
||||
'';
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user